Name: series-workflow9xh9q Phase: Succeeded StartedAt: 2026-09-04 22:00:35 +0000 UTC FinishedAt: 2026-09-05 02:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[0] Phase: Succeeded StartedAt: 2026-09-04 22:00:35 +0000 UTC FinishedAt: 2026-09-04 22:48:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 22:00:35 +0000 UTC FinishedAt: 2026-09-04 22:48:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_NETLINK", "NETFILTER_NETLINK_HOOK", "NF_TABLES", "NF_CONNTRACK", "NF_NAT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_NETLINK", "NETFILTER_NETLINK_HOOK", "NF_TABLES", "NF_CONNTRACK", "NF_NAT" ], "series_id": "66fb7276-aac5-4d9c-92e3-457c05c3cdcb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfnl_hook_dump", "nfnl_hook_dump_nat", "nfnl_hook_dump_start", "nfnl_hook_get", "nf_nat_register_fn", "nf_nat_unregister_fn", "nf_register_net_hook", "nf_unregister_net_hook" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19IT09LJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZubF9ob29rX2R1bXAmIzM0OywKICAgICYjMzQ7bmZubF9ob29rX2R1bXBfbmF0JiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O25mbmxfaG9va19nZXQmIzM0OywKICAgICYjMzQ7bmZfbmF0X3JlZ2lzdGVyX2ZuJiMzNDssCiAgICAmIzM0O25mX25hdF91bnJlZ2lzdGVyX2ZuJiMzNDssCiAgICAmIzM0O25mX3JlZ2lzdGVyX25ldF9ob29rJiMzNDssCiAgICAmIzM0O25mX3VucmVnaXN0ZXJfbmV0X2hvb2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgKSB0byBuZXRmaWx0ZXIgYW5kIE5BVCBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiB0byBwcm92aWRlIGR1bXAgY29uc2lzdGVuY3kgZGV0ZWN0aW9uIGluIGBuZm5ldGxpbmtfaG9vay5jYC5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIHN0cnVjdHVyZSBidWZmZXIgbGVuZ3RocyBpbiBhIHdheSB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIE5ldGxpbmsgY2FsbGJhY2tzIGBjYi1cdTAwM2VhcmdzYCBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0sIGFuZCBgc3RydWN0IG5ldG5zX25mYCBzZXF1ZW5jZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdCgpYC5cbi0gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGRlcmVmZXJlbmNpbmcsIGxpc3QgdHJhdmVyc2FsIGJvdW5kcywgb3IgaG9vayBlbnRyeSBsaWZlY3ljbGVzLCB3aGljaCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNlcXVlbmNlIHRyYWNraW5nIChob29rX2Jhc2Vfc2VxIGFuZCBuYXRfaG9va19iYXNlX3NlcSkgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBkdXJpbmcgbmV0bGluayBkdW1wIG9mIG5ldGZpbHRlciBhbmQgTkFUIGhvb2tzLCByZWZhY3RvcmluZyB0aGUgZHVtcCBpdGVyYXRpb24gYW5kIHJlc3RhcnQvY29uc2lzdGVuY3kgdmVyaWZpY2F0aW9uIGluIG5mbmV0bGlua19ob29rLmMsIGFuZCBidW1waW5nIHRoZSBzZXF1ZW5jZSBudW1iZXJzIHVwb24gaG9vayByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gaW4gY29yZS5jIGFuZCBuZl9uYXRfY29yZS5jLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIGFuZCBuZXRmaWx0ZXIgaG9vayBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgbmV0bGluayBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzA5ZDU4NzhlOGRjZDQ4ZjFhMGEzOWI2M2Q2MWU5YzZiOWVjYmEzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMjI6NDc6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxuaW5kZXggYTZhMGJmNGEyNDdlNS4uN2ZkNzgzOTRkMWU3YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxuQEAgLTMzLDUgJiM0MzszMyw3IEBAIHN0cnVjdCBuZXRuc19uZiB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RFRlJBR19JUFY2KVxuIFx0dW5zaWduZWQgaW50IGRlZnJhZ19pcHY2X3VzZXJzO1xuICNlbmRpZlxuJiM0MztcdHVuc2lnbmVkIGludCBob29rX2Jhc2Vfc2VxO1xuJiM0MztcdHVuc2lnbmVkIGludCBuYXRfaG9va19iYXNlX3NlcTtcbiB9O1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvY29yZS5jIGIvbmV0L25ldGZpbHRlci9jb3JlLmNcbmluZGV4IDY3NWExMDM0YjM0MDAuLmEyODRiMzI0MTIxMWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9jb3JlLmNcbkBAIC0zODYsNiAmIzQzOzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuZl9zdGF0aWNfa2V5X2RlYyhjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgaW50IHBmKVxuICNlbmRpZlxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgmIzQzOyYjNDM7YmFzZV9zZXEgPT0gMClcbiYjNDM7XHRcdDtcbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpXG4ge1xuQEAgLTQyOCw2ICYjNDM7NDM3LDcgQEAgc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0bmV3X2hvb2tzID0gbmZfaG9va19lbnRyaWVzX2dyb3cocCwgcmVnKTtcbiBcbiBcdGlmICghSVNfRVJSKG5ld19ob29rcykpIHtcbiYjNDM7XHRcdGJ1bXBfaG9va19iYXNlX3NlcShuZXQpO1xuIFx0XHRob29rc192YWxpZGF0ZShuZXdfaG9va3MpO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKnBwLCBuZXdfaG9va3MpO1xuIFx0fVxuQEAgLTUwNiw2ICYjNDM7NTE2LDcgQEAgc3RhdGljIHZvaWQgX19uZl91bnJlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0XHRcdG5ldF9kZWNfZWdyZXNzX3F1ZXVlKCk7XG4gI2VuZGlmXG4gXHRcdG5mX3N0YXRpY19rZXlfZGVjKHJlZywgcGYpO1xuJiM0MztcdFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7aG9vayBub3QgZm91bmQsIHBmICVkIG51bSAlZFwmIzM0OywgcGYsIHJlZy1cdTAwM2Vob29rbnVtKTtcbiBcdH1cbkBAIC03ODQsNiAmIzQzOzc5NSw4IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZXRmaWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiAjZW5kaWZcbiYjNDM7XHRuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSA9IDE7XG4mIzQzO1x0bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxID0gMTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbmluZGV4IDhhYzMyNmUxZWI1YmEuLmZmMmNiYThkZjg4NjEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuQEAgLTExNjAsNiAmIzQzOzExNjAsMTUgQEAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gfVxuICNlbmRpZlxuIFxuJiM0MztzdGF0aWMgdm9pZCBidW1wX25hdF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoJiM0MzsmIzQzO2Jhc2Vfc2VxID09IDApXG4mIzQzO1x0XHQ7XG4mIzQzO1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBuZl9jdF9oZWxwZXJfZXhwZWN0Zm4gZm9sbG93X21hc3Rlcl9uYXQgPSB7XG4gXHQubmFtZVx0XHQ9IFwmIzM0O25hdC1mb2xsb3ctbWFzdGVyXCYjMzQ7LFxuIFx0LmV4cGVjdGZuXHQ9IG5mX25hdF9mb2xsb3dfbWFzdGVyLFxuQEAgLTEyNDUsOCAmIzQzOzEyNTQsMTAgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbiBcdH1cbiBcbiBcdHJldCA9IG5mX2hvb2tfZW50cmllc19pbnNlcnRfcmF3KFx1MDAyNnByaXYtXHUwMDNlZW50cmllcywgb3BzKTtcbi1cdGlmIChyZXQgPT0gMClcbiYjNDM7XHRpZiAocmV0ID09IDApIHtcbiYjNDM7XHRcdGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTtcbiBcdFx0bmF0X3Byb3RvX25ldC1cdTAwM2V1c2VycyYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTEyODQsNiAmIzQzOzEyOTUsNyBAQCB2b2lkIG5mX25hdF91bnJlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcdHByaXYgPSBuYXRfb3BzW2hvb2tudW1dLnByaXY7XG4gXHRuZl9ob29rX2VudHJpZXNfZGVsZXRlX3JhdyhcdTAwMjZwcml2LVx1MDAzZWVudHJpZXMsIG9wcyk7XG4mIzQzO1x0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xuIFxuIFx0aWYgKG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMgPT0gMCkge1xuIFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG5pbmRleCA5NTAwNWU5YTYwNjY4Li4yMWE3NTkxNjhjMzg0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbkBAIC01NCw3ICYjNDM7NTQsNiBAQCBzdGF0aWMgaW50IG5mX25ldGxpbmtfZHVtcF9zdGFydF9yY3Uoc3RydWN0IHNvY2sgKm5sc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEge1xuIFx0Y2hhciBkZXZuYW1lW0lGTkFNU0laXTtcbi1cdHVuc2lnbmVkIGxvbmcgaGVhZHY7XG4gXHR1OCBob29rO1xuIH07XG4gXG5AQCAtMzM4LDI3ICYjNDM7MzM3LDQ4IEBAIG5mbmxfaG9va19lbnRyaWVzX2hlYWQodTggcGYsIHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKmRlXG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcbi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxuLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuLVx0XHRcdCAgICAgIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBzZXEpXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsIGludCBmYW1pbHkpXG4ge1xuIFx0c3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2ID0gb3BzLVx1MDAzZXByaXY7XG4tXHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXHUwMDNlZW50cmllcyk7XG4mIzQzO1x0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLVx1MDAzZWRhdGE7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wcztcbi1cdGludCBpLCBlcnI7XG4mIzQzO1x0dW5zaWduZWQgaW50IGkgPSBjYi1cdTAwM2VhcmdzWzFdO1xuJiM0MztcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmU7XG4mIzQzO1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxO1xuJiM0MztcdGludCBlcnIgPSAwO1xuIFxuJiM0MztcdGJhc2Vfc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xuJiM0MztcbiYjNDM7XHRlID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXHUwMDNlZW50cmllcyk7XG4gXHRpZiAoIWUpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4gXHRuYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG5hdF9vcHNbaV0sXG4tXHRcdFx0XHRcdCBvcHMtXHUwMDNlcHJpb3JpdHksIGZhbWlseSwgc2VxKTtcbiYjNDM7XHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsXG4mIzQzO1x0XHRcdFx0XHQgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLFxuJiM0MztcdFx0XHRcdFx0IG9wcy1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxuJiM0MztcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdH1cbi1cdHJldHVybiAwO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKCFlcnIpIHtcbiYjNDM7XHRcdGkgPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRjYi1cdTAwM2VhcmdzWzFdID0gaTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNiLVx1MDAzZWFyZ3NbMl0gXHUwMDI2XHUwMDI2IGJhc2Vfc2VxICE9IGNiLVx1MDAzZWFyZ3NbMl0pIHtcbiYjNDM7XHRcdGNiLVx1MDAzZXNlcSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVFI7XG4mIzQzO1x0fVxuJiM0MztcdGNiLVx1MDAzZWFyZ3NbMl0gPSBiYXNlX3NlcTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG5AQCAtMzczLDM1ICYjNDM7MzkzLDMxIEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIFx0dW5zaWduZWQgaW50IGkgPSBjYi1cdTAwM2VhcmdzWzBdO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGNiLVx1MDAzZXNlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXEpO1xuIFxuIFx0ZSA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBjdHgtXHUwMDNlaG9vaywgbmV0LCBjdHgtXHUwMDNlZGV2bmFtZSk7XG4tXHRpZiAoIWUpXG4mIzQzO1x0aWYgKCFlIHx8IElTX0VSUihlKSlcbiBcdFx0Z290byBkb25lO1xuIFxuLVx0aWYgKElTX0VSUihlKSkge1xuLVx0XHRjYi1cdTAwM2VzZXEmIzQzOyYjNDM7O1xuLVx0XHRnb3RvIGRvbmU7XG4tXHR9XG4tXG4tXHRpZiAoKHVuc2lnbmVkIGxvbmcpZSAhPSBjdHgtXHUwMDNlaGVhZHYgfHwgaSBcdTAwM2U9IGUtXHUwMDNlbnVtX2hvb2tfZW50cmllcylcbi1cdFx0Y2ItXHUwMDNlc2VxJiM0MzsmIzQzOztcbi1cbiBcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4gXG4gXHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAob3BzW2ldLVx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXG4tXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjdHgsIG9wc1tpXSwgZmFtaWx5LFxuLVx0XHRcdFx0XHRcdCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sXG4tXHRcdFx0XHRcdFx0IG9wc1tpXS1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxuJiM0MztcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY3VyLVx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXG4mIzQzO1x0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcbiYjNDM7XHRcdGVsc2Uge1xuJiM0MztcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxuJiM0MztcdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4gXHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuJiM0MztcdFx0fVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIGRvbmU6XG4tXHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xuJiM0MztcdGlmIChubHNrYi1cdTAwM2VsZW4gXHUwMDNlIDApXG4mIzQzO1x0XHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRjYi1cdTAwM2VhcmdzWzBdID0gaTtcbiBcdHJldHVybiBubHNrYi1cdTAwM2VsZW47XG5AQCAtNDQyLDEwICYjNDM7NDU4LDcgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0c3Ryc2NweShjdHgtXHUwMDNlZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC1cdTAwM2VkZXZuYW1lKSk7XG4tXHRjdHgtXHUwMDNlaGVhZHYgPSAodW5zaWduZWQgbG9uZyloZWFkO1xuIFx0Y3R4LVx1MDAzZWhvb2sgPSBob29rbnVtO1xuLVxuLVx0Y2ItXHUwMDNlc2VxID0gMTtcbiBcdGNiLVx1MDAzZWRhdGEgPSBjdHg7XG4gXG4gXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTksmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfSE9PSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX05BVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mbmxfaG9va19kdW1wJiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX25hdCYjMzQ7LAogICAgJiMzNDtuZm5sX2hvb2tfZHVtcF9zdGFydCYjMzQ7LAogICAgJiMzNDtuZm5sX2hvb2tfZ2V0JiMzNDssCiAgICAmIzM0O25mX25hdF9yZWdpc3Rlcl9mbiYjMzQ7LAogICAgJiMzNDtuZl9uYXRfdW5yZWdpc3Rlcl9mbiYjMzQ7LAogICAgJiMzNDtuZl9yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7LAogICAgJiMzNDtuZl91bnJlZ2lzdGVyX25ldF9ob29rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNlcXVlbmNlIHRyYWNraW5nIChob29rX2Jhc2Vfc2VxIGFuZCBuYXRfaG9va19iYXNlX3NlcSkgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBkdXJpbmcgbmV0bGluayBkdW1wIG9mIG5ldGZpbHRlciBhbmQgTkFUIGhvb2tzLCByZWZhY3RvcmluZyB0aGUgZHVtcCBpdGVyYXRpb24gYW5kIHJlc3RhcnQvY29uc2lzdGVuY3kgdmVyaWZpY2F0aW9uIGluIG5mbmV0bGlua19ob29rLmMsIGFuZCBidW1waW5nIHRoZSBzZXF1ZW5jZSBudW1iZXJzIHVwb24gaG9vayByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gaW4gY29yZS5jIGFuZCBuZl9uYXRfY29yZS5jLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIGFuZCBuZXRmaWx0ZXIgaG9vayBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgbmV0bGluayBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzA5ZDU4NzhlOGRjZDQ4ZjFhMGEzOWI2M2Q2MWU5YzZiOWVjYmEzMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjI6NDc6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oCmluZGV4IGE2YTBiZjRhMjQ3ZTUuLjdmZDc4Mzk0ZDFlN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oCkBAIC0zMyw1ICYjNDM7MzMsNyBAQCBzdHJ1Y3QgbmV0bnNfbmYgewogI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RFRlJBR19JUFY2KQogCXVuc2lnbmVkIGludCBkZWZyYWdfaXB2Nl91c2VyczsKICNlbmRpZgomIzQzOwl1bnNpZ25lZCBpbnQgaG9va19iYXNlX3NlcTsKJiM0MzsJdW5zaWduZWQgaW50IG5hdF9ob29rX2Jhc2Vfc2VxOwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwppbmRleCA2NzVhMTAzNGIzNDAwLi5hMjg0YjMyNDEyMTFkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwpAQCAtMzg2LDYgJiM0MzszODYsMTUgQEAgc3RhdGljIHZvaWQgbmZfc3RhdGljX2tleV9kZWMoY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsIGludCBwZikKICNlbmRpZgogfQogCiYjNDM7c3RhdGljIHZvaWQgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEpOwomIzQzOwomIzQzOwl3aGlsZSAoJiM0MzsmIzQzO2Jhc2Vfc2VxID09IDApCiYjNDM7CQk7CiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7bmV0LSZndDtuZi5ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLAogCQkJCSAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpCiB7CkBAIC00MjgsNiAmIzQzOzQzNyw3IEBAIHN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZiwKIAluZXdfaG9va3MgPSBuZl9ob29rX2VudHJpZXNfZ3JvdyhwLCByZWcpOwogCiAJaWYgKCFJU19FUlIobmV3X2hvb2tzKSkgewomIzQzOwkJYnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7CiAJCWhvb2tzX3ZhbGlkYXRlKG5ld19ob29rcyk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcigqcHAsIG5ld19ob29rcyk7CiAJfQpAQCAtNTA2LDYgJiM0Mzs1MTYsNyBAQCBzdGF0aWMgdm9pZCBfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsCiAJCQluZXRfZGVjX2VncmVzc19xdWV1ZSgpOwogI2VuZGlmCiAJCW5mX3N0YXRpY19rZXlfZGVjKHJlZywgcGYpOwomIzQzOwkJYnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7CiAJfSBlbHNlIHsKIAkJV0FSTl9PTkNFKDEsICYjMzQ7aG9vayBub3QgZm91bmQsIHBmICVkIG51bSAlZCYjMzQ7LCBwZiwgcmVnLSZndDtob29rbnVtKTsKIAl9CkBAIC03ODQsNiAmIzQzOzc5NSw4IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZXRmaWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAjZW5kaWYKJiM0MzsJbmV0LSZndDtuZi5ob29rX2Jhc2Vfc2VxID0gMTsKJiM0MzsJbmV0LSZndDtuZi5uYXRfaG9va19iYXNlX3NlcSA9IDE7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwppbmRleCA4YWMzMjZlMWViNWJhLi5mZjJjYmE4ZGY4ODYxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCkBAIC0xMTYwLDYgJiM0MzsxMTYwLDE1IEBAIG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXAoc3RydWN0IG5mX2Nvbm4gKmN0LAogfQogI2VuZGlmCiAKJiM0MztzdGF0aWMgdm9pZCBidW1wX25hdF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtJmd0O25mLm5hdF9ob29rX2Jhc2Vfc2VxKTsKJiM0MzsKJiM0MzsJd2hpbGUgKCYjNDM7JiM0MztiYXNlX3NlcSA9PSAwKQomIzQzOwkJOwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO25ldC0mZ3Q7bmYubmF0X2hvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBmb2xsb3dfbWFzdGVyX25hdCA9IHsKIAkubmFtZQkJPSAmIzM0O25hdC1mb2xsb3ctbWFzdGVyJiMzNDssCiAJLmV4cGVjdGZuCT0gbmZfbmF0X2ZvbGxvd19tYXN0ZXIsCkBAIC0xMjQ1LDggJiM0MzsxMjU0LDEwIEBAIGludCBuZl9uYXRfcmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsCiAJfQogCiAJcmV0ID0gbmZfaG9va19lbnRyaWVzX2luc2VydF9yYXcoJmFtcDtwcml2LSZndDtlbnRyaWVzLCBvcHMpOwotCWlmIChyZXQgPT0gMCkKJiM0MzsJaWYgKHJldCA9PSAwKSB7CiYjNDM7CQlidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7CiAJCW5hdF9wcm90b19uZXQtJmd0O3VzZXJzJiM0MzsmIzQzOzsKJiM0MzsJfQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7bmZfbmF0X3Byb3RvX211dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtMTI4NCw2ICYjNDM7MTI5NSw3IEBAIHZvaWQgbmZfbmF0X3VucmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsCiAJCWdvdG8gdW5sb2NrOwogCXByaXYgPSBuYXRfb3BzW2hvb2tudW1dLnByaXY7CiAJbmZfaG9va19lbnRyaWVzX2RlbGV0ZV9yYXcoJmFtcDtwcml2LSZndDtlbnRyaWVzLCBvcHMpOwomIzQzOwlidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7CiAKIAlpZiAobmF0X3Byb3RvX25ldC0mZ3Q7dXNlcnMgPT0gMCkgewogCQluZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMKaW5kZXggOTUwMDVlOWE2MDY2OC4uMjFhNzU5MTY4YzM4NCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYwpAQCAtNTQsNyAmIzQzOzU0LDYgQEAgc3RhdGljIGludCBuZl9uZXRsaW5rX2R1bXBfc3RhcnRfcmN1KHN0cnVjdCBzb2NrICpubHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSB7CiAJY2hhciBkZXZuYW1lW0lGTkFNU0laXTsKLQl1bnNpZ25lZCBsb25nIGhlYWR2OwogCXU4IGhvb2s7CiB9OwogCkBAIC0zMzgsMjcgJiM0MzszMzcsNDggQEAgbmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGUKIH0KIAogc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9uYXQoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLAotCQkJICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLAotCQkJICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSkKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsIGludCBmYW1pbHkpCiB7CiAJc3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2ID0gb3BzLSZndDtwcml2OwotCXN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi0mZ3Q7ZW50cmllcyk7CiYjNDM7CXN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBjYi0mZ3Q7ZGF0YTsKJiM0MzsJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItJmd0O3NrKTsKIAlzdHJ1Y3QgbmZfaG9va19vcHMgKipuYXRfb3BzOwotCWludCBpLCBlcnI7CiYjNDM7CXVuc2lnbmVkIGludCBpID0gY2ItJmd0O2FyZ3NbMV07CiYjNDM7CXN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmU7CiYjNDM7CXVuc2lnbmVkIGludCBiYXNlX3NlcTsKJiM0MzsJaW50IGVyciA9IDA7CiAKJiM0MzsJYmFzZV9zZXEgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7bmV0LSZndDtuZi5uYXRfaG9va19iYXNlX3NlcSk7CiYjNDM7CiYjNDM7CWUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi0mZ3Q7ZW50cmllcyk7CiAJaWYgKCFlKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gb3V0OwogCiAJbmF0X29wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZS0mZ3Q7bnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHsKLQkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG5hdF9vcHNbaV0sCi0JCQkJCSBvcHMtJmd0O3ByaW9yaXR5LCBmYW1pbHksIHNlcSk7CiYjNDM7CWZvciAoOyBpICZsdDsgZS0mZ3Q7bnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LAomIzQzOwkJCQkJIFJFQURfT05DRShuYXRfb3BzW2ldKSwKJiM0MzsJCQkJCSBvcHMtJmd0O3ByaW9yaXR5LCBmYW1pbHksCiYjNDM7CQkJCQkgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxKTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJfQotCXJldHVybiAwOwomIzQzO291dDoKJiM0MzsJaWYgKCFlcnIpIHsKJiM0MzsJCWkgPSAwOwomIzQzOwl9CiYjNDM7CWNiLSZndDthcmdzWzFdID0gaTsKJiM0MzsKJiM0MzsJaWYgKGNiLSZndDthcmdzWzJdICZhbXA7JmFtcDsgYmFzZV9zZXEgIT0gY2ItJmd0O2FyZ3NbMl0pIHsKJiM0MzsJCWNiLSZndDtzZXEmIzQzOyYjNDM7OwomIzQzOwkJZXJyID0gLUVJTlRSOwomIzQzOwl9CiYjNDM7CWNiLSZndDthcmdzWzJdID0gYmFzZV9zZXE7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLApAQCAtMzczLDM1ICYjNDM7MzkzLDMxIEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLAogCXVuc2lnbmVkIGludCBpID0gY2ItJmd0O2FyZ3NbMF07CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWNiLSZndDtzZXEgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7bmV0LSZndDtuZi5ob29rX2Jhc2Vfc2VxKTsKIAogCWUgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgY3R4LSZndDtob29rLCBuZXQsIGN0eC0mZ3Q7ZGV2bmFtZSk7Ci0JaWYgKCFlKQomIzQzOwlpZiAoIWUgfHwgSVNfRVJSKGUpKQogCQlnb3RvIGRvbmU7CiAKLQlpZiAoSVNfRVJSKGUpKSB7Ci0JCWNiLSZndDtzZXEmIzQzOyYjNDM7OwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JaWYgKCh1bnNpZ25lZCBsb25nKWUgIT0gY3R4LSZndDtoZWFkdiB8fCBpICZndDs9IGUtJmd0O251bV9ob29rX2VudHJpZXMpCi0JCWNiLSZndDtzZXEmIzQzOyYjNDM7OwotCiAJb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTsKIAogCWZvciAoOyBpICZsdDsgZS0mZ3Q7bnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKG9wc1tpXS0mZ3Q7aG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVCkKLQkJCWVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY3R4LCBvcHNbaV0sIGZhbWlseSwKLQkJCQkJCSBjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEpOwotCQllbHNlCi0JCQllcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgb3BzW2ldLAotCQkJCQkJIG9wc1tpXS0mZ3Q7cHJpb3JpdHksIGZhbWlseSwKJiM0MzsJCWNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqY3VyID0gUkVBRF9PTkNFKG9wc1tpXSk7CiYjNDM7CiYjNDM7CQlpZiAoY3VyLSZndDtob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKQomIzQzOwkJCWVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTsKJiM0MzsJCWVsc2UgewomIzQzOwkJCWVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsCiYjNDM7CQkJCQkJIGN1ci0mZ3Q7cHJpb3JpdHksIGZhbWlseSwKIAkJCQkJCSBjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEpOwomIzQzOwkJfQogCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAJfQogCiBkb25lOgotCW5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7CiYjNDM7CWlmIChubHNrYi0mZ3Q7bGVuICZndDsgMCkKJiM0MzsJCW5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJY2ItJmd0O2FyZ3NbMF0gPSBpOwogCXJldHVybiBubHNrYi0mZ3Q7bGVuOwpAQCAtNDQyLDEwICYjNDM7NDU4LDcgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3Ryc2NweShjdHgtJmd0O2Rldm5hbWUsIG5hbWUsIHNpemVvZihjdHgtJmd0O2Rldm5hbWUpKTsKLQljdHgtJmd0O2hlYWR2ID0gKHVuc2lnbmVkIGxvbmcpaGVhZDsKIAljdHgtJmd0O2hvb2sgPSBob29rbnVtOwotCi0JY2ItJmd0O3NlcSA9IDE7CiAJY2ItJmd0O2RhdGEgPSBjdHg7CiAKIAlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU0OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYSBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUgdGhhdCBuZWVkcyBhIGxvb2stb3Zlci4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdGhlIHNhbWU6IGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRldGFpbHMgYW5kIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQgdGhpcyBpcyB0cnlpbmcgdG8gYWNoaWV2ZS4gSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nLgoKQWxyaWdodCwgdGhlIHBhdGNoIHRvdWNoZXMgYGluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oYCwgYG5ldC9uZXRmaWx0ZXIvY29yZS5jYCwgYG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBkaWdnaW5nIGludG8gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0sIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgdG8gdGFrZSBsaWdodGx5LiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIHRoaXMgaGFzIG9uIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LgoKTm93IGl0JiMzOTtzIHRpbWUgdG8gbGV2ZXJhZ2UgdGhlIHRvb2xzLiBCZWZvcmUgSSBnZXQgaW50byB0aGUgd2VlZHMgb2YgbGluZS1ieS1saW5lIGNvZGUgcmV2aWV3LCBJJiMzOTttIGdvaW5nIHRvIHJ1biB0aGlzIHRocm91Z2ggb3VyIHN0YW5kYXJkIGFuYWx5c2lzIHBpcGVsaW5lLiBJIG5lZWQgdG8gdmVyaWZ5IEtjb25maWcgcmVxdWlyZW1lbnRzIGFuZCBtYWtlIHN1cmUgdGhpcyBjb2RlIHBsYXlzIHdlbGwgd2l0aCB0aGUgYnVpbGQgc3lzdGVtIGFuZCBleGlzdGluZyBjb25maWd1cmF0aW9ucy4gSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgb2J2aW91cyByZWQgZmxhZ3MgbGlrZSBtaXNzaW5nIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBjb25mbGljdHMgYmVmb3JlIEkgc3BlbmQgdG9vIG11Y2ggdGltZSBvbiB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVURklMVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTk4PWNvbmZpZyBORl9MT0dfU1lTTE9HXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNS1cdCAgVGhpcyBpcyBhIHNpbXBsZXIgYnV0IGxlc3MgZmxleGlibGUgbG9nZ2luZyBtZXRob2QgY29tcGFyZWQgdG9cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDY6XHQgIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cuXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA3LVx0ICBJZiBib3RoIGFyZSBlbmFibGVkIHRoZSBiYWNrZW5kIHRvIHVzZSBjYW4gYmUgY29uZmlndXJlZCBhdCBydW4tdGltZVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz04Mzk9Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODQ2LVx0KGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4NDc6XHRDT05GSUdfTkVURklMVEVSX1hUX0NPTk5NQVJLIChjb21iaW5lZCBjb25ubWFyay9DT05OTUFSSyBtb2R1bGUpLlxubmV0L25ldGZpbHRlci9LY29uZmlnLTg0OC1cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9OTY1PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX01BUktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTcxLVx0KGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo5NzI6XHRDT05GSUdfTkVURklMVEVSX1hUX01BUksgKGNvbWJpbmVkIG1hcmsvTUFSSyBtb2R1bGUpLlxubmV0L25ldGZpbHRlci9LY29uZmlnLTk3My1cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTIzNz1jb25maWcgTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNDQtXHQoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0c1xubmV0L25ldGZpbHRlci9LY29uZmlnOjEyNDU6XHRDT05GSUdfTkVURklMVEVSX1hUX0NPTk5NQVJLIChjb21iaW5lZCBjb25ubWFyay9DT05OTUFSSyBtb2R1bGUpLlxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNDYtXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTE0MjM9Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9NQVJLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MjktXHQoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0c1xubmV0L25ldGZpbHRlci9LY29uZmlnOjE0MzA6XHRDT05GSUdfTkVURklMVEVSX1hUX01BUksgKGNvbWJpbmVkIG1hcmsvTUFSSyBtb2R1bGUpLlxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MzEtXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0yPW5ldGZpbHRlci1vYmpzIDo9IGNvcmUubyBuZl9sb2cubyBuZl9xdWV1ZS5vIG5mX3NvY2tvcHQubyB1dGlscy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM6bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSAmIzQzOz0gbmZuZXRsaW5rLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTIyPWVuZGlmXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTIzLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTkVURklMVEVSKSA9IG5ldGZpbHRlci5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRGSUxURVJfQlBGX0xJTkspICYjNDM7PSBuZl9icGZfbGluay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTI2LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfQUNDVCkgJiM0Mzs9IG5mbmV0bGlua19hY2N0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFKSAmIzQzOz0gbmZuZXRsaW5rX3F1ZXVlLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mjk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRykgJiM0Mzs9IG5mbmV0bGlua19sb2cub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfT1NGKSAmIzQzOz0gbmZuZXRsaW5rX29zZi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LKSAmIzQzOz0gbmZuZXRsaW5rX2hvb2sub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zMi1cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTc2PW9iai0kKENPTkZJR19ORl9OQVRfVEZUUCkgJiM0Mzs9IG5mX25hdF90ZnRwLm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTc4LSMgU1lOUFJPWFlcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWSkgJiM0Mzs9IG5mX3N5bnByb3h5X2NvcmUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS04MC1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpICYjNDM7PSBuZl9jb25uY291bnQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS04Mi1cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE1Mz1vYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSAmIzQzOz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1NS0jIGdlbmVyaWMgWCB0YWJsZXNcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTU2Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRBQkxFUykgJiM0Mzs9IHhfdGFibGVzLm8geHRfdGNwdWRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU3LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTgtIyBjb21ib3Ncbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTU5Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFSSykgJiM0Mzs9IHh0X21hcmsub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9DT05OTUFSSykgJiM0Mzs9IHh0X2Nvbm5tYXJrLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTYxOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfU0VUKSAmIzQzOz0geHRfc2V0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTYyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTkFUKSAmIzQzOz0geHRfbmF0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTYzLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNjQtIyB0YXJnZXRzXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2NTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9BVURJVCkgJiM0Mzs9IHh0X0FVRElULm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTY2Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NIRUNLU1VNKSAmIzQzOz0geHRfQ0hFQ0tTVU0ub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkpICYjNDM7PSB4dF9DTEFTU0lGWS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2ODpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSykgJiM0Mzs9IHh0X0NPTk5TRUNNQVJLLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTY5Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NUKSAmIzQzOz0geHRfQ1Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCkgJiM0Mzs9IHh0X0RTQ1Aub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEwpICYjNDM7PSB4dF9ITC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3MjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSykgJiM0Mzs9IHh0X0hNQVJLLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTczOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRCkgJiM0Mzs9IHh0X0xFRC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3NDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MT0cpICYjNDM7PSB4dF9MT0cub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzU6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkVUTUFQKSAmIzQzOz0geHRfTkVUTUFQLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTc2Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HKSAmIzQzOz0geHRfTkZMT0cub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSkgJiM0Mzs9IHh0X05GUVVFVUUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzg6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCkgJiM0Mzs9IHh0X1JBVEVFU1Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkVESVJFQ1QpICYjNDM7PSB4dF9SRURJUkVDVC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE4MDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVNRVUVSQURFKSAmIzQzOz0geHRfTUFTUVVFUkFERS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE4MTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLKSAmIzQzOz0geHRfU0VDTUFSSy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE4MjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUFJPWFkpICYjNDM7PSB4dF9UUFJPWFkub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxODM6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTKSAmIzQzOz0geHRfVENQTVNTLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTg0Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQKSAmIzQzOz0geHRfVENQT1BUU1RSSVAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxODU6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVEVFKSAmIzQzOz0geHRfVEVFLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTg2Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFKSAmIzQzOz0geHRfVFJBQ0Uub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxODc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSKSAmIzQzOz0geHRfSURMRVRJTUVSLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTg4LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xODktIyBtYXRjaGVzXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5MDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0FERFJUWVBFKSAmIzQzOz0geHRfYWRkcnR5cGUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxOTE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9CUEYpICYjNDM7PSB4dF9icGYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxOTI6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSKSAmIzQzOz0geHRfY2x1c3Rlci5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5MzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQpICYjNDM7PSB4dF9jb21tZW50Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk0Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTKSAmIzQzOz0geHRfY29ubmJ5dGVzLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk1Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxBQkVMKSAmIzQzOz0geHRfY29ubmxhYmVsLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk2Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUKSAmIzQzOz0geHRfY29ubmxpbWl0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk3Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLKSAmIzQzOz0geHRfY29ubnRyYWNrLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk4Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ1BVKSAmIzQzOz0geHRfY3B1Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk5Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCkgJiM0Mzs9IHh0X2RjY3Aub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ERVZHUk9VUCkgJiM0Mzs9IHh0X2Rldmdyb3VwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjAxOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCkgJiM0Mzs9IHh0X2RzY3Aub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDI6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FQ04pICYjNDM7PSB4dF9lY24ub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDM6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1ApICYjNDM7PSB4dF9lc3Aub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDQ6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQpICYjNDM7PSB4dF9oYXNobGltaXQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDU6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVIpICYjNDM7PSB4dF9oZWxwZXIub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDY6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITCkgJiM0Mzs9IHh0X2hsLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjA3Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBDT01QKSAmIzQzOz0geHRfaXBjb21wLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjA4Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSkgJiM0Mzs9IHh0X2lwcmFuZ2Uub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFZTKSAmIzQzOz0geHRfaXB2cy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxMDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0wyVFApICYjNDM7PSB4dF9sMnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjExOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIKSAmIzQzOz0geHRfbGVuZ3RoLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjEyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQpICYjNDM7PSB4dF9saW1pdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxMzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQykgJiM0Mzs9IHh0X21hYy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxNDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVCkgJiM0Mzs9IHh0X211bHRpcG9ydC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxNTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX05GQUNDVCkgJiM0Mzs9IHh0X25mYWNjdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxNjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09TRikgJiM0Mzs9IHh0X29zZi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxNzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSKSAmIzQzOz0geHRfb3duZXIub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTg6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DR1JPVVApICYjNDM7PSB4dF9jZ3JvdXAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWKSAmIzQzOz0geHRfcGh5c2Rldi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyMDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUpICYjNDM7PSB4dF9wa3R0eXBlLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjIxOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZKSAmIzQzOz0geHRfcG9saWN5Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjIyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEpICYjNDM7PSB4dF9xdW90YS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyMzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QpICYjNDM7PSB4dF9yYXRlZXN0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjI0Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0pICYjNDM7PSB4dF9yZWFsbS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyNTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVCkgJiM0Mzs9IHh0X3JlY2VudC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyNjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFApICYjNDM7PSB4dF9zY3RwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjI3Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU09DS0VUKSAmIzQzOz0geHRfc29ja2V0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjI4Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEUpICYjNDM7PSB4dF9zdGF0ZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyOTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQykgJiM0Mzs9IHh0X3N0YXRpc3RpYy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIzMDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORykgJiM0Mzs9IHh0X3N0cmluZy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIzMTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUykgJiM0Mzs9IHh0X3RjcG1zcy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIzMjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUpICYjNDM7PSB4dF90aW1lLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjMzOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyKSAmIzQzOz0geHRfdTMyLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjM0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jPTI3Mj1uZl9ob29rX2VudHJ5X2hlYWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTI3Ny1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzoyNzg6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0FSUFxubmV0L25ldGZpbHRlci9jb3JlLmMtMjc5LVx0Y2FzZSBORlBST1RPX0FSUDpcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0yODMtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzoyODQ6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRVxubmV0L25ldGZpbHRlci9jb3JlLmMtMjg1LVx0Y2FzZSBORlBST1RPX0JSSURHRTpcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0yODktI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzoyOTA6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xubmV0L25ldGZpbHRlci9jb3JlLmMtMjkxLVx0Y2FzZSBORlBST1RPX0lORVQ6XG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtMzEyLVxubmV0L25ldGZpbHRlci9jb3JlLmM6MzEzOiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0lOR1JFU1Ncbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTMxNC1cdGlmIChob29rbnVtID09IE5GX05FVERFVl9JTkdSRVNTKSB7XG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtMzE4LSNlbmRpZlxubmV0L25ldGZpbHRlci9jb3JlLmM6MzE5OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0VHUkVTU1xubmV0L25ldGZpbHRlci9jb3JlLmMtMzIwLVx0aWYgKGhvb2tudW0gPT0gTkZfTkVUREVWX0VHUkVTUykge1xuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jPTMyOT1zdGF0aWMgaW50IG5mX2luZ3Jlc3NfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0zMzEte1xubmV0L25ldGZpbHRlci9jb3JlLmM6MzMyOiNpZm5kZWYgQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0zMzMtXHRpZiAocmVnLVx1MDAzZWhvb2tudW0gPT0gaG9va251bSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz0zOTg9c3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQwNi1cdGNhc2UgTkZQUk9UT19ORVRERVY6XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo0MDc6I2lmbmRlZiBDT05GSUdfTkVURklMVEVSX0lOR1JFU1Ncbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQwOC1cdFx0aWYgKHJlZy1cdTAwM2Vob29rbnVtID09IE5GX05FVERFVl9JTkdSRVNTKVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQxMC0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjQxMTojaWZuZGVmIENPTkZJR19ORVRGSUxURVJfRUdSRVNTXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy00MTItXHRcdGlmIChyZWctXHUwMDNlaG9va251bSA9PSBORl9ORVRERVZfRUdSRVNTKVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQ0OC1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjQ0OTojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy00NTAtXHRpZiAobmZfaW5ncmVzc19ob29rKHJlZywgcGYpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQ1Mi0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjQ1MzojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1Ncbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQ1NC1cdGlmIChuZl9lZ3Jlc3NfaG9vayhyZWcsIHBmKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz00OTE9c3RhdGljIHZvaWQgX19uZl91bnJlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTUwOS1cdGlmIChuZl9yZW1vdmVfbmV0X2hvb2socCwgcmVnKSkge1xubmV0L25ldGZpbHRlci9jb3JlLmM6NTEwOiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0lOR1JFU1Ncbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTUxMS1cdFx0aWYgKG5mX2luZ3Jlc3NfaG9vayhyZWcsIHBmKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01MTMtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1MTQ6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRUdSRVNTXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01MTUtXHRcdGlmIChuZl9lZ3Jlc3NfaG9vayhyZWcsIHBmKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz03Nzg9c3RhdGljIGludCBfX25ldF9pbml0IG5ldGZpbHRlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNzgxLVx0X19uZXRmaWx0ZXJfbmV0X2luaXQobmV0LVx1MDAzZW5mLmhvb2tzX2lwdjYsIEFSUkFZX1NJWkUobmV0LVx1MDAzZW5mLmhvb2tzX2lwdjYpKTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjc4MjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQVJQXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy03ODMtXHRfX25ldGZpbHRlcl9uZXRfaW5pdChuZXQtXHUwMDNlbmYuaG9va3NfYXJwLCBBUlJBWV9TSVpFKG5ldC1cdTAwM2VuZi5ob29rc19hcnApKTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTc4NC0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjc4NTojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy03ODYtXHRfX25ldGZpbHRlcl9uZXRfaW5pdChuZXQtXHUwMDNlbmYuaG9va3NfYnJpZGdlLCBBUlJBWV9TSVpFKG5ldC1cdTAwM2VuZi5ob29rc19icmlkZ2UpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYz0zMD1zdGF0aWMgY29uc3QgdTggbmZfY3RfZXh0X3R5cGVfbGVuW05GX0NUX0VYVF9OVU1dID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jLTQ4LSNlbmRpZlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM6NDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jLTUwLVx0W05GX0NUX0VYVF9TWU5QUk9YWV0gPSBzaXplb2Yoc3RydWN0IG5mX2Nvbm5fc3lucHJveHkpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jPTU3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50IHRvdGFsX2V4dGVuc2lvbl9zaXplKHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtODAtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYzo4MTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX1NZTlBST1hZKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtODItXHRcdCYjNDM7IHNpemVvZihzdHJ1Y3QgbmZfY29ubl9zeW5wcm94eSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9NjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfaXBfbmxhX3BvbGljeVtDVEFfSVBfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy02NTAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6NjUxOiNpZiBkZWZpbmVkKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19HTFVFX0NUKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTY1Mi1zdGF0aWMgc2l6ZV90IGN0bmV0bGlua19wcm90b19zaXplKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjYzMT1jdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI2MzUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MjYzNjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1Rcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yNjM3LXN0YXRpYyBzaXplX3Rcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjkwNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY3RfaG9vayBjdG5ldGxpbmtfZ2x1ZV9ob29rID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yOTEzLX07XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MjkxNDojZW5kaWYgLyogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1QgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yOTE1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zODY5PXN0YXRpYyBpbnQgX19pbml0IGN0bmV0bGlua19pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM4OTEtXHR9XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6Mzg5MjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1Rcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zODkzLVx0Lyogc2V0dXAgaW50ZXJhY3Rpb24gYmV0d2VlbiBuZl9xdWV1ZSBhbmQgbmZfY29ubnRyYWNrX25ldGxpbmsuICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM5MDY9c3RhdGljIHZvaWQgX19leGl0IGN0bmV0bGlua19leGl0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM5MTAtXHRuZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoXHUwMDI2Y3RubF9zdWJzeXMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM5MTE6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzkxMi1cdFJDVV9JTklUX1BPSU5URVIobmZubF9jdF9ob29rLCBOVUxMKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9NzY9c3RhdGljIGludCBuZm5sX2hvb2tfcHV0X2JwZl9wcm9nX2luZm8oc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy04My1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzo4NDpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0JQRl9MSU5LKSlcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy04NS1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTI3OD1uZm5sX2hvb2tfZW50cmllc19oZWFkKHU4IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpkZXYpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTI4MC1cdGNvbnN0IHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmhvb2tfaGVhZCA9IE5VTEw7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6MjgxOiNpZiBkZWZpbmVkKENPTkZJR19ORVRGSUxURVJfSU5HUkVTUykgfHwgZGVmaW5lZChDT05GSUdfTkVURklMVEVSX0VHUkVTUylcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0yODItXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0yOTYtXHRjYXNlIE5GUFJPVE9fQVJQOlxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjI5NzojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQVJQXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMjk4LVx0XHRpZiAoaG9vayBcdTAwM2U9IEFSUkFZX1NJWkUobmV0LVx1MDAzZW5mLmhvb2tzX2FycCkpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMwMy1cdGNhc2UgTkZQUk9UT19CUklER0U6XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6MzA0OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0ZBTUlMWV9CUklER0Vcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zMDUtXHRcdGlmIChob29rIFx1MDAzZT0gQVJSQVlfU0laRShuZXQtXHUwMDNlbmYuaG9va3NfYnJpZGdlKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzA5LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozMTA6I2lmIGRlZmluZWQoQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTKSB8fCBkZWZpbmVkKENPTkZJR19ORVRGSUxURVJfRUdSRVNTKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMxMS1cdGNhc2UgTkZQUk9UT19ORVRERVY6XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMyMS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozMjI6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMyMy1cdFx0aWYgKGhvb2sgPT0gTkZfTkVUREVWX0lOR1JFU1MpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMyNS0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozMjY6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRUdSRVNTXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzI3LVx0XHRpZiAoaG9vayA9PSBORl9ORVRERVZfRUdSRVNTKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MjkxPXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICpuZl9ob29rX2VudHJpZXNfaGVhZChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCB1OCBob29rbnVtKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMjkzLVx0c3dpdGNoIChwZikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoyOTQ6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0yOTUtXHRjYXNlIE5GUFJPVE9fQlJJREdFOlxuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz02OD1zdHJ1Y3QgeHRfYWYge1xuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy03MS1cdHN0cnVjdCBsaXN0X2hlYWQgdGFyZ2V0O1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjcyOiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtNzMtXHRzdHJ1Y3QgbXV0ZXggY29tcGF0X211dGV4O1xuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz03MDQ9c3RhdGljIGJvb2wgZXJyb3JfdGdfb2sodW5zaWduZWQgaW50IHVzZXJzaXplLCB1bnNpZ25lZCBpbnQga2VybnNpemUsXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTcwOS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzo3MTA6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy03MTEtaW50IHh0X2NvbXBhdF9hZGRfb2Zmc2V0KHVfaW50OF90IGFmLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgZGVsdGEpXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTkxNj1FWFBPUlRfU1lNQk9MKHh0X2NvbXBhdF9jaGVja19lbnRyeV9vZmZzZXRzKTtcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzo5MTc6I2VuZGlmIC8qIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVQgKi9cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy05MTgtXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTkzNC0gKlxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjkzNTogKiBBbHNvIHNlZSB4dF9jb21wYXRfY2hlY2tfZW50cnlfb2Zmc2V0cyBmb3IgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVCB2ZXJzaW9uLlxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTkzNi0gKlxuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0xMTYyPXZvaWQgKnh0X2NvcHlfY291bnRlcnMoc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTE2OC1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMTY5OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTE3MC1cdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTEyMTQ9RVhQT1JUX1NZTUJPTF9HUEwoeHRfY29weV9jb3VudGVycyk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTIxNS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMjE2OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTIxNy1pbnQgeHRfY29tcGF0X3RhcmdldF9vZmZzZXQoY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0xMzk3PUVYUE9SVF9TWU1CT0xfR1BMKHh0X3RhYmxlX3VubG9jayk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTM5OC1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMzk5OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTQwMC12b2lkIHh0X2NvbXBhdF9sb2NrKHVfaW50OF90IGFmKVxuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0xNDE0PUVYUE9SVF9TWU1CT0xfR1BMKHh0X3RlZV9lbmFibGVkKTtcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xNDE1LVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjE0MTY6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xNDE3LURFRklORV9QRVJfQ1BVKHNlcWNvdW50X3QsIHh0X3JlY3NlcSk7XG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTIwOTU9RVhQT1JUX1NZTUJPTF9HUEwoeHRfcHJvdG9fZmluaSk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjA5Ni1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoyMDk3OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjA5OC0vKipcbi0tXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MjE4ND1zdGF0aWMgaW50IF9faW5pdCB4dF9pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIxODgtXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MjE4OTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19MRUdBQ1kpKSB7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjE5MC1cdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjIwMC1cdFx0bXV0ZXhfaW5pdChcdTAwMjZ4dFtpXS5tdXRleCk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MjIwMTojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIyMDItXHRcdG11dGV4X2luaXQoXHUwMDI2eHRbaV0uY29tcGF0X211dGV4KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmM9MTM2PXN0YXRpYyB2b2lkIGxpbWl0X210X2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYy0xNDItXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmM6MTQzOiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMtMTQ0LXN0cnVjdCBjb21wYXRfeHRfcmF0ZWluZm8ge1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYz0xNzE9c3RhdGljIGludCBsaW1pdF9tdF9jb21wYXRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4tLVxubmV0L25ldGZpbHRlci94dF9saW1pdC5jLTE4NC19XG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmM6MTg1OiNlbmRpZiAvKiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUICovXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMtMTg2LVxubmV0L25ldGZpbHRlci94dF9saW1pdC5jPTE4Nz1zdGF0aWMgc3RydWN0IHh0X21hdGNoIGxpbWl0X210X3JlZyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYy0xOTQtXHQubWF0Y2hzaXplICAgICAgICA9IHNpemVvZihzdHJ1Y3QgeHRfcmF0ZWluZm8pLFxubmV0L25ldGZpbHRlci94dF9saW1pdC5jOjE5NTojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxubmV0L25ldGZpbHRlci94dF9saW1pdC5jLTE5Ni1cdC5jb21wYXRzaXplICAgICAgID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfcmF0ZWluZm8pLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTA4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgS2NvbmZpZyBvcHRpb25zOgoKKipLY29uZmlnIERpdmU6IE5FVEZJTFRFUl9ORVRMSU5LX0hPT0sgJmFtcDsgTkZfTkFUKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTkVURklMVEVSX05FVExJTktfSE9PS2AgYW5kIGBORl9OQVRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGl0c2VsZi4mIzM0OyBJIGtub3cgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgdHJpY2t5LCBhbmQgZXZlbiBmb3IgYW4gZXhwZXJ0LCB0aGUgcHJlY2lzZSBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBhcmVuJiMzOTt0IGFsd2F5cyBpbW1lZGlhdGVseSBvYnZpb3VzLgoKSSYjMzk7bSB0aGlua2luZywgJiMzNDtJcyBgTkVURklMVEVSX05FVExJTktfSE9PS2AgYSBoYXJkIGRlcGVuZGVuY3kgZm9yIGBORl9OQVRgLCBvciBpcyBpdCBqdXN0IHN1Z2dlc3RlZD8gSXMgaXQgcmVxdWlyZWQgZm9yICpzb21lKiBORl9OQVQgZnVuY3Rpb25hbGl0eSBidXQgbm90IGFsbD8mIzM0OyBJIHdhbnQgdG8gYXZvaWQgYmxpbmRseSBhc3N1bWluZyBhbnl0aGluZyBoZXJlOyBhc3N1bXB0aW9ucyBpbiB0aGlzIGFyZWEgY2FuIGxlYWQgdG8gc3VidGxlIGJ1Z3Mgb3IgdW5uZWNlc3NhcmlseSBibG9hdGVkIGtlcm5lbHMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IGRlZmF1bHQgc2V0dGluZ3MsIGhlbHAgdGV4dCwgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gdGhlbSwgYW5kIGhvdyB0aG9zZSBpbnRlcmFjdCB3aXRoIG90aGVyLCBicm9hZGVyIGFzcGVjdHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbmV0bGluayBpbnRlcmFjdHMgd2l0aCBOZXRmaWx0ZXIuCgpVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbXVtIHNldCBvZiBjb25maWd1cmF0aW9ucyB0aGF0IEkgbmVlZCBlbmFibGVkIHRvIGFjaGlldmUgd2hhdGV2ZXIgc3BlY2lmaWMgTkFUIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSB3b3JraW5nIHdpdGggYXQgdGhlIG1vbWVudC4gS25vd2luZyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGVtIGlzIGtleS4gTm8gcG9pbnQgaW4gYWNjaWRlbnRhbGx5IGludHJvZHVjaW5nIHVud2FudGVkIG92ZXJoZWFkIG9yIGJyZWFraW5nIHNvbWUgb2JzY3VyZSBjb3JuZXIgY2FzZSBieSBtaXNjb25maWd1cmluZyB0aGUga2VybmVsLiBTbywgdG8gdGhlIEtjb25maWcgSSBnbyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1jb25maWcgTkVURklMVEVSX0JQRl9MSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzctXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgaW4gbmV0L25ldGZpbHRlcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHNvbWUgb2YgdGhlIE5ldGZpbHRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzNi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBhcmNoaXRlY3R1cmUgZm9yIG1hbnkgb2YgbXkgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBzdG9yZWQsIHNvIGl0IGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4gSSBleHBlY3QgdG8gc2VlIHRoZSBtYWluIGZlYXR1cmUgZ3JvdXBpbmdzIG9yIGF0IGxlYXN0IHNvbWUgY3J1Y2lhbCBpbml0aWFsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGRlZmluZWQgYXJvdW5kIHRoaXMgYXJlYSwgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgdmVyc2lvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLi4uIGFuZCB0aGVuIEkgY2FuIHN0YXJ0IGJ1aWxkaW5nIG15IG1lbnRhbCBtb2RlbCBvZiB0aGUgbmV3IGFkZGl0aW9ucywgY2hhbmdlcywgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0FSUFxuICAzMTpcdFx0Ym9vbFxuICAzMjpcdFxuICAzMzpcdGNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcbiAgMzQ6XHRcdGRlZl9ib29sIEJQRl9TWVNDQUxMXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcbiAgMzc6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuICAzOTpcdFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbiAgNDA6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDQzOlx0XHQgIHRvIGxpc3QgdGhlIGJhc2UgbmV0ZmlsdGVyIGhvb2tzIHZpYSBORk5FVExJTksuXG4gIDQ0Olx0XHQgIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZBQ0NUIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgNDk6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA1MDpcdFx0aGVscFxuICA1MTpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDUyOlx0XHQgIGZvciBleHRlbmRlZCBhY2NvdW50aW5nIHZpYSBORk5FVExJTksuXG4gIDUzOlx0XG4gIDU0Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG4gIDU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNTY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDU3Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgNTg6XHRcdGhlbHBcbiAgNTk6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxuICA2MDpcdFx0ICBmb3IgcXVldWVpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxuICA2MTpcdFxuICA2MjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19MT0dcbiAgNjM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4gIDY0Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAgNjU6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA2NjpcdFx0aGVscFxuICA2NzpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDY4Olx0XHQgIGZvciBsb2dnaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cbiAgNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTExNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5GX05BVCBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBkaXZpbmcgYmFjayBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNpcmNsZSBiYWNrIHRvIE5GX05BVC4gSXQmIzM5O3MgY3J1Y2lhbCB3ZSBkb24mIzM5O3Qgb3Zlcmxvb2sgaXQgaW4gdGhlIEtjb25maWcgZmlsZS4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIHN0YXR1cyB0aGVyZS4gQW55IGNoYW5nZXMsIGFueSBkZXBlbmRlbmNpZXMsIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcyBuZWVkIHRvIGJlIGRvdWJsZS1jaGVja2VkLiBBIG1pc2NvbmZpZ3VyYXRpb24gb24gTkZfTkFUIGNhbiBjYXNjYWRlIGludG8gc29tZSByZWFsbHkgbmFzdHkgbmV0d29ya2luZyBwcm9ibGVtcyB0aGF0IGFyZSBhIHBhaW4gdG8gZGVidWcuIFNvIGxldOKAmXMgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIgYW5kIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaXMgYWxpZ25lZCB3aXRoIG91ciBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBhbmQgdGFyZ2V0IHBsYXRmb3JtLiBXZSBkb24mIzM5O3Qgd2FudCBhbnkgc3VycHJpc2VzIHdoZW4gd2UgZ2V0IGRvd24gdG8gaW50ZWdyYXRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgaXQgaXMgY29ycmVjdCBhbmQgZG91YmxlIGNoZWNrIGFsbCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfTkFUXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTM5OD1jb25maWcgTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MDYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDA3OmNvbmZpZyBORl9OQVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MDgtXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQyMwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDYxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBIb29rIFNlcXVlbmNlIE51bWJlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGRldGFpbHMuIEZpcnN0LCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgZmllbGRzIHRvIHRoZSBgc3RydWN0IG5ldG5zX25mYCBzdHJ1Y3R1cmUsIHJlc2lkaW5nIHdpdGhpbiBgaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBwcm9iYWJseSBhYm91dCBzZXF1ZW5jaW5nIG9yIHZlcnNpb25pbmcgb2Ygc29tZSBzb3J0LiBOb3csIGxldCYjMzk7cyBzZWUgaG93IHRoZXNlIG5ldyBmaWVsZHMgYXJlIHVzZWQuCgpJbiBgbmV0L25ldGZpbHRlci9jb3JlLmNgLCB0aGVyZSYjMzk7cyBhIG5ldyBmdW5jdGlvbiBgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGBfX25mX3JlZ2lzdGVyX25ldF9ob29rYCBhbmQgYF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AuIFRoaXMgY2xlYXJseSBwb2ludHMgdG93YXJkcyBhIG1lY2hhbmlzbSB0byBpbmNyZW1lbnQgdGhlIHNlcXVlbmNlIG51bWJlciB3aGVuZXZlciBhIG5ldGZpbHRlciBob29rIGlzIHJlZ2lzdGVyZWQgb3IgdW5yZWdpc3RlcmVkLiBJdCBhbHNvIGluaXRpYWxpemVzIHRoZXNlIHNlcXVlbmNlIG51bWJlcnMgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdGAuIE1ha2VzIHNlbnNlIOKAkyB3ZSBuZWVkIGEgc3RhcnRpbmcgcG9pbnQuCgpUaGUgYG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY2AgZmlsZSBhbHNvIGhhcyBzaW1pbGFyIGxvZ2ljIHdpdGggYGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KWAsIGNhbGxlZCBpbiBgbmZfbmF0X3JlZ2lzdGVyX2ZuYCBhbmQgYG5mX25hdF91bnJlZ2lzdGVyX2ZuYCwgd2hpY2ggaXMgcmVsYXRlZCB0byBOQVQgaG9va3MuIFRoYXQmIzM5O3MgY29uc2lzdGVudCDigJMgd2UmIzM5O3JlIHRyYWNraW5nIGEgc2VxdWVuY2UgZm9yIE5BVCBzcGVjaWZpY2FsbHkgYXMgd2VsbC4KCk5vdywgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgY2hhbmdlcyBzZWVtIHRvIGJlIGluIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgLiBUaGUgcmVtb3ZhbCBvZiBgaGVhZHZgIGZyb20gYG5mbmxfZHVtcF9ob29rX2RhdGFgIGlzIGEgbWlub3IgZGV0YWlsLCBidXQgdGhlIHJlZmFjdG9yaW5nIG9mIGBuZm5sX2hvb2tfZHVtcF9uYXRgIGFuZCBgbmZubF9ob29rX2R1bXBgIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMuIFRoZXkmIzM5O3JlIG5vdyB1c2luZyBgbmV0LSZndDtuZi5ob29rX2Jhc2Vfc2VxYCBhbmQgYG5ldC0mZ3Q7bmYubmF0X2hvb2tfYmFzZV9zZXFgIHRvIHByb3Blcmx5IHN5bmNocm9uaXplIGdlbmVyYXRpb24gbnVtYmVycy4gVGhpcyBpcyBhIGNydWNpYWwgaW1wcm92ZW1lbnQgZm9yIGNvbnNpc3RlbmN5IGR1cmluZyBkdW1wcy4KClNwZWNpZmljYWxseSwgaW4gYG5mbmxfaG9va19kdW1wX25hdGAsIEkgc2VlIHRoYXQgaXQgaGFuZGxlcyByZXN0YXJ0L3Jlc3VtZSBkdXJpbmcgdGhlIGR1bXAgdXNpbmcgYGNiLSZndDthcmdzWzFdYCAoaW5kZXgpIGFuZCBgY2ItJmd0O2FyZ3NbMl1gIChzZXF1ZW5jZSkuIEl0IHJldHVybnMgYC1FSU5UUmAgYW5kIGluY3JlbWVudHMgYGNiLSZndDtzZXFgIGlmIGBiYXNlX3NlcWAgY2hhbmdlcy4gVGhpcyBzaG93cyB0aGUgaW50ZW50IHRvIGhhbmRsZSBjaGFuZ2VzIGR1cmluZyBhIG5ldGxpbmsgZHVtcC4gT24gdGhlIG90aGVyIGhhbmQsIGluIGBuZm5sX2hvb2tfZHVtcGAsIGl0IG5vdyB1c2VzIGBjYi0mZ3Q7c2VxID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO25ldC0mZ3Q7bmYuaG9va19iYXNlX3NlcSlgIGFuZCBoYW5kbGVzIFJDVSBhbmQgZHVtcCBjb25zaXN0ZW5jeSBjaGVja3Mgd2l0aCBgbmxfZHVtcF9jaGVja19jb25zaXN0ZW50YC4gVGhpcyBhbHNvIGRlbW9uc3RyYXRlcyBlZmZvcnRzIHRvd2FyZCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBoYW5kbGluZy4KClRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSB1c2VkPyBUaGUgYW5zd2VyIGlzIHllcywgYXMgdGhlIG5mbmV0bGluayBkdW1wIGhvb2tzIGFyZSB0cmlnZ2VyZWQgdmlhIE5ldGxpbmsgdXNpbmcgYE5GTkxfU1VCU1lTX0hPT0tgIG1lc3NhZ2VzLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZS4gTmV0ZmlsdGVyIGNvcmUgaG9vayByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gYW5kIE5BVCBob29rIHJlZ2lzdHJhdGlvbiBhcmUgYWxzbyBwYXJ0IG9mIHRoZSBjb3JlIG9wZXJhdGlvbiB3aGVuIHRoZSB1c2VyIG1hbmlwdWxhdGVzIHJ1bGVzIHdpdGggaXB0YWJsZXMgb3IgbmZ0YWJsZXMuIFRoaXMgaXMgYSB2ZXJ5IHJlYWwgc2NlbmFyaW8uIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBhIFFFTVUgZW52aXJvbm1lbnQuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbmZuZXRsaW5rX2hvb2suY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5mbmV0bGluayBob29rIHdvcmtzIGluIGRldGFpbCwgYW5kIHdoYXQgdGhlIGVudHJ5cG9pbnRzIGFyZSwgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgbW92aW5nIHRvd2FyZHMgYSBtb3JlIHJvYnVzdCBhbmQgY29ycmVjdCBuZXRsaW5rIGludGVyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0XHRnb3RvIGRvbmU7XG4gNDAxOlx0XG4gNDAyOlx0XHRvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xuIDQwMzpcdFxuIDQwNDpcdFx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiA0MDU6XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcbiA0MDY6XHRcbiA0MDc6XHRcdFx0aWYgKGN1ci1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuIDQwODpcdFx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcbiA0MDk6XHRcdFx0ZWxzZSB7XG4gNDEwOlx0XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1cixcbiA0MTE6XHRcdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4gNDEyOlx0XHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIDQxMzpcdFx0XHR9XG4gNDE0Olx0XHRcdGlmIChlcnIpXG4gNDE1Olx0XHRcdFx0YnJlYWs7XG4gNDE2Olx0XHR9XG4gNDE3Olx0XG4gNDE4Olx0ZG9uZTpcbiA0MTk6XHRcdGlmIChubHNrYi1cdTAwM2VsZW4gXHUwMDNlIDApXG4gNDIwOlx0XHRcdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4gNDIxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA0MjI6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuIDQyMzpcdFx0cmV0dXJuIG5sc2tiLVx1MDAzZWxlbjtcbiA0MjQ6XHR9XG4gNDI1Olx0XG4gNDI2Olx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gNDI3Olx0e1xuIDQyODpcdFx0Y29uc3Qgc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXHUwMDNlbmxoKTtcbiA0Mjk6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqbmxhID0gY2ItXHUwMDNlZGF0YTtcbiA0MzA6XHRcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBOVUxMO1xuIDQzMTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY2ItXHUwMDNlc2tiLVx1MDAzZXNrKTtcbiA0MzI6XHRcdHU4IGZhbWlseSA9IG5mbXNnLVx1MDAzZW5mZ2VuX2ZhbWlseTtcbiA0MzM6XHRcdGNoYXIgbmFtZVtJRk5BTVNJWl0gPSBcJiMzNDtcJiMzNDs7XG4gNDM0Olx0XHRjb25zdCB2b2lkICpoZWFkO1xuIDQzNTpcdFx0dTMyIGhvb2tudW07XG4gNDM2Olx0XG4gNDM3Olx0XHRob29rbnVtID0gbnRvaGwobmxhX2dldF9iZTMyKG5sYVtORk5MQV9IT09LX0hPT0tOVU1dKSk7XG4gNDM4Olx0XHRpZiAoaG9va251bSBcdTAwM2UgMjU1KVxuIDQzOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NDA6XHRcbiA0NDE6XHRcdGlmIChmYW1pbHkgPT0gTkZQUk9UT19ORVRERVYpIHtcbiA0NDI6XHRcdFx0aWYgKCFubGFbTkZOTEFfSE9PS19ERVZdKVxuIDQ0MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0NDpcdFxuIDQ0NTpcdFx0XHRubGFfc3Ryc2NweShuYW1lLCBubGFbTkZOTEFfSE9PS19ERVZdLCBzaXplb2YobmFtZSkpO1xuIDQ0NjpcdFx0fVxuIDQ0NzpcdFxuIDQ0ODpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDQ0OTpcdFx0LyogTm90IGRlcmVmZXJlbmNlZDsgZm9yIGNvbnNpc3RlbmN5IGNoZWNrIG9ubHkgKi9cbiA0NTA6XHRcdGhlYWQgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgaG9va251bSwgbmV0LCBuYW1lKTtcbiA0NTE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDQ1MjpcdFxuIDQ1MzpcdFx0aWYgKGhlYWQgXHUwMDI2XHUwMDI2IElTX0VSUihoZWFkKSlcbiA0NTQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIoaGVhZCk7XG4gNDU1Olx0XG4gNDU2Olx0XHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcbiA0NTc6XHRcdGlmICghY3R4KVxuIDQ1ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA0NTk6XHRcbiA0NjA6XHRcdHN0cnNjcHkoY3R4LVx1MDAzZWRldm5hbWUsIG5hbWUsIHNpemVvZihjdHgtXHUwMDNlZGV2bmFtZSkpO1xuIDQ2MTpcdFx0Y3R4LVx1MDAzZWhvb2sgPSBob29rbnVtO1xuIDQ2MjpcdFx0Y2ItXHUwMDNlZGF0YSA9IGN0eDtcbiA0NjM6XHRcbiA0NjQ6XHRcdHJldHVybiAwO1xuIDQ2NTpcdH1cbiA0NjY6XHRcbiA0Njc6XHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0b3Aoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIDQ2ODpcdHtcbiA0Njk6XHRcdGtmcmVlKGNiLVx1MDAzZWRhdGEpO1xuIDQ3MDpcdFx0cmV0dXJuIDA7XG4gNDcxOlx0fVxuIDQ3MjpcdFxuIDQ3MzpcdHN0YXRpYyBpbnQgbmZubF9ob29rX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDQ3NDpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIDQ3NTpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pXG4gNDc2Olx0e1xuIDQ3NzpcdFx0aWYgKCFubGFbTkZOTEFfSE9PS19IT09LTlVNXSlcbiA0Nzg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDA0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHJlc3Qgb2YgYG5mbmV0bGlua19ob29rLmNgLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgTmV0ZmlsdGVyIG5ldGxpbmsgaG9vayBzeXN0ZW0gaXMgaW1wbGVtZW50ZWQuIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIG5ldGxpbmsgYXJjaGl0ZWN0dXJlLCBidXQgSSBuZWVkIHRvIG1hcCBpdCB0byB0aGlzIHNwZWNpZmljIGZpbGUgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgaGVyZT8gQXJlIHRoZXkgZGVhbGluZyB3aXRoIG1lc3NhZ2UgZm9ybWF0dGluZywgcGFyc2luZywgYW5kIGRpc3BhdGNoaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIG5ldGxpbmsgc29ja2V0LCB0aGUgaG9vayByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24gbWVjaGFuaXNtcywgYW5kIHRoZSBhY3R1YWwgcGFja2V0IHByb2Nlc3Npbmcgd2l0aGluIHRoZSBOZXRmaWx0ZXIgY29udGV4dC4gVGltZSB0byBhbmFseXplLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaGFuZGxlIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIGFuZCB0aGUga2VybmVsJiMzOTtzIE5ldGZpbHRlciBzdWJzeXN0ZW0gdGhyb3VnaCBuZXRsaW5rLiBVbmRlcnN0YW5kaW5nIHRoaXMgZmlsZSBpcyBjcml0aWNhbCBmb3IgZmlndXJpbmcgb3V0IGhvdyB0byBidWlsZCBjdXN0b20gTmV0ZmlsdGVyIG1vZHVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzA6XHRcdHJldHVybiAwO1xuIDQ3MTpcdH1cbiA0NzI6XHRcbiA0NzM6XHRzdGF0aWMgaW50IG5mbmxfaG9va19nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA0NzQ6XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbiA0NzU6XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxuIDQ3NjpcdHtcbiA0Nzc6XHRcdGlmICghbmxhW05GTkxBX0hPT0tfSE9PS05VTV0pXG4gNDc4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ3OTpcdFxuIDQ4MDpcdFx0aWYgKGluZm8tXHUwMDNlbmxoLVx1MDAzZW5sbXNnX2ZsYWdzIFx1MDAyNiBOTE1fRl9EVU1QKSB7XG4gNDgxOlx0XHRcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xuIDQ4MjpcdFx0XHRcdC5zdGFydCA9IG5mbmxfaG9va19kdW1wX3N0YXJ0LFxuIDQ4MzpcdFx0XHRcdC5kb25lID0gbmZubF9ob29rX2R1bXBfc3RvcCxcbiA0ODQ6XHRcdFx0XHQuZHVtcCA9IG5mbmxfaG9va19kdW1wLFxuIDQ4NTpcdFx0XHRcdC5tb2R1bGUgPSBUSElTX01PRFVMRSxcbiA0ODY6XHRcdFx0XHQuZGF0YSA9ICh2b2lkICopbmxhLFxuIDQ4NzpcdFx0XHR9O1xuIDQ4ODpcdFxuIDQ4OTpcdFx0XHRyZXR1cm4gbmZfbmV0bGlua19kdW1wX3N0YXJ0X3JjdShpbmZvLVx1MDAzZXNrLCBza2IsIGluZm8tXHUwMDNlbmxoLCBcdTAwMjZjKTtcbiA0OTA6XHRcdH1cbiA0OTE6XHRcbiA0OTI6XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA0OTM6XHR9XG4gNDk0Olx0XG4gNDk1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIG5mbmxfaG9va19jYltORk5MX01TR19IT09LX01BWF0gPSB7XG4gNDk2Olx0XHRbTkZOTF9NU0dfSE9PS19HRVRdID0ge1xuIDQ5NzpcdFx0XHQuY2FsbFx0XHQ9IG5mbmxfaG9va19nZXQsXG4gNDk4Olx0XHRcdC50eXBlXHRcdD0gTkZOTF9DQl9SQ1UsXG4gNDk5Olx0XHRcdC5hdHRyX2NvdW50XHQ9IE5GTkxBX0hPT0tfTUFYLFxuIDUwMDpcdFx0XHQucG9saWN5XHRcdD0gbmZubF9ob29rX25sYV9wb2xpY3lcbiA1MDE6XHRcdH0sXG4gNTAyOlx0fTtcbiA1MDM6XHRcbiA1MDQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mbmV0bGlua19zdWJzeXN0ZW0gbmZob29rX3N1YnN5cyA9IHtcbiA1MDU6XHRcdC5uYW1lXHRcdFx0XHQ9IFwmIzM0O25maG9va1wmIzM0OyxcbiA1MDY6XHRcdC5zdWJzeXNfaWRcdFx0XHQ9IE5GTkxfU1VCU1lTX0hPT0ssXG4gNTA3Olx0XHQuY2JfY291bnRcdFx0XHQ9IE5GTkxfTVNHX0hPT0tfTUFYLFxuIDUwODpcdFx0LmNiXHRcdFx0XHQ9IG5mbmxfaG9va19jYixcbiA1MDk6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg4NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE5BVCBSZWdpc3RyYXRpb24gJmFtcDsgVW5yZWdpc3RyYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgTkFUIGNvcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBOZXRmaWx0ZXIgTkFUIGZ1bmN0aW9ucyBhcmUgcmVnaXN0ZXJlZCBhbmQgdW5yZWdpc3RlcmVkIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgdGhlIGBuZl9uYXRfcmVnaXN0ZXJfZm5gIGFuZCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gIGZ1bmN0aW9ucywgYXMgdGhleSBhcmUgbGlrZWx5IHRoZSBoZWFydCBvZiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlcmUuIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byB3b3JrIGJhY2t3YXJkIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgTkFUIGZ1bmN0aW9ucyBhcmUgaG9va2VkIGludG8gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkgaGF2ZSBhIGZlZWxpbmcgSSYjMzk7bGwgYWxzbyBiZSBlbmNvdW50ZXJpbmcgc29tZSBtdXRleGVzIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjM1Olx0XHRcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XG4xMjM2Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjEyMzc6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmZfbmF0X3Byb3RvX211dGV4KTtcbjEyMzg6XHRcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvcHNfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4xMjM5Olx0XHRcdFx0XHRwcml2ID0gbmF0X29wc1tpXS5wcml2O1xuMTI0MDpcdFx0XHRcdFx0a2ZyZWVfcmN1KHByaXYsIHJjdV9oZWFkKTtcbjEyNDE6XHRcdFx0XHR9XG4xMjQyOlx0XHRcdFx0a2ZyZWVfcmN1KG5hdF9vcHMsIHJjdSk7XG4xMjQzOlx0XHRcdFx0cmV0dXJuIHJldDtcbjEyNDQ6XHRcdFx0fVxuMTI0NTpcdFxuMTI0NjpcdFx0XHRuYXRfcHJvdG9fbmV0LVx1MDAzZW5hdF9ob29rX29wcyA9IG5hdF9vcHM7XG4xMjQ3Olx0XHR9XG4xMjQ4Olx0XG4xMjQ5Olx0XHRuYXRfb3BzID0gbmF0X3Byb3RvX25ldC1cdTAwM2VuYXRfaG9va19vcHM7XG4xMjUwOlx0XHRwcml2ID0gbmF0X29wc1tob29rbnVtXS5wcml2O1xuMTI1MTpcdFx0aWYgKFdBUk5fT05fT05DRSghcHJpdikpIHtcbjEyNTI6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XG4xMjUzOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyNTQ6XHRcdH1cbjEyNTU6XHRcbjEyNTY6XHRcdHJldCA9IG5mX2hvb2tfZW50cmllc19pbnNlcnRfcmF3KFx1MDAyNnByaXYtXHUwMDNlZW50cmllcywgb3BzKTtcbjEyNTc6XHRcdGlmIChyZXQgPT0gMCkge1xuMTI1ODpcdFx0XHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4xMjU5Olx0XHRcdG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMmIzQzOyYjNDM7O1xuMTI2MDpcdFx0fVxuMTI2MTpcdFxuMTI2MjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XG4xMjYzOlx0XHRyZXR1cm4gcmV0O1xuMTI2NDpcdH1cbjEyNjU6XHRcbjEyNjY6XHR2b2lkIG5mX25hdF91bnJlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuMTI2NzpcdFx0XHRcdCAgdW5zaWduZWQgaW50IG9wc19jb3VudClcbjEyNjg6XHR7XG4xMjY5Olx0XHRzdHJ1Y3QgbmF0X25ldCAqbmF0X25ldCA9IG5ldF9nZW5lcmljKG5ldCwgbmF0X25ldF9pZCk7XG4xMjcwOlx0XHRzdHJ1Y3QgbmZfbmF0X2hvb2tzX25ldCAqbmF0X3Byb3RvX25ldDtcbjEyNzE6XHRcdHN0cnVjdCBuZl9uYXRfbG9va3VwX2hvb2tfcHJpdiAqcHJpdjtcbjEyNzI6XHRcdHN0cnVjdCBuZl9ob29rX29wcyAqbmF0X29wcztcbjEyNzM6XHRcdGludCBob29rbnVtID0gb3BzLVx1MDAzZWhvb2tudW07XG4xMjc0Olx0XHRpbnQgaTtcbjEyNzU6XHRcbjEyNzY6XHRcdGlmIChwZiBcdTAwM2U9IEFSUkFZX1NJWkUobmF0X25ldC1cdTAwM2VuYXRfcHJvdG9fbmV0KSlcbjEyNzc6XHRcdFx0cmV0dXJuO1xuMTI3ODpcdFxuMTI3OTpcdFx0bmF0X3Byb3RvX25ldCA9IFx1MDAyNm5hdF9uZXQtXHUwMDNlbmF0X3Byb3RvX25ldFtwZl07XG4xMjgwOlx0XG4xMjgxOlx0XHRtdXRleF9sb2NrKFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XG4xMjgyOlx0XHRpZiAoV0FSTl9PTihuYXRfcHJvdG9fbmV0LVx1MDAzZXVzZXJzID09IDApKVxuMTI4MzpcdFx0XHRnb3RvIHVubG9jaztcbjEyODQ6XHRcbjEyODU6XHRcdG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMtLTtcbjEyODY6XHRcbjEyODc6XHRcdG5hdF9vcHMgPSBuYXRfcHJvdG9fbmV0LVx1MDAzZW5hdF9ob29rX29wcztcbjEyODg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9wc19jb3VudDsgaSYjNDM7JiM0MzspIHtcbjEyODk6XHRcdFx0aWYgKG5hdF9vcHNbaV0uaG9va251bSA9PSBob29rbnVtKSB7XG4xMjkwOlx0XHRcdFx0aG9va251bSA9IGk7XG4xMjkxOlx0XHRcdFx0YnJlYWs7XG4xMjkyOlx0XHRcdH1cbjEyOTM6XHRcdH1cbjEyOTQ6XHRcdGlmIChXQVJOX09OX09OQ0UoaSA9PSBvcHNfY291bnQpKVxuMTI5NTpcdFx0XHRnb3RvIHVubG9jaztcbjEyOTY6XHRcdHByaXYgPSBuYXRfb3BzW2hvb2tudW1dLnByaXY7XG4xMjk3Olx0XHRuZl9ob29rX2VudHJpZXNfZGVsZXRlX3JhdyhcdTAwMjZwcml2LVx1MDAzZWVudHJpZXMsIG9wcyk7XG4xMjk4Olx0XHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4xMjk5Olx0XG4xMzAwOlx0XHRpZiAobmF0X3Byb3RvX25ldC1cdTAwM2V1c2VycyA9PSAwKSB7XG4xMzAxOlx0XHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmF0X29wcywgb3BzX2NvdW50KTtcbjEzMDI6XHRcbjEzMDM6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb3BzX2NvdW50OyBpJiM0MzsmIzQzOykge1xuMTMwNDpcdFx0XHRcdHByaXYgPSBuYXRfb3BzW2ldLnByaXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjI1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBOZXRmaWx0ZXIgSG9vayBSZWdpc3RyYXRpb24gYW5kIFVucmVnaXN0cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIE5ldGZpbHRlciBjb3JlIGFnYWluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXNlIGhvb2tzIGFyZSByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQgd2l0aGluIHRoZSBuZXR3b3JrIG5hbWVzcGFjZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG5ldC9uZXRmaWx0ZXIvY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGZ1bmN0aW9ucyBgX19uZl9yZWdpc3Rlcl9uZXRfaG9va2AgYW5kIGBfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2tgLiBJIHN1c3BlY3QgdGhlIGludGVyYWN0aW9ucyBzdXJyb3VuZGluZyB0aGVzZSB0d28gZnVuY3Rpb25zIGhvbGQgdGhlIGtleXMgdG8gdGhlIHByb2JsZW1zIEkmIzM5O20gY3VycmVudGx5IHdyZXN0bGluZyB3aXRoLiBJJiMzOTtsbCBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmaW5lIHBvaW50cyBvZiBob3cgbmV0ZmlsdGVyIGhhbmRsZXMgdGhlIG5ldG5zLXNwZWNpZmljIGRldGFpbHMgd2l0aGluIHRoaXMgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNDI2Olx0XHRcdFx0cmV0dXJuIGVycjtcbiA0Mjc6XHRcdFx0YnJlYWs7XG4gNDI4Olx0XHR9XG4gNDI5Olx0XG4gNDMwOlx0XHRwcCA9IG5mX2hvb2tfZW50cnlfaGVhZChuZXQsIHBmLCByZWctXHUwMDNlaG9va251bSwgcmVnLVx1MDAzZWRldik7XG4gNDMxOlx0XHRpZiAoIXBwKVxuIDQzMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MzM6XHRcbiA0MzQ6XHRcdG11dGV4X2xvY2soXHUwMDI2bmZfaG9va19tdXRleCk7XG4gNDM1Olx0XG4gNDM2Olx0XHRwID0gbmZfZW50cnlfZGVyZWZlcmVuY2UoKnBwKTtcbiA0Mzc6XHRcdG5ld19ob29rcyA9IG5mX2hvb2tfZW50cmllc19ncm93KHAsIHJlZyk7XG4gNDM4Olx0XG4gNDM5Olx0XHRpZiAoIUlTX0VSUihuZXdfaG9va3MpKSB7XG4gNDQwOlx0XHRcdGJ1bXBfaG9va19iYXNlX3NlcShuZXQpO1xuIDQ0MTpcdFx0XHRob29rc192YWxpZGF0ZShuZXdfaG9va3MpO1xuIDQ0MjpcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKnBwLCBuZXdfaG9va3MpO1xuIDQ0MzpcdFx0fVxuIDQ0NDpcdFxuIDQ0NTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mX2hvb2tfbXV0ZXgpO1xuIDQ0NjpcdFx0aWYgKElTX0VSUihuZXdfaG9va3MpKVxuIDQ0NzpcdFx0XHRyZXR1cm4gUFRSX0VSUihuZXdfaG9va3MpO1xuIDQ0ODpcdFxuIDQ0OTpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX0lOR1JFU1NcbiA0NTA6XHRcdGlmIChuZl9pbmdyZXNzX2hvb2socmVnLCBwZikpXG4gNDUxOlx0XHRcdG5ldF9pbmNfaW5ncmVzc19xdWV1ZSgpO1xuIDQ1MjpcdCNlbmRpZlxuIDQ1MzpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX0VHUkVTU1xuIDQ1NDpcdFx0aWYgKG5mX2VncmVzc19ob29rKHJlZywgcGYpKVxuIDQ1NTpcdFx0XHRuZXRfaW5jX2VncmVzc19xdWV1ZSgpO1xuIDQ1NjpcdCNlbmRpZlxuIDQ1NzpcdFx0bmZfc3RhdGljX2tleV9pbmMocmVnLCBwZik7XG4gNDU4Olx0XG4gNDU5Olx0XHRCVUdfT04ocCA9PSBuZXdfaG9va3MpO1xuIDQ2MDpcdFx0bmZfaG9va19lbnRyaWVzX2ZyZWUocCk7XG4gNDYxOlx0XHRyZXR1cm4gMDtcbiA0NjI6XHR9XG4gNDYzOlx0XG4gNDY0Olx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5OTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIE5ldGZpbHRlciBVbnJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgTmV0ZmlsdGVyIGhvb2tzIGFyZSB1bnJlZ2lzdGVyZWQsIGVzcGVjaWFsbHkgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgX19uZl91bnJlZ2lzdGVyX25ldF9ob29rYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvY29yZS5jYC4gVGhpcyBzdWdnZXN0cyBhIGNvcmUsIGludGVybmFsIGZ1bmN0aW9uLCByYXRoZXIgdGhhbiBhbiBBUEkgZXhwb3NlZCBkaXJlY3RseSB0byBtb2R1bGVzLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgYXQgdGhlIGhlYXJ0IG9mIHJlbW92aW5nIGEgaG9vayBmcm9tIGEgc3BlY2lmaWMgbmV0d29yayBuYW1lc3BhY2UsIGdpdmVuIHRoZSBgbmV0YCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaG9vayBsaXN0cywgYW55IGxvY2tzIHRoYXQgYXJlIGxpa2VseSBpbnZvbHZlZCwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHRyYWZmaWMgdGhhdCB3YXMgcHJldmlvdXNseSByb3V0ZWQgdGhyb3VnaCB0aG9zZSBob29rcy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjbGVhbnVwIG9wZXJhdGlvbnMsIHJlZmVyZW5jZSBjb3VudGluZyAoaWYgcHJlc2VudCksIGFuZCBlcnJvciBoYW5kbGluZy4gSSBhbnRpY2lwYXRlIHNlZWluZyBpbnRlcmFjdGlvbnMgd2l0aCBgbmZfaG9va19vcHNgIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbGx5IGltcGxpY2F0aW9ucyBmb3IgY29ubnRyYWNrIG9yIG90aGVyIHN0YXRlZnVsIG1vZHVsZXMgd2hpY2ggbWF5IGJlIGRlcGVuZGVudCBvbiB0aG9zZSBob29rcy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyB2ZXJpZnkgaWYgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBmcm9tIHVucmVnaXN0ZXIgY2FsbGJhY2tzLCBvciBpZiBpdCBtaWdodCBiZSBjYWxsZWQgaW4gb3RoZXIgc2NlbmFyaW9zIChlLmcuLCBuYW1lc3BhY2UgZGVzdHJ1Y3Rpb24pLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaXMgZnVuY3Rpb24mIzM5O3MgcmVsYXRpb24gdG8gb3RoZXIgYXNzb2NpYXRlZCBmdW5jdGlvbnMgbGlrZSBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIGxpZmVjeWNsZSBvZiBhIG5ldGZpbHRlciBob29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcbiA1MDE6XHRcdG11dGV4X2xvY2soXHUwMDI2bmZfaG9va19tdXRleCk7XG4gNTAyOlx0XG4gNTAzOlx0XHRwID0gbmZfZW50cnlfZGVyZWZlcmVuY2UoKnBwKTtcbiA1MDQ6XHRcdGlmIChXQVJOX09OX09OQ0UoIXApKSB7XG4gNTA1Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZuZl9ob29rX211dGV4KTtcbiA1MDY6XHRcdFx0cmV0dXJuO1xuIDUwNzpcdFx0fVxuIDUwODpcdFxuIDUwOTpcdFx0aWYgKG5mX3JlbW92ZV9uZXRfaG9vayhwLCByZWcpKSB7XG4gNTEwOlx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xuIDUxMTpcdFx0XHRpZiAobmZfaW5ncmVzc19ob29rKHJlZywgcGYpKVxuIDUxMjpcdFx0XHRcdG5ldF9kZWNfaW5ncmVzc19xdWV1ZSgpO1xuIDUxMzpcdCNlbmRpZlxuIDUxNDpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX0VHUkVTU1xuIDUxNTpcdFx0XHRpZiAobmZfZWdyZXNzX2hvb2socmVnLCBwZikpXG4gNTE2Olx0XHRcdFx0bmV0X2RlY19lZ3Jlc3NfcXVldWUoKTtcbiA1MTc6XHQjZW5kaWZcbiA1MTg6XHRcdFx0bmZfc3RhdGljX2tleV9kZWMocmVnLCBwZik7XG4gNTE5Olx0XHRcdGJ1bXBfaG9va19iYXNlX3NlcShuZXQpO1xuIDUyMDpcdFx0fSBlbHNlIHtcbiA1MjE6XHRcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O2hvb2sgbm90IGZvdW5kLCBwZiAlZCBudW0gJWRcJiMzNDssIHBmLCByZWctXHUwMDNlaG9va251bSk7XG4gNTIyOlx0XHR9XG4gNTIzOlx0XG4gNTI0Olx0XHRwID0gX19uZl9ob29rX2VudHJpZXNfdHJ5X3NocmluayhwLCBwcCk7XG4gNTI1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bmZfaG9va19tdXRleCk7XG4gNTI2Olx0XHRpZiAoIXApXG4gNTI3Olx0XHRcdHJldHVybjtcbiA1Mjg6XHRcbiA1Mjk6XHRcdG5mX3F1ZXVlX25mX2hvb2tfZHJvcChuZXQpO1xuIDUzMDpcdFx0bmZfaG9va19lbnRyaWVzX2ZyZWUocCk7XG4gNTMxOlx0fVxuIDUzMjpcdFxuIDUzMzpcdHZvaWQgbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxuIDUzNDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4NTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIElzIHRoaXMgY29kZSByaXBlIGZvciBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgcG9zaXRpdmUgaW5kaWNhdG9ycyBhcmUgc2NyZWFtaW5nICYjMzQ7eWVzLiYjMzQ7IFdlJiMzOTtyZSBsb29raW5nIGF0IGNvZGUgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIOKAkyBhbHJlYWR5IGEgZ29vZCBzaWduLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbmN5IGlzc3VlcyBpbnZvbHZpbmcgbG9ja2xlc3MgUkNVIHJlYWRzIGFuZCBzZXF1ZW5jZSBjb3VudGVycyAoYGhvb2tfYmFzZV9zZXFgLCBgbmF0X2hvb2tfYmFzZV9zZXFgKS4gVGhlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgaG9vayByZWdpc3RlcmluZywgdW5yZWdpc3RlcmluZyBhbmQgbmV0bGluayBkdW1wcyAoYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGApIGFyZSBhbGwgaW4gcGxheSBzaW11bHRhbmVvdXNseS4gVGhlIGZhY3QgdGhhdCB0aGUgY29kZSB0b3VjaGVzIGR1bXAgcmVzdW1wdGlvbiwgYXJndW1lbnQgaW5kZXhpbmcsIHNlcXVlbmNlIGNoZWNrcywgYW5kIGNvbnNpc3RlbmN5IGNoZWNrcz8gVGhhdCYjMzk7cyBnb2xkLiBgV29ydGhGdXp6aW5nYD8gRGVmaW5pdGVseSB0cnVlLgoKTm93LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhpcyBmb3IgZnV6emluZy4gV2UgbmVlZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIEZpcnN0LCB3ZSBrbm93IHdlJiMzOTt2ZSBjb25maXJtZWQgYFdvcnRoRnV6emluZ2AgaXMgdHJ1ZS4gVGhlbiwgd2UgbmVlZCB0byBrbm93IGBFbmFibGVDb25maWdzYDoKCkxvb2tzIGxpa2Ugd2UgbmVlZDoKCiogICBgTkVURklMVEVSYCAtIHRoYXQmIzM5O3MgYSBnaXZlbi4KKiAgIGBORVRGSUxURVJfTkVUTElOS19IT09LYCAtIHdoaWNoIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAgYW5kIGBORl9UQUJMRVNgICh3aGljaCBzZWxlY3RzIGBORVRGSUxURVJfTkVUTElOS2ApLgoqICAgYE5GX05BVGAg4oCTIHRoaXMgaXMga2V5IHNpbmNlIGNoYW5nZXMgYXJlIGluIGBuZl9uYXRfY29yZS5jYC4KCkkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aG9zZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gSW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIEkgbmVlZCB0byBjb25maXJtOgoKKiAgIGBORVRGSUxURVJfTkVUTElOS19IT09LYDogVGhpcyBpbmRlZWQgYGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEYCwgYGRlcGVuZHMgb24gTkZfVEFCTEVTYCwgYW5kIGBzZWxlY3QgTkVURklMVEVSX05FVExJTktgLiBDaGVja3Mgb3V0LgoqICAgYE5GX05BVGA6IFRpbWUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZfTkFUYC4gTmVlZCB0byBsb29rIGF0IHRob3NlIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX05BVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9OTk9aWYgTkZfTkFUXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDA6Y29uZmlnIE5GX05BVF9TTk1QX0JBU0lDXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtCYXNpYyBTTk1QLUFMRyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTE3LVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTE4OmNvbmZpZyBORl9OQVRfUFBUUFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTE5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX05BVF9IMzIzXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXHR0cmlzdGF0ZVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zOTg9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1Rcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDA2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQwNzpjb25maWcgTkZfTkFUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDA4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDE1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQxNjpjb25maWcgTkZfTkFUX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQxNy1cdHRyaXN0YXRlXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQyMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MjE6Y29uZmlnIE5GX05BVF9GVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MjItXHR0cmlzdGF0ZVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MjUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDI2OmNvbmZpZyBORl9OQVRfSVJDXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDI3LVx0dHJpc3RhdGVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDMwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQzMTpjb25maWcgTkZfTkFUX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzMi1cdHRyaXN0YXRlXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MzY6Y29uZmlnIE5GX05BVF9URlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDM3LVx0dHJpc3RhdGVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDQwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ0MTpjb25maWcgTkZfTkFUX1JFRElSRUNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDQyLVx0Ym9vbFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NDQ6Y29uZmlnIE5GX05BVF9NQVNRVUVSQURFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDQ1LVx0Ym9vbFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NDc6Y29uZmlnIE5GX05BVF9PVlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjU2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246CgoqKkFuYWx5emluZyBgbmV0L25ldGZpbHRlci9LY29uZmlnYCAtIEZvY3VzZWQgb24gTGluZSA0MDcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZSA0MDcgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBzbyB0aGlzIGxpbmUgaXMgbGlrZWx5IGNvbnRyaWJ1dGluZyB0byB0aGUgYnVpbGQgcHJvY2VzcyBpbiBzb21lIHdheS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIG1vZHVsZSBiZWluZyBjb25maWd1cmVkIG9yIGVuYWJsZWQvZGlzYWJsZWQgdGhlcmUsIHRoZSBzcGVjaWZpYyBmZWF0dXJlLCBhbmQgaXRzIGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb21wb25lbnRzLiBTaW5jZSBJJiMzOTttIHZlcnkgZmFtaWxpYXIgd2l0aCBuZXRmaWx0ZXIgYW5kIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcywgSSYjMzk7bGwgYmUgcXVpY2tseSBpZGVudGlmeWluZyBrZXl3b3JkcyBhbmQgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gbGluZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O2xsIGV4cGVjdCB0byBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBuZXRmaWx0ZXIgbW9kdWxlLCBvcHRpb24sIG9yIHBlcmhhcHMgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgdGhhdCBndWlkZXMgd2hhdCBnZXRzIGluY2x1ZGVkIGluIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDU6XHRcdCAgdGhlIGVucXVldWVkIHZpYSBORk5FVExJTksuXG4gNDA2Olx0XG4gNDA3Olx0Y29uZmlnIE5GX05BVFxuIDQwODpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIHN1cHBvcnRcJiMzNDtcbiA0MDk6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNDEwOlx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiA0MTE6XHRcdGhlbHBcbiA0MTI6XHRcdCAgVGhlIE5BVCBvcHRpb24gYWxsb3dzIG1hc3F1ZXJhZGluZywgcG9ydCBmb3J3YXJkaW5nIGFuZCBvdGhlclxuIDQxMzpcdFx0ICBmb3JtcyBvZiBmdWxsIE5ldHdvcmsgQWRkcmVzcyBQb3J0IFRyYW5zbGF0aW9uLiBUaGlzIGNhbiBiZVxuIDQxNDpcdFx0ICBjb250cm9sbGVkIGJ5IGlwdGFibGVzLCBpcDZ0YWJsZXMgb3IgbmZ0LlxuIDQxNTpcdFxuIDQxNjpcdGNvbmZpZyBORl9OQVRfQU1BTkRBXG4gNDE3Olx0XHR0cmlzdGF0ZVxuIDQxODpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX05BVFxuIDQxOTpcdFx0ZGVmYXVsdCBORl9OQVQgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDS19BTUFOREFcbiA0MjA6XHRcbiA0MjE6XHRjb25maWcgTkZfTkFUX0ZUUFxuIDQyMjpcdFx0dHJpc3RhdGVcbiA0MjM6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9OQVRcbiA0MjQ6XHRcdGRlZmF1bHQgTkZfTkFUIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0tfRlRQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODIzCgkJCQkJCQlvdXRwdXQ6IDI1NQoJCQkJCQkJdGhvdWdodHM6IDExNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTmV0ZmlsdGVyIE5ldGxpbmsgSG9vayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5pdGlhbCBjaGVjayBvZiBgTkVURklMVEVSX05FVExJTktfSE9PS2AgYW5kIHJlbGF0ZWQgb3B0aW9ucyB0ZWxscyBtZSB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV0bGluay1iYXNlZCBuZXRmaWx0ZXIgaG9va3MuIEkgc2hvdWxkIGhhdmUgYWxzbyB2ZXJpZmllZCBhbGwgdGhlIHJlbGF0ZWQgbmV0ZmlsdGVyIG9wdGlvbnMgZm9yIGZ1bGwgY292ZXJhZ2UsIGFuZCBpdCBsb29rcyBsaWtlIEkgZGlkOiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9UQUJMRVNgLCBgTkVURklMVEVSX05FVExJTktgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9OQVRgLiBHb29kLiBOb3cgdG8gcGlucG9pbnQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpbXBhY3RlZC4KCk15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLiBMb29raW5nIGF0IHRoZSBjb2RlLCBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcyBrZXk6IGBuZm5sX2hvb2tfZHVtcGAsIGBuZm5sX2hvb2tfZHVtcF9uYXRgLCBgbmZubF9ob29rX2dldGAsIGBuZm5sX2hvb2tfZHVtcF9zdGFydGAsIGBuZl9uYXRfcmVnaXN0ZXJfZm5gLCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gLCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgLCBgbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AsIGBfX25mX3JlZ2lzdGVyX25ldF9ob29rYCwgYW5kIGBfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2tgLiBJIGNoZWNrZWQsIGJ1dCBub25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdWJpcXVpdG91cyBmdW5jdGlvbnMgc3VjaCBhcyBtZW1vcnkgYWxsb2NhdG9ycyBvciBwYWdlIGZhdWx0IGhhbmRsZXJzLiBUaGV5JiMzOTtyZSBhbGwgdmVyeSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBuZXRmaWx0ZXIgYW5kIG5ldGxpbmssIHdoaWNoIGlzIHdoYXQgSSBleHBlY3QuIEkgcmUtY2hlY2tlZCB0aGVtIHRvIGJlIGNlcnRhaW4uCgpJIHRoZW4gZGlkIGEgbW9yZSB0aG9yb3VnaCBkaWZmIGNoZWNrLCB3aGljaCBjb25maXJtcyB0aGVzZSBhcmUgaW5kZWVkIHRoZSBhbHRlcmVkIGZ1bmN0aW9ucyBpbiBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYCwgYG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY2AgYW5kIGBuZXQvbmV0ZmlsdGVyL2NvcmUuY2AsIHBsdXMgdGhlIGFkZGVkIGZpZWxkcyBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgaW4gYGluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oYC4gSXQgYWxzbyBnYXZlIG1lIGBuZXRmaWx0ZXJfbmV0X2luaXRgIGluIGBjb3JlLmNgIGFuZCBhIHN0cnVjdCBpbiBgbmZuZXRsaW5rX2hvb2suY2AuIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIGV2ZXJ5dGhpbmcgbm93LgoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IG15IHJlYXNvbmluZy4gVGhlIHBhdGNoIGlzIGFib3V0IGludHJvZHVjaW5nIHNlcXVlbmNlIGNvdW50ZXJzIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZHVyaW5nIG5ldGxpbmsgbmV0ZmlsdGVyIGhvb2sgZHVtcGluZy4gSXQgYWZmZWN0cyBob29rIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24sIGFzIHdlbGwgYXMgdGhlIHJlc3RhcnQgYW5kIGNvbnNpc3RlbmN5IGNoZWNraW5nIGxvZ2ljLiBUaGlzIGltcGFjdHMgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgc29ja2V0cyBhbmQgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0IGNvbmN1cnJlbmN5IHJlZ3Jlc3Npb25zLCBidWdzIGluIHJlc3RhcnQgaGFuZGxpbmcsIGFuZCBjb25zaXN0ZW5jeSBjaGVjayBlcnJvcnMuCgpTbywgdG8gcmVjYXA6IG15IGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0LCBteSBmb2N1cyBzeW1ib2xzIGFyZSBzcG90IG9uLCBhbmQgbXkgcmVhc29uaW5nIGlzIHNvdW5kLiBOb3cgaXQmIzM5O3MgdGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19IT09LJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZubF9ob29rX2R1bXAmIzM0OywKICAgICYjMzQ7bmZubF9ob29rX2R1bXBfbmF0JiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O25mbmxfaG9va19nZXQmIzM0OywKICAgICYjMzQ7bmZfbmF0X3JlZ2lzdGVyX2ZuJiMzNDssCiAgICAmIzM0O25mX25hdF91bnJlZ2lzdGVyX2ZuJiMzNDssCiAgICAmIzM0O25mX3JlZ2lzdGVyX25ldF9ob29rJiMzNDssCiAgICAmIzM0O25mX3VucmVnaXN0ZXJfbmV0X2hvb2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2VxdWVuY2UgdHJhY2tpbmcgKGhvb2tfYmFzZV9zZXEgYW5kIG5hdF9ob29rX2Jhc2Vfc2VxKSB0byBkZXRlY3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGR1cmluZyBuZXRsaW5rIGR1bXAgb2YgbmV0ZmlsdGVyIGFuZCBOQVQgaG9va3MsIHJlZmFjdG9yaW5nIHRoZSBkdW1wIGl0ZXJhdGlvbiBhbmQgcmVzdGFydC9jb25zaXN0ZW5jeSB2ZXJpZmljYXRpb24gaW4gbmZuZXRsaW5rX2hvb2suYywgYW5kIGJ1bXBpbmcgdGhlIHNlcXVlbmNlIG51bWJlcnMgdXBvbiBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBpbiBjb3JlLmMgYW5kIG5mX25hdF9jb3JlLmMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgYW5kIG5ldGZpbHRlciBob29rIG1hbmFnZW1lbnQgbG9naWMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBuZXRsaW5rIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19IT09LJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZubF9ob29rX2R1bXAmIzM0OywKICAgICYjMzQ7bmZubF9ob29rX2R1bXBfbmF0JiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O25mbmxfaG9va19nZXQmIzM0OywKICAgICYjMzQ7bmZfbmF0X3JlZ2lzdGVyX2ZuJiMzNDssCiAgICAmIzM0O25mX25hdF91bnJlZ2lzdGVyX2ZuJiMzNDssCiAgICAmIzM0O25mX3JlZ2lzdGVyX25ldF9ob29rJiMzNDssCiAgICAmIzM0O25mX3VucmVnaXN0ZXJfbmV0X2hvb2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2VxdWVuY2UgdHJhY2tpbmcgKGhvb2tfYmFzZV9zZXEgYW5kIG5hdF9ob29rX2Jhc2Vfc2VxKSB0byBkZXRlY3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGR1cmluZyBuZXRsaW5rIGR1bXAgb2YgbmV0ZmlsdGVyIGFuZCBOQVQgaG9va3MsIHJlZmFjdG9yaW5nIHRoZSBkdW1wIGl0ZXJhdGlvbiBhbmQgcmVzdGFydC9jb25zaXN0ZW5jeSB2ZXJpZmljYXRpb24gaW4gbmZuZXRsaW5rX2hvb2suYywgYW5kIGJ1bXBpbmcgdGhlIHNlcXVlbmNlIG51bWJlcnMgdXBvbiBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBpbiBjb3JlLmMgYW5kIG5mX25hdF9jb3JlLmMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgYW5kIG5ldGZpbHRlciBob29rIG1hbmFnZW1lbnQgbG9naWMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBuZXRsaW5rIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgKSB0byBuZXRmaWx0ZXIgYW5kIE5BVCBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiB0byBwcm92aWRlIGR1bXAgY29uc2lzdGVuY3kgZGV0ZWN0aW9uIGluIGBuZm5ldGxpbmtfaG9vay5jYC5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIHN0cnVjdHVyZSBidWZmZXIgbGVuZ3RocyBpbiBhIHdheSB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIE5ldGxpbmsgY2FsbGJhY2tzIGBjYi1cdTAwM2VhcmdzYCBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0sIGFuZCBgc3RydWN0IG5ldG5zX25mYCBzZXF1ZW5jZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdCgpYC5cbi0gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGRlcmVmZXJlbmNpbmcsIGxpc3QgdHJhdmVyc2FsIGJvdW5kcywgb3IgaG9vayBlbnRyeSBsaWZlY3ljbGVzLCB3aGljaCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMDlkNTg3OGU4ZGNkNDhmMWEwYTM5YjYzZDYxZTljNmI5ZWNiYTMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAyMjo0NzoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgKaW5kZXggYTZhMGJmNGEyNDdlNS4uN2ZkNzgzOTRkMWU3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgKQEAgLTMzLDUgJiM0MzszMyw3IEBAIHN0cnVjdCBuZXRuc19uZiB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfREVGUkFHX0lQVjYpCiAJdW5zaWduZWQgaW50IGRlZnJhZ19pcHY2X3VzZXJzOwogI2VuZGlmCiYjNDM7CXVuc2lnbmVkIGludCBob29rX2Jhc2Vfc2VxOwomIzQzOwl1bnNpZ25lZCBpbnQgbmF0X2hvb2tfYmFzZV9zZXE7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCmluZGV4IDY3NWExMDM0YjM0MDAuLmEyODRiMzI0MTIxMWQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCkBAIC0zODYsNiAmIzQzOzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuZl9zdGF0aWNfa2V5X2RlYyhjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgaW50IHBmKQogI2VuZGlmCiB9CiAKJiM0MztzdGF0aWMgdm9pZCBidW1wX2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC0mZ3Q7bmYuaG9va19iYXNlX3NlcSk7CiYjNDM7CiYjNDM7CXdoaWxlICgmIzQzOyYjNDM7YmFzZV9zZXEgPT0gMCkKJiM0MzsJCTsKJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtuZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsCiAJCQkJICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZykKIHsKQEAgLTQyOCw2ICYjNDM7NDM3LDcgQEAgc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLAogCW5ld19ob29rcyA9IG5mX2hvb2tfZW50cmllc19ncm93KHAsIHJlZyk7CiAKIAlpZiAoIUlTX0VSUihuZXdfaG9va3MpKSB7CiYjNDM7CQlidW1wX2hvb2tfYmFzZV9zZXEobmV0KTsKIAkJaG9va3NfdmFsaWRhdGUobmV3X2hvb2tzKTsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKCpwcCwgbmV3X2hvb2tzKTsKIAl9CkBAIC01MDYsNiAmIzQzOzUxNiw3IEBAIHN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZiwKIAkJCW5ldF9kZWNfZWdyZXNzX3F1ZXVlKCk7CiAjZW5kaWYKIAkJbmZfc3RhdGljX2tleV9kZWMocmVnLCBwZik7CiYjNDM7CQlidW1wX2hvb2tfYmFzZV9zZXEobmV0KTsKIAl9IGVsc2UgewogCQlXQVJOX09OQ0UoMSwgJiMzNDtob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkJiMzNDssIHBmLCByZWctJmd0O2hvb2tudW0pOwogCX0KQEAgLTc4NCw2ICYjNDM7Nzk1LDggQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5ldGZpbHRlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiAJCXJldHVybiAtRU5PTUVNOwogCX0KICNlbmRpZgomIzQzOwluZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEgPSAxOwomIzQzOwluZXQtJmd0O25mLm5hdF9ob29rX2Jhc2Vfc2VxID0gMTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IDhhYzMyNmUxZWI1YmEuLmZmMmNiYThkZjg4NjEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKQEAgLTExNjAsNiAmIzQzOzExNjAsMTUgQEAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsCiB9CiAjZW5kaWYKIAomIzQzO3N0YXRpYyB2b2lkIGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC0mZ3Q7bmYubmF0X2hvb2tfYmFzZV9zZXEpOwomIzQzOwomIzQzOwl3aGlsZSAoJiM0MzsmIzQzO2Jhc2Vfc2VxID09IDApCiYjNDM7CQk7CiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7bmV0LSZndDtuZi5uYXRfaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgbmZfY3RfaGVscGVyX2V4cGVjdGZuIGZvbGxvd19tYXN0ZXJfbmF0ID0gewogCS5uYW1lCQk9ICYjMzQ7bmF0LWZvbGxvdy1tYXN0ZXImIzM0OywKIAkuZXhwZWN0Zm4JPSBuZl9uYXRfZm9sbG93X21hc3RlciwKQEAgLTEyNDUsOCAmIzQzOzEyNTQsMTAgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywKIAl9CiAKIAlyZXQgPSBuZl9ob29rX2VudHJpZXNfaW5zZXJ0X3JhdygmYW1wO3ByaXYtJmd0O2VudHJpZXMsIG9wcyk7Ci0JaWYgKHJldCA9PSAwKQomIzQzOwlpZiAocmV0ID09IDApIHsKJiM0MzsJCWJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTsKIAkJbmF0X3Byb3RvX25ldC0mZ3Q7dXNlcnMmIzQzOyYjNDM7OwomIzQzOwl9CiAKIAltdXRleF91bmxvY2soJmFtcDtuZl9uYXRfcHJvdG9fbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0xMjg0LDYgJiM0MzsxMjk1LDcgQEAgdm9pZCBuZl9uYXRfdW5yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywKIAkJZ290byB1bmxvY2s7CiAJcHJpdiA9IG5hdF9vcHNbaG9va251bV0ucHJpdjsKIAluZl9ob29rX2VudHJpZXNfZGVsZXRlX3JhdygmYW1wO3ByaXYtJmd0O2VudHJpZXMsIG9wcyk7CiYjNDM7CWJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTsKIAogCWlmIChuYXRfcHJvdG9fbmV0LSZndDt1c2VycyA9PSAwKSB7CiAJCW5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmF0X29wcywgb3BzX2NvdW50KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYwppbmRleCA5NTAwNWU5YTYwNjY4Li4yMWE3NTkxNjhjMzg0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jCkBAIC01NCw3ICYjNDM7NTQsNiBAQCBzdGF0aWMgaW50IG5mX25ldGxpbmtfZHVtcF9zdGFydF9yY3Uoc3RydWN0IHNvY2sgKm5sc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAKIHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhIHsKIAljaGFyIGRldm5hbWVbSUZOQU1TSVpdOwotCXVuc2lnbmVkIGxvbmcgaGVhZHY7CiAJdTggaG9vazsKIH07CiAKQEAgLTMzOCwyNyAmIzQzOzMzNyw0OCBAQCBuZm5sX2hvb2tfZW50cmllc19oZWFkKHU4IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpkZQogfQogCiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LAotCQkJICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsCi0JCQkgICAgICBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgc2VxKQomIzQzOwkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSkKIHsKIAlzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtJmd0O3ByaXY7Ci0Jc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LSZndDtlbnRyaWVzKTsKJiM0MzsJc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLSZndDtkYXRhOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChubHNrYi0mZ3Q7c2spOwogCXN0cnVjdCBuZl9ob29rX29wcyAqKm5hdF9vcHM7Ci0JaW50IGksIGVycjsKJiM0MzsJdW5zaWduZWQgaW50IGkgPSBjYi0mZ3Q7YXJnc1sxXTsKJiM0MzsJc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTsKJiM0MzsJdW5zaWduZWQgaW50IGJhc2Vfc2VxOwomIzQzOwlpbnQgZXJyID0gMDsKIAomIzQzOwliYXNlX3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtuZXQtJmd0O25mLm5hdF9ob29rX2Jhc2Vfc2VxKTsKJiM0MzsKJiM0MzsJZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LSZndDtlbnRyaWVzKTsKIAlpZiAoIWUpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byBvdXQ7CiAKIAluYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBlLSZndDtudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykgewotCQllcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgbmF0X29wc1tpXSwKLQkJCQkJIG9wcy0mZ3Q7cHJpb3JpdHksIGZhbWlseSwgc2VxKTsKJiM0MzsJZm9yICg7IGkgJmx0OyBlLSZndDtudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsCiYjNDM7CQkJCQkgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLAomIzQzOwkJCQkJIG9wcy0mZ3Q7cHJpb3JpdHksIGZhbWlseSwKJiM0MzsJCQkJCSBjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKJiM0MzsJCQlicmVhazsKJiM0MzsKIAl9Ci0JcmV0dXJuIDA7CiYjNDM7b3V0OgomIzQzOwlpZiAoIWVycikgewomIzQzOwkJaSA9IDA7CiYjNDM7CX0KJiM0MzsJY2ItJmd0O2FyZ3NbMV0gPSBpOwomIzQzOwomIzQzOwlpZiAoY2ItJmd0O2FyZ3NbMl0gJmFtcDsmYW1wOyBiYXNlX3NlcSAhPSBjYi0mZ3Q7YXJnc1syXSkgewomIzQzOwkJY2ItJmd0O3NlcSYjNDM7JiM0Mzs7CiYjNDM7CQllcnIgPSAtRUlOVFI7CiYjNDM7CX0KJiM0MzsJY2ItJmd0O2FyZ3NbMl0gPSBiYXNlX3NlcTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCkBAIC0zNzMsMzUgJiM0MzszOTMsMzEgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCiAJdW5zaWduZWQgaW50IGkgPSBjYi0mZ3Q7YXJnc1swXTsKIAogCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJY2ItJmd0O3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtuZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEpOwogCiAJZSA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBjdHgtJmd0O2hvb2ssIG5ldCwgY3R4LSZndDtkZXZuYW1lKTsKLQlpZiAoIWUpCiYjNDM7CWlmICghZSB8fCBJU19FUlIoZSkpCiAJCWdvdG8gZG9uZTsKIAotCWlmIChJU19FUlIoZSkpIHsKLQkJY2ItJmd0O3NlcSYjNDM7JiM0Mzs7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpZSAhPSBjdHgtJmd0O2hlYWR2IHx8IGkgJmd0Oz0gZS0mZ3Q7bnVtX2hvb2tfZW50cmllcykKLQkJY2ItJmd0O3NlcSYjNDM7JiM0Mzs7Ci0KIAlvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpOwogCiAJZm9yICg7IGkgJmx0OyBlLSZndDtudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykgewotCQlpZiAob3BzW2ldLSZndDtob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKQotCQkJZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjdHgsIG9wc1tpXSwgZmFtaWx5LAotCQkJCQkJIGNiLSZndDtubGgtJmd0O25sbXNnX3NlcSk7Ci0JCWVsc2UKLQkJCWVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sCi0JCQkJCQkgb3BzW2ldLSZndDtwcmlvcml0eSwgZmFtaWx5LAomIzQzOwkJY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTsKJiM0MzsKJiM0MzsJCWlmIChjdXItJmd0O2hvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpCiYjNDM7CQkJZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjYiwgY3VyLCBmYW1pbHkpOwomIzQzOwkJZWxzZSB7CiYjNDM7CQkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1ciwKJiM0MzsJCQkJCQkgY3VyLSZndDtwcmlvcml0eSwgZmFtaWx5LAogCQkJCQkJIGNiLSZndDtubGgtJmd0O25sbXNnX3NlcSk7CiYjNDM7CQl9CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9CiAKIGRvbmU6Ci0JbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTsKJiM0MzsJaWYgKG5sc2tiLSZndDtsZW4gJmd0OyAwKQomIzQzOwkJbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAljYi0mZ3Q7YXJnc1swXSA9IGk7CiAJcmV0dXJuIG5sc2tiLSZndDtsZW47CkBAIC00NDIsMTAgJiM0Mzs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzdHJzY3B5KGN0eC0mZ3Q7ZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC0mZ3Q7ZGV2bmFtZSkpOwotCWN0eC0mZ3Q7aGVhZHYgPSAodW5zaWduZWQgbG9uZyloZWFkOwogCWN0eC0mZ3Q7aG9vayA9IGhvb2tudW07Ci0KLQljYi0mZ3Q7c2VxID0gMTsKIAljYi0mZ3Q7ZGF0YSA9IGN0eDsKIAogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXRmaWx0ZXIgUGF0Y2g6IFRoaW5raW5nIFRocm91Z2ggdGhlIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpbXBhY3RzIG5ldGZpbHRlciBjb3JlLCBzcGVjaWZpY2FsbHkgYG5mX25hdF9jb3JlYCwgYW5kIHRoYXQgYG5mbmV0bGlua19ob29rLmNgIGZpbGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGNoYW5nZXMgdG8gaG9vayByZWdpc3RyYXRpb24gYW5kIG5ldGxpbmsgZHVtcGluZyAtIGludGVyZXN0aW5nLiYjMzQ7CgpGaXJzdCwgSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCB0byBgc3RydWN0IG5ldG5zX25mYC4gTXkgZ3Vlc3MgaXMgdGhpcyBpcyBhYm91dCB2ZXJzaW9uaW5nIG9yIHN5bmNocm9uaXphdGlvbiBmb3IgY2hhbmdlcyB0byB0aGUgaG9vayByZWdpc3RyYXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBzZXR0aW5nIHRoZSBzdGFnZSBmb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gY29uY3VycmVudCBhY2Nlc3Mgb3IgZGF0YSBjb25zaXN0ZW5jeS4gSW5jcmVtZW50aW5nIHRoZXNlIHNlcXVlbmNlIG51bWJlcnMgb24gcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uLi4uIHl1cCwgdGhhdCByZWluZm9yY2VzIG15IGFzc3VtcHRpb24gYWJvdXQgY29uY3VycmVuY3kgY29udHJvbC4KCk5vdywgaW50byBgbmZuZXRsaW5rX2hvb2suY2AuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBtb3JlIGNvbmNyZXRlLiBUaGUgbmV0bGluayBkdW1waW5nIG1lY2hhbmlzbSBmb3IgbmV0ZmlsdGVyIGhvb2tzIChgbmZubF9ob29rX2R1bXBgLCBgbmZubF9ob29rX2R1bXBfbmF0YCkgaXMgd2hhdCYjMzk7cyBiZWluZyB0d2Vha2VkLiBVc2luZyBgY2ItJmd0O2FyZ3NbMV1gIGZvciBOQVQgaG9vayBkdW1wIGluZGV4aW5nIGlzIG5vdGFibGUsIGFsc28gdHJhY2tpbmcgYGJhc2Vfc2VxYCwgYW5kIGhhbmRsaW5nIGBjYi0mZ3Q7c2VxYC4gSSBzdXNwZWN0IHRoaXMgaXMgYWJvdXQgZmlsdGVyaW5nIG91dCBkdXBsaWNhdGVzIG9yIGVuc3VyaW5nIHRoYXQgdGhlIGR1bXAgcmVmbGVjdHMgdGhlIHN0YXRlIGF0IGEgcGFydGljdWxhciBwb2ludCBpbiB0aW1lLiBJdCBtaWdodCBiZSB1c2VkIHRvIGltcGxlbWVudCBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgdGhlIGhvb2sgY29uZmlndXJhdGlvbiBvciByZWdpc3RyYXRpb24gc3RhdGUuCgpUaGUgbGluZSBgY2ItJmd0O3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtuZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEpYCBpbiBgbmZubF9ob29rX2R1bXBgIG1ha2VzIGl0IGV2ZW4gY2xlYXJlciDigJMgYWNxdWlyaW5nIHRoZSBzZXF1ZW5jZSBudW1iZXIgd2l0aCBgc21wX2xvYWRfYWNxdWlyZWAgaW1wbGllcyB0aGlzIGlzIGZvciBtZW1vcnkgb3JkZXJpbmcgb3Igc3luY2hyb25pemF0aW9uLCBwZXJoYXBzIHRvIGd1YXJhbnRlZSBjb25zaXN0ZW5jeSBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuIFRoZSB1cGRhdGVzIHVzaW5nIGBSRUFEX09OQ0VgIHJlaW5mb3JjZSBteSB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudCwgYW5kIHRoZSByZW1vdmFsIG9mIGBoZWFkdmAgaXMgcHJvYmFibHkgc29tZSBraW5kIG9mIG9wdGltaXphdGlvbi4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBpbiBgbmZuZXRsaW5rX2hvb2suY2AuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXMgYmVpbmcgZHVtcGVkIGludG8gdGhlIG5ldGxpbmsgc29ja2V0IGJ1ZmZlciBhbmQgaG93IGBuZm5sX2hvb2tfZHVtcF9vbmVgIG9wZXJhdGVzLiBJJiMzOTtsbCBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhlc2Ugc2VxdWVuY2UgbnVtYmVycyBhcmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBob29rIGRhdGEgc3RydWN0dXJlcyB0byBlbnN1cmUgdGhhdCBkdW1wcyBhcmUgY29uc2lzdGVudCBhbmQgY29tcGxldGUsIGVzcGVjaWFsbHkgd2hlbiBoYW5kbGluZyBjb25jdXJyZW50IGhvb2sgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBhY3Rpdml0aWVzLiBJdCBpcyBhbHNvIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCB3aGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gaXMgY29udGFpbmVkIGluIHRoYXQgYXJndW1lbnQgYGNiLSZndDthcmdzWzFdYCwgYXMgaXQgaXMgbGlrZWx5IGNydWNpYWwgZm9yIHRoZSBpbmRleGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZubF9ob29rX2R1bXBfb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTE1OD1zdGF0aWMgaW50IG5mbmxfaG9va19wdXRfbmZ0X2Z0X2luZm8oc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0xODktXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6MTkwOnN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfb25lKHN0cnVjdCBza19idWZmICpubHNrYixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0xOTEtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9MzM5PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzYwLVx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozNjE6XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTM2Mi1cdFx0XHRcdFx0IFJFQURfT05DRShuYXRfb3BzW2ldKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9Mzg0PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy00MDktXHRcdGVsc2Uge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjQxMDpcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTQxMS1cdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIG5mbmV0bGlua19ob29rLmM6IFRoZSBEdW1wIE9wZXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYCBtb2R1bGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBuZm5sX2hvb2tfZHVtcF9vbmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBuZXRmaWx0ZXIgbmV0bGluayBob29rcyBhcmUgZW51bWVyYXRlZCBhbmQgcHJlc2VudGVkLCBzbyB0aGUgZHVtcCBmdW5jdGlvbmFsaXR5IGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIHN0cnVjdHVyZXMgYXJlIHRyYW5zbGF0ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlcyB0aGF0IGFyZSBzZW50IG91dC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGZ1bmN0aW9uIGhhbmRsZXMgZHVtcGluZyBhIHNpbmdsZSBob29rIHJlZ2lzdHJhdGlvbiwgd2hpY2ggbGlrZWx5IG1lYW5zIHRyYXZlcnNpbmcgYSBsaXN0IG9yIHRyZWUgb2YgcmVnaXN0ZXJlZCBob29rcyBhbmQgZm9ybWF0dGluZyB0aGUgZGF0YSBpbnRvIHRoZSBhcHByb3ByaWF0ZSBuZXRsaW5rIGF0dHJpYnV0ZXMuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaXRlcmF0b3IgdGhhdCBwcmVzZW50cyB0aGUgZGF0YSBvdmVyIG5ldGxpbmsuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgZHVyaW5nIHRoZSBkdW1wIHByb2Nlc3MsIHRvbyDigJMgbG9ja2luZywgUkNVLCB3aGF0ZXZlciBtZWNoYW5pc20gdGhleSBlbXBsb3kuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGFuZCB0aGUgYmFzaWMgbWVjaGFuaWNzIG9mIGhvdyBob29rIGluZm9ybWF0aW9uIGlzIHJldHJpZXZlZCBhbmQgc2hhcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHRcdFx0XHRcdCAgZnQtXHUwMDNlbmFtZSwgZnQtXHUwMDNldGFibGUtXHUwMDNlZmFtaWx5KTtcbiAxODE6XHRcdGlmIChyZXQpIHtcbiAxODI6XHRcdFx0bmxhX25lc3RfY2FuY2VsKG5sc2tiLCBuZXN0KTtcbiAxODM6XHRcdFx0cmV0dXJuIHJldDtcbiAxODQ6XHRcdH1cbiAxODU6XHRcbiAxODY6XHRcdG5sYV9uZXN0X2VuZChubHNrYiwgbmVzdCk7XG4gMTg3Olx0XHRyZXR1cm4gMDtcbiAxODg6XHR9XG4gMTg5Olx0XG4gMTkwOlx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIDE5MTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsXG4gMTkyOlx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsIGludCBwcmlvcml0eSxcbiAxOTM6XHRcdFx0XHQgICAgICBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgc2VxKVxuIDE5NDpcdHtcbiAxOTU6XHRcdHUxNiBldmVudCA9IG5mbmxfbXNnX3R5cGUoTkZOTF9TVUJTWVNfSE9PSywgTkZOTF9NU0dfSE9PS19HRVQpO1xuIDE5NjpcdFx0dW5zaWduZWQgaW50IHBvcnRpZCA9IE5FVExJTktfQ0Iobmxza2IpLnBvcnRpZDtcbiAxOTc6XHRcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuIDE5ODpcdFx0aW50IHJldCA9IC1FTVNHU0laRTtcbiAxOTk6XHRcdHUzMiBob29rbnVtO1xuIDIwMDpcdCNpZmRlZiBDT05GSUdfS0FMTFNZTVNcbiAyMDE6XHRcdGNoYXIgc3ltW0tTWU1fU1lNQk9MX0xFTl07XG4gMjAyOlx0XHRjaGFyICptb2R1bGVfbmFtZTtcbiAyMDM6XHQjZW5kaWZcbiAyMDQ6XHRcdG5saCA9IG5mbmxfbXNnX3B1dChubHNrYiwgcG9ydGlkLCBzZXEsIGV2ZW50LFxuIDIwNTpcdFx0XHRcdCAgIE5MTV9GX01VTFRJLCBmYW1pbHksIE5GTkVUTElOS19WMCwgMCk7XG4gMjA2Olx0XHRpZiAoIW5saClcbiAyMDc6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjA4Olx0XG4gMjA5Olx0I2lmZGVmIENPTkZJR19LQUxMU1lNU1xuIDIxMDpcdFx0cmV0ID0gc25wcmludGYoc3ltLCBzaXplb2Yoc3ltKSwgXCYjMzQ7JXBzXCYjMzQ7LCBvcHMtXHUwMDNlaG9vayk7XG4gMjExOlx0XHRpZiAocmV0IFx1MDAzZT0gc2l6ZW9mKHN5bSkpIHtcbiAyMTI6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiAyMTM6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjE0Olx0XHR9XG4gMjE1Olx0XG4gMjE2Olx0XHRtb2R1bGVfbmFtZSA9IHN0cnN0cihzeW0sIFwmIzM0OyBbXCYjMzQ7KTtcbiAyMTc6XHRcdGlmIChtb2R1bGVfbmFtZSkge1xuIDIxODpcdFx0XHRjaGFyICplbmQ7XG4gMjE5Olx0XG4gMjIwOlx0XHRcdCptb2R1bGVfbmFtZSA9ICYjMzk7XFwwJiMzOTs7XG4gMjIxOlx0XHRcdG1vZHVsZV9uYW1lICYjNDM7PSAyO1xuIDIyMjpcdFx0XHRlbmQgPSBzdHJjaHIobW9kdWxlX25hbWUsICYjMzk7XSYjMzk7KTtcbiAyMjM6XHRcdFx0aWYgKGVuZCkge1xuIDIyNDpcdFx0XHRcdCplbmQgPSAwO1xuIDIyNTpcdFxuIDIyNjpcdFx0XHRcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG5sc2tiLCBORk5MQV9IT09LX01PRFVMRV9OQU1FLCBtb2R1bGVfbmFtZSk7XG4gMjI3Olx0XHRcdFx0aWYgKHJldClcbiAyMjg6XHRcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDIyOTpcdFx0XHR9XG4gMjMwOlx0XHR9XG4gMjMxOlx0XG4gMjMyOlx0XHRyZXQgPSBubGFfcHV0X3N0cmluZyhubHNrYiwgTkZOTEFfSE9PS19GVU5DVElPTl9OQU1FLCBzeW0pO1xuIDIzMzpcdFx0aWYgKHJldClcbiAyMzQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjM1Olx0I2VuZGlmXG4gMjM2Olx0XG4gMjM3Olx0XHRpZiAob3BzLVx1MDAzZXBmID09IE5GUFJPVE9fSU5FVCBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZWhvb2tudW0gPT0gTkZfSU5FVF9JTkdSRVNTKVxuIDIzODpcdFx0XHRob29rbnVtID0gTkZfTkVUREVWX0lOR1JFU1M7XG4gMjM5Olx0XHRlbHNlXG4gMjQwOlx0XHRcdGhvb2tudW0gPSBvcHMtXHUwMDNlaG9va251bTtcbiAyNDE6XHRcbiAyNDI6XHRcdHJldCA9IG5sYV9wdXRfYmUzMihubHNrYiwgTkZOTEFfSE9PS19IT09LTlVNLCBodG9ubChob29rbnVtKSk7XG4gMjQzOlx0XHRpZiAocmV0KVxuIDI0NDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAyNDU6XHRcbiAyNDY6XHRcdHJldCA9IG5sYV9wdXRfYmUzMihubHNrYiwgTkZOTEFfSE9PS19QUklPUklUWSwgaHRvbmwocHJpb3JpdHkpKTtcbiAyNDc6XHRcdGlmIChyZXQpXG4gMjQ4Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDI0OTpcdFxuIDI1MDpcdFx0c3dpdGNoIChvcHMtXHUwMDNlaG9va19vcHNfdHlwZSkge1xuIDI1MTpcdFx0Y2FzZSBORl9IT09LX09QX05GX1RBQkxFUzpcbiAyNTI6XHRcdFx0cmV0ID0gbmZubF9ob29rX3B1dF9uZnRfY2hhaW5faW5mbyhubHNrYiwgY3R4LCBzZXEsIG9wcy1cdTAwM2Vwcml2KTtcbiAyNTM6XHRcdFx0YnJlYWs7XG4gMjU0Olx0XHRjYXNlIE5GX0hPT0tfT1BfQlBGOlxuIDI1NTpcdFx0XHRyZXQgPSBuZm5sX2hvb2tfcHV0X2JwZl9wcm9nX2luZm8obmxza2IsIGN0eCwgc2VxLCBvcHMtXHUwMDNlcHJpdik7XG4gMjU2Olx0XHRcdGJyZWFrO1xuIDI1NzpcdFx0Y2FzZSBORl9IT09LX09QX05GVF9GVDpcbiAyNTg6XHRcdFx0cmV0ID0gbmZubF9ob29rX3B1dF9uZnRfZnRfaW5mbyhubHNrYiwgY3R4LCBzZXEsIG9wcy1cdTAwM2Vwcml2KTtcbiAyNTk6XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MTYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0cywgcmVuZGVyZWQgYXMgaWYgSSBhbSBleGFtaW5pbmcgdGhlbToKCioqRGlzc2VjdGluZyB0aGUgTmV0bGluayBIb29rIER1bXBzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGVzZSBOZXRsaW5rIGhvb2sgZHVtcCBmdW5jdGlvbnM6IGBuZm5sX2hvb2tfZHVtcGAsIGBuZm5sX2hvb2tfZHVtcF9uYXRgLCBhbmQgYG5mbmxfaG9va19kdW1wX3N0YXJ0YC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoZSBOZXRmaWx0ZXIgaW5mb3JtYXRpb24uIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVyZSBoYXMgdG8gYmUgc29tZSBraW5kIG9mIGZsb3cgY29udHJvbC4KKiAgIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuCiogICBXaGF0IG1ha2VzIHRoZXNlIHJvdXRpbmVzIGRpZmZlcmVudCBmcm9tIGVhY2ggb3RoZXI/CiogICBBcmUgYG5mbmxfaG9va19kdW1wYCBhbmQgYG5mbmxfaG9va19kdW1wX25hdGAgZGlmZmVyZW50IGluIHRoZWlyIGZ1bmN0aW9uLCBvciBhcmUgdGhleSBkaWZmZXJlbnQgaW4gdGhlaXIgYXBwcm9hY2g/CiogICBXaGF0IGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IG9mIGBuZm5sX2hvb2tfZHVtcF9zdGFydGA/IElzIGl0IHRoZSBpbml0aWFsaXphdGlvbiBvciB0aGUgdHJpZ2dlciBvZiB0aGUgZHVtcCBwcm9jZXNzLCBhbmQgaWYgc28sIGhvdyBpcyBpdCBjb29yZGluYXRlZCB3aXRoIHRoZSBvdGhlciB0d28/CiogICBIb3cgZG8gdGhlc2UgaG9vayBkdW1wcyBjb250cmlidXRlIHRvIHRoZSBvdmVyYWxsIHBpY3R1cmUgb2YgTmV0ZmlsdGVyIG9wZXJhdGlvbnM/CgpJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgZXh0cmFjdGVkIGFuZCB0cmFuc21pdHRlZCwgaG93IHRoZSBkdW1waW5nIGlzIGluaXRpYXRlZCwgYW5kIHdoYXQgc2FmZWd1YXJkcyBhcmUgaW4gcGxhY2UgdG8gbWFuYWdlIHRoZSBmbG93IG9mIGRhdGEsIGVzcGVjaWFsbHkgZm9yIHBvdGVudGlhbGx5IGxhcmdlIGRhdGFzZXRzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGUgbmFtZXMgYW5kIGJyZWFrIGRvd24gdGhlIGNvZGUgbG9naWMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uLiBNeSBmb2N1cyBoZXJlIGlzIG9uIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcyBvZiBob3cgdGhlc2UgaG9va3MgaW50ZXJhY3Qgd2l0aCB0aGUgTmV0bGluayBpbmZyYXN0cnVjdHVyZS4gSSBleHBlY3QgdG8gc2VlIHNwZWNpZmljIGRldGFpbHMgYWJvdXQgYXR0cmlidXRlIGhhbmRsaW5nLCBzZXF1ZW5jZSBudW1iZXIgbWFuYWdlbWVudCwgYW5kIGVycm9yIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzNTpcdFxuIDMzNjpcdFx0cmV0dXJuIGhvb2tfaGVhZDtcbiAzMzc6XHR9XG4gMzM4Olx0XG4gMzM5Olx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9uYXQoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIDM0MDpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiAzNDE6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSlcbiAzNDI6XHR7XG4gMzQzOlx0XHRzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtXHUwMDNlcHJpdjtcbiAzNDQ6XHRcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBjYi1cdTAwM2VkYXRhO1xuIDM0NTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXHUwMDNlc2spO1xuIDM0NjpcdFx0c3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wcztcbiAzNDc6XHRcdHVuc2lnbmVkIGludCBpID0gY2ItXHUwMDNlYXJnc1sxXTtcbiAzNDg6XHRcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmU7XG4gMzQ5Olx0XHR1bnNpZ25lZCBpbnQgYmFzZV9zZXE7XG4gMzUwOlx0XHRpbnQgZXJyID0gMDtcbiAzNTE6XHRcbiAzNTI6XHRcdGJhc2Vfc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xuIDM1MzpcdFxuIDM1NDpcdFx0ZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LVx1MDAzZWVudHJpZXMpO1xuIDM1NTpcdFx0aWYgKCFlKVxuIDM1NjpcdFx0XHRnb3RvIG91dDtcbiAzNTc6XHRcbiAzNTg6XHRcdG5hdF9vcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xuIDM1OTpcdFxuIDM2MDpcdFx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiAzNjE6XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsXG4gMzYyOlx0XHRcdFx0XHRcdCBSRUFEX09OQ0UobmF0X29wc1tpXSksXG4gMzYzOlx0XHRcdFx0XHRcdCBvcHMtXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbiAzNjQ6XHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIDM2NTpcdFx0XHRpZiAoZXJyKVxuIDM2NjpcdFx0XHRcdGJyZWFrO1xuIDM2NzpcdFxuIDM2ODpcdFx0fVxuIDM2OTpcdG91dDpcbiAzNzA6XHRcdGlmICghZXJyKSB7XG4gMzcxOlx0XHRcdGkgPSAwO1xuIDM3MjpcdFx0fVxuIDM3MzpcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IGk7XG4gMzc0Olx0XG4gMzc1Olx0XHRpZiAoY2ItXHUwMDNlYXJnc1syXSBcdTAwMjZcdTAwMjYgYmFzZV9zZXEgIT0gY2ItXHUwMDNlYXJnc1syXSkge1xuIDM3NjpcdFx0XHRjYi1cdTAwM2VzZXEmIzQzOyYjNDM7O1xuIDM3NzpcdFx0XHRlcnIgPSAtRUlOVFI7XG4gMzc4Olx0XHR9XG4gMzc5Olx0XHRjYi1cdTAwM2VhcmdzWzJdID0gYmFzZV9zZXE7XG4gMzgwOlx0XG4gMzgxOlx0XHRyZXR1cm4gZXJyO1xuIDM4MjpcdH1cbiAzODM6XHRcbiAzODQ6XHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYixcbiAzODU6XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiAzODY6XHR7XG4gMzg3Olx0XHRzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpO1xuIDM4ODpcdFx0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLVx1MDAzZWRhdGE7XG4gMzg5Olx0XHRpbnQgZXJyLCBmYW1pbHkgPSBuZm1zZy1cdTAwM2VuZmdlbl9mYW1pbHk7XG4gMzkwOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChubHNrYi1cdTAwM2Vzayk7XG4gMzkxOlx0XHRzdHJ1Y3QgbmZfaG9va19vcHMgKiBjb25zdCAqb3BzO1xuIDM5MjpcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcbiAzOTM6XHRcdHVuc2lnbmVkIGludCBpID0gY2ItXHUwMDNlYXJnc1swXTtcbiAzOTQ6XHRcbiAzOTU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzOTY6XHRcdGNiLVx1MDAzZXNlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXEpO1xuIDM5NzpcdFxuIDM5ODpcdFx0ZSA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBjdHgtXHUwMDNlaG9vaywgbmV0LCBjdHgtXHUwMDNlZGV2bmFtZSk7XG4gMzk5Olx0XHRpZiAoIWUgfHwgSVNfRVJSKGUpKVxuIDQwMDpcdFx0XHRnb3RvIGRvbmU7XG4gNDAxOlx0XG4gNDAyOlx0XHRvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xuIDQwMzpcdFxuIDQwNDpcdFx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiA0MDU6XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcbiA0MDY6XHRcbiA0MDc6XHRcdFx0aWYgKGN1ci1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuIDQwODpcdFx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcbiA0MDk6XHRcdFx0ZWxzZSB7XG4gNDEwOlx0XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1cixcbiA0MTE6XHRcdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4gNDEyOlx0XHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIDQxMzpcdFx0XHR9XG4gNDE0Olx0XHRcdGlmIChlcnIpXG4gNDE1Olx0XHRcdFx0YnJlYWs7XG4gNDE2Olx0XHR9XG4gNDE3Olx0XG4gNDE4Olx0ZG9uZTpcbiA0MTk6XHRcdGlmIChubHNrYi1cdTAwM2VsZW4gXHUwMDNlIDApXG4gNDIwOlx0XHRcdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4gNDIxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA0MjI6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuIDQyMzpcdFx0cmV0dXJuIG5sc2tiLVx1MDAzZWxlbjtcbiA0MjQ6XHR9XG4gNDI1Olx0XG4gNDI2Olx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gNDI3Olx0e1xuIDQyODpcdFx0Y29uc3Qgc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXHUwMDNlbmxoKTtcbiA0Mjk6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqbmxhID0gY2ItXHUwMDNlZGF0YTtcbiA0MzA6XHRcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBOVUxMO1xuIDQzMTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY2ItXHUwMDNlc2tiLVx1MDAzZXNrKTtcbiA0MzI6XHRcdHU4IGZhbWlseSA9IG5mbXNnLVx1MDAzZW5mZ2VuX2ZhbWlseTtcbiA0MzM6XHRcdGNoYXIgbmFtZVtJRk5BTVNJWl0gPSBcJiMzNDtcJiMzNDs7XG4gNDM0Olx0XHRjb25zdCB2b2lkICpoZWFkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTc0CgkJCQkJCQlvdXRwdXQ6IDIzNgoJCQkJCQkJdGhvdWdodHM6IDgzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBcHBsaWNhYmlsaXR5IEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHdhcyBlbnN1cmluZyB0aGUgbmV0bGluayBkdW1wIChgbmZubF9ob29rX2R1bXBgIGFuZCBgbmZubF9ob29rX2R1bXBfbmF0YCkgbWFpbnRhaW5lZCBjb25zaXN0ZW5jeSByZWdhcmRpbmcgbmV0ZmlsdGVyIGFuZCBOQVQgaG9vayBjaGFuZ2VzIGR1cmluZyB0aGUgZHVtcCBwcm9jZXNzLiBUaGUgZml4IGludHJvZHVjZXMgc2VxdWVuY2UgY291bnRlcnMsIGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgdG8gdHJhY2sgdGhlc2UgY2hhbmdlcy4gVGhlc2UgY291bnRlcnMgYXJlIGluaXRpYWxpemVkIGluIGBuZXRmaWx0ZXJfbmV0X2luaXRgIGFuZCBpbmNyZW1lbnRlZCBkdXJpbmcgaG9vayByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24uIEluIHRoZSBkdW1wIGZ1bmN0aW9ucywgYGNiLSZndDtzZXFgIGFuZCBgYmFzZV9zZXFgIGFyZSB1cGRhdGVkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvdW50ZXIgdmFsdWVzLgoKTm93LCBsZXQmIzM5O3Mgc2NydXRpbml6ZSB0aGlzIGZvciBwb3RlbnRpYWwgS01TQU4gY29uY2VybnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCkZpcnN0LCBJIGV4YW1pbmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbi4gVGhlIHNlcXVlbmNlIGNvdW50ZXJzIHRoZW1zZWx2ZXMsIGluIGBzdHJ1Y3QgbmV0bnNfbmZgLCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAxIGR1cmluZyBgbmV0ZmlsdGVyX25ldF9pbml0YC4gV2hpbGUgYG5ldGAgZ2V0cyBga3phbGxvY2AmIzM5O2VkIGFueXdheSwgdGhpcyBpcyBnb29kLiBUaGUgYGNiLSZndDthcmdzYCBhcnJheSAocGFzc2VkIGluIHRoZSBuZXRsaW5rIGNhbGxiYWNrKSBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGNvcmUgYXQgdGhlIGR1bXAmIzM5O3Mgc3RhcnQsIHNvIHdlIGRvbiYjMzk7dCBoYXZlIHRvIHdvcnJ5IGFib3V0IGBjYi0mZ3Q7YXJnc1sxXWAgKGluZGV4KSBvciBgY2ItJmd0O2FyZ3NbMl1gIChiYXNlX3NlcSkgYmVpbmcgdW5pbml0aWFsaXplZC4gVGhlIGFsbG9jYXRpb24gaW4gYG5mbmxfaG9va19kdW1wX3N0YXJ0YCB2aWEgYGt6YWxsb2NgIGFsc28gbG9va3MgY2xlYW4sIGFuZCB0aGUgYGVyciA9IDBgIGFzc2lnbm1lbnQgaW4gYG5mbmxfaG9va19kdW1wX25hdGAgaXMsIG9mIGNvdXJzZSwgcHJvcGVyLiBGaW5hbGx5LCB0aGUgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiB1c2VzIGBuZm5sX21zZ19wdXRgLCBgbmxhX3B1dF9iZTMyYCwgYW5kIHRoZSBsaWtlIOKAkyB0aGVzZSBhcmUgd2VsbC1iZWhhdmVkIGFuZCBoYW5kbGUgYXR0cmlidXRlIGluaXRpYWxpemF0aW9uIGNvcnJlY3RseS4KCkNydWNpYWxseSwgSSBlbnN1cmVkIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXZlciBsZWFrZWQgdG8gdXNlcnNwYWNlIG9yIHJlYWQgYnkgdGhlIHBhdGNoZWQgY29kZS4gVGhlIGZvY3VzIGlzIG9uIHNlcXVlbmNlIGNvdW50ZXIgbWFuYWdlbWVudCBhbmQgaW5kZXggaGFuZGxpbmcgY2xlYW51cHMsIGFuZCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBpbmZvIGxlYWtzLgoKTWVtb3J5IHNhZmV0eSBpcyBhbm90aGVyIGNvbnNpZGVyYXRpb24uIEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0ZmlsdGVyIGFuZCBuZXRsaW5rLCBJIGxvb2tlZCBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMuIFRoZSBjb2RlIGlzIHByb3RlY3RlZCB3aXRoIFJDVSBhbmQgYHNtcF9sb2FkX2FjcXVpcmVgL2BzbXBfc3RvcmVfcmVsZWFzZWAsIG9yIGxvY2tkZXAvS0FTQU4gaWYgcmFjZXMgZXhpc3QuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucywgbm9yIGRvZXMgaXQgdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBidWZmZXJzLgoKRmluYWxseSwgSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIEtNU0FOIGFwcGxpY2FiaWxpdHkuIEkgbWV0aG9kaWNhbGx5IGNoZWNrZWQgYWdhaW5zdCBLTVNBTiYjMzk7cyBjcml0ZXJpYToKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIG5vIG1vZGlmaWVkIHN0cnVjdHVyZXMgYXJlIGFmZmVjdGVkLiBUaGUgbmV0bGluayBtZXNzYWdlcyB1c2Ugc3RhbmRhcmQgYG5sYV9wdXRfKmAgZnVuY3Rpb25zLCB3aGljaCBtZWFucyBvbmx5IGZ1bGx5IGluaXRpYWxpemVkIGFuZCB0eXBlZCBkYXRhIGlzIGNvcGllZC4KCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBJIGNvbmZpcm1lZCB0aGF0IGBjYi0mZ3Q7YXJnc1sxXWAgYW5kIGBjYi0mZ3Q7YXJnc1syXWAgYXJlIGluaXRpYWxpemVkIHRvIDAsIHdoaWNoIGlzIHdoYXQgdGhlIG5ldGxpbmsgY29yZSBkb2VzLiBgYmFzZV9zZXFgIGlzIGxvYWRlZCBmcm9tIHRoZSBpbml0aWFsaXplZCBgbmV0LSZndDtuZi5uYXRfaG9va19iYXNlX3NlcWAuCgozLiAgKipBbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM6KiogVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gVGhlIHNlcXVlbmNlIGNvdW50ZXJzIGluIGBzdHJ1Y3QgbmV0bnNfbmZgIGFyZSBpbml0aWFsaXplZCBpbiBgbmV0ZmlsdGVyX25ldF9pbml0YC4KCjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzOioqIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBpc3N1ZXMgaW4gdGhpcyByZWdhcmQuCgpUaGVyZWZvcmUsIGNvbnNpZGVyaW5nIGFsbCB0aGVzZSBmYWN0b3JzLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgKSB0byBuZXRmaWx0ZXIgYW5kIE5BVCBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiB0byBwcm92aWRlIGR1bXAgY29uc2lzdGVuY3kgZGV0ZWN0aW9uIGluIGBuZm5ldGxpbmtfaG9vay5jYC5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIHN0cnVjdHVyZSBidWZmZXIgbGVuZ3RocyBpbiBhIHdheSB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIE5ldGxpbmsgY2FsbGJhY2tzIGBjYi1cdTAwM2VhcmdzYCBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0sIGFuZCBgc3RydWN0IG5ldG5zX25mYCBzZXF1ZW5jZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdCgpYC5cbi0gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGRlcmVmZXJlbmNpbmcsIGxpc3QgdHJhdmVyc2FsIGJvdW5kcywgb3IgaG9vayBlbnRyeSBsaWZlY3ljbGVzLCB3aGljaCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgKSB0byBuZXRmaWx0ZXIgYW5kIE5BVCBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiB0byBwcm92aWRlIGR1bXAgY29uc2lzdGVuY3kgZGV0ZWN0aW9uIGluIGBuZm5ldGxpbmtfaG9vay5jYC5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIHN0cnVjdHVyZSBidWZmZXIgbGVuZ3RocyBpbiBhIHdheSB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIE5ldGxpbmsgY2FsbGJhY2tzIGBjYi1cdTAwM2VhcmdzYCBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0sIGFuZCBgc3RydWN0IG5ldG5zX25mYCBzZXF1ZW5jZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdCgpYC5cbi0gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGRlcmVmZXJlbmNpbmcsIGxpc3QgdHJhdmVyc2FsIGJvdW5kcywgb3IgaG9vayBlbnRyeSBsaWZlY3ljbGVzLCB3aGljaCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjIxLjQwMzQ2MTYzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDAzODM1MDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9OQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZm5sX2hvb2tfZHVtcFwiLFxuICAgIFwibmZubF9ob29rX2R1bXBfbmF0XCIsXG4gICAgXCJuZm5sX2hvb2tfZHVtcF9zdGFydFwiLFxuICAgIFwibmZubF9ob29rX2dldFwiLFxuICAgIFwibmZfbmF0X3JlZ2lzdGVyX2ZuXCIsXG4gICAgXCJuZl9uYXRfdW5yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfcmVnaXN0ZXJfbmV0X2hvb2tcIixcbiAgICBcIm5mX3VucmVnaXN0ZXJfbmV0X2hvb2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNlcXVlbmNlIHRyYWNraW5nIChgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWApIHRvIG5ldGZpbHRlciBhbmQgTkFUIGhvb2sgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIHRvIHByb3ZpZGUgZHVtcCBjb25zaXN0ZW5jeSBkZXRlY3Rpb24gaW4gYG5mbmV0bGlua19ob29rLmNgLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmUgYnVmZmVyIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkLiBOZXRsaW5rIGNhbGxiYWNrcyBgY2ItXFx1MDAzZWFyZ3NgIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIHN1YnN5c3RlbSwgYW5kIGBzdHJ1Y3QgbmV0bnNfbmZgIHNlcXVlbmNlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgbmV0ZmlsdGVyX25ldF9pbml0KClgLlxcbi0gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGRlcmVmZXJlbmNpbmcsIGxpc3QgdHJhdmVyc2FsIGJvdW5kcywgb3IgaG9vayBlbnRyeSBsaWZlY3ljbGVzLCB3aGljaCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoaG9va19iYXNlX3NlcSBhbmQgbmF0X2hvb2tfYmFzZV9zZXEpIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZHVyaW5nIG5ldGxpbmsgZHVtcCBvZiBuZXRmaWx0ZXIgYW5kIE5BVCBob29rcywgcmVmYWN0b3JpbmcgdGhlIGR1bXAgaXRlcmF0aW9uIGFuZCByZXN0YXJ0L2NvbnNpc3RlbmN5IHZlcmlmaWNhdGlvbiBpbiBuZm5ldGxpbmtfaG9vay5jLCBhbmQgYnVtcGluZyB0aGUgc2VxdWVuY2UgbnVtYmVycyB1cG9uIGhvb2sgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGluIGNvcmUuYyBhbmQgbmZfbmF0X2NvcmUuYy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayBhbmQgbmV0ZmlsdGVyIGhvb2sgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIG5ldGxpbmsgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDc6MjEuNDAzNDY2MTgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA1MzEyMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzA5ZDU4NzhlOGRjZDQ4ZjFhMGEzOWI2M2Q2MWU5YzZiOWVjYmEzMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDIyOjQ3OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcXG5pbmRleCBhNmEwYmY0YTI0N2U1Li43ZmQ3ODM5NGQxZTdiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcXG5AQCAtMzMsNSArMzMsNyBAQCBzdHJ1Y3QgbmV0bnNfbmYge1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfREVGUkFHX0lQVjYpXFxuIFxcdHVuc2lnbmVkIGludCBkZWZyYWdfaXB2Nl91c2VycztcXG4gI2VuZGlmXFxuK1xcdHVuc2lnbmVkIGludCBob29rX2Jhc2Vfc2VxO1xcbitcXHR1bnNpZ25lZCBpbnQgbmF0X2hvb2tfYmFzZV9zZXE7XFxuIH07XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jXFxuaW5kZXggNjc1YTEwMzRiMzQwMC4uYTI4NGIzMjQxMjExZCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jXFxuQEAgLTM4Niw2ICszODYsMTUgQEAgc3RhdGljIHZvaWQgbmZfc3RhdGljX2tleV9kZWMoY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsIGludCBwZilcXG4gI2VuZGlmXFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGJ1bXBfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XFxuK1xcbitcXHR3aGlsZSAoKytiYXNlX3NlcSA9PSAwKVxcbitcXHRcXHQ7XFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZuZXQtXFx1MDAzZW5mLmhvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxcbiB7XFxuQEAgLTQyOCw2ICs0MzcsNyBAQCBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXFxuIFxcdG5ld19ob29rcyA9IG5mX2hvb2tfZW50cmllc19ncm93KHAsIHJlZyk7XFxuIFxcbiBcXHRpZiAoIUlTX0VSUihuZXdfaG9va3MpKSB7XFxuK1xcdFxcdGJ1bXBfaG9va19iYXNlX3NlcShuZXQpO1xcbiBcXHRcXHRob29rc192YWxpZGF0ZShuZXdfaG9va3MpO1xcbiBcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoKnBwLCBuZXdfaG9va3MpO1xcbiBcXHR9XFxuQEAgLTUwNiw2ICs1MTYsNyBAQCBzdGF0aWMgdm9pZCBfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXFxuIFxcdFxcdFxcdG5ldF9kZWNfZWdyZXNzX3F1ZXVlKCk7XFxuICNlbmRpZlxcbiBcXHRcXHRuZl9zdGF0aWNfa2V5X2RlYyhyZWcsIHBmKTtcXG4rXFx0XFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiaG9vayBub3QgZm91bmQsIHBmICVkIG51bSAlZFxcXCIsIHBmLCByZWctXFx1MDAzZWhvb2tudW0pO1xcbiBcXHR9XFxuQEAgLTc4NCw2ICs3OTUsOCBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmV0ZmlsdGVyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gI2VuZGlmXFxuK1xcdG5ldC1cXHUwMDNlbmYuaG9va19iYXNlX3NlcSA9IDE7XFxuK1xcdG5ldC1cXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEgPSAxO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXFxuaW5kZXggOGFjMzI2ZTFlYjViYS4uZmYyY2JhOGRmODg2MSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcXG5AQCAtMTE2MCw2ICsxMTYwLDE1IEBAIG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXAoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiB9XFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIHZvaWQgYnVtcF9uYXRfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xcbitcXG4rXFx0d2hpbGUgKCsrYmFzZV9zZXEgPT0gMClcXG4rXFx0XFx0O1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2bmV0LVxcdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBmb2xsb3dfbWFzdGVyX25hdCA9IHtcXG4gXFx0Lm5hbWVcXHRcXHQ9IFxcXCJuYXQtZm9sbG93LW1hc3RlclxcXCIsXFxuIFxcdC5leHBlY3RmblxcdD0gbmZfbmF0X2ZvbGxvd19tYXN0ZXIsXFxuQEAgLTEyNDUsOCArMTI1NCwxMCBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxcbiBcXHR9XFxuIFxcbiBcXHRyZXQgPSBuZl9ob29rX2VudHJpZXNfaW5zZXJ0X3JhdyhcXHUwMDI2cHJpdi1cXHUwMDNlZW50cmllcywgb3BzKTtcXG4tXFx0aWYgKHJldCA9PSAwKVxcbitcXHRpZiAocmV0ID09IDApIHtcXG4rXFx0XFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xcbiBcXHRcXHRuYXRfcHJvdG9fbmV0LVxcdTAwM2V1c2VycysrO1xcbitcXHR9XFxuIFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTEyODQsNiArMTI5NSw3IEBAIHZvaWQgbmZfbmF0X3VucmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRwcml2ID0gbmF0X29wc1tob29rbnVtXS5wcml2O1xcbiBcXHRuZl9ob29rX2VudHJpZXNfZGVsZXRlX3JhdyhcXHUwMDI2cHJpdi1cXHUwMDNlZW50cmllcywgb3BzKTtcXG4rXFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xcbiBcXG4gXFx0aWYgKG5hdF9wcm90b19uZXQtXFx1MDAzZXVzZXJzID09IDApIHtcXG4gXFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuYXRfb3BzLCBvcHNfY291bnQpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcXG5pbmRleCA5NTAwNWU5YTYwNjY4Li4yMWE3NTkxNjhjMzg0IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xcbkBAIC01NCw3ICs1NCw2IEBAIHN0YXRpYyBpbnQgbmZfbmV0bGlua19kdW1wX3N0YXJ0X3JjdShzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhIHtcXG4gXFx0Y2hhciBkZXZuYW1lW0lGTkFNU0laXTtcXG4tXFx0dW5zaWduZWQgbG9uZyBoZWFkdjtcXG4gXFx0dTggaG9vaztcXG4gfTtcXG4gXFxuQEAgLTMzOCwyNyArMzM3LDQ4IEBAIG5mbmxfaG9va19lbnRyaWVzX2hlYWQodTggcGYsIHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKmRlXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcXG4tXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcXG4tXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXFxuLVxcdFxcdFxcdCAgICAgIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBzZXEpXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsIGludCBmYW1pbHkpXFxuIHtcXG4gXFx0c3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2ID0gb3BzLVxcdTAwM2Vwcml2O1xcbi1cXHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXFx1MDAzZWVudHJpZXMpO1xcbitcXHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gY2ItXFx1MDAzZWRhdGE7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KG5sc2tiLVxcdTAwM2Vzayk7XFxuIFxcdHN0cnVjdCBuZl9ob29rX29wcyAqKm5hdF9vcHM7XFxuLVxcdGludCBpLCBlcnI7XFxuK1xcdHVuc2lnbmVkIGludCBpID0gY2ItXFx1MDAzZWFyZ3NbMV07XFxuK1xcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmU7XFxuK1xcdHVuc2lnbmVkIGludCBiYXNlX3NlcTtcXG4rXFx0aW50IGVyciA9IDA7XFxuIFxcbitcXHRiYXNlX3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNm5ldC1cXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xcbitcXG4rXFx0ZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LVxcdTAwM2VlbnRyaWVzKTtcXG4gXFx0aWYgKCFlKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRuYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlLVxcdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcXG4tXFx0XFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG5hdF9vcHNbaV0sXFxuLVxcdFxcdFxcdFxcdFxcdCBvcHMtXFx1MDAzZXByaW9yaXR5LCBmYW1pbHksIHNlcSk7XFxuK1xcdGZvciAoOyBpIFxcdTAwM2MgZS1cXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XFxuK1xcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LFxcbitcXHRcXHRcXHRcXHRcXHQgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLFxcbitcXHRcXHRcXHRcXHRcXHQgb3BzLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcbitcXHRcXHRcXHRcXHRcXHQgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG4gXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHR9XFxuLVxcdHJldHVybiAwO1xcbitvdXQ6XFxuK1xcdGlmICghZXJyKSB7XFxuK1xcdFxcdGkgPSAwO1xcbitcXHR9XFxuK1xcdGNiLVxcdTAwM2VhcmdzWzFdID0gaTtcXG4rXFxuK1xcdGlmIChjYi1cXHUwMDNlYXJnc1syXSBcXHUwMDI2XFx1MDAyNiBiYXNlX3NlcSAhPSBjYi1cXHUwMDNlYXJnc1syXSkge1xcbitcXHRcXHRjYi1cXHUwMDNlc2VxKys7XFxuK1xcdFxcdGVyciA9IC1FSU5UUjtcXG4rXFx0fVxcbitcXHRjYi1cXHUwMDNlYXJnc1syXSA9IGJhc2Vfc2VxO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuQEAgLTM3MywzNSArMzkzLDMxIEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbiBcXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVxcdTAwM2VhcmdzWzBdO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRjYi1cXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2bmV0LVxcdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKTtcXG4gXFxuIFxcdGUgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgY3R4LVxcdTAwM2Vob29rLCBuZXQsIGN0eC1cXHUwMDNlZGV2bmFtZSk7XFxuLVxcdGlmICghZSlcXG4rXFx0aWYgKCFlIHx8IElTX0VSUihlKSlcXG4gXFx0XFx0Z290byBkb25lO1xcbiBcXG4tXFx0aWYgKElTX0VSUihlKSkge1xcbi1cXHRcXHRjYi1cXHUwMDNlc2VxKys7XFxuLVxcdFxcdGdvdG8gZG9uZTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCh1bnNpZ25lZCBsb25nKWUgIT0gY3R4LVxcdTAwM2VoZWFkdiB8fCBpIFxcdTAwM2U9IGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXMpXFxuLVxcdFxcdGNiLVxcdTAwM2VzZXErKztcXG4tXFxuIFxcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XFxuIFxcbiBcXHRmb3IgKDsgaSBcXHUwMDNjIGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xcbi1cXHRcXHRpZiAob3BzW2ldLVxcdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxcbi1cXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBvcHNbaV0tXFx1MDAzZXByaW9yaXR5LCBmYW1pbHksXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqY3VyID0gUkVBRF9PTkNFKG9wc1tpXSk7XFxuK1xcbitcXHRcXHRpZiAoY3VyLVxcdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxcbitcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGNiLCBjdXIsIGZhbWlseSk7XFxuK1xcdFxcdGVsc2Uge1xcbitcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY3VyLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gZG9uZTpcXG4tXFx0bmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTtcXG4rXFx0aWYgKG5sc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSAwKVxcbitcXHRcXHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBpO1xcbiBcXHRyZXR1cm4gbmxza2ItXFx1MDAzZWxlbjtcXG5AQCAtNDQyLDEwICs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRzdHJzY3B5KGN0eC1cXHUwMDNlZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC1cXHUwMDNlZGV2bmFtZSkpO1xcbi1cXHRjdHgtXFx1MDAzZWhlYWR2ID0gKHVuc2lnbmVkIGxvbmcpaGVhZDtcXG4gXFx0Y3R4LVxcdTAwM2Vob29rID0gaG9va251bTtcXG4tXFxuLVxcdGNiLVxcdTAwM2VzZXEgPSAxO1xcbiBcXHRjYi1cXHUwMDNlZGF0YSA9IGN0eDtcXG4gXFxuIFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0NzoyMy4wMDk1MDQyOTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxNDgyMjI5NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9OQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZm5sX2hvb2tfZHVtcFwiLFxuICAgIFwibmZubF9ob29rX2R1bXBfbmF0XCIsXG4gICAgXCJuZm5sX2hvb2tfZHVtcF9zdGFydFwiLFxuICAgIFwibmZubF9ob29rX2dldFwiLFxuICAgIFwibmZfbmF0X3JlZ2lzdGVyX2ZuXCIsXG4gICAgXCJuZl9uYXRfdW5yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfcmVnaXN0ZXJfbmV0X2hvb2tcIixcbiAgICBcIm5mX3VucmVnaXN0ZXJfbmV0X2hvb2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoaG9va19iYXNlX3NlcSBhbmQgbmF0X2hvb2tfYmFzZV9zZXEpIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZHVyaW5nIG5ldGxpbmsgZHVtcCBvZiBuZXRmaWx0ZXIgYW5kIE5BVCBob29rcywgcmVmYWN0b3JpbmcgdGhlIGR1bXAgaXRlcmF0aW9uIGFuZCByZXN0YXJ0L2NvbnNpc3RlbmN5IHZlcmlmaWNhdGlvbiBpbiBuZm5ldGxpbmtfaG9vay5jLCBhbmQgYnVtcGluZyB0aGUgc2VxdWVuY2UgbnVtYmVycyB1cG9uIGhvb2sgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGluIGNvcmUuYyBhbmQgbmZfbmF0X2NvcmUuYy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayBhbmQgbmV0ZmlsdGVyIGhvb2sgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIG5ldGxpbmsgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMDlkNTg3OGU4ZGNkNDhmMWEwYTM5YjYzZDYxZTljNmI5ZWNiYTMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAyMjo0NzoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcbmluZGV4IGE2YTBiZjRhMjQ3ZTUuLjdmZDc4Mzk0ZDFlN2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcbkBAIC0zMyw1ICszMyw3IEBAIHN0cnVjdCBuZXRuc19uZiB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RFRlJBR19JUFY2KVxuIFx0dW5zaWduZWQgaW50IGRlZnJhZ19pcHY2X3VzZXJzO1xuICNlbmRpZlxuK1x0dW5zaWduZWQgaW50IGhvb2tfYmFzZV9zZXE7XG4rXHR1bnNpZ25lZCBpbnQgbmF0X2hvb2tfYmFzZV9zZXE7XG4gfTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jXG5pbmRleCA2NzVhMTAzNGIzNDAwLi5hMjg0YjMyNDEyMTFkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jXG5AQCAtMzg2LDYgKzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuZl9zdGF0aWNfa2V5X2RlYyhjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgaW50IHBmKVxuICNlbmRpZlxuIH1cbiBcbitzdGF0aWMgdm9pZCBidW1wX2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4rXG4rXHR3aGlsZSAoKytiYXNlX3NlcSA9PSAwKVxuK1x0XHQ7XG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpO1xuK31cbitcbiBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxuIHtcbkBAIC00MjgsNiArNDM3LDcgQEAgc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0bmV3X2hvb2tzID0gbmZfaG9va19lbnRyaWVzX2dyb3cocCwgcmVnKTtcbiBcbiBcdGlmICghSVNfRVJSKG5ld19ob29rcykpIHtcbitcdFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHRcdGhvb2tzX3ZhbGlkYXRlKG5ld19ob29rcyk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqcHAsIG5ld19ob29rcyk7XG4gXHR9XG5AQCAtNTA2LDYgKzUxNiw3IEBAIHN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbiBcdFx0XHRuZXRfZGVjX2VncmVzc19xdWV1ZSgpO1xuICNlbmRpZlxuIFx0XHRuZl9zdGF0aWNfa2V5X2RlYyhyZWcsIHBmKTtcbitcdFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRXQVJOX09OQ0UoMSwgXCJob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkXCIsIHBmLCByZWctXHUwMDNlaG9va251bSk7XG4gXHR9XG5AQCAtNzg0LDYgKzc5NSw4IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZXRmaWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiAjZW5kaWZcbitcdG5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxID0gMTtcbitcdG5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSA9IDE7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5pbmRleCA4YWMzMjZlMWViNWJhLi5mZjJjYmE4ZGY4ODYxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbkBAIC0xMTYwLDYgKzExNjAsMTUgQEAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gfVxuICNlbmRpZlxuIFxuK3N0YXRpYyB2b2lkIGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xuK1xuK1x0d2hpbGUgKCsrYmFzZV9zZXEgPT0gMClcbitcdFx0O1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbmZfY3RfaGVscGVyX2V4cGVjdGZuIGZvbGxvd19tYXN0ZXJfbmF0ID0ge1xuIFx0Lm5hbWVcdFx0PSBcIm5hdC1mb2xsb3ctbWFzdGVyXCIsXG4gXHQuZXhwZWN0Zm5cdD0gbmZfbmF0X2ZvbGxvd19tYXN0ZXIsXG5AQCAtMTI0NSw4ICsxMjU0LDEwIEBAIGludCBuZl9uYXRfcmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4gXHR9XG4gXG4gXHRyZXQgPSBuZl9ob29rX2VudHJpZXNfaW5zZXJ0X3JhdyhcdTAwMjZwcml2LVx1MDAzZWVudHJpZXMsIG9wcyk7XG4tXHRpZiAocmV0ID09IDApXG4rXHRpZiAocmV0ID09IDApIHtcbitcdFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xuIFx0XHRuYXRfcHJvdG9fbmV0LVx1MDAzZXVzZXJzKys7XG4rXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmZfbmF0X3Byb3RvX211dGV4KTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMTI4NCw2ICsxMjk1LDcgQEAgdm9pZCBuZl9uYXRfdW5yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbiBcdFx0Z290byB1bmxvY2s7XG4gXHRwcml2ID0gbmF0X29wc1tob29rbnVtXS5wcml2O1xuIFx0bmZfaG9va19lbnRyaWVzX2RlbGV0ZV9yYXcoXHUwMDI2cHJpdi1cdTAwM2VlbnRyaWVzLCBvcHMpO1xuK1x0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xuIFxuIFx0aWYgKG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMgPT0gMCkge1xuIFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG5pbmRleCA5NTAwNWU5YTYwNjY4Li4yMWE3NTkxNjhjMzg0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbkBAIC01NCw3ICs1NCw2IEBAIHN0YXRpYyBpbnQgbmZfbmV0bGlua19kdW1wX3N0YXJ0X3JjdShzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSB7XG4gXHRjaGFyIGRldm5hbWVbSUZOQU1TSVpdO1xuLVx0dW5zaWduZWQgbG9uZyBoZWFkdjtcbiBcdHU4IGhvb2s7XG4gfTtcbiBcbkBAIC0zMzgsMjcgKzMzNyw0OCBAQCBuZm5sX2hvb2tfZW50cmllc19oZWFkKHU4IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpkZVxuIH1cbiBcbiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4tXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcbi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbi1cdFx0XHQgICAgICBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgc2VxKVxuK1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSlcbiB7XG4gXHRzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtXHUwMDNlcHJpdjtcbi1cdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VlbnRyaWVzKTtcbitcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBjYi1cdTAwM2VkYXRhO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wcztcbi1cdGludCBpLCBlcnI7XG4rXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVx1MDAzZWFyZ3NbMV07XG4rXHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplO1xuK1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxO1xuK1x0aW50IGVyciA9IDA7XG4gXG4rXHRiYXNlX3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxKTtcbitcbitcdGUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VlbnRyaWVzKTtcbiBcdGlmICghZSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGdvdG8gb3V0O1xuIFxuIFx0bmF0X29wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlLVx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xuLVx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgbmF0X29wc1tpXSxcbi1cdFx0XHRcdFx0IG9wcy1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LCBzZXEpO1xuK1x0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XG4rXHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LFxuK1x0XHRcdFx0XHQgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLFxuK1x0XHRcdFx0XHQgb3BzLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4rXHRcdFx0XHRcdCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGJyZWFrO1xuK1xuIFx0fVxuLVx0cmV0dXJuIDA7XG4rb3V0OlxuK1x0aWYgKCFlcnIpIHtcbitcdFx0aSA9IDA7XG4rXHR9XG4rXHRjYi1cdTAwM2VhcmdzWzFdID0gaTtcbitcbitcdGlmIChjYi1cdTAwM2VhcmdzWzJdIFx1MDAyNlx1MDAyNiBiYXNlX3NlcSAhPSBjYi1cdTAwM2VhcmdzWzJdKSB7XG4rXHRcdGNiLVx1MDAzZXNlcSsrO1xuK1x0XHRlcnIgPSAtRUlOVFI7XG4rXHR9XG4rXHRjYi1cdTAwM2VhcmdzWzJdID0gYmFzZV9zZXE7XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYixcbkBAIC0zNzMsMzUgKzM5MywzMSBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYixcbiBcdHVuc2lnbmVkIGludCBpID0gY2ItXHUwMDNlYXJnc1swXTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbitcdGNiLVx1MDAzZXNlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXEpO1xuIFxuIFx0ZSA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBjdHgtXHUwMDNlaG9vaywgbmV0LCBjdHgtXHUwMDNlZGV2bmFtZSk7XG4tXHRpZiAoIWUpXG4rXHRpZiAoIWUgfHwgSVNfRVJSKGUpKVxuIFx0XHRnb3RvIGRvbmU7XG4gXG4tXHRpZiAoSVNfRVJSKGUpKSB7XG4tXHRcdGNiLVx1MDAzZXNlcSsrO1xuLVx0XHRnb3RvIGRvbmU7XG4tXHR9XG4tXG4tXHRpZiAoKHVuc2lnbmVkIGxvbmcpZSAhPSBjdHgtXHUwMDNlaGVhZHYgfHwgaSBcdTAwM2U9IGUtXHUwMDNlbnVtX2hvb2tfZW50cmllcylcbi1cdFx0Y2ItXHUwMDNlc2VxKys7XG4tXG4gXHRvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xuIFxuIFx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XG4tXHRcdGlmIChvcHNbaV0tXHUwMDNlaG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVClcbi1cdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXG4tXHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG9wc1tpXSxcbi1cdFx0XHRcdFx0XHQgb3BzW2ldLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4rXHRcdGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqY3VyID0gUkVBRF9PTkNFKG9wc1tpXSk7XG4rXG4rXHRcdGlmIChjdXItXHUwMDNlaG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVClcbitcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGNiLCBjdXIsIGZhbWlseSk7XG4rXHRcdGVsc2Uge1xuK1x0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsXG4rXHRcdFx0XHRcdFx0IGN1ci1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxuIFx0XHRcdFx0XHRcdCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxKTtcbitcdFx0fVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIGRvbmU6XG4tXHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xuK1x0aWYgKG5sc2tiLVx1MDAzZWxlbiBcdTAwM2UgMClcbitcdFx0bmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0Y2ItXHUwMDNlYXJnc1swXSA9IGk7XG4gXHRyZXR1cm4gbmxza2ItXHUwMDNlbGVuO1xuQEAgLTQ0MiwxMCArNDU4LDcgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0c3Ryc2NweShjdHgtXHUwMDNlZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC1cdTAwM2VkZXZuYW1lKSk7XG4tXHRjdHgtXHUwMDNlaGVhZHYgPSAodW5zaWduZWQgbG9uZyloZWFkO1xuIFx0Y3R4LVx1MDAzZWhvb2sgPSBob29rbnVtO1xuLVxuLVx0Y2ItXHUwMDNlc2VxID0gMTtcbiBcdGNiLVx1MDAzZWRhdGEgPSBjdHg7XG4gXG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjIzLjAwOTUwNTk1OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNDExODE0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGEgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBzZXJpZXMgaGVyZSB0aGF0IG5lZWRzIGEgbG9vay1vdmVyLiBNeSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0aGUgc2FtZTogbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzIGFuZCB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0IHRoaXMgaXMgdHJ5aW5nIHRvIGFjaGlldmUuIEkgbmVlZCB0byBzZWUgd2hhdCB0aGUgY29kZSBpcyBkb2luZy5cblxuQWxyaWdodCwgdGhlIHBhdGNoIHRvdWNoZXMgYGluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oYCwgYG5ldC9uZXRmaWx0ZXIvY29yZS5jYCwgYG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBkaWdnaW5nIGludG8gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0sIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgdG8gdGFrZSBsaWdodGx5LiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIHRoaXMgaGFzIG9uIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LlxuXG5Ob3cgaXQncyB0aW1lIHRvIGxldmVyYWdlIHRoZSB0b29scy4gQmVmb3JlIEkgZ2V0IGludG8gdGhlIHdlZWRzIG9mIGxpbmUtYnktbGluZSBjb2RlIHJldmlldywgSSdtIGdvaW5nIHRvIHJ1biB0aGlzIHRocm91Z2ggb3VyIHN0YW5kYXJkIGFuYWx5c2lzIHBpcGVsaW5lLiBJIG5lZWQgdG8gdmVyaWZ5IEtjb25maWcgcmVxdWlyZW1lbnRzIGFuZCBtYWtlIHN1cmUgdGhpcyBjb2RlIHBsYXlzIHdlbGwgd2l0aCB0aGUgYnVpbGQgc3lzdGVtIGFuZCBleGlzdGluZyBjb25maWd1cmF0aW9ucy4gSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgb2J2aW91cyByZWQgZmxhZ3MgbGlrZSBtaXNzaW5nIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBjb25mbGljdHMgYmVmb3JlIEkgc3BlbmQgdG9vIG11Y2ggdGltZSBvbiB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjI4LjA1MDY5MDk3N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI5OTY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVURklMVEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz05OD1jb25maWcgTkZfTE9HX1NZU0xPR1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNS1cXHQgIFRoaXMgaXMgYSBzaW1wbGVyIGJ1dCBsZXNzIGZsZXhpYmxlIGxvZ2dpbmcgbWV0aG9kIGNvbXBhcmVkIHRvXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEwNjpcXHQgIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cuXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNy1cXHQgIElmIGJvdGggYXJlIGVuYWJsZWQgdGhlIGJhY2tlbmQgdG8gdXNlIGNhbiBiZSBjb25maWd1cmVkIGF0IHJ1bi10aW1lXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9ODM5PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODQ2LVxcdChlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjg0NzpcXHRDT05GSUdfTkVURklMVEVSX1hUX0NPTk5NQVJLIChjb21iaW5lZCBjb25ubWFyay9DT05OTUFSSyBtb2R1bGUpLlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04NDgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9OTY1PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX01BUktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05NzEtXFx0KGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6OTcyOlxcdENPTkZJR19ORVRGSUxURVJfWFRfTUFSSyAoY29tYmluZWQgbWFyay9NQVJLIG1vZHVsZSkuXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTk3My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMjM3PWNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQ0LVxcdChlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyNDU6XFx0Q09ORklHX05FVEZJTFRFUl9YVF9DT05OTUFSSyAoY29tYmluZWQgY29ubm1hcmsvQ09OTk1BUksgbW9kdWxlKS5cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0Ni1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xNDIzPWNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfTUFSS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MjktXFx0KGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQzMDpcXHRDT05GSUdfTkVURklMVEVSX1hUX01BUksgKGNvbWJpbmVkIG1hcmsvTUFSSyBtb2R1bGUpLlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDMxLVxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0yPW5ldGZpbHRlci1vYmpzIDo9IGNvcmUubyBuZl9sb2cubyBuZl9xdWV1ZS5vIG5mX3NvY2tvcHQubyB1dGlscy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozOm5ldGZpbHRlci0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOSykgKz0gbmZuZXRsaW5rLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTIyPWVuZGlmXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yMy1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORVRGSUxURVIpID0gbmV0ZmlsdGVyLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRGSUxURVJfQlBGX0xJTkspICs9IG5mX2JwZl9saW5rLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTI2LVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0FDQ1QpICs9IG5mbmV0bGlua19hY2N0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSkgKz0gbmZuZXRsaW5rX3F1ZXVlLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI5Om9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cpICs9IG5mbmV0bGlua19sb2cub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX09TRikgKz0gbmZuZXRsaW5rX29zZi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfSE9PSykgKz0gbmZuZXRsaW5rX2hvb2sub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTc2PW9iai0kKENPTkZJR19ORl9OQVRfVEZUUCkgKz0gbmZfbmF0X3RmdHAub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS03OC0jIFNZTlBST1hZXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfTkVURklMVEVSX1NZTlBST1hZKSArPSBuZl9zeW5wcm94eV9jb3JlLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTgwLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpICs9IG5mX2Nvbm5jb3VudC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04Mi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTUzPW9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFX0lORVQpICs9IG5mX2Zsb3dfdGFibGVfaW5ldC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1NS0jIGdlbmVyaWMgWCB0YWJsZXNcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1NjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUQUJMRVMpICs9IHhfdGFibGVzLm8geHRfdGNwdWRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1Ny1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1OC0jIGNvbWJvc1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTU5Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFSSykgKz0geHRfbWFyay5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9DT05OTUFSSykgKz0geHRfY29ubm1hcmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTYxOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfU0VUKSArPSB4dF9zZXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTYyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTkFUKSArPSB4dF9uYXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTYzLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTY0LSMgdGFyZ2V0c1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTY1Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0FVRElUKSArPSB4dF9BVURJVC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjY6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0hFQ0tTVU0pICs9IHh0X0NIRUNLU1VNLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2NzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSkgKz0geHRfQ0xBU1NJRlkub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTY4Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLKSArPSB4dF9DT05OU0VDTUFSSy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ1QpICs9IHh0X0NULm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3MDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQKSArPSB4dF9EU0NQLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3MTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITCkgKz0geHRfSEwub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTcyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLKSArPSB4dF9ITUFSSy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzM6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTEVEKSArPSB4dF9MRUQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTc0Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRykgKz0geHRfTE9HLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3NTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORVRNQVApICs9IHh0X05FVE1BUC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzY6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cpICs9IHh0X05GTE9HLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3NzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFKSArPSB4dF9ORlFVRVVFLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3ODpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUKSArPSB4dF9SQVRFRVNULm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3OTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SRURJUkVDVCkgKz0geHRfUkVESVJFQ1Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTgwOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BU1FVRVJBREUpICs9IHh0X01BU1FVRVJBREUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTgxOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUkspICs9IHh0X1NFQ01BUksub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTgyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RQUk9YWSkgKz0geHRfVFBST1hZLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE4MzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MpICs9IHh0X1RDUE1TUy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxODQ6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVApICs9IHh0X1RDUE9QVFNUUklQLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE4NTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9URUUpICs9IHh0X1RFRS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxODY6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UpICs9IHh0X1RSQUNFLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE4NzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVIpICs9IHh0X0lETEVUSU1FUi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xODgtXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xODktIyBtYXRjaGVzXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxOTA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9BRERSVFlQRSkgKz0geHRfYWRkcnR5cGUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTkxOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQlBGKSArPSB4dF9icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTkyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUikgKz0geHRfY2x1c3Rlci5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxOTM6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UKSArPSB4dF9jb21tZW50Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5NDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUykgKz0geHRfY29ubmJ5dGVzLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5NTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MQUJFTCkgKz0geHRfY29ubmxhYmVsLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5NjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVCkgKz0geHRfY29ubmxpbWl0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5NzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSykgKz0geHRfY29ubnRyYWNrLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5ODpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NQVSkgKz0geHRfY3B1Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5OTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1ApICs9IHh0X2RjY3Aub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjAwOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfREVWR1JPVVApICs9IHh0X2Rldmdyb3VwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIwMTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1ApICs9IHh0X2RzY3Aub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjAyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRUNOKSArPSB4dF9lY24ub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjAzOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQKSArPSB4dF9lc3Aub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjA0Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUKSArPSB4dF9oYXNobGltaXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjA1Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSKSArPSB4dF9oZWxwZXIub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjA2Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEwpICs9IHh0X2hsLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIwNzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQQ09NUCkgKz0geHRfaXBjb21wLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIwODpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UpICs9IHh0X2lwcmFuZ2Uub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjA5Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBWUykgKz0geHRfaXB2cy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MMlRQKSArPSB4dF9sMnRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxMTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCkgKz0geHRfbGVuZ3RoLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxMjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUKSArPSB4dF9saW1pdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTM6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMpICs9IHh0X21hYy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTQ6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQpICs9IHh0X211bHRpcG9ydC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTU6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ORkFDQ1QpICs9IHh0X25mYWNjdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTY6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0YpICs9IHh0X29zZi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUikgKz0geHRfb3duZXIub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjE4Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0dST1VQKSArPSB4dF9jZ3JvdXAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjE5Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVikgKz0geHRfcGh5c2Rldi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMjA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFKSArPSB4dF9wa3R0eXBlLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyMTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSkgKz0geHRfcG9saWN5Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyMjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBKSArPSB4dF9xdW90YS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMjM6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUKSArPSB4dF9yYXRlZXN0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyNDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNKSArPSB4dF9yZWFsbS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMjU6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQpICs9IHh0X3JlY2VudC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMjY6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQKSArPSB4dF9zY3RwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyNzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NPQ0tFVCkgKz0geHRfc29ja2V0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyODpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFKSArPSB4dF9zdGF0ZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMjk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMpICs9IHh0X3N0YXRpc3RpYy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMzA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcpICs9IHh0X3N0cmluZy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMzE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MpICs9IHh0X3RjcG1zcy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMzI6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FKSArPSB4dF90aW1lLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIzMzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMikgKz0geHRfdTMyLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTIzNC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jPTI3Mj1uZl9ob29rX2VudHJ5X2hlYWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtMjc3LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjI3ODojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQVJQXFxubmV0L25ldGZpbHRlci9jb3JlLmMtMjc5LVxcdGNhc2UgTkZQUk9UT19BUlA6XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0yODMtI2VuZGlmXFxubmV0L25ldGZpbHRlci9jb3JlLmM6Mjg0OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0yODUtXFx0Y2FzZSBORlBST1RPX0JSSURHRTpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTI4OS0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzoyOTA6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTI5MS1cXHRjYXNlIE5GUFJPVE9fSU5FVDpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTMxMi1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzozMTM6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTMxNC1cXHRpZiAoaG9va251bSA9PSBORl9ORVRERVZfSU5HUkVTUykge1xcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtMzE4LSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjMxOTojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1NcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0zMjAtXFx0aWYgKGhvb2tudW0gPT0gTkZfTkVUREVWX0VHUkVTUykge1xcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmM9MzI5PXN0YXRpYyBpbnQgbmZfaW5ncmVzc19jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLFxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtMzMxLXtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzozMzI6I2lmbmRlZiBDT05GSUdfTkVURklMVEVSX0lOR1JFU1NcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0zMzMtXFx0aWYgKHJlZy1cXHUwMDNlaG9va251bSA9PSBob29rbnVtKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmM9Mzk4PXN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQwNi1cXHRjYXNlIE5GUFJPVE9fTkVUREVWOlxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjQwNzojaWZuZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQwOC1cXHRcXHRpZiAocmVnLVxcdTAwM2Vob29rbnVtID09IE5GX05FVERFVl9JTkdSRVNTKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNDEwLSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjQxMTojaWZuZGVmIENPTkZJR19ORVRGSUxURVJfRUdSRVNTXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNDEyLVxcdFxcdGlmIChyZWctXFx1MDAzZWhvb2tudW0gPT0gTkZfTkVUREVWX0VHUkVTUylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQ0OC1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo0NDk6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQ1MC1cXHRpZiAobmZfaW5ncmVzc19ob29rKHJlZywgcGYpKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNDUyLSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjQ1MzojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1NcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy00NTQtXFx0aWYgKG5mX2VncmVzc19ob29rKHJlZywgcGYpKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmM9NDkxPXN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTUwOS1cXHRpZiAobmZfcmVtb3ZlX25ldF9ob29rKHAsIHJlZykpIHtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1MTA6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTUxMS1cXHRcXHRpZiAobmZfaW5ncmVzc19ob29rKHJlZywgcGYpKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTEzLSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjUxNDojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1NcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01MTUtXFx0XFx0aWYgKG5mX2VncmVzc19ob29rKHJlZywgcGYpKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmM9Nzc4PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZXRmaWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNzgxLVxcdF9fbmV0ZmlsdGVyX25ldF9pbml0KG5ldC1cXHUwMDNlbmYuaG9va3NfaXB2NiwgQVJSQVlfU0laRShuZXQtXFx1MDAzZW5mLmhvb2tzX2lwdjYpKTtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo3ODI6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0FSUFxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTc4My1cXHRfX25ldGZpbHRlcl9uZXRfaW5pdChuZXQtXFx1MDAzZW5mLmhvb2tzX2FycCwgQVJSQVlfU0laRShuZXQtXFx1MDAzZW5mLmhvb2tzX2FycCkpO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTc4NC0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo3ODU6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTc4Ni1cXHRfX25ldGZpbHRlcl9uZXRfaW5pdChuZXQtXFx1MDAzZW5mLmhvb2tzX2JyaWRnZSwgQVJSQVlfU0laRShuZXQtXFx1MDAzZW5mLmhvb2tzX2JyaWRnZSkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM9MzA9c3RhdGljIGNvbnN0IHU4IG5mX2N0X2V4dF90eXBlX2xlbltORl9DVF9FWFRfTlVNXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jLTQ4LSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jOjQ5OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfU1lOUFJPWFkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtNTAtXFx0W05GX0NUX0VYVF9TWU5QUk9YWV0gPSBzaXplb2Yoc3RydWN0IG5mX2Nvbm5fc3lucHJveHkpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM9NTc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgdG90YWxfZXh0ZW5zaW9uX3NpemUodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jLTgwLSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jOjgxOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfU1lOUFJPWFkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtODItXFx0XFx0KyBzaXplb2Yoc3RydWN0IG5mX2Nvbm5fc3lucHJveHkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9NjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfaXBfbmxhX3BvbGljeVtDVEFfSVBfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtNjUwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzo2NTE6I2lmIGRlZmluZWQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1QpIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTY1Mi1zdGF0aWMgc2l6ZV90IGN0bmV0bGlua19wcm90b19zaXplKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yNjMxPWN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yNjM1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyNjM2OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yNjM3LXN0YXRpYyBzaXplX3RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yOTA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jdF9ob29rIGN0bmV0bGlua19nbHVlX2hvb2sgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjkxMy19O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyOTE0OiNlbmRpZiAvKiBDT05GSUdfTkVURklMVEVSX05FVExJTktfR0xVRV9DVCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yOTE1LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM4Njk9c3RhdGljIGludCBfX2luaXQgY3RuZXRsaW5rX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zODkxLVxcdH1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6Mzg5MjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzg5My1cXHQvKiBzZXR1cCBpbnRlcmFjdGlvbiBiZXR3ZWVuIG5mX3F1ZXVlIGFuZCBuZl9jb25udHJhY2tfbmV0bGluay4gKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zOTA2PXN0YXRpYyB2b2lkIF9fZXhpdCBjdG5ldGxpbmtfZXhpdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM5MTAtXFx0bmZuZXRsaW5rX3N1YnN5c191bnJlZ2lzdGVyKFxcdTAwMjZjdG5sX3N1YnN5cyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM5MTE6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM5MTItXFx0UkNVX0lOSVRfUE9JTlRFUihuZm5sX2N0X2hvb2ssIE5VTEwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTc2PXN0YXRpYyBpbnQgbmZubF9ob29rX3B1dF9icGZfcHJvZ19pbmZvKHN0cnVjdCBza19idWZmICpubHNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy04My1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6ODQ6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQlBGX0xJTkspKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy04NS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYz0yNzg9bmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGV2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTI4MC1cXHRjb25zdCBzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICpob29rX2hlYWQgPSBOVUxMO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzoyODE6I2lmIGRlZmluZWQoQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTKSB8fCBkZWZpbmVkKENPTkZJR19ORVRGSUxURVJfRUdSRVNTKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0yODItXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0yOTYtXFx0Y2FzZSBORlBST1RPX0FSUDpcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6Mjk3OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0ZBTUlMWV9BUlBcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMjk4LVxcdFxcdGlmIChob29rIFxcdTAwM2U9IEFSUkFZX1NJWkUobmV0LVxcdTAwM2VuZi5ob29rc19hcnApKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMwMy1cXHRjYXNlIE5GUFJPVE9fQlJJREdFOlxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozMDQ6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zMDUtXFx0XFx0aWYgKGhvb2sgXFx1MDAzZT0gQVJSQVlfU0laRShuZXQtXFx1MDAzZW5mLmhvb2tzX2JyaWRnZSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzA5LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozMTA6I2lmIGRlZmluZWQoQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTKSB8fCBkZWZpbmVkKENPTkZJR19ORVRGSUxURVJfRUdSRVNTKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zMTEtXFx0Y2FzZSBORlBST1RPX05FVERFVjpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zMjEtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjMyMjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMyMy1cXHRcXHRpZiAoaG9vayA9PSBORl9ORVRERVZfSU5HUkVTUylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zMjUtI2VuZGlmXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjMyNjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1NcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzI3LVxcdFxcdGlmIChob29rID09IE5GX05FVERFVl9FR1JFU1MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTI5MT1zdGF0aWMgc3RydWN0IG5mX2hvb2tfZW50cmllcyAqbmZfaG9va19lbnRyaWVzX2hlYWQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgdTggaG9va251bSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMjkzLVxcdHN3aXRjaCAocGYpIHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjI5NDojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQlJJREdFXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0yOTUtXFx0Y2FzZSBORlBST1RPX0JSSURHRTpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz02OD1zdHJ1Y3QgeHRfYWYge1xcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTcxLVxcdHN0cnVjdCBsaXN0X2hlYWQgdGFyZ2V0O1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzo3MjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy03My1cXHRzdHJ1Y3QgbXV0ZXggY29tcGF0X211dGV4O1xcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTcwND1zdGF0aWMgYm9vbCBlcnJvcl90Z19vayh1bnNpZ25lZCBpbnQgdXNlcnNpemUsIHVuc2lnbmVkIGludCBrZXJuc2l6ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy03MDktXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjcxMDojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy03MTEtaW50IHh0X2NvbXBhdF9hZGRfb2Zmc2V0KHVfaW50OF90IGFmLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgZGVsdGEpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9OTE2PUVYUE9SVF9TWU1CT0woeHRfY29tcGF0X2NoZWNrX2VudHJ5X29mZnNldHMpO1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzo5MTc6I2VuZGlmIC8qIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVQgKi9cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtOTE4LVxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTkzNC0gKlxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzo5MzU6ICogQWxzbyBzZWUgeHRfY29tcGF0X2NoZWNrX2VudHJ5X29mZnNldHMgZm9yIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVQgdmVyc2lvbi5cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtOTM2LSAqXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MTE2Mj12b2lkICp4dF9jb3B5X2NvdW50ZXJzKHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTE2OC1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MTE2OTojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMTcwLVxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MTIxND1FWFBPUlRfU1lNQk9MX0dQTCh4dF9jb3B5X2NvdW50ZXJzKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTIxNS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MTIxNjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMjE3LWludCB4dF9jb21wYXRfdGFyZ2V0X29mZnNldChjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MTM5Nz1FWFBPUlRfU1lNQk9MX0dQTCh4dF90YWJsZV91bmxvY2spO1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMzk4LVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMzk5OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTE0MDAtdm9pZCB4dF9jb21wYXRfbG9jayh1X2ludDhfdCBhZilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0xNDE0PUVYUE9SVF9TWU1CT0xfR1BMKHh0X3RlZV9lbmFibGVkKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTQxNS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MTQxNjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xNDE3LURFRklORV9QRVJfQ1BVKHNlcWNvdW50X3QsIHh0X3JlY3NlcSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MjA5NT1FWFBPUlRfU1lNQk9MX0dQTCh4dF9wcm90b19maW5pKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjA5Ni1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MjA5NzojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0yMDk4LS8qKlxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTIxODQ9c3RhdGljIGludCBfX2luaXQgeHRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIxODgtXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjIxODk6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWSkpIHtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjE5MC1cXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIyMDAtXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2eHRbaV0ubXV0ZXgpO1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoyMjAxOiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIyMDItXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2eHRbaV0uY29tcGF0X211dGV4KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYz0xMzY9c3RhdGljIHZvaWQgbGltaXRfbXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMtMTQyLVxcbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYzoxNDM6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMtMTQ0LXN0cnVjdCBjb21wYXRfeHRfcmF0ZWluZm8ge1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9saW1pdC5jPTE3MT1zdGF0aWMgaW50IGxpbWl0X210X2NvbXBhdF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYy0xODQtfVxcbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYzoxODU6I2VuZGlmIC8qIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVQgKi9cXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMtMTg2LVxcbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYz0xODc9c3RhdGljIHN0cnVjdCB4dF9tYXRjaCBsaW1pdF9tdF9yZWcgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYy0xOTQtXFx0Lm1hdGNoc2l6ZSAgICAgICAgPSBzaXplb2Yoc3RydWN0IHh0X3JhdGVpbmZvKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmM6MTk1OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxubmV0L25ldGZpbHRlci94dF9saW1pdC5jLTE5Ni1cXHQuY29tcGF0c2l6ZSAgICAgICA9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X3JhdGVpbmZvKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDc6MjguMTAxMDAwNDk2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2NzQyMzQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIEtjb25maWcgb3B0aW9uczpcblxuKipLY29uZmlnIERpdmU6IE5FVEZJTFRFUl9ORVRMSU5LX0hPT0sgXHUwMDI2IE5GX05BVCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTkVURklMVEVSX05FVExJTktfSE9PS2AgYW5kIGBORl9OQVRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgaXRzZWxmLlwiIEkga25vdyB0aGVzZSBvcHRpb25zIGNhbiBiZSB0cmlja3ksIGFuZCBldmVuIGZvciBhbiBleHBlcnQsIHRoZSBwcmVjaXNlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIGFyZW4ndCBhbHdheXMgaW1tZWRpYXRlbHkgb2J2aW91cy5cblxuSSdtIHRoaW5raW5nLCBcIklzIGBORVRGSUxURVJfTkVUTElOS19IT09LYCBhIGhhcmQgZGVwZW5kZW5jeSBmb3IgYE5GX05BVGAsIG9yIGlzIGl0IGp1c3Qgc3VnZ2VzdGVkPyBJcyBpdCByZXF1aXJlZCBmb3IgKnNvbWUqIE5GX05BVCBmdW5jdGlvbmFsaXR5IGJ1dCBub3QgYWxsP1wiIEkgd2FudCB0byBhdm9pZCBibGluZGx5IGFzc3VtaW5nIGFueXRoaW5nIGhlcmU7IGFzc3VtcHRpb25zIGluIHRoaXMgYXJlYSBjYW4gbGVhZCB0byBzdWJ0bGUgYnVncyBvciB1bm5lY2Vzc2FyaWx5IGJsb2F0ZWQga2VybmVscy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBkZWZhdWx0IHNldHRpbmdzLCBoZWxwIHRleHQsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgY29ubmVjdGVkIHRvIHRoZW0sIGFuZCBob3cgdGhvc2UgaW50ZXJhY3Qgd2l0aCBvdGhlciwgYnJvYWRlciBhc3BlY3RzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IG5ldGxpbmsgaW50ZXJhY3RzIHdpdGggTmV0ZmlsdGVyLlxuXG5VbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltdW0gc2V0IG9mIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBuZWVkIGVuYWJsZWQgdG8gYWNoaWV2ZSB3aGF0ZXZlciBzcGVjaWZpYyBOQVQgZnVuY3Rpb25hbGl0eSBJJ20gd29ya2luZyB3aXRoIGF0IHRoZSBtb21lbnQuIEtub3dpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlbSBpcyBrZXkuIE5vIHBvaW50IGluIGFjY2lkZW50YWxseSBpbnRyb2R1Y2luZyB1bndhbnRlZCBvdmVyaGVhZCBvciBicmVha2luZyBzb21lIG9ic2N1cmUgY29ybmVyIGNhc2UgYnkgbWlzY29uZmlndXJpbmcgdGhlIGtlcm5lbC4gU28sIHRvIHRoZSBLY29uZmlnIEkgZ28hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTA4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDc6MzAuOTY4NDI2NDg1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTQ0MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1jb25maWcgTkVURklMVEVSX0JQRl9MSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDc6MzEuMDE5Mzc4OTQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU1OTAyNjU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEtjb25maWcgaW4gbmV0L25ldGZpbHRlcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBzb21lIG9mIHRoZSBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBJJ2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM2LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGFyY2hpdGVjdHVyZSBmb3IgbWFueSBvZiBteSBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbnMgYXJlIHN0b3JlZCwgc28gaXQgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBJIGV4cGVjdCB0byBzZWUgdGhlIG1haW4gZmVhdHVyZSBncm91cGluZ3Mgb3IgYXQgbGVhc3Qgc29tZSBjcnVjaWFsIGluaXRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZGVmaW5lZCBhcm91bmQgdGhpcyBhcmVhLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uIGFuZCB0aGVuIEkgY2FuIHN0YXJ0IGJ1aWxkaW5nIG15IG1lbnRhbCBtb2RlbCBvZiB0aGUgbmV3IGFkZGl0aW9ucywgY2hhbmdlcywgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM3MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjMzLjU3ODQwODE0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQVJQXFxuICAzMTpcXHRcXHRib29sXFxuICAzMjpcXHRcXG4gIDMzOlxcdGNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcXG4gIDM0OlxcdFxcdGRlZl9ib29sIEJQRl9TWVNDQUxMXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGJhc2UgaG9vayBkdW1wIHN1cHBvcnRcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gIDQwOlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA0MzpcXHRcXHQgIHRvIGxpc3QgdGhlIGJhc2UgbmV0ZmlsdGVyIGhvb2tzIHZpYSBORk5FVExJTksuXFxuICA0NDpcXHRcXHQgIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORkFDQ1Qgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDQ5OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNTA6XFx0XFx0aGVscFxcbiAgNTE6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA1MjpcXHRcXHQgIGZvciBleHRlbmRlZCBhY2NvdW50aW5nIHZpYSBORk5FVExJTksuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbiAgNTU6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4gIDU2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICA1NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDU4OlxcdFxcdGhlbHBcXG4gIDU5OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNjA6XFx0XFx0ICBmb3IgcXVldWVpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXFxuICA2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuICA2NDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDY1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNjY6XFx0XFx0aGVscFxcbiAgNjc6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA2ODpcXHRcXHQgIGZvciBsb2dnaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cXG4gIDY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0NzozMy41Nzg1MTc0MzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzcxMDE1NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipORl9OQVQgQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRpdmluZyBiYWNrIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2lyY2xlIGJhY2sgdG8gTkZfTkFULiBJdCdzIGNydWNpYWwgd2UgZG9uJ3Qgb3Zlcmxvb2sgaXQgaW4gdGhlIEtjb25maWcgZmlsZS4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIHN0YXR1cyB0aGVyZS4gQW55IGNoYW5nZXMsIGFueSBkZXBlbmRlbmNpZXMsIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcyBuZWVkIHRvIGJlIGRvdWJsZS1jaGVja2VkLiBBIG1pc2NvbmZpZ3VyYXRpb24gb24gTkZfTkFUIGNhbiBjYXNjYWRlIGludG8gc29tZSByZWFsbHkgbmFzdHkgbmV0d29ya2luZyBwcm9ibGVtcyB0aGF0IGFyZSBhIHBhaW4gdG8gZGVidWcuIFNvIGxldOKAmXMgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIgYW5kIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaXMgYWxpZ25lZCB3aXRoIG91ciBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBhbmQgdGFyZ2V0IHBsYXRmb3JtLiBXZSBkb24ndCB3YW50IGFueSBzdXJwcmlzZXMgd2hlbiB3ZSBnZXQgZG93biB0byBpbnRlZ3JhdGlvbi4gTGV0J3MgbWFrZSBzdXJlIGl0IGlzIGNvcnJlY3QgYW5kIGRvdWJsZSBjaGVjayBhbGwgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjM2LjM0OTUzNTU4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5MDE3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX05BVFxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zOTg9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MDYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQwNzpjb25maWcgTkZfTkFUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjM2LjM5OTQ0MzI5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDU5MjE4NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEhvb2sgU2VxdWVuY2UgTnVtYmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGRldGFpbHMuIEZpcnN0LCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgZmllbGRzIHRvIHRoZSBgc3RydWN0IG5ldG5zX25mYCBzdHJ1Y3R1cmUsIHJlc2lkaW5nIHdpdGhpbiBgaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBwcm9iYWJseSBhYm91dCBzZXF1ZW5jaW5nIG9yIHZlcnNpb25pbmcgb2Ygc29tZSBzb3J0LiBOb3csIGxldCdzIHNlZSBob3cgdGhlc2UgbmV3IGZpZWxkcyBhcmUgdXNlZC5cblxuSW4gYG5ldC9uZXRmaWx0ZXIvY29yZS5jYCwgdGhlcmUncyBhIG5ldyBmdW5jdGlvbiBgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCB3aXRoaW4gYF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2tgIGFuZCBgX19uZl91bnJlZ2lzdGVyX25ldF9ob29rYC4gVGhpcyBjbGVhcmx5IHBvaW50cyB0b3dhcmRzIGEgbWVjaGFuaXNtIHRvIGluY3JlbWVudCB0aGUgc2VxdWVuY2UgbnVtYmVyIHdoZW5ldmVyIGEgbmV0ZmlsdGVyIGhvb2sgaXMgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQuIEl0IGFsc28gaW5pdGlhbGl6ZXMgdGhlc2Ugc2VxdWVuY2UgbnVtYmVycyBpbiBgbmV0ZmlsdGVyX25ldF9pbml0YC4gTWFrZXMgc2Vuc2Ug4oCTIHdlIG5lZWQgYSBzdGFydGluZyBwb2ludC5cblxuVGhlIGBuZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNgIGZpbGUgYWxzbyBoYXMgc2ltaWxhciBsb2dpYyB3aXRoIGBidW1wX25hdF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClgLCBjYWxsZWQgaW4gYG5mX25hdF9yZWdpc3Rlcl9mbmAgYW5kIGBuZl9uYXRfdW5yZWdpc3Rlcl9mbmAsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gTkFUIGhvb2tzLiBUaGF0J3MgY29uc2lzdGVudCDigJMgd2UncmUgdHJhY2tpbmcgYSBzZXF1ZW5jZSBmb3IgTkFUIHNwZWNpZmljYWxseSBhcyB3ZWxsLlxuXG5Ob3csIHRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYC4gVGhlIHJlbW92YWwgb2YgYGhlYWR2YCBmcm9tIGBuZm5sX2R1bXBfaG9va19kYXRhYCBpcyBhIG1pbm9yIGRldGFpbCwgYnV0IHRoZSByZWZhY3RvcmluZyBvZiBgbmZubF9ob29rX2R1bXBfbmF0YCBhbmQgYG5mbmxfaG9va19kdW1wYCBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLiBUaGV5J3JlIG5vdyB1c2luZyBgbmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXFgIGFuZCBgbmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxYCB0byBwcm9wZXJseSBzeW5jaHJvbml6ZSBnZW5lcmF0aW9uIG51bWJlcnMuIFRoaXMgaXMgYSBjcnVjaWFsIGltcHJvdmVtZW50IGZvciBjb25zaXN0ZW5jeSBkdXJpbmcgZHVtcHMuXG5cblNwZWNpZmljYWxseSwgaW4gYG5mbmxfaG9va19kdW1wX25hdGAsIEkgc2VlIHRoYXQgaXQgaGFuZGxlcyByZXN0YXJ0L3Jlc3VtZSBkdXJpbmcgdGhlIGR1bXAgdXNpbmcgYGNiLVx1MDAzZWFyZ3NbMV1gIChpbmRleCkgYW5kIGBjYi1cdTAwM2VhcmdzWzJdYCAoc2VxdWVuY2UpLiBJdCByZXR1cm5zIGAtRUlOVFJgIGFuZCBpbmNyZW1lbnRzIGBjYi1cdTAwM2VzZXFgIGlmIGBiYXNlX3NlcWAgY2hhbmdlcy4gVGhpcyBzaG93cyB0aGUgaW50ZW50IHRvIGhhbmRsZSBjaGFuZ2VzIGR1cmluZyBhIG5ldGxpbmsgZHVtcC4gT24gdGhlIG90aGVyIGhhbmQsIGluIGBuZm5sX2hvb2tfZHVtcGAsIGl0IG5vdyB1c2VzIGBjYi1cdTAwM2VzZXEgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKWAgYW5kIGhhbmRsZXMgUkNVIGFuZCBkdW1wIGNvbnNpc3RlbmN5IGNoZWNrcyB3aXRoIGBubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnRgLiBUaGlzIGFsc28gZGVtb25zdHJhdGVzIGVmZm9ydHMgdG93YXJkIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGhhbmRsaW5nLlxuXG5UaGUgbmV4dCBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHBhdGggYWN0dWFsbHkgdXNlZD8gVGhlIGFuc3dlciBpcyB5ZXMsIGFzIHRoZSBuZm5ldGxpbmsgZHVtcCBob29rcyBhcmUgdHJpZ2dlcmVkIHZpYSBOZXRsaW5rIHVzaW5nIGBORk5MX1NVQlNZU19IT09LYCBtZXNzYWdlcywgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UuIE5ldGZpbHRlciBjb3JlIGhvb2sgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGFuZCBOQVQgaG9vayByZWdpc3RyYXRpb24gYXJlIGFsc28gcGFydCBvZiB0aGUgY29yZSBvcGVyYXRpb24gd2hlbiB0aGUgdXNlciBtYW5pcHVsYXRlcyBydWxlcyB3aXRoIGlwdGFibGVzIG9yIG5mdGFibGVzLiBUaGlzIGlzIGEgdmVyeSByZWFsIHNjZW5hcmlvLiBUaGlzIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYSBRRU1VIGVudmlyb25tZW50LlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IGBuZm5ldGxpbmtfaG9vay5jYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmZuZXRsaW5rIGhvb2sgd29ya3MgaW4gZGV0YWlsLCBhbmQgd2hhdCB0aGUgZW50cnlwb2ludHMgYXJlLCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24uIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgcm9idXN0IGFuZCBjb3JyZWN0IG5ldGxpbmsgaW50ZXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQyMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo0Mi40NTg2NjQ2MzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XFxuIDQwMzpcXHRcXG4gNDA0OlxcdFxcdGZvciAoOyBpIFxcdTAwM2MgZS1cXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XFxuIDQwNTpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKmN1ciA9IFJFQURfT05DRShvcHNbaV0pO1xcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHRcXHRpZiAoY3VyLVxcdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxcbiA0MDg6XFx0XFx0XFx0XFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjYiwgY3VyLCBmYW1pbHkpO1xcbiA0MDk6XFx0XFx0XFx0ZWxzZSB7XFxuIDQxMDpcXHRcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxcbiA0MTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGN1ci1cXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcXG4gNDEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcbiA0MTM6XFx0XFx0XFx0fVxcbiA0MTQ6XFx0XFx0XFx0aWYgKGVycilcXG4gNDE1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA0MTY6XFx0XFx0fVxcbiA0MTc6XFx0XFxuIDQxODpcXHRkb25lOlxcbiA0MTk6XFx0XFx0aWYgKG5sc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSAwKVxcbiA0MjA6XFx0XFx0XFx0bmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTtcXG4gNDIxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA0MjI6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBpO1xcbiA0MjM6XFx0XFx0cmV0dXJuIG5sc2tiLVxcdTAwM2VsZW47XFxuIDQyNDpcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiA0Mjc6XFx0e1xcbiA0Mjg6XFx0XFx0Y29uc3Qgc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCk7XFxuIDQyOTpcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgKm5sYSA9IGNiLVxcdTAwM2VkYXRhO1xcbiA0MzA6XFx0XFx0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IE5VTEw7XFxuIDQzMTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChjYi1cXHUwMDNlc2tiLVxcdTAwM2Vzayk7XFxuIDQzMjpcXHRcXHR1OCBmYW1pbHkgPSBuZm1zZy1cXHUwMDNlbmZnZW5fZmFtaWx5O1xcbiA0MzM6XFx0XFx0Y2hhciBuYW1lW0lGTkFNU0laXSA9IFxcXCJcXFwiO1xcbiA0MzQ6XFx0XFx0Y29uc3Qgdm9pZCAqaGVhZDtcXG4gNDM1OlxcdFxcdHUzMiBob29rbnVtO1xcbiA0MzY6XFx0XFxuIDQzNzpcXHRcXHRob29rbnVtID0gbnRvaGwobmxhX2dldF9iZTMyKG5sYVtORk5MQV9IT09LX0hPT0tOVU1dKSk7XFxuIDQzODpcXHRcXHRpZiAoaG9va251bSBcXHUwMDNlIDI1NSlcXG4gNDM5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NDA6XFx0XFxuIDQ0MTpcXHRcXHRpZiAoZmFtaWx5ID09IE5GUFJPVE9fTkVUREVWKSB7XFxuIDQ0MjpcXHRcXHRcXHRpZiAoIW5sYVtORk5MQV9IT09LX0RFVl0pXFxuIDQ0MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ0OlxcdFxcbiA0NDU6XFx0XFx0XFx0bmxhX3N0cnNjcHkobmFtZSwgbmxhW05GTkxBX0hPT0tfREVWXSwgc2l6ZW9mKG5hbWUpKTtcXG4gNDQ2OlxcdFxcdH1cXG4gNDQ3OlxcdFxcbiA0NDg6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA0NDk6XFx0XFx0LyogTm90IGRlcmVmZXJlbmNlZDsgZm9yIGNvbnNpc3RlbmN5IGNoZWNrIG9ubHkgKi9cXG4gNDUwOlxcdFxcdGhlYWQgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgaG9va251bSwgbmV0LCBuYW1lKTtcXG4gNDUxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA0NTI6XFx0XFxuIDQ1MzpcXHRcXHRpZiAoaGVhZCBcXHUwMDI2XFx1MDAyNiBJU19FUlIoaGVhZCkpXFxuIDQ1NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihoZWFkKTtcXG4gNDU1OlxcdFxcbiA0NTY6XFx0XFx0Y3R4ID0ga3phbGxvY19vYmooKmN0eCk7XFxuIDQ1NzpcXHRcXHRpZiAoIWN0eClcXG4gNDU4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0NTk6XFx0XFxuIDQ2MDpcXHRcXHRzdHJzY3B5KGN0eC1cXHUwMDNlZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC1cXHUwMDNlZGV2bmFtZSkpO1xcbiA0NjE6XFx0XFx0Y3R4LVxcdTAwM2Vob29rID0gaG9va251bTtcXG4gNDYyOlxcdFxcdGNiLVxcdTAwM2VkYXRhID0gY3R4O1xcbiA0NjM6XFx0XFxuIDQ2NDpcXHRcXHRyZXR1cm4gMDtcXG4gNDY1OlxcdH1cXG4gNDY2OlxcdFxcbiA0Njc6XFx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdG9wKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gNDY4OlxcdHtcXG4gNDY5OlxcdFxcdGtmcmVlKGNiLVxcdTAwM2VkYXRhKTtcXG4gNDcwOlxcdFxcdHJldHVybiAwO1xcbiA0NzE6XFx0fVxcbiA0NzI6XFx0XFxuIDQ3MzpcXHRzdGF0aWMgaW50IG5mbmxfaG9va19nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNDc0OlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbiA0NzU6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBubGFbXSlcXG4gNDc2OlxcdHtcXG4gNDc3OlxcdFxcdGlmICghbmxhW05GTkxBX0hPT0tfSE9PS05VTV0pXFxuIDQ3ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo0Mi40NTg3NjE1NjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwMTk5MTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSByZXN0IG9mIGBuZm5ldGxpbmtfaG9vay5jYC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIE5ldGZpbHRlciBuZXRsaW5rIGhvb2sgc3lzdGVtIGlzIGltcGxlbWVudGVkLiBJJ20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIG5ldGxpbmsgYXJjaGl0ZWN0dXJlLCBidXQgSSBuZWVkIHRvIG1hcCBpdCB0byB0aGlzIHNwZWNpZmljIGZpbGUgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgaGVyZT8gQXJlIHRoZXkgZGVhbGluZyB3aXRoIG1lc3NhZ2UgZm9ybWF0dGluZywgcGFyc2luZywgYW5kIGRpc3BhdGNoaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIG5ldGxpbmsgc29ja2V0LCB0aGUgaG9vayByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24gbWVjaGFuaXNtcywgYW5kIHRoZSBhY3R1YWwgcGFja2V0IHByb2Nlc3Npbmcgd2l0aGluIHRoZSBOZXRmaWx0ZXIgY29udGV4dC4gVGltZSB0byBhbmFseXplLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYW5kbGUgdGhlIGNvbW11bmljYXRpb24gYW5kIGludGVyYWN0aW9uIGJldHdlZW4gdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgYW5kIHRoZSBrZXJuZWwncyBOZXRmaWx0ZXIgc3Vic3lzdGVtIHRocm91Z2ggbmV0bGluay4gVW5kZXJzdGFuZGluZyB0aGlzIGZpbGUgaXMgY3JpdGljYWwgZm9yIGZpZ3VyaW5nIG91dCBob3cgdG8gYnVpbGQgY3VzdG9tIE5ldGZpbHRlciBtb2R1bGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAwNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDc6NDQuNTYwNzU2NDIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0XFx0cmV0dXJuIDA7XFxuIDQ3MTpcXHR9XFxuIDQ3MjpcXHRcXG4gNDczOlxcdHN0YXRpYyBpbnQgbmZubF9ob29rX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA0NzQ6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuIDQ3NTpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxcbiA0NzY6XFx0e1xcbiA0Nzc6XFx0XFx0aWYgKCFubGFbTkZOTEFfSE9PS19IT09LTlVNXSlcXG4gNDc4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Nzk6XFx0XFxuIDQ4MDpcXHRcXHRpZiAoaW5mby1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19mbGFncyBcXHUwMDI2IE5MTV9GX0RVTVApIHtcXG4gNDgxOlxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xcbiA0ODI6XFx0XFx0XFx0XFx0LnN0YXJ0ID0gbmZubF9ob29rX2R1bXBfc3RhcnQsXFxuIDQ4MzpcXHRcXHRcXHRcXHQuZG9uZSA9IG5mbmxfaG9va19kdW1wX3N0b3AsXFxuIDQ4NDpcXHRcXHRcXHRcXHQuZHVtcCA9IG5mbmxfaG9va19kdW1wLFxcbiA0ODU6XFx0XFx0XFx0XFx0Lm1vZHVsZSA9IFRISVNfTU9EVUxFLFxcbiA0ODY6XFx0XFx0XFx0XFx0LmRhdGEgPSAodm9pZCAqKW5sYSxcXG4gNDg3OlxcdFxcdFxcdH07XFxuIDQ4ODpcXHRcXG4gNDg5OlxcdFxcdFxcdHJldHVybiBuZl9uZXRsaW5rX2R1bXBfc3RhcnRfcmN1KGluZm8tXFx1MDAzZXNrLCBza2IsIGluZm8tXFx1MDAzZW5saCwgXFx1MDAyNmMpO1xcbiA0OTA6XFx0XFx0fVxcbiA0OTE6XFx0XFxuIDQ5MjpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDQ5MzpcXHR9XFxuIDQ5NDpcXHRcXG4gNDk1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZm5sX2hvb2tfY2JbTkZOTF9NU0dfSE9PS19NQVhdID0ge1xcbiA0OTY6XFx0XFx0W05GTkxfTVNHX0hPT0tfR0VUXSA9IHtcXG4gNDk3OlxcdFxcdFxcdC5jYWxsXFx0XFx0PSBuZm5sX2hvb2tfZ2V0LFxcbiA0OTg6XFx0XFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfUkNVLFxcbiA0OTk6XFx0XFx0XFx0LmF0dHJfY291bnRcXHQ9IE5GTkxBX0hPT0tfTUFYLFxcbiA1MDA6XFx0XFx0XFx0LnBvbGljeVxcdFxcdD0gbmZubF9ob29rX25sYV9wb2xpY3lcXG4gNTAxOlxcdFxcdH0sXFxuIDUwMjpcXHR9O1xcbiA1MDM6XFx0XFxuIDUwNDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mbmV0bGlua19zdWJzeXN0ZW0gbmZob29rX3N1YnN5cyA9IHtcXG4gNTA1OlxcdFxcdC5uYW1lXFx0XFx0XFx0XFx0PSBcXFwibmZob29rXFxcIixcXG4gNTA2OlxcdFxcdC5zdWJzeXNfaWRcXHRcXHRcXHQ9IE5GTkxfU1VCU1lTX0hPT0ssXFxuIDUwNzpcXHRcXHQuY2JfY291bnRcXHRcXHRcXHQ9IE5GTkxfTVNHX0hPT0tfTUFYLFxcbiA1MDg6XFx0XFx0LmNiXFx0XFx0XFx0XFx0PSBuZm5sX2hvb2tfY2IsXFxuIDUwOTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo0NC41NjA4Mzg3MjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA1Nzk0MDE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTkFUIFJlZ2lzdHJhdGlvbiBcdTAwMjYgVW5yZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBOQVQgY29yZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IE5ldGZpbHRlciBOQVQgZnVuY3Rpb25zIGFyZSByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IHRoZSBgbmZfbmF0X3JlZ2lzdGVyX2ZuYCBhbmQgYG5mX25hdF91bnJlZ2lzdGVyX2ZuYCBmdW5jdGlvbnMsIGFzIHRoZXkgYXJlIGxpa2VseSB0aGUgaGVhcnQgb2YgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJ2xsIGhlYWQgb3ZlciB0byBgbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZS4gRnJvbSB0aGVyZSBJJ2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIE5BVCBmdW5jdGlvbnMgYXJlIGhvb2tlZCBpbnRvIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBJIGhhdmUgYSBmZWVsaW5nIEknbGwgYWxzbyBiZSBlbmNvdW50ZXJpbmcgc29tZSBtdXRleGVzIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODg2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo0Ni42MTg3ODI0MTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjM1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjM1OlxcdFxcdFxcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XFxuMTIzNjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjEyMzc6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZl9uYXRfcHJvdG9fbXV0ZXgpO1xcbjEyMzg6XFx0XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9wc19jb3VudDsgaSsrKSB7XFxuMTIzOTpcXHRcXHRcXHRcXHRcXHRwcml2ID0gbmF0X29wc1tpXS5wcml2O1xcbjEyNDA6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfcmN1KHByaXYsIHJjdV9oZWFkKTtcXG4xMjQxOlxcdFxcdFxcdFxcdH1cXG4xMjQyOlxcdFxcdFxcdFxcdGtmcmVlX3JjdShuYXRfb3BzLCByY3UpO1xcbjEyNDM6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMjQ0OlxcdFxcdFxcdH1cXG4xMjQ1OlxcdFxcbjEyNDY6XFx0XFx0XFx0bmF0X3Byb3RvX25ldC1cXHUwMDNlbmF0X2hvb2tfb3BzID0gbmF0X29wcztcXG4xMjQ3OlxcdFxcdH1cXG4xMjQ4OlxcdFxcbjEyNDk6XFx0XFx0bmF0X29wcyA9IG5hdF9wcm90b19uZXQtXFx1MDAzZW5hdF9ob29rX29wcztcXG4xMjUwOlxcdFxcdHByaXYgPSBuYXRfb3BzW2hvb2tudW1dLnByaXY7XFxuMTI1MTpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFwcml2KSkge1xcbjEyNTI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZl9uYXRfcHJvdG9fbXV0ZXgpO1xcbjEyNTM6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjEyNTQ6XFx0XFx0fVxcbjEyNTU6XFx0XFxuMTI1NjpcXHRcXHRyZXQgPSBuZl9ob29rX2VudHJpZXNfaW5zZXJ0X3JhdyhcXHUwMDI2cHJpdi1cXHUwMDNlZW50cmllcywgb3BzKTtcXG4xMjU3OlxcdFxcdGlmIChyZXQgPT0gMCkge1xcbjEyNTg6XFx0XFx0XFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xcbjEyNTk6XFx0XFx0XFx0bmF0X3Byb3RvX25ldC1cXHUwMDNldXNlcnMrKztcXG4xMjYwOlxcdFxcdH1cXG4xMjYxOlxcdFxcbjEyNjI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZl9uYXRfcHJvdG9fbXV0ZXgpO1xcbjEyNjM6XFx0XFx0cmV0dXJuIHJldDtcXG4xMjY0OlxcdH1cXG4xMjY1OlxcdFxcbjEyNjY6XFx0dm9pZCBuZl9uYXRfdW5yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4xMjY3OlxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG9wc19jb3VudClcXG4xMjY4OlxcdHtcXG4xMjY5OlxcdFxcdHN0cnVjdCBuYXRfbmV0ICpuYXRfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBuYXRfbmV0X2lkKTtcXG4xMjcwOlxcdFxcdHN0cnVjdCBuZl9uYXRfaG9va3NfbmV0ICpuYXRfcHJvdG9fbmV0O1xcbjEyNzE6XFx0XFx0c3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2O1xcbjEyNzI6XFx0XFx0c3RydWN0IG5mX2hvb2tfb3BzICpuYXRfb3BzO1xcbjEyNzM6XFx0XFx0aW50IGhvb2tudW0gPSBvcHMtXFx1MDAzZWhvb2tudW07XFxuMTI3NDpcXHRcXHRpbnQgaTtcXG4xMjc1OlxcdFxcbjEyNzY6XFx0XFx0aWYgKHBmIFxcdTAwM2U9IEFSUkFZX1NJWkUobmF0X25ldC1cXHUwMDNlbmF0X3Byb3RvX25ldCkpXFxuMTI3NzpcXHRcXHRcXHRyZXR1cm47XFxuMTI3ODpcXHRcXG4xMjc5OlxcdFxcdG5hdF9wcm90b19uZXQgPSBcXHUwMDI2bmF0X25ldC1cXHUwMDNlbmF0X3Byb3RvX25ldFtwZl07XFxuMTI4MDpcXHRcXG4xMjgxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XFxuMTI4MjpcXHRcXHRpZiAoV0FSTl9PTihuYXRfcHJvdG9fbmV0LVxcdTAwM2V1c2VycyA9PSAwKSlcXG4xMjgzOlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjEyODQ6XFx0XFxuMTI4NTpcXHRcXHRuYXRfcHJvdG9fbmV0LVxcdTAwM2V1c2Vycy0tO1xcbjEyODY6XFx0XFxuMTI4NzpcXHRcXHRuYXRfb3BzID0gbmF0X3Byb3RvX25ldC1cXHUwMDNlbmF0X2hvb2tfb3BzO1xcbjEyODg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9wc19jb3VudDsgaSsrKSB7XFxuMTI4OTpcXHRcXHRcXHRpZiAobmF0X29wc1tpXS5ob29rbnVtID09IGhvb2tudW0pIHtcXG4xMjkwOlxcdFxcdFxcdFxcdGhvb2tudW0gPSBpO1xcbjEyOTE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTI5MjpcXHRcXHRcXHR9XFxuMTI5MzpcXHRcXHR9XFxuMTI5NDpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGkgPT0gb3BzX2NvdW50KSlcXG4xMjk1OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjEyOTY6XFx0XFx0cHJpdiA9IG5hdF9vcHNbaG9va251bV0ucHJpdjtcXG4xMjk3OlxcdFxcdG5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KFxcdTAwMjZwcml2LVxcdTAwM2VlbnRyaWVzLCBvcHMpO1xcbjEyOTg6XFx0XFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xcbjEyOTk6XFx0XFxuMTMwMDpcXHRcXHRpZiAobmF0X3Byb3RvX25ldC1cXHUwMDNldXNlcnMgPT0gMCkge1xcbjEzMDE6XFx0XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuYXRfb3BzLCBvcHNfY291bnQpO1xcbjEzMDI6XFx0XFxuMTMwMzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb3BzX2NvdW50OyBpKyspIHtcXG4xMzA0OlxcdFxcdFxcdFxcdHByaXYgPSBuYXRfb3BzW2ldLnByaXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjQ2LjYxODg5Mzc0M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjI2OTEwMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldGZpbHRlciBIb29rIFJlZ2lzdHJhdGlvbiBhbmQgVW5yZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBOZXRmaWx0ZXIgY29yZSBhZ2Fpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGVzZSBob29rcyBhcmUgcmVnaXN0ZXJlZCBhbmQgdW5yZWdpc3RlcmVkIHdpdGhpbiB0aGUgbmV0d29yayBuYW1lc3BhY2UuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG5ldC9uZXRmaWx0ZXIvY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb25zIGBfX25mX3JlZ2lzdGVyX25ldF9ob29rYCBhbmQgYF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AuIEkgc3VzcGVjdCB0aGUgaW50ZXJhY3Rpb25zIHN1cnJvdW5kaW5nIHRoZXNlIHR3byBmdW5jdGlvbnMgaG9sZCB0aGUga2V5cyB0byB0aGUgcHJvYmxlbXMgSSdtIGN1cnJlbnRseSB3cmVzdGxpbmcgd2l0aC4gSSdsbCBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmaW5lIHBvaW50cyBvZiBob3cgbmV0ZmlsdGVyIGhhbmRsZXMgdGhlIG5ldG5zLXNwZWNpZmljIGRldGFpbHMgd2l0aGluIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyMjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjQ4Ljg0NTgwNjkwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjU6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDQyNjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0Mjc6XFx0XFx0XFx0YnJlYWs7XFxuIDQyODpcXHRcXHR9XFxuIDQyOTpcXHRcXG4gNDMwOlxcdFxcdHBwID0gbmZfaG9va19lbnRyeV9oZWFkKG5ldCwgcGYsIHJlZy1cXHUwMDNlaG9va251bSwgcmVnLVxcdTAwM2VkZXYpO1xcbiA0MzE6XFx0XFx0aWYgKCFwcClcXG4gNDMyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MzM6XFx0XFxuIDQzNDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZuZl9ob29rX211dGV4KTtcXG4gNDM1OlxcdFxcbiA0MzY6XFx0XFx0cCA9IG5mX2VudHJ5X2RlcmVmZXJlbmNlKCpwcCk7XFxuIDQzNzpcXHRcXHRuZXdfaG9va3MgPSBuZl9ob29rX2VudHJpZXNfZ3JvdyhwLCByZWcpO1xcbiA0Mzg6XFx0XFxuIDQzOTpcXHRcXHRpZiAoIUlTX0VSUihuZXdfaG9va3MpKSB7XFxuIDQ0MDpcXHRcXHRcXHRidW1wX2hvb2tfYmFzZV9zZXEobmV0KTtcXG4gNDQxOlxcdFxcdFxcdGhvb2tzX3ZhbGlkYXRlKG5ld19ob29rcyk7XFxuIDQ0MjpcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoKnBwLCBuZXdfaG9va3MpO1xcbiA0NDM6XFx0XFx0fVxcbiA0NDQ6XFx0XFxuIDQ0NTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5mX2hvb2tfbXV0ZXgpO1xcbiA0NDY6XFx0XFx0aWYgKElTX0VSUihuZXdfaG9va3MpKVxcbiA0NDc6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobmV3X2hvb2tzKTtcXG4gNDQ4OlxcdFxcbiA0NDk6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbiA0NTA6XFx0XFx0aWYgKG5mX2luZ3Jlc3NfaG9vayhyZWcsIHBmKSlcXG4gNDUxOlxcdFxcdFxcdG5ldF9pbmNfaW5ncmVzc19xdWV1ZSgpO1xcbiA0NTI6XFx0I2VuZGlmXFxuIDQ1MzpcXHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1NcXG4gNDU0OlxcdFxcdGlmIChuZl9lZ3Jlc3NfaG9vayhyZWcsIHBmKSlcXG4gNDU1OlxcdFxcdFxcdG5ldF9pbmNfZWdyZXNzX3F1ZXVlKCk7XFxuIDQ1NjpcXHQjZW5kaWZcXG4gNDU3OlxcdFxcdG5mX3N0YXRpY19rZXlfaW5jKHJlZywgcGYpO1xcbiA0NTg6XFx0XFxuIDQ1OTpcXHRcXHRCVUdfT04ocCA9PSBuZXdfaG9va3MpO1xcbiA0NjA6XFx0XFx0bmZfaG9va19lbnRyaWVzX2ZyZWUocCk7XFxuIDQ2MTpcXHRcXHRyZXR1cm4gMDtcXG4gNDYyOlxcdH1cXG4gNDYzOlxcdFxcbiA0NjQ6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDc6NDguODQ1ODkyODcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTczMzM0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gTmV0ZmlsdGVyIFVucmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IE5ldGZpbHRlciBob29rcyBhcmUgdW5yZWdpc3RlcmVkLCBlc3BlY2lhbGx5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2Agd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2NvcmUuY2AuIFRoaXMgc3VnZ2VzdHMgYSBjb3JlLCBpbnRlcm5hbCBmdW5jdGlvbiwgcmF0aGVyIHRoYW4gYW4gQVBJIGV4cG9zZWQgZGlyZWN0bHkgdG8gbW9kdWxlcy4gSSdtIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgYXQgdGhlIGhlYXJ0IG9mIHJlbW92aW5nIGEgaG9vayBmcm9tIGEgc3BlY2lmaWMgbmV0d29yayBuYW1lc3BhY2UsIGdpdmVuIHRoZSBgbmV0YCBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBob29rIGxpc3RzLCBhbnkgbG9ja3MgdGhhdCBhcmUgbGlrZWx5IGludm9sdmVkLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gdHJhZmZpYyB0aGF0IHdhcyBwcmV2aW91c2x5IHJvdXRlZCB0aHJvdWdoIHRob3NlIGhvb2tzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY2xlYW51cCBvcGVyYXRpb25zLCByZWZlcmVuY2UgY291bnRpbmcgKGlmIHByZXNlbnQpLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgYW50aWNpcGF0ZSBzZWVpbmcgaW50ZXJhY3Rpb25zIHdpdGggYG5mX2hvb2tfb3BzYCBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWxseSBpbXBsaWNhdGlvbnMgZm9yIGNvbm50cmFjayBvciBvdGhlciBzdGF0ZWZ1bCBtb2R1bGVzIHdoaWNoIG1heSBiZSBkZXBlbmRlbnQgb24gdGhvc2UgaG9va3MuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gdmVyaWZ5IGlmIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB1bnJlZ2lzdGVyIGNhbGxiYWNrcywgb3IgaWYgaXQgbWlnaHQgYmUgY2FsbGVkIGluIG90aGVyIHNjZW5hcmlvcyAoZS5nLiwgbmFtZXNwYWNlIGRlc3RydWN0aW9uKS4gRmluYWxseSwgSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaXMgZnVuY3Rpb24ncyByZWxhdGlvbiB0byBvdGhlciBhc3NvY2lhdGVkIGZ1bmN0aW9ucyBsaWtlIGBuZl9yZWdpc3Rlcl9uZXRfaG9va2AgdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgbGlmZWN5Y2xlIG9mIGEgbmV0ZmlsdGVyIGhvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTkyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo1MS4yMDMyMjg5MTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcbiA1MDE6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bmZfaG9va19tdXRleCk7XFxuIDUwMjpcXHRcXG4gNTAzOlxcdFxcdHAgPSBuZl9lbnRyeV9kZXJlZmVyZW5jZSgqcHApO1xcbiA1MDQ6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghcCkpIHtcXG4gNTA1OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmZfaG9va19tdXRleCk7XFxuIDUwNjpcXHRcXHRcXHRyZXR1cm47XFxuIDUwNzpcXHRcXHR9XFxuIDUwODpcXHRcXG4gNTA5OlxcdFxcdGlmIChuZl9yZW1vdmVfbmV0X2hvb2socCwgcmVnKSkge1xcbiA1MTA6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbiA1MTE6XFx0XFx0XFx0aWYgKG5mX2luZ3Jlc3NfaG9vayhyZWcsIHBmKSlcXG4gNTEyOlxcdFxcdFxcdFxcdG5ldF9kZWNfaW5ncmVzc19xdWV1ZSgpO1xcbiA1MTM6XFx0I2VuZGlmXFxuIDUxNDpcXHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1NcXG4gNTE1OlxcdFxcdFxcdGlmIChuZl9lZ3Jlc3NfaG9vayhyZWcsIHBmKSlcXG4gNTE2OlxcdFxcdFxcdFxcdG5ldF9kZWNfZWdyZXNzX3F1ZXVlKCk7XFxuIDUxNzpcXHQjZW5kaWZcXG4gNTE4OlxcdFxcdFxcdG5mX3N0YXRpY19rZXlfZGVjKHJlZywgcGYpO1xcbiA1MTk6XFx0XFx0XFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XFxuIDUyMDpcXHRcXHR9IGVsc2Uge1xcbiA1MjE6XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkXFxcIiwgcGYsIHJlZy1cXHUwMDNlaG9va251bSk7XFxuIDUyMjpcXHRcXHR9XFxuIDUyMzpcXHRcXG4gNTI0OlxcdFxcdHAgPSBfX25mX2hvb2tfZW50cmllc190cnlfc2hyaW5rKHAsIHBwKTtcXG4gNTI1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmZfaG9va19tdXRleCk7XFxuIDUyNjpcXHRcXHRpZiAoIXApXFxuIDUyNzpcXHRcXHRcXHRyZXR1cm47XFxuIDUyODpcXHRcXG4gNTI5OlxcdFxcdG5mX3F1ZXVlX25mX2hvb2tfZHJvcChuZXQpO1xcbiA1MzA6XFx0XFx0bmZfaG9va19lbnRyaWVzX2ZyZWUocCk7XFxuIDUzMTpcXHR9XFxuIDUzMjpcXHRcXG4gNTMzOlxcdHZvaWQgbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxcbiA1MzQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo1MS4yMDMzMTc5ODhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzcwMjk5MTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIElzIHRoaXMgY29kZSByaXBlIGZvciBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgcG9zaXRpdmUgaW5kaWNhdG9ycyBhcmUgc2NyZWFtaW5nIFwieWVzLlwiIFdlJ3JlIGxvb2tpbmcgYXQgY29kZSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMg4oCTIGFscmVhZHkgYSBnb29kIHNpZ24uIFNwZWNpZmljYWxseSwgdGhlcmUncyB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgaW52b2x2aW5nIGxvY2tsZXNzIFJDVSByZWFkcyBhbmQgc2VxdWVuY2UgY291bnRlcnMgKGBob29rX2Jhc2Vfc2VxYCwgYG5hdF9ob29rX2Jhc2Vfc2VxYCkuIFRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGhvb2sgcmVnaXN0ZXJpbmcsIHVucmVnaXN0ZXJpbmcgYW5kIG5ldGxpbmsgZHVtcHMgKGBuZm5sX2hvb2tfZHVtcGAsIGBuZm5sX2hvb2tfZHVtcF9uYXRgKSBhcmUgYWxsIGluIHBsYXkgc2ltdWx0YW5lb3VzbHkuIFRoZSBmYWN0IHRoYXQgdGhlIGNvZGUgdG91Y2hlcyBkdW1wIHJlc3VtcHRpb24sIGFyZ3VtZW50IGluZGV4aW5nLCBzZXF1ZW5jZSBjaGVja3MsIGFuZCBjb25zaXN0ZW5jeSBjaGVja3M/IFRoYXQncyBnb2xkLiBgV29ydGhGdXp6aW5nYD8gRGVmaW5pdGVseSB0cnVlLlxuXG5Ob3csIGxldCdzIHNvbGlkaWZ5IHRoaXMgZm9yIGZ1enppbmcuIFdlIG5lZWQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zLiBGaXJzdCwgd2Uga25vdyB3ZSd2ZSBjb25maXJtZWQgYFdvcnRoRnV6emluZ2AgaXMgdHJ1ZS4gVGhlbiwgd2UgbmVlZCB0byBrbm93IGBFbmFibGVDb25maWdzYDpcblxuTG9va3MgbGlrZSB3ZSBuZWVkOlxuXG4qICAgYE5FVEZJTFRFUmAgLSB0aGF0J3MgYSBnaXZlbi5cbiogICBgTkVURklMVEVSX05FVExJTktfSE9PS2AgLSB3aGljaCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgIGFuZCBgTkZfVEFCTEVTYCAod2hpY2ggc2VsZWN0cyBgTkVURklMVEVSX05FVExJTktgKS5cbiogICBgTkZfTkFUYCDigJMgdGhpcyBpcyBrZXkgc2luY2UgY2hhbmdlcyBhcmUgaW4gYG5mX25hdF9jb3JlLmNgLlxuXG5JJ2xsIGRvdWJsZS1jaGVjayB0aG9zZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gSW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIEkgbmVlZCB0byBjb25maXJtOlxuXG4qICAgYE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tgOiBUaGlzIGluZGVlZCBgZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURgLCBgZGVwZW5kcyBvbiBORl9UQUJMRVNgLCBhbmQgYHNlbGVjdCBORVRGSUxURVJfTkVUTElOS2AuIENoZWNrcyBvdXQuXG4qICAgYE5GX05BVGA6IFRpbWUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZfTkFUYC4gTmVlZCB0byBsb29rIGF0IHRob3NlIHRvby5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NTIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo1NC45MDYzMTI4NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NjgxODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9OQVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz05OT1pZiBORl9OQVRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDA6Y29uZmlnIE5GX05BVF9TTk1QX0JBU0lDXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJCYXNpYyBTTk1QLUFMRyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTE3LVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjExODpjb25maWcgTkZfTkFUX1BQVFBcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX05BVF9IMzIzXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzk4PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDA2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MDc6Y29uZmlnIE5GX05BVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MDgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQxNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDE2OmNvbmZpZyBORl9OQVRfQU1BTkRBXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQxNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQyMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDIxOmNvbmZpZyBORl9OQVRfRlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQyMi1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQyNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDI2OmNvbmZpZyBORl9OQVRfSVJDXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQyNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDMxOmNvbmZpZyBORl9OQVRfU0lQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzMi1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDM2OmNvbmZpZyBORl9OQVRfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MzctXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ0MTpjb25maWcgTkZfTkFUX1JFRElSRUNUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0Mi1cXHRib29sXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDQ0OmNvbmZpZyBORl9OQVRfTUFTUVVFUkFERVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDUtXFx0Ym9vbFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ0Nzpjb25maWcgTkZfTkFUX09WU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo1NC45NzM5OTgyNTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyNTk3ODg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246XG5cbioqQW5hbHl6aW5nIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIC0gRm9jdXNlZCBvbiBMaW5lIDQwNyoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gbGluZSA0MDcgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBLY29uZmlnIGZpbGVzIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHN5c3RlbSwgc28gdGhpcyBsaW5lIGlzIGxpa2VseSBjb250cmlidXRpbmcgdG8gdGhlIGJ1aWxkIHByb2Nlc3MgaW4gc29tZSB3YXkuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIG1vZHVsZSBiZWluZyBjb25maWd1cmVkIG9yIGVuYWJsZWQvZGlzYWJsZWQgdGhlcmUsIHRoZSBzcGVjaWZpYyBmZWF0dXJlLCBhbmQgaXRzIGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb21wb25lbnRzLiBTaW5jZSBJJ20gdmVyeSBmYW1pbGlhciB3aXRoIG5ldGZpbHRlciBhbmQgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLCBJJ2xsIGJlIHF1aWNrbHkgaWRlbnRpZnlpbmcga2V5d29yZHMgYW5kIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGxpbmUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ2xsIGV4cGVjdCB0byBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBuZXRmaWx0ZXIgbW9kdWxlLCBvcHRpb24sIG9yIHBlcmhhcHMgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgdGhhdCBndWlkZXMgd2hhdCBnZXRzIGluY2x1ZGVkIGluIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UuIFRpbWUgdG8gc2VlIHdoYXQncyBhY3R1YWxseSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo1Ny4yOTk5ODA5MzFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDU6XFx0XFx0ICB0aGUgZW5xdWV1ZWQgdmlhIE5GTkVUTElOSy5cXG4gNDA2OlxcdFxcbiA0MDc6XFx0Y29uZmlnIE5GX05BVFxcbiA0MDg6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiBzdXBwb3J0XFxcIlxcbiA0MDk6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG4gNDEwOlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiA0MTE6XFx0XFx0aGVscFxcbiA0MTI6XFx0XFx0ICBUaGUgTkFUIG9wdGlvbiBhbGxvd3MgbWFzcXVlcmFkaW5nLCBwb3J0IGZvcndhcmRpbmcgYW5kIG90aGVyXFxuIDQxMzpcXHRcXHQgIGZvcm1zIG9mIGZ1bGwgTmV0d29yayBBZGRyZXNzIFBvcnQgVHJhbnNsYXRpb24uIFRoaXMgY2FuIGJlXFxuIDQxNDpcXHRcXHQgIGNvbnRyb2xsZWQgYnkgaXB0YWJsZXMsIGlwNnRhYmxlcyBvciBuZnQuXFxuIDQxNTpcXHRcXG4gNDE2OlxcdGNvbmZpZyBORl9OQVRfQU1BTkRBXFxuIDQxNzpcXHRcXHR0cmlzdGF0ZVxcbiA0MTg6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfTkFUXFxuIDQxOTpcXHRcXHRkZWZhdWx0IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0tfQU1BTkRBXFxuIDQyMDpcXHRcXG4gNDIxOlxcdGNvbmZpZyBORl9OQVRfRlRQXFxuIDQyMjpcXHRcXHR0cmlzdGF0ZVxcbiA0MjM6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfTkFUXFxuIDQyNDpcXHRcXHRkZWZhdWx0IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0tfRlRQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjU3LjMwMDEwNTg2MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTE2MjE3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE5ldGZpbHRlciBOZXRsaW5rIEhvb2sgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBpbml0aWFsIGNoZWNrIG9mIGBORVRGSUxURVJfTkVUTElOS19IT09LYCBhbmQgcmVsYXRlZCBvcHRpb25zIHRlbGxzIG1lIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIG5ldGxpbmstYmFzZWQgbmV0ZmlsdGVyIGhvb2tzLiBJIHNob3VsZCBoYXZlIGFsc28gdmVyaWZpZWQgYWxsIHRoZSByZWxhdGVkIG5ldGZpbHRlciBvcHRpb25zIGZvciBmdWxsIGNvdmVyYWdlLCBhbmQgaXQgbG9va3MgbGlrZSBJIGRpZDogYE5FVEZJTFRFUmAsIGBORVRGSUxURVJfQURWQU5DRURgLCBgTkZfVEFCTEVTYCwgYE5FVEZJTFRFUl9ORVRMSU5LYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfTkFUYC4gR29vZC4gTm93IHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgaW1wYWN0ZWQuXG5cbk15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLiBMb29raW5nIGF0IHRoZSBjb2RlLCBJJ3ZlIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyBzeW1ib2xzIGFzIGtleTogYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGAsIGBuZm5sX2hvb2tfZ2V0YCwgYG5mbmxfaG9va19kdW1wX3N0YXJ0YCwgYG5mX25hdF9yZWdpc3Rlcl9mbmAsIGBuZl9uYXRfdW5yZWdpc3Rlcl9mbmAsIGBuZl9yZWdpc3Rlcl9uZXRfaG9va2AsIGBuZl91bnJlZ2lzdGVyX25ldF9ob29rYCwgYF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2tgLCBhbmQgYF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AuIEkgY2hlY2tlZCwgYnV0IG5vbmUgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBzdWNoIGFzIG1lbW9yeSBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuIFRoZXkncmUgYWxsIHZlcnkgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbmV0ZmlsdGVyIGFuZCBuZXRsaW5rLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LiBJIHJlLWNoZWNrZWQgdGhlbSB0byBiZSBjZXJ0YWluLlxuXG5JIHRoZW4gZGlkIGEgbW9yZSB0aG9yb3VnaCBkaWZmIGNoZWNrLCB3aGljaCBjb25maXJtcyB0aGVzZSBhcmUgaW5kZWVkIHRoZSBhbHRlcmVkIGZ1bmN0aW9ucyBpbiBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYCwgYG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY2AgYW5kIGBuZXQvbmV0ZmlsdGVyL2NvcmUuY2AsIHBsdXMgdGhlIGFkZGVkIGZpZWxkcyBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgaW4gYGluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oYC4gSXQgYWxzbyBnYXZlIG1lIGBuZXRmaWx0ZXJfbmV0X2luaXRgIGluIGBjb3JlLmNgIGFuZCBhIHN0cnVjdCBpbiBgbmZuZXRsaW5rX2hvb2suY2AuIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIGV2ZXJ5dGhpbmcgbm93LlxuXG5Ob3csIGxldCdzIHJldmlldyBteSByZWFzb25pbmcuIFRoZSBwYXRjaCBpcyBhYm91dCBpbnRyb2R1Y2luZyBzZXF1ZW5jZSBjb3VudGVycyB0byBkZXRlY3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGR1cmluZyBuZXRsaW5rIG5ldGZpbHRlciBob29rIGR1bXBpbmcuIEl0IGFmZmVjdHMgaG9vayByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLCBhcyB3ZWxsIGFzIHRoZSByZXN0YXJ0IGFuZCBjb25zaXN0ZW5jeSBjaGVja2luZyBsb2dpYy4gVGhpcyBpbXBhY3RzIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgYW5kIG5ldGZpbHRlciBjb25maWd1cmF0aW9uIGNvbW1hbmRzLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dCBjb25jdXJyZW5jeSByZWdyZXNzaW9ucywgYnVncyBpbiByZXN0YXJ0IGhhbmRsaW5nLCBhbmQgY29uc2lzdGVuY3kgY2hlY2sgZXJyb3JzLlxuXG5TbywgdG8gcmVjYXA6IG15IGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0LCBteSBmb2N1cyBzeW1ib2xzIGFyZSBzcG90IG9uLCBhbmQgbXkgcmVhc29uaW5nIGlzIHNvdW5kLiBOb3cgaXQncyB0aW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgyMywiT3V0cHV0VG9rZW5zIjoyNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDg6MDQuNDE2MzI3NzIxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU0MDM0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9OQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZm5sX2hvb2tfZHVtcFwiLFxuICAgIFwibmZubF9ob29rX2R1bXBfbmF0XCIsXG4gICAgXCJuZm5sX2hvb2tfZHVtcF9zdGFydFwiLFxuICAgIFwibmZubF9ob29rX2dldFwiLFxuICAgIFwibmZfbmF0X3JlZ2lzdGVyX2ZuXCIsXG4gICAgXCJuZl9uYXRfdW5yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfcmVnaXN0ZXJfbmV0X2hvb2tcIixcbiAgICBcIm5mX3VucmVnaXN0ZXJfbmV0X2hvb2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoaG9va19iYXNlX3NlcSBhbmQgbmF0X2hvb2tfYmFzZV9zZXEpIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZHVyaW5nIG5ldGxpbmsgZHVtcCBvZiBuZXRmaWx0ZXIgYW5kIE5BVCBob29rcywgcmVmYWN0b3JpbmcgdGhlIGR1bXAgaXRlcmF0aW9uIGFuZCByZXN0YXJ0L2NvbnNpc3RlbmN5IHZlcmlmaWNhdGlvbiBpbiBuZm5ldGxpbmtfaG9vay5jLCBhbmQgYnVtcGluZyB0aGUgc2VxdWVuY2UgbnVtYmVycyB1cG9uIGhvb2sgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGluIGNvcmUuYyBhbmQgbmZfbmF0X2NvcmUuYy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayBhbmQgbmV0ZmlsdGVyIGhvb2sgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIG5ldGxpbmsgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19IT09LXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfTkFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZubF9ob29rX2R1bXBcIixcbiAgICBcIm5mbmxfaG9va19kdW1wX25hdFwiLFxuICAgIFwibmZubF9ob29rX2R1bXBfc3RhcnRcIixcbiAgICBcIm5mbmxfaG9va19nZXRcIixcbiAgICBcIm5mX25hdF9yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfbmF0X3VucmVnaXN0ZXJfZm5cIixcbiAgICBcIm5mX3JlZ2lzdGVyX25ldF9ob29rXCIsXG4gICAgXCJuZl91bnJlZ2lzdGVyX25ldF9ob29rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2VxdWVuY2UgdHJhY2tpbmcgKGhvb2tfYmFzZV9zZXEgYW5kIG5hdF9ob29rX2Jhc2Vfc2VxKSB0byBkZXRlY3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGR1cmluZyBuZXRsaW5rIGR1bXAgb2YgbmV0ZmlsdGVyIGFuZCBOQVQgaG9va3MsIHJlZmFjdG9yaW5nIHRoZSBkdW1wIGl0ZXJhdGlvbiBhbmQgcmVzdGFydC9jb25zaXN0ZW5jeSB2ZXJpZmljYXRpb24gaW4gbmZuZXRsaW5rX2hvb2suYywgYW5kIGJ1bXBpbmcgdGhlIHNlcXVlbmNlIG51bWJlcnMgdXBvbiBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBpbiBjb3JlLmMgYW5kIG5mX25hdF9jb3JlLmMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgYW5kIG5ldGZpbHRlciBob29rIG1hbmFnZW1lbnQgbG9naWMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBuZXRsaW5rIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ4OjA0LjQ5MTczNzgyOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzMTU1NDk3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0ODowNC40OTIxNjk2NDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjMxNTExMzY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2VxdWVuY2UgdHJhY2tpbmcgKGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCkgdG8gbmV0ZmlsdGVyIGFuZCBOQVQgaG9vayByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gdG8gcHJvdmlkZSBkdW1wIGNvbnNpc3RlbmN5IGRldGVjdGlvbiBpbiBgbmZuZXRsaW5rX2hvb2suY2AuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIHN0cnVjdHVyZSBidWZmZXIgbGVuZ3RocyBpbiBhIHdheSB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIE5ldGxpbmsgY2FsbGJhY2tzIGBjYi1cXHUwMDNlYXJnc2AgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIG5ldGxpbmsgc3Vic3lzdGVtLCBhbmQgYHN0cnVjdCBuZXRuc19uZmAgc2VxdWVuY2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBuZXRmaWx0ZXJfbmV0X2luaXQoKWAuXFxuLSBLQVNBTiAvIExvY2tkZXAgYXBwbGljYWJpbGl0eTogQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgcGF0Y2ggcmVsYXRlIHRvIGNvbmN1cnJlbmN5LCBSQ1UgZGVyZWZlcmVuY2luZywgbGlzdCB0cmF2ZXJzYWwgYm91bmRzLCBvciBob29rIGVudHJ5IGxpZmVjeWNsZXMsIHdoaWNoIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgZG9tYWluIG9mIEtBU0FOLCBLQ1NBTiwgYW5kIExvY2tkZXAuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMwOWQ1ODc4ZThkY2Q0OGYxYTBhMzliNjNkNjFlOWM2YjllY2JhMzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIyOjQ3OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxuaW5kZXggYTZhMGJmNGEyNDdlNS4uN2ZkNzgzOTRkMWU3YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxuQEAgLTMzLDUgKzMzLDcgQEAgc3RydWN0IG5ldG5zX25mIHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfREVGUkFHX0lQVjYpXG4gXHR1bnNpZ25lZCBpbnQgZGVmcmFnX2lwdjZfdXNlcnM7XG4gI2VuZGlmXG4rXHR1bnNpZ25lZCBpbnQgaG9va19iYXNlX3NlcTtcbitcdHVuc2lnbmVkIGludCBuYXRfaG9va19iYXNlX3NlcTtcbiB9O1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvY29yZS5jIGIvbmV0L25ldGZpbHRlci9jb3JlLmNcbmluZGV4IDY3NWExMDM0YjM0MDAuLmEyODRiMzI0MTIxMWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9jb3JlLmNcbkBAIC0zODYsNiArMzg2LDE1IEBAIHN0YXRpYyB2b2lkIG5mX3N0YXRpY19rZXlfZGVjKGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLCBpbnQgcGYpXG4gI2VuZGlmXG4gfVxuIFxuK3N0YXRpYyB2b2lkIGJ1bXBfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKTtcbitcbitcdHdoaWxlICgrK2Jhc2Vfc2VxID09IDApXG4rXHRcdDtcbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpXG4ge1xuQEAgLTQyOCw2ICs0MzcsNyBAQCBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXG4gXHRuZXdfaG9va3MgPSBuZl9ob29rX2VudHJpZXNfZ3JvdyhwLCByZWcpO1xuIFxuIFx0aWYgKCFJU19FUlIobmV3X2hvb2tzKSkge1xuK1x0XHRidW1wX2hvb2tfYmFzZV9zZXEobmV0KTtcbiBcdFx0aG9va3NfdmFsaWRhdGUobmV3X2hvb2tzKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpwcCwgbmV3X2hvb2tzKTtcbiBcdH1cbkBAIC01MDYsNiArNTE2LDcgQEAgc3RhdGljIHZvaWQgX19uZl91bnJlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0XHRcdG5ldF9kZWNfZWdyZXNzX3F1ZXVlKCk7XG4gI2VuZGlmXG4gXHRcdG5mX3N0YXRpY19rZXlfZGVjKHJlZywgcGYpO1xuK1x0XHRidW1wX2hvb2tfYmFzZV9zZXEobmV0KTtcbiBcdH0gZWxzZSB7XG4gXHRcdFdBUk5fT05DRSgxLCBcImhvb2sgbm90IGZvdW5kLCBwZiAlZCBudW0gJWRcIiwgcGYsIHJlZy1cdTAwM2Vob29rbnVtKTtcbiBcdH1cbkBAIC03ODQsNiArNzk1LDggQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5ldGZpbHRlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuICNlbmRpZlxuK1x0bmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXEgPSAxO1xuK1x0bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxID0gMTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbmluZGV4IDhhYzMyNmUxZWI1YmEuLmZmMmNiYThkZjg4NjEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuQEAgLTExNjAsNiArMTE2MCwxNSBAQCBuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCxcbiB9XG4gI2VuZGlmXG4gXG4rc3RhdGljIHZvaWQgYnVtcF9uYXRfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSk7XG4rXG4rXHR3aGlsZSAoKytiYXNlX3NlcSA9PSAwKVxuK1x0XHQ7XG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBuZl9jdF9oZWxwZXJfZXhwZWN0Zm4gZm9sbG93X21hc3Rlcl9uYXQgPSB7XG4gXHQubmFtZVx0XHQ9IFwibmF0LWZvbGxvdy1tYXN0ZXJcIixcbiBcdC5leHBlY3Rmblx0PSBuZl9uYXRfZm9sbG93X21hc3RlcixcbkBAIC0xMjQ1LDggKzEyNTQsMTAgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbiBcdH1cbiBcbiBcdHJldCA9IG5mX2hvb2tfZW50cmllc19pbnNlcnRfcmF3KFx1MDAyNnByaXYtXHUwMDNlZW50cmllcywgb3BzKTtcbi1cdGlmIChyZXQgPT0gMClcbitcdGlmIChyZXQgPT0gMCkge1xuK1x0XHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHRcdG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMrKztcbitcdH1cbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuZl9uYXRfcHJvdG9fbXV0ZXgpO1xuIFx0cmV0dXJuIHJldDtcbkBAIC0xMjg0LDYgKzEyOTUsNyBAQCB2b2lkIG5mX25hdF91bnJlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcdHByaXYgPSBuYXRfb3BzW2hvb2tudW1dLnByaXY7XG4gXHRuZl9ob29rX2VudHJpZXNfZGVsZXRlX3JhdyhcdTAwMjZwcml2LVx1MDAzZWVudHJpZXMsIG9wcyk7XG4rXHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXG4gXHRpZiAobmF0X3Byb3RvX25ldC1cdTAwM2V1c2VycyA9PSAwKSB7XG4gXHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmF0X29wcywgb3BzX2NvdW50KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbmluZGV4IDk1MDA1ZTlhNjA2NjguLjIxYTc1OTE2OGMzODQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xuQEAgLTU0LDcgKzU0LDYgQEAgc3RhdGljIGludCBuZl9uZXRsaW5rX2R1bXBfc3RhcnRfcmN1KHN0cnVjdCBzb2NrICpubHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhIHtcbiBcdGNoYXIgZGV2bmFtZVtJRk5BTVNJWl07XG4tXHR1bnNpZ25lZCBsb25nIGhlYWR2O1xuIFx0dTggaG9vaztcbiB9O1xuIFxuQEAgLTMzOCwyNyArMzM3LDQ4IEBAIG5mbmxfaG9va19lbnRyaWVzX2hlYWQodTggcGYsIHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKmRlXG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcbi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxuLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuLVx0XHRcdCAgICAgIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBzZXEpXG4rXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLCBpbnQgZmFtaWx5KVxuIHtcbiBcdHN0cnVjdCBuZl9uYXRfbG9va3VwX2hvb2tfcHJpdiAqcHJpdiA9IG9wcy1cdTAwM2Vwcml2O1xuLVx0c3RydWN0IG5mX2hvb2tfZW50cmllcyAqZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LVx1MDAzZWVudHJpZXMpO1xuK1x0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLVx1MDAzZWRhdGE7XG4rXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChubHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3QgbmZfaG9va19vcHMgKipuYXRfb3BzO1xuLVx0aW50IGksIGVycjtcbitcdHVuc2lnbmVkIGludCBpID0gY2ItXHUwMDNlYXJnc1sxXTtcbitcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmU7XG4rXHR1bnNpZ25lZCBpbnQgYmFzZV9zZXE7XG4rXHRpbnQgZXJyID0gMDtcbiBcbitcdGJhc2Vfc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xuK1xuK1x0ZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LVx1MDAzZWVudHJpZXMpO1xuIFx0aWYgKCFlKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byBvdXQ7XG4gXG4gXHRuYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XG4tXHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBuYXRfb3BzW2ldLFxuLVx0XHRcdFx0XHQgb3BzLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksIHNlcSk7XG4rXHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcbitcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsXG4rXHRcdFx0XHRcdCBSRUFEX09OQ0UobmF0X29wc1tpXSksXG4rXHRcdFx0XHRcdCBvcHMtXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbitcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0YnJlYWs7XG4rXG4gXHR9XG4tXHRyZXR1cm4gMDtcbitvdXQ6XG4rXHRpZiAoIWVycikge1xuK1x0XHRpID0gMDtcbitcdH1cbitcdGNiLVx1MDAzZWFyZ3NbMV0gPSBpO1xuK1xuK1x0aWYgKGNiLVx1MDAzZWFyZ3NbMl0gXHUwMDI2XHUwMDI2IGJhc2Vfc2VxICE9IGNiLVx1MDAzZWFyZ3NbMl0pIHtcbitcdFx0Y2ItXHUwMDNlc2VxKys7XG4rXHRcdGVyciA9IC1FSU5UUjtcbitcdH1cbitcdGNiLVx1MDAzZWFyZ3NbMl0gPSBiYXNlX3NlcTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuQEAgLTM3MywzNSArMzkzLDMxIEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIFx0dW5zaWduZWQgaW50IGkgPSBjYi1cdTAwM2VhcmdzWzBdO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0Y2ItXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4gXG4gXHRlID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGN0eC1cdTAwM2Vob29rLCBuZXQsIGN0eC1cdTAwM2VkZXZuYW1lKTtcbi1cdGlmICghZSlcbitcdGlmICghZSB8fCBJU19FUlIoZSkpXG4gXHRcdGdvdG8gZG9uZTtcbiBcbi1cdGlmIChJU19FUlIoZSkpIHtcbi1cdFx0Y2ItXHUwMDNlc2VxKys7XG4tXHRcdGdvdG8gZG9uZTtcbi1cdH1cbi1cbi1cdGlmICgodW5zaWduZWQgbG9uZyllICE9IGN0eC1cdTAwM2VoZWFkdiB8fCBpIFx1MDAzZT0gZS1cdTAwM2VudW1faG9va19lbnRyaWVzKVxuLVx0XHRjYi1cdTAwM2VzZXErKztcbi1cbiBcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4gXG4gXHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcbi1cdFx0aWYgKG9wc1tpXS1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuLVx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY3R4LCBvcHNbaV0sIGZhbWlseSxcbi1cdFx0XHRcdFx0XHQgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgb3BzW2ldLFxuLVx0XHRcdFx0XHRcdCBvcHNbaV0tXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbitcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcbitcbitcdFx0aWYgKGN1ci1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuK1x0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcbitcdFx0ZWxzZSB7XG4rXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1cixcbitcdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4gXHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuK1x0XHR9XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4gZG9uZTpcbi1cdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4rXHRpZiAobmxza2ItXHUwMDNlbGVuIFx1MDAzZSAwKVxuK1x0XHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRjYi1cdTAwM2VhcmdzWzBdID0gaTtcbiBcdHJldHVybiBubHNrYi1cdTAwM2VsZW47XG5AQCAtNDQyLDEwICs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzdHJzY3B5KGN0eC1cdTAwM2VkZXZuYW1lLCBuYW1lLCBzaXplb2YoY3R4LVx1MDAzZWRldm5hbWUpKTtcbi1cdGN0eC1cdTAwM2VoZWFkdiA9ICh1bnNpZ25lZCBsb25nKWhlYWQ7XG4gXHRjdHgtXHUwMDNlaG9vayA9IGhvb2tudW07XG4tXG4tXHRjYi1cdTAwM2VzZXEgPSAxO1xuIFx0Y2ItXHUwMDNlZGF0YSA9IGN0eDtcbiBcbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDg6MDQuNDkyMTcyNjQ5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNDA1MDY4NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldGZpbHRlciBQYXRjaDogVGhpbmtpbmcgVGhyb3VnaCB0aGUgSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpbXBhY3RzIG5ldGZpbHRlciBjb3JlLCBzcGVjaWZpY2FsbHkgYG5mX25hdF9jb3JlYCwgYW5kIHRoYXQgYG5mbmV0bGlua19ob29rLmNgIGZpbGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGNoYW5nZXMgdG8gaG9vayByZWdpc3RyYXRpb24gYW5kIG5ldGxpbmsgZHVtcGluZyAtIGludGVyZXN0aW5nLlwiXG5cbkZpcnN0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgIHRvIGBzdHJ1Y3QgbmV0bnNfbmZgLiBNeSBndWVzcyBpcyB0aGlzIGlzIGFib3V0IHZlcnNpb25pbmcgb3Igc3luY2hyb25pemF0aW9uIGZvciBjaGFuZ2VzIHRvIHRoZSBob29rIHJlZ2lzdHJhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IHNldHRpbmcgdGhlIHN0YWdlIGZvciBzb21ldGhpbmcgcmVsYXRlZCB0byBjb25jdXJyZW50IGFjY2VzcyBvciBkYXRhIGNvbnNpc3RlbmN5LiBJbmNyZW1lbnRpbmcgdGhlc2Ugc2VxdWVuY2UgbnVtYmVycyBvbiByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24uLi4geXVwLCB0aGF0IHJlaW5mb3JjZXMgbXkgYXNzdW1wdGlvbiBhYm91dCBjb25jdXJyZW5jeSBjb250cm9sLlxuXG5Ob3csIGludG8gYG5mbmV0bGlua19ob29rLmNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgbW9yZSBjb25jcmV0ZS4gVGhlIG5ldGxpbmsgZHVtcGluZyBtZWNoYW5pc20gZm9yIG5ldGZpbHRlciBob29rcyAoYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGApIGlzIHdoYXQncyBiZWluZyB0d2Vha2VkLiBVc2luZyBgY2ItXHUwMDNlYXJnc1sxXWAgZm9yIE5BVCBob29rIGR1bXAgaW5kZXhpbmcgaXMgbm90YWJsZSwgYWxzbyB0cmFja2luZyBgYmFzZV9zZXFgLCBhbmQgaGFuZGxpbmcgYGNiLVx1MDAzZXNlcWAuIEkgc3VzcGVjdCB0aGlzIGlzIGFib3V0IGZpbHRlcmluZyBvdXQgZHVwbGljYXRlcyBvciBlbnN1cmluZyB0aGF0IHRoZSBkdW1wIHJlZmxlY3RzIHRoZSBzdGF0ZSBhdCBhIHBhcnRpY3VsYXIgcG9pbnQgaW4gdGltZS4gSXQgbWlnaHQgYmUgdXNlZCB0byBpbXBsZW1lbnQgYSBjb25zaXN0ZW50IHNuYXBzaG90IG9mIHRoZSBob29rIGNvbmZpZ3VyYXRpb24gb3IgcmVnaXN0cmF0aW9uIHN0YXRlLlxuXG5UaGUgbGluZSBgY2ItXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSlgIGluIGBuZm5sX2hvb2tfZHVtcGAgbWFrZXMgaXQgZXZlbiBjbGVhcmVyIOKAkyBhY3F1aXJpbmcgdGhlIHNlcXVlbmNlIG51bWJlciB3aXRoIGBzbXBfbG9hZF9hY3F1aXJlYCBpbXBsaWVzIHRoaXMgaXMgZm9yIG1lbW9yeSBvcmRlcmluZyBvciBzeW5jaHJvbml6YXRpb24sIHBlcmhhcHMgdG8gZ3VhcmFudGVlIGNvbnNpc3RlbmN5IGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGhlIHVwZGF0ZXMgdXNpbmcgYFJFQURfT05DRWAgcmVpbmZvcmNlIG15IHVuZGVyc3RhbmRpbmcgdGhhdCB0aGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgaW4gYSBjb25jdXJyZW50IGVudmlyb25tZW50LCBhbmQgdGhlIHJlbW92YWwgb2YgYGhlYWR2YCBpcyBwcm9iYWJseSBzb21lIGtpbmQgb2Ygb3B0aW1pemF0aW9uLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVzZSBmdW5jdGlvbnMgaW4gYG5mbmV0bGlua19ob29rLmNgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGR1bXBlZCBpbnRvIHRoZSBuZXRsaW5rIHNvY2tldCBidWZmZXIgYW5kIGhvdyBgbmZubF9ob29rX2R1bXBfb25lYCBvcGVyYXRlcy4gSSdsbCBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhlc2Ugc2VxdWVuY2UgbnVtYmVycyBhcmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBob29rIGRhdGEgc3RydWN0dXJlcyB0byBlbnN1cmUgdGhhdCBkdW1wcyBhcmUgY29uc2lzdGVudCBhbmQgY29tcGxldGUsIGVzcGVjaWFsbHkgd2hlbiBoYW5kbGluZyBjb25jdXJyZW50IGhvb2sgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBhY3Rpdml0aWVzLiBJdCBpcyBhbHNvIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCB3aGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gaXMgY29udGFpbmVkIGluIHRoYXQgYXJndW1lbnQgYGNiLVx1MDAzZWFyZ3NbMV1gLCBhcyBpdCBpcyBsaWtlbHkgY3J1Y2lhbCBmb3IgdGhlIGluZGV4aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDg6MTUuODk3MjQ0Mzk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjcyOTkyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZubF9ob29rX2R1bXBfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYz0xNTg9c3RhdGljIGludCBuZm5sX2hvb2tfcHV0X25mdF9mdF9pbmZvKHN0cnVjdCBza19idWZmICpubHNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0xODktXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjE5MDpzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTE5MS1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTMzOT1zdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzYwLVxcdGZvciAoOyBpIFxcdTAwM2MgZS1cXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjM2MTpcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzYyLVxcdFxcdFxcdFxcdFxcdCBSRUFEX09OQ0UobmF0X29wc1tpXSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9Mzg0PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTQwOS1cXHRcXHRlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6NDEwOlxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTQxMS1cXHRcXHRcXHRcXHRcXHRcXHQgY3VyLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0ODoxNi44NjQ1NDg2MjVaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYzNTYwNzU3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBuZm5ldGxpbmtfaG9vay5jOiBUaGUgRHVtcCBPcGVyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYCBtb2R1bGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBuZm5sX2hvb2tfZHVtcF9vbmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBuZXRmaWx0ZXIgbmV0bGluayBob29rcyBhcmUgZW51bWVyYXRlZCBhbmQgcHJlc2VudGVkLCBzbyB0aGUgZHVtcCBmdW5jdGlvbmFsaXR5IGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIHN0cnVjdHVyZXMgYXJlIHRyYW5zbGF0ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlcyB0aGF0IGFyZSBzZW50IG91dC4gSSdtIGFzc3VtaW5nIHRoYXQgZnVuY3Rpb24gaGFuZGxlcyBkdW1waW5nIGEgc2luZ2xlIGhvb2sgcmVnaXN0cmF0aW9uLCB3aGljaCBsaWtlbHkgbWVhbnMgdHJhdmVyc2luZyBhIGxpc3Qgb3IgdHJlZSBvZiByZWdpc3RlcmVkIGhvb2tzIGFuZCBmb3JtYXR0aW5nIHRoZSBkYXRhIGludG8gdGhlIGFwcHJvcHJpYXRlIG5ldGxpbmsgYXR0cmlidXRlcy4gSSdtIGFsc28gaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGl0ZXJhdG9yIHRoYXQgcHJlc2VudHMgdGhlIGRhdGEgb3ZlciBuZXRsaW5rLiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgZHVyaW5nIHRoZSBkdW1wIHByb2Nlc3MsIHRvbyDigJMgbG9ja2luZywgUkNVLCB3aGF0ZXZlciBtZWNoYW5pc20gdGhleSBlbXBsb3kuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGFuZCB0aGUgYmFzaWMgbWVjaGFuaWNzIG9mIGhvdyBob29rIGluZm9ybWF0aW9uIGlzIHJldHJpZXZlZCBhbmQgc2hhcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDI0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDg6MTkuNTAwMTU4NDk3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdFxcdFxcdFxcdFxcdCAgZnQtXFx1MDAzZW5hbWUsIGZ0LVxcdTAwM2V0YWJsZS1cXHUwMDNlZmFtaWx5KTtcXG4gMTgxOlxcdFxcdGlmIChyZXQpIHtcXG4gMTgyOlxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChubHNrYiwgbmVzdCk7XFxuIDE4MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxODQ6XFx0XFx0fVxcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRubGFfbmVzdF9lbmQobmxza2IsIG5lc3QpO1xcbiAxODc6XFx0XFx0cmV0dXJuIDA7XFxuIDE4ODpcXHR9XFxuIDE4OTpcXHRcXG4gMTkwOlxcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfb25lKHN0cnVjdCBza19idWZmICpubHNrYixcXG4gMTkxOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsXFxuIDE5MjpcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IHByaW9yaXR5LFxcbiAxOTM6XFx0XFx0XFx0XFx0ICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSlcXG4gMTk0OlxcdHtcXG4gMTk1OlxcdFxcdHUxNiBldmVudCA9IG5mbmxfbXNnX3R5cGUoTkZOTF9TVUJTWVNfSE9PSywgTkZOTF9NU0dfSE9PS19HRVQpO1xcbiAxOTY6XFx0XFx0dW5zaWduZWQgaW50IHBvcnRpZCA9IE5FVExJTktfQ0Iobmxza2IpLnBvcnRpZDtcXG4gMTk3OlxcdFxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbiAxOTg6XFx0XFx0aW50IHJldCA9IC1FTVNHU0laRTtcXG4gMTk5OlxcdFxcdHUzMiBob29rbnVtO1xcbiAyMDA6XFx0I2lmZGVmIENPTkZJR19LQUxMU1lNU1xcbiAyMDE6XFx0XFx0Y2hhciBzeW1bS1NZTV9TWU1CT0xfTEVOXTtcXG4gMjAyOlxcdFxcdGNoYXIgKm1vZHVsZV9uYW1lO1xcbiAyMDM6XFx0I2VuZGlmXFxuIDIwNDpcXHRcXHRubGggPSBuZm5sX21zZ19wdXQobmxza2IsIHBvcnRpZCwgc2VxLCBldmVudCxcXG4gMjA1OlxcdFxcdFxcdFxcdCAgIE5MTV9GX01VTFRJLCBmYW1pbHksIE5GTkVUTElOS19WMCwgMCk7XFxuIDIwNjpcXHRcXHRpZiAoIW5saClcXG4gMjA3OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyMDg6XFx0XFxuIDIwOTpcXHQjaWZkZWYgQ09ORklHX0tBTExTWU1TXFxuIDIxMDpcXHRcXHRyZXQgPSBzbnByaW50ZihzeW0sIHNpemVvZihzeW0pLCBcXFwiJXBzXFxcIiwgb3BzLVxcdTAwM2Vob29rKTtcXG4gMjExOlxcdFxcdGlmIChyZXQgXFx1MDAzZT0gc2l6ZW9mKHN5bSkpIHtcXG4gMjEyOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDIxMzpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMjE0OlxcdFxcdH1cXG4gMjE1OlxcdFxcbiAyMTY6XFx0XFx0bW9kdWxlX25hbWUgPSBzdHJzdHIoc3ltLCBcXFwiIFtcXFwiKTtcXG4gMjE3OlxcdFxcdGlmIChtb2R1bGVfbmFtZSkge1xcbiAyMTg6XFx0XFx0XFx0Y2hhciAqZW5kO1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHRcXHQqbW9kdWxlX25hbWUgPSAnXFxcXDAnO1xcbiAyMjE6XFx0XFx0XFx0bW9kdWxlX25hbWUgKz0gMjtcXG4gMjIyOlxcdFxcdFxcdGVuZCA9IHN0cmNocihtb2R1bGVfbmFtZSwgJ10nKTtcXG4gMjIzOlxcdFxcdFxcdGlmIChlbmQpIHtcXG4gMjI0OlxcdFxcdFxcdFxcdCplbmQgPSAwO1xcbiAyMjU6XFx0XFxuIDIyNjpcXHRcXHRcXHRcXHRyZXQgPSBubGFfcHV0X3N0cmluZyhubHNrYiwgTkZOTEFfSE9PS19NT0RVTEVfTkFNRSwgbW9kdWxlX25hbWUpO1xcbiAyMjc6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4gMjI4OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyMjk6XFx0XFx0XFx0fVxcbiAyMzA6XFx0XFx0fVxcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRyZXQgPSBubGFfcHV0X3N0cmluZyhubHNrYiwgTkZOTEFfSE9PS19GVU5DVElPTl9OQU1FLCBzeW0pO1xcbiAyMzM6XFx0XFx0aWYgKHJldClcXG4gMjM0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyMzU6XFx0I2VuZGlmXFxuIDIzNjpcXHRcXG4gMjM3OlxcdFxcdGlmIChvcHMtXFx1MDAzZXBmID09IE5GUFJPVE9fSU5FVCBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZWhvb2tudW0gPT0gTkZfSU5FVF9JTkdSRVNTKVxcbiAyMzg6XFx0XFx0XFx0aG9va251bSA9IE5GX05FVERFVl9JTkdSRVNTO1xcbiAyMzk6XFx0XFx0ZWxzZVxcbiAyNDA6XFx0XFx0XFx0aG9va251bSA9IG9wcy1cXHUwMDNlaG9va251bTtcXG4gMjQxOlxcdFxcbiAyNDI6XFx0XFx0cmV0ID0gbmxhX3B1dF9iZTMyKG5sc2tiLCBORk5MQV9IT09LX0hPT0tOVU0sIGh0b25sKGhvb2tudW0pKTtcXG4gMjQzOlxcdFxcdGlmIChyZXQpXFxuIDI0NDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMjQ1OlxcdFxcbiAyNDY6XFx0XFx0cmV0ID0gbmxhX3B1dF9iZTMyKG5sc2tiLCBORk5MQV9IT09LX1BSSU9SSVRZLCBodG9ubChwcmlvcml0eSkpO1xcbiAyNDc6XFx0XFx0aWYgKHJldClcXG4gMjQ4OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyNDk6XFx0XFxuIDI1MDpcXHRcXHRzd2l0Y2ggKG9wcy1cXHUwMDNlaG9va19vcHNfdHlwZSkge1xcbiAyNTE6XFx0XFx0Y2FzZSBORl9IT09LX09QX05GX1RBQkxFUzpcXG4gMjUyOlxcdFxcdFxcdHJldCA9IG5mbmxfaG9va19wdXRfbmZ0X2NoYWluX2luZm8obmxza2IsIGN0eCwgc2VxLCBvcHMtXFx1MDAzZXByaXYpO1xcbiAyNTM6XFx0XFx0XFx0YnJlYWs7XFxuIDI1NDpcXHRcXHRjYXNlIE5GX0hPT0tfT1BfQlBGOlxcbiAyNTU6XFx0XFx0XFx0cmV0ID0gbmZubF9ob29rX3B1dF9icGZfcHJvZ19pbmZvKG5sc2tiLCBjdHgsIHNlcSwgb3BzLVxcdTAwM2Vwcml2KTtcXG4gMjU2OlxcdFxcdFxcdGJyZWFrO1xcbiAyNTc6XFx0XFx0Y2FzZSBORl9IT09LX09QX05GVF9GVDpcXG4gMjU4OlxcdFxcdFxcdHJldCA9IG5mbmxfaG9va19wdXRfbmZ0X2Z0X2luZm8obmxza2IsIGN0eCwgc2VxLCBvcHMtXFx1MDAzZXByaXYpO1xcbiAyNTk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ4OjE5LjUwMDI2MzU2N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU5MzQ1MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldHMsIHJlbmRlcmVkIGFzIGlmIEkgYW0gZXhhbWluaW5nIHRoZW06XG5cbioqRGlzc2VjdGluZyB0aGUgTmV0bGluayBIb29rIER1bXBzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhlc2UgTmV0bGluayBob29rIGR1bXAgZnVuY3Rpb25zOiBgbmZubF9ob29rX2R1bXBgLCBgbmZubF9ob29rX2R1bXBfbmF0YCwgYW5kIGBuZm5sX2hvb2tfZHVtcF9zdGFydGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoZSBOZXRmaWx0ZXIgaW5mb3JtYXRpb24uIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVyZSBoYXMgdG8gYmUgc29tZSBraW5kIG9mIGZsb3cgY29udHJvbC5cbiogICBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzLlxuKiAgIFdoYXQgbWFrZXMgdGhlc2Ugcm91dGluZXMgZGlmZmVyZW50IGZyb20gZWFjaCBvdGhlcj9cbiogICBBcmUgYG5mbmxfaG9va19kdW1wYCBhbmQgYG5mbmxfaG9va19kdW1wX25hdGAgZGlmZmVyZW50IGluIHRoZWlyIGZ1bmN0aW9uLCBvciBhcmUgdGhleSBkaWZmZXJlbnQgaW4gdGhlaXIgYXBwcm9hY2g/XG4qICAgV2hhdCBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBvZiBgbmZubF9ob29rX2R1bXBfc3RhcnRgPyBJcyBpdCB0aGUgaW5pdGlhbGl6YXRpb24gb3IgdGhlIHRyaWdnZXIgb2YgdGhlIGR1bXAgcHJvY2VzcywgYW5kIGlmIHNvLCBob3cgaXMgaXQgY29vcmRpbmF0ZWQgd2l0aCB0aGUgb3RoZXIgdHdvP1xuKiAgIEhvdyBkbyB0aGVzZSBob29rIGR1bXBzIGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgcGljdHVyZSBvZiBOZXRmaWx0ZXIgb3BlcmF0aW9ucz9cblxuSSBuZWVkIHRvIHNlZSB3aGF0J3MgYmVpbmcgZXh0cmFjdGVkIGFuZCB0cmFuc21pdHRlZCwgaG93IHRoZSBkdW1waW5nIGlzIGluaXRpYXRlZCwgYW5kIHdoYXQgc2FmZWd1YXJkcyBhcmUgaW4gcGxhY2UgdG8gbWFuYWdlIHRoZSBmbG93IG9mIGRhdGEsIGVzcGVjaWFsbHkgZm9yIHBvdGVudGlhbGx5IGxhcmdlIGRhdGFzZXRzLiBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIHRoZSBuYW1lcyBhbmQgYnJlYWsgZG93biB0aGUgY29kZSBsb2dpYyB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24uIE15IGZvY3VzIGhlcmUgaXMgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzIG9mIGhvdyB0aGVzZSBob29rcyBpbnRlcmFjdCB3aXRoIHRoZSBOZXRsaW5rIGluZnJhc3RydWN0dXJlLiBJIGV4cGVjdCB0byBzZWUgc3BlY2lmaWMgZGV0YWlscyBhYm91dCBhdHRyaWJ1dGUgaGFuZGxpbmcsIHNlcXVlbmNlIG51bWJlciBtYW5hZ2VtZW50LCBhbmQgZXJyb3IgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ4OjIyLjE1OTYxMTczWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM1LFxuICBcIkxpbmVDb3VudFwiOiAxMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzNTpcXHRcXG4gMzM2OlxcdFxcdHJldHVybiBob29rX2hlYWQ7XFxuIDMzNzpcXHR9XFxuIDMzODpcXHRcXG4gMzM5OlxcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcXG4gMzQwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4gMzQxOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLCBpbnQgZmFtaWx5KVxcbiAzNDI6XFx0e1xcbiAzNDM6XFx0XFx0c3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2ID0gb3BzLVxcdTAwM2Vwcml2O1xcbiAzNDQ6XFx0XFx0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLVxcdTAwM2VkYXRhO1xcbiAzNDU6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXFx1MDAzZXNrKTtcXG4gMzQ2OlxcdFxcdHN0cnVjdCBuZl9ob29rX29wcyAqKm5hdF9vcHM7XFxuIDM0NzpcXHRcXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVxcdTAwM2VhcmdzWzFdO1xcbiAzNDg6XFx0XFx0c3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcXG4gMzQ5OlxcdFxcdHVuc2lnbmVkIGludCBiYXNlX3NlcTtcXG4gMzUwOlxcdFxcdGludCBlcnIgPSAwO1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHRiYXNlX3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNm5ldC1cXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRlID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXFx1MDAzZWVudHJpZXMpO1xcbiAzNTU6XFx0XFx0aWYgKCFlKVxcbiAzNTY6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDM1NzpcXHRcXG4gMzU4OlxcdFxcdG5hdF9vcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xcbiAzNjE6XFx0XFx0XFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsXFxuIDM2MjpcXHRcXHRcXHRcXHRcXHRcXHQgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLFxcbiAzNjM6XFx0XFx0XFx0XFx0XFx0XFx0IG9wcy1cXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcXG4gMzY0OlxcdFxcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcbiAzNjU6XFx0XFx0XFx0aWYgKGVycilcXG4gMzY2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHR9XFxuIDM2OTpcXHRvdXQ6XFxuIDM3MDpcXHRcXHRpZiAoIWVycikge1xcbiAzNzE6XFx0XFx0XFx0aSA9IDA7XFxuIDM3MjpcXHRcXHR9XFxuIDM3MzpcXHRcXHRjYi1cXHUwMDNlYXJnc1sxXSA9IGk7XFxuIDM3NDpcXHRcXG4gMzc1OlxcdFxcdGlmIChjYi1cXHUwMDNlYXJnc1syXSBcXHUwMDI2XFx1MDAyNiBiYXNlX3NlcSAhPSBjYi1cXHUwMDNlYXJnc1syXSkge1xcbiAzNzY6XFx0XFx0XFx0Y2ItXFx1MDAzZXNlcSsrO1xcbiAzNzc6XFx0XFx0XFx0ZXJyID0gLUVJTlRSO1xcbiAzNzg6XFx0XFx0fVxcbiAzNzk6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMl0gPSBiYXNlX3NlcTtcXG4gMzgwOlxcdFxcbiAzODE6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzgyOlxcdH1cXG4gMzgzOlxcdFxcbiAzODQ6XFx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuIDM4NTpcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gMzg2OlxcdHtcXG4gMzg3OlxcdFxcdHN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBubG1zZ19kYXRhKGNiLVxcdTAwM2VubGgpO1xcbiAzODg6XFx0XFx0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLVxcdTAwM2VkYXRhO1xcbiAzODk6XFx0XFx0aW50IGVyciwgZmFtaWx5ID0gbmZtc2ctXFx1MDAzZW5mZ2VuX2ZhbWlseTtcXG4gMzkwOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KG5sc2tiLVxcdTAwM2Vzayk7XFxuIDM5MTpcXHRcXHRzdHJ1Y3QgbmZfaG9va19vcHMgKiBjb25zdCAqb3BzO1xcbiAzOTI6XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcXG4gMzkzOlxcdFxcdHVuc2lnbmVkIGludCBpID0gY2ItXFx1MDAzZWFyZ3NbMF07XFxuIDM5NDpcXHRcXG4gMzk1OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzk2OlxcdFxcdGNiLVxcdTAwM2VzZXEgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZuZXQtXFx1MDAzZW5mLmhvb2tfYmFzZV9zZXEpO1xcbiAzOTc6XFx0XFxuIDM5ODpcXHRcXHRlID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGN0eC1cXHUwMDNlaG9vaywgbmV0LCBjdHgtXFx1MDAzZWRldm5hbWUpO1xcbiAzOTk6XFx0XFx0aWYgKCFlIHx8IElTX0VSUihlKSlcXG4gNDAwOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0b3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBlLVxcdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcXG4gNDA1OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqY3VyID0gUkVBRF9PTkNFKG9wc1tpXSk7XFxuIDQwNjpcXHRcXG4gNDA3OlxcdFxcdFxcdGlmIChjdXItXFx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXFxuIDQwODpcXHRcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGNiLCBjdXIsIGZhbWlseSk7XFxuIDQwOTpcXHRcXHRcXHRlbHNlIHtcXG4gNDEwOlxcdFxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsXFxuIDQxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY3VyLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcbiA0MTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSk7XFxuIDQxMzpcXHRcXHRcXHR9XFxuIDQxNDpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0MTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQxNjpcXHRcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdGRvbmU6XFxuIDQxOTpcXHRcXHRpZiAobmxza2ItXFx1MDAzZWxlbiBcXHUwMDNlIDApXFxuIDQyMDpcXHRcXHRcXHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xcbiA0MjE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDQyMjpcXHRcXHRjYi1cXHUwMDNlYXJnc1swXSA9IGk7XFxuIDQyMzpcXHRcXHRyZXR1cm4gbmxza2ItXFx1MDAzZWxlbjtcXG4gNDI0OlxcdH1cXG4gNDI1OlxcdFxcbiA0MjY6XFx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIDQyNzpcXHR7XFxuIDQyODpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShjYi1cXHUwMDNlbmxoKTtcXG4gNDI5OlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqbmxhID0gY2ItXFx1MDAzZWRhdGE7XFxuIDQzMDpcXHRcXHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gTlVMTDtcXG4gNDMxOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGNiLVxcdTAwM2Vza2ItXFx1MDAzZXNrKTtcXG4gNDMyOlxcdFxcdHU4IGZhbWlseSA9IG5mbXNnLVxcdTAwM2VuZmdlbl9mYW1pbHk7XFxuIDQzMzpcXHRcXHRjaGFyIG5hbWVbSUZOQU1TSVpdID0gXFxcIlxcXCI7XFxuIDQzNDpcXHRcXHRjb25zdCB2b2lkICpoZWFkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0ODoyMi4xNTk3MTU2M1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NjQ3NTQ0NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFwcGxpY2FiaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHdhcyBlbnN1cmluZyB0aGUgbmV0bGluayBkdW1wIChgbmZubF9ob29rX2R1bXBgIGFuZCBgbmZubF9ob29rX2R1bXBfbmF0YCkgbWFpbnRhaW5lZCBjb25zaXN0ZW5jeSByZWdhcmRpbmcgbmV0ZmlsdGVyIGFuZCBOQVQgaG9vayBjaGFuZ2VzIGR1cmluZyB0aGUgZHVtcCBwcm9jZXNzLiBUaGUgZml4IGludHJvZHVjZXMgc2VxdWVuY2UgY291bnRlcnMsIGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgdG8gdHJhY2sgdGhlc2UgY2hhbmdlcy4gVGhlc2UgY291bnRlcnMgYXJlIGluaXRpYWxpemVkIGluIGBuZXRmaWx0ZXJfbmV0X2luaXRgIGFuZCBpbmNyZW1lbnRlZCBkdXJpbmcgaG9vayByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24uIEluIHRoZSBkdW1wIGZ1bmN0aW9ucywgYGNiLVx1MDAzZXNlcWAgYW5kIGBiYXNlX3NlcWAgYXJlIHVwZGF0ZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY291bnRlciB2YWx1ZXMuXG5cbk5vdywgbGV0J3Mgc2NydXRpbml6ZSB0aGlzIGZvciBwb3RlbnRpYWwgS01TQU4gY29uY2VybnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5GaXJzdCwgSSBleGFtaW5lZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIFRoZSBzZXF1ZW5jZSBjb3VudGVycyB0aGVtc2VsdmVzLCBpbiBgc3RydWN0IG5ldG5zX25mYCwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMSBkdXJpbmcgYG5ldGZpbHRlcl9uZXRfaW5pdGAuIFdoaWxlIGBuZXRgIGdldHMgYGt6YWxsb2NgJ2VkIGFueXdheSwgdGhpcyBpcyBnb29kLiBUaGUgYGNiLVx1MDAzZWFyZ3NgIGFycmF5IChwYXNzZWQgaW4gdGhlIG5ldGxpbmsgY2FsbGJhY2spIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIG5ldGxpbmsgY29yZSBhdCB0aGUgZHVtcCdzIHN0YXJ0LCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGBjYi1cdTAwM2VhcmdzWzFdYCAoaW5kZXgpIG9yIGBjYi1cdTAwM2VhcmdzWzJdYCAoYmFzZV9zZXEpIGJlaW5nIHVuaW5pdGlhbGl6ZWQuIFRoZSBhbGxvY2F0aW9uIGluIGBuZm5sX2hvb2tfZHVtcF9zdGFydGAgdmlhIGBremFsbG9jYCBhbHNvIGxvb2tzIGNsZWFuLCBhbmQgdGhlIGBlcnIgPSAwYCBhc3NpZ25tZW50IGluIGBuZm5sX2hvb2tfZHVtcF9uYXRgIGlzLCBvZiBjb3Vyc2UsIHByb3Blci4gRmluYWxseSwgdGhlIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gdXNlcyBgbmZubF9tc2dfcHV0YCwgYG5sYV9wdXRfYmUzMmAsIGFuZCB0aGUgbGlrZSDigJMgdGhlc2UgYXJlIHdlbGwtYmVoYXZlZCBhbmQgaGFuZGxlIGF0dHJpYnV0ZSBpbml0aWFsaXphdGlvbiBjb3JyZWN0bHkuXG5cbkNydWNpYWxseSwgSSBlbnN1cmVkIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXZlciBsZWFrZWQgdG8gdXNlcnNwYWNlIG9yIHJlYWQgYnkgdGhlIHBhdGNoZWQgY29kZS4gVGhlIGZvY3VzIGlzIG9uIHNlcXVlbmNlIGNvdW50ZXIgbWFuYWdlbWVudCBhbmQgaW5kZXggaGFuZGxpbmcgY2xlYW51cHMsIGFuZCB0aGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IGluZm8gbGVha3MuXG5cbk1lbW9yeSBzYWZldHkgaXMgYW5vdGhlciBjb25zaWRlcmF0aW9uLiBHaXZlbiB0aGUgbmF0dXJlIG9mIG5ldGZpbHRlciBhbmQgbmV0bGluaywgSSBsb29rZWQgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzLiBUaGUgY29kZSBpcyBwcm90ZWN0ZWQgd2l0aCBSQ1UgYW5kIGBzbXBfbG9hZF9hY3F1aXJlYC9gc21wX3N0b3JlX3JlbGVhc2VgLCBvciBsb2NrZGVwL0tBU0FOIGlmIHJhY2VzIGV4aXN0LiBUaGUgcGF0Y2ggZG9lc24ndCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucywgbm9yIGRvZXMgaXQgdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBidWZmZXJzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBhc3Nlc3MgS01TQU4gYXBwbGljYWJpbGl0eS4gSSBtZXRob2RpY2FsbHkgY2hlY2tlZCBhZ2FpbnN0IEtNU0FOJ3MgY3JpdGVyaWE6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIG5vIG1vZGlmaWVkIHN0cnVjdHVyZXMgYXJlIGFmZmVjdGVkLiBUaGUgbmV0bGluayBtZXNzYWdlcyB1c2Ugc3RhbmRhcmQgYG5sYV9wdXRfKmAgZnVuY3Rpb25zLCB3aGljaCBtZWFucyBvbmx5IGZ1bGx5IGluaXRpYWxpemVkIGFuZCB0eXBlZCBkYXRhIGlzIGNvcGllZC5cblxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIEkgY29uZmlybWVkIHRoYXQgYGNiLVx1MDAzZWFyZ3NbMV1gIGFuZCBgY2ItXHUwMDNlYXJnc1syXWAgYXJlIGluaXRpYWxpemVkIHRvIDAsIHdoaWNoIGlzIHdoYXQgdGhlIG5ldGxpbmsgY29yZSBkb2VzLiBgYmFzZV9zZXFgIGlzIGxvYWRlZCBmcm9tIHRoZSBpbml0aWFsaXplZCBgbmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxYC5cblxuMy4gICoqQWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzOioqIFRoZXJlIGFyZSBubyBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFRoZSBzZXF1ZW5jZSBjb3VudGVycyBpbiBgc3RydWN0IG5ldG5zX25mYCBhcmUgaW5pdGlhbGl6ZWQgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdGAuXG5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzOioqIFRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IGlzc3VlcyBpbiB0aGlzIHJlZ2FyZC5cblxuVGhlcmVmb3JlLCBjb25zaWRlcmluZyBhbGwgdGhlc2UgZmFjdG9ycywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU3NCwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0ODozMC44MDcyNjIzNzdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNlcXVlbmNlIHRyYWNraW5nIChgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWApIHRvIG5ldGZpbHRlciBhbmQgTkFUIGhvb2sgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIHRvIHByb3ZpZGUgZHVtcCBjb25zaXN0ZW5jeSBkZXRlY3Rpb24gaW4gYG5mbmV0bGlua19ob29rLmNgLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmUgYnVmZmVyIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkLiBOZXRsaW5rIGNhbGxiYWNrcyBgY2ItXFx1MDAzZWFyZ3NgIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIHN1YnN5c3RlbSwgYW5kIGBzdHJ1Y3QgbmV0bnNfbmZgIHNlcXVlbmNlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgbmV0ZmlsdGVyX25ldF9pbml0KClgLlxcbi0gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGRlcmVmZXJlbmNpbmcsIGxpc3QgdHJhdmVyc2FsIGJvdW5kcywgb3IgaG9vayBlbnRyeSBsaWZlY3ljbGVzLCB3aGljaCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgKSB0byBuZXRmaWx0ZXIgYW5kIE5BVCBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiB0byBwcm92aWRlIGR1bXAgY29uc2lzdGVuY3kgZGV0ZWN0aW9uIGluIGBuZm5ldGxpbmtfaG9vay5jYC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgc3RydWN0dXJlIGJ1ZmZlciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZC4gTmV0bGluayBjYWxsYmFja3MgYGNiLVxcdTAwM2VhcmdzYCBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0sIGFuZCBgc3RydWN0IG5ldG5zX25mYCBzZXF1ZW5jZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdCgpYC5cXG4tIEtBU0FOIC8gTG9ja2RlcCBhcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBwYXRjaCByZWxhdGUgdG8gY29uY3VycmVuY3ksIFJDVSBkZXJlZmVyZW5jaW5nLCBsaXN0IHRyYXZlcnNhbCBib3VuZHMsIG9yIGhvb2sgZW50cnkgbGlmZWN5Y2xlcywgd2hpY2ggZmFsbCBzcXVhcmVseSBpbnRvIHRoZSBkb21haW4gb2YgS0FTQU4sIEtDU0FOLCBhbmQgTG9ja2RlcC5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow9xh9q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 22:00:35 +0000 UTC FinishedAt: 2026-09-04 22:48:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_NETLINK", "NETFILTER_NETLINK_HOOK", "NF_TABLES", "NF_CONNTRACK", "NF_NAT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NETFILTER_NETLINK", "NETFILTER_NETLINK_HOOK", "NF_TABLES", "NF_CONNTRACK", "NF_NAT" ], "series_id": "66fb7276-aac5-4d9c-92e3-457c05c3cdcb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfnl_hook_dump", "nfnl_hook_dump_nat", "nfnl_hook_dump_start", "nfnl_hook_get", "nf_nat_register_fn", "nf_nat_unregister_fn", "nf_register_net_hook", "nf_unregister_net_hook" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19IT09LJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZubF9ob29rX2R1bXAmIzM0OywKICAgICYjMzQ7bmZubF9ob29rX2R1bXBfbmF0JiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O25mbmxfaG9va19nZXQmIzM0OywKICAgICYjMzQ7bmZfbmF0X3JlZ2lzdGVyX2ZuJiMzNDssCiAgICAmIzM0O25mX25hdF91bnJlZ2lzdGVyX2ZuJiMzNDssCiAgICAmIzM0O25mX3JlZ2lzdGVyX25ldF9ob29rJiMzNDssCiAgICAmIzM0O25mX3VucmVnaXN0ZXJfbmV0X2hvb2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgKSB0byBuZXRmaWx0ZXIgYW5kIE5BVCBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiB0byBwcm92aWRlIGR1bXAgY29uc2lzdGVuY3kgZGV0ZWN0aW9uIGluIGBuZm5ldGxpbmtfaG9vay5jYC5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIHN0cnVjdHVyZSBidWZmZXIgbGVuZ3RocyBpbiBhIHdheSB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIE5ldGxpbmsgY2FsbGJhY2tzIGBjYi1cdTAwM2VhcmdzYCBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0sIGFuZCBgc3RydWN0IG5ldG5zX25mYCBzZXF1ZW5jZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdCgpYC5cbi0gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGRlcmVmZXJlbmNpbmcsIGxpc3QgdHJhdmVyc2FsIGJvdW5kcywgb3IgaG9vayBlbnRyeSBsaWZlY3ljbGVzLCB3aGljaCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNlcXVlbmNlIHRyYWNraW5nIChob29rX2Jhc2Vfc2VxIGFuZCBuYXRfaG9va19iYXNlX3NlcSkgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBkdXJpbmcgbmV0bGluayBkdW1wIG9mIG5ldGZpbHRlciBhbmQgTkFUIGhvb2tzLCByZWZhY3RvcmluZyB0aGUgZHVtcCBpdGVyYXRpb24gYW5kIHJlc3RhcnQvY29uc2lzdGVuY3kgdmVyaWZpY2F0aW9uIGluIG5mbmV0bGlua19ob29rLmMsIGFuZCBidW1waW5nIHRoZSBzZXF1ZW5jZSBudW1iZXJzIHVwb24gaG9vayByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gaW4gY29yZS5jIGFuZCBuZl9uYXRfY29yZS5jLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIGFuZCBuZXRmaWx0ZXIgaG9vayBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgbmV0bGluayBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzA5ZDU4NzhlOGRjZDQ4ZjFhMGEzOWI2M2Q2MWU5YzZiOWVjYmEzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMjI6NDc6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxuaW5kZXggYTZhMGJmNGEyNDdlNS4uN2ZkNzgzOTRkMWU3YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxuQEAgLTMzLDUgJiM0MzszMyw3IEBAIHN0cnVjdCBuZXRuc19uZiB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RFRlJBR19JUFY2KVxuIFx0dW5zaWduZWQgaW50IGRlZnJhZ19pcHY2X3VzZXJzO1xuICNlbmRpZlxuJiM0MztcdHVuc2lnbmVkIGludCBob29rX2Jhc2Vfc2VxO1xuJiM0MztcdHVuc2lnbmVkIGludCBuYXRfaG9va19iYXNlX3NlcTtcbiB9O1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvY29yZS5jIGIvbmV0L25ldGZpbHRlci9jb3JlLmNcbmluZGV4IDY3NWExMDM0YjM0MDAuLmEyODRiMzI0MTIxMWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9jb3JlLmNcbkBAIC0zODYsNiAmIzQzOzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuZl9zdGF0aWNfa2V5X2RlYyhjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgaW50IHBmKVxuICNlbmRpZlxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgmIzQzOyYjNDM7YmFzZV9zZXEgPT0gMClcbiYjNDM7XHRcdDtcbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpXG4ge1xuQEAgLTQyOCw2ICYjNDM7NDM3LDcgQEAgc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0bmV3X2hvb2tzID0gbmZfaG9va19lbnRyaWVzX2dyb3cocCwgcmVnKTtcbiBcbiBcdGlmICghSVNfRVJSKG5ld19ob29rcykpIHtcbiYjNDM7XHRcdGJ1bXBfaG9va19iYXNlX3NlcShuZXQpO1xuIFx0XHRob29rc192YWxpZGF0ZShuZXdfaG9va3MpO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKnBwLCBuZXdfaG9va3MpO1xuIFx0fVxuQEAgLTUwNiw2ICYjNDM7NTE2LDcgQEAgc3RhdGljIHZvaWQgX19uZl91bnJlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0XHRcdG5ldF9kZWNfZWdyZXNzX3F1ZXVlKCk7XG4gI2VuZGlmXG4gXHRcdG5mX3N0YXRpY19rZXlfZGVjKHJlZywgcGYpO1xuJiM0MztcdFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7aG9vayBub3QgZm91bmQsIHBmICVkIG51bSAlZFwmIzM0OywgcGYsIHJlZy1cdTAwM2Vob29rbnVtKTtcbiBcdH1cbkBAIC03ODQsNiAmIzQzOzc5NSw4IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZXRmaWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiAjZW5kaWZcbiYjNDM7XHRuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSA9IDE7XG4mIzQzO1x0bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxID0gMTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbmluZGV4IDhhYzMyNmUxZWI1YmEuLmZmMmNiYThkZjg4NjEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuQEAgLTExNjAsNiAmIzQzOzExNjAsMTUgQEAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gfVxuICNlbmRpZlxuIFxuJiM0MztzdGF0aWMgdm9pZCBidW1wX25hdF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoJiM0MzsmIzQzO2Jhc2Vfc2VxID09IDApXG4mIzQzO1x0XHQ7XG4mIzQzO1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBuZl9jdF9oZWxwZXJfZXhwZWN0Zm4gZm9sbG93X21hc3Rlcl9uYXQgPSB7XG4gXHQubmFtZVx0XHQ9IFwmIzM0O25hdC1mb2xsb3ctbWFzdGVyXCYjMzQ7LFxuIFx0LmV4cGVjdGZuXHQ9IG5mX25hdF9mb2xsb3dfbWFzdGVyLFxuQEAgLTEyNDUsOCAmIzQzOzEyNTQsMTAgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbiBcdH1cbiBcbiBcdHJldCA9IG5mX2hvb2tfZW50cmllc19pbnNlcnRfcmF3KFx1MDAyNnByaXYtXHUwMDNlZW50cmllcywgb3BzKTtcbi1cdGlmIChyZXQgPT0gMClcbiYjNDM7XHRpZiAocmV0ID09IDApIHtcbiYjNDM7XHRcdGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTtcbiBcdFx0bmF0X3Byb3RvX25ldC1cdTAwM2V1c2VycyYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTEyODQsNiAmIzQzOzEyOTUsNyBAQCB2b2lkIG5mX25hdF91bnJlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcdHByaXYgPSBuYXRfb3BzW2hvb2tudW1dLnByaXY7XG4gXHRuZl9ob29rX2VudHJpZXNfZGVsZXRlX3JhdyhcdTAwMjZwcml2LVx1MDAzZWVudHJpZXMsIG9wcyk7XG4mIzQzO1x0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xuIFxuIFx0aWYgKG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMgPT0gMCkge1xuIFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG5pbmRleCA5NTAwNWU5YTYwNjY4Li4yMWE3NTkxNjhjMzg0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbkBAIC01NCw3ICYjNDM7NTQsNiBAQCBzdGF0aWMgaW50IG5mX25ldGxpbmtfZHVtcF9zdGFydF9yY3Uoc3RydWN0IHNvY2sgKm5sc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEge1xuIFx0Y2hhciBkZXZuYW1lW0lGTkFNU0laXTtcbi1cdHVuc2lnbmVkIGxvbmcgaGVhZHY7XG4gXHR1OCBob29rO1xuIH07XG4gXG5AQCAtMzM4LDI3ICYjNDM7MzM3LDQ4IEBAIG5mbmxfaG9va19lbnRyaWVzX2hlYWQodTggcGYsIHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKmRlXG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcbi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxuLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuLVx0XHRcdCAgICAgIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBzZXEpXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiYjNDM7XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsIGludCBmYW1pbHkpXG4ge1xuIFx0c3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2ID0gb3BzLVx1MDAzZXByaXY7XG4tXHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXHUwMDNlZW50cmllcyk7XG4mIzQzO1x0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLVx1MDAzZWRhdGE7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wcztcbi1cdGludCBpLCBlcnI7XG4mIzQzO1x0dW5zaWduZWQgaW50IGkgPSBjYi1cdTAwM2VhcmdzWzFdO1xuJiM0MztcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmU7XG4mIzQzO1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxO1xuJiM0MztcdGludCBlcnIgPSAwO1xuIFxuJiM0MztcdGJhc2Vfc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xuJiM0MztcbiYjNDM7XHRlID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXHUwMDNlZW50cmllcyk7XG4gXHRpZiAoIWUpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4gXHRuYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG5hdF9vcHNbaV0sXG4tXHRcdFx0XHRcdCBvcHMtXHUwMDNlcHJpb3JpdHksIGZhbWlseSwgc2VxKTtcbiYjNDM7XHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsXG4mIzQzO1x0XHRcdFx0XHQgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLFxuJiM0MztcdFx0XHRcdFx0IG9wcy1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxuJiM0MztcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdH1cbi1cdHJldHVybiAwO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKCFlcnIpIHtcbiYjNDM7XHRcdGkgPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRjYi1cdTAwM2VhcmdzWzFdID0gaTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNiLVx1MDAzZWFyZ3NbMl0gXHUwMDI2XHUwMDI2IGJhc2Vfc2VxICE9IGNiLVx1MDAzZWFyZ3NbMl0pIHtcbiYjNDM7XHRcdGNiLVx1MDAzZXNlcSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVFI7XG4mIzQzO1x0fVxuJiM0MztcdGNiLVx1MDAzZWFyZ3NbMl0gPSBiYXNlX3NlcTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG5AQCAtMzczLDM1ICYjNDM7MzkzLDMxIEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIFx0dW5zaWduZWQgaW50IGkgPSBjYi1cdTAwM2VhcmdzWzBdO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGNiLVx1MDAzZXNlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXEpO1xuIFxuIFx0ZSA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBjdHgtXHUwMDNlaG9vaywgbmV0LCBjdHgtXHUwMDNlZGV2bmFtZSk7XG4tXHRpZiAoIWUpXG4mIzQzO1x0aWYgKCFlIHx8IElTX0VSUihlKSlcbiBcdFx0Z290byBkb25lO1xuIFxuLVx0aWYgKElTX0VSUihlKSkge1xuLVx0XHRjYi1cdTAwM2VzZXEmIzQzOyYjNDM7O1xuLVx0XHRnb3RvIGRvbmU7XG4tXHR9XG4tXG4tXHRpZiAoKHVuc2lnbmVkIGxvbmcpZSAhPSBjdHgtXHUwMDNlaGVhZHYgfHwgaSBcdTAwM2U9IGUtXHUwMDNlbnVtX2hvb2tfZW50cmllcylcbi1cdFx0Y2ItXHUwMDNlc2VxJiM0MzsmIzQzOztcbi1cbiBcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4gXG4gXHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAob3BzW2ldLVx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXG4tXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjdHgsIG9wc1tpXSwgZmFtaWx5LFxuLVx0XHRcdFx0XHRcdCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sXG4tXHRcdFx0XHRcdFx0IG9wc1tpXS1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxuJiM0MztcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY3VyLVx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXG4mIzQzO1x0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcbiYjNDM7XHRcdGVsc2Uge1xuJiM0MztcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxuJiM0MztcdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4gXHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuJiM0MztcdFx0fVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIGRvbmU6XG4tXHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xuJiM0MztcdGlmIChubHNrYi1cdTAwM2VsZW4gXHUwMDNlIDApXG4mIzQzO1x0XHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRjYi1cdTAwM2VhcmdzWzBdID0gaTtcbiBcdHJldHVybiBubHNrYi1cdTAwM2VsZW47XG5AQCAtNDQyLDEwICYjNDM7NDU4LDcgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0c3Ryc2NweShjdHgtXHUwMDNlZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC1cdTAwM2VkZXZuYW1lKSk7XG4tXHRjdHgtXHUwMDNlaGVhZHYgPSAodW5zaWduZWQgbG9uZyloZWFkO1xuIFx0Y3R4LVx1MDAzZWhvb2sgPSBob29rbnVtO1xuLVxuLVx0Y2ItXHUwMDNlc2VxID0gMTtcbiBcdGNiLVx1MDAzZWRhdGEgPSBjdHg7XG4gXG4gXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTksmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfSE9PSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX05BVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mbmxfaG9va19kdW1wJiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX25hdCYjMzQ7LAogICAgJiMzNDtuZm5sX2hvb2tfZHVtcF9zdGFydCYjMzQ7LAogICAgJiMzNDtuZm5sX2hvb2tfZ2V0JiMzNDssCiAgICAmIzM0O25mX25hdF9yZWdpc3Rlcl9mbiYjMzQ7LAogICAgJiMzNDtuZl9uYXRfdW5yZWdpc3Rlcl9mbiYjMzQ7LAogICAgJiMzNDtuZl9yZWdpc3Rlcl9uZXRfaG9vayYjMzQ7LAogICAgJiMzNDtuZl91bnJlZ2lzdGVyX25ldF9ob29rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNlcXVlbmNlIHRyYWNraW5nIChob29rX2Jhc2Vfc2VxIGFuZCBuYXRfaG9va19iYXNlX3NlcSkgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBkdXJpbmcgbmV0bGluayBkdW1wIG9mIG5ldGZpbHRlciBhbmQgTkFUIGhvb2tzLCByZWZhY3RvcmluZyB0aGUgZHVtcCBpdGVyYXRpb24gYW5kIHJlc3RhcnQvY29uc2lzdGVuY3kgdmVyaWZpY2F0aW9uIGluIG5mbmV0bGlua19ob29rLmMsIGFuZCBidW1waW5nIHRoZSBzZXF1ZW5jZSBudW1iZXJzIHVwb24gaG9vayByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gaW4gY29yZS5jIGFuZCBuZl9uYXRfY29yZS5jLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXRsaW5rIGFuZCBuZXRmaWx0ZXIgaG9vayBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgbmV0bGluayBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzA5ZDU4NzhlOGRjZDQ4ZjFhMGEzOWI2M2Q2MWU5YzZiOWVjYmEzMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMjI6NDc6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oCmluZGV4IGE2YTBiZjRhMjQ3ZTUuLjdmZDc4Mzk0ZDFlN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oCkBAIC0zMyw1ICYjNDM7MzMsNyBAQCBzdHJ1Y3QgbmV0bnNfbmYgewogI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RFRlJBR19JUFY2KQogCXVuc2lnbmVkIGludCBkZWZyYWdfaXB2Nl91c2VyczsKICNlbmRpZgomIzQzOwl1bnNpZ25lZCBpbnQgaG9va19iYXNlX3NlcTsKJiM0MzsJdW5zaWduZWQgaW50IG5hdF9ob29rX2Jhc2Vfc2VxOwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwppbmRleCA2NzVhMTAzNGIzNDAwLi5hMjg0YjMyNDEyMTFkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2NvcmUuYwpAQCAtMzg2LDYgJiM0MzszODYsMTUgQEAgc3RhdGljIHZvaWQgbmZfc3RhdGljX2tleV9kZWMoY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsIGludCBwZikKICNlbmRpZgogfQogCiYjNDM7c3RhdGljIHZvaWQgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEpOwomIzQzOwomIzQzOwl3aGlsZSAoJiM0MzsmIzQzO2Jhc2Vfc2VxID09IDApCiYjNDM7CQk7CiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7bmV0LSZndDtuZi5ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLAogCQkJCSAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpCiB7CkBAIC00MjgsNiAmIzQzOzQzNyw3IEBAIHN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZiwKIAluZXdfaG9va3MgPSBuZl9ob29rX2VudHJpZXNfZ3JvdyhwLCByZWcpOwogCiAJaWYgKCFJU19FUlIobmV3X2hvb2tzKSkgewomIzQzOwkJYnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7CiAJCWhvb2tzX3ZhbGlkYXRlKG5ld19ob29rcyk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcigqcHAsIG5ld19ob29rcyk7CiAJfQpAQCAtNTA2LDYgJiM0Mzs1MTYsNyBAQCBzdGF0aWMgdm9pZCBfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsCiAJCQluZXRfZGVjX2VncmVzc19xdWV1ZSgpOwogI2VuZGlmCiAJCW5mX3N0YXRpY19rZXlfZGVjKHJlZywgcGYpOwomIzQzOwkJYnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7CiAJfSBlbHNlIHsKIAkJV0FSTl9PTkNFKDEsICYjMzQ7aG9vayBub3QgZm91bmQsIHBmICVkIG51bSAlZCYjMzQ7LCBwZiwgcmVnLSZndDtob29rbnVtKTsKIAl9CkBAIC03ODQsNiAmIzQzOzc5NSw4IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZXRmaWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAjZW5kaWYKJiM0MzsJbmV0LSZndDtuZi5ob29rX2Jhc2Vfc2VxID0gMTsKJiM0MzsJbmV0LSZndDtuZi5uYXRfaG9va19iYXNlX3NlcSA9IDE7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwppbmRleCA4YWMzMjZlMWViNWJhLi5mZjJjYmE4ZGY4ODYxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCkBAIC0xMTYwLDYgJiM0MzsxMTYwLDE1IEBAIG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXAoc3RydWN0IG5mX2Nvbm4gKmN0LAogfQogI2VuZGlmCiAKJiM0MztzdGF0aWMgdm9pZCBidW1wX25hdF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtJmd0O25mLm5hdF9ob29rX2Jhc2Vfc2VxKTsKJiM0MzsKJiM0MzsJd2hpbGUgKCYjNDM7JiM0MztiYXNlX3NlcSA9PSAwKQomIzQzOwkJOwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO25ldC0mZ3Q7bmYubmF0X2hvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBmb2xsb3dfbWFzdGVyX25hdCA9IHsKIAkubmFtZQkJPSAmIzM0O25hdC1mb2xsb3ctbWFzdGVyJiMzNDssCiAJLmV4cGVjdGZuCT0gbmZfbmF0X2ZvbGxvd19tYXN0ZXIsCkBAIC0xMjQ1LDggJiM0MzsxMjU0LDEwIEBAIGludCBuZl9uYXRfcmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsCiAJfQogCiAJcmV0ID0gbmZfaG9va19lbnRyaWVzX2luc2VydF9yYXcoJmFtcDtwcml2LSZndDtlbnRyaWVzLCBvcHMpOwotCWlmIChyZXQgPT0gMCkKJiM0MzsJaWYgKHJldCA9PSAwKSB7CiYjNDM7CQlidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7CiAJCW5hdF9wcm90b19uZXQtJmd0O3VzZXJzJiM0MzsmIzQzOzsKJiM0MzsJfQogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7bmZfbmF0X3Byb3RvX211dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtMTI4NCw2ICYjNDM7MTI5NSw3IEBAIHZvaWQgbmZfbmF0X3VucmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsCiAJCWdvdG8gdW5sb2NrOwogCXByaXYgPSBuYXRfb3BzW2hvb2tudW1dLnByaXY7CiAJbmZfaG9va19lbnRyaWVzX2RlbGV0ZV9yYXcoJmFtcDtwcml2LSZndDtlbnRyaWVzLCBvcHMpOwomIzQzOwlidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7CiAKIAlpZiAobmF0X3Byb3RvX25ldC0mZ3Q7dXNlcnMgPT0gMCkgewogCQluZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMKaW5kZXggOTUwMDVlOWE2MDY2OC4uMjFhNzU5MTY4YzM4NCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYwpAQCAtNTQsNyAmIzQzOzU0LDYgQEAgc3RhdGljIGludCBuZl9uZXRsaW5rX2R1bXBfc3RhcnRfcmN1KHN0cnVjdCBzb2NrICpubHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSB7CiAJY2hhciBkZXZuYW1lW0lGTkFNU0laXTsKLQl1bnNpZ25lZCBsb25nIGhlYWR2OwogCXU4IGhvb2s7CiB9OwogCkBAIC0zMzgsMjcgJiM0MzszMzcsNDggQEAgbmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGUKIH0KIAogc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9uYXQoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLAotCQkJICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLAotCQkJICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSkKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsIGludCBmYW1pbHkpCiB7CiAJc3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2ID0gb3BzLSZndDtwcml2OwotCXN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi0mZ3Q7ZW50cmllcyk7CiYjNDM7CXN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBjYi0mZ3Q7ZGF0YTsKJiM0MzsJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItJmd0O3NrKTsKIAlzdHJ1Y3QgbmZfaG9va19vcHMgKipuYXRfb3BzOwotCWludCBpLCBlcnI7CiYjNDM7CXVuc2lnbmVkIGludCBpID0gY2ItJmd0O2FyZ3NbMV07CiYjNDM7CXN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmU7CiYjNDM7CXVuc2lnbmVkIGludCBiYXNlX3NlcTsKJiM0MzsJaW50IGVyciA9IDA7CiAKJiM0MzsJYmFzZV9zZXEgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7bmV0LSZndDtuZi5uYXRfaG9va19iYXNlX3NlcSk7CiYjNDM7CiYjNDM7CWUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi0mZ3Q7ZW50cmllcyk7CiAJaWYgKCFlKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gb3V0OwogCiAJbmF0X29wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZS0mZ3Q7bnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHsKLQkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG5hdF9vcHNbaV0sCi0JCQkJCSBvcHMtJmd0O3ByaW9yaXR5LCBmYW1pbHksIHNlcSk7CiYjNDM7CWZvciAoOyBpICZsdDsgZS0mZ3Q7bnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LAomIzQzOwkJCQkJIFJFQURfT05DRShuYXRfb3BzW2ldKSwKJiM0MzsJCQkJCSBvcHMtJmd0O3ByaW9yaXR5LCBmYW1pbHksCiYjNDM7CQkJCQkgY2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxKTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJfQotCXJldHVybiAwOwomIzQzO291dDoKJiM0MzsJaWYgKCFlcnIpIHsKJiM0MzsJCWkgPSAwOwomIzQzOwl9CiYjNDM7CWNiLSZndDthcmdzWzFdID0gaTsKJiM0MzsKJiM0MzsJaWYgKGNiLSZndDthcmdzWzJdICZhbXA7JmFtcDsgYmFzZV9zZXEgIT0gY2ItJmd0O2FyZ3NbMl0pIHsKJiM0MzsJCWNiLSZndDtzZXEmIzQzOyYjNDM7OwomIzQzOwkJZXJyID0gLUVJTlRSOwomIzQzOwl9CiYjNDM7CWNiLSZndDthcmdzWzJdID0gYmFzZV9zZXE7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLApAQCAtMzczLDM1ICYjNDM7MzkzLDMxIEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLAogCXVuc2lnbmVkIGludCBpID0gY2ItJmd0O2FyZ3NbMF07CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWNiLSZndDtzZXEgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7bmV0LSZndDtuZi5ob29rX2Jhc2Vfc2VxKTsKIAogCWUgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgY3R4LSZndDtob29rLCBuZXQsIGN0eC0mZ3Q7ZGV2bmFtZSk7Ci0JaWYgKCFlKQomIzQzOwlpZiAoIWUgfHwgSVNfRVJSKGUpKQogCQlnb3RvIGRvbmU7CiAKLQlpZiAoSVNfRVJSKGUpKSB7Ci0JCWNiLSZndDtzZXEmIzQzOyYjNDM7OwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JaWYgKCh1bnNpZ25lZCBsb25nKWUgIT0gY3R4LSZndDtoZWFkdiB8fCBpICZndDs9IGUtJmd0O251bV9ob29rX2VudHJpZXMpCi0JCWNiLSZndDtzZXEmIzQzOyYjNDM7OwotCiAJb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTsKIAogCWZvciAoOyBpICZsdDsgZS0mZ3Q7bnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKG9wc1tpXS0mZ3Q7aG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVCkKLQkJCWVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY3R4LCBvcHNbaV0sIGZhbWlseSwKLQkJCQkJCSBjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEpOwotCQllbHNlCi0JCQllcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgb3BzW2ldLAotCQkJCQkJIG9wc1tpXS0mZ3Q7cHJpb3JpdHksIGZhbWlseSwKJiM0MzsJCWNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqY3VyID0gUkVBRF9PTkNFKG9wc1tpXSk7CiYjNDM7CiYjNDM7CQlpZiAoY3VyLSZndDtob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKQomIzQzOwkJCWVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTsKJiM0MzsJCWVsc2UgewomIzQzOwkJCWVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsCiYjNDM7CQkJCQkJIGN1ci0mZ3Q7cHJpb3JpdHksIGZhbWlseSwKIAkJCQkJCSBjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEpOwomIzQzOwkJfQogCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAJfQogCiBkb25lOgotCW5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7CiYjNDM7CWlmIChubHNrYi0mZ3Q7bGVuICZndDsgMCkKJiM0MzsJCW5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJY2ItJmd0O2FyZ3NbMF0gPSBpOwogCXJldHVybiBubHNrYi0mZ3Q7bGVuOwpAQCAtNDQyLDEwICYjNDM7NDU4LDcgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc3Ryc2NweShjdHgtJmd0O2Rldm5hbWUsIG5hbWUsIHNpemVvZihjdHgtJmd0O2Rldm5hbWUpKTsKLQljdHgtJmd0O2hlYWR2ID0gKHVuc2lnbmVkIGxvbmcpaGVhZDsKIAljdHgtJmd0O2hvb2sgPSBob29rbnVtOwotCi0JY2ItJmd0O3NlcSA9IDE7CiAJY2ItJmd0O2RhdGEgPSBjdHg7CiAKIAlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU0OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYSBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUgdGhhdCBuZWVkcyBhIGxvb2stb3Zlci4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdGhlIHNhbWU6IGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRldGFpbHMgYW5kIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQgdGhpcyBpcyB0cnlpbmcgdG8gYWNoaWV2ZS4gSSBuZWVkIHRvIHNlZSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nLgoKQWxyaWdodCwgdGhlIHBhdGNoIHRvdWNoZXMgYGluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oYCwgYG5ldC9uZXRmaWx0ZXIvY29yZS5jYCwgYG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBkaWdnaW5nIGludG8gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0sIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgdG8gdGFrZSBsaWdodGx5LiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIHRoaXMgaGFzIG9uIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LgoKTm93IGl0JiMzOTtzIHRpbWUgdG8gbGV2ZXJhZ2UgdGhlIHRvb2xzLiBCZWZvcmUgSSBnZXQgaW50byB0aGUgd2VlZHMgb2YgbGluZS1ieS1saW5lIGNvZGUgcmV2aWV3LCBJJiMzOTttIGdvaW5nIHRvIHJ1biB0aGlzIHRocm91Z2ggb3VyIHN0YW5kYXJkIGFuYWx5c2lzIHBpcGVsaW5lLiBJIG5lZWQgdG8gdmVyaWZ5IEtjb25maWcgcmVxdWlyZW1lbnRzIGFuZCBtYWtlIHN1cmUgdGhpcyBjb2RlIHBsYXlzIHdlbGwgd2l0aCB0aGUgYnVpbGQgc3lzdGVtIGFuZCBleGlzdGluZyBjb25maWd1cmF0aW9ucy4gSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgb2J2aW91cyByZWQgZmxhZ3MgbGlrZSBtaXNzaW5nIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBjb25mbGljdHMgYmVmb3JlIEkgc3BlbmQgdG9vIG11Y2ggdGltZSBvbiB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkVURklMVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTk4PWNvbmZpZyBORl9MT0dfU1lTTE9HXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNS1cdCAgVGhpcyBpcyBhIHNpbXBsZXIgYnV0IGxlc3MgZmxleGlibGUgbG9nZ2luZyBtZXRob2QgY29tcGFyZWQgdG9cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDY6XHQgIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cuXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA3LVx0ICBJZiBib3RoIGFyZSBlbmFibGVkIHRoZSBiYWNrZW5kIHRvIHVzZSBjYW4gYmUgY29uZmlndXJlZCBhdCBydW4tdGltZVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz04Mzk9Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODQ2LVx0KGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4NDc6XHRDT05GSUdfTkVURklMVEVSX1hUX0NPTk5NQVJLIChjb21iaW5lZCBjb25ubWFyay9DT05OTUFSSyBtb2R1bGUpLlxubmV0L25ldGZpbHRlci9LY29uZmlnLTg0OC1cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9OTY1PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX01BUktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTcxLVx0KGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo5NzI6XHRDT05GSUdfTkVURklMVEVSX1hUX01BUksgKGNvbWJpbmVkIG1hcmsvTUFSSyBtb2R1bGUpLlxubmV0L25ldGZpbHRlci9LY29uZmlnLTk3My1cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTIzNz1jb25maWcgTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNDQtXHQoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0c1xubmV0L25ldGZpbHRlci9LY29uZmlnOjEyNDU6XHRDT05GSUdfTkVURklMVEVSX1hUX0NPTk5NQVJLIChjb21iaW5lZCBjb25ubWFyay9DT05OTUFSSyBtb2R1bGUpLlxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNDYtXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTE0MjM9Y29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9NQVJLXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MjktXHQoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0c1xubmV0L25ldGZpbHRlci9LY29uZmlnOjE0MzA6XHRDT05GSUdfTkVURklMVEVSX1hUX01BUksgKGNvbWJpbmVkIG1hcmsvTUFSSyBtb2R1bGUpLlxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MzEtXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0yPW5ldGZpbHRlci1vYmpzIDo9IGNvcmUubyBuZl9sb2cubyBuZl9xdWV1ZS5vIG5mX3NvY2tvcHQubyB1dGlscy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM6bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSAmIzQzOz0gbmZuZXRsaW5rLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTIyPWVuZGlmXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTIzLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTkVURklMVEVSKSA9IG5ldGZpbHRlci5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRGSUxURVJfQlBGX0xJTkspICYjNDM7PSBuZl9icGZfbGluay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTI2LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfQUNDVCkgJiM0Mzs9IG5mbmV0bGlua19hY2N0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mjg6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFKSAmIzQzOz0gbmZuZXRsaW5rX3F1ZXVlLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mjk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRykgJiM0Mzs9IG5mbmV0bGlua19sb2cub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfT1NGKSAmIzQzOz0gbmZuZXRsaW5rX29zZi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LKSAmIzQzOz0gbmZuZXRsaW5rX2hvb2sub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0zMi1cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTc2PW9iai0kKENPTkZJR19ORl9OQVRfVEZUUCkgJiM0Mzs9IG5mX25hdF90ZnRwLm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTc4LSMgU1lOUFJPWFlcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWSkgJiM0Mzs9IG5mX3N5bnByb3h5X2NvcmUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS04MC1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpICYjNDM7PSBuZl9jb25uY291bnQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS04Mi1cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE1Mz1vYmotJChDT05GSUdfTkZfRkxPV19UQUJMRV9JTkVUKSAmIzQzOz0gbmZfZmxvd190YWJsZV9pbmV0Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1NS0jIGdlbmVyaWMgWCB0YWJsZXNcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTU2Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRBQkxFUykgJiM0Mzs9IHhfdGFibGVzLm8geHRfdGNwdWRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTU3LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNTgtIyBjb21ib3Ncbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTU5Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFSSykgJiM0Mzs9IHh0X21hcmsub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9DT05OTUFSSykgJiM0Mzs9IHh0X2Nvbm5tYXJrLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTYxOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfU0VUKSAmIzQzOz0geHRfc2V0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTYyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTkFUKSAmIzQzOz0geHRfbmF0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTYzLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNjQtIyB0YXJnZXRzXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2NTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9BVURJVCkgJiM0Mzs9IHh0X0FVRElULm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTY2Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NIRUNLU1VNKSAmIzQzOz0geHRfQ0hFQ0tTVU0ub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkpICYjNDM7PSB4dF9DTEFTU0lGWS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2ODpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSykgJiM0Mzs9IHh0X0NPTk5TRUNNQVJLLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTY5Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NUKSAmIzQzOz0geHRfQ1Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCkgJiM0Mzs9IHh0X0RTQ1Aub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEwpICYjNDM7PSB4dF9ITC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3MjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSykgJiM0Mzs9IHh0X0hNQVJLLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTczOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRCkgJiM0Mzs9IHh0X0xFRC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3NDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MT0cpICYjNDM7PSB4dF9MT0cub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzU6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkVUTUFQKSAmIzQzOz0geHRfTkVUTUFQLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTc2Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HKSAmIzQzOz0geHRfTkZMT0cub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSkgJiM0Mzs9IHh0X05GUVVFVUUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzg6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCkgJiM0Mzs9IHh0X1JBVEVFU1Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkVESVJFQ1QpICYjNDM7PSB4dF9SRURJUkVDVC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE4MDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVNRVUVSQURFKSAmIzQzOz0geHRfTUFTUVVFUkFERS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE4MTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLKSAmIzQzOz0geHRfU0VDTUFSSy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE4MjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUFJPWFkpICYjNDM7PSB4dF9UUFJPWFkub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxODM6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTKSAmIzQzOz0geHRfVENQTVNTLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTg0Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQKSAmIzQzOz0geHRfVENQT1BUU1RSSVAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxODU6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVEVFKSAmIzQzOz0geHRfVEVFLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTg2Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFKSAmIzQzOz0geHRfVFJBQ0Uub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxODc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSURMRVRJTUVSKSAmIzQzOz0geHRfSURMRVRJTUVSLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTg4LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xODktIyBtYXRjaGVzXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5MDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0FERFJUWVBFKSAmIzQzOz0geHRfYWRkcnR5cGUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxOTE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9CUEYpICYjNDM7PSB4dF9icGYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToxOTI6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSKSAmIzQzOz0geHRfY2x1c3Rlci5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5MzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQpICYjNDM7PSB4dF9jb21tZW50Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk0Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTKSAmIzQzOz0geHRfY29ubmJ5dGVzLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk1Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxBQkVMKSAmIzQzOz0geHRfY29ubmxhYmVsLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk2Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUKSAmIzQzOz0geHRfY29ubmxpbWl0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk3Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLKSAmIzQzOz0geHRfY29ubnRyYWNrLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk4Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ1BVKSAmIzQzOz0geHRfY3B1Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTk5Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCkgJiM0Mzs9IHh0X2RjY3Aub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ERVZHUk9VUCkgJiM0Mzs9IHh0X2Rldmdyb3VwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjAxOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCkgJiM0Mzs9IHh0X2RzY3Aub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDI6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FQ04pICYjNDM7PSB4dF9lY24ub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDM6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1ApICYjNDM7PSB4dF9lc3Aub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDQ6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQpICYjNDM7PSB4dF9oYXNobGltaXQub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDU6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVIpICYjNDM7PSB4dF9oZWxwZXIub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDY6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITCkgJiM0Mzs9IHh0X2hsLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjA3Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBDT01QKSAmIzQzOz0geHRfaXBjb21wLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjA4Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSkgJiM0Mzs9IHh0X2lwcmFuZ2Uub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMDk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFZTKSAmIzQzOz0geHRfaXB2cy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxMDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0wyVFApICYjNDM7PSB4dF9sMnRwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjExOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIKSAmIzQzOz0geHRfbGVuZ3RoLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjEyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQpICYjNDM7PSB4dF9saW1pdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxMzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQykgJiM0Mzs9IHh0X21hYy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxNDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVCkgJiM0Mzs9IHh0X211bHRpcG9ydC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxNTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX05GQUNDVCkgJiM0Mzs9IHh0X25mYWNjdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxNjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09TRikgJiM0Mzs9IHh0X29zZi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxNzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSKSAmIzQzOz0geHRfb3duZXIub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTg6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DR1JPVVApICYjNDM7PSB4dF9jZ3JvdXAub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWKSAmIzQzOz0geHRfcGh5c2Rldi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyMDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUpICYjNDM7PSB4dF9wa3R0eXBlLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjIxOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZKSAmIzQzOz0geHRfcG9saWN5Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjIyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEpICYjNDM7PSB4dF9xdW90YS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyMzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QpICYjNDM7PSB4dF9yYXRlZXN0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjI0Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0pICYjNDM7PSB4dF9yZWFsbS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyNTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVCkgJiM0Mzs9IHh0X3JlY2VudC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyNjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFApICYjNDM7PSB4dF9zY3RwLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjI3Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU09DS0VUKSAmIzQzOz0geHRfc29ja2V0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjI4Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEUpICYjNDM7PSB4dF9zdGF0ZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyOTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQykgJiM0Mzs9IHh0X3N0YXRpc3RpYy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIzMDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORykgJiM0Mzs9IHh0X3N0cmluZy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIzMTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUykgJiM0Mzs9IHh0X3RjcG1zcy5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIzMjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUpICYjNDM7PSB4dF90aW1lLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjMzOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyKSAmIzQzOz0geHRfdTMyLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjM0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jPTI3Mj1uZl9ob29rX2VudHJ5X2hlYWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTI3Ny1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzoyNzg6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0FSUFxubmV0L25ldGZpbHRlci9jb3JlLmMtMjc5LVx0Y2FzZSBORlBST1RPX0FSUDpcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0yODMtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzoyODQ6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRVxubmV0L25ldGZpbHRlci9jb3JlLmMtMjg1LVx0Y2FzZSBORlBST1RPX0JSSURHRTpcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0yODktI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzoyOTA6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xubmV0L25ldGZpbHRlci9jb3JlLmMtMjkxLVx0Y2FzZSBORlBST1RPX0lORVQ6XG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtMzEyLVxubmV0L25ldGZpbHRlci9jb3JlLmM6MzEzOiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0lOR1JFU1Ncbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTMxNC1cdGlmIChob29rbnVtID09IE5GX05FVERFVl9JTkdSRVNTKSB7XG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtMzE4LSNlbmRpZlxubmV0L25ldGZpbHRlci9jb3JlLmM6MzE5OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0VHUkVTU1xubmV0L25ldGZpbHRlci9jb3JlLmMtMzIwLVx0aWYgKGhvb2tudW0gPT0gTkZfTkVUREVWX0VHUkVTUykge1xuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jPTMyOT1zdGF0aWMgaW50IG5mX2luZ3Jlc3NfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0zMzEte1xubmV0L25ldGZpbHRlci9jb3JlLmM6MzMyOiNpZm5kZWYgQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0zMzMtXHRpZiAocmVnLVx1MDAzZWhvb2tudW0gPT0gaG9va251bSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz0zOTg9c3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQwNi1cdGNhc2UgTkZQUk9UT19ORVRERVY6XG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo0MDc6I2lmbmRlZiBDT05GSUdfTkVURklMVEVSX0lOR1JFU1Ncbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQwOC1cdFx0aWYgKHJlZy1cdTAwM2Vob29rbnVtID09IE5GX05FVERFVl9JTkdSRVNTKVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQxMC0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjQxMTojaWZuZGVmIENPTkZJR19ORVRGSUxURVJfRUdSRVNTXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy00MTItXHRcdGlmIChyZWctXHUwMDNlaG9va251bSA9PSBORl9ORVRERVZfRUdSRVNTKVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQ0OC1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjQ0OTojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy00NTAtXHRpZiAobmZfaW5ncmVzc19ob29rKHJlZywgcGYpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQ1Mi0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjQ1MzojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1Ncbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQ1NC1cdGlmIChuZl9lZ3Jlc3NfaG9vayhyZWcsIHBmKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz00OTE9c3RhdGljIHZvaWQgX19uZl91bnJlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTUwOS1cdGlmIChuZl9yZW1vdmVfbmV0X2hvb2socCwgcmVnKSkge1xubmV0L25ldGZpbHRlci9jb3JlLmM6NTEwOiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0lOR1JFU1Ncbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTUxMS1cdFx0aWYgKG5mX2luZ3Jlc3NfaG9vayhyZWcsIHBmKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01MTMtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1MTQ6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRUdSRVNTXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01MTUtXHRcdGlmIChuZl9lZ3Jlc3NfaG9vayhyZWcsIHBmKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYz03Nzg9c3RhdGljIGludCBfX25ldF9pbml0IG5ldGZpbHRlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L25ldGZpbHRlci9jb3JlLmMtNzgxLVx0X19uZXRmaWx0ZXJfbmV0X2luaXQobmV0LVx1MDAzZW5mLmhvb2tzX2lwdjYsIEFSUkFZX1NJWkUobmV0LVx1MDAzZW5mLmhvb2tzX2lwdjYpKTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjc4MjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQVJQXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy03ODMtXHRfX25ldGZpbHRlcl9uZXRfaW5pdChuZXQtXHUwMDNlbmYuaG9va3NfYXJwLCBBUlJBWV9TSVpFKG5ldC1cdTAwM2VuZi5ob29rc19hcnApKTtcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTc4NC0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjc4NTojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy03ODYtXHRfX25ldGZpbHRlcl9uZXRfaW5pdChuZXQtXHUwMDNlbmYuaG9va3NfYnJpZGdlLCBBUlJBWV9TSVpFKG5ldC1cdTAwM2VuZi5ob29rc19icmlkZ2UpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYz0zMD1zdGF0aWMgY29uc3QgdTggbmZfY3RfZXh0X3R5cGVfbGVuW05GX0NUX0VYVF9OVU1dID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jLTQ4LSNlbmRpZlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM6NDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jLTUwLVx0W05GX0NUX0VYVF9TWU5QUk9YWV0gPSBzaXplb2Yoc3RydWN0IG5mX2Nvbm5fc3lucHJveHkpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jPTU3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50IHRvdGFsX2V4dGVuc2lvbl9zaXplKHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtODAtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYzo4MTojaWYgSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX1NZTlBST1hZKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtODItXHRcdCYjNDM7IHNpemVvZihzdHJ1Y3QgbmZfY29ubl9zeW5wcm94eSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9NjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfaXBfbmxhX3BvbGljeVtDVEFfSVBfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy02NTAtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6NjUxOiNpZiBkZWZpbmVkKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19HTFVFX0NUKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTY1Mi1zdGF0aWMgc2l6ZV90IGN0bmV0bGlua19wcm90b19zaXplKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjYzMT1jdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI2MzUtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MjYzNjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1Rcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yNjM3LXN0YXRpYyBzaXplX3Rcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjkwNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY3RfaG9vayBjdG5ldGxpbmtfZ2x1ZV9ob29rID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yOTEzLX07XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MjkxNDojZW5kaWYgLyogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1QgKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yOTE1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zODY5PXN0YXRpYyBpbnQgX19pbml0IGN0bmV0bGlua19pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM4OTEtXHR9XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6Mzg5MjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1Rcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zODkzLVx0Lyogc2V0dXAgaW50ZXJhY3Rpb24gYmV0d2VlbiBuZl9xdWV1ZSBhbmQgbmZfY29ubnRyYWNrX25ldGxpbmsuICovXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM5MDY9c3RhdGljIHZvaWQgX19leGl0IGN0bmV0bGlua19leGl0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM5MTAtXHRuZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoXHUwMDI2Y3RubF9zdWJzeXMpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM5MTE6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzkxMi1cdFJDVV9JTklUX1BPSU5URVIobmZubF9jdF9ob29rLCBOVUxMKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9NzY9c3RhdGljIGludCBuZm5sX2hvb2tfcHV0X2JwZl9wcm9nX2luZm8oc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy04My1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzo4NDpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTkVURklMVEVSX0JQRl9MSU5LKSlcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy04NS1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTI3OD1uZm5sX2hvb2tfZW50cmllc19oZWFkKHU4IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpkZXYpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTI4MC1cdGNvbnN0IHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmhvb2tfaGVhZCA9IE5VTEw7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6MjgxOiNpZiBkZWZpbmVkKENPTkZJR19ORVRGSUxURVJfSU5HUkVTUykgfHwgZGVmaW5lZChDT05GSUdfTkVURklMVEVSX0VHUkVTUylcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0yODItXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0yOTYtXHRjYXNlIE5GUFJPVE9fQVJQOlxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjI5NzojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQVJQXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMjk4LVx0XHRpZiAoaG9vayBcdTAwM2U9IEFSUkFZX1NJWkUobmV0LVx1MDAzZW5mLmhvb2tzX2FycCkpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMwMy1cdGNhc2UgTkZQUk9UT19CUklER0U6XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6MzA0OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0ZBTUlMWV9CUklER0Vcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zMDUtXHRcdGlmIChob29rIFx1MDAzZT0gQVJSQVlfU0laRShuZXQtXHUwMDNlbmYuaG9va3NfYnJpZGdlKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzA5LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozMTA6I2lmIGRlZmluZWQoQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTKSB8fCBkZWZpbmVkKENPTkZJR19ORVRGSUxURVJfRUdSRVNTKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMxMS1cdGNhc2UgTkZQUk9UT19ORVRERVY6XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMyMS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozMjI6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMyMy1cdFx0aWYgKGhvb2sgPT0gTkZfTkVUREVWX0lOR1JFU1MpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMyNS0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozMjY6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRUdSRVNTXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzI3LVx0XHRpZiAoaG9vayA9PSBORl9ORVRERVZfRUdSRVNTKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MjkxPXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICpuZl9ob29rX2VudHJpZXNfaGVhZChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCB1OCBob29rbnVtKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMjkzLVx0c3dpdGNoIChwZikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoyOTQ6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0yOTUtXHRjYXNlIE5GUFJPVE9fQlJJREdFOlxuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz02OD1zdHJ1Y3QgeHRfYWYge1xuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy03MS1cdHN0cnVjdCBsaXN0X2hlYWQgdGFyZ2V0O1xubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjcyOiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtNzMtXHRzdHJ1Y3QgbXV0ZXggY29tcGF0X211dGV4O1xuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz03MDQ9c3RhdGljIGJvb2wgZXJyb3JfdGdfb2sodW5zaWduZWQgaW50IHVzZXJzaXplLCB1bnNpZ25lZCBpbnQga2VybnNpemUsXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTcwOS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzo3MTA6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy03MTEtaW50IHh0X2NvbXBhdF9hZGRfb2Zmc2V0KHVfaW50OF90IGFmLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgZGVsdGEpXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTkxNj1FWFBPUlRfU1lNQk9MKHh0X2NvbXBhdF9jaGVja19lbnRyeV9vZmZzZXRzKTtcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzo5MTc6I2VuZGlmIC8qIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVQgKi9cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy05MTgtXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTkzNC0gKlxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjkzNTogKiBBbHNvIHNlZSB4dF9jb21wYXRfY2hlY2tfZW50cnlfb2Zmc2V0cyBmb3IgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVCB2ZXJzaW9uLlxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTkzNi0gKlxuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0xMTYyPXZvaWQgKnh0X2NvcHlfY291bnRlcnMoc29ja3B0cl90IGFyZywgdW5zaWduZWQgaW50IGxlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTE2OC1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMTY5OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTE3MC1cdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTEyMTQ9RVhQT1JUX1NZTUJPTF9HUEwoeHRfY29weV9jb3VudGVycyk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTIxNS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMjE2OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTIxNy1pbnQgeHRfY29tcGF0X3RhcmdldF9vZmZzZXQoY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0xMzk3PUVYUE9SVF9TWU1CT0xfR1BMKHh0X3RhYmxlX3VubG9jayk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTM5OC1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMzk5OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTQwMC12b2lkIHh0X2NvbXBhdF9sb2NrKHVfaW50OF90IGFmKVxuLS1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0xNDE0PUVYUE9SVF9TWU1CT0xfR1BMKHh0X3RlZV9lbmFibGVkKTtcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xNDE1LVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjE0MTY6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19MRUdBQ1lcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xNDE3LURFRklORV9QRVJfQ1BVKHNlcWNvdW50X3QsIHh0X3JlY3NlcSk7XG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTIwOTU9RVhQT1JUX1NZTUJPTF9HUEwoeHRfcHJvdG9fZmluaSk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjA5Ni1cbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoyMDk3OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfTEVHQUNZXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjA5OC0vKipcbi0tXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MjE4ND1zdGF0aWMgaW50IF9faW5pdCB4dF9pbml0KHZvaWQpXG4tLVxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIxODgtXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MjE4OTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19MRUdBQ1kpKSB7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjE5MC1cdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjIwMC1cdFx0bXV0ZXhfaW5pdChcdTAwMjZ4dFtpXS5tdXRleCk7XG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MjIwMTojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIyMDItXHRcdG11dGV4X2luaXQoXHUwMDI2eHRbaV0uY29tcGF0X211dGV4KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmM9MTM2PXN0YXRpYyB2b2lkIGxpbWl0X210X2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYy0xNDItXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmM6MTQzOiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMtMTQ0LXN0cnVjdCBjb21wYXRfeHRfcmF0ZWluZm8ge1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYz0xNzE9c3RhdGljIGludCBsaW1pdF9tdF9jb21wYXRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4tLVxubmV0L25ldGZpbHRlci94dF9saW1pdC5jLTE4NC19XG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmM6MTg1OiNlbmRpZiAvKiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUICovXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMtMTg2LVxubmV0L25ldGZpbHRlci94dF9saW1pdC5jPTE4Nz1zdGF0aWMgc3RydWN0IHh0X21hdGNoIGxpbWl0X210X3JlZyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYy0xOTQtXHQubWF0Y2hzaXplICAgICAgICA9IHNpemVvZihzdHJ1Y3QgeHRfcmF0ZWluZm8pLFxubmV0L25ldGZpbHRlci94dF9saW1pdC5jOjE5NTojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxubmV0L25ldGZpbHRlci94dF9saW1pdC5jLTE5Ni1cdC5jb21wYXRzaXplICAgICAgID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfcmF0ZWluZm8pLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTA4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgS2NvbmZpZyBvcHRpb25zOgoKKipLY29uZmlnIERpdmU6IE5FVEZJTFRFUl9ORVRMSU5LX0hPT0sgJmFtcDsgTkZfTkFUKioKCk9rYXksIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTkVURklMVEVSX05FVExJTktfSE9PS2AgYW5kIGBORl9OQVRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGl0c2VsZi4mIzM0OyBJIGtub3cgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgdHJpY2t5LCBhbmQgZXZlbiBmb3IgYW4gZXhwZXJ0LCB0aGUgcHJlY2lzZSBkZXBlbmRlbmNpZXMgYW5kIGltcGxpY2F0aW9ucyBhcmVuJiMzOTt0IGFsd2F5cyBpbW1lZGlhdGVseSBvYnZpb3VzLgoKSSYjMzk7bSB0aGlua2luZywgJiMzNDtJcyBgTkVURklMVEVSX05FVExJTktfSE9PS2AgYSBoYXJkIGRlcGVuZGVuY3kgZm9yIGBORl9OQVRgLCBvciBpcyBpdCBqdXN0IHN1Z2dlc3RlZD8gSXMgaXQgcmVxdWlyZWQgZm9yICpzb21lKiBORl9OQVQgZnVuY3Rpb25hbGl0eSBidXQgbm90IGFsbD8mIzM0OyBJIHdhbnQgdG8gYXZvaWQgYmxpbmRseSBhc3N1bWluZyBhbnl0aGluZyBoZXJlOyBhc3N1bXB0aW9ucyBpbiB0aGlzIGFyZWEgY2FuIGxlYWQgdG8gc3VidGxlIGJ1Z3Mgb3IgdW5uZWNlc3NhcmlseSBibG9hdGVkIGtlcm5lbHMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IGRlZmF1bHQgc2V0dGluZ3MsIGhlbHAgdGV4dCwgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gdGhlbSwgYW5kIGhvdyB0aG9zZSBpbnRlcmFjdCB3aXRoIG90aGVyLCBicm9hZGVyIGFzcGVjdHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgZ2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbmV0bGluayBpbnRlcmFjdHMgd2l0aCBOZXRmaWx0ZXIuCgpVbHRpbWF0ZWx5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbXVtIHNldCBvZiBjb25maWd1cmF0aW9ucyB0aGF0IEkgbmVlZCBlbmFibGVkIHRvIGFjaGlldmUgd2hhdGV2ZXIgc3BlY2lmaWMgTkFUIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSB3b3JraW5nIHdpdGggYXQgdGhlIG1vbWVudC4gS25vd2luZyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGVtIGlzIGtleS4gTm8gcG9pbnQgaW4gYWNjaWRlbnRhbGx5IGludHJvZHVjaW5nIHVud2FudGVkIG92ZXJoZWFkIG9yIGJyZWFraW5nIHNvbWUgb2JzY3VyZSBjb3JuZXIgY2FzZSBieSBtaXNjb25maWd1cmluZyB0aGUga2VybmVsLiBTbywgdG8gdGhlIEtjb25maWcgSSBnbyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1jb25maWcgTkVURklMVEVSX0JQRl9MSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzctXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgaW4gbmV0L25ldGZpbHRlcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHNvbWUgb2YgdGhlIE5ldGZpbHRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAzNi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBhcmNoaXRlY3R1cmUgZm9yIG1hbnkgb2YgbXkgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBzdG9yZWQsIHNvIGl0IGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4gSSBleHBlY3QgdG8gc2VlIHRoZSBtYWluIGZlYXR1cmUgZ3JvdXBpbmdzIG9yIGF0IGxlYXN0IHNvbWUgY3J1Y2lhbCBpbml0aWFsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGRlZmluZWQgYXJvdW5kIHRoaXMgYXJlYSwgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgdmVyc2lvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLi4uIGFuZCB0aGVuIEkgY2FuIHN0YXJ0IGJ1aWxkaW5nIG15IG1lbnRhbCBtb2RlbCBvZiB0aGUgbmV3IGFkZGl0aW9ucywgY2hhbmdlcywgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0FSUFxuICAzMTpcdFx0Ym9vbFxuICAzMjpcdFxuICAzMzpcdGNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcbiAgMzQ6XHRcdGRlZl9ib29sIEJQRl9TWVNDQUxMXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcbiAgMzc6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuICAzOTpcdFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbiAgNDA6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDQzOlx0XHQgIHRvIGxpc3QgdGhlIGJhc2UgbmV0ZmlsdGVyIGhvb2tzIHZpYSBORk5FVExJTksuXG4gIDQ0Olx0XHQgIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXG4gIDQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZBQ0NUIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgNDk6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA1MDpcdFx0aGVscFxuICA1MTpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDUyOlx0XHQgIGZvciBleHRlbmRlZCBhY2NvdW50aW5nIHZpYSBORk5FVExJTksuXG4gIDUzOlx0XG4gIDU0Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG4gIDU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiAgNTY6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDU3Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAgNTg6XHRcdGhlbHBcbiAgNTk6XHRcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxuICA2MDpcdFx0ICBmb3IgcXVldWVpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxuICA2MTpcdFxuICA2MjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19MT0dcbiAgNjM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBMT0cgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXCYjMzQ7XG4gIDY0Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiAgNjU6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuICA2NjpcdFx0aGVscFxuICA2NzpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XG4gIDY4Olx0XHQgIGZvciBsb2dnaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cbiAgNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTExNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5GX05BVCBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBkaXZpbmcgYmFjayBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNpcmNsZSBiYWNrIHRvIE5GX05BVC4gSXQmIzM5O3MgY3J1Y2lhbCB3ZSBkb24mIzM5O3Qgb3Zlcmxvb2sgaXQgaW4gdGhlIEtjb25maWcgZmlsZS4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIHN0YXR1cyB0aGVyZS4gQW55IGNoYW5nZXMsIGFueSBkZXBlbmRlbmNpZXMsIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcyBuZWVkIHRvIGJlIGRvdWJsZS1jaGVja2VkLiBBIG1pc2NvbmZpZ3VyYXRpb24gb24gTkZfTkFUIGNhbiBjYXNjYWRlIGludG8gc29tZSByZWFsbHkgbmFzdHkgbmV0d29ya2luZyBwcm9ibGVtcyB0aGF0IGFyZSBhIHBhaW4gdG8gZGVidWcuIFNvIGxldOKAmXMgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIgYW5kIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaXMgYWxpZ25lZCB3aXRoIG91ciBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBhbmQgdGFyZ2V0IHBsYXRmb3JtLiBXZSBkb24mIzM5O3Qgd2FudCBhbnkgc3VycHJpc2VzIHdoZW4gd2UgZ2V0IGRvd24gdG8gaW50ZWdyYXRpb24uIExldCYjMzk7cyBtYWtlIHN1cmUgaXQgaXMgY29ycmVjdCBhbmQgZG91YmxlIGNoZWNrIGFsbCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfTkFUXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTM5OD1jb25maWcgTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MDYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDA3OmNvbmZpZyBORl9OQVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MDgtXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQyMwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDYxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBIb29rIFNlcXVlbmNlIE51bWJlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGRldGFpbHMuIEZpcnN0LCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgZmllbGRzIHRvIHRoZSBgc3RydWN0IG5ldG5zX25mYCBzdHJ1Y3R1cmUsIHJlc2lkaW5nIHdpdGhpbiBgaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBwcm9iYWJseSBhYm91dCBzZXF1ZW5jaW5nIG9yIHZlcnNpb25pbmcgb2Ygc29tZSBzb3J0LiBOb3csIGxldCYjMzk7cyBzZWUgaG93IHRoZXNlIG5ldyBmaWVsZHMgYXJlIHVzZWQuCgpJbiBgbmV0L25ldGZpbHRlci9jb3JlLmNgLCB0aGVyZSYjMzk7cyBhIG5ldyBmdW5jdGlvbiBgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGBfX25mX3JlZ2lzdGVyX25ldF9ob29rYCBhbmQgYF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AuIFRoaXMgY2xlYXJseSBwb2ludHMgdG93YXJkcyBhIG1lY2hhbmlzbSB0byBpbmNyZW1lbnQgdGhlIHNlcXVlbmNlIG51bWJlciB3aGVuZXZlciBhIG5ldGZpbHRlciBob29rIGlzIHJlZ2lzdGVyZWQgb3IgdW5yZWdpc3RlcmVkLiBJdCBhbHNvIGluaXRpYWxpemVzIHRoZXNlIHNlcXVlbmNlIG51bWJlcnMgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdGAuIE1ha2VzIHNlbnNlIOKAkyB3ZSBuZWVkIGEgc3RhcnRpbmcgcG9pbnQuCgpUaGUgYG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY2AgZmlsZSBhbHNvIGhhcyBzaW1pbGFyIGxvZ2ljIHdpdGggYGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KWAsIGNhbGxlZCBpbiBgbmZfbmF0X3JlZ2lzdGVyX2ZuYCBhbmQgYG5mX25hdF91bnJlZ2lzdGVyX2ZuYCwgd2hpY2ggaXMgcmVsYXRlZCB0byBOQVQgaG9va3MuIFRoYXQmIzM5O3MgY29uc2lzdGVudCDigJMgd2UmIzM5O3JlIHRyYWNraW5nIGEgc2VxdWVuY2UgZm9yIE5BVCBzcGVjaWZpY2FsbHkgYXMgd2VsbC4KCk5vdywgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgY2hhbmdlcyBzZWVtIHRvIGJlIGluIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNgLiBUaGUgcmVtb3ZhbCBvZiBgaGVhZHZgIGZyb20gYG5mbmxfZHVtcF9ob29rX2RhdGFgIGlzIGEgbWlub3IgZGV0YWlsLCBidXQgdGhlIHJlZmFjdG9yaW5nIG9mIGBuZm5sX2hvb2tfZHVtcF9uYXRgIGFuZCBgbmZubF9ob29rX2R1bXBgIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMuIFRoZXkmIzM5O3JlIG5vdyB1c2luZyBgbmV0LSZndDtuZi5ob29rX2Jhc2Vfc2VxYCBhbmQgYG5ldC0mZ3Q7bmYubmF0X2hvb2tfYmFzZV9zZXFgIHRvIHByb3Blcmx5IHN5bmNocm9uaXplIGdlbmVyYXRpb24gbnVtYmVycy4gVGhpcyBpcyBhIGNydWNpYWwgaW1wcm92ZW1lbnQgZm9yIGNvbnNpc3RlbmN5IGR1cmluZyBkdW1wcy4KClNwZWNpZmljYWxseSwgaW4gYG5mbmxfaG9va19kdW1wX25hdGAsIEkgc2VlIHRoYXQgaXQgaGFuZGxlcyByZXN0YXJ0L3Jlc3VtZSBkdXJpbmcgdGhlIGR1bXAgdXNpbmcgYGNiLSZndDthcmdzWzFdYCAoaW5kZXgpIGFuZCBgY2ItJmd0O2FyZ3NbMl1gIChzZXF1ZW5jZSkuIEl0IHJldHVybnMgYC1FSU5UUmAgYW5kIGluY3JlbWVudHMgYGNiLSZndDtzZXFgIGlmIGBiYXNlX3NlcWAgY2hhbmdlcy4gVGhpcyBzaG93cyB0aGUgaW50ZW50IHRvIGhhbmRsZSBjaGFuZ2VzIGR1cmluZyBhIG5ldGxpbmsgZHVtcC4gT24gdGhlIG90aGVyIGhhbmQsIGluIGBuZm5sX2hvb2tfZHVtcGAsIGl0IG5vdyB1c2VzIGBjYi0mZ3Q7c2VxID0gc21wX2xvYWRfYWNxdWlyZSgmYW1wO25ldC0mZ3Q7bmYuaG9va19iYXNlX3NlcSlgIGFuZCBoYW5kbGVzIFJDVSBhbmQgZHVtcCBjb25zaXN0ZW5jeSBjaGVja3Mgd2l0aCBgbmxfZHVtcF9jaGVja19jb25zaXN0ZW50YC4gVGhpcyBhbHNvIGRlbW9uc3RyYXRlcyBlZmZvcnRzIHRvd2FyZCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBoYW5kbGluZy4KClRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSB1c2VkPyBUaGUgYW5zd2VyIGlzIHllcywgYXMgdGhlIG5mbmV0bGluayBkdW1wIGhvb2tzIGFyZSB0cmlnZ2VyZWQgdmlhIE5ldGxpbmsgdXNpbmcgYE5GTkxfU1VCU1lTX0hPT0tgIG1lc3NhZ2VzLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZS4gTmV0ZmlsdGVyIGNvcmUgaG9vayByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gYW5kIE5BVCBob29rIHJlZ2lzdHJhdGlvbiBhcmUgYWxzbyBwYXJ0IG9mIHRoZSBjb3JlIG9wZXJhdGlvbiB3aGVuIHRoZSB1c2VyIG1hbmlwdWxhdGVzIHJ1bGVzIHdpdGggaXB0YWJsZXMgb3IgbmZ0YWJsZXMuIFRoaXMgaXMgYSB2ZXJ5IHJlYWwgc2NlbmFyaW8uIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBhIFFFTVUgZW52aXJvbm1lbnQuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbmZuZXRsaW5rX2hvb2suY2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5mbmV0bGluayBob29rIHdvcmtzIGluIGRldGFpbCwgYW5kIHdoYXQgdGhlIGVudHJ5cG9pbnRzIGFyZSwgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgbW92aW5nIHRvd2FyZHMgYSBtb3JlIHJvYnVzdCBhbmQgY29ycmVjdCBuZXRsaW5rIGludGVyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFx0XHRnb3RvIGRvbmU7XG4gNDAxOlx0XG4gNDAyOlx0XHRvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xuIDQwMzpcdFxuIDQwNDpcdFx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiA0MDU6XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcbiA0MDY6XHRcbiA0MDc6XHRcdFx0aWYgKGN1ci1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuIDQwODpcdFx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcbiA0MDk6XHRcdFx0ZWxzZSB7XG4gNDEwOlx0XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1cixcbiA0MTE6XHRcdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4gNDEyOlx0XHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIDQxMzpcdFx0XHR9XG4gNDE0Olx0XHRcdGlmIChlcnIpXG4gNDE1Olx0XHRcdFx0YnJlYWs7XG4gNDE2Olx0XHR9XG4gNDE3Olx0XG4gNDE4Olx0ZG9uZTpcbiA0MTk6XHRcdGlmIChubHNrYi1cdTAwM2VsZW4gXHUwMDNlIDApXG4gNDIwOlx0XHRcdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4gNDIxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA0MjI6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuIDQyMzpcdFx0cmV0dXJuIG5sc2tiLVx1MDAzZWxlbjtcbiA0MjQ6XHR9XG4gNDI1Olx0XG4gNDI2Olx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gNDI3Olx0e1xuIDQyODpcdFx0Y29uc3Qgc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXHUwMDNlbmxoKTtcbiA0Mjk6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqbmxhID0gY2ItXHUwMDNlZGF0YTtcbiA0MzA6XHRcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBOVUxMO1xuIDQzMTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY2ItXHUwMDNlc2tiLVx1MDAzZXNrKTtcbiA0MzI6XHRcdHU4IGZhbWlseSA9IG5mbXNnLVx1MDAzZW5mZ2VuX2ZhbWlseTtcbiA0MzM6XHRcdGNoYXIgbmFtZVtJRk5BTVNJWl0gPSBcJiMzNDtcJiMzNDs7XG4gNDM0Olx0XHRjb25zdCB2b2lkICpoZWFkO1xuIDQzNTpcdFx0dTMyIGhvb2tudW07XG4gNDM2Olx0XG4gNDM3Olx0XHRob29rbnVtID0gbnRvaGwobmxhX2dldF9iZTMyKG5sYVtORk5MQV9IT09LX0hPT0tOVU1dKSk7XG4gNDM4Olx0XHRpZiAoaG9va251bSBcdTAwM2UgMjU1KVxuIDQzOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NDA6XHRcbiA0NDE6XHRcdGlmIChmYW1pbHkgPT0gTkZQUk9UT19ORVRERVYpIHtcbiA0NDI6XHRcdFx0aWYgKCFubGFbTkZOTEFfSE9PS19ERVZdKVxuIDQ0MzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0NDpcdFxuIDQ0NTpcdFx0XHRubGFfc3Ryc2NweShuYW1lLCBubGFbTkZOTEFfSE9PS19ERVZdLCBzaXplb2YobmFtZSkpO1xuIDQ0NjpcdFx0fVxuIDQ0NzpcdFxuIDQ0ODpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDQ0OTpcdFx0LyogTm90IGRlcmVmZXJlbmNlZDsgZm9yIGNvbnNpc3RlbmN5IGNoZWNrIG9ubHkgKi9cbiA0NTA6XHRcdGhlYWQgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgaG9va251bSwgbmV0LCBuYW1lKTtcbiA0NTE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDQ1MjpcdFxuIDQ1MzpcdFx0aWYgKGhlYWQgXHUwMDI2XHUwMDI2IElTX0VSUihoZWFkKSlcbiA0NTQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIoaGVhZCk7XG4gNDU1Olx0XG4gNDU2Olx0XHRjdHggPSBremFsbG9jX29iaigqY3R4KTtcbiA0NTc6XHRcdGlmICghY3R4KVxuIDQ1ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA0NTk6XHRcbiA0NjA6XHRcdHN0cnNjcHkoY3R4LVx1MDAzZWRldm5hbWUsIG5hbWUsIHNpemVvZihjdHgtXHUwMDNlZGV2bmFtZSkpO1xuIDQ2MTpcdFx0Y3R4LVx1MDAzZWhvb2sgPSBob29rbnVtO1xuIDQ2MjpcdFx0Y2ItXHUwMDNlZGF0YSA9IGN0eDtcbiA0NjM6XHRcbiA0NjQ6XHRcdHJldHVybiAwO1xuIDQ2NTpcdH1cbiA0NjY6XHRcbiA0Njc6XHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0b3Aoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIDQ2ODpcdHtcbiA0Njk6XHRcdGtmcmVlKGNiLVx1MDAzZWRhdGEpO1xuIDQ3MDpcdFx0cmV0dXJuIDA7XG4gNDcxOlx0fVxuIDQ3MjpcdFxuIDQ3MzpcdHN0YXRpYyBpbnQgbmZubF9ob29rX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDQ3NDpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuIDQ3NTpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pXG4gNDc2Olx0e1xuIDQ3NzpcdFx0aWYgKCFubGFbTkZOTEFfSE9PS19IT09LTlVNXSlcbiA0Nzg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDA0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHJlc3Qgb2YgYG5mbmV0bGlua19ob29rLmNgLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgTmV0ZmlsdGVyIG5ldGxpbmsgaG9vayBzeXN0ZW0gaXMgaW1wbGVtZW50ZWQuIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIG5ldGxpbmsgYXJjaGl0ZWN0dXJlLCBidXQgSSBuZWVkIHRvIG1hcCBpdCB0byB0aGlzIHNwZWNpZmljIGZpbGUgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgaGVyZT8gQXJlIHRoZXkgZGVhbGluZyB3aXRoIG1lc3NhZ2UgZm9ybWF0dGluZywgcGFyc2luZywgYW5kIGRpc3BhdGNoaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIG5ldGxpbmsgc29ja2V0LCB0aGUgaG9vayByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24gbWVjaGFuaXNtcywgYW5kIHRoZSBhY3R1YWwgcGFja2V0IHByb2Nlc3Npbmcgd2l0aGluIHRoZSBOZXRmaWx0ZXIgY29udGV4dC4gVGltZSB0byBhbmFseXplLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaGFuZGxlIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHVzZXItc3BhY2UgYXBwbGljYXRpb25zIGFuZCB0aGUga2VybmVsJiMzOTtzIE5ldGZpbHRlciBzdWJzeXN0ZW0gdGhyb3VnaCBuZXRsaW5rLiBVbmRlcnN0YW5kaW5nIHRoaXMgZmlsZSBpcyBjcml0aWNhbCBmb3IgZmlndXJpbmcgb3V0IGhvdyB0byBidWlsZCBjdXN0b20gTmV0ZmlsdGVyIG1vZHVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzA6XHRcdHJldHVybiAwO1xuIDQ3MTpcdH1cbiA0NzI6XHRcbiA0NzM6XHRzdGF0aWMgaW50IG5mbmxfaG9va19nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA0NzQ6XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbiA0NzU6XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxuIDQ3NjpcdHtcbiA0Nzc6XHRcdGlmICghbmxhW05GTkxBX0hPT0tfSE9PS05VTV0pXG4gNDc4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ3OTpcdFxuIDQ4MDpcdFx0aWYgKGluZm8tXHUwMDNlbmxoLVx1MDAzZW5sbXNnX2ZsYWdzIFx1MDAyNiBOTE1fRl9EVU1QKSB7XG4gNDgxOlx0XHRcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xuIDQ4MjpcdFx0XHRcdC5zdGFydCA9IG5mbmxfaG9va19kdW1wX3N0YXJ0LFxuIDQ4MzpcdFx0XHRcdC5kb25lID0gbmZubF9ob29rX2R1bXBfc3RvcCxcbiA0ODQ6XHRcdFx0XHQuZHVtcCA9IG5mbmxfaG9va19kdW1wLFxuIDQ4NTpcdFx0XHRcdC5tb2R1bGUgPSBUSElTX01PRFVMRSxcbiA0ODY6XHRcdFx0XHQuZGF0YSA9ICh2b2lkICopbmxhLFxuIDQ4NzpcdFx0XHR9O1xuIDQ4ODpcdFxuIDQ4OTpcdFx0XHRyZXR1cm4gbmZfbmV0bGlua19kdW1wX3N0YXJ0X3JjdShpbmZvLVx1MDAzZXNrLCBza2IsIGluZm8tXHUwMDNlbmxoLCBcdTAwMjZjKTtcbiA0OTA6XHRcdH1cbiA0OTE6XHRcbiA0OTI6XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA0OTM6XHR9XG4gNDk0Olx0XG4gNDk1Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIG5mbmxfaG9va19jYltORk5MX01TR19IT09LX01BWF0gPSB7XG4gNDk2Olx0XHRbTkZOTF9NU0dfSE9PS19HRVRdID0ge1xuIDQ5NzpcdFx0XHQuY2FsbFx0XHQ9IG5mbmxfaG9va19nZXQsXG4gNDk4Olx0XHRcdC50eXBlXHRcdD0gTkZOTF9DQl9SQ1UsXG4gNDk5Olx0XHRcdC5hdHRyX2NvdW50XHQ9IE5GTkxBX0hPT0tfTUFYLFxuIDUwMDpcdFx0XHQucG9saWN5XHRcdD0gbmZubF9ob29rX25sYV9wb2xpY3lcbiA1MDE6XHRcdH0sXG4gNTAyOlx0fTtcbiA1MDM6XHRcbiA1MDQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mbmV0bGlua19zdWJzeXN0ZW0gbmZob29rX3N1YnN5cyA9IHtcbiA1MDU6XHRcdC5uYW1lXHRcdFx0XHQ9IFwmIzM0O25maG9va1wmIzM0OyxcbiA1MDY6XHRcdC5zdWJzeXNfaWRcdFx0XHQ9IE5GTkxfU1VCU1lTX0hPT0ssXG4gNTA3Olx0XHQuY2JfY291bnRcdFx0XHQ9IE5GTkxfTVNHX0hPT0tfTUFYLFxuIDUwODpcdFx0LmNiXHRcdFx0XHQ9IG5mbmxfaG9va19jYixcbiA1MDk6XHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg4NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE5BVCBSZWdpc3RyYXRpb24gJmFtcDsgVW5yZWdpc3RyYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgTkFUIGNvcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBOZXRmaWx0ZXIgTkFUIGZ1bmN0aW9ucyBhcmUgcmVnaXN0ZXJlZCBhbmQgdW5yZWdpc3RlcmVkIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgdGhlIGBuZl9uYXRfcmVnaXN0ZXJfZm5gIGFuZCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gIGZ1bmN0aW9ucywgYXMgdGhleSBhcmUgbGlrZWx5IHRoZSBoZWFydCBvZiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlcmUuIEZyb20gdGhlcmUgSSYjMzk7bGwgYmUgYWJsZSB0byB3b3JrIGJhY2t3YXJkIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgTkFUIGZ1bmN0aW9ucyBhcmUgaG9va2VkIGludG8gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkgaGF2ZSBhIGZlZWxpbmcgSSYjMzk7bGwgYWxzbyBiZSBlbmNvdW50ZXJpbmcgc29tZSBtdXRleGVzIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjM1Olx0XHRcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XG4xMjM2Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjEyMzc6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bmZfbmF0X3Byb3RvX211dGV4KTtcbjEyMzg6XHRcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvcHNfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4xMjM5Olx0XHRcdFx0XHRwcml2ID0gbmF0X29wc1tpXS5wcml2O1xuMTI0MDpcdFx0XHRcdFx0a2ZyZWVfcmN1KHByaXYsIHJjdV9oZWFkKTtcbjEyNDE6XHRcdFx0XHR9XG4xMjQyOlx0XHRcdFx0a2ZyZWVfcmN1KG5hdF9vcHMsIHJjdSk7XG4xMjQzOlx0XHRcdFx0cmV0dXJuIHJldDtcbjEyNDQ6XHRcdFx0fVxuMTI0NTpcdFxuMTI0NjpcdFx0XHRuYXRfcHJvdG9fbmV0LVx1MDAzZW5hdF9ob29rX29wcyA9IG5hdF9vcHM7XG4xMjQ3Olx0XHR9XG4xMjQ4Olx0XG4xMjQ5Olx0XHRuYXRfb3BzID0gbmF0X3Byb3RvX25ldC1cdTAwM2VuYXRfaG9va19vcHM7XG4xMjUwOlx0XHRwcml2ID0gbmF0X29wc1tob29rbnVtXS5wcml2O1xuMTI1MTpcdFx0aWYgKFdBUk5fT05fT05DRSghcHJpdikpIHtcbjEyNTI6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XG4xMjUzOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEyNTQ6XHRcdH1cbjEyNTU6XHRcbjEyNTY6XHRcdHJldCA9IG5mX2hvb2tfZW50cmllc19pbnNlcnRfcmF3KFx1MDAyNnByaXYtXHUwMDNlZW50cmllcywgb3BzKTtcbjEyNTc6XHRcdGlmIChyZXQgPT0gMCkge1xuMTI1ODpcdFx0XHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4xMjU5Olx0XHRcdG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMmIzQzOyYjNDM7O1xuMTI2MDpcdFx0fVxuMTI2MTpcdFxuMTI2MjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XG4xMjYzOlx0XHRyZXR1cm4gcmV0O1xuMTI2NDpcdH1cbjEyNjU6XHRcbjEyNjY6XHR2b2lkIG5mX25hdF91bnJlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuMTI2NzpcdFx0XHRcdCAgdW5zaWduZWQgaW50IG9wc19jb3VudClcbjEyNjg6XHR7XG4xMjY5Olx0XHRzdHJ1Y3QgbmF0X25ldCAqbmF0X25ldCA9IG5ldF9nZW5lcmljKG5ldCwgbmF0X25ldF9pZCk7XG4xMjcwOlx0XHRzdHJ1Y3QgbmZfbmF0X2hvb2tzX25ldCAqbmF0X3Byb3RvX25ldDtcbjEyNzE6XHRcdHN0cnVjdCBuZl9uYXRfbG9va3VwX2hvb2tfcHJpdiAqcHJpdjtcbjEyNzI6XHRcdHN0cnVjdCBuZl9ob29rX29wcyAqbmF0X29wcztcbjEyNzM6XHRcdGludCBob29rbnVtID0gb3BzLVx1MDAzZWhvb2tudW07XG4xMjc0Olx0XHRpbnQgaTtcbjEyNzU6XHRcbjEyNzY6XHRcdGlmIChwZiBcdTAwM2U9IEFSUkFZX1NJWkUobmF0X25ldC1cdTAwM2VuYXRfcHJvdG9fbmV0KSlcbjEyNzc6XHRcdFx0cmV0dXJuO1xuMTI3ODpcdFxuMTI3OTpcdFx0bmF0X3Byb3RvX25ldCA9IFx1MDAyNm5hdF9uZXQtXHUwMDNlbmF0X3Byb3RvX25ldFtwZl07XG4xMjgwOlx0XG4xMjgxOlx0XHRtdXRleF9sb2NrKFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XG4xMjgyOlx0XHRpZiAoV0FSTl9PTihuYXRfcHJvdG9fbmV0LVx1MDAzZXVzZXJzID09IDApKVxuMTI4MzpcdFx0XHRnb3RvIHVubG9jaztcbjEyODQ6XHRcbjEyODU6XHRcdG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMtLTtcbjEyODY6XHRcbjEyODc6XHRcdG5hdF9vcHMgPSBuYXRfcHJvdG9fbmV0LVx1MDAzZW5hdF9ob29rX29wcztcbjEyODg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9wc19jb3VudDsgaSYjNDM7JiM0MzspIHtcbjEyODk6XHRcdFx0aWYgKG5hdF9vcHNbaV0uaG9va251bSA9PSBob29rbnVtKSB7XG4xMjkwOlx0XHRcdFx0aG9va251bSA9IGk7XG4xMjkxOlx0XHRcdFx0YnJlYWs7XG4xMjkyOlx0XHRcdH1cbjEyOTM6XHRcdH1cbjEyOTQ6XHRcdGlmIChXQVJOX09OX09OQ0UoaSA9PSBvcHNfY291bnQpKVxuMTI5NTpcdFx0XHRnb3RvIHVubG9jaztcbjEyOTY6XHRcdHByaXYgPSBuYXRfb3BzW2hvb2tudW1dLnByaXY7XG4xMjk3Olx0XHRuZl9ob29rX2VudHJpZXNfZGVsZXRlX3JhdyhcdTAwMjZwcml2LVx1MDAzZWVudHJpZXMsIG9wcyk7XG4xMjk4Olx0XHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4xMjk5Olx0XG4xMzAwOlx0XHRpZiAobmF0X3Byb3RvX25ldC1cdTAwM2V1c2VycyA9PSAwKSB7XG4xMzAxOlx0XHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmF0X29wcywgb3BzX2NvdW50KTtcbjEzMDI6XHRcbjEzMDM6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb3BzX2NvdW50OyBpJiM0MzsmIzQzOykge1xuMTMwNDpcdFx0XHRcdHByaXYgPSBuYXRfb3BzW2ldLnByaXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjI1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBOZXRmaWx0ZXIgSG9vayBSZWdpc3RyYXRpb24gYW5kIFVucmVnaXN0cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIE5ldGZpbHRlciBjb3JlIGFnYWluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXNlIGhvb2tzIGFyZSByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQgd2l0aGluIHRoZSBuZXR3b3JrIG5hbWVzcGFjZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG5ldC9uZXRmaWx0ZXIvY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGZ1bmN0aW9ucyBgX19uZl9yZWdpc3Rlcl9uZXRfaG9va2AgYW5kIGBfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2tgLiBJIHN1c3BlY3QgdGhlIGludGVyYWN0aW9ucyBzdXJyb3VuZGluZyB0aGVzZSB0d28gZnVuY3Rpb25zIGhvbGQgdGhlIGtleXMgdG8gdGhlIHByb2JsZW1zIEkmIzM5O20gY3VycmVudGx5IHdyZXN0bGluZyB3aXRoLiBJJiMzOTtsbCBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmaW5lIHBvaW50cyBvZiBob3cgbmV0ZmlsdGVyIGhhbmRsZXMgdGhlIG5ldG5zLXNwZWNpZmljIGRldGFpbHMgd2l0aGluIHRoaXMgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNDI2Olx0XHRcdFx0cmV0dXJuIGVycjtcbiA0Mjc6XHRcdFx0YnJlYWs7XG4gNDI4Olx0XHR9XG4gNDI5Olx0XG4gNDMwOlx0XHRwcCA9IG5mX2hvb2tfZW50cnlfaGVhZChuZXQsIHBmLCByZWctXHUwMDNlaG9va251bSwgcmVnLVx1MDAzZWRldik7XG4gNDMxOlx0XHRpZiAoIXBwKVxuIDQzMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MzM6XHRcbiA0MzQ6XHRcdG11dGV4X2xvY2soXHUwMDI2bmZfaG9va19tdXRleCk7XG4gNDM1Olx0XG4gNDM2Olx0XHRwID0gbmZfZW50cnlfZGVyZWZlcmVuY2UoKnBwKTtcbiA0Mzc6XHRcdG5ld19ob29rcyA9IG5mX2hvb2tfZW50cmllc19ncm93KHAsIHJlZyk7XG4gNDM4Olx0XG4gNDM5Olx0XHRpZiAoIUlTX0VSUihuZXdfaG9va3MpKSB7XG4gNDQwOlx0XHRcdGJ1bXBfaG9va19iYXNlX3NlcShuZXQpO1xuIDQ0MTpcdFx0XHRob29rc192YWxpZGF0ZShuZXdfaG9va3MpO1xuIDQ0MjpcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKnBwLCBuZXdfaG9va3MpO1xuIDQ0MzpcdFx0fVxuIDQ0NDpcdFxuIDQ0NTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mX2hvb2tfbXV0ZXgpO1xuIDQ0NjpcdFx0aWYgKElTX0VSUihuZXdfaG9va3MpKVxuIDQ0NzpcdFx0XHRyZXR1cm4gUFRSX0VSUihuZXdfaG9va3MpO1xuIDQ0ODpcdFxuIDQ0OTpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX0lOR1JFU1NcbiA0NTA6XHRcdGlmIChuZl9pbmdyZXNzX2hvb2socmVnLCBwZikpXG4gNDUxOlx0XHRcdG5ldF9pbmNfaW5ncmVzc19xdWV1ZSgpO1xuIDQ1MjpcdCNlbmRpZlxuIDQ1MzpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX0VHUkVTU1xuIDQ1NDpcdFx0aWYgKG5mX2VncmVzc19ob29rKHJlZywgcGYpKVxuIDQ1NTpcdFx0XHRuZXRfaW5jX2VncmVzc19xdWV1ZSgpO1xuIDQ1NjpcdCNlbmRpZlxuIDQ1NzpcdFx0bmZfc3RhdGljX2tleV9pbmMocmVnLCBwZik7XG4gNDU4Olx0XG4gNDU5Olx0XHRCVUdfT04ocCA9PSBuZXdfaG9va3MpO1xuIDQ2MDpcdFx0bmZfaG9va19lbnRyaWVzX2ZyZWUocCk7XG4gNDYxOlx0XHRyZXR1cm4gMDtcbiA0NjI6XHR9XG4gNDYzOlx0XG4gNDY0Olx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5OTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIE5ldGZpbHRlciBVbnJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgTmV0ZmlsdGVyIGhvb2tzIGFyZSB1bnJlZ2lzdGVyZWQsIGVzcGVjaWFsbHkgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgX19uZl91bnJlZ2lzdGVyX25ldF9ob29rYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvY29yZS5jYC4gVGhpcyBzdWdnZXN0cyBhIGNvcmUsIGludGVybmFsIGZ1bmN0aW9uLCByYXRoZXIgdGhhbiBhbiBBUEkgZXhwb3NlZCBkaXJlY3RseSB0byBtb2R1bGVzLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgYXQgdGhlIGhlYXJ0IG9mIHJlbW92aW5nIGEgaG9vayBmcm9tIGEgc3BlY2lmaWMgbmV0d29yayBuYW1lc3BhY2UsIGdpdmVuIHRoZSBgbmV0YCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaG9vayBsaXN0cywgYW55IGxvY2tzIHRoYXQgYXJlIGxpa2VseSBpbnZvbHZlZCwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHRyYWZmaWMgdGhhdCB3YXMgcHJldmlvdXNseSByb3V0ZWQgdGhyb3VnaCB0aG9zZSBob29rcy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjbGVhbnVwIG9wZXJhdGlvbnMsIHJlZmVyZW5jZSBjb3VudGluZyAoaWYgcHJlc2VudCksIGFuZCBlcnJvciBoYW5kbGluZy4gSSBhbnRpY2lwYXRlIHNlZWluZyBpbnRlcmFjdGlvbnMgd2l0aCBgbmZfaG9va19vcHNgIHN0cnVjdHVyZXMgYW5kIHBvdGVudGlhbGx5IGltcGxpY2F0aW9ucyBmb3IgY29ubnRyYWNrIG9yIG90aGVyIHN0YXRlZnVsIG1vZHVsZXMgd2hpY2ggbWF5IGJlIGRlcGVuZGVudCBvbiB0aG9zZSBob29rcy4gSSBzaG91bGQgcHJvYmFibHkgYWxzbyB2ZXJpZnkgaWYgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBmcm9tIHVucmVnaXN0ZXIgY2FsbGJhY2tzLCBvciBpZiBpdCBtaWdodCBiZSBjYWxsZWQgaW4gb3RoZXIgc2NlbmFyaW9zIChlLmcuLCBuYW1lc3BhY2UgZGVzdHJ1Y3Rpb24pLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaXMgZnVuY3Rpb24mIzM5O3MgcmVsYXRpb24gdG8gb3RoZXIgYXNzb2NpYXRlZCBmdW5jdGlvbnMgbGlrZSBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgIHRvIHVuZGVyc3RhbmQgdGhlIHdob2xlIGxpZmVjeWNsZSBvZiBhIG5ldGZpbHRlciBob29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MDA6XHRcbiA1MDE6XHRcdG11dGV4X2xvY2soXHUwMDI2bmZfaG9va19tdXRleCk7XG4gNTAyOlx0XG4gNTAzOlx0XHRwID0gbmZfZW50cnlfZGVyZWZlcmVuY2UoKnBwKTtcbiA1MDQ6XHRcdGlmIChXQVJOX09OX09OQ0UoIXApKSB7XG4gNTA1Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZuZl9ob29rX211dGV4KTtcbiA1MDY6XHRcdFx0cmV0dXJuO1xuIDUwNzpcdFx0fVxuIDUwODpcdFxuIDUwOTpcdFx0aWYgKG5mX3JlbW92ZV9uZXRfaG9vayhwLCByZWcpKSB7XG4gNTEwOlx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xuIDUxMTpcdFx0XHRpZiAobmZfaW5ncmVzc19ob29rKHJlZywgcGYpKVxuIDUxMjpcdFx0XHRcdG5ldF9kZWNfaW5ncmVzc19xdWV1ZSgpO1xuIDUxMzpcdCNlbmRpZlxuIDUxNDpcdCNpZmRlZiBDT05GSUdfTkVURklMVEVSX0VHUkVTU1xuIDUxNTpcdFx0XHRpZiAobmZfZWdyZXNzX2hvb2socmVnLCBwZikpXG4gNTE2Olx0XHRcdFx0bmV0X2RlY19lZ3Jlc3NfcXVldWUoKTtcbiA1MTc6XHQjZW5kaWZcbiA1MTg6XHRcdFx0bmZfc3RhdGljX2tleV9kZWMocmVnLCBwZik7XG4gNTE5Olx0XHRcdGJ1bXBfaG9va19iYXNlX3NlcShuZXQpO1xuIDUyMDpcdFx0fSBlbHNlIHtcbiA1MjE6XHRcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O2hvb2sgbm90IGZvdW5kLCBwZiAlZCBudW0gJWRcJiMzNDssIHBmLCByZWctXHUwMDNlaG9va251bSk7XG4gNTIyOlx0XHR9XG4gNTIzOlx0XG4gNTI0Olx0XHRwID0gX19uZl9ob29rX2VudHJpZXNfdHJ5X3NocmluayhwLCBwcCk7XG4gNTI1Olx0XHRtdXRleF91bmxvY2soXHUwMDI2bmZfaG9va19tdXRleCk7XG4gNTI2Olx0XHRpZiAoIXApXG4gNTI3Olx0XHRcdHJldHVybjtcbiA1Mjg6XHRcbiA1Mjk6XHRcdG5mX3F1ZXVlX25mX2hvb2tfZHJvcChuZXQpO1xuIDUzMDpcdFx0bmZfaG9va19lbnRyaWVzX2ZyZWUocCk7XG4gNTMxOlx0fVxuIDUzMjpcdFxuIDUzMzpcdHZvaWQgbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxuIDUzNDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4NTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIElzIHRoaXMgY29kZSByaXBlIGZvciBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgcG9zaXRpdmUgaW5kaWNhdG9ycyBhcmUgc2NyZWFtaW5nICYjMzQ7eWVzLiYjMzQ7IFdlJiMzOTtyZSBsb29raW5nIGF0IGNvZGUgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIOKAkyBhbHJlYWR5IGEgZ29vZCBzaWduLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbmN5IGlzc3VlcyBpbnZvbHZpbmcgbG9ja2xlc3MgUkNVIHJlYWRzIGFuZCBzZXF1ZW5jZSBjb3VudGVycyAoYGhvb2tfYmFzZV9zZXFgLCBgbmF0X2hvb2tfYmFzZV9zZXFgKS4gVGhlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgaG9vayByZWdpc3RlcmluZywgdW5yZWdpc3RlcmluZyBhbmQgbmV0bGluayBkdW1wcyAoYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGApIGFyZSBhbGwgaW4gcGxheSBzaW11bHRhbmVvdXNseS4gVGhlIGZhY3QgdGhhdCB0aGUgY29kZSB0b3VjaGVzIGR1bXAgcmVzdW1wdGlvbiwgYXJndW1lbnQgaW5kZXhpbmcsIHNlcXVlbmNlIGNoZWNrcywgYW5kIGNvbnNpc3RlbmN5IGNoZWNrcz8gVGhhdCYjMzk7cyBnb2xkLiBgV29ydGhGdXp6aW5nYD8gRGVmaW5pdGVseSB0cnVlLgoKTm93LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhpcyBmb3IgZnV6emluZy4gV2UgbmVlZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIEZpcnN0LCB3ZSBrbm93IHdlJiMzOTt2ZSBjb25maXJtZWQgYFdvcnRoRnV6emluZ2AgaXMgdHJ1ZS4gVGhlbiwgd2UgbmVlZCB0byBrbm93IGBFbmFibGVDb25maWdzYDoKCkxvb2tzIGxpa2Ugd2UgbmVlZDoKCiogICBgTkVURklMVEVSYCAtIHRoYXQmIzM5O3MgYSBnaXZlbi4KKiAgIGBORVRGSUxURVJfTkVUTElOS19IT09LYCAtIHdoaWNoIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9BRFZBTkNFRGAgYW5kIGBORl9UQUJMRVNgICh3aGljaCBzZWxlY3RzIGBORVRGSUxURVJfTkVUTElOS2ApLgoqICAgYE5GX05BVGAg4oCTIHRoaXMgaXMga2V5IHNpbmNlIGNoYW5nZXMgYXJlIGluIGBuZl9uYXRfY29yZS5jYC4KCkkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aG9zZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gSW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIEkgbmVlZCB0byBjb25maXJtOgoKKiAgIGBORVRGSUxURVJfTkVUTElOS19IT09LYDogVGhpcyBpbmRlZWQgYGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEYCwgYGRlcGVuZHMgb24gTkZfVEFCTEVTYCwgYW5kIGBzZWxlY3QgTkVURklMVEVSX05FVExJTktgLiBDaGVja3Mgb3V0LgoqICAgYE5GX05BVGA6IFRpbWUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZfTkFUYC4gTmVlZCB0byBsb29rIGF0IHRob3NlIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX05BVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9OTk9aWYgTkZfTkFUXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDA6Y29uZmlnIE5GX05BVF9TTk1QX0JBU0lDXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtCYXNpYyBTTk1QLUFMRyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTE3LVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6MTE4OmNvbmZpZyBORl9OQVRfUFBUUFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTE5LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX05BVF9IMzIzXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXHR0cmlzdGF0ZVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zOTg9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1Rcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDA2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQwNzpjb25maWcgTkZfTkFUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDA4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDE1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQxNjpjb25maWcgTkZfTkFUX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQxNy1cdHRyaXN0YXRlXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQyMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MjE6Y29uZmlnIE5GX05BVF9GVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MjItXHR0cmlzdGF0ZVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MjUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDI2OmNvbmZpZyBORl9OQVRfSVJDXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDI3LVx0dHJpc3RhdGVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDMwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQzMTpjb25maWcgTkZfTkFUX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzMi1cdHRyaXN0YXRlXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MzY6Y29uZmlnIE5GX05BVF9URlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDM3LVx0dHJpc3RhdGVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDQwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ0MTpjb25maWcgTkZfTkFUX1JFRElSRUNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDQyLVx0Ym9vbFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NDQ6Y29uZmlnIE5GX05BVF9NQVNRVUVSQURFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDQ1LVx0Ym9vbFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NDc6Y29uZmlnIE5GX05BVF9PVlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjU2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246CgoqKkFuYWx5emluZyBgbmV0L25ldGZpbHRlci9LY29uZmlnYCAtIEZvY3VzZWQgb24gTGluZSA0MDcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZSA0MDcgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBvZiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBzbyB0aGlzIGxpbmUgaXMgbGlrZWx5IGNvbnRyaWJ1dGluZyB0byB0aGUgYnVpbGQgcHJvY2VzcyBpbiBzb21lIHdheS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIG1vZHVsZSBiZWluZyBjb25maWd1cmVkIG9yIGVuYWJsZWQvZGlzYWJsZWQgdGhlcmUsIHRoZSBzcGVjaWZpYyBmZWF0dXJlLCBhbmQgaXRzIGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb21wb25lbnRzLiBTaW5jZSBJJiMzOTttIHZlcnkgZmFtaWxpYXIgd2l0aCBuZXRmaWx0ZXIgYW5kIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcywgSSYjMzk7bGwgYmUgcXVpY2tseSBpZGVudGlmeWluZyBrZXl3b3JkcyBhbmQgZGVwZW5kZW5jaWVzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gbGluZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O2xsIGV4cGVjdCB0byBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBuZXRmaWx0ZXIgbW9kdWxlLCBvcHRpb24sIG9yIHBlcmhhcHMgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgdGhhdCBndWlkZXMgd2hhdCBnZXRzIGluY2x1ZGVkIGluIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDU6XHRcdCAgdGhlIGVucXVldWVkIHZpYSBORk5FVExJTksuXG4gNDA2Olx0XG4gNDA3Olx0Y29uZmlnIE5GX05BVFxuIDQwODpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIHN1cHBvcnRcJiMzNDtcbiA0MDk6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4gNDEwOlx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiA0MTE6XHRcdGhlbHBcbiA0MTI6XHRcdCAgVGhlIE5BVCBvcHRpb24gYWxsb3dzIG1hc3F1ZXJhZGluZywgcG9ydCBmb3J3YXJkaW5nIGFuZCBvdGhlclxuIDQxMzpcdFx0ICBmb3JtcyBvZiBmdWxsIE5ldHdvcmsgQWRkcmVzcyBQb3J0IFRyYW5zbGF0aW9uLiBUaGlzIGNhbiBiZVxuIDQxNDpcdFx0ICBjb250cm9sbGVkIGJ5IGlwdGFibGVzLCBpcDZ0YWJsZXMgb3IgbmZ0LlxuIDQxNTpcdFxuIDQxNjpcdGNvbmZpZyBORl9OQVRfQU1BTkRBXG4gNDE3Olx0XHR0cmlzdGF0ZVxuIDQxODpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX05BVFxuIDQxOTpcdFx0ZGVmYXVsdCBORl9OQVQgXHUwMDI2XHUwMDI2IE5GX0NPTk5UUkFDS19BTUFOREFcbiA0MjA6XHRcbiA0MjE6XHRjb25maWcgTkZfTkFUX0ZUUFxuIDQyMjpcdFx0dHJpc3RhdGVcbiA0MjM6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9OQVRcbiA0MjQ6XHRcdGRlZmF1bHQgTkZfTkFUIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0tfRlRQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODIzCgkJCQkJCQlvdXRwdXQ6IDI1NQoJCQkJCQkJdGhvdWdodHM6IDExNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTmV0ZmlsdGVyIE5ldGxpbmsgSG9vayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5pdGlhbCBjaGVjayBvZiBgTkVURklMVEVSX05FVExJTktfSE9PS2AgYW5kIHJlbGF0ZWQgb3B0aW9ucyB0ZWxscyBtZSB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV0bGluay1iYXNlZCBuZXRmaWx0ZXIgaG9va3MuIEkgc2hvdWxkIGhhdmUgYWxzbyB2ZXJpZmllZCBhbGwgdGhlIHJlbGF0ZWQgbmV0ZmlsdGVyIG9wdGlvbnMgZm9yIGZ1bGwgY292ZXJhZ2UsIGFuZCBpdCBsb29rcyBsaWtlIEkgZGlkOiBgTkVURklMVEVSYCwgYE5FVEZJTFRFUl9BRFZBTkNFRGAsIGBORl9UQUJMRVNgLCBgTkVURklMVEVSX05FVExJTktgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9OQVRgLiBHb29kLiBOb3cgdG8gcGlucG9pbnQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpbXBhY3RlZC4KCk15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLiBMb29raW5nIGF0IHRoZSBjb2RlLCBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcyBrZXk6IGBuZm5sX2hvb2tfZHVtcGAsIGBuZm5sX2hvb2tfZHVtcF9uYXRgLCBgbmZubF9ob29rX2dldGAsIGBuZm5sX2hvb2tfZHVtcF9zdGFydGAsIGBuZl9uYXRfcmVnaXN0ZXJfZm5gLCBgbmZfbmF0X3VucmVnaXN0ZXJfZm5gLCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tgLCBgbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AsIGBfX25mX3JlZ2lzdGVyX25ldF9ob29rYCwgYW5kIGBfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2tgLiBJIGNoZWNrZWQsIGJ1dCBub25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdWJpcXVpdG91cyBmdW5jdGlvbnMgc3VjaCBhcyBtZW1vcnkgYWxsb2NhdG9ycyBvciBwYWdlIGZhdWx0IGhhbmRsZXJzLiBUaGV5JiMzOTtyZSBhbGwgdmVyeSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBuZXRmaWx0ZXIgYW5kIG5ldGxpbmssIHdoaWNoIGlzIHdoYXQgSSBleHBlY3QuIEkgcmUtY2hlY2tlZCB0aGVtIHRvIGJlIGNlcnRhaW4uCgpJIHRoZW4gZGlkIGEgbW9yZSB0aG9yb3VnaCBkaWZmIGNoZWNrLCB3aGljaCBjb25maXJtcyB0aGVzZSBhcmUgaW5kZWVkIHRoZSBhbHRlcmVkIGZ1bmN0aW9ucyBpbiBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYCwgYG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY2AgYW5kIGBuZXQvbmV0ZmlsdGVyL2NvcmUuY2AsIHBsdXMgdGhlIGFkZGVkIGZpZWxkcyBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgaW4gYGluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oYC4gSXQgYWxzbyBnYXZlIG1lIGBuZXRmaWx0ZXJfbmV0X2luaXRgIGluIGBjb3JlLmNgIGFuZCBhIHN0cnVjdCBpbiBgbmZuZXRsaW5rX2hvb2suY2AuIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIGV2ZXJ5dGhpbmcgbm93LgoKTm93LCBsZXQmIzM5O3MgcmV2aWV3IG15IHJlYXNvbmluZy4gVGhlIHBhdGNoIGlzIGFib3V0IGludHJvZHVjaW5nIHNlcXVlbmNlIGNvdW50ZXJzIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZHVyaW5nIG5ldGxpbmsgbmV0ZmlsdGVyIGhvb2sgZHVtcGluZy4gSXQgYWZmZWN0cyBob29rIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24sIGFzIHdlbGwgYXMgdGhlIHJlc3RhcnQgYW5kIGNvbnNpc3RlbmN5IGNoZWNraW5nIGxvZ2ljLiBUaGlzIGltcGFjdHMgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgc29ja2V0cyBhbmQgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMsIG1ha2luZyBpdCBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0IGNvbmN1cnJlbmN5IHJlZ3Jlc3Npb25zLCBidWdzIGluIHJlc3RhcnQgaGFuZGxpbmcsIGFuZCBjb25zaXN0ZW5jeSBjaGVjayBlcnJvcnMuCgpTbywgdG8gcmVjYXA6IG15IGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0LCBteSBmb2N1cyBzeW1ib2xzIGFyZSBzcG90IG9uLCBhbmQgbXkgcmVhc29uaW5nIGlzIHNvdW5kLiBOb3cgaXQmIzM5O3MgdGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19IT09LJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZubF9ob29rX2R1bXAmIzM0OywKICAgICYjMzQ7bmZubF9ob29rX2R1bXBfbmF0JiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O25mbmxfaG9va19nZXQmIzM0OywKICAgICYjMzQ7bmZfbmF0X3JlZ2lzdGVyX2ZuJiMzNDssCiAgICAmIzM0O25mX25hdF91bnJlZ2lzdGVyX2ZuJiMzNDssCiAgICAmIzM0O25mX3JlZ2lzdGVyX25ldF9ob29rJiMzNDssCiAgICAmIzM0O25mX3VucmVnaXN0ZXJfbmV0X2hvb2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2VxdWVuY2UgdHJhY2tpbmcgKGhvb2tfYmFzZV9zZXEgYW5kIG5hdF9ob29rX2Jhc2Vfc2VxKSB0byBkZXRlY3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGR1cmluZyBuZXRsaW5rIGR1bXAgb2YgbmV0ZmlsdGVyIGFuZCBOQVQgaG9va3MsIHJlZmFjdG9yaW5nIHRoZSBkdW1wIGl0ZXJhdGlvbiBhbmQgcmVzdGFydC9jb25zaXN0ZW5jeSB2ZXJpZmljYXRpb24gaW4gbmZuZXRsaW5rX2hvb2suYywgYW5kIGJ1bXBpbmcgdGhlIHNlcXVlbmNlIG51bWJlcnMgdXBvbiBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBpbiBjb3JlLmMgYW5kIG5mX25hdF9jb3JlLmMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgYW5kIG5ldGZpbHRlciBob29rIG1hbmFnZW1lbnQgbG9naWMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBuZXRsaW5rIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19IT09LJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfTkFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZubF9ob29rX2R1bXAmIzM0OywKICAgICYjMzQ7bmZubF9ob29rX2R1bXBfbmF0JiMzNDssCiAgICAmIzM0O25mbmxfaG9va19kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O25mbmxfaG9va19nZXQmIzM0OywKICAgICYjMzQ7bmZfbmF0X3JlZ2lzdGVyX2ZuJiMzNDssCiAgICAmIzM0O25mX25hdF91bnJlZ2lzdGVyX2ZuJiMzNDssCiAgICAmIzM0O25mX3JlZ2lzdGVyX25ldF9ob29rJiMzNDssCiAgICAmIzM0O25mX3VucmVnaXN0ZXJfbmV0X2hvb2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2VxdWVuY2UgdHJhY2tpbmcgKGhvb2tfYmFzZV9zZXEgYW5kIG5hdF9ob29rX2Jhc2Vfc2VxKSB0byBkZXRlY3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGR1cmluZyBuZXRsaW5rIGR1bXAgb2YgbmV0ZmlsdGVyIGFuZCBOQVQgaG9va3MsIHJlZmFjdG9yaW5nIHRoZSBkdW1wIGl0ZXJhdGlvbiBhbmQgcmVzdGFydC9jb25zaXN0ZW5jeSB2ZXJpZmljYXRpb24gaW4gbmZuZXRsaW5rX2hvb2suYywgYW5kIGJ1bXBpbmcgdGhlIHNlcXVlbmNlIG51bWJlcnMgdXBvbiBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBpbiBjb3JlLmMgYW5kIG5mX25hdF9jb3JlLmMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgYW5kIG5ldGZpbHRlciBob29rIG1hbmFnZW1lbnQgbG9naWMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBuZXRsaW5rIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgKSB0byBuZXRmaWx0ZXIgYW5kIE5BVCBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiB0byBwcm92aWRlIGR1bXAgY29uc2lzdGVuY3kgZGV0ZWN0aW9uIGluIGBuZm5ldGxpbmtfaG9vay5jYC5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIHN0cnVjdHVyZSBidWZmZXIgbGVuZ3RocyBpbiBhIHdheSB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIE5ldGxpbmsgY2FsbGJhY2tzIGBjYi1cdTAwM2VhcmdzYCBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0sIGFuZCBgc3RydWN0IG5ldG5zX25mYCBzZXF1ZW5jZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdCgpYC5cbi0gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGRlcmVmZXJlbmNpbmcsIGxpc3QgdHJhdmVyc2FsIGJvdW5kcywgb3IgaG9vayBlbnRyeSBsaWZlY3ljbGVzLCB3aGljaCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMDlkNTg3OGU4ZGNkNDhmMWEwYTM5YjYzZDYxZTljNmI5ZWNiYTMxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAyMjo0NzoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgKaW5kZXggYTZhMGJmNGEyNDdlNS4uN2ZkNzgzOTRkMWU3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmgKQEAgLTMzLDUgJiM0MzszMyw3IEBAIHN0cnVjdCBuZXRuc19uZiB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfREVGUkFHX0lQVjYpCiAJdW5zaWduZWQgaW50IGRlZnJhZ19pcHY2X3VzZXJzOwogI2VuZGlmCiYjNDM7CXVuc2lnbmVkIGludCBob29rX2Jhc2Vfc2VxOwomIzQzOwl1bnNpZ25lZCBpbnQgbmF0X2hvb2tfYmFzZV9zZXE7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCmluZGV4IDY3NWExMDM0YjM0MDAuLmEyODRiMzI0MTIxMWQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCkBAIC0zODYsNiAmIzQzOzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuZl9zdGF0aWNfa2V5X2RlYyhjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgaW50IHBmKQogI2VuZGlmCiB9CiAKJiM0MztzdGF0aWMgdm9pZCBidW1wX2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC0mZ3Q7bmYuaG9va19iYXNlX3NlcSk7CiYjNDM7CiYjNDM7CXdoaWxlICgmIzQzOyYjNDM7YmFzZV9zZXEgPT0gMCkKJiM0MzsJCTsKJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtuZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsCiAJCQkJICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZykKIHsKQEAgLTQyOCw2ICYjNDM7NDM3LDcgQEAgc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLAogCW5ld19ob29rcyA9IG5mX2hvb2tfZW50cmllc19ncm93KHAsIHJlZyk7CiAKIAlpZiAoIUlTX0VSUihuZXdfaG9va3MpKSB7CiYjNDM7CQlidW1wX2hvb2tfYmFzZV9zZXEobmV0KTsKIAkJaG9va3NfdmFsaWRhdGUobmV3X2hvb2tzKTsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKCpwcCwgbmV3X2hvb2tzKTsKIAl9CkBAIC01MDYsNiAmIzQzOzUxNiw3IEBAIHN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZiwKIAkJCW5ldF9kZWNfZWdyZXNzX3F1ZXVlKCk7CiAjZW5kaWYKIAkJbmZfc3RhdGljX2tleV9kZWMocmVnLCBwZik7CiYjNDM7CQlidW1wX2hvb2tfYmFzZV9zZXEobmV0KTsKIAl9IGVsc2UgewogCQlXQVJOX09OQ0UoMSwgJiMzNDtob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkJiMzNDssIHBmLCByZWctJmd0O2hvb2tudW0pOwogCX0KQEAgLTc4NCw2ICYjNDM7Nzk1LDggQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5ldGZpbHRlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiAJCXJldHVybiAtRU5PTUVNOwogCX0KICNlbmRpZgomIzQzOwluZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEgPSAxOwomIzQzOwluZXQtJmd0O25mLm5hdF9ob29rX2Jhc2Vfc2VxID0gMTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IDhhYzMyNmUxZWI1YmEuLmZmMmNiYThkZjg4NjEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKQEAgLTExNjAsNiAmIzQzOzExNjAsMTUgQEAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsCiB9CiAjZW5kaWYKIAomIzQzO3N0YXRpYyB2b2lkIGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC0mZ3Q7bmYubmF0X2hvb2tfYmFzZV9zZXEpOwomIzQzOwomIzQzOwl3aGlsZSAoJiM0MzsmIzQzO2Jhc2Vfc2VxID09IDApCiYjNDM7CQk7CiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7bmV0LSZndDtuZi5uYXRfaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgbmZfY3RfaGVscGVyX2V4cGVjdGZuIGZvbGxvd19tYXN0ZXJfbmF0ID0gewogCS5uYW1lCQk9ICYjMzQ7bmF0LWZvbGxvdy1tYXN0ZXImIzM0OywKIAkuZXhwZWN0Zm4JPSBuZl9uYXRfZm9sbG93X21hc3RlciwKQEAgLTEyNDUsOCAmIzQzOzEyNTQsMTAgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywKIAl9CiAKIAlyZXQgPSBuZl9ob29rX2VudHJpZXNfaW5zZXJ0X3JhdygmYW1wO3ByaXYtJmd0O2VudHJpZXMsIG9wcyk7Ci0JaWYgKHJldCA9PSAwKQomIzQzOwlpZiAocmV0ID09IDApIHsKJiM0MzsJCWJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTsKIAkJbmF0X3Byb3RvX25ldC0mZ3Q7dXNlcnMmIzQzOyYjNDM7OwomIzQzOwl9CiAKIAltdXRleF91bmxvY2soJmFtcDtuZl9uYXRfcHJvdG9fbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0xMjg0LDYgJiM0MzsxMjk1LDcgQEAgdm9pZCBuZl9uYXRfdW5yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywKIAkJZ290byB1bmxvY2s7CiAJcHJpdiA9IG5hdF9vcHNbaG9va251bV0ucHJpdjsKIAluZl9ob29rX2VudHJpZXNfZGVsZXRlX3JhdygmYW1wO3ByaXYtJmd0O2VudHJpZXMsIG9wcyk7CiYjNDM7CWJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEobmV0KTsKIAogCWlmIChuYXRfcHJvdG9fbmV0LSZndDt1c2VycyA9PSAwKSB7CiAJCW5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmF0X29wcywgb3BzX2NvdW50KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYwppbmRleCA5NTAwNWU5YTYwNjY4Li4yMWE3NTkxNjhjMzg0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jCkBAIC01NCw3ICYjNDM7NTQsNiBAQCBzdGF0aWMgaW50IG5mX25ldGxpbmtfZHVtcF9zdGFydF9yY3Uoc3RydWN0IHNvY2sgKm5sc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAKIHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhIHsKIAljaGFyIGRldm5hbWVbSUZOQU1TSVpdOwotCXVuc2lnbmVkIGxvbmcgaGVhZHY7CiAJdTggaG9vazsKIH07CiAKQEAgLTMzOCwyNyAmIzQzOzMzNyw0OCBAQCBuZm5sX2hvb2tfZW50cmllc19oZWFkKHU4IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpkZQogfQogCiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LAotCQkJICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsCi0JCQkgICAgICBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgc2VxKQomIzQzOwkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKJiM0MzsJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSkKIHsKIAlzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtJmd0O3ByaXY7Ci0Jc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LSZndDtlbnRyaWVzKTsKJiM0MzsJc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLSZndDtkYXRhOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChubHNrYi0mZ3Q7c2spOwogCXN0cnVjdCBuZl9ob29rX29wcyAqKm5hdF9vcHM7Ci0JaW50IGksIGVycjsKJiM0MzsJdW5zaWduZWQgaW50IGkgPSBjYi0mZ3Q7YXJnc1sxXTsKJiM0MzsJc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTsKJiM0MzsJdW5zaWduZWQgaW50IGJhc2Vfc2VxOwomIzQzOwlpbnQgZXJyID0gMDsKIAomIzQzOwliYXNlX3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtuZXQtJmd0O25mLm5hdF9ob29rX2Jhc2Vfc2VxKTsKJiM0MzsKJiM0MzsJZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LSZndDtlbnRyaWVzKTsKIAlpZiAoIWUpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byBvdXQ7CiAKIAluYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBlLSZndDtudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykgewotCQllcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgbmF0X29wc1tpXSwKLQkJCQkJIG9wcy0mZ3Q7cHJpb3JpdHksIGZhbWlseSwgc2VxKTsKJiM0MzsJZm9yICg7IGkgJmx0OyBlLSZndDtudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsCiYjNDM7CQkJCQkgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLAomIzQzOwkJCQkJIG9wcy0mZ3Q7cHJpb3JpdHksIGZhbWlseSwKJiM0MzsJCQkJCSBjYi0mZ3Q7bmxoLSZndDtubG1zZ19zZXEpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKJiM0MzsJCQlicmVhazsKJiM0MzsKIAl9Ci0JcmV0dXJuIDA7CiYjNDM7b3V0OgomIzQzOwlpZiAoIWVycikgewomIzQzOwkJaSA9IDA7CiYjNDM7CX0KJiM0MzsJY2ItJmd0O2FyZ3NbMV0gPSBpOwomIzQzOwomIzQzOwlpZiAoY2ItJmd0O2FyZ3NbMl0gJmFtcDsmYW1wOyBiYXNlX3NlcSAhPSBjYi0mZ3Q7YXJnc1syXSkgewomIzQzOwkJY2ItJmd0O3NlcSYjNDM7JiM0Mzs7CiYjNDM7CQllcnIgPSAtRUlOVFI7CiYjNDM7CX0KJiM0MzsJY2ItJmd0O2FyZ3NbMl0gPSBiYXNlX3NlcTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCkBAIC0zNzMsMzUgJiM0MzszOTMsMzEgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsCiAJdW5zaWduZWQgaW50IGkgPSBjYi0mZ3Q7YXJnc1swXTsKIAogCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJY2ItJmd0O3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtuZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEpOwogCiAJZSA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBjdHgtJmd0O2hvb2ssIG5ldCwgY3R4LSZndDtkZXZuYW1lKTsKLQlpZiAoIWUpCiYjNDM7CWlmICghZSB8fCBJU19FUlIoZSkpCiAJCWdvdG8gZG9uZTsKIAotCWlmIChJU19FUlIoZSkpIHsKLQkJY2ItJmd0O3NlcSYjNDM7JiM0Mzs7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpZSAhPSBjdHgtJmd0O2hlYWR2IHx8IGkgJmd0Oz0gZS0mZ3Q7bnVtX2hvb2tfZW50cmllcykKLQkJY2ItJmd0O3NlcSYjNDM7JiM0Mzs7Ci0KIAlvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpOwogCiAJZm9yICg7IGkgJmx0OyBlLSZndDtudW1faG9va19lbnRyaWVzOyBpJiM0MzsmIzQzOykgewotCQlpZiAob3BzW2ldLSZndDtob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKQotCQkJZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjdHgsIG9wc1tpXSwgZmFtaWx5LAotCQkJCQkJIGNiLSZndDtubGgtJmd0O25sbXNnX3NlcSk7Ci0JCWVsc2UKLQkJCWVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sCi0JCQkJCQkgb3BzW2ldLSZndDtwcmlvcml0eSwgZmFtaWx5LAomIzQzOwkJY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTsKJiM0MzsKJiM0MzsJCWlmIChjdXItJmd0O2hvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpCiYjNDM7CQkJZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjYiwgY3VyLCBmYW1pbHkpOwomIzQzOwkJZWxzZSB7CiYjNDM7CQkJZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1ciwKJiM0MzsJCQkJCQkgY3VyLSZndDtwcmlvcml0eSwgZmFtaWx5LAogCQkJCQkJIGNiLSZndDtubGgtJmd0O25sbXNnX3NlcSk7CiYjNDM7CQl9CiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9CiAKIGRvbmU6Ci0JbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTsKJiM0MzsJaWYgKG5sc2tiLSZndDtsZW4gJmd0OyAwKQomIzQzOwkJbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAljYi0mZ3Q7YXJnc1swXSA9IGk7CiAJcmV0dXJuIG5sc2tiLSZndDtsZW47CkBAIC00NDIsMTAgJiM0Mzs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzdHJzY3B5KGN0eC0mZ3Q7ZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC0mZ3Q7ZGV2bmFtZSkpOwotCWN0eC0mZ3Q7aGVhZHYgPSAodW5zaWduZWQgbG9uZyloZWFkOwogCWN0eC0mZ3Q7aG9vayA9IGhvb2tudW07Ci0KLQljYi0mZ3Q7c2VxID0gMTsKIAljYi0mZ3Q7ZGF0YSA9IGN0eDsKIAogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXRmaWx0ZXIgUGF0Y2g6IFRoaW5raW5nIFRocm91Z2ggdGhlIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpbXBhY3RzIG5ldGZpbHRlciBjb3JlLCBzcGVjaWZpY2FsbHkgYG5mX25hdF9jb3JlYCwgYW5kIHRoYXQgYG5mbmV0bGlua19ob29rLmNgIGZpbGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGNoYW5nZXMgdG8gaG9vayByZWdpc3RyYXRpb24gYW5kIG5ldGxpbmsgZHVtcGluZyAtIGludGVyZXN0aW5nLiYjMzQ7CgpGaXJzdCwgSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCB0byBgc3RydWN0IG5ldG5zX25mYC4gTXkgZ3Vlc3MgaXMgdGhpcyBpcyBhYm91dCB2ZXJzaW9uaW5nIG9yIHN5bmNocm9uaXphdGlvbiBmb3IgY2hhbmdlcyB0byB0aGUgaG9vayByZWdpc3RyYXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBzZXR0aW5nIHRoZSBzdGFnZSBmb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gY29uY3VycmVudCBhY2Nlc3Mgb3IgZGF0YSBjb25zaXN0ZW5jeS4gSW5jcmVtZW50aW5nIHRoZXNlIHNlcXVlbmNlIG51bWJlcnMgb24gcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uLi4uIHl1cCwgdGhhdCByZWluZm9yY2VzIG15IGFzc3VtcHRpb24gYWJvdXQgY29uY3VycmVuY3kgY29udHJvbC4KCk5vdywgaW50byBgbmZuZXRsaW5rX2hvb2suY2AuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBtb3JlIGNvbmNyZXRlLiBUaGUgbmV0bGluayBkdW1waW5nIG1lY2hhbmlzbSBmb3IgbmV0ZmlsdGVyIGhvb2tzIChgbmZubF9ob29rX2R1bXBgLCBgbmZubF9ob29rX2R1bXBfbmF0YCkgaXMgd2hhdCYjMzk7cyBiZWluZyB0d2Vha2VkLiBVc2luZyBgY2ItJmd0O2FyZ3NbMV1gIGZvciBOQVQgaG9vayBkdW1wIGluZGV4aW5nIGlzIG5vdGFibGUsIGFsc28gdHJhY2tpbmcgYGJhc2Vfc2VxYCwgYW5kIGhhbmRsaW5nIGBjYi0mZ3Q7c2VxYC4gSSBzdXNwZWN0IHRoaXMgaXMgYWJvdXQgZmlsdGVyaW5nIG91dCBkdXBsaWNhdGVzIG9yIGVuc3VyaW5nIHRoYXQgdGhlIGR1bXAgcmVmbGVjdHMgdGhlIHN0YXRlIGF0IGEgcGFydGljdWxhciBwb2ludCBpbiB0aW1lLiBJdCBtaWdodCBiZSB1c2VkIHRvIGltcGxlbWVudCBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgdGhlIGhvb2sgY29uZmlndXJhdGlvbiBvciByZWdpc3RyYXRpb24gc3RhdGUuCgpUaGUgbGluZSBgY2ItJmd0O3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtuZXQtJmd0O25mLmhvb2tfYmFzZV9zZXEpYCBpbiBgbmZubF9ob29rX2R1bXBgIG1ha2VzIGl0IGV2ZW4gY2xlYXJlciDigJMgYWNxdWlyaW5nIHRoZSBzZXF1ZW5jZSBudW1iZXIgd2l0aCBgc21wX2xvYWRfYWNxdWlyZWAgaW1wbGllcyB0aGlzIGlzIGZvciBtZW1vcnkgb3JkZXJpbmcgb3Igc3luY2hyb25pemF0aW9uLCBwZXJoYXBzIHRvIGd1YXJhbnRlZSBjb25zaXN0ZW5jeSBpbiBhIG11bHRpdGhyZWFkZWQgZW52aXJvbm1lbnQuIFRoZSB1cGRhdGVzIHVzaW5nIGBSRUFEX09OQ0VgIHJlaW5mb3JjZSBteSB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudCwgYW5kIHRoZSByZW1vdmFsIG9mIGBoZWFkdmAgaXMgcHJvYmFibHkgc29tZSBraW5kIG9mIG9wdGltaXphdGlvbi4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBpbiBgbmZuZXRsaW5rX2hvb2suY2AuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXMgYmVpbmcgZHVtcGVkIGludG8gdGhlIG5ldGxpbmsgc29ja2V0IGJ1ZmZlciBhbmQgaG93IGBuZm5sX2hvb2tfZHVtcF9vbmVgIG9wZXJhdGVzLiBJJiMzOTtsbCBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhlc2Ugc2VxdWVuY2UgbnVtYmVycyBhcmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBob29rIGRhdGEgc3RydWN0dXJlcyB0byBlbnN1cmUgdGhhdCBkdW1wcyBhcmUgY29uc2lzdGVudCBhbmQgY29tcGxldGUsIGVzcGVjaWFsbHkgd2hlbiBoYW5kbGluZyBjb25jdXJyZW50IGhvb2sgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBhY3Rpdml0aWVzLiBJdCBpcyBhbHNvIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCB3aGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gaXMgY29udGFpbmVkIGluIHRoYXQgYXJndW1lbnQgYGNiLSZndDthcmdzWzFdYCwgYXMgaXQgaXMgbGlrZWx5IGNydWNpYWwgZm9yIHRoZSBpbmRleGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMjI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZubF9ob29rX2R1bXBfb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTE1OD1zdGF0aWMgaW50IG5mbmxfaG9va19wdXRfbmZ0X2Z0X2luZm8oc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0xODktXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6MTkwOnN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfb25lKHN0cnVjdCBza19idWZmICpubHNrYixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0xOTEtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9MzM5PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzYwLVx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozNjE6XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTM2Mi1cdFx0XHRcdFx0IFJFQURfT05DRShuYXRfb3BzW2ldKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9Mzg0PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy00MDktXHRcdGVsc2Uge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjQxMDpcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTQxMS1cdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIG5mbmV0bGlua19ob29rLmM6IFRoZSBEdW1wIE9wZXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYCBtb2R1bGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBuZm5sX2hvb2tfZHVtcF9vbmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBuZXRmaWx0ZXIgbmV0bGluayBob29rcyBhcmUgZW51bWVyYXRlZCBhbmQgcHJlc2VudGVkLCBzbyB0aGUgZHVtcCBmdW5jdGlvbmFsaXR5IGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIHN0cnVjdHVyZXMgYXJlIHRyYW5zbGF0ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlcyB0aGF0IGFyZSBzZW50IG91dC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGZ1bmN0aW9uIGhhbmRsZXMgZHVtcGluZyBhIHNpbmdsZSBob29rIHJlZ2lzdHJhdGlvbiwgd2hpY2ggbGlrZWx5IG1lYW5zIHRyYXZlcnNpbmcgYSBsaXN0IG9yIHRyZWUgb2YgcmVnaXN0ZXJlZCBob29rcyBhbmQgZm9ybWF0dGluZyB0aGUgZGF0YSBpbnRvIHRoZSBhcHByb3ByaWF0ZSBuZXRsaW5rIGF0dHJpYnV0ZXMuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaXRlcmF0b3IgdGhhdCBwcmVzZW50cyB0aGUgZGF0YSBvdmVyIG5ldGxpbmsuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgZHVyaW5nIHRoZSBkdW1wIHByb2Nlc3MsIHRvbyDigJMgbG9ja2luZywgUkNVLCB3aGF0ZXZlciBtZWNoYW5pc20gdGhleSBlbXBsb3kuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGFuZCB0aGUgYmFzaWMgbWVjaGFuaWNzIG9mIGhvdyBob29rIGluZm9ybWF0aW9uIGlzIHJldHJpZXZlZCBhbmQgc2hhcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHRcdFx0XHRcdCAgZnQtXHUwMDNlbmFtZSwgZnQtXHUwMDNldGFibGUtXHUwMDNlZmFtaWx5KTtcbiAxODE6XHRcdGlmIChyZXQpIHtcbiAxODI6XHRcdFx0bmxhX25lc3RfY2FuY2VsKG5sc2tiLCBuZXN0KTtcbiAxODM6XHRcdFx0cmV0dXJuIHJldDtcbiAxODQ6XHRcdH1cbiAxODU6XHRcbiAxODY6XHRcdG5sYV9uZXN0X2VuZChubHNrYiwgbmVzdCk7XG4gMTg3Olx0XHRyZXR1cm4gMDtcbiAxODg6XHR9XG4gMTg5Olx0XG4gMTkwOlx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIDE5MTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsXG4gMTkyOlx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsIGludCBwcmlvcml0eSxcbiAxOTM6XHRcdFx0XHQgICAgICBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgc2VxKVxuIDE5NDpcdHtcbiAxOTU6XHRcdHUxNiBldmVudCA9IG5mbmxfbXNnX3R5cGUoTkZOTF9TVUJTWVNfSE9PSywgTkZOTF9NU0dfSE9PS19HRVQpO1xuIDE5NjpcdFx0dW5zaWduZWQgaW50IHBvcnRpZCA9IE5FVExJTktfQ0Iobmxza2IpLnBvcnRpZDtcbiAxOTc6XHRcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuIDE5ODpcdFx0aW50IHJldCA9IC1FTVNHU0laRTtcbiAxOTk6XHRcdHUzMiBob29rbnVtO1xuIDIwMDpcdCNpZmRlZiBDT05GSUdfS0FMTFNZTVNcbiAyMDE6XHRcdGNoYXIgc3ltW0tTWU1fU1lNQk9MX0xFTl07XG4gMjAyOlx0XHRjaGFyICptb2R1bGVfbmFtZTtcbiAyMDM6XHQjZW5kaWZcbiAyMDQ6XHRcdG5saCA9IG5mbmxfbXNnX3B1dChubHNrYiwgcG9ydGlkLCBzZXEsIGV2ZW50LFxuIDIwNTpcdFx0XHRcdCAgIE5MTV9GX01VTFRJLCBmYW1pbHksIE5GTkVUTElOS19WMCwgMCk7XG4gMjA2Olx0XHRpZiAoIW5saClcbiAyMDc6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjA4Olx0XG4gMjA5Olx0I2lmZGVmIENPTkZJR19LQUxMU1lNU1xuIDIxMDpcdFx0cmV0ID0gc25wcmludGYoc3ltLCBzaXplb2Yoc3ltKSwgXCYjMzQ7JXBzXCYjMzQ7LCBvcHMtXHUwMDNlaG9vayk7XG4gMjExOlx0XHRpZiAocmV0IFx1MDAzZT0gc2l6ZW9mKHN5bSkpIHtcbiAyMTI6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiAyMTM6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjE0Olx0XHR9XG4gMjE1Olx0XG4gMjE2Olx0XHRtb2R1bGVfbmFtZSA9IHN0cnN0cihzeW0sIFwmIzM0OyBbXCYjMzQ7KTtcbiAyMTc6XHRcdGlmIChtb2R1bGVfbmFtZSkge1xuIDIxODpcdFx0XHRjaGFyICplbmQ7XG4gMjE5Olx0XG4gMjIwOlx0XHRcdCptb2R1bGVfbmFtZSA9ICYjMzk7XFwwJiMzOTs7XG4gMjIxOlx0XHRcdG1vZHVsZV9uYW1lICYjNDM7PSAyO1xuIDIyMjpcdFx0XHRlbmQgPSBzdHJjaHIobW9kdWxlX25hbWUsICYjMzk7XSYjMzk7KTtcbiAyMjM6XHRcdFx0aWYgKGVuZCkge1xuIDIyNDpcdFx0XHRcdCplbmQgPSAwO1xuIDIyNTpcdFxuIDIyNjpcdFx0XHRcdHJldCA9IG5sYV9wdXRfc3RyaW5nKG5sc2tiLCBORk5MQV9IT09LX01PRFVMRV9OQU1FLCBtb2R1bGVfbmFtZSk7XG4gMjI3Olx0XHRcdFx0aWYgKHJldClcbiAyMjg6XHRcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDIyOTpcdFx0XHR9XG4gMjMwOlx0XHR9XG4gMjMxOlx0XG4gMjMyOlx0XHRyZXQgPSBubGFfcHV0X3N0cmluZyhubHNrYiwgTkZOTEFfSE9PS19GVU5DVElPTl9OQU1FLCBzeW0pO1xuIDIzMzpcdFx0aWYgKHJldClcbiAyMzQ6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gMjM1Olx0I2VuZGlmXG4gMjM2Olx0XG4gMjM3Olx0XHRpZiAob3BzLVx1MDAzZXBmID09IE5GUFJPVE9fSU5FVCBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZWhvb2tudW0gPT0gTkZfSU5FVF9JTkdSRVNTKVxuIDIzODpcdFx0XHRob29rbnVtID0gTkZfTkVUREVWX0lOR1JFU1M7XG4gMjM5Olx0XHRlbHNlXG4gMjQwOlx0XHRcdGhvb2tudW0gPSBvcHMtXHUwMDNlaG9va251bTtcbiAyNDE6XHRcbiAyNDI6XHRcdHJldCA9IG5sYV9wdXRfYmUzMihubHNrYiwgTkZOTEFfSE9PS19IT09LTlVNLCBodG9ubChob29rbnVtKSk7XG4gMjQzOlx0XHRpZiAocmV0KVxuIDI0NDpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAyNDU6XHRcbiAyNDY6XHRcdHJldCA9IG5sYV9wdXRfYmUzMihubHNrYiwgTkZOTEFfSE9PS19QUklPUklUWSwgaHRvbmwocHJpb3JpdHkpKTtcbiAyNDc6XHRcdGlmIChyZXQpXG4gMjQ4Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDI0OTpcdFxuIDI1MDpcdFx0c3dpdGNoIChvcHMtXHUwMDNlaG9va19vcHNfdHlwZSkge1xuIDI1MTpcdFx0Y2FzZSBORl9IT09LX09QX05GX1RBQkxFUzpcbiAyNTI6XHRcdFx0cmV0ID0gbmZubF9ob29rX3B1dF9uZnRfY2hhaW5faW5mbyhubHNrYiwgY3R4LCBzZXEsIG9wcy1cdTAwM2Vwcml2KTtcbiAyNTM6XHRcdFx0YnJlYWs7XG4gMjU0Olx0XHRjYXNlIE5GX0hPT0tfT1BfQlBGOlxuIDI1NTpcdFx0XHRyZXQgPSBuZm5sX2hvb2tfcHV0X2JwZl9wcm9nX2luZm8obmxza2IsIGN0eCwgc2VxLCBvcHMtXHUwMDNlcHJpdik7XG4gMjU2Olx0XHRcdGJyZWFrO1xuIDI1NzpcdFx0Y2FzZSBORl9IT09LX09QX05GVF9GVDpcbiAyNTg6XHRcdFx0cmV0ID0gbmZubF9ob29rX3B1dF9uZnRfZnRfaW5mbyhubHNrYiwgY3R4LCBzZXEsIG9wcy1cdTAwM2Vwcml2KTtcbiAyNTk6XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDIyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MTYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0cywgcmVuZGVyZWQgYXMgaWYgSSBhbSBleGFtaW5pbmcgdGhlbToKCioqRGlzc2VjdGluZyB0aGUgTmV0bGluayBIb29rIER1bXBzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGVzZSBOZXRsaW5rIGhvb2sgZHVtcCBmdW5jdGlvbnM6IGBuZm5sX2hvb2tfZHVtcGAsIGBuZm5sX2hvb2tfZHVtcF9uYXRgLCBhbmQgYG5mbmxfaG9va19kdW1wX3N0YXJ0YC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIHRoZSBOZXRmaWx0ZXIgaW5mb3JtYXRpb24uIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVyZSBoYXMgdG8gYmUgc29tZSBraW5kIG9mIGZsb3cgY29udHJvbC4KKiAgIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuCiogICBXaGF0IG1ha2VzIHRoZXNlIHJvdXRpbmVzIGRpZmZlcmVudCBmcm9tIGVhY2ggb3RoZXI/CiogICBBcmUgYG5mbmxfaG9va19kdW1wYCBhbmQgYG5mbmxfaG9va19kdW1wX25hdGAgZGlmZmVyZW50IGluIHRoZWlyIGZ1bmN0aW9uLCBvciBhcmUgdGhleSBkaWZmZXJlbnQgaW4gdGhlaXIgYXBwcm9hY2g/CiogICBXaGF0IGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IG9mIGBuZm5sX2hvb2tfZHVtcF9zdGFydGA/IElzIGl0IHRoZSBpbml0aWFsaXphdGlvbiBvciB0aGUgdHJpZ2dlciBvZiB0aGUgZHVtcCBwcm9jZXNzLCBhbmQgaWYgc28sIGhvdyBpcyBpdCBjb29yZGluYXRlZCB3aXRoIHRoZSBvdGhlciB0d28/CiogICBIb3cgZG8gdGhlc2UgaG9vayBkdW1wcyBjb250cmlidXRlIHRvIHRoZSBvdmVyYWxsIHBpY3R1cmUgb2YgTmV0ZmlsdGVyIG9wZXJhdGlvbnM/CgpJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgZXh0cmFjdGVkIGFuZCB0cmFuc21pdHRlZCwgaG93IHRoZSBkdW1waW5nIGlzIGluaXRpYXRlZCwgYW5kIHdoYXQgc2FmZWd1YXJkcyBhcmUgaW4gcGxhY2UgdG8gbWFuYWdlIHRoZSBmbG93IG9mIGRhdGEsIGVzcGVjaWFsbHkgZm9yIHBvdGVudGlhbGx5IGxhcmdlIGRhdGFzZXRzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJleW9uZCB0aGUgbmFtZXMgYW5kIGJyZWFrIGRvd24gdGhlIGNvZGUgbG9naWMgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxlbWVudGF0aW9uLiBNeSBmb2N1cyBoZXJlIGlzIG9uIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcyBvZiBob3cgdGhlc2UgaG9va3MgaW50ZXJhY3Qgd2l0aCB0aGUgTmV0bGluayBpbmZyYXN0cnVjdHVyZS4gSSBleHBlY3QgdG8gc2VlIHNwZWNpZmljIGRldGFpbHMgYWJvdXQgYXR0cmlidXRlIGhhbmRsaW5nLCBzZXF1ZW5jZSBudW1iZXIgbWFuYWdlbWVudCwgYW5kIGVycm9yIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzNTpcdFxuIDMzNjpcdFx0cmV0dXJuIGhvb2tfaGVhZDtcbiAzMzc6XHR9XG4gMzM4Olx0XG4gMzM5Olx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9uYXQoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIDM0MDpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiAzNDE6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSlcbiAzNDI6XHR7XG4gMzQzOlx0XHRzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtXHUwMDNlcHJpdjtcbiAzNDQ6XHRcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBjYi1cdTAwM2VkYXRhO1xuIDM0NTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXHUwMDNlc2spO1xuIDM0NjpcdFx0c3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wcztcbiAzNDc6XHRcdHVuc2lnbmVkIGludCBpID0gY2ItXHUwMDNlYXJnc1sxXTtcbiAzNDg6XHRcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmU7XG4gMzQ5Olx0XHR1bnNpZ25lZCBpbnQgYmFzZV9zZXE7XG4gMzUwOlx0XHRpbnQgZXJyID0gMDtcbiAzNTE6XHRcbiAzNTI6XHRcdGJhc2Vfc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xuIDM1MzpcdFxuIDM1NDpcdFx0ZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LVx1MDAzZWVudHJpZXMpO1xuIDM1NTpcdFx0aWYgKCFlKVxuIDM1NjpcdFx0XHRnb3RvIG91dDtcbiAzNTc6XHRcbiAzNTg6XHRcdG5hdF9vcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xuIDM1OTpcdFxuIDM2MDpcdFx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiAzNjE6XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsXG4gMzYyOlx0XHRcdFx0XHRcdCBSRUFEX09OQ0UobmF0X29wc1tpXSksXG4gMzYzOlx0XHRcdFx0XHRcdCBvcHMtXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbiAzNjQ6XHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIDM2NTpcdFx0XHRpZiAoZXJyKVxuIDM2NjpcdFx0XHRcdGJyZWFrO1xuIDM2NzpcdFxuIDM2ODpcdFx0fVxuIDM2OTpcdG91dDpcbiAzNzA6XHRcdGlmICghZXJyKSB7XG4gMzcxOlx0XHRcdGkgPSAwO1xuIDM3MjpcdFx0fVxuIDM3MzpcdFx0Y2ItXHUwMDNlYXJnc1sxXSA9IGk7XG4gMzc0Olx0XG4gMzc1Olx0XHRpZiAoY2ItXHUwMDNlYXJnc1syXSBcdTAwMjZcdTAwMjYgYmFzZV9zZXEgIT0gY2ItXHUwMDNlYXJnc1syXSkge1xuIDM3NjpcdFx0XHRjYi1cdTAwM2VzZXEmIzQzOyYjNDM7O1xuIDM3NzpcdFx0XHRlcnIgPSAtRUlOVFI7XG4gMzc4Olx0XHR9XG4gMzc5Olx0XHRjYi1cdTAwM2VhcmdzWzJdID0gYmFzZV9zZXE7XG4gMzgwOlx0XG4gMzgxOlx0XHRyZXR1cm4gZXJyO1xuIDM4MjpcdH1cbiAzODM6XHRcbiAzODQ6XHRzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYixcbiAzODU6XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiAzODY6XHR7XG4gMzg3Olx0XHRzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpO1xuIDM4ODpcdFx0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLVx1MDAzZWRhdGE7XG4gMzg5Olx0XHRpbnQgZXJyLCBmYW1pbHkgPSBuZm1zZy1cdTAwM2VuZmdlbl9mYW1pbHk7XG4gMzkwOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChubHNrYi1cdTAwM2Vzayk7XG4gMzkxOlx0XHRzdHJ1Y3QgbmZfaG9va19vcHMgKiBjb25zdCAqb3BzO1xuIDM5MjpcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcbiAzOTM6XHRcdHVuc2lnbmVkIGludCBpID0gY2ItXHUwMDNlYXJnc1swXTtcbiAzOTQ6XHRcbiAzOTU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzOTY6XHRcdGNiLVx1MDAzZXNlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXEpO1xuIDM5NzpcdFxuIDM5ODpcdFx0ZSA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBjdHgtXHUwMDNlaG9vaywgbmV0LCBjdHgtXHUwMDNlZGV2bmFtZSk7XG4gMzk5Olx0XHRpZiAoIWUgfHwgSVNfRVJSKGUpKVxuIDQwMDpcdFx0XHRnb3RvIGRvbmU7XG4gNDAxOlx0XG4gNDAyOlx0XHRvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xuIDQwMzpcdFxuIDQwNDpcdFx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiA0MDU6XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcbiA0MDY6XHRcbiA0MDc6XHRcdFx0aWYgKGN1ci1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuIDQwODpcdFx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcbiA0MDk6XHRcdFx0ZWxzZSB7XG4gNDEwOlx0XHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1cixcbiA0MTE6XHRcdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4gNDEyOlx0XHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIDQxMzpcdFx0XHR9XG4gNDE0Olx0XHRcdGlmIChlcnIpXG4gNDE1Olx0XHRcdFx0YnJlYWs7XG4gNDE2Olx0XHR9XG4gNDE3Olx0XG4gNDE4Olx0ZG9uZTpcbiA0MTk6XHRcdGlmIChubHNrYi1cdTAwM2VsZW4gXHUwMDNlIDApXG4gNDIwOlx0XHRcdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4gNDIxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA0MjI6XHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSBpO1xuIDQyMzpcdFx0cmV0dXJuIG5sc2tiLVx1MDAzZWxlbjtcbiA0MjQ6XHR9XG4gNDI1Olx0XG4gNDI2Olx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gNDI3Olx0e1xuIDQyODpcdFx0Y29uc3Qgc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXHUwMDNlbmxoKTtcbiA0Mjk6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqbmxhID0gY2ItXHUwMDNlZGF0YTtcbiA0MzA6XHRcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBOVUxMO1xuIDQzMTpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY2ItXHUwMDNlc2tiLVx1MDAzZXNrKTtcbiA0MzI6XHRcdHU4IGZhbWlseSA9IG5mbXNnLVx1MDAzZW5mZ2VuX2ZhbWlseTtcbiA0MzM6XHRcdGNoYXIgbmFtZVtJRk5BTVNJWl0gPSBcJiMzNDtcJiMzNDs7XG4gNDM0Olx0XHRjb25zdCB2b2lkICpoZWFkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTc0CgkJCQkJCQlvdXRwdXQ6IDIzNgoJCQkJCQkJdGhvdWdodHM6IDgzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBcHBsaWNhYmlsaXR5IEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHdhcyBlbnN1cmluZyB0aGUgbmV0bGluayBkdW1wIChgbmZubF9ob29rX2R1bXBgIGFuZCBgbmZubF9ob29rX2R1bXBfbmF0YCkgbWFpbnRhaW5lZCBjb25zaXN0ZW5jeSByZWdhcmRpbmcgbmV0ZmlsdGVyIGFuZCBOQVQgaG9vayBjaGFuZ2VzIGR1cmluZyB0aGUgZHVtcCBwcm9jZXNzLiBUaGUgZml4IGludHJvZHVjZXMgc2VxdWVuY2UgY291bnRlcnMsIGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgdG8gdHJhY2sgdGhlc2UgY2hhbmdlcy4gVGhlc2UgY291bnRlcnMgYXJlIGluaXRpYWxpemVkIGluIGBuZXRmaWx0ZXJfbmV0X2luaXRgIGFuZCBpbmNyZW1lbnRlZCBkdXJpbmcgaG9vayByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24uIEluIHRoZSBkdW1wIGZ1bmN0aW9ucywgYGNiLSZndDtzZXFgIGFuZCBgYmFzZV9zZXFgIGFyZSB1cGRhdGVkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvdW50ZXIgdmFsdWVzLgoKTm93LCBsZXQmIzM5O3Mgc2NydXRpbml6ZSB0aGlzIGZvciBwb3RlbnRpYWwgS01TQU4gY29uY2VybnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KCkZpcnN0LCBJIGV4YW1pbmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbi4gVGhlIHNlcXVlbmNlIGNvdW50ZXJzIHRoZW1zZWx2ZXMsIGluIGBzdHJ1Y3QgbmV0bnNfbmZgLCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAxIGR1cmluZyBgbmV0ZmlsdGVyX25ldF9pbml0YC4gV2hpbGUgYG5ldGAgZ2V0cyBga3phbGxvY2AmIzM5O2VkIGFueXdheSwgdGhpcyBpcyBnb29kLiBUaGUgYGNiLSZndDthcmdzYCBhcnJheSAocGFzc2VkIGluIHRoZSBuZXRsaW5rIGNhbGxiYWNrKSBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIGNvcmUgYXQgdGhlIGR1bXAmIzM5O3Mgc3RhcnQsIHNvIHdlIGRvbiYjMzk7dCBoYXZlIHRvIHdvcnJ5IGFib3V0IGBjYi0mZ3Q7YXJnc1sxXWAgKGluZGV4KSBvciBgY2ItJmd0O2FyZ3NbMl1gIChiYXNlX3NlcSkgYmVpbmcgdW5pbml0aWFsaXplZC4gVGhlIGFsbG9jYXRpb24gaW4gYG5mbmxfaG9va19kdW1wX3N0YXJ0YCB2aWEgYGt6YWxsb2NgIGFsc28gbG9va3MgY2xlYW4sIGFuZCB0aGUgYGVyciA9IDBgIGFzc2lnbm1lbnQgaW4gYG5mbmxfaG9va19kdW1wX25hdGAgaXMsIG9mIGNvdXJzZSwgcHJvcGVyLiBGaW5hbGx5LCB0aGUgbmV0bGluayBtZXNzYWdlIGNvbnN0cnVjdGlvbiB1c2VzIGBuZm5sX21zZ19wdXRgLCBgbmxhX3B1dF9iZTMyYCwgYW5kIHRoZSBsaWtlIOKAkyB0aGVzZSBhcmUgd2VsbC1iZWhhdmVkIGFuZCBoYW5kbGUgYXR0cmlidXRlIGluaXRpYWxpemF0aW9uIGNvcnJlY3RseS4KCkNydWNpYWxseSwgSSBlbnN1cmVkIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXZlciBsZWFrZWQgdG8gdXNlcnNwYWNlIG9yIHJlYWQgYnkgdGhlIHBhdGNoZWQgY29kZS4gVGhlIGZvY3VzIGlzIG9uIHNlcXVlbmNlIGNvdW50ZXIgbWFuYWdlbWVudCBhbmQgaW5kZXggaGFuZGxpbmcgY2xlYW51cHMsIGFuZCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBpbmZvIGxlYWtzLgoKTWVtb3J5IHNhZmV0eSBpcyBhbm90aGVyIGNvbnNpZGVyYXRpb24uIEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0ZmlsdGVyIGFuZCBuZXRsaW5rLCBJIGxvb2tlZCBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMuIFRoZSBjb2RlIGlzIHByb3RlY3RlZCB3aXRoIFJDVSBhbmQgYHNtcF9sb2FkX2FjcXVpcmVgL2BzbXBfc3RvcmVfcmVsZWFzZWAsIG9yIGxvY2tkZXAvS0FTQU4gaWYgcmFjZXMgZXhpc3QuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucywgbm9yIGRvZXMgaXQgdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBidWZmZXJzLgoKRmluYWxseSwgSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIEtNU0FOIGFwcGxpY2FiaWxpdHkuIEkgbWV0aG9kaWNhbGx5IGNoZWNrZWQgYWdhaW5zdCBLTVNBTiYjMzk7cyBjcml0ZXJpYToKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIG5vIG1vZGlmaWVkIHN0cnVjdHVyZXMgYXJlIGFmZmVjdGVkLiBUaGUgbmV0bGluayBtZXNzYWdlcyB1c2Ugc3RhbmRhcmQgYG5sYV9wdXRfKmAgZnVuY3Rpb25zLCB3aGljaCBtZWFucyBvbmx5IGZ1bGx5IGluaXRpYWxpemVkIGFuZCB0eXBlZCBkYXRhIGlzIGNvcGllZC4KCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczoqKiBJIGNvbmZpcm1lZCB0aGF0IGBjYi0mZ3Q7YXJnc1sxXWAgYW5kIGBjYi0mZ3Q7YXJnc1syXWAgYXJlIGluaXRpYWxpemVkIHRvIDAsIHdoaWNoIGlzIHdoYXQgdGhlIG5ldGxpbmsgY29yZSBkb2VzLiBgYmFzZV9zZXFgIGlzIGxvYWRlZCBmcm9tIHRoZSBpbml0aWFsaXplZCBgbmV0LSZndDtuZi5uYXRfaG9va19iYXNlX3NlcWAuCgozLiAgKipBbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM6KiogVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gVGhlIHNlcXVlbmNlIGNvdW50ZXJzIGluIGBzdHJ1Y3QgbmV0bnNfbmZgIGFyZSBpbml0aWFsaXplZCBpbiBgbmV0ZmlsdGVyX25ldF9pbml0YC4KCjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzOioqIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBpc3N1ZXMgaW4gdGhpcyByZWdhcmQuCgpUaGVyZWZvcmUsIGNvbnNpZGVyaW5nIGFsbCB0aGVzZSBmYWN0b3JzLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAyMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgKSB0byBuZXRmaWx0ZXIgYW5kIE5BVCBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiB0byBwcm92aWRlIGR1bXAgY29uc2lzdGVuY3kgZGV0ZWN0aW9uIGluIGBuZm5ldGxpbmtfaG9vay5jYC5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIHN0cnVjdHVyZSBidWZmZXIgbGVuZ3RocyBpbiBhIHdheSB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIE5ldGxpbmsgY2FsbGJhY2tzIGBjYi1cdTAwM2VhcmdzYCBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0sIGFuZCBgc3RydWN0IG5ldG5zX25mYCBzZXF1ZW5jZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdCgpYC5cbi0gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGRlcmVmZXJlbmNpbmcsIGxpc3QgdHJhdmVyc2FsIGJvdW5kcywgb3IgaG9vayBlbnRyeSBsaWZlY3ljbGVzLCB3aGljaCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgKSB0byBuZXRmaWx0ZXIgYW5kIE5BVCBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiB0byBwcm92aWRlIGR1bXAgY29uc2lzdGVuY3kgZGV0ZWN0aW9uIGluIGBuZm5ldGxpbmtfaG9vay5jYC5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIHN0cnVjdHVyZSBidWZmZXIgbGVuZ3RocyBpbiBhIHdheSB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIE5ldGxpbmsgY2FsbGJhY2tzIGBjYi1cdTAwM2VhcmdzYCBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0sIGFuZCBgc3RydWN0IG5ldG5zX25mYCBzZXF1ZW5jZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdCgpYC5cbi0gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGRlcmVmZXJlbmNpbmcsIGxpc3QgdHJhdmVyc2FsIGJvdW5kcywgb3IgaG9vayBlbnRyeSBsaWZlY3ljbGVzLCB3aGljaCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjIxLjQwMzQ2MTYzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDAzODM1MDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9OQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZm5sX2hvb2tfZHVtcFwiLFxuICAgIFwibmZubF9ob29rX2R1bXBfbmF0XCIsXG4gICAgXCJuZm5sX2hvb2tfZHVtcF9zdGFydFwiLFxuICAgIFwibmZubF9ob29rX2dldFwiLFxuICAgIFwibmZfbmF0X3JlZ2lzdGVyX2ZuXCIsXG4gICAgXCJuZl9uYXRfdW5yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfcmVnaXN0ZXJfbmV0X2hvb2tcIixcbiAgICBcIm5mX3VucmVnaXN0ZXJfbmV0X2hvb2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNlcXVlbmNlIHRyYWNraW5nIChgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWApIHRvIG5ldGZpbHRlciBhbmQgTkFUIGhvb2sgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIHRvIHByb3ZpZGUgZHVtcCBjb25zaXN0ZW5jeSBkZXRlY3Rpb24gaW4gYG5mbmV0bGlua19ob29rLmNgLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmUgYnVmZmVyIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkLiBOZXRsaW5rIGNhbGxiYWNrcyBgY2ItXFx1MDAzZWFyZ3NgIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIHN1YnN5c3RlbSwgYW5kIGBzdHJ1Y3QgbmV0bnNfbmZgIHNlcXVlbmNlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgbmV0ZmlsdGVyX25ldF9pbml0KClgLlxcbi0gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGRlcmVmZXJlbmNpbmcsIGxpc3QgdHJhdmVyc2FsIGJvdW5kcywgb3IgaG9vayBlbnRyeSBsaWZlY3ljbGVzLCB3aGljaCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoaG9va19iYXNlX3NlcSBhbmQgbmF0X2hvb2tfYmFzZV9zZXEpIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZHVyaW5nIG5ldGxpbmsgZHVtcCBvZiBuZXRmaWx0ZXIgYW5kIE5BVCBob29rcywgcmVmYWN0b3JpbmcgdGhlIGR1bXAgaXRlcmF0aW9uIGFuZCByZXN0YXJ0L2NvbnNpc3RlbmN5IHZlcmlmaWNhdGlvbiBpbiBuZm5ldGxpbmtfaG9vay5jLCBhbmQgYnVtcGluZyB0aGUgc2VxdWVuY2UgbnVtYmVycyB1cG9uIGhvb2sgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGluIGNvcmUuYyBhbmQgbmZfbmF0X2NvcmUuYy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayBhbmQgbmV0ZmlsdGVyIGhvb2sgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIG5ldGxpbmsgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDc6MjEuNDAzNDY2MTgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA1MzEyMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzA5ZDU4NzhlOGRjZDQ4ZjFhMGEzOWI2M2Q2MWU5YzZiOWVjYmEzMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDIyOjQ3OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcXG5pbmRleCBhNmEwYmY0YTI0N2U1Li43ZmQ3ODM5NGQxZTdiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcXG5AQCAtMzMsNSArMzMsNyBAQCBzdHJ1Y3QgbmV0bnNfbmYge1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfREVGUkFHX0lQVjYpXFxuIFxcdHVuc2lnbmVkIGludCBkZWZyYWdfaXB2Nl91c2VycztcXG4gI2VuZGlmXFxuK1xcdHVuc2lnbmVkIGludCBob29rX2Jhc2Vfc2VxO1xcbitcXHR1bnNpZ25lZCBpbnQgbmF0X2hvb2tfYmFzZV9zZXE7XFxuIH07XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jXFxuaW5kZXggNjc1YTEwMzRiMzQwMC4uYTI4NGIzMjQxMjExZCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jXFxuQEAgLTM4Niw2ICszODYsMTUgQEAgc3RhdGljIHZvaWQgbmZfc3RhdGljX2tleV9kZWMoY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcsIGludCBwZilcXG4gI2VuZGlmXFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGJ1bXBfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XFxuK1xcbitcXHR3aGlsZSAoKytiYXNlX3NlcSA9PSAwKVxcbitcXHRcXHQ7XFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZuZXQtXFx1MDAzZW5mLmhvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxcbiB7XFxuQEAgLTQyOCw2ICs0MzcsNyBAQCBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXFxuIFxcdG5ld19ob29rcyA9IG5mX2hvb2tfZW50cmllc19ncm93KHAsIHJlZyk7XFxuIFxcbiBcXHRpZiAoIUlTX0VSUihuZXdfaG9va3MpKSB7XFxuK1xcdFxcdGJ1bXBfaG9va19iYXNlX3NlcShuZXQpO1xcbiBcXHRcXHRob29rc192YWxpZGF0ZShuZXdfaG9va3MpO1xcbiBcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoKnBwLCBuZXdfaG9va3MpO1xcbiBcXHR9XFxuQEAgLTUwNiw2ICs1MTYsNyBAQCBzdGF0aWMgdm9pZCBfX25mX3VucmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXFxuIFxcdFxcdFxcdG5ldF9kZWNfZWdyZXNzX3F1ZXVlKCk7XFxuICNlbmRpZlxcbiBcXHRcXHRuZl9zdGF0aWNfa2V5X2RlYyhyZWcsIHBmKTtcXG4rXFx0XFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiaG9vayBub3QgZm91bmQsIHBmICVkIG51bSAlZFxcXCIsIHBmLCByZWctXFx1MDAzZWhvb2tudW0pO1xcbiBcXHR9XFxuQEAgLTc4NCw2ICs3OTUsOCBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmV0ZmlsdGVyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gI2VuZGlmXFxuK1xcdG5ldC1cXHUwMDNlbmYuaG9va19iYXNlX3NlcSA9IDE7XFxuK1xcdG5ldC1cXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEgPSAxO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXFxuaW5kZXggOGFjMzI2ZTFlYjViYS4uZmYyY2JhOGRmODg2MSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcXG5AQCAtMTE2MCw2ICsxMTYwLDE1IEBAIG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXAoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiB9XFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIHZvaWQgYnVtcF9uYXRfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xcbitcXG4rXFx0d2hpbGUgKCsrYmFzZV9zZXEgPT0gMClcXG4rXFx0XFx0O1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2bmV0LVxcdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IG5mX2N0X2hlbHBlcl9leHBlY3RmbiBmb2xsb3dfbWFzdGVyX25hdCA9IHtcXG4gXFx0Lm5hbWVcXHRcXHQ9IFxcXCJuYXQtZm9sbG93LW1hc3RlclxcXCIsXFxuIFxcdC5leHBlY3RmblxcdD0gbmZfbmF0X2ZvbGxvd19tYXN0ZXIsXFxuQEAgLTEyNDUsOCArMTI1NCwxMCBAQCBpbnQgbmZfbmF0X3JlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxcbiBcXHR9XFxuIFxcbiBcXHRyZXQgPSBuZl9ob29rX2VudHJpZXNfaW5zZXJ0X3JhdyhcXHUwMDI2cHJpdi1cXHUwMDNlZW50cmllcywgb3BzKTtcXG4tXFx0aWYgKHJldCA9PSAwKVxcbitcXHRpZiAocmV0ID09IDApIHtcXG4rXFx0XFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xcbiBcXHRcXHRuYXRfcHJvdG9fbmV0LVxcdTAwM2V1c2VycysrO1xcbitcXHR9XFxuIFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTEyODQsNiArMTI5NSw3IEBAIHZvaWQgbmZfbmF0X3VucmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRwcml2ID0gbmF0X29wc1tob29rbnVtXS5wcml2O1xcbiBcXHRuZl9ob29rX2VudHJpZXNfZGVsZXRlX3JhdyhcXHUwMDI2cHJpdi1cXHUwMDNlZW50cmllcywgb3BzKTtcXG4rXFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xcbiBcXG4gXFx0aWYgKG5hdF9wcm90b19uZXQtXFx1MDAzZXVzZXJzID09IDApIHtcXG4gXFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuYXRfb3BzLCBvcHNfY291bnQpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcXG5pbmRleCA5NTAwNWU5YTYwNjY4Li4yMWE3NTkxNjhjMzg0IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xcbkBAIC01NCw3ICs1NCw2IEBAIHN0YXRpYyBpbnQgbmZfbmV0bGlua19kdW1wX3N0YXJ0X3JjdShzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhIHtcXG4gXFx0Y2hhciBkZXZuYW1lW0lGTkFNU0laXTtcXG4tXFx0dW5zaWduZWQgbG9uZyBoZWFkdjtcXG4gXFx0dTggaG9vaztcXG4gfTtcXG4gXFxuQEAgLTMzOCwyNyArMzM3LDQ4IEBAIG5mbmxfaG9va19lbnRyaWVzX2hlYWQodTggcGYsIHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKmRlXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcXG4tXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcXG4tXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXFxuLVxcdFxcdFxcdCAgICAgIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBzZXEpXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsIGludCBmYW1pbHkpXFxuIHtcXG4gXFx0c3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2ID0gb3BzLVxcdTAwM2Vwcml2O1xcbi1cXHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXFx1MDAzZWVudHJpZXMpO1xcbitcXHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gY2ItXFx1MDAzZWRhdGE7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KG5sc2tiLVxcdTAwM2Vzayk7XFxuIFxcdHN0cnVjdCBuZl9ob29rX29wcyAqKm5hdF9vcHM7XFxuLVxcdGludCBpLCBlcnI7XFxuK1xcdHVuc2lnbmVkIGludCBpID0gY2ItXFx1MDAzZWFyZ3NbMV07XFxuK1xcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmU7XFxuK1xcdHVuc2lnbmVkIGludCBiYXNlX3NlcTtcXG4rXFx0aW50IGVyciA9IDA7XFxuIFxcbitcXHRiYXNlX3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNm5ldC1cXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xcbitcXG4rXFx0ZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LVxcdTAwM2VlbnRyaWVzKTtcXG4gXFx0aWYgKCFlKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRuYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlLVxcdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcXG4tXFx0XFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG5hdF9vcHNbaV0sXFxuLVxcdFxcdFxcdFxcdFxcdCBvcHMtXFx1MDAzZXByaW9yaXR5LCBmYW1pbHksIHNlcSk7XFxuK1xcdGZvciAoOyBpIFxcdTAwM2MgZS1cXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XFxuK1xcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LFxcbitcXHRcXHRcXHRcXHRcXHQgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLFxcbitcXHRcXHRcXHRcXHRcXHQgb3BzLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcbitcXHRcXHRcXHRcXHRcXHQgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG4gXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHR9XFxuLVxcdHJldHVybiAwO1xcbitvdXQ6XFxuK1xcdGlmICghZXJyKSB7XFxuK1xcdFxcdGkgPSAwO1xcbitcXHR9XFxuK1xcdGNiLVxcdTAwM2VhcmdzWzFdID0gaTtcXG4rXFxuK1xcdGlmIChjYi1cXHUwMDNlYXJnc1syXSBcXHUwMDI2XFx1MDAyNiBiYXNlX3NlcSAhPSBjYi1cXHUwMDNlYXJnc1syXSkge1xcbitcXHRcXHRjYi1cXHUwMDNlc2VxKys7XFxuK1xcdFxcdGVyciA9IC1FSU5UUjtcXG4rXFx0fVxcbitcXHRjYi1cXHUwMDNlYXJnc1syXSA9IGJhc2Vfc2VxO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuQEAgLTM3MywzNSArMzkzLDMxIEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbiBcXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVxcdTAwM2VhcmdzWzBdO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRjYi1cXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2bmV0LVxcdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKTtcXG4gXFxuIFxcdGUgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgY3R4LVxcdTAwM2Vob29rLCBuZXQsIGN0eC1cXHUwMDNlZGV2bmFtZSk7XFxuLVxcdGlmICghZSlcXG4rXFx0aWYgKCFlIHx8IElTX0VSUihlKSlcXG4gXFx0XFx0Z290byBkb25lO1xcbiBcXG4tXFx0aWYgKElTX0VSUihlKSkge1xcbi1cXHRcXHRjYi1cXHUwMDNlc2VxKys7XFxuLVxcdFxcdGdvdG8gZG9uZTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCh1bnNpZ25lZCBsb25nKWUgIT0gY3R4LVxcdTAwM2VoZWFkdiB8fCBpIFxcdTAwM2U9IGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXMpXFxuLVxcdFxcdGNiLVxcdTAwM2VzZXErKztcXG4tXFxuIFxcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XFxuIFxcbiBcXHRmb3IgKDsgaSBcXHUwMDNjIGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xcbi1cXHRcXHRpZiAob3BzW2ldLVxcdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxcbi1cXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBvcHNbaV0sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBvcHNbaV0tXFx1MDAzZXByaW9yaXR5LCBmYW1pbHksXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqY3VyID0gUkVBRF9PTkNFKG9wc1tpXSk7XFxuK1xcbitcXHRcXHRpZiAoY3VyLVxcdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxcbitcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGNiLCBjdXIsIGZhbWlseSk7XFxuK1xcdFxcdGVsc2Uge1xcbitcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY3VyLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gZG9uZTpcXG4tXFx0bmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTtcXG4rXFx0aWYgKG5sc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSAwKVxcbitcXHRcXHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBpO1xcbiBcXHRyZXR1cm4gbmxza2ItXFx1MDAzZWxlbjtcXG5AQCAtNDQyLDEwICs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRzdHJzY3B5KGN0eC1cXHUwMDNlZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC1cXHUwMDNlZGV2bmFtZSkpO1xcbi1cXHRjdHgtXFx1MDAzZWhlYWR2ID0gKHVuc2lnbmVkIGxvbmcpaGVhZDtcXG4gXFx0Y3R4LVxcdTAwM2Vob29rID0gaG9va251bTtcXG4tXFxuLVxcdGNiLVxcdTAwM2VzZXEgPSAxO1xcbiBcXHRjYi1cXHUwMDNlZGF0YSA9IGN0eDtcXG4gXFxuIFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0NzoyMy4wMDk1MDQyOTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxNDgyMjI5NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9OQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZm5sX2hvb2tfZHVtcFwiLFxuICAgIFwibmZubF9ob29rX2R1bXBfbmF0XCIsXG4gICAgXCJuZm5sX2hvb2tfZHVtcF9zdGFydFwiLFxuICAgIFwibmZubF9ob29rX2dldFwiLFxuICAgIFwibmZfbmF0X3JlZ2lzdGVyX2ZuXCIsXG4gICAgXCJuZl9uYXRfdW5yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfcmVnaXN0ZXJfbmV0X2hvb2tcIixcbiAgICBcIm5mX3VucmVnaXN0ZXJfbmV0X2hvb2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoaG9va19iYXNlX3NlcSBhbmQgbmF0X2hvb2tfYmFzZV9zZXEpIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZHVyaW5nIG5ldGxpbmsgZHVtcCBvZiBuZXRmaWx0ZXIgYW5kIE5BVCBob29rcywgcmVmYWN0b3JpbmcgdGhlIGR1bXAgaXRlcmF0aW9uIGFuZCByZXN0YXJ0L2NvbnNpc3RlbmN5IHZlcmlmaWNhdGlvbiBpbiBuZm5ldGxpbmtfaG9vay5jLCBhbmQgYnVtcGluZyB0aGUgc2VxdWVuY2UgbnVtYmVycyB1cG9uIGhvb2sgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGluIGNvcmUuYyBhbmQgbmZfbmF0X2NvcmUuYy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayBhbmQgbmV0ZmlsdGVyIGhvb2sgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIG5ldGxpbmsgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMDlkNTg3OGU4ZGNkNDhmMWEwYTM5YjYzZDYxZTljNmI5ZWNiYTMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAyMjo0NzoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcbmluZGV4IGE2YTBiZjRhMjQ3ZTUuLjdmZDc4Mzk0ZDFlN2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhcbkBAIC0zMyw1ICszMyw3IEBAIHN0cnVjdCBuZXRuc19uZiB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RFRlJBR19JUFY2KVxuIFx0dW5zaWduZWQgaW50IGRlZnJhZ19pcHY2X3VzZXJzO1xuICNlbmRpZlxuK1x0dW5zaWduZWQgaW50IGhvb2tfYmFzZV9zZXE7XG4rXHR1bnNpZ25lZCBpbnQgbmF0X2hvb2tfYmFzZV9zZXE7XG4gfTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jXG5pbmRleCA2NzVhMTAzNGIzNDAwLi5hMjg0YjMyNDEyMTFkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jXG5AQCAtMzg2LDYgKzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuZl9zdGF0aWNfa2V5X2RlYyhjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKnJlZywgaW50IHBmKVxuICNlbmRpZlxuIH1cbiBcbitzdGF0aWMgdm9pZCBidW1wX2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4rXG4rXHR3aGlsZSAoKytiYXNlX3NlcSA9PSAwKVxuK1x0XHQ7XG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSwgYmFzZV9zZXEpO1xuK31cbitcbiBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxuIHtcbkBAIC00MjgsNiArNDM3LDcgQEAgc3RhdGljIGludCBfX25mX3JlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0bmV3X2hvb2tzID0gbmZfaG9va19lbnRyaWVzX2dyb3cocCwgcmVnKTtcbiBcbiBcdGlmICghSVNfRVJSKG5ld19ob29rcykpIHtcbitcdFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHRcdGhvb2tzX3ZhbGlkYXRlKG5ld19ob29rcyk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqcHAsIG5ld19ob29rcyk7XG4gXHR9XG5AQCAtNTA2LDYgKzUxNiw3IEBAIHN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbiBcdFx0XHRuZXRfZGVjX2VncmVzc19xdWV1ZSgpO1xuICNlbmRpZlxuIFx0XHRuZl9zdGF0aWNfa2V5X2RlYyhyZWcsIHBmKTtcbitcdFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRXQVJOX09OQ0UoMSwgXCJob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkXCIsIHBmLCByZWctXHUwMDNlaG9va251bSk7XG4gXHR9XG5AQCAtNzg0LDYgKzc5NSw4IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZXRmaWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiAjZW5kaWZcbitcdG5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxID0gMTtcbitcdG5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSA9IDE7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG5pbmRleCA4YWMzMjZlMWViNWJhLi5mZjJjYmE4ZGY4ODYxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbkBAIC0xMTYwLDYgKzExNjAsMTUgQEAgbmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gfVxuICNlbmRpZlxuIFxuK3N0YXRpYyB2b2lkIGJ1bXBfbmF0X2hvb2tfYmFzZV9zZXEoc3RydWN0IG5ldCAqbmV0KVxuK3tcbitcdHVuc2lnbmVkIGludCBiYXNlX3NlcSA9IFJFQURfT05DRShuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xuK1xuK1x0d2hpbGUgKCsrYmFzZV9zZXEgPT0gMClcbitcdFx0O1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbmZfY3RfaGVscGVyX2V4cGVjdGZuIGZvbGxvd19tYXN0ZXJfbmF0ID0ge1xuIFx0Lm5hbWVcdFx0PSBcIm5hdC1mb2xsb3ctbWFzdGVyXCIsXG4gXHQuZXhwZWN0Zm5cdD0gbmZfbmF0X2ZvbGxvd19tYXN0ZXIsXG5AQCAtMTI0NSw4ICsxMjU0LDEwIEBAIGludCBuZl9uYXRfcmVnaXN0ZXJfZm4oc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsXG4gXHR9XG4gXG4gXHRyZXQgPSBuZl9ob29rX2VudHJpZXNfaW5zZXJ0X3JhdyhcdTAwMjZwcml2LVx1MDAzZWVudHJpZXMsIG9wcyk7XG4tXHRpZiAocmV0ID09IDApXG4rXHRpZiAocmV0ID09IDApIHtcbitcdFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xuIFx0XHRuYXRfcHJvdG9fbmV0LVx1MDAzZXVzZXJzKys7XG4rXHR9XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2bmZfbmF0X3Byb3RvX211dGV4KTtcbiBcdHJldHVybiByZXQ7XG5AQCAtMTI4NCw2ICsxMjk1LDcgQEAgdm9pZCBuZl9uYXRfdW5yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbiBcdFx0Z290byB1bmxvY2s7XG4gXHRwcml2ID0gbmF0X29wc1tob29rbnVtXS5wcml2O1xuIFx0bmZfaG9va19lbnRyaWVzX2RlbGV0ZV9yYXcoXHUwMDI2cHJpdi1cdTAwM2VlbnRyaWVzLCBvcHMpO1xuK1x0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xuIFxuIFx0aWYgKG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMgPT0gMCkge1xuIFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG5pbmRleCA5NTAwNWU5YTYwNjY4Li4yMWE3NTkxNjhjMzg0IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbkBAIC01NCw3ICs1NCw2IEBAIHN0YXRpYyBpbnQgbmZfbmV0bGlua19kdW1wX3N0YXJ0X3JjdShzdHJ1Y3Qgc29jayAqbmxzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSB7XG4gXHRjaGFyIGRldm5hbWVbSUZOQU1TSVpdO1xuLVx0dW5zaWduZWQgbG9uZyBoZWFkdjtcbiBcdHU4IGhvb2s7XG4gfTtcbiBcbkBAIC0zMzgsMjcgKzMzNyw0OCBAQCBuZm5sX2hvb2tfZW50cmllc19oZWFkKHU4IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpkZVxuIH1cbiBcbiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4tXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCxcbi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbi1cdFx0XHQgICAgICBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgc2VxKVxuK1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IGZhbWlseSlcbiB7XG4gXHRzdHJ1Y3QgbmZfbmF0X2xvb2t1cF9ob29rX3ByaXYgKnByaXYgPSBvcHMtXHUwMDNlcHJpdjtcbi1cdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VlbnRyaWVzKTtcbitcdHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHggPSBjYi1cdTAwM2VkYXRhO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IG5mX2hvb2tfb3BzICoqbmF0X29wcztcbi1cdGludCBpLCBlcnI7XG4rXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVx1MDAzZWFyZ3NbMV07XG4rXHRzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplO1xuK1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxO1xuK1x0aW50IGVyciA9IDA7XG4gXG4rXHRiYXNlX3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxKTtcbitcbitcdGUgPSByY3VfZGVyZWZlcmVuY2UocHJpdi1cdTAwM2VlbnRyaWVzKTtcbiBcdGlmICghZSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGdvdG8gb3V0O1xuIFxuIFx0bmF0X29wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlLVx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xuLVx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgbmF0X29wc1tpXSxcbi1cdFx0XHRcdFx0IG9wcy1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LCBzZXEpO1xuK1x0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XG4rXHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LFxuK1x0XHRcdFx0XHQgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLFxuK1x0XHRcdFx0XHQgb3BzLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4rXHRcdFx0XHRcdCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGJyZWFrO1xuK1xuIFx0fVxuLVx0cmV0dXJuIDA7XG4rb3V0OlxuK1x0aWYgKCFlcnIpIHtcbitcdFx0aSA9IDA7XG4rXHR9XG4rXHRjYi1cdTAwM2VhcmdzWzFdID0gaTtcbitcbitcdGlmIChjYi1cdTAwM2VhcmdzWzJdIFx1MDAyNlx1MDAyNiBiYXNlX3NlcSAhPSBjYi1cdTAwM2VhcmdzWzJdKSB7XG4rXHRcdGNiLVx1MDAzZXNlcSsrO1xuK1x0XHRlcnIgPSAtRUlOVFI7XG4rXHR9XG4rXHRjYi1cdTAwM2VhcmdzWzJdID0gYmFzZV9zZXE7XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYixcbkBAIC0zNzMsMzUgKzM5MywzMSBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wKHN0cnVjdCBza19idWZmICpubHNrYixcbiBcdHVuc2lnbmVkIGludCBpID0gY2ItXHUwMDNlYXJnc1swXTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbitcdGNiLVx1MDAzZXNlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2bmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXEpO1xuIFxuIFx0ZSA9IG5mbmxfaG9va19lbnRyaWVzX2hlYWQoZmFtaWx5LCBjdHgtXHUwMDNlaG9vaywgbmV0LCBjdHgtXHUwMDNlZGV2bmFtZSk7XG4tXHRpZiAoIWUpXG4rXHRpZiAoIWUgfHwgSVNfRVJSKGUpKVxuIFx0XHRnb3RvIGRvbmU7XG4gXG4tXHRpZiAoSVNfRVJSKGUpKSB7XG4tXHRcdGNiLVx1MDAzZXNlcSsrO1xuLVx0XHRnb3RvIGRvbmU7XG4tXHR9XG4tXG4tXHRpZiAoKHVuc2lnbmVkIGxvbmcpZSAhPSBjdHgtXHUwMDNlaGVhZHYgfHwgaSBcdTAwM2U9IGUtXHUwMDNlbnVtX2hvb2tfZW50cmllcylcbi1cdFx0Y2ItXHUwMDNlc2VxKys7XG4tXG4gXHRvcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xuIFxuIFx0Zm9yICg7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XG4tXHRcdGlmIChvcHNbaV0tXHUwMDNlaG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVClcbi1cdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGN0eCwgb3BzW2ldLCBmYW1pbHksXG4tXHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIG9wc1tpXSxcbi1cdFx0XHRcdFx0XHQgb3BzW2ldLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4rXHRcdGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqY3VyID0gUkVBRF9PTkNFKG9wc1tpXSk7XG4rXG4rXHRcdGlmIChjdXItXHUwMDNlaG9va19vcHNfdHlwZSA9PSBORl9IT09LX09QX05BVClcbitcdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGNiLCBjdXIsIGZhbWlseSk7XG4rXHRcdGVsc2Uge1xuK1x0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsXG4rXHRcdFx0XHRcdFx0IGN1ci1cdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxuIFx0XHRcdFx0XHRcdCBjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxKTtcbitcdFx0fVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIGRvbmU6XG4tXHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xuK1x0aWYgKG5sc2tiLVx1MDAzZWxlbiBcdTAwM2UgMClcbitcdFx0bmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0Y2ItXHUwMDNlYXJnc1swXSA9IGk7XG4gXHRyZXR1cm4gbmxza2ItXHUwMDNlbGVuO1xuQEAgLTQ0MiwxMCArNDU4LDcgQEAgc3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0c3Ryc2NweShjdHgtXHUwMDNlZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC1cdTAwM2VkZXZuYW1lKSk7XG4tXHRjdHgtXHUwMDNlaGVhZHYgPSAodW5zaWduZWQgbG9uZyloZWFkO1xuIFx0Y3R4LVx1MDAzZWhvb2sgPSBob29rbnVtO1xuLVxuLVx0Y2ItXHUwMDNlc2VxID0gMTtcbiBcdGNiLVx1MDAzZWRhdGEgPSBjdHg7XG4gXG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjIzLjAwOTUwNTk1OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNDExODE0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGEgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBzZXJpZXMgaGVyZSB0aGF0IG5lZWRzIGEgbG9vay1vdmVyLiBNeSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0aGUgc2FtZTogbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzIGFuZCB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0IHRoaXMgaXMgdHJ5aW5nIHRvIGFjaGlldmUuIEkgbmVlZCB0byBzZWUgd2hhdCB0aGUgY29kZSBpcyBkb2luZy5cblxuQWxyaWdodCwgdGhlIHBhdGNoIHRvdWNoZXMgYGluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oYCwgYG5ldC9uZXRmaWx0ZXIvY29yZS5jYCwgYG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBkaWdnaW5nIGludG8gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0sIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgdG8gdGFrZSBsaWdodGx5LiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIHRoaXMgaGFzIG9uIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LlxuXG5Ob3cgaXQncyB0aW1lIHRvIGxldmVyYWdlIHRoZSB0b29scy4gQmVmb3JlIEkgZ2V0IGludG8gdGhlIHdlZWRzIG9mIGxpbmUtYnktbGluZSBjb2RlIHJldmlldywgSSdtIGdvaW5nIHRvIHJ1biB0aGlzIHRocm91Z2ggb3VyIHN0YW5kYXJkIGFuYWx5c2lzIHBpcGVsaW5lLiBJIG5lZWQgdG8gdmVyaWZ5IEtjb25maWcgcmVxdWlyZW1lbnRzIGFuZCBtYWtlIHN1cmUgdGhpcyBjb2RlIHBsYXlzIHdlbGwgd2l0aCB0aGUgYnVpbGQgc3lzdGVtIGFuZCBleGlzdGluZyBjb25maWd1cmF0aW9ucy4gSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgb2J2aW91cyByZWQgZmxhZ3MgbGlrZSBtaXNzaW5nIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBjb25mbGljdHMgYmVmb3JlIEkgc3BlbmQgdG9vIG11Y2ggdGltZSBvbiB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjI4LjA1MDY5MDk3N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI5OTY3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTkVURklMVEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz05OD1jb25maWcgTkZfTE9HX1NZU0xPR1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNS1cXHQgIFRoaXMgaXMgYSBzaW1wbGVyIGJ1dCBsZXNzIGZsZXhpYmxlIGxvZ2dpbmcgbWV0aG9kIGNvbXBhcmVkIHRvXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEwNjpcXHQgIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cuXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNy1cXHQgIElmIGJvdGggYXJlIGVuYWJsZWQgdGhlIGJhY2tlbmQgdG8gdXNlIGNhbiBiZSBjb25maWd1cmVkIGF0IHJ1bi10aW1lXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9ODM5PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODQ2LVxcdChlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjg0NzpcXHRDT05GSUdfTkVURklMVEVSX1hUX0NPTk5NQVJLIChjb21iaW5lZCBjb25ubWFyay9DT05OTUFSSyBtb2R1bGUpLlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04NDgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9OTY1PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX01BUktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05NzEtXFx0KGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6OTcyOlxcdENPTkZJR19ORVRGSUxURVJfWFRfTUFSSyAoY29tYmluZWQgbWFyay9NQVJLIG1vZHVsZSkuXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTk3My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMjM3PWNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQ0LVxcdChlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyNDU6XFx0Q09ORklHX05FVEZJTFRFUl9YVF9DT05OTUFSSyAoY29tYmluZWQgY29ubm1hcmsvQ09OTk1BUksgbW9kdWxlKS5cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0Ni1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xNDIzPWNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfTUFSS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0MjktXFx0KGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQzMDpcXHRDT05GSUdfTkVURklMVEVSX1hUX01BUksgKGNvbWJpbmVkIG1hcmsvTUFSSyBtb2R1bGUpLlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDMxLVxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0yPW5ldGZpbHRlci1vYmpzIDo9IGNvcmUubyBuZl9sb2cubyBuZl9xdWV1ZS5vIG5mX3NvY2tvcHQubyB1dGlscy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozOm5ldGZpbHRlci0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOSykgKz0gbmZuZXRsaW5rLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTIyPWVuZGlmXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0yMy1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORVRGSUxURVIpID0gbmV0ZmlsdGVyLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORVRGSUxURVJfQlBGX0xJTkspICs9IG5mX2JwZl9saW5rLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTI2LVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0FDQ1QpICs9IG5mbmV0bGlua19hY2N0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSkgKz0gbmZuZXRsaW5rX3F1ZXVlLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjI5Om9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cpICs9IG5mbmV0bGlua19sb2cub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX09TRikgKz0gbmZuZXRsaW5rX29zZi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfTkVURklMVEVSX05FVExJTktfSE9PSykgKz0gbmZuZXRsaW5rX2hvb2sub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTc2PW9iai0kKENPTkZJR19ORl9OQVRfVEZUUCkgKz0gbmZfbmF0X3RmdHAub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS03OC0jIFNZTlBST1hZXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfTkVURklMVEVSX1NZTlBST1hZKSArPSBuZl9zeW5wcm94eV9jb3JlLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTgwLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpICs9IG5mX2Nvbm5jb3VudC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04Mi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTUzPW9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFX0lORVQpICs9IG5mX2Zsb3dfdGFibGVfaW5ldC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1NS0jIGdlbmVyaWMgWCB0YWJsZXNcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE1NjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUQUJMRVMpICs9IHhfdGFibGVzLm8geHRfdGNwdWRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1Ny1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE1OC0jIGNvbWJvc1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTU5Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFSSykgKz0geHRfbWFyay5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9DT05OTUFSSykgKz0geHRfY29ubm1hcmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTYxOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfU0VUKSArPSB4dF9zZXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTYyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTkFUKSArPSB4dF9uYXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTYzLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTY0LSMgdGFyZ2V0c1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTY1Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0FVRElUKSArPSB4dF9BVURJVC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjY6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0hFQ0tTVU0pICs9IHh0X0NIRUNLU1VNLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE2NzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSkgKz0geHRfQ0xBU1NJRlkub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTY4Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLKSArPSB4dF9DT05OU0VDTUFSSy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNjk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ1QpICs9IHh0X0NULm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3MDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQKSArPSB4dF9EU0NQLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3MTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITCkgKz0geHRfSEwub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTcyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLKSArPSB4dF9ITUFSSy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzM6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTEVEKSArPSB4dF9MRUQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTc0Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRykgKz0geHRfTE9HLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3NTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORVRNQVApICs9IHh0X05FVE1BUC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNzY6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cpICs9IHh0X05GTE9HLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3NzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFKSArPSB4dF9ORlFVRVVFLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3ODpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUKSArPSB4dF9SQVRFRVNULm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE3OTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SRURJUkVDVCkgKz0geHRfUkVESVJFQ1Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTgwOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BU1FVRVJBREUpICs9IHh0X01BU1FVRVJBREUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTgxOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUkspICs9IHh0X1NFQ01BUksub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTgyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RQUk9YWSkgKz0geHRfVFBST1hZLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE4MzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MpICs9IHh0X1RDUE1TUy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxODQ6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVApICs9IHh0X1RDUE9QVFNUUklQLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE4NTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9URUUpICs9IHh0X1RFRS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxODY6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UpICs9IHh0X1RSQUNFLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE4NzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVIpICs9IHh0X0lETEVUSU1FUi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xODgtXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xODktIyBtYXRjaGVzXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxOTA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9BRERSVFlQRSkgKz0geHRfYWRkcnR5cGUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTkxOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQlBGKSArPSB4dF9icGYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTkyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUikgKz0geHRfY2x1c3Rlci5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxOTM6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UKSArPSB4dF9jb21tZW50Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5NDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUykgKz0geHRfY29ubmJ5dGVzLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5NTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MQUJFTCkgKz0geHRfY29ubmxhYmVsLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5NjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVCkgKz0geHRfY29ubmxpbWl0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5NzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSykgKz0geHRfY29ubnRyYWNrLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5ODpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NQVSkgKz0geHRfY3B1Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE5OTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1ApICs9IHh0X2RjY3Aub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjAwOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfREVWR1JPVVApICs9IHh0X2Rldmdyb3VwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIwMTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1ApICs9IHh0X2RzY3Aub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjAyOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRUNOKSArPSB4dF9lY24ub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjAzOm9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQKSArPSB4dF9lc3Aub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjA0Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUKSArPSB4dF9oYXNobGltaXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjA1Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSKSArPSB4dF9oZWxwZXIub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjA2Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEwpICs9IHh0X2hsLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIwNzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQQ09NUCkgKz0geHRfaXBjb21wLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIwODpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UpICs9IHh0X2lwcmFuZ2Uub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjA5Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBWUykgKz0geHRfaXB2cy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MMlRQKSArPSB4dF9sMnRwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxMTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCkgKz0geHRfbGVuZ3RoLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIxMjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUKSArPSB4dF9saW1pdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTM6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMpICs9IHh0X21hYy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTQ6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQpICs9IHh0X211bHRpcG9ydC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTU6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ORkFDQ1QpICs9IHh0X25mYWNjdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTY6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0YpICs9IHh0X29zZi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMTc6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUikgKz0geHRfb3duZXIub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjE4Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0dST1VQKSArPSB4dF9jZ3JvdXAub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MjE5Om9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVikgKz0geHRfcGh5c2Rldi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMjA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFKSArPSB4dF9wa3R0eXBlLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyMTpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSkgKz0geHRfcG9saWN5Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyMjpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBKSArPSB4dF9xdW90YS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMjM6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUKSArPSB4dF9yYXRlZXN0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyNDpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNKSArPSB4dF9yZWFsbS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMjU6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQpICs9IHh0X3JlY2VudC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMjY6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQKSArPSB4dF9zY3RwLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyNzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NPQ0tFVCkgKz0geHRfc29ja2V0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIyODpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFKSArPSB4dF9zdGF0ZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMjk6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMpICs9IHh0X3N0YXRpc3RpYy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMzA6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcpICs9IHh0X3N0cmluZy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMzE6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MpICs9IHh0X3RjcG1zcy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToyMzI6b2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FKSArPSB4dF90aW1lLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjIzMzpvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMikgKz0geHRfdTMyLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTIzNC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jPTI3Mj1uZl9ob29rX2VudHJ5X2hlYWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtMjc3LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjI3ODojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQVJQXFxubmV0L25ldGZpbHRlci9jb3JlLmMtMjc5LVxcdGNhc2UgTkZQUk9UT19BUlA6XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0yODMtI2VuZGlmXFxubmV0L25ldGZpbHRlci9jb3JlLmM6Mjg0OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0yODUtXFx0Y2FzZSBORlBST1RPX0JSSURHRTpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTI4OS0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzoyOTA6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTI5MS1cXHRjYXNlIE5GUFJPVE9fSU5FVDpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTMxMi1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzozMTM6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTMxNC1cXHRpZiAoaG9va251bSA9PSBORl9ORVRERVZfSU5HUkVTUykge1xcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtMzE4LSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjMxOTojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1NcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0zMjAtXFx0aWYgKGhvb2tudW0gPT0gTkZfTkVUREVWX0VHUkVTUykge1xcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmM9MzI5PXN0YXRpYyBpbnQgbmZfaW5ncmVzc19jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLFxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtMzMxLXtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzozMzI6I2lmbmRlZiBDT05GSUdfTkVURklMVEVSX0lOR1JFU1NcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy0zMzMtXFx0aWYgKHJlZy1cXHUwMDNlaG9va251bSA9PSBob29rbnVtKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmM9Mzk4PXN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQwNi1cXHRjYXNlIE5GUFJPVE9fTkVUREVWOlxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjQwNzojaWZuZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQwOC1cXHRcXHRpZiAocmVnLVxcdTAwM2Vob29rbnVtID09IE5GX05FVERFVl9JTkdSRVNTKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNDEwLSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjQxMTojaWZuZGVmIENPTkZJR19ORVRGSUxURVJfRUdSRVNTXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNDEyLVxcdFxcdGlmIChyZWctXFx1MDAzZWhvb2tudW0gPT0gTkZfTkVUREVWX0VHUkVTUylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQ0OC1cXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo0NDk6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTQ1MC1cXHRpZiAobmZfaW5ncmVzc19ob29rKHJlZywgcGYpKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNDUyLSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjQ1MzojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1NcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy00NTQtXFx0aWYgKG5mX2VncmVzc19ob29rKHJlZywgcGYpKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmM9NDkxPXN0YXRpYyB2b2lkIF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTUwOS1cXHRpZiAobmZfcmVtb3ZlX25ldF9ob29rKHAsIHJlZykpIHtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo1MTA6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTUxMS1cXHRcXHRpZiAobmZfaW5ncmVzc19ob29rKHJlZywgcGYpKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNTEzLSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jOjUxNDojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1NcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYy01MTUtXFx0XFx0aWYgKG5mX2VncmVzc19ob29rKHJlZywgcGYpKVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmM9Nzc4PXN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZXRmaWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L25ldGZpbHRlci9jb3JlLmMtNzgxLVxcdF9fbmV0ZmlsdGVyX25ldF9pbml0KG5ldC1cXHUwMDNlbmYuaG9va3NfaXB2NiwgQVJSQVlfU0laRShuZXQtXFx1MDAzZW5mLmhvb2tzX2lwdjYpKTtcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo3ODI6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0FSUFxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTc4My1cXHRfX25ldGZpbHRlcl9uZXRfaW5pdChuZXQtXFx1MDAzZW5mLmhvb2tzX2FycCwgQVJSQVlfU0laRShuZXQtXFx1MDAzZW5mLmhvb2tzX2FycCkpO1xcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTc4NC0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL2NvcmUuYzo3ODU6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbm5ldC9uZXRmaWx0ZXIvY29yZS5jLTc4Ni1cXHRfX25ldGZpbHRlcl9uZXRfaW5pdChuZXQtXFx1MDAzZW5mLmhvb2tzX2JyaWRnZSwgQVJSQVlfU0laRShuZXQtXFx1MDAzZW5mLmhvb2tzX2JyaWRnZSkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM9MzA9c3RhdGljIGNvbnN0IHU4IG5mX2N0X2V4dF90eXBlX2xlbltORl9DVF9FWFRfTlVNXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jLTQ4LSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jOjQ5OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfU1lOUFJPWFkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtNTAtXFx0W05GX0NUX0VYVF9TWU5QUk9YWV0gPSBzaXplb2Yoc3RydWN0IG5mX2Nvbm5fc3lucHJveHkpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmM9NTc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgdG90YWxfZXh0ZW5zaW9uX3NpemUodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jLTgwLSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jOjgxOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfU1lOUFJPWFkpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMtODItXFx0XFx0KyBzaXplb2Yoc3RydWN0IG5mX2Nvbm5fc3lucHJveHkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9NjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBjdGFfaXBfbmxhX3BvbGljeVtDVEFfSVBfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtNjUwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzo2NTE6I2lmIGRlZmluZWQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1QpIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTY1Mi1zdGF0aWMgc2l6ZV90IGN0bmV0bGlua19wcm90b19zaXplKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yNjMxPWN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yNjM1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyNjM2OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX05FVExJTktfR0xVRV9DVFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yNjM3LXN0YXRpYyBzaXplX3RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0yOTA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jdF9ob29rIGN0bmV0bGlua19nbHVlX2hvb2sgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjkxMy19O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyOTE0OiNlbmRpZiAvKiBDT05GSUdfTkVURklMVEVSX05FVExJTktfR0xVRV9DVCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yOTE1LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM4Njk9c3RhdGljIGludCBfX2luaXQgY3RuZXRsaW5rX2luaXQodm9pZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zODkxLVxcdH1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6Mzg5MjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzg5My1cXHQvKiBzZXR1cCBpbnRlcmFjdGlvbiBiZXR3ZWVuIG5mX3F1ZXVlIGFuZCBuZl9jb25udHJhY2tfbmV0bGluay4gKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zOTA2PXN0YXRpYyB2b2lkIF9fZXhpdCBjdG5ldGxpbmtfZXhpdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM5MTAtXFx0bmZuZXRsaW5rX3N1YnN5c191bnJlZ2lzdGVyKFxcdTAwMjZjdG5sX3N1YnN5cyk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM5MTE6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM5MTItXFx0UkNVX0lOSVRfUE9JTlRFUihuZm5sX2N0X2hvb2ssIE5VTEwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTc2PXN0YXRpYyBpbnQgbmZubF9ob29rX3B1dF9icGZfcHJvZ19pbmZvKHN0cnVjdCBza19idWZmICpubHNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy04My1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6ODQ6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ORVRGSUxURVJfQlBGX0xJTkspKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy04NS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYz0yNzg9bmZubF9ob29rX2VudHJpZXNfaGVhZCh1OCBwZiwgdW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqZGV2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTI4MC1cXHRjb25zdCBzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICpob29rX2hlYWQgPSBOVUxMO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzoyODE6I2lmIGRlZmluZWQoQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTKSB8fCBkZWZpbmVkKENPTkZJR19ORVRGSUxURVJfRUdSRVNTKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0yODItXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0yOTYtXFx0Y2FzZSBORlBST1RPX0FSUDpcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6Mjk3OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX0ZBTUlMWV9BUlBcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMjk4LVxcdFxcdGlmIChob29rIFxcdTAwM2U9IEFSUkFZX1NJWkUobmV0LVxcdTAwM2VuZi5ob29rc19hcnApKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMwMy1cXHRjYXNlIE5GUFJPVE9fQlJJREdFOlxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozMDQ6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zMDUtXFx0XFx0aWYgKGhvb2sgXFx1MDAzZT0gQVJSQVlfU0laRShuZXQtXFx1MDAzZW5mLmhvb2tzX2JyaWRnZSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzA5LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYzozMTA6I2lmIGRlZmluZWQoQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTKSB8fCBkZWZpbmVkKENPTkZJR19ORVRGSUxURVJfRUdSRVNTKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zMTEtXFx0Y2FzZSBORlBST1RPX05FVERFVjpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zMjEtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjMyMjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9JTkdSRVNTXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTMyMy1cXHRcXHRpZiAoaG9vayA9PSBORl9ORVRERVZfSU5HUkVTUylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0zMjUtI2VuZGlmXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjMyNjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1NcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzI3LVxcdFxcdGlmIChob29rID09IE5GX05FVERFVl9FR1JFU1MpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTI5MT1zdGF0aWMgc3RydWN0IG5mX2hvb2tfZW50cmllcyAqbmZfaG9va19lbnRyaWVzX2hlYWQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCB1OCBwZiwgdTggaG9va251bSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMjkzLVxcdHN3aXRjaCAocGYpIHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjI5NDojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9GQU1JTFlfQlJJREdFXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0yOTUtXFx0Y2FzZSBORlBST1RPX0JSSURHRTpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz02OD1zdHJ1Y3QgeHRfYWYge1xcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTcxLVxcdHN0cnVjdCBsaXN0X2hlYWQgdGFyZ2V0O1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzo3MjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy03My1cXHRzdHJ1Y3QgbXV0ZXggY29tcGF0X211dGV4O1xcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTcwND1zdGF0aWMgYm9vbCBlcnJvcl90Z19vayh1bnNpZ25lZCBpbnQgdXNlcnNpemUsIHVuc2lnbmVkIGludCBrZXJuc2l6ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy03MDktXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjcxMDojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy03MTEtaW50IHh0X2NvbXBhdF9hZGRfb2Zmc2V0KHVfaW50OF90IGFmLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgZGVsdGEpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9OTE2PUVYUE9SVF9TWU1CT0woeHRfY29tcGF0X2NoZWNrX2VudHJ5X29mZnNldHMpO1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzo5MTc6I2VuZGlmIC8qIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVQgKi9cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtOTE4LVxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTkzNC0gKlxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzo5MzU6ICogQWxzbyBzZWUgeHRfY29tcGF0X2NoZWNrX2VudHJ5X29mZnNldHMgZm9yIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVQgdmVyc2lvbi5cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtOTM2LSAqXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MTE2Mj12b2lkICp4dF9jb3B5X2NvdW50ZXJzKHNvY2twdHJfdCBhcmcsIHVuc2lnbmVkIGludCBsZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTE2OC1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MTE2OTojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMTcwLVxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MTIxND1FWFBPUlRfU1lNQk9MX0dQTCh4dF9jb3B5X2NvdW50ZXJzKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTIxNS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MTIxNjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0NPTVBBVFxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMjE3LWludCB4dF9jb21wYXRfdGFyZ2V0X29mZnNldChjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MTM5Nz1FWFBPUlRfU1lNQk9MX0dQTCh4dF90YWJsZV91bmxvY2spO1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xMzk4LVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoxMzk5OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTE0MDAtdm9pZCB4dF9jb21wYXRfbG9jayh1X2ludDhfdCBhZilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYz0xNDE0PUVYUE9SVF9TWU1CT0xfR1BMKHh0X3RlZV9lbmFibGVkKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMTQxNS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MTQxNjojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0xNDE3LURFRklORV9QRVJfQ1BVKHNlcWNvdW50X3QsIHh0X3JlY3NlcSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM9MjA5NT1FWFBPUlRfU1lNQk9MX0dQTCh4dF9wcm90b19maW5pKTtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjA5Ni1cXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmM6MjA5NzojaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWVxcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYy0yMDk4LS8qKlxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jPTIxODQ9c3RhdGljIGludCBfX2luaXQgeHRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIxODgtXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jOjIxODk6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTX0xFR0FDWSkpIHtcXG5uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMtMjE5MC1cXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xcbi0tXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIyMDAtXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2eHRbaV0ubXV0ZXgpO1xcbm5ldC9uZXRmaWx0ZXIveF90YWJsZXMuYzoyMjAxOiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxubmV0L25ldGZpbHRlci94X3RhYmxlcy5jLTIyMDItXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2eHRbaV0uY29tcGF0X211dGV4KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYz0xMzY9c3RhdGljIHZvaWQgbGltaXRfbXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMtMTQyLVxcbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYzoxNDM6I2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVRcXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMtMTQ0LXN0cnVjdCBjb21wYXRfeHRfcmF0ZWluZm8ge1xcbi0tXFxubmV0L25ldGZpbHRlci94dF9saW1pdC5jPTE3MT1zdGF0aWMgaW50IGxpbWl0X210X2NvbXBhdF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYy0xODQtfVxcbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYzoxODU6I2VuZGlmIC8qIENPTkZJR19ORVRGSUxURVJfWFRBQkxFU19DT01QQVQgKi9cXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMtMTg2LVxcbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYz0xODc9c3RhdGljIHN0cnVjdCB4dF9tYXRjaCBsaW1pdF9tdF9yZWcgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfbGltaXQuYy0xOTQtXFx0Lm1hdGNoc2l6ZSAgICAgICAgPSBzaXplb2Yoc3RydWN0IHh0X3JhdGVpbmZvKSxcXG5uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmM6MTk1OiNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVNfQ09NUEFUXFxubmV0L25ldGZpbHRlci94dF9saW1pdC5jLTE5Ni1cXHQuY29tcGF0c2l6ZSAgICAgICA9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X3JhdGVpbmZvKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDc6MjguMTAxMDAwNDk2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2NzQyMzQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIEtjb25maWcgb3B0aW9uczpcblxuKipLY29uZmlnIERpdmU6IE5FVEZJTFRFUl9ORVRMSU5LX0hPT0sgXHUwMDI2IE5GX05BVCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgTkVURklMVEVSX05FVExJTktfSE9PS2AgYW5kIGBORl9OQVRgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZW50cnkgaXRzZWxmLlwiIEkga25vdyB0aGVzZSBvcHRpb25zIGNhbiBiZSB0cmlja3ksIGFuZCBldmVuIGZvciBhbiBleHBlcnQsIHRoZSBwcmVjaXNlIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIGFyZW4ndCBhbHdheXMgaW1tZWRpYXRlbHkgb2J2aW91cy5cblxuSSdtIHRoaW5raW5nLCBcIklzIGBORVRGSUxURVJfTkVUTElOS19IT09LYCBhIGhhcmQgZGVwZW5kZW5jeSBmb3IgYE5GX05BVGAsIG9yIGlzIGl0IGp1c3Qgc3VnZ2VzdGVkPyBJcyBpdCByZXF1aXJlZCBmb3IgKnNvbWUqIE5GX05BVCBmdW5jdGlvbmFsaXR5IGJ1dCBub3QgYWxsP1wiIEkgd2FudCB0byBhdm9pZCBibGluZGx5IGFzc3VtaW5nIGFueXRoaW5nIGhlcmU7IGFzc3VtcHRpb25zIGluIHRoaXMgYXJlYSBjYW4gbGVhZCB0byBzdWJ0bGUgYnVncyBvciB1bm5lY2Vzc2FyaWx5IGJsb2F0ZWQga2VybmVscy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBkZWZhdWx0IHNldHRpbmdzLCBoZWxwIHRleHQsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgdGhhdCBhcmUgY29ubmVjdGVkIHRvIHRoZW0sIGFuZCBob3cgdGhvc2UgaW50ZXJhY3Qgd2l0aCBvdGhlciwgYnJvYWRlciBhc3BlY3RzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IG5ldGxpbmsgaW50ZXJhY3RzIHdpdGggTmV0ZmlsdGVyLlxuXG5VbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltdW0gc2V0IG9mIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBuZWVkIGVuYWJsZWQgdG8gYWNoaWV2ZSB3aGF0ZXZlciBzcGVjaWZpYyBOQVQgZnVuY3Rpb25hbGl0eSBJJ20gd29ya2luZyB3aXRoIGF0IHRoZSBtb21lbnQuIEtub3dpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlbSBpcyBrZXkuIE5vIHBvaW50IGluIGFjY2lkZW50YWxseSBpbnRyb2R1Y2luZyB1bndhbnRlZCBvdmVyaGVhZCBvciBicmVha2luZyBzb21lIG9ic2N1cmUgY29ybmVyIGNhc2UgYnkgbWlzY29uZmlndXJpbmcgdGhlIGtlcm5lbC4gU28sIHRvIHRoZSBLY29uZmlnIEkgZ28hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTA4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDc6MzAuOTY4NDI2NDg1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTQ0MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zMz1jb25maWcgTkVURklMVEVSX0JQRl9MSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDc6MzEuMDE5Mzc4OTQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU1OTAyNjU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEtjb25maWcgaW4gbmV0L25ldGZpbHRlcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBzb21lIG9mIHRoZSBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBJJ2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM2LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGFyY2hpdGVjdHVyZSBmb3IgbWFueSBvZiBteSBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbnMgYXJlIHN0b3JlZCwgc28gaXQgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5IHBvaW50LiBJIGV4cGVjdCB0byBzZWUgdGhlIG1haW4gZmVhdHVyZSBncm91cGluZ3Mgb3IgYXQgbGVhc3Qgc29tZSBjcnVjaWFsIGluaXRpYWwgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZGVmaW5lZCBhcm91bmQgdGhpcyBhcmVhLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uIGFuZCB0aGVuIEkgY2FuIHN0YXJ0IGJ1aWxkaW5nIG15IG1lbnRhbCBtb2RlbCBvZiB0aGUgbmV3IGFkZGl0aW9ucywgY2hhbmdlcywgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM3MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjMzLjU3ODQwODE0N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQVJQXFxuICAzMTpcXHRcXHRib29sXFxuICAzMjpcXHRcXG4gIDMzOlxcdGNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcXG4gIDM0OlxcdFxcdGRlZl9ib29sIEJQRl9TWVNDQUxMXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGJhc2UgaG9vayBkdW1wIHN1cHBvcnRcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gIDQwOlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA0MzpcXHRcXHQgIHRvIGxpc3QgdGhlIGJhc2UgbmV0ZmlsdGVyIGhvb2tzIHZpYSBORk5FVExJTksuXFxuICA0NDpcXHRcXHQgIFRoaXMgaXMgaGVscGZ1bCBmb3IgZGVidWdnaW5nLlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbiAgNDc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORkFDQ1Qgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDQ5OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNTA6XFx0XFx0aGVscFxcbiAgNTE6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA1MjpcXHRcXHQgIGZvciBleHRlbmRlZCBhY2NvdW50aW5nIHZpYSBORk5FVExJTksuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbiAgNTU6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4gIDU2OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICA1NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gIDU4OlxcdFxcdGhlbHBcXG4gIDU5OlxcdFxcdCAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydFxcbiAgNjA6XFx0XFx0ICBmb3IgcXVldWVpbmcgcGFja2V0cyB2aWEgTkZORVRMSU5LLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXFxuICA2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuICA2NDpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDY1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAgNjY6XFx0XFx0aGVscFxcbiAgNjc6XFx0XFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGUga2VybmVsIHdpbGwgaW5jbHVkZSBzdXBwb3J0XFxuICA2ODpcXHRcXHQgIGZvciBsb2dnaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy5cXG4gIDY5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0NzozMy41Nzg1MTc0MzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzcxMDE1NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipORl9OQVQgQ29uZmlndXJhdGlvbiBDaGVjayoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRpdmluZyBiYWNrIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2lyY2xlIGJhY2sgdG8gTkZfTkFULiBJdCdzIGNydWNpYWwgd2UgZG9uJ3Qgb3Zlcmxvb2sgaXQgaW4gdGhlIEtjb25maWcgZmlsZS4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIHN0YXR1cyB0aGVyZS4gQW55IGNoYW5nZXMsIGFueSBkZXBlbmRlbmNpZXMsIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcyBuZWVkIHRvIGJlIGRvdWJsZS1jaGVja2VkLiBBIG1pc2NvbmZpZ3VyYXRpb24gb24gTkZfTkFUIGNhbiBjYXNjYWRlIGludG8gc29tZSByZWFsbHkgbmFzdHkgbmV0d29ya2luZyBwcm9ibGVtcyB0aGF0IGFyZSBhIHBhaW4gdG8gZGVidWcuIFNvIGxldOKAmXMgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIgYW5kIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaXMgYWxpZ25lZCB3aXRoIG91ciBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBhbmQgdGFyZ2V0IHBsYXRmb3JtLiBXZSBkb24ndCB3YW50IGFueSBzdXJwcmlzZXMgd2hlbiB3ZSBnZXQgZG93biB0byBpbnRlZ3JhdGlvbi4gTGV0J3MgbWFrZSBzdXJlIGl0IGlzIGNvcnJlY3QgYW5kIGRvdWJsZSBjaGVjayBhbGwgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjM2LjM0OTUzNTU4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5MDE3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX05BVFxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zOTg9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MDYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQwNzpjb25maWcgTkZfTkFUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjM2LjM5OTQ0MzI5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDU5MjE4NzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEhvb2sgU2VxdWVuY2UgTnVtYmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGRldGFpbHMuIEZpcnN0LCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgZmllbGRzIHRvIHRoZSBgc3RydWN0IG5ldG5zX25mYCBzdHJ1Y3R1cmUsIHJlc2lkaW5nIHdpdGhpbiBgaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBwcm9iYWJseSBhYm91dCBzZXF1ZW5jaW5nIG9yIHZlcnNpb25pbmcgb2Ygc29tZSBzb3J0LiBOb3csIGxldCdzIHNlZSBob3cgdGhlc2UgbmV3IGZpZWxkcyBhcmUgdXNlZC5cblxuSW4gYG5ldC9uZXRmaWx0ZXIvY29yZS5jYCwgdGhlcmUncyBhIG5ldyBmdW5jdGlvbiBgYnVtcF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCB3aXRoaW4gYF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2tgIGFuZCBgX19uZl91bnJlZ2lzdGVyX25ldF9ob29rYC4gVGhpcyBjbGVhcmx5IHBvaW50cyB0b3dhcmRzIGEgbWVjaGFuaXNtIHRvIGluY3JlbWVudCB0aGUgc2VxdWVuY2UgbnVtYmVyIHdoZW5ldmVyIGEgbmV0ZmlsdGVyIGhvb2sgaXMgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQuIEl0IGFsc28gaW5pdGlhbGl6ZXMgdGhlc2Ugc2VxdWVuY2UgbnVtYmVycyBpbiBgbmV0ZmlsdGVyX25ldF9pbml0YC4gTWFrZXMgc2Vuc2Ug4oCTIHdlIG5lZWQgYSBzdGFydGluZyBwb2ludC5cblxuVGhlIGBuZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNgIGZpbGUgYWxzbyBoYXMgc2ltaWxhciBsb2dpYyB3aXRoIGBidW1wX25hdF9ob29rX2Jhc2Vfc2VxKHN0cnVjdCBuZXQgKm5ldClgLCBjYWxsZWQgaW4gYG5mX25hdF9yZWdpc3Rlcl9mbmAgYW5kIGBuZl9uYXRfdW5yZWdpc3Rlcl9mbmAsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gTkFUIGhvb2tzLiBUaGF0J3MgY29uc2lzdGVudCDigJMgd2UncmUgdHJhY2tpbmcgYSBzZXF1ZW5jZSBmb3IgTkFUIHNwZWNpZmljYWxseSBhcyB3ZWxsLlxuXG5Ob3csIHRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYC4gVGhlIHJlbW92YWwgb2YgYGhlYWR2YCBmcm9tIGBuZm5sX2R1bXBfaG9va19kYXRhYCBpcyBhIG1pbm9yIGRldGFpbCwgYnV0IHRoZSByZWZhY3RvcmluZyBvZiBgbmZubF9ob29rX2R1bXBfbmF0YCBhbmQgYG5mbmxfaG9va19kdW1wYCBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLiBUaGV5J3JlIG5vdyB1c2luZyBgbmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXFgIGFuZCBgbmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxYCB0byBwcm9wZXJseSBzeW5jaHJvbml6ZSBnZW5lcmF0aW9uIG51bWJlcnMuIFRoaXMgaXMgYSBjcnVjaWFsIGltcHJvdmVtZW50IGZvciBjb25zaXN0ZW5jeSBkdXJpbmcgZHVtcHMuXG5cblNwZWNpZmljYWxseSwgaW4gYG5mbmxfaG9va19kdW1wX25hdGAsIEkgc2VlIHRoYXQgaXQgaGFuZGxlcyByZXN0YXJ0L3Jlc3VtZSBkdXJpbmcgdGhlIGR1bXAgdXNpbmcgYGNiLVx1MDAzZWFyZ3NbMV1gIChpbmRleCkgYW5kIGBjYi1cdTAwM2VhcmdzWzJdYCAoc2VxdWVuY2UpLiBJdCByZXR1cm5zIGAtRUlOVFJgIGFuZCBpbmNyZW1lbnRzIGBjYi1cdTAwM2VzZXFgIGlmIGBiYXNlX3NlcWAgY2hhbmdlcy4gVGhpcyBzaG93cyB0aGUgaW50ZW50IHRvIGhhbmRsZSBjaGFuZ2VzIGR1cmluZyBhIG5ldGxpbmsgZHVtcC4gT24gdGhlIG90aGVyIGhhbmQsIGluIGBuZm5sX2hvb2tfZHVtcGAsIGl0IG5vdyB1c2VzIGBjYi1cdTAwM2VzZXEgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNm5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKWAgYW5kIGhhbmRsZXMgUkNVIGFuZCBkdW1wIGNvbnNpc3RlbmN5IGNoZWNrcyB3aXRoIGBubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnRgLiBUaGlzIGFsc28gZGVtb25zdHJhdGVzIGVmZm9ydHMgdG93YXJkIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGhhbmRsaW5nLlxuXG5UaGUgbmV4dCBxdWVzdGlvbiBpcywgaXMgdGhpcyBjb2RlIHBhdGggYWN0dWFsbHkgdXNlZD8gVGhlIGFuc3dlciBpcyB5ZXMsIGFzIHRoZSBuZm5ldGxpbmsgZHVtcCBob29rcyBhcmUgdHJpZ2dlcmVkIHZpYSBOZXRsaW5rIHVzaW5nIGBORk5MX1NVQlNZU19IT09LYCBtZXNzYWdlcywgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UuIE5ldGZpbHRlciBjb3JlIGhvb2sgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGFuZCBOQVQgaG9vayByZWdpc3RyYXRpb24gYXJlIGFsc28gcGFydCBvZiB0aGUgY29yZSBvcGVyYXRpb24gd2hlbiB0aGUgdXNlciBtYW5pcHVsYXRlcyBydWxlcyB3aXRoIGlwdGFibGVzIG9yIG5mdGFibGVzLiBUaGlzIGlzIGEgdmVyeSByZWFsIHNjZW5hcmlvLiBUaGlzIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYSBRRU1VIGVudmlyb25tZW50LlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IGBuZm5ldGxpbmtfaG9vay5jYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbmZuZXRsaW5rIGhvb2sgd29ya3MgaW4gZGV0YWlsLCBhbmQgd2hhdCB0aGUgZW50cnlwb2ludHMgYXJlLCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24uIFRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBtb3ZpbmcgdG93YXJkcyBhIG1vcmUgcm9idXN0IGFuZCBjb3JyZWN0IG5ldGxpbmsgaW50ZXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQyMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo0Mi40NTg2NjQ2MzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XFxuIDQwMzpcXHRcXG4gNDA0OlxcdFxcdGZvciAoOyBpIFxcdTAwM2MgZS1cXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XFxuIDQwNTpcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKmN1ciA9IFJFQURfT05DRShvcHNbaV0pO1xcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHRcXHRpZiAoY3VyLVxcdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxcbiA0MDg6XFx0XFx0XFx0XFx0ZXJyID0gbmZubF9ob29rX2R1bXBfbmF0KG5sc2tiLCBjYiwgY3VyLCBmYW1pbHkpO1xcbiA0MDk6XFx0XFx0XFx0ZWxzZSB7XFxuIDQxMDpcXHRcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgY3VyLFxcbiA0MTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGN1ci1cXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcXG4gNDEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcbiA0MTM6XFx0XFx0XFx0fVxcbiA0MTQ6XFx0XFx0XFx0aWYgKGVycilcXG4gNDE1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA0MTY6XFx0XFx0fVxcbiA0MTc6XFx0XFxuIDQxODpcXHRkb25lOlxcbiA0MTk6XFx0XFx0aWYgKG5sc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSAwKVxcbiA0MjA6XFx0XFx0XFx0bmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIobmxza2IpKTtcXG4gNDIxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA0MjI6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMF0gPSBpO1xcbiA0MjM6XFx0XFx0cmV0dXJuIG5sc2tiLVxcdTAwM2VsZW47XFxuIDQyNDpcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiA0Mjc6XFx0e1xcbiA0Mjg6XFx0XFx0Y29uc3Qgc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCk7XFxuIDQyOTpcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgKm5sYSA9IGNiLVxcdTAwM2VkYXRhO1xcbiA0MzA6XFx0XFx0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IE5VTEw7XFxuIDQzMTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChjYi1cXHUwMDNlc2tiLVxcdTAwM2Vzayk7XFxuIDQzMjpcXHRcXHR1OCBmYW1pbHkgPSBuZm1zZy1cXHUwMDNlbmZnZW5fZmFtaWx5O1xcbiA0MzM6XFx0XFx0Y2hhciBuYW1lW0lGTkFNU0laXSA9IFxcXCJcXFwiO1xcbiA0MzQ6XFx0XFx0Y29uc3Qgdm9pZCAqaGVhZDtcXG4gNDM1OlxcdFxcdHUzMiBob29rbnVtO1xcbiA0MzY6XFx0XFxuIDQzNzpcXHRcXHRob29rbnVtID0gbnRvaGwobmxhX2dldF9iZTMyKG5sYVtORk5MQV9IT09LX0hPT0tOVU1dKSk7XFxuIDQzODpcXHRcXHRpZiAoaG9va251bSBcXHUwMDNlIDI1NSlcXG4gNDM5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0NDA6XFx0XFxuIDQ0MTpcXHRcXHRpZiAoZmFtaWx5ID09IE5GUFJPVE9fTkVUREVWKSB7XFxuIDQ0MjpcXHRcXHRcXHRpZiAoIW5sYVtORk5MQV9IT09LX0RFVl0pXFxuIDQ0MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ0OlxcdFxcbiA0NDU6XFx0XFx0XFx0bmxhX3N0cnNjcHkobmFtZSwgbmxhW05GTkxBX0hPT0tfREVWXSwgc2l6ZW9mKG5hbWUpKTtcXG4gNDQ2OlxcdFxcdH1cXG4gNDQ3OlxcdFxcbiA0NDg6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA0NDk6XFx0XFx0LyogTm90IGRlcmVmZXJlbmNlZDsgZm9yIGNvbnNpc3RlbmN5IGNoZWNrIG9ubHkgKi9cXG4gNDUwOlxcdFxcdGhlYWQgPSBuZm5sX2hvb2tfZW50cmllc19oZWFkKGZhbWlseSwgaG9va251bSwgbmV0LCBuYW1lKTtcXG4gNDUxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA0NTI6XFx0XFxuIDQ1MzpcXHRcXHRpZiAoaGVhZCBcXHUwMDI2XFx1MDAyNiBJU19FUlIoaGVhZCkpXFxuIDQ1NDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihoZWFkKTtcXG4gNDU1OlxcdFxcbiA0NTY6XFx0XFx0Y3R4ID0ga3phbGxvY19vYmooKmN0eCk7XFxuIDQ1NzpcXHRcXHRpZiAoIWN0eClcXG4gNDU4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0NTk6XFx0XFxuIDQ2MDpcXHRcXHRzdHJzY3B5KGN0eC1cXHUwMDNlZGV2bmFtZSwgbmFtZSwgc2l6ZW9mKGN0eC1cXHUwMDNlZGV2bmFtZSkpO1xcbiA0NjE6XFx0XFx0Y3R4LVxcdTAwM2Vob29rID0gaG9va251bTtcXG4gNDYyOlxcdFxcdGNiLVxcdTAwM2VkYXRhID0gY3R4O1xcbiA0NjM6XFx0XFxuIDQ2NDpcXHRcXHRyZXR1cm4gMDtcXG4gNDY1OlxcdH1cXG4gNDY2OlxcdFxcbiA0Njc6XFx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdG9wKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gNDY4OlxcdHtcXG4gNDY5OlxcdFxcdGtmcmVlKGNiLVxcdTAwM2VkYXRhKTtcXG4gNDcwOlxcdFxcdHJldHVybiAwO1xcbiA0NzE6XFx0fVxcbiA0NzI6XFx0XFxuIDQ3MzpcXHRzdGF0aWMgaW50IG5mbmxfaG9va19nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNDc0OlxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbiA0NzU6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBubGFbXSlcXG4gNDc2OlxcdHtcXG4gNDc3OlxcdFxcdGlmICghbmxhW05GTkxBX0hPT0tfSE9PS05VTV0pXFxuIDQ3ODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDc5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo0Mi40NTg3NjE1NjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEwMTk5MTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSByZXN0IG9mIGBuZm5ldGxpbmtfaG9vay5jYC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIE5ldGZpbHRlciBuZXRsaW5rIGhvb2sgc3lzdGVtIGlzIGltcGxlbWVudGVkLiBJJ20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIG5ldGxpbmsgYXJjaGl0ZWN0dXJlLCBidXQgSSBuZWVkIHRvIG1hcCBpdCB0byB0aGlzIHNwZWNpZmljIGZpbGUgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgaGVyZT8gQXJlIHRoZXkgZGVhbGluZyB3aXRoIG1lc3NhZ2UgZm9ybWF0dGluZywgcGFyc2luZywgYW5kIGRpc3BhdGNoaW5nPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIG5ldGxpbmsgc29ja2V0LCB0aGUgaG9vayByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24gbWVjaGFuaXNtcywgYW5kIHRoZSBhY3R1YWwgcGFja2V0IHByb2Nlc3Npbmcgd2l0aGluIHRoZSBOZXRmaWx0ZXIgY29udGV4dC4gVGltZSB0byBhbmFseXplLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYW5kbGUgdGhlIGNvbW11bmljYXRpb24gYW5kIGludGVyYWN0aW9uIGJldHdlZW4gdXNlci1zcGFjZSBhcHBsaWNhdGlvbnMgYW5kIHRoZSBrZXJuZWwncyBOZXRmaWx0ZXIgc3Vic3lzdGVtIHRocm91Z2ggbmV0bGluay4gVW5kZXJzdGFuZGluZyB0aGlzIGZpbGUgaXMgY3JpdGljYWwgZm9yIGZpZ3VyaW5nIG91dCBob3cgdG8gYnVpbGQgY3VzdG9tIE5ldGZpbHRlciBtb2R1bGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAwNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDc6NDQuNTYwNzU2NDIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0XFx0cmV0dXJuIDA7XFxuIDQ3MTpcXHR9XFxuIDQ3MjpcXHRcXG4gNDczOlxcdHN0YXRpYyBpbnQgbmZubF9ob29rX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA0NzQ6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuIDQ3NTpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxcbiA0NzY6XFx0e1xcbiA0Nzc6XFx0XFx0aWYgKCFubGFbTkZOTEFfSE9PS19IT09LTlVNXSlcXG4gNDc4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Nzk6XFx0XFxuIDQ4MDpcXHRcXHRpZiAoaW5mby1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19mbGFncyBcXHUwMDI2IE5MTV9GX0RVTVApIHtcXG4gNDgxOlxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xcbiA0ODI6XFx0XFx0XFx0XFx0LnN0YXJ0ID0gbmZubF9ob29rX2R1bXBfc3RhcnQsXFxuIDQ4MzpcXHRcXHRcXHRcXHQuZG9uZSA9IG5mbmxfaG9va19kdW1wX3N0b3AsXFxuIDQ4NDpcXHRcXHRcXHRcXHQuZHVtcCA9IG5mbmxfaG9va19kdW1wLFxcbiA0ODU6XFx0XFx0XFx0XFx0Lm1vZHVsZSA9IFRISVNfTU9EVUxFLFxcbiA0ODY6XFx0XFx0XFx0XFx0LmRhdGEgPSAodm9pZCAqKW5sYSxcXG4gNDg3OlxcdFxcdFxcdH07XFxuIDQ4ODpcXHRcXG4gNDg5OlxcdFxcdFxcdHJldHVybiBuZl9uZXRsaW5rX2R1bXBfc3RhcnRfcmN1KGluZm8tXFx1MDAzZXNrLCBza2IsIGluZm8tXFx1MDAzZW5saCwgXFx1MDAyNmMpO1xcbiA0OTA6XFx0XFx0fVxcbiA0OTE6XFx0XFxuIDQ5MjpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDQ5MzpcXHR9XFxuIDQ5NDpcXHRcXG4gNDk1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZm5sX2hvb2tfY2JbTkZOTF9NU0dfSE9PS19NQVhdID0ge1xcbiA0OTY6XFx0XFx0W05GTkxfTVNHX0hPT0tfR0VUXSA9IHtcXG4gNDk3OlxcdFxcdFxcdC5jYWxsXFx0XFx0PSBuZm5sX2hvb2tfZ2V0LFxcbiA0OTg6XFx0XFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfUkNVLFxcbiA0OTk6XFx0XFx0XFx0LmF0dHJfY291bnRcXHQ9IE5GTkxBX0hPT0tfTUFYLFxcbiA1MDA6XFx0XFx0XFx0LnBvbGljeVxcdFxcdD0gbmZubF9ob29rX25sYV9wb2xpY3lcXG4gNTAxOlxcdFxcdH0sXFxuIDUwMjpcXHR9O1xcbiA1MDM6XFx0XFxuIDUwNDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mbmV0bGlua19zdWJzeXN0ZW0gbmZob29rX3N1YnN5cyA9IHtcXG4gNTA1OlxcdFxcdC5uYW1lXFx0XFx0XFx0XFx0PSBcXFwibmZob29rXFxcIixcXG4gNTA2OlxcdFxcdC5zdWJzeXNfaWRcXHRcXHRcXHQ9IE5GTkxfU1VCU1lTX0hPT0ssXFxuIDUwNzpcXHRcXHQuY2JfY291bnRcXHRcXHRcXHQ9IE5GTkxfTVNHX0hPT0tfTUFYLFxcbiA1MDg6XFx0XFx0LmNiXFx0XFx0XFx0XFx0PSBuZm5sX2hvb2tfY2IsXFxuIDUwOTpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo0NC41NjA4Mzg3MjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA1Nzk0MDE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTkFUIFJlZ2lzdHJhdGlvbiBcdTAwMjYgVW5yZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBOQVQgY29yZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IE5ldGZpbHRlciBOQVQgZnVuY3Rpb25zIGFyZSByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IHRoZSBgbmZfbmF0X3JlZ2lzdGVyX2ZuYCBhbmQgYG5mX25hdF91bnJlZ2lzdGVyX2ZuYCBmdW5jdGlvbnMsIGFzIHRoZXkgYXJlIGxpa2VseSB0aGUgaGVhcnQgb2YgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJ2xsIGhlYWQgb3ZlciB0byBgbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZS4gRnJvbSB0aGVyZSBJJ2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIE5BVCBmdW5jdGlvbnMgYXJlIGhvb2tlZCBpbnRvIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLiBJIGhhdmUgYSBmZWVsaW5nIEknbGwgYWxzbyBiZSBlbmNvdW50ZXJpbmcgc29tZSBtdXRleGVzIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODg2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo0Ni42MTg3ODI0MTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjM1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjM1OlxcdFxcdFxcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIG5hdF9vcHMsIG9wc19jb3VudCk7XFxuMTIzNjpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjEyMzc6XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZl9uYXRfcHJvdG9fbXV0ZXgpO1xcbjEyMzg6XFx0XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9wc19jb3VudDsgaSsrKSB7XFxuMTIzOTpcXHRcXHRcXHRcXHRcXHRwcml2ID0gbmF0X29wc1tpXS5wcml2O1xcbjEyNDA6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfcmN1KHByaXYsIHJjdV9oZWFkKTtcXG4xMjQxOlxcdFxcdFxcdFxcdH1cXG4xMjQyOlxcdFxcdFxcdFxcdGtmcmVlX3JjdShuYXRfb3BzLCByY3UpO1xcbjEyNDM6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMjQ0OlxcdFxcdFxcdH1cXG4xMjQ1OlxcdFxcbjEyNDY6XFx0XFx0XFx0bmF0X3Byb3RvX25ldC1cXHUwMDNlbmF0X2hvb2tfb3BzID0gbmF0X29wcztcXG4xMjQ3OlxcdFxcdH1cXG4xMjQ4OlxcdFxcbjEyNDk6XFx0XFx0bmF0X29wcyA9IG5hdF9wcm90b19uZXQtXFx1MDAzZW5hdF9ob29rX29wcztcXG4xMjUwOlxcdFxcdHByaXYgPSBuYXRfb3BzW2hvb2tudW1dLnByaXY7XFxuMTI1MTpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFwcml2KSkge1xcbjEyNTI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZl9uYXRfcHJvdG9fbXV0ZXgpO1xcbjEyNTM6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjEyNTQ6XFx0XFx0fVxcbjEyNTU6XFx0XFxuMTI1NjpcXHRcXHRyZXQgPSBuZl9ob29rX2VudHJpZXNfaW5zZXJ0X3JhdyhcXHUwMDI2cHJpdi1cXHUwMDNlZW50cmllcywgb3BzKTtcXG4xMjU3OlxcdFxcdGlmIChyZXQgPT0gMCkge1xcbjEyNTg6XFx0XFx0XFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xcbjEyNTk6XFx0XFx0XFx0bmF0X3Byb3RvX25ldC1cXHUwMDNldXNlcnMrKztcXG4xMjYwOlxcdFxcdH1cXG4xMjYxOlxcdFxcbjEyNjI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZl9uYXRfcHJvdG9fbXV0ZXgpO1xcbjEyNjM6XFx0XFx0cmV0dXJuIHJldDtcXG4xMjY0OlxcdH1cXG4xMjY1OlxcdFxcbjEyNjY6XFx0dm9pZCBuZl9uYXRfdW5yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcXG4xMjY3OlxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG9wc19jb3VudClcXG4xMjY4OlxcdHtcXG4xMjY5OlxcdFxcdHN0cnVjdCBuYXRfbmV0ICpuYXRfbmV0ID0gbmV0X2dlbmVyaWMobmV0LCBuYXRfbmV0X2lkKTtcXG4xMjcwOlxcdFxcdHN0cnVjdCBuZl9uYXRfaG9va3NfbmV0ICpuYXRfcHJvdG9fbmV0O1xcbjEyNzE6XFx0XFx0c3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2O1xcbjEyNzI6XFx0XFx0c3RydWN0IG5mX2hvb2tfb3BzICpuYXRfb3BzO1xcbjEyNzM6XFx0XFx0aW50IGhvb2tudW0gPSBvcHMtXFx1MDAzZWhvb2tudW07XFxuMTI3NDpcXHRcXHRpbnQgaTtcXG4xMjc1OlxcdFxcbjEyNzY6XFx0XFx0aWYgKHBmIFxcdTAwM2U9IEFSUkFZX1NJWkUobmF0X25ldC1cXHUwMDNlbmF0X3Byb3RvX25ldCkpXFxuMTI3NzpcXHRcXHRcXHRyZXR1cm47XFxuMTI3ODpcXHRcXG4xMjc5OlxcdFxcdG5hdF9wcm90b19uZXQgPSBcXHUwMDI2bmF0X25ldC1cXHUwMDNlbmF0X3Byb3RvX25ldFtwZl07XFxuMTI4MDpcXHRcXG4xMjgxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm5mX25hdF9wcm90b19tdXRleCk7XFxuMTI4MjpcXHRcXHRpZiAoV0FSTl9PTihuYXRfcHJvdG9fbmV0LVxcdTAwM2V1c2VycyA9PSAwKSlcXG4xMjgzOlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjEyODQ6XFx0XFxuMTI4NTpcXHRcXHRuYXRfcHJvdG9fbmV0LVxcdTAwM2V1c2Vycy0tO1xcbjEyODY6XFx0XFxuMTI4NzpcXHRcXHRuYXRfb3BzID0gbmF0X3Byb3RvX25ldC1cXHUwMDNlbmF0X2hvb2tfb3BzO1xcbjEyODg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9wc19jb3VudDsgaSsrKSB7XFxuMTI4OTpcXHRcXHRcXHRpZiAobmF0X29wc1tpXS5ob29rbnVtID09IGhvb2tudW0pIHtcXG4xMjkwOlxcdFxcdFxcdFxcdGhvb2tudW0gPSBpO1xcbjEyOTE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTI5MjpcXHRcXHRcXHR9XFxuMTI5MzpcXHRcXHR9XFxuMTI5NDpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGkgPT0gb3BzX2NvdW50KSlcXG4xMjk1OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjEyOTY6XFx0XFx0cHJpdiA9IG5hdF9vcHNbaG9va251bV0ucHJpdjtcXG4xMjk3OlxcdFxcdG5mX2hvb2tfZW50cmllc19kZWxldGVfcmF3KFxcdTAwMjZwcml2LVxcdTAwM2VlbnRyaWVzLCBvcHMpO1xcbjEyOTg6XFx0XFx0YnVtcF9uYXRfaG9va19iYXNlX3NlcShuZXQpO1xcbjEyOTk6XFx0XFxuMTMwMDpcXHRcXHRpZiAobmF0X3Byb3RvX25ldC1cXHUwMDNldXNlcnMgPT0gMCkge1xcbjEzMDE6XFx0XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBuYXRfb3BzLCBvcHNfY291bnQpO1xcbjEzMDI6XFx0XFxuMTMwMzpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb3BzX2NvdW50OyBpKyspIHtcXG4xMzA0OlxcdFxcdFxcdFxcdHByaXYgPSBuYXRfb3BzW2ldLnByaXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjQ2LjYxODg5Mzc0M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjI2OTEwMDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldGZpbHRlciBIb29rIFJlZ2lzdHJhdGlvbiBhbmQgVW5yZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBOZXRmaWx0ZXIgY29yZSBhZ2Fpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGVzZSBob29rcyBhcmUgcmVnaXN0ZXJlZCBhbmQgdW5yZWdpc3RlcmVkIHdpdGhpbiB0aGUgbmV0d29yayBuYW1lc3BhY2UuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYG5ldC9uZXRmaWx0ZXIvY29yZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb25zIGBfX25mX3JlZ2lzdGVyX25ldF9ob29rYCBhbmQgYF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AuIEkgc3VzcGVjdCB0aGUgaW50ZXJhY3Rpb25zIHN1cnJvdW5kaW5nIHRoZXNlIHR3byBmdW5jdGlvbnMgaG9sZCB0aGUga2V5cyB0byB0aGUgcHJvYmxlbXMgSSdtIGN1cnJlbnRseSB3cmVzdGxpbmcgd2l0aC4gSSdsbCBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmaW5lIHBvaW50cyBvZiBob3cgbmV0ZmlsdGVyIGhhbmRsZXMgdGhlIG5ldG5zLXNwZWNpZmljIGRldGFpbHMgd2l0aGluIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyMjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjQ4Ljg0NTgwNjkwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjU6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDQyNjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA0Mjc6XFx0XFx0XFx0YnJlYWs7XFxuIDQyODpcXHRcXHR9XFxuIDQyOTpcXHRcXG4gNDMwOlxcdFxcdHBwID0gbmZfaG9va19lbnRyeV9oZWFkKG5ldCwgcGYsIHJlZy1cXHUwMDNlaG9va251bSwgcmVnLVxcdTAwM2VkZXYpO1xcbiA0MzE6XFx0XFx0aWYgKCFwcClcXG4gNDMyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MzM6XFx0XFxuIDQzNDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZuZl9ob29rX211dGV4KTtcXG4gNDM1OlxcdFxcbiA0MzY6XFx0XFx0cCA9IG5mX2VudHJ5X2RlcmVmZXJlbmNlKCpwcCk7XFxuIDQzNzpcXHRcXHRuZXdfaG9va3MgPSBuZl9ob29rX2VudHJpZXNfZ3JvdyhwLCByZWcpO1xcbiA0Mzg6XFx0XFxuIDQzOTpcXHRcXHRpZiAoIUlTX0VSUihuZXdfaG9va3MpKSB7XFxuIDQ0MDpcXHRcXHRcXHRidW1wX2hvb2tfYmFzZV9zZXEobmV0KTtcXG4gNDQxOlxcdFxcdFxcdGhvb2tzX3ZhbGlkYXRlKG5ld19ob29rcyk7XFxuIDQ0MjpcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoKnBwLCBuZXdfaG9va3MpO1xcbiA0NDM6XFx0XFx0fVxcbiA0NDQ6XFx0XFxuIDQ0NTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5mX2hvb2tfbXV0ZXgpO1xcbiA0NDY6XFx0XFx0aWYgKElTX0VSUihuZXdfaG9va3MpKVxcbiA0NDc6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobmV3X2hvb2tzKTtcXG4gNDQ4OlxcdFxcbiA0NDk6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbiA0NTA6XFx0XFx0aWYgKG5mX2luZ3Jlc3NfaG9vayhyZWcsIHBmKSlcXG4gNDUxOlxcdFxcdFxcdG5ldF9pbmNfaW5ncmVzc19xdWV1ZSgpO1xcbiA0NTI6XFx0I2VuZGlmXFxuIDQ1MzpcXHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1NcXG4gNDU0OlxcdFxcdGlmIChuZl9lZ3Jlc3NfaG9vayhyZWcsIHBmKSlcXG4gNDU1OlxcdFxcdFxcdG5ldF9pbmNfZWdyZXNzX3F1ZXVlKCk7XFxuIDQ1NjpcXHQjZW5kaWZcXG4gNDU3OlxcdFxcdG5mX3N0YXRpY19rZXlfaW5jKHJlZywgcGYpO1xcbiA0NTg6XFx0XFxuIDQ1OTpcXHRcXHRCVUdfT04ocCA9PSBuZXdfaG9va3MpO1xcbiA0NjA6XFx0XFx0bmZfaG9va19lbnRyaWVzX2ZyZWUocCk7XFxuIDQ2MTpcXHRcXHRyZXR1cm4gMDtcXG4gNDYyOlxcdH1cXG4gNDYzOlxcdFxcbiA0NjQ6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDc6NDguODQ1ODkyODcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTczMzM0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gTmV0ZmlsdGVyIFVucmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IE5ldGZpbHRlciBob29rcyBhcmUgdW5yZWdpc3RlcmVkLCBlc3BlY2lhbGx5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2Agd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2NvcmUuY2AuIFRoaXMgc3VnZ2VzdHMgYSBjb3JlLCBpbnRlcm5hbCBmdW5jdGlvbiwgcmF0aGVyIHRoYW4gYW4gQVBJIGV4cG9zZWQgZGlyZWN0bHkgdG8gbW9kdWxlcy4gSSdtIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaXMgYXQgdGhlIGhlYXJ0IG9mIHJlbW92aW5nIGEgaG9vayBmcm9tIGEgc3BlY2lmaWMgbmV0d29yayBuYW1lc3BhY2UsIGdpdmVuIHRoZSBgbmV0YCBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBob29rIGxpc3RzLCBhbnkgbG9ja3MgdGhhdCBhcmUgbGlrZWx5IGludm9sdmVkLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gdHJhZmZpYyB0aGF0IHdhcyBwcmV2aW91c2x5IHJvdXRlZCB0aHJvdWdoIHRob3NlIGhvb2tzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY2xlYW51cCBvcGVyYXRpb25zLCByZWZlcmVuY2UgY291bnRpbmcgKGlmIHByZXNlbnQpLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgYW50aWNpcGF0ZSBzZWVpbmcgaW50ZXJhY3Rpb25zIHdpdGggYG5mX2hvb2tfb3BzYCBzdHJ1Y3R1cmVzIGFuZCBwb3RlbnRpYWxseSBpbXBsaWNhdGlvbnMgZm9yIGNvbm50cmFjayBvciBvdGhlciBzdGF0ZWZ1bCBtb2R1bGVzIHdoaWNoIG1heSBiZSBkZXBlbmRlbnQgb24gdGhvc2UgaG9va3MuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gdmVyaWZ5IGlmIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSB1bnJlZ2lzdGVyIGNhbGxiYWNrcywgb3IgaWYgaXQgbWlnaHQgYmUgY2FsbGVkIGluIG90aGVyIHNjZW5hcmlvcyAoZS5nLiwgbmFtZXNwYWNlIGRlc3RydWN0aW9uKS4gRmluYWxseSwgSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHRoaXMgZnVuY3Rpb24ncyByZWxhdGlvbiB0byBvdGhlciBhc3NvY2lhdGVkIGZ1bmN0aW9ucyBsaWtlIGBuZl9yZWdpc3Rlcl9uZXRfaG9va2AgdG8gdW5kZXJzdGFuZCB0aGUgd2hvbGUgbGlmZWN5Y2xlIG9mIGEgbmV0ZmlsdGVyIGhvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTkyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo1MS4yMDMyMjg5MTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcbiA1MDE6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bmZfaG9va19tdXRleCk7XFxuIDUwMjpcXHRcXG4gNTAzOlxcdFxcdHAgPSBuZl9lbnRyeV9kZXJlZmVyZW5jZSgqcHApO1xcbiA1MDQ6XFx0XFx0aWYgKFdBUk5fT05fT05DRSghcCkpIHtcXG4gNTA1OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmZfaG9va19tdXRleCk7XFxuIDUwNjpcXHRcXHRcXHRyZXR1cm47XFxuIDUwNzpcXHRcXHR9XFxuIDUwODpcXHRcXG4gNTA5OlxcdFxcdGlmIChuZl9yZW1vdmVfbmV0X2hvb2socCwgcmVnKSkge1xcbiA1MTA6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfSU5HUkVTU1xcbiA1MTE6XFx0XFx0XFx0aWYgKG5mX2luZ3Jlc3NfaG9vayhyZWcsIHBmKSlcXG4gNTEyOlxcdFxcdFxcdFxcdG5ldF9kZWNfaW5ncmVzc19xdWV1ZSgpO1xcbiA1MTM6XFx0I2VuZGlmXFxuIDUxNDpcXHQjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9FR1JFU1NcXG4gNTE1OlxcdFxcdFxcdGlmIChuZl9lZ3Jlc3NfaG9vayhyZWcsIHBmKSlcXG4gNTE2OlxcdFxcdFxcdFxcdG5ldF9kZWNfZWdyZXNzX3F1ZXVlKCk7XFxuIDUxNzpcXHQjZW5kaWZcXG4gNTE4OlxcdFxcdFxcdG5mX3N0YXRpY19rZXlfZGVjKHJlZywgcGYpO1xcbiA1MTk6XFx0XFx0XFx0YnVtcF9ob29rX2Jhc2Vfc2VxKG5ldCk7XFxuIDUyMDpcXHRcXHR9IGVsc2Uge1xcbiA1MjE6XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJob29rIG5vdCBmb3VuZCwgcGYgJWQgbnVtICVkXFxcIiwgcGYsIHJlZy1cXHUwMDNlaG9va251bSk7XFxuIDUyMjpcXHRcXHR9XFxuIDUyMzpcXHRcXG4gNTI0OlxcdFxcdHAgPSBfX25mX2hvb2tfZW50cmllc190cnlfc2hyaW5rKHAsIHBwKTtcXG4gNTI1OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmZfaG9va19tdXRleCk7XFxuIDUyNjpcXHRcXHRpZiAoIXApXFxuIDUyNzpcXHRcXHRcXHRyZXR1cm47XFxuIDUyODpcXHRcXG4gNTI5OlxcdFxcdG5mX3F1ZXVlX25mX2hvb2tfZHJvcChuZXQpO1xcbiA1MzA6XFx0XFx0bmZfaG9va19lbnRyaWVzX2ZyZWUocCk7XFxuIDUzMTpcXHR9XFxuIDUzMjpcXHRcXG4gNTMzOlxcdHZvaWQgbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnKVxcbiA1MzQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo1MS4yMDMzMTc5ODhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzcwMjk5MTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIElzIHRoaXMgY29kZSByaXBlIGZvciBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgcG9zaXRpdmUgaW5kaWNhdG9ycyBhcmUgc2NyZWFtaW5nIFwieWVzLlwiIFdlJ3JlIGxvb2tpbmcgYXQgY29kZSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMg4oCTIGFscmVhZHkgYSBnb29kIHNpZ24uIFNwZWNpZmljYWxseSwgdGhlcmUncyB0aGUgcG90ZW50aWFsIGZvciBjb25jdXJyZW5jeSBpc3N1ZXMgaW52b2x2aW5nIGxvY2tsZXNzIFJDVSByZWFkcyBhbmQgc2VxdWVuY2UgY291bnRlcnMgKGBob29rX2Jhc2Vfc2VxYCwgYG5hdF9ob29rX2Jhc2Vfc2VxYCkuIFRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIGhvb2sgcmVnaXN0ZXJpbmcsIHVucmVnaXN0ZXJpbmcgYW5kIG5ldGxpbmsgZHVtcHMgKGBuZm5sX2hvb2tfZHVtcGAsIGBuZm5sX2hvb2tfZHVtcF9uYXRgKSBhcmUgYWxsIGluIHBsYXkgc2ltdWx0YW5lb3VzbHkuIFRoZSBmYWN0IHRoYXQgdGhlIGNvZGUgdG91Y2hlcyBkdW1wIHJlc3VtcHRpb24sIGFyZ3VtZW50IGluZGV4aW5nLCBzZXF1ZW5jZSBjaGVja3MsIGFuZCBjb25zaXN0ZW5jeSBjaGVja3M/IFRoYXQncyBnb2xkLiBgV29ydGhGdXp6aW5nYD8gRGVmaW5pdGVseSB0cnVlLlxuXG5Ob3csIGxldCdzIHNvbGlkaWZ5IHRoaXMgZm9yIGZ1enppbmcuIFdlIG5lZWQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zLiBGaXJzdCwgd2Uga25vdyB3ZSd2ZSBjb25maXJtZWQgYFdvcnRoRnV6emluZ2AgaXMgdHJ1ZS4gVGhlbiwgd2UgbmVlZCB0byBrbm93IGBFbmFibGVDb25maWdzYDpcblxuTG9va3MgbGlrZSB3ZSBuZWVkOlxuXG4qICAgYE5FVEZJTFRFUmAgLSB0aGF0J3MgYSBnaXZlbi5cbiogICBgTkVURklMVEVSX05FVExJTktfSE9PS2AgLSB3aGljaCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgIGFuZCBgTkZfVEFCTEVTYCAod2hpY2ggc2VsZWN0cyBgTkVURklMVEVSX05FVExJTktgKS5cbiogICBgTkZfTkFUYCDigJMgdGhpcyBpcyBrZXkgc2luY2UgY2hhbmdlcyBhcmUgaW4gYG5mX25hdF9jb3JlLmNgLlxuXG5JJ2xsIGRvdWJsZS1jaGVjayB0aG9zZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gSW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIEkgbmVlZCB0byBjb25maXJtOlxuXG4qICAgYE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tgOiBUaGlzIGluZGVlZCBgZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURgLCBgZGVwZW5kcyBvbiBORl9UQUJMRVNgLCBhbmQgYHNlbGVjdCBORVRGSUxURVJfTkVUTElOS2AuIENoZWNrcyBvdXQuXG4qICAgYE5GX05BVGA6IFRpbWUgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkZfTkFUYC4gTmVlZCB0byBsb29rIGF0IHRob3NlIHRvby5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4NTIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo1NC45MDYzMTI4NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NjgxODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9OQVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz05OT1pZiBORl9OQVRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDA6Y29uZmlnIE5GX05BVF9TTk1QX0JBU0lDXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJCYXNpYyBTTk1QLUFMRyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTE3LVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjExODpjb25maWcgTkZfTkFUX1BQVFBcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX05BVF9IMzIzXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzk4PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDA2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0MDc6Y29uZmlnIE5GX05BVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MDgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQxNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDE2OmNvbmZpZyBORl9OQVRfQU1BTkRBXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQxNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQyMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDIxOmNvbmZpZyBORl9OQVRfRlRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQyMi1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQyNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDI2OmNvbmZpZyBORl9OQVRfSVJDXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQyNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDMxOmNvbmZpZyBORl9OQVRfU0lQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzMi1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQzNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDM2OmNvbmZpZyBORl9OQVRfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MzctXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ0MTpjb25maWcgTkZfTkFUX1JFRElSRUNUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0Mi1cXHRib29sXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ0My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDQ0OmNvbmZpZyBORl9OQVRfTUFTUVVFUkFERVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDUtXFx0Ym9vbFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ0Nzpjb25maWcgTkZfTkFUX09WU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NDgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo1NC45NzM5OTgyNTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyNTk3ODg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb246XG5cbioqQW5hbHl6aW5nIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIC0gRm9jdXNlZCBvbiBMaW5lIDQwNyoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gbGluZSA0MDcgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBLY29uZmlnIGZpbGVzIGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIG9mIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHN5c3RlbSwgc28gdGhpcyBsaW5lIGlzIGxpa2VseSBjb250cmlidXRpbmcgdG8gdGhlIGJ1aWxkIHByb2Nlc3MgaW4gc29tZSB3YXkuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIG1vZHVsZSBiZWluZyBjb25maWd1cmVkIG9yIGVuYWJsZWQvZGlzYWJsZWQgdGhlcmUsIHRoZSBzcGVjaWZpYyBmZWF0dXJlLCBhbmQgaXRzIGRlcGVuZGVuY2llcyBvbiBvdGhlciBjb21wb25lbnRzLiBTaW5jZSBJJ20gdmVyeSBmYW1pbGlhciB3aXRoIG5ldGZpbHRlciBhbmQgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLCBJJ2xsIGJlIHF1aWNrbHkgaWRlbnRpZnlpbmcga2V5d29yZHMgYW5kIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGxpbmUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ2xsIGV4cGVjdCB0byBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBuZXRmaWx0ZXIgbW9kdWxlLCBvcHRpb24sIG9yIHBlcmhhcHMgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgdGhhdCBndWlkZXMgd2hhdCBnZXRzIGluY2x1ZGVkIGluIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UuIFRpbWUgdG8gc2VlIHdoYXQncyBhY3R1YWxseSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0Nzo1Ny4yOTk5ODA5MzFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDU6XFx0XFx0ICB0aGUgZW5xdWV1ZWQgdmlhIE5GTkVUTElOSy5cXG4gNDA2OlxcdFxcbiA0MDc6XFx0Y29uZmlnIE5GX05BVFxcbiA0MDg6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgQWRkcmVzcyBUcmFuc2xhdGlvbiBzdXBwb3J0XFxcIlxcbiA0MDk6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG4gNDEwOlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiA0MTE6XFx0XFx0aGVscFxcbiA0MTI6XFx0XFx0ICBUaGUgTkFUIG9wdGlvbiBhbGxvd3MgbWFzcXVlcmFkaW5nLCBwb3J0IGZvcndhcmRpbmcgYW5kIG90aGVyXFxuIDQxMzpcXHRcXHQgIGZvcm1zIG9mIGZ1bGwgTmV0d29yayBBZGRyZXNzIFBvcnQgVHJhbnNsYXRpb24uIFRoaXMgY2FuIGJlXFxuIDQxNDpcXHRcXHQgIGNvbnRyb2xsZWQgYnkgaXB0YWJsZXMsIGlwNnRhYmxlcyBvciBuZnQuXFxuIDQxNTpcXHRcXG4gNDE2OlxcdGNvbmZpZyBORl9OQVRfQU1BTkRBXFxuIDQxNzpcXHRcXHR0cmlzdGF0ZVxcbiA0MTg6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfTkFUXFxuIDQxOTpcXHRcXHRkZWZhdWx0IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0tfQU1BTkRBXFxuIDQyMDpcXHRcXG4gNDIxOlxcdGNvbmZpZyBORl9OQVRfRlRQXFxuIDQyMjpcXHRcXHR0cmlzdGF0ZVxcbiA0MjM6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfTkFUXFxuIDQyNDpcXHRcXHRkZWZhdWx0IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0tfRlRQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ3OjU3LjMwMDEwNTg2MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTE2MjE3OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE5ldGZpbHRlciBOZXRsaW5rIEhvb2sgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBpbml0aWFsIGNoZWNrIG9mIGBORVRGSUxURVJfTkVUTElOS19IT09LYCBhbmQgcmVsYXRlZCBvcHRpb25zIHRlbGxzIG1lIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIG5ldGxpbmstYmFzZWQgbmV0ZmlsdGVyIGhvb2tzLiBJIHNob3VsZCBoYXZlIGFsc28gdmVyaWZpZWQgYWxsIHRoZSByZWxhdGVkIG5ldGZpbHRlciBvcHRpb25zIGZvciBmdWxsIGNvdmVyYWdlLCBhbmQgaXQgbG9va3MgbGlrZSBJIGRpZDogYE5FVEZJTFRFUmAsIGBORVRGSUxURVJfQURWQU5DRURgLCBgTkZfVEFCTEVTYCwgYE5FVEZJTFRFUl9ORVRMSU5LYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfTkFUYC4gR29vZC4gTm93IHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgaW1wYWN0ZWQuXG5cbk15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLiBMb29raW5nIGF0IHRoZSBjb2RlLCBJJ3ZlIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyBzeW1ib2xzIGFzIGtleTogYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGAsIGBuZm5sX2hvb2tfZ2V0YCwgYG5mbmxfaG9va19kdW1wX3N0YXJ0YCwgYG5mX25hdF9yZWdpc3Rlcl9mbmAsIGBuZl9uYXRfdW5yZWdpc3Rlcl9mbmAsIGBuZl9yZWdpc3Rlcl9uZXRfaG9va2AsIGBuZl91bnJlZ2lzdGVyX25ldF9ob29rYCwgYF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2tgLCBhbmQgYF9fbmZfdW5yZWdpc3Rlcl9uZXRfaG9va2AuIEkgY2hlY2tlZCwgYnV0IG5vbmUgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBzdWNoIGFzIG1lbW9yeSBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuIFRoZXkncmUgYWxsIHZlcnkgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbmV0ZmlsdGVyIGFuZCBuZXRsaW5rLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LiBJIHJlLWNoZWNrZWQgdGhlbSB0byBiZSBjZXJ0YWluLlxuXG5JIHRoZW4gZGlkIGEgbW9yZSB0aG9yb3VnaCBkaWZmIGNoZWNrLCB3aGljaCBjb25maXJtcyB0aGVzZSBhcmUgaW5kZWVkIHRoZSBhbHRlcmVkIGZ1bmN0aW9ucyBpbiBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYCwgYG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY2AgYW5kIGBuZXQvbmV0ZmlsdGVyL2NvcmUuY2AsIHBsdXMgdGhlIGFkZGVkIGZpZWxkcyBgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWAgaW4gYGluY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oYC4gSXQgYWxzbyBnYXZlIG1lIGBuZXRmaWx0ZXJfbmV0X2luaXRgIGluIGBjb3JlLmNgIGFuZCBhIHN0cnVjdCBpbiBgbmZuZXRsaW5rX2hvb2suY2AuIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIGV2ZXJ5dGhpbmcgbm93LlxuXG5Ob3csIGxldCdzIHJldmlldyBteSByZWFzb25pbmcuIFRoZSBwYXRjaCBpcyBhYm91dCBpbnRyb2R1Y2luZyBzZXF1ZW5jZSBjb3VudGVycyB0byBkZXRlY3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGR1cmluZyBuZXRsaW5rIG5ldGZpbHRlciBob29rIGR1bXBpbmcuIEl0IGFmZmVjdHMgaG9vayByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uLCBhcyB3ZWxsIGFzIHRoZSByZXN0YXJ0IGFuZCBjb25zaXN0ZW5jeSBjaGVja2luZyBsb2dpYy4gVGhpcyBpbXBhY3RzIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIHNvY2tldHMgYW5kIG5ldGZpbHRlciBjb25maWd1cmF0aW9uIGNvbW1hbmRzLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dCBjb25jdXJyZW5jeSByZWdyZXNzaW9ucywgYnVncyBpbiByZXN0YXJ0IGhhbmRsaW5nLCBhbmQgY29uc2lzdGVuY3kgY2hlY2sgZXJyb3JzLlxuXG5TbywgdG8gcmVjYXA6IG15IGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0LCBteSBmb2N1cyBzeW1ib2xzIGFyZSBzcG90IG9uLCBhbmQgbXkgcmVhc29uaW5nIGlzIHNvdW5kLiBOb3cgaXQncyB0aW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgyMywiT3V0cHV0VG9rZW5zIjoyNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDg6MDQuNDE2MzI3NzIxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU0MDM0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9OQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZm5sX2hvb2tfZHVtcFwiLFxuICAgIFwibmZubF9ob29rX2R1bXBfbmF0XCIsXG4gICAgXCJuZm5sX2hvb2tfZHVtcF9zdGFydFwiLFxuICAgIFwibmZubF9ob29rX2dldFwiLFxuICAgIFwibmZfbmF0X3JlZ2lzdGVyX2ZuXCIsXG4gICAgXCJuZl9uYXRfdW5yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfcmVnaXN0ZXJfbmV0X2hvb2tcIixcbiAgICBcIm5mX3VucmVnaXN0ZXJfbmV0X2hvb2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoaG9va19iYXNlX3NlcSBhbmQgbmF0X2hvb2tfYmFzZV9zZXEpIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZHVyaW5nIG5ldGxpbmsgZHVtcCBvZiBuZXRmaWx0ZXIgYW5kIE5BVCBob29rcywgcmVmYWN0b3JpbmcgdGhlIGR1bXAgaXRlcmF0aW9uIGFuZCByZXN0YXJ0L2NvbnNpc3RlbmN5IHZlcmlmaWNhdGlvbiBpbiBuZm5ldGxpbmtfaG9vay5jLCBhbmQgYnVtcGluZyB0aGUgc2VxdWVuY2UgbnVtYmVycyB1cG9uIGhvb2sgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGluIGNvcmUuYyBhbmQgbmZfbmF0X2NvcmUuYy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0bGluayBhbmQgbmV0ZmlsdGVyIGhvb2sgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIG5ldGxpbmsgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19IT09LXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfTkFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZubF9ob29rX2R1bXBcIixcbiAgICBcIm5mbmxfaG9va19kdW1wX25hdFwiLFxuICAgIFwibmZubF9ob29rX2R1bXBfc3RhcnRcIixcbiAgICBcIm5mbmxfaG9va19nZXRcIixcbiAgICBcIm5mX25hdF9yZWdpc3Rlcl9mblwiLFxuICAgIFwibmZfbmF0X3VucmVnaXN0ZXJfZm5cIixcbiAgICBcIm5mX3JlZ2lzdGVyX25ldF9ob29rXCIsXG4gICAgXCJuZl91bnJlZ2lzdGVyX25ldF9ob29rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2VxdWVuY2UgdHJhY2tpbmcgKGhvb2tfYmFzZV9zZXEgYW5kIG5hdF9ob29rX2Jhc2Vfc2VxKSB0byBkZXRlY3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGR1cmluZyBuZXRsaW5rIGR1bXAgb2YgbmV0ZmlsdGVyIGFuZCBOQVQgaG9va3MsIHJlZmFjdG9yaW5nIHRoZSBkdW1wIGl0ZXJhdGlvbiBhbmQgcmVzdGFydC9jb25zaXN0ZW5jeSB2ZXJpZmljYXRpb24gaW4gbmZuZXRsaW5rX2hvb2suYywgYW5kIGJ1bXBpbmcgdGhlIHNlcXVlbmNlIG51bWJlcnMgdXBvbiBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBpbiBjb3JlLmMgYW5kIG5mX25hdF9jb3JlLmMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldGxpbmsgYW5kIG5ldGZpbHRlciBob29rIG1hbmFnZW1lbnQgbG9naWMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBuZXRsaW5rIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ4OjA0LjQ5MTczNzgyOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzMTU1NDk3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0ODowNC40OTIxNjk2NDlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjMxNTExMzY3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2VxdWVuY2UgdHJhY2tpbmcgKGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCkgdG8gbmV0ZmlsdGVyIGFuZCBOQVQgaG9vayByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gdG8gcHJvdmlkZSBkdW1wIGNvbnNpc3RlbmN5IGRldGVjdGlvbiBpbiBgbmZuZXRsaW5rX2hvb2suY2AuXFxuXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBkYXRhIHN0cnVjdHVyZSBidWZmZXIgbGVuZ3RocyBpbiBhIHdheSB0aGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIE5ldGxpbmsgY2FsbGJhY2tzIGBjYi1cXHUwMDNlYXJnc2AgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIG5ldGxpbmsgc3Vic3lzdGVtLCBhbmQgYHN0cnVjdCBuZXRuc19uZmAgc2VxdWVuY2UgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBuZXRmaWx0ZXJfbmV0X2luaXQoKWAuXFxuLSBLQVNBTiAvIExvY2tkZXAgYXBwbGljYWJpbGl0eTogQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgcGF0Y2ggcmVsYXRlIHRvIGNvbmN1cnJlbmN5LCBSQ1UgZGVyZWZlcmVuY2luZywgbGlzdCB0cmF2ZXJzYWwgYm91bmRzLCBvciBob29rIGVudHJ5IGxpZmVjeWNsZXMsIHdoaWNoIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgZG9tYWluIG9mIEtBU0FOLCBLQ1NBTiwgYW5kIExvY2tkZXAuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMwOWQ1ODc4ZThkY2Q0OGYxYTBhMzliNjNkNjFlOWM2YjllY2JhMzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDIyOjQ3OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxuaW5kZXggYTZhMGJmNGEyNDdlNS4uN2ZkNzgzOTRkMWU3YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL25ldGZpbHRlci5oXG4rKysgYi9pbmNsdWRlL25ldC9uZXRucy9uZXRmaWx0ZXIuaFxuQEAgLTMzLDUgKzMzLDcgQEAgc3RydWN0IG5ldG5zX25mIHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfREVGUkFHX0lQVjYpXG4gXHR1bnNpZ25lZCBpbnQgZGVmcmFnX2lwdjZfdXNlcnM7XG4gI2VuZGlmXG4rXHR1bnNpZ25lZCBpbnQgaG9va19iYXNlX3NlcTtcbitcdHVuc2lnbmVkIGludCBuYXRfaG9va19iYXNlX3NlcTtcbiB9O1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvY29yZS5jIGIvbmV0L25ldGZpbHRlci9jb3JlLmNcbmluZGV4IDY3NWExMDM0YjM0MDAuLmEyODRiMzI0MTIxMWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9jb3JlLmNcbkBAIC0zODYsNiArMzg2LDE1IEBAIHN0YXRpYyB2b2lkIG5mX3N0YXRpY19rZXlfZGVjKGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqcmVnLCBpbnQgcGYpXG4gI2VuZGlmXG4gfVxuIFxuK3N0YXRpYyB2b2lkIGJ1bXBfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxKTtcbitcbitcdHdoaWxlICgrK2Jhc2Vfc2VxID09IDApXG4rXHRcdDtcbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNm5ldC1cdTAwM2VuZi5ob29rX2Jhc2Vfc2VxLCBiYXNlX3NlcSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgX19uZl9yZWdpc3Rlcl9uZXRfaG9vayhzdHJ1Y3QgbmV0ICpuZXQsIGludCBwZixcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpyZWcpXG4ge1xuQEAgLTQyOCw2ICs0MzcsNyBAQCBzdGF0aWMgaW50IF9fbmZfcmVnaXN0ZXJfbmV0X2hvb2soc3RydWN0IG5ldCAqbmV0LCBpbnQgcGYsXG4gXHRuZXdfaG9va3MgPSBuZl9ob29rX2VudHJpZXNfZ3JvdyhwLCByZWcpO1xuIFxuIFx0aWYgKCFJU19FUlIobmV3X2hvb2tzKSkge1xuK1x0XHRidW1wX2hvb2tfYmFzZV9zZXEobmV0KTtcbiBcdFx0aG9va3NfdmFsaWRhdGUobmV3X2hvb2tzKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpwcCwgbmV3X2hvb2tzKTtcbiBcdH1cbkBAIC01MDYsNiArNTE2LDcgQEAgc3RhdGljIHZvaWQgX19uZl91bnJlZ2lzdGVyX25ldF9ob29rKHN0cnVjdCBuZXQgKm5ldCwgaW50IHBmLFxuIFx0XHRcdG5ldF9kZWNfZWdyZXNzX3F1ZXVlKCk7XG4gI2VuZGlmXG4gXHRcdG5mX3N0YXRpY19rZXlfZGVjKHJlZywgcGYpO1xuK1x0XHRidW1wX2hvb2tfYmFzZV9zZXEobmV0KTtcbiBcdH0gZWxzZSB7XG4gXHRcdFdBUk5fT05DRSgxLCBcImhvb2sgbm90IGZvdW5kLCBwZiAlZCBudW0gJWRcIiwgcGYsIHJlZy1cdTAwM2Vob29rbnVtKTtcbiBcdH1cbkBAIC03ODQsNiArNzk1LDggQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5ldGZpbHRlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuICNlbmRpZlxuK1x0bmV0LVx1MDAzZW5mLmhvb2tfYmFzZV9zZXEgPSAxO1xuK1x0bmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxID0gMTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbmluZGV4IDhhYzMyNmUxZWI1YmEuLmZmMmNiYThkZjg4NjEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuY1xuQEAgLTExNjAsNiArMTE2MCwxNSBAQCBuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCxcbiB9XG4gI2VuZGlmXG4gXG4rc3RhdGljIHZvaWQgYnVtcF9uYXRfaG9va19iYXNlX3NlcShzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0dW5zaWduZWQgaW50IGJhc2Vfc2VxID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VuZi5uYXRfaG9va19iYXNlX3NlcSk7XG4rXG4rXHR3aGlsZSAoKytiYXNlX3NlcSA9PSAwKVxuK1x0XHQ7XG4rXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEsIGJhc2Vfc2VxKTtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBuZl9jdF9oZWxwZXJfZXhwZWN0Zm4gZm9sbG93X21hc3Rlcl9uYXQgPSB7XG4gXHQubmFtZVx0XHQ9IFwibmF0LWZvbGxvdy1tYXN0ZXJcIixcbiBcdC5leHBlY3Rmblx0PSBuZl9uYXRfZm9sbG93X21hc3RlcixcbkBAIC0xMjQ1LDggKzEyNTQsMTAgQEAgaW50IG5mX25hdF9yZWdpc3Rlcl9mbihzdHJ1Y3QgbmV0ICpuZXQsIHU4IHBmLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcyxcbiBcdH1cbiBcbiBcdHJldCA9IG5mX2hvb2tfZW50cmllc19pbnNlcnRfcmF3KFx1MDAyNnByaXYtXHUwMDNlZW50cmllcywgb3BzKTtcbi1cdGlmIChyZXQgPT0gMClcbitcdGlmIChyZXQgPT0gMCkge1xuK1x0XHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXHRcdG5hdF9wcm90b19uZXQtXHUwMDNldXNlcnMrKztcbitcdH1cbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuZl9uYXRfcHJvdG9fbXV0ZXgpO1xuIFx0cmV0dXJuIHJldDtcbkBAIC0xMjg0LDYgKzEyOTUsNyBAQCB2b2lkIG5mX25hdF91bnJlZ2lzdGVyX2ZuKHN0cnVjdCBuZXQgKm5ldCwgdTggcGYsIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuIFx0XHRnb3RvIHVubG9jaztcbiBcdHByaXYgPSBuYXRfb3BzW2hvb2tudW1dLnByaXY7XG4gXHRuZl9ob29rX2VudHJpZXNfZGVsZXRlX3JhdyhcdTAwMjZwcml2LVx1MDAzZWVudHJpZXMsIG9wcyk7XG4rXHRidW1wX25hdF9ob29rX2Jhc2Vfc2VxKG5ldCk7XG4gXG4gXHRpZiAobmF0X3Byb3RvX25ldC1cdTAwM2V1c2VycyA9PSAwKSB7XG4gXHRcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgbmF0X29wcywgb3BzX2NvdW50KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbmluZGV4IDk1MDA1ZTlhNjA2NjguLjIxYTc1OTE2OGMzODQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suY1xuQEAgLTU0LDcgKzU0LDYgQEAgc3RhdGljIGludCBuZl9uZXRsaW5rX2R1bXBfc3RhcnRfcmN1KHN0cnVjdCBzb2NrICpubHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhIHtcbiBcdGNoYXIgZGV2bmFtZVtJRk5BTVNJWl07XG4tXHR1bnNpZ25lZCBsb25nIGhlYWR2O1xuIFx0dTggaG9vaztcbiB9O1xuIFxuQEAgLTMzOCwyNyArMzM3LDQ4IEBAIG5mbmxfaG9va19lbnRyaWVzX2hlYWQodTggcGYsIHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKmRlXG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcbi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxuLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLFxuLVx0XHRcdCAgICAgIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBzZXEpXG4rXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLCBpbnQgZmFtaWx5KVxuIHtcbiBcdHN0cnVjdCBuZl9uYXRfbG9va3VwX2hvb2tfcHJpdiAqcHJpdiA9IG9wcy1cdTAwM2Vwcml2O1xuLVx0c3RydWN0IG5mX2hvb2tfZW50cmllcyAqZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LVx1MDAzZWVudHJpZXMpO1xuK1x0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLVx1MDAzZWRhdGE7XG4rXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChubHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3QgbmZfaG9va19vcHMgKipuYXRfb3BzO1xuLVx0aW50IGksIGVycjtcbitcdHVuc2lnbmVkIGludCBpID0gY2ItXHUwMDNlYXJnc1sxXTtcbitcdHN0cnVjdCBuZl9ob29rX2VudHJpZXMgKmU7XG4rXHR1bnNpZ25lZCBpbnQgYmFzZV9zZXE7XG4rXHRpbnQgZXJyID0gMDtcbiBcbitcdGJhc2Vfc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xuK1xuK1x0ZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2LVx1MDAzZWVudHJpZXMpO1xuIFx0aWYgKCFlKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byBvdXQ7XG4gXG4gXHRuYXRfb3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XG4tXHRcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBuYXRfb3BzW2ldLFxuLVx0XHRcdFx0XHQgb3BzLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksIHNlcSk7XG4rXHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcbitcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsXG4rXHRcdFx0XHRcdCBSRUFEX09OQ0UobmF0X29wc1tpXSksXG4rXHRcdFx0XHRcdCBvcHMtXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbitcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0YnJlYWs7XG4rXG4gXHR9XG4tXHRyZXR1cm4gMDtcbitvdXQ6XG4rXHRpZiAoIWVycikge1xuK1x0XHRpID0gMDtcbitcdH1cbitcdGNiLVx1MDAzZWFyZ3NbMV0gPSBpO1xuK1xuK1x0aWYgKGNiLVx1MDAzZWFyZ3NbMl0gXHUwMDI2XHUwMDI2IGJhc2Vfc2VxICE9IGNiLVx1MDAzZWFyZ3NbMl0pIHtcbitcdFx0Y2ItXHUwMDNlc2VxKys7XG4rXHRcdGVyciA9IC1FSU5UUjtcbitcdH1cbitcdGNiLVx1MDAzZWFyZ3NbMl0gPSBiYXNlX3NlcTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuQEAgLTM3MywzNSArMzkzLDMxIEBAIHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxuIFx0dW5zaWduZWQgaW50IGkgPSBjYi1cdTAwM2VhcmdzWzBdO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0Y2ItXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSk7XG4gXG4gXHRlID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGN0eC1cdTAwM2Vob29rLCBuZXQsIGN0eC1cdTAwM2VkZXZuYW1lKTtcbi1cdGlmICghZSlcbitcdGlmICghZSB8fCBJU19FUlIoZSkpXG4gXHRcdGdvdG8gZG9uZTtcbiBcbi1cdGlmIChJU19FUlIoZSkpIHtcbi1cdFx0Y2ItXHUwMDNlc2VxKys7XG4tXHRcdGdvdG8gZG9uZTtcbi1cdH1cbi1cbi1cdGlmICgodW5zaWduZWQgbG9uZyllICE9IGN0eC1cdTAwM2VoZWFkdiB8fCBpIFx1MDAzZT0gZS1cdTAwM2VudW1faG9va19lbnRyaWVzKVxuLVx0XHRjYi1cdTAwM2VzZXErKztcbi1cbiBcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XG4gXG4gXHRmb3IgKDsgaSBcdTAwM2MgZS1cdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcbi1cdFx0aWYgKG9wc1tpXS1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuLVx0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY3R4LCBvcHNbaV0sIGZhbWlseSxcbi1cdFx0XHRcdFx0XHQgY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSk7XG4tXHRcdGVsc2Vcbi1cdFx0XHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCwgb3BzW2ldLFxuLVx0XHRcdFx0XHRcdCBvcHNbaV0tXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcbitcdFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpjdXIgPSBSRUFEX09OQ0Uob3BzW2ldKTtcbitcbitcdFx0aWYgKGN1ci1cdTAwM2Vob29rX29wc190eXBlID09IE5GX0hPT0tfT1BfTkFUKVxuK1x0XHRcdGVyciA9IG5mbmxfaG9va19kdW1wX25hdChubHNrYiwgY2IsIGN1ciwgZmFtaWx5KTtcbitcdFx0ZWxzZSB7XG4rXHRcdFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsIGN1cixcbitcdFx0XHRcdFx0XHQgY3VyLVx1MDAzZXByaW9yaXR5LCBmYW1pbHksXG4gXHRcdFx0XHRcdFx0IGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEpO1xuK1x0XHR9XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4gZG9uZTpcbi1cdG5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKG5sc2tiKSk7XG4rXHRpZiAobmxza2ItXHUwMDNlbGVuIFx1MDAzZSAwKVxuK1x0XHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRjYi1cdTAwM2VhcmdzWzBdID0gaTtcbiBcdHJldHVybiBubHNrYi1cdTAwM2VsZW47XG5AQCAtNDQyLDEwICs0NTgsNyBAQCBzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRzdHJzY3B5KGN0eC1cdTAwM2VkZXZuYW1lLCBuYW1lLCBzaXplb2YoY3R4LVx1MDAzZWRldm5hbWUpKTtcbi1cdGN0eC1cdTAwM2VoZWFkdiA9ICh1bnNpZ25lZCBsb25nKWhlYWQ7XG4gXHRjdHgtXHUwMDNlaG9vayA9IGhvb2tudW07XG4tXG4tXHRjYi1cdTAwM2VzZXEgPSAxO1xuIFx0Y2ItXHUwMDNlZGF0YSA9IGN0eDtcbiBcbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDg6MDQuNDkyMTcyNjQ5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNDA1MDY4NTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldGZpbHRlciBQYXRjaDogVGhpbmtpbmcgVGhyb3VnaCB0aGUgSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpbXBhY3RzIG5ldGZpbHRlciBjb3JlLCBzcGVjaWZpY2FsbHkgYG5mX25hdF9jb3JlYCwgYW5kIHRoYXQgYG5mbmV0bGlua19ob29rLmNgIGZpbGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGNoYW5nZXMgdG8gaG9vayByZWdpc3RyYXRpb24gYW5kIG5ldGxpbmsgZHVtcGluZyAtIGludGVyZXN0aW5nLlwiXG5cbkZpcnN0LCBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgIHRvIGBzdHJ1Y3QgbmV0bnNfbmZgLiBNeSBndWVzcyBpcyB0aGlzIGlzIGFib3V0IHZlcnNpb25pbmcgb3Igc3luY2hyb25pemF0aW9uIGZvciBjaGFuZ2VzIHRvIHRoZSBob29rIHJlZ2lzdHJhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IHNldHRpbmcgdGhlIHN0YWdlIGZvciBzb21ldGhpbmcgcmVsYXRlZCB0byBjb25jdXJyZW50IGFjY2VzcyBvciBkYXRhIGNvbnNpc3RlbmN5LiBJbmNyZW1lbnRpbmcgdGhlc2Ugc2VxdWVuY2UgbnVtYmVycyBvbiByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24uLi4geXVwLCB0aGF0IHJlaW5mb3JjZXMgbXkgYXNzdW1wdGlvbiBhYm91dCBjb25jdXJyZW5jeSBjb250cm9sLlxuXG5Ob3csIGludG8gYG5mbmV0bGlua19ob29rLmNgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgbW9yZSBjb25jcmV0ZS4gVGhlIG5ldGxpbmsgZHVtcGluZyBtZWNoYW5pc20gZm9yIG5ldGZpbHRlciBob29rcyAoYG5mbmxfaG9va19kdW1wYCwgYG5mbmxfaG9va19kdW1wX25hdGApIGlzIHdoYXQncyBiZWluZyB0d2Vha2VkLiBVc2luZyBgY2ItXHUwMDNlYXJnc1sxXWAgZm9yIE5BVCBob29rIGR1bXAgaW5kZXhpbmcgaXMgbm90YWJsZSwgYWxzbyB0cmFja2luZyBgYmFzZV9zZXFgLCBhbmQgaGFuZGxpbmcgYGNiLVx1MDAzZXNlcWAuIEkgc3VzcGVjdCB0aGlzIGlzIGFib3V0IGZpbHRlcmluZyBvdXQgZHVwbGljYXRlcyBvciBlbnN1cmluZyB0aGF0IHRoZSBkdW1wIHJlZmxlY3RzIHRoZSBzdGF0ZSBhdCBhIHBhcnRpY3VsYXIgcG9pbnQgaW4gdGltZS4gSXQgbWlnaHQgYmUgdXNlZCB0byBpbXBsZW1lbnQgYSBjb25zaXN0ZW50IHNuYXBzaG90IG9mIHRoZSBob29rIGNvbmZpZ3VyYXRpb24gb3IgcmVnaXN0cmF0aW9uIHN0YXRlLlxuXG5UaGUgbGluZSBgY2ItXHUwMDNlc2VxID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZuZXQtXHUwMDNlbmYuaG9va19iYXNlX3NlcSlgIGluIGBuZm5sX2hvb2tfZHVtcGAgbWFrZXMgaXQgZXZlbiBjbGVhcmVyIOKAkyBhY3F1aXJpbmcgdGhlIHNlcXVlbmNlIG51bWJlciB3aXRoIGBzbXBfbG9hZF9hY3F1aXJlYCBpbXBsaWVzIHRoaXMgaXMgZm9yIG1lbW9yeSBvcmRlcmluZyBvciBzeW5jaHJvbml6YXRpb24sIHBlcmhhcHMgdG8gZ3VhcmFudGVlIGNvbnNpc3RlbmN5IGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGhlIHVwZGF0ZXMgdXNpbmcgYFJFQURfT05DRWAgcmVpbmZvcmNlIG15IHVuZGVyc3RhbmRpbmcgdGhhdCB0aGVzZSB2YXJpYWJsZXMgYXJlIHVzZWQgaW4gYSBjb25jdXJyZW50IGVudmlyb25tZW50LCBhbmQgdGhlIHJlbW92YWwgb2YgYGhlYWR2YCBpcyBwcm9iYWJseSBzb21lIGtpbmQgb2Ygb3B0aW1pemF0aW9uLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGVzZSBmdW5jdGlvbnMgaW4gYG5mbmV0bGlua19ob29rLmNgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGR1bXBlZCBpbnRvIHRoZSBuZXRsaW5rIHNvY2tldCBidWZmZXIgYW5kIGhvdyBgbmZubF9ob29rX2R1bXBfb25lYCBvcGVyYXRlcy4gSSdsbCBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhlc2Ugc2VxdWVuY2UgbnVtYmVycyBhcmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBob29rIGRhdGEgc3RydWN0dXJlcyB0byBlbnN1cmUgdGhhdCBkdW1wcyBhcmUgY29uc2lzdGVudCBhbmQgY29tcGxldGUsIGVzcGVjaWFsbHkgd2hlbiBoYW5kbGluZyBjb25jdXJyZW50IGhvb2sgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBhY3Rpdml0aWVzLiBJdCBpcyBhbHNvIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCB3aGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gaXMgY29udGFpbmVkIGluIHRoYXQgYXJndW1lbnQgYGNiLVx1MDAzZWFyZ3NbMV1gLCBhcyBpdCBpcyBsaWtlbHkgY3J1Y2lhbCBmb3IgdGhlIGluZGV4aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzYxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDg6MTUuODk3MjQ0Mzk4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjcyOTkyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZubF9ob29rX2R1bXBfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYz0xNTg9c3RhdGljIGludCBuZm5sX2hvb2tfcHV0X25mdF9mdF9pbmZvKHN0cnVjdCBza19idWZmICpubHNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2hvb2suYy0xODktXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjE5MDpzdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTE5MS1cXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jPTMzOT1zdGF0aWMgaW50IG5mbmxfaG9va19kdW1wX25hdChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzYwLVxcdGZvciAoOyBpIFxcdTAwM2MgZS1cXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jOjM2MTpcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9vbmUobmxza2IsIGN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmMtMzYyLVxcdFxcdFxcdFxcdFxcdCBSRUFEX09OQ0UobmF0X29wc1tpXSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM9Mzg0PXN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTQwOS1cXHRcXHRlbHNlIHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmM6NDEwOlxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jLTQxMS1cXHRcXHRcXHRcXHRcXHRcXHQgY3VyLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0ODoxNi44NjQ1NDg2MjVaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYzNTYwNzU3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBuZm5ldGxpbmtfaG9vay5jOiBUaGUgRHVtcCBPcGVyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfaG9vay5jYCBtb2R1bGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBuZm5sX2hvb2tfZHVtcF9vbmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBuZXRmaWx0ZXIgbmV0bGluayBob29rcyBhcmUgZW51bWVyYXRlZCBhbmQgcHJlc2VudGVkLCBzbyB0aGUgZHVtcCBmdW5jdGlvbmFsaXR5IGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIHN0cnVjdHVyZXMgYXJlIHRyYW5zbGF0ZWQgaW50byB0aGUgbmV0bGluayBtZXNzYWdlcyB0aGF0IGFyZSBzZW50IG91dC4gSSdtIGFzc3VtaW5nIHRoYXQgZnVuY3Rpb24gaGFuZGxlcyBkdW1waW5nIGEgc2luZ2xlIGhvb2sgcmVnaXN0cmF0aW9uLCB3aGljaCBsaWtlbHkgbWVhbnMgdHJhdmVyc2luZyBhIGxpc3Qgb3IgdHJlZSBvZiByZWdpc3RlcmVkIGhvb2tzIGFuZCBmb3JtYXR0aW5nIHRoZSBkYXRhIGludG8gdGhlIGFwcHJvcHJpYXRlIG5ldGxpbmsgYXR0cmlidXRlcy4gSSdtIGFsc28gaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGl0ZXJhdG9yIHRoYXQgcHJlc2VudHMgdGhlIGRhdGEgb3ZlciBuZXRsaW5rLiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgZHVyaW5nIHRoZSBkdW1wIHByb2Nlc3MsIHRvbyDigJMgbG9ja2luZywgUkNVLCB3aGF0ZXZlciBtZWNoYW5pc20gdGhleSBlbXBsb3kuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIGFuZCB0aGUgYmFzaWMgbWVjaGFuaWNzIG9mIGhvdyBob29rIGluZm9ybWF0aW9uIGlzIHJldHJpZXZlZCBhbmQgc2hhcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDI0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMjI6NDg6MTkuNTAwMTU4NDk3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdFxcdFxcdFxcdFxcdCAgZnQtXFx1MDAzZW5hbWUsIGZ0LVxcdTAwM2V0YWJsZS1cXHUwMDNlZmFtaWx5KTtcXG4gMTgxOlxcdFxcdGlmIChyZXQpIHtcXG4gMTgyOlxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChubHNrYiwgbmVzdCk7XFxuIDE4MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxODQ6XFx0XFx0fVxcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRubGFfbmVzdF9lbmQobmxza2IsIG5lc3QpO1xcbiAxODc6XFx0XFx0cmV0dXJuIDA7XFxuIDE4ODpcXHR9XFxuIDE4OTpcXHRcXG4gMTkwOlxcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfb25lKHN0cnVjdCBza19idWZmICpubHNrYixcXG4gMTkxOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZm5sX2R1bXBfaG9va19kYXRhICpjdHgsXFxuIDE5MjpcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcywgaW50IHByaW9yaXR5LFxcbiAxOTM6XFx0XFx0XFx0XFx0ICAgICAgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IHNlcSlcXG4gMTk0OlxcdHtcXG4gMTk1OlxcdFxcdHUxNiBldmVudCA9IG5mbmxfbXNnX3R5cGUoTkZOTF9TVUJTWVNfSE9PSywgTkZOTF9NU0dfSE9PS19HRVQpO1xcbiAxOTY6XFx0XFx0dW5zaWduZWQgaW50IHBvcnRpZCA9IE5FVExJTktfQ0Iobmxza2IpLnBvcnRpZDtcXG4gMTk3OlxcdFxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbiAxOTg6XFx0XFx0aW50IHJldCA9IC1FTVNHU0laRTtcXG4gMTk5OlxcdFxcdHUzMiBob29rbnVtO1xcbiAyMDA6XFx0I2lmZGVmIENPTkZJR19LQUxMU1lNU1xcbiAyMDE6XFx0XFx0Y2hhciBzeW1bS1NZTV9TWU1CT0xfTEVOXTtcXG4gMjAyOlxcdFxcdGNoYXIgKm1vZHVsZV9uYW1lO1xcbiAyMDM6XFx0I2VuZGlmXFxuIDIwNDpcXHRcXHRubGggPSBuZm5sX21zZ19wdXQobmxza2IsIHBvcnRpZCwgc2VxLCBldmVudCxcXG4gMjA1OlxcdFxcdFxcdFxcdCAgIE5MTV9GX01VTFRJLCBmYW1pbHksIE5GTkVUTElOS19WMCwgMCk7XFxuIDIwNjpcXHRcXHRpZiAoIW5saClcXG4gMjA3OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyMDg6XFx0XFxuIDIwOTpcXHQjaWZkZWYgQ09ORklHX0tBTExTWU1TXFxuIDIxMDpcXHRcXHRyZXQgPSBzbnByaW50ZihzeW0sIHNpemVvZihzeW0pLCBcXFwiJXBzXFxcIiwgb3BzLVxcdTAwM2Vob29rKTtcXG4gMjExOlxcdFxcdGlmIChyZXQgXFx1MDAzZT0gc2l6ZW9mKHN5bSkpIHtcXG4gMjEyOlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDIxMzpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMjE0OlxcdFxcdH1cXG4gMjE1OlxcdFxcbiAyMTY6XFx0XFx0bW9kdWxlX25hbWUgPSBzdHJzdHIoc3ltLCBcXFwiIFtcXFwiKTtcXG4gMjE3OlxcdFxcdGlmIChtb2R1bGVfbmFtZSkge1xcbiAyMTg6XFx0XFx0XFx0Y2hhciAqZW5kO1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHRcXHQqbW9kdWxlX25hbWUgPSAnXFxcXDAnO1xcbiAyMjE6XFx0XFx0XFx0bW9kdWxlX25hbWUgKz0gMjtcXG4gMjIyOlxcdFxcdFxcdGVuZCA9IHN0cmNocihtb2R1bGVfbmFtZSwgJ10nKTtcXG4gMjIzOlxcdFxcdFxcdGlmIChlbmQpIHtcXG4gMjI0OlxcdFxcdFxcdFxcdCplbmQgPSAwO1xcbiAyMjU6XFx0XFxuIDIyNjpcXHRcXHRcXHRcXHRyZXQgPSBubGFfcHV0X3N0cmluZyhubHNrYiwgTkZOTEFfSE9PS19NT0RVTEVfTkFNRSwgbW9kdWxlX25hbWUpO1xcbiAyMjc6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4gMjI4OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyMjk6XFx0XFx0XFx0fVxcbiAyMzA6XFx0XFx0fVxcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRyZXQgPSBubGFfcHV0X3N0cmluZyhubHNrYiwgTkZOTEFfSE9PS19GVU5DVElPTl9OQU1FLCBzeW0pO1xcbiAyMzM6XFx0XFx0aWYgKHJldClcXG4gMjM0OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyMzU6XFx0I2VuZGlmXFxuIDIzNjpcXHRcXG4gMjM3OlxcdFxcdGlmIChvcHMtXFx1MDAzZXBmID09IE5GUFJPVE9fSU5FVCBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZWhvb2tudW0gPT0gTkZfSU5FVF9JTkdSRVNTKVxcbiAyMzg6XFx0XFx0XFx0aG9va251bSA9IE5GX05FVERFVl9JTkdSRVNTO1xcbiAyMzk6XFx0XFx0ZWxzZVxcbiAyNDA6XFx0XFx0XFx0aG9va251bSA9IG9wcy1cXHUwMDNlaG9va251bTtcXG4gMjQxOlxcdFxcbiAyNDI6XFx0XFx0cmV0ID0gbmxhX3B1dF9iZTMyKG5sc2tiLCBORk5MQV9IT09LX0hPT0tOVU0sIGh0b25sKGhvb2tudW0pKTtcXG4gMjQzOlxcdFxcdGlmIChyZXQpXFxuIDI0NDpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gMjQ1OlxcdFxcbiAyNDY6XFx0XFx0cmV0ID0gbmxhX3B1dF9iZTMyKG5sc2tiLCBORk5MQV9IT09LX1BSSU9SSVRZLCBodG9ubChwcmlvcml0eSkpO1xcbiAyNDc6XFx0XFx0aWYgKHJldClcXG4gMjQ4OlxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAyNDk6XFx0XFxuIDI1MDpcXHRcXHRzd2l0Y2ggKG9wcy1cXHUwMDNlaG9va19vcHNfdHlwZSkge1xcbiAyNTE6XFx0XFx0Y2FzZSBORl9IT09LX09QX05GX1RBQkxFUzpcXG4gMjUyOlxcdFxcdFxcdHJldCA9IG5mbmxfaG9va19wdXRfbmZ0X2NoYWluX2luZm8obmxza2IsIGN0eCwgc2VxLCBvcHMtXFx1MDAzZXByaXYpO1xcbiAyNTM6XFx0XFx0XFx0YnJlYWs7XFxuIDI1NDpcXHRcXHRjYXNlIE5GX0hPT0tfT1BfQlBGOlxcbiAyNTU6XFx0XFx0XFx0cmV0ID0gbmZubF9ob29rX3B1dF9icGZfcHJvZ19pbmZvKG5sc2tiLCBjdHgsIHNlcSwgb3BzLVxcdTAwM2Vwcml2KTtcXG4gMjU2OlxcdFxcdFxcdGJyZWFrO1xcbiAyNTc6XFx0XFx0Y2FzZSBORl9IT09LX09QX05GVF9GVDpcXG4gMjU4OlxcdFxcdFxcdHJldCA9IG5mbmxfaG9va19wdXRfbmZ0X2Z0X2luZm8obmxza2IsIGN0eCwgc2VxLCBvcHMtXFx1MDAzZXByaXYpO1xcbiAyNTk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ4OjE5LjUwMDI2MzU2N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU5MzQ1MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldHMsIHJlbmRlcmVkIGFzIGlmIEkgYW0gZXhhbWluaW5nIHRoZW06XG5cbioqRGlzc2VjdGluZyB0aGUgTmV0bGluayBIb29rIER1bXBzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhlc2UgTmV0bGluayBob29rIGR1bXAgZnVuY3Rpb25zOiBgbmZubF9ob29rX2R1bXBgLCBgbmZubF9ob29rX2R1bXBfbmF0YCwgYW5kIGBuZm5sX2hvb2tfZHVtcF9zdGFydGAuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoZSBOZXRmaWx0ZXIgaW5mb3JtYXRpb24uIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGVyZSBoYXMgdG8gYmUgc29tZSBraW5kIG9mIGZsb3cgY29udHJvbC5cbiogICBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzLlxuKiAgIFdoYXQgbWFrZXMgdGhlc2Ugcm91dGluZXMgZGlmZmVyZW50IGZyb20gZWFjaCBvdGhlcj9cbiogICBBcmUgYG5mbmxfaG9va19kdW1wYCBhbmQgYG5mbmxfaG9va19kdW1wX25hdGAgZGlmZmVyZW50IGluIHRoZWlyIGZ1bmN0aW9uLCBvciBhcmUgdGhleSBkaWZmZXJlbnQgaW4gdGhlaXIgYXBwcm9hY2g/XG4qICAgV2hhdCBpcyB0aGUgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBvZiBgbmZubF9ob29rX2R1bXBfc3RhcnRgPyBJcyBpdCB0aGUgaW5pdGlhbGl6YXRpb24gb3IgdGhlIHRyaWdnZXIgb2YgdGhlIGR1bXAgcHJvY2VzcywgYW5kIGlmIHNvLCBob3cgaXMgaXQgY29vcmRpbmF0ZWQgd2l0aCB0aGUgb3RoZXIgdHdvP1xuKiAgIEhvdyBkbyB0aGVzZSBob29rIGR1bXBzIGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgcGljdHVyZSBvZiBOZXRmaWx0ZXIgb3BlcmF0aW9ucz9cblxuSSBuZWVkIHRvIHNlZSB3aGF0J3MgYmVpbmcgZXh0cmFjdGVkIGFuZCB0cmFuc21pdHRlZCwgaG93IHRoZSBkdW1waW5nIGlzIGluaXRpYXRlZCwgYW5kIHdoYXQgc2FmZWd1YXJkcyBhcmUgaW4gcGxhY2UgdG8gbWFuYWdlIHRoZSBmbG93IG9mIGRhdGEsIGVzcGVjaWFsbHkgZm9yIHBvdGVudGlhbGx5IGxhcmdlIGRhdGFzZXRzLiBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIHRoZSBuYW1lcyBhbmQgYnJlYWsgZG93biB0aGUgY29kZSBsb2dpYyB0byBmdWxseSBncmFzcCB0aGUgaW1wbGVtZW50YXRpb24uIE15IGZvY3VzIGhlcmUgaXMgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzIG9mIGhvdyB0aGVzZSBob29rcyBpbnRlcmFjdCB3aXRoIHRoZSBOZXRsaW5rIGluZnJhc3RydWN0dXJlLiBJIGV4cGVjdCB0byBzZWUgc3BlY2lmaWMgZGV0YWlscyBhYm91dCBhdHRyaWJ1dGUgaGFuZGxpbmcsIHNlcXVlbmNlIG51bWJlciBtYW5hZ2VtZW50LCBhbmQgZXJyb3IgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDIyOjQ4OjIyLjE1OTYxMTczWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19ob29rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM1LFxuICBcIkxpbmVDb3VudFwiOiAxMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzNTpcXHRcXG4gMzM2OlxcdFxcdHJldHVybiBob29rX2hlYWQ7XFxuIDMzNzpcXHR9XFxuIDMzODpcXHRcXG4gMzM5OlxcdHN0YXRpYyBpbnQgbmZubF9ob29rX2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpubHNrYixcXG4gMzQwOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4gMzQxOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLCBpbnQgZmFtaWx5KVxcbiAzNDI6XFx0e1xcbiAzNDM6XFx0XFx0c3RydWN0IG5mX25hdF9sb29rdXBfaG9va19wcml2ICpwcml2ID0gb3BzLVxcdTAwM2Vwcml2O1xcbiAzNDQ6XFx0XFx0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLVxcdTAwM2VkYXRhO1xcbiAzNDU6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQobmxza2ItXFx1MDAzZXNrKTtcXG4gMzQ2OlxcdFxcdHN0cnVjdCBuZl9ob29rX29wcyAqKm5hdF9vcHM7XFxuIDM0NzpcXHRcXHR1bnNpZ25lZCBpbnQgaSA9IGNiLVxcdTAwM2VhcmdzWzFdO1xcbiAzNDg6XFx0XFx0c3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcXG4gMzQ5OlxcdFxcdHVuc2lnbmVkIGludCBiYXNlX3NlcTtcXG4gMzUwOlxcdFxcdGludCBlcnIgPSAwO1xcbiAzNTE6XFx0XFxuIDM1MjpcXHRcXHRiYXNlX3NlcSA9IHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNm5ldC1cXHUwMDNlbmYubmF0X2hvb2tfYmFzZV9zZXEpO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRlID0gcmN1X2RlcmVmZXJlbmNlKHByaXYtXFx1MDAzZWVudHJpZXMpO1xcbiAzNTU6XFx0XFx0aWYgKCFlKVxcbiAzNTY6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDM1NzpcXHRcXG4gMzU4OlxcdFxcdG5hdF9vcHMgPSBuZl9ob29rX2VudHJpZXNfZ2V0X2hvb2tfb3BzKGUpO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIGUtXFx1MDAzZW51bV9ob29rX2VudHJpZXM7IGkrKykge1xcbiAzNjE6XFx0XFx0XFx0ZXJyID0gbmZubF9ob29rX2R1bXBfb25lKG5sc2tiLCBjdHgsXFxuIDM2MjpcXHRcXHRcXHRcXHRcXHRcXHQgUkVBRF9PTkNFKG5hdF9vcHNbaV0pLFxcbiAzNjM6XFx0XFx0XFx0XFx0XFx0XFx0IG9wcy1cXHUwMDNlcHJpb3JpdHksIGZhbWlseSxcXG4gMzY0OlxcdFxcdFxcdFxcdFxcdFxcdCBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcbiAzNjU6XFx0XFx0XFx0aWYgKGVycilcXG4gMzY2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHR9XFxuIDM2OTpcXHRvdXQ6XFxuIDM3MDpcXHRcXHRpZiAoIWVycikge1xcbiAzNzE6XFx0XFx0XFx0aSA9IDA7XFxuIDM3MjpcXHRcXHR9XFxuIDM3MzpcXHRcXHRjYi1cXHUwMDNlYXJnc1sxXSA9IGk7XFxuIDM3NDpcXHRcXG4gMzc1OlxcdFxcdGlmIChjYi1cXHUwMDNlYXJnc1syXSBcXHUwMDI2XFx1MDAyNiBiYXNlX3NlcSAhPSBjYi1cXHUwMDNlYXJnc1syXSkge1xcbiAzNzY6XFx0XFx0XFx0Y2ItXFx1MDAzZXNlcSsrO1xcbiAzNzc6XFx0XFx0XFx0ZXJyID0gLUVJTlRSO1xcbiAzNzg6XFx0XFx0fVxcbiAzNzk6XFx0XFx0Y2ItXFx1MDAzZWFyZ3NbMl0gPSBiYXNlX3NlcTtcXG4gMzgwOlxcdFxcbiAzODE6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzgyOlxcdH1cXG4gMzgzOlxcdFxcbiAzODQ6XFx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXFxuIDM4NTpcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gMzg2OlxcdHtcXG4gMzg3OlxcdFxcdHN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBubG1zZ19kYXRhKGNiLVxcdTAwM2VubGgpO1xcbiAzODg6XFx0XFx0c3RydWN0IG5mbmxfZHVtcF9ob29rX2RhdGEgKmN0eCA9IGNiLVxcdTAwM2VkYXRhO1xcbiAzODk6XFx0XFx0aW50IGVyciwgZmFtaWx5ID0gbmZtc2ctXFx1MDAzZW5mZ2VuX2ZhbWlseTtcXG4gMzkwOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KG5sc2tiLVxcdTAwM2Vzayk7XFxuIDM5MTpcXHRcXHRzdHJ1Y3QgbmZfaG9va19vcHMgKiBjb25zdCAqb3BzO1xcbiAzOTI6XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcXG4gMzkzOlxcdFxcdHVuc2lnbmVkIGludCBpID0gY2ItXFx1MDAzZWFyZ3NbMF07XFxuIDM5NDpcXHRcXG4gMzk1OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzk2OlxcdFxcdGNiLVxcdTAwM2VzZXEgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZuZXQtXFx1MDAzZW5mLmhvb2tfYmFzZV9zZXEpO1xcbiAzOTc6XFx0XFxuIDM5ODpcXHRcXHRlID0gbmZubF9ob29rX2VudHJpZXNfaGVhZChmYW1pbHksIGN0eC1cXHUwMDNlaG9vaywgbmV0LCBjdHgtXFx1MDAzZWRldm5hbWUpO1xcbiAzOTk6XFx0XFx0aWYgKCFlIHx8IElTX0VSUihlKSlcXG4gNDAwOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0b3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBlLVxcdTAwM2VudW1faG9va19lbnRyaWVzOyBpKyspIHtcXG4gNDA1OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqY3VyID0gUkVBRF9PTkNFKG9wc1tpXSk7XFxuIDQwNjpcXHRcXG4gNDA3OlxcdFxcdFxcdGlmIChjdXItXFx1MDAzZWhvb2tfb3BzX3R5cGUgPT0gTkZfSE9PS19PUF9OQVQpXFxuIDQwODpcXHRcXHRcXHRcXHRlcnIgPSBuZm5sX2hvb2tfZHVtcF9uYXQobmxza2IsIGNiLCBjdXIsIGZhbWlseSk7XFxuIDQwOTpcXHRcXHRcXHRlbHNlIHtcXG4gNDEwOlxcdFxcdFxcdFxcdGVyciA9IG5mbmxfaG9va19kdW1wX29uZShubHNrYiwgY3R4LCBjdXIsXFxuIDQxMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY3VyLVxcdTAwM2Vwcmlvcml0eSwgZmFtaWx5LFxcbiA0MTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSk7XFxuIDQxMzpcXHRcXHRcXHR9XFxuIDQxNDpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0MTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQxNjpcXHRcXHR9XFxuIDQxNzpcXHRcXG4gNDE4OlxcdGRvbmU6XFxuIDQxOTpcXHRcXHRpZiAobmxza2ItXFx1MDAzZWxlbiBcXHUwMDNlIDApXFxuIDQyMDpcXHRcXHRcXHRubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIG5sbXNnX2hkcihubHNrYikpO1xcbiA0MjE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDQyMjpcXHRcXHRjYi1cXHUwMDNlYXJnc1swXSA9IGk7XFxuIDQyMzpcXHRcXHRyZXR1cm4gbmxza2ItXFx1MDAzZWxlbjtcXG4gNDI0OlxcdH1cXG4gNDI1OlxcdFxcbiA0MjY6XFx0c3RhdGljIGludCBuZm5sX2hvb2tfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIDQyNzpcXHR7XFxuIDQyODpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShjYi1cXHUwMDNlbmxoKTtcXG4gNDI5OlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCAqbmxhID0gY2ItXFx1MDAzZWRhdGE7XFxuIDQzMDpcXHRcXHRzdHJ1Y3QgbmZubF9kdW1wX2hvb2tfZGF0YSAqY3R4ID0gTlVMTDtcXG4gNDMxOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGNiLVxcdTAwM2Vza2ItXFx1MDAzZXNrKTtcXG4gNDMyOlxcdFxcdHU4IGZhbWlseSA9IG5mbXNnLVxcdTAwM2VuZmdlbl9mYW1pbHk7XFxuIDQzMzpcXHRcXHRjaGFyIG5hbWVbSUZOQU1TSVpdID0gXFxcIlxcXCI7XFxuIDQzNDpcXHRcXHRjb25zdCB2b2lkICpoZWFkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0ODoyMi4xNTk3MTU2M1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NjQ3NTQ0NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFwcGxpY2FiaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGlzc3VlIHdhcyBlbnN1cmluZyB0aGUgbmV0bGluayBkdW1wIChgbmZubF9ob29rX2R1bXBgIGFuZCBgbmZubF9ob29rX2R1bXBfbmF0YCkgbWFpbnRhaW5lZCBjb25zaXN0ZW5jeSByZWdhcmRpbmcgbmV0ZmlsdGVyIGFuZCBOQVQgaG9vayBjaGFuZ2VzIGR1cmluZyB0aGUgZHVtcCBwcm9jZXNzLiBUaGUgZml4IGludHJvZHVjZXMgc2VxdWVuY2UgY291bnRlcnMsIGBob29rX2Jhc2Vfc2VxYCBhbmQgYG5hdF9ob29rX2Jhc2Vfc2VxYCwgdG8gdHJhY2sgdGhlc2UgY2hhbmdlcy4gVGhlc2UgY291bnRlcnMgYXJlIGluaXRpYWxpemVkIGluIGBuZXRmaWx0ZXJfbmV0X2luaXRgIGFuZCBpbmNyZW1lbnRlZCBkdXJpbmcgaG9vayByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24uIEluIHRoZSBkdW1wIGZ1bmN0aW9ucywgYGNiLVx1MDAzZXNlcWAgYW5kIGBiYXNlX3NlcWAgYXJlIHVwZGF0ZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY291bnRlciB2YWx1ZXMuXG5cbk5vdywgbGV0J3Mgc2NydXRpbml6ZSB0aGlzIGZvciBwb3RlbnRpYWwgS01TQU4gY29uY2VybnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5GaXJzdCwgSSBleGFtaW5lZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24uIFRoZSBzZXF1ZW5jZSBjb3VudGVycyB0aGVtc2VsdmVzLCBpbiBgc3RydWN0IG5ldG5zX25mYCwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMSBkdXJpbmcgYG5ldGZpbHRlcl9uZXRfaW5pdGAuIFdoaWxlIGBuZXRgIGdldHMgYGt6YWxsb2NgJ2VkIGFueXdheSwgdGhpcyBpcyBnb29kLiBUaGUgYGNiLVx1MDAzZWFyZ3NgIGFycmF5IChwYXNzZWQgaW4gdGhlIG5ldGxpbmsgY2FsbGJhY2spIGlzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIG5ldGxpbmsgY29yZSBhdCB0aGUgZHVtcCdzIHN0YXJ0LCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGBjYi1cdTAwM2VhcmdzWzFdYCAoaW5kZXgpIG9yIGBjYi1cdTAwM2VhcmdzWzJdYCAoYmFzZV9zZXEpIGJlaW5nIHVuaW5pdGlhbGl6ZWQuIFRoZSBhbGxvY2F0aW9uIGluIGBuZm5sX2hvb2tfZHVtcF9zdGFydGAgdmlhIGBremFsbG9jYCBhbHNvIGxvb2tzIGNsZWFuLCBhbmQgdGhlIGBlcnIgPSAwYCBhc3NpZ25tZW50IGluIGBuZm5sX2hvb2tfZHVtcF9uYXRgIGlzLCBvZiBjb3Vyc2UsIHByb3Blci4gRmluYWxseSwgdGhlIG5ldGxpbmsgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gdXNlcyBgbmZubF9tc2dfcHV0YCwgYG5sYV9wdXRfYmUzMmAsIGFuZCB0aGUgbGlrZSDigJMgdGhlc2UgYXJlIHdlbGwtYmVoYXZlZCBhbmQgaGFuZGxlIGF0dHJpYnV0ZSBpbml0aWFsaXphdGlvbiBjb3JyZWN0bHkuXG5cbkNydWNpYWxseSwgSSBlbnN1cmVkIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXZlciBsZWFrZWQgdG8gdXNlcnNwYWNlIG9yIHJlYWQgYnkgdGhlIHBhdGNoZWQgY29kZS4gVGhlIGZvY3VzIGlzIG9uIHNlcXVlbmNlIGNvdW50ZXIgbWFuYWdlbWVudCBhbmQgaW5kZXggaGFuZGxpbmcgY2xlYW51cHMsIGFuZCB0aGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IGluZm8gbGVha3MuXG5cbk1lbW9yeSBzYWZldHkgaXMgYW5vdGhlciBjb25zaWRlcmF0aW9uLiBHaXZlbiB0aGUgbmF0dXJlIG9mIG5ldGZpbHRlciBhbmQgbmV0bGluaywgSSBsb29rZWQgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzLiBUaGUgY29kZSBpcyBwcm90ZWN0ZWQgd2l0aCBSQ1UgYW5kIGBzbXBfbG9hZF9hY3F1aXJlYC9gc21wX3N0b3JlX3JlbGVhc2VgLCBvciBsb2NrZGVwL0tBU0FOIGlmIHJhY2VzIGV4aXN0LiBUaGUgcGF0Y2ggZG9lc24ndCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucywgbm9yIGRvZXMgaXQgdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgaGVhcCBvciBzdGFjayBidWZmZXJzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBhc3Nlc3MgS01TQU4gYXBwbGljYWJpbGl0eS4gSSBtZXRob2RpY2FsbHkgY2hlY2tlZCBhZ2FpbnN0IEtNU0FOJ3MgY3JpdGVyaWE6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZSwgYW5kIG5vIG1vZGlmaWVkIHN0cnVjdHVyZXMgYXJlIGFmZmVjdGVkLiBUaGUgbmV0bGluayBtZXNzYWdlcyB1c2Ugc3RhbmRhcmQgYG5sYV9wdXRfKmAgZnVuY3Rpb25zLCB3aGljaCBtZWFucyBvbmx5IGZ1bGx5IGluaXRpYWxpemVkIGFuZCB0eXBlZCBkYXRhIGlzIGNvcGllZC5cblxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIEkgY29uZmlybWVkIHRoYXQgYGNiLVx1MDAzZWFyZ3NbMV1gIGFuZCBgY2ItXHUwMDNlYXJnc1syXWAgYXJlIGluaXRpYWxpemVkIHRvIDAsIHdoaWNoIGlzIHdoYXQgdGhlIG5ldGxpbmsgY29yZSBkb2VzLiBgYmFzZV9zZXFgIGlzIGxvYWRlZCBmcm9tIHRoZSBpbml0aWFsaXplZCBgbmV0LVx1MDAzZW5mLm5hdF9ob29rX2Jhc2Vfc2VxYC5cblxuMy4gICoqQWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzOioqIFRoZXJlIGFyZSBubyBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFRoZSBzZXF1ZW5jZSBjb3VudGVycyBpbiBgc3RydWN0IG5ldG5zX25mYCBhcmUgaW5pdGlhbGl6ZWQgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdGAuXG5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbG9naWMgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIGJ5dGUgYWNjZXNzOioqIFRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IGlzc3VlcyBpbiB0aGlzIHJlZ2FyZC5cblxuVGhlcmVmb3JlLCBjb25zaWRlcmluZyBhbGwgdGhlc2UgZmFjdG9ycywgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU3NCwiT3V0cHV0VG9rZW5zIjoyMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQyMjo0ODozMC44MDcyNjIzNzdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNlcXVlbmNlIHRyYWNraW5nIChgaG9va19iYXNlX3NlcWAgYW5kIGBuYXRfaG9va19iYXNlX3NlcWApIHRvIG5ldGZpbHRlciBhbmQgTkFUIGhvb2sgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIHRvIHByb3ZpZGUgZHVtcCBjb25zaXN0ZW5jeSBkZXRlY3Rpb24gaW4gYG5mbmV0bGlua19ob29rLmNgLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgZGF0YSBzdHJ1Y3R1cmUgYnVmZmVyIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkLiBOZXRsaW5rIGNhbGxiYWNrcyBgY2ItXFx1MDAzZWFyZ3NgIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBuZXRsaW5rIHN1YnN5c3RlbSwgYW5kIGBzdHJ1Y3QgbmV0bnNfbmZgIHNlcXVlbmNlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgbmV0ZmlsdGVyX25ldF9pbml0KClgLlxcbi0gS0FTQU4gLyBMb2NrZGVwIGFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgUkNVIGRlcmVmZXJlbmNpbmcsIGxpc3QgdHJhdmVyc2FsIGJvdW5kcywgb3IgaG9vayBlbnRyeSBsaWZlY3ljbGVzLCB3aGljaCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiwgS0NTQU4sIGFuZCBMb2NrZGVwLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzZXF1ZW5jZSB0cmFja2luZyAoYGhvb2tfYmFzZV9zZXFgIGFuZCBgbmF0X2hvb2tfYmFzZV9zZXFgKSB0byBuZXRmaWx0ZXIgYW5kIE5BVCBob29rIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiB0byBwcm92aWRlIGR1bXAgY29uc2lzdGVuY3kgZGV0ZWN0aW9uIGluIGBuZm5ldGxpbmtfaG9vay5jYC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGRhdGEgc3RydWN0dXJlIGJ1ZmZlciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZC4gTmV0bGluayBjYWxsYmFja3MgYGNiLVxcdTAwM2VhcmdzYCBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgbmV0bGluayBzdWJzeXN0ZW0sIGFuZCBgc3RydWN0IG5ldG5zX25mYCBzZXF1ZW5jZSBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYG5ldGZpbHRlcl9uZXRfaW5pdCgpYC5cXG4tIEtBU0FOIC8gTG9ja2RlcCBhcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBwYXRjaCByZWxhdGUgdG8gY29uY3VycmVuY3ksIFJDVSBkZXJlZmVyZW5jaW5nLCBsaXN0IHRyYXZlcnNhbCBib3VuZHMsIG9yIGhvb2sgZW50cnkgbGlmZWN5Y2xlcywgd2hpY2ggZmFsbCBzcXVhcmVseSBpbnRvIHRoZSBkb21haW4gb2YgS0FTQU4sIEtDU0FOLCBhbmQgTG9ja2RlcC5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow9xh9q[1] Phase: Succeeded StartedAt: 2026-09-04 22:48:41 +0000 UTC FinishedAt: 2026-09-04 22:48:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 22:48:41 +0000 UTC FinishedAt: 2026-09-04 22:48:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2] Phase: Succeeded StartedAt: 2026-09-04 22:48:41 +0000 UTC FinishedAt: 2026-09-05 02:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 22:48:41 +0000 UTC FinishedAt: 2026-09-05 02:26:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 22:48:41 +0000 UTC FinishedAt: 2026-09-04 22:48:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 22:48:41 +0000 UTC FinishedAt: 2026-09-04 22:48:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflow9xh9q/series-workflow9xh9q-convert-artifact-1122129884/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 22:48:51 +0000 UTC FinishedAt: 2026-09-04 23:04:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 22:48:51 +0000 UTC FinishedAt: 2026-09-04 23:04:46 +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:*14a67f13-0c41-4ac3-aa2b-d0814938977d,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-workflow9xh9q/series-workflow9xh9q-convert-artifact-1122129884/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": "742387fd-409c-446f-844e-437449bc6293", "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-workflow9xh9q/series-workflow9xh9q-build-action-2444528394/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 22:48:51 +0000 UTC FinishedAt: 2026-09-04 23:04:36 +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:*14a67f13-0c41-4ac3-aa2b-d0814938977d,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-workflow9xh9q/series-workflow9xh9q-convert-artifact-1122129884/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": "742387fd-409c-446f-844e-437449bc6293", "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-workflow9xh9q/series-workflow9xh9q-build-action-2444528394/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 23:04:46 +0000 UTC FinishedAt: 2026-09-04 23:04:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 23:04:46 +0000 UTC FinishedAt: 2026-09-04 23:04:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 23:04:46 +0000 UTC FinishedAt: 2026-09-04 23:04:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 23:04:46 +0000 UTC FinishedAt: 2026-09-04 23:04:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflow9xh9q/series-workflow9xh9q-convert-artifact-599258651/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 23:04:56 +0000 UTC FinishedAt: 2026-09-04 23:06:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 23:04:56 +0000 UTC FinishedAt: 2026-09-04 23:06:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*742387fd-409c-446f-844e-437449bc6293,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-workflow9xh9q/series-workflow9xh9q-build-action-2444528394/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-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 23:06:49 +0000 UTC FinishedAt: 2026-09-04 23:06:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 23:06:49 +0000 UTC FinishedAt: 2026-09-04 23:06:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 23:06:49 +0000 UTC FinishedAt: 2026-09-04 23:22:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 23:06:49 +0000 UTC FinishedAt: 2026-09-04 23:22:56 +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:*14a67f13-0c41-4ac3-aa2b-d0814938977d,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-workflow9xh9q/series-workflow9xh9q-convert-artifact-599258651/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": "60c65462-5be8-42ad-a221-1d2d9e0b3af9", "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-workflow9xh9q/series-workflow9xh9q-build-action-2248630719/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 23:06:49 +0000 UTC FinishedAt: 2026-09-04 23:22:46 +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:*14a67f13-0c41-4ac3-aa2b-d0814938977d,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-workflow9xh9q/series-workflow9xh9q-convert-artifact-599258651/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": "60c65462-5be8-42ad-a221-1d2d9e0b3af9", "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-workflow9xh9q/series-workflow9xh9q-build-action-2248630719/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 23:22:56 +0000 UTC FinishedAt: 2026-09-04 23:22:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 23:22:56 +0000 UTC FinishedAt: 2026-09-04 23:22:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 23:22:56 +0000 UTC FinishedAt: 2026-09-04 23:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 23:22:56 +0000 UTC FinishedAt: 2026-09-04 23:24:43 +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:*60c65462-5be8-42ad-a221-1d2d9e0b3af9,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-workflow9xh9q/series-workflow9xh9q-build-action-2248630719/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-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 23:24:53 +0000 UTC FinishedAt: 2026-09-05 02:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 23:24:53 +0000 UTC FinishedAt: 2026-09-05 02:26:12 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},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:*742387fd-409c-446f-844e-437449bc6293,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*60c65462-5be8-42ad-a221-1d2d9e0b3af9,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-workflow9xh9q/series-workflow9xh9q-build-action-2444528394/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-workflow9xh9q/series-workflow9xh9q-build-action-2248630719/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 23:24:53 +0000 UTC FinishedAt: 2026-09-04 23:25:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 23:24:53 +0000 UTC FinishedAt: 2026-09-04 23:24:58 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},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-workflow9xh9q/series-workflow9xh9q-convert-artifact-3371933716/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 23:24:53 +0000 UTC FinishedAt: 2026-09-04 23:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 23:24:53 +0000 UTC FinishedAt: 2026-09-04 23:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 23:24:53 +0000 UTC FinishedAt: 2026-09-04 23:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 23:25:03 +0000 UTC FinishedAt: 2026-09-05 02:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9xh9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfnl_hook_dump","nfnl_hook_dump_nat","nfnl_hook_dump_start","nfnl_hook_get","nf_nat_register_fn","nf_nat_unregister_fn","nf_register_net_hook","nf_unregister_net_hook"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NETFILTER_NETLINK","NETFILTER_NETLINK_HOOK","NF_TABLES","NF_CONNTRACK","NF_NAT"],"series_id":"66fb7276-aac5-4d9c-92e3-457c05c3cdcb","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 23:25:03 +0000 UTC FinishedAt: 2026-09-05 02:26:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*742387fd-409c-446f-844e-437449bc6293,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*60c65462-5be8-42ad-a221-1d2d9e0b3af9,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-workflow9xh9q/series-workflow9xh9q-build-action-2444528394/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-workflow9xh9q/series-workflow9xh9q-build-action-2248630719/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-workflow9xh9q/series-workflow9xh9q-convert-artifact-3371933716/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,}