Name: series-workflowjn7vl Phase: Succeeded StartedAt: 2026-08-30 18:49:54 +0000 UTC FinishedAt: 2026-08-30 22:36:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[0] Phase: Succeeded StartedAt: 2026-08-30 18:49:54 +0000 UTC FinishedAt: 2026-08-30 18:54:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[0].run-triage Phase: Succeeded StartedAt: 2026-08-30 18:49:54 +0000 UTC FinishedAt: 2026-08-30 18:54:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "aeddb4d52acfcc5ce5e988acd48f2906fe966ca3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "MIGRATION", "COMPACTION", "NUMA_MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "aeddb4d52acfcc5ce5e988acd48f2906fe966ca3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "MIGRATION", "COMPACTION", "NUMA_MIGRATION" ], "series_id": "f36e09ee-1523-490d-a040-0758235fc909" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "lru_gen_look_around", "mem_cgroup_update_lru_size", "folio_migrate_flags" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O05VTUFfTUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHJlY2xhaW0gbG9naWMgKE1HTFJVIHJlZmVyZW5jZS9nZW5lcmF0aW9uIGZsYWcgaGVscGVycywgbXVsdGktZ2VuIExSVSB0aWVyIGNhbGN1bGF0aW9ucywgbWVtY2cgcGVyLW5vZGUgTFJVIHpvbmUgc2l6ZSBhdG9taWMgY291bnRlcnMsIGFuZCBmb2xpbyBtaWdyYXRpb24gcmVmZXJlbmNlIHN0YXRlIGhhbmRsaW5nKS5cblxuMS4gTm8ga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBjb3B5aW5nIHBhdGhzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIGlvY3RsIHN0cnVjdHMsIGV0Yy4pLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgZmxhZyB2YWx1ZXMgKGUuZy4gYGZpbGVgIGFuZCBgb2xkX2dlbmAgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gL2B3YWxrX3VwZGF0ZV9mb2xpb2AsIGBzdHJ1Y3QgY3RybF9wb3NgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgZ3VhcmRlZCBieSBjb250cm9sIGZsb3cgY29uZGl0aW9ucy5cbjMuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2svcGFnZSBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkLlxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBjb25jdXJyZW50IGZsYWcgdXBkYXRlcywgYXRvbWljcywgb3IgcGFnZSBzdGF0ZSB0cmFuc2l0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBzYWZldHksIGNvbmN1cnJlbmN5LCBvciBzYW5pdHkgY2hlY2tzIGhhbmRsZWQgYnkgS0FTQU4vTE9DS0RFUC9WTV9XQVJOX09OLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYWNyb3NzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHRyYWNraW5nLCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcgKGNvbnZlcnRlZCB0byBhdG9taWNfbG9uZ190KSwgcGFnZSBtaWdyYXRpb24gcmVmZXJlbmNlIGNvcHlpbmcgKGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMpLCBhbmQgcGFnZSByZWNsYW1hdGlvbiBzY2FubmluZyBhbmQgdGllciBjYWxjdWxhdGlvbnMgaW4gdm1zY2FuLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBjb3JlIGtlcm5lbCBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIG1pZ3JhdGlvbiBwYXRocyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTNkMzY5OTIzODAxZjc4N2IzY2FlYWI5OWY3YjFkNjQ0OTE3NWI4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDE4OjUxOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDdkMWMwY2UxODlhODguLjFiNDlkOGI1OTFkYTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiYjNDM7XHRhdG9taWNfbG9uZ190XHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyXHRpdGVyO1xuIFxuIFx0LypcbkBAIC05MDIsMTAgJiM0Mzs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuJiM0MztcdGxvbmcgdmFsO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdHJldHVybiBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4mIzQzO1x0dmFsID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjdlNDg3YzIzYWZmNzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMTAsNiAmIzQzOzEwLDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVhZm9wcy5oXHUwMDNlXG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC5cbkBAIC0yNyw3ICYjNDM7MzIsNyBAQFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuJiM0MztcdHJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuQEAgLTE0MiwxMCAmIzQzOzE0Nyw2NiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcbiBcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7LyoqXG4mIzQzOyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxuJiM0MzsgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4mIzQzOyAqIEBnZW46IGdlbmVyYXRpb24gbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pXG4mIzQzO3tcbiYjNDM7XHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMgfHwgZ2VuIFx1MDAzYyAwKTtcbiYjNDM7XHQvKiBTdG9yZSBnZW4gb2Zmc2V0IGJ5IDEsIHplcm8gbWVhbnMgdGhlIGZvbGlvIGlzIG9mZi1saXN0LiAqL1xuJiM0MztcdCpmbGFncyBcdTAwMjY9IH5MUlVfR0VOX01BU0s7XG4mIzQzO1x0KmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGxydV9nZXRfZ2VuX2ZsYWdzIC0gUmV0dXJuIHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuIFJldHVybnNcbiYjNDM7ICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZ2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztcbiYjNDM7XHQvKiBFeGNsdWRlIHRoZSBsZWdhbCAtMSBmcm9tIHRoZSB1bnNpZ25lZCBNQVhfTlJfR0VOUyBjb21wYXJpc29uICovXG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSBcdTAwMjZcdTAwMjYgZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuJiM0MztcdHJldHVybiBnZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLlxuJiM0MzsgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4mIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS5cbiYjNDM7ICpcbiYjNDM7ICogRm9yIE1HTFJVLCBQR19yZWZlcmVuY2VkIGhvbGRzIHRoZSBmaXJzdCByZWYsIGFuZCB0aGUgZXh0cmEgYml0cyBob2xkIHRoZVxuJiM0MzsgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW5cbiYjNDM7ICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxXG4mIzQzOyAqIG1lYW5zIFBHX3JlZmVyZW5jZWQgaXMgc2V0IGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgemVybywgYW5kIHJlZnMgPT0gMCBtZWFuc1xuJiM0MzsgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UocmVmcyBcdTAwM2UgTFJVX1JFRlNfTUFYKTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdCpmbGFncyBcdTAwMjY9IH5MUlVfUkVGU19GTEFHUztcbiYjNDM7XHRpZiAoIXJlZnMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0KmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRikpO1xuJiM0Mzt9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuJiM0MzsgKlxuJiM0MzsgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qXG5AQCAtMTU1LDExICYjNDM7MjE2LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4mIzQzO1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuJiM0Mzt9XG4gXG4tXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbHJ1X2dldF9nZW5fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbilcbkBAIC0yNzAsNyAmIzQzOzM0NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRmbGFncyA9IChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbiYjNDM7XHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7XG4gXHQvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbkBAIC0yOTUsNyAmIzQzOzM2OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHQvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovXG4gXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4mIzQzO1x0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4gXHRnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpO1xuQEAgLTMwNCwxMSAmIzQzOzM3OCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuJiM0MzsvKipcbiYjNDM7ICogZm9saW9fbWlncmF0ZV9scnVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xuJiM0MzsgKiBAbmV3OiB0aGUgZGVzdGluYXRpb24gZm9saW9cbiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpb1xuJiM0MzsgKlxuJiM0MzsgKiBUcmFuc2ZlciB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIEBuZXcgZHVyaW5nIG1pZ3JhdGlvbjogdGhlIE1HTFJVXG4mIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZVxuJiM0MzsgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXHUwMDNlZmxhZ3MuZikgXHUwMDI2IExSVV9SRUZTX01BU0s7XG4tXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNm5ldy1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFTSyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcbiB9XG4gI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG4gXG5AQCAtMzM3LDkgJiM0Mzs0MTksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKVxuJiM0MztcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDkyLDExICYjNDM7NDkyLDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHtcbiAgKiBmb2xpby1cdTAwM2VmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suXG4gICovXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcdFx0NFVcbiYjNDM7I2RlZmluZSBMUlVfVElFUl9NSU5cdFx0MFVcbiYjNDM7I2RlZmluZSBMUlVfVElFUl9NQVhcdFx0KE1BWF9OUl9USUVSUyAtIDEpXG4gXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcbiBcbiAjZGVmaW5lIExSVV9HRU5fTUFTS1x0XHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKVxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1x0XHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpXG4mIzQzOyNkZWZpbmUgTFJVX1JFRlNfTUFYXHRcdEJJVChMUlVfUkVGU19XSURUSClcbiBcbiAvKlxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxuZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jXG5pbmRleCBjMDJkY2VhOWMwM2MyLi5mYjg3NGZlNDkyYjJiIDEwMDY0NFxuLS0tIGEvbW0vZm9saW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZm9saW8uY1xuQEAgLTM1MywyNiAmIzQzOzM1MywyOCBAQCBzdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4mIzQzO1x0aW50IHJlZnM7XG4gXG4gXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuLVx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkge1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykge1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcdFx0cmVmcyA9IGxydV9nZXRfcmVmc19mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcdFx0aWYgKHJlZnMgPT0gTFJVX1JFRlNfTUFYKSB7XG4gXHRcdFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxuIFx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuJiM0MztcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyAmIzQzOyAxKTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGdlbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTtcbiYjNDM7XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTI3MWQzOTBiNjE3ZS4uZjkxNTQwZmVhZjczNSAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCAmIzQzOzE1MjksMTIgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRcdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcbi1cdGxvbmcgc2l6ZTtcbiBcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRscnVfc2l6ZSA9IFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHQqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzO1xuLVxuLVx0c2l6ZSA9ICpscnVfc2l6ZTtcbi1cdGlmIChXQVJOX09OQ0Uoc2l6ZSBcdTAwM2MgMCxcbi1cdFx0XCYjMzQ7JXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cJiMzNDssXG4tXHRcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XG4tXHRcdFZNX0JVR19PTigxKTtcbi1cdFx0KmxydV9zaXplID0gMDtcbi1cdH1cbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMClcbi1cdFx0KmxydV9zaXplICYjNDM7PSBucl9wYWdlcztcbiYjNDM7XHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCAmIzQzOzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuJiM0MztcdC8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi9cbiYjNDM7XHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4mIzQzO1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyAmIzQzOzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4gXHRcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcbiBcbi1cdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuIFx0LypcbiBcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxuIFx0ICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZjExNDkxZWU5ZWQ1Yy4uODdlNjY3YzQxMGVkNCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTg0MywxOSAmIzQzOzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4gXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbiYjNDM7XHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuJiM0MztcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuQEAgLTMxOTUsOCAmIzQzOzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuJiM0MztzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbiYjNDM7XHRcdFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbiB7XG4gXHRpbnQgaTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykge1xuIFx0XHRwb3MtXHUwMDNlcmVmYXVsdGVkICYjNDM7PSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSAmIzQzO1xuIFx0XHRcdFx0ICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xuIFx0XHRwb3MtXHUwMDNldG90YWwgJiM0Mzs9IGxydWdlbi1cdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gJiM0MztcbkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLFxuJiM0MztcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuJiM0MztcdGludCBvbGRfZ2VuO1xuIFxuIFx0LypcbiBcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXG5AQCAtMzI3OSwyMCAmIzQzOzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiBcdGRvIHtcbiYjNDM7XHRcdG9sZF9nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7XHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4mIzQzO1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbiYjNDM7XHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztcdCppc19maWxlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXHUwMDI2b2xkX2ZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAxLDIxICYjNDM7MzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbiBcdGRvIHtcbi1cdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4mIzQzO1x0XHRuZXdfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcbiYjNDM7XG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuIFx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcbiYjNDM7XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiBcdFx0bmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO1x0XHRscnVfc2V0X2dlbl9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuJiM0MztcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXG5AQCAtMzMyMyw5ICYjNDM7MzMzMCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuJiM0MztcdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcbiBcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbkBAIC0zNTEyLDIyICYjNDM7MzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4mIzQzO1x0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpXG4ge1xuLVx0aW50IG9sZF9nZW47XG4mIzQzO1x0aW50IG5ld19nZW4sIG9sZF9nZW4sIGZpbGU7XG4gXG4gXHRpZiAoIWZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuJiM0MztcbiBcdGlmIChkaXJ0eSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiBcbiBcdGlmICh3YWxrKSB7XG4tXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNmZpbGUsIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuLVx0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiYjNDM7XHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICYjNDM7MzU1Nyw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0dW5zaWduZWQgaW50IG5yO1xuIFx0cG1kX3QgcG1kdmFsO1xuIFxuQEAgLTM2MDEsNyAmIzQzOzM2MDcsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyAmIzQzOzM2MjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSAmIzQzOz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggJiM0MzszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7XG4gXG5AQCAtMzY5Miw3ICYjNDM7MzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdFx0Z290byBuZXh0O1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgJiM0MzszNzEwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0aSA9IGkgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7XG4gXHR9IHdoaWxlIChpIFx1MDAzYz0gTUlOX0xSVV9CQVRDSCk7XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggJiM0Mzs0Mjc0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi1cdGludCBnZW47XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXHUwMDNlcHRsKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbkBAIC00MzA4LDggJiM0Mzs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFxuIFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4tXHRtYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKTtcbi1cdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbkBAIC00MzQxLDcgJiM0Mzs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtNDM1MywxMyAmIzQzOzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHR5b3VuZyAmIzQzOz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiBcdC8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqL1xuIFx0aWYgKG1tX3N0YXRlIFx1MDAyNlx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcbi1cdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cdTAwM2VwbWQpO1xuJiM0MztcdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSksXG4mIzQzO1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzE2LDcgJiM0Mzs0NzE3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApO1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcbiBcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xuQEAgLTQ4MDksOSAmIzQzOzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykge1xuLVx0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgXHUwMDI2cHYpO1xuJiM0MztcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuJiM0MztcdGZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyIFx1MDAzYz0gTFJVX1RJRVJfTUFYOyB0aWVyJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbiBcdFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTQ4MzIsOCAmIzQzOzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbiYjNDM7XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbiYjNDM7XHRcdCAgICAgIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbiYjNDM7XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbiYjNDM7XHRcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuIFxuIFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG4gfVxuQEAgLTQ5MzIsOCAmIzQzOzQ5MzUsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdH1cbiBcbiBcdFx0LyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4mIzQzO1x0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDssCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7TlVNQV9NSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDssCiAgICAmIzM0O2ZvbGlvX21pZ3JhdGVfZmxhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhY3Jvc3MgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgdHJhY2tpbmcsIG1lbWNnIExSVSB6b25lIHNpemUgYWNjb3VudGluZyAoY29udmVydGVkIHRvIGF0b21pY19sb25nX3QpLCBwYWdlIG1pZ3JhdGlvbiByZWZlcmVuY2UgY29weWluZyAoZm9saW9fbWlncmF0ZV9scnVfcmVmcyksIGFuZCBwYWdlIHJlY2xhbWF0aW9uIHNjYW5uaW5nIGFuZCB0aWVyIGNhbGN1bGF0aW9ucyBpbiB2bXNjYW4uIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IGNvcmUga2VybmVsIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgbWlncmF0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5M2QzNjk5MjM4MDFmNzg3YjNjYWVhYjk5ZjdiMWQ2NDQ5MTc1Yjg1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMzAgMTg6NTE6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDdkMWMwY2UxODlhODguLjFiNDlkOGI1OTFkYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHsKIAkvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi8KIAlzdHJ1Y3QgbHJ1dmVjCQlscnV2ZWM7CiAJQ0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTsKLQl1bnNpZ25lZCBsb25nCQlscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTsKJiM0MzsJYXRvbWljX2xvbmdfdAkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtOTAyLDEwICYjNDM7OTAyLDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IGF0b21pY19sb25nX3JlYWQoJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi43ZTQ4N2MyM2FmZjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTEwLDYgJiM0MzsxMCwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJmYXVsdGZkX2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sZWFmb3BzLmgmZ3Q7CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qKgogICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LgpAQCAtMjcsNyAmIzQzOzMyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7CiYjNDM7CXJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpOwogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLApAQCAtMTQyLDEwICYjNDM7MTQ3LDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KQogCXJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MzsvKioKJiM0MzsgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzCiYjNDM7ICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pCiYjNDM7ewomIzQzOwlCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLICZhbXA7IExSVV9SRUZTX01BU0spOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TIHx8IGdlbiAmbHQ7IDApOwomIzQzOwkvKiBTdG9yZSBnZW4gb2Zmc2V0IGJ5IDEsIHplcm8gbWVhbnMgdGhlIGZvbGlvIGlzIG9mZi1saXN0LiAqLwomIzQzOwkqZmxhZ3MgJmFtcDs9IH5MUlVfR0VOX01BU0s7CiYjNDM7CSpmbGFncyB8PSAoZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3MKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJucwomIzQzOyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwomIzQzOwkvKiBFeGNsdWRlIHRoZSBsZWdhbCAtMSBmcm9tIHRoZSB1bnNpZ25lZCBNQVhfTlJfR0VOUyBjb21wYXJpc29uICovCiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgJmFtcDsmYW1wOyBnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwomIzQzOwlyZXR1cm4gZ2VuOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuCiYjNDM7ICoKJiM0MzsgKiBGb3IgTUdMUlUsIFBHX3JlZmVyZW5jZWQgaG9sZHMgdGhlIGZpcnN0IHJlZiwgYW5kIHRoZSBleHRyYSBiaXRzIGhvbGQgdGhlCiYjNDM7ICogcmVtYWluaW5nIHJlZnMuIEZvciBjbGFzc2ljYWwgTFJVIHRoZSBleHRyYSBiaXRzIGFyZSBub3QgdXNlZCwgc28gaXQgY2FuCiYjNDM7ICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxCiYjNDM7ICogbWVhbnMgUEdfcmVmZXJlbmNlZCBpcyBzZXQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSB6ZXJvLCBhbmQgcmVmcyA9PSAwIG1lYW5zCiYjNDM7ICogUEdfcmVmZXJlbmNlZCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIGFsbCB1bnNldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKHJlZnMgJmd0OyBMUlVfUkVGU19NQVgpOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJKmZsYWdzICZhbXA7PSB+TFJVX1JFRlNfRkxBR1M7CiYjNDM7CWlmICghcmVmcykKJiM0MzsJCXJldHVybjsKJiM0MzsJKmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpICZsdDsmbHQ7IExSVV9SRUZTX1BHT0ZGKSk7CiYjNDM7fQogCiYjNDM7LyoqCiYjNDM7ICogbHJ1X2dldF9yZWZzX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHNldCBieSBscnVfc2V0X3JlZnNfZmxhZ3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiAJaWYgKCEoZmxhZ3MgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKSkKIAkJcmV0dXJuIDA7CiAJLyoKQEAgLTE1NSwxMSAmIzQzOzIxNiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfZ2V0X3JlZnNfZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzKTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzO30KIAotCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKQpAQCAtMjcwLDcgJiM0MzszNDQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKIAlmbGFncyA9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi8KLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiYjNDM7CXNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTsKIAkvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi8KQEAgLTI5NSw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAogCS8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi8KIAlmbGFncyA9ICFyZWNsYWltaW5nICZhbXA7JmFtcDsgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwOwotCWZsYWdzID0gc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKJiM0MzsJZmxhZ3MgPSBzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLLCBmbGFncyk7CiAJZ2VuID0gKChmbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKIAogCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7CkBAIC0zMDQsMTEgJiM0MzszNzgsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiYjNDM7LyoqCiYjNDM7ICogZm9saW9fbWlncmF0ZV9scnVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpbwomIzQzOyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpbwomIzQzOyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW8KJiM0MzsgKgomIzQzOyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlUKJiM0MzsgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGUKJiM0MzsgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQl1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLSZndDtmbGFncy5mKSAmYW1wOyBMUlVfUkVGU19NQVNLOwotCi0Jc2V0X21hc2tfYml0cygmYW1wO25ldy0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLICZhbXA7IEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CWZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpOwogfQogI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovCiAKQEAgLTMzNyw5ICYjNDM7NDE5LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiB7Ci0KJiM0MzsJaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKQomIzQzOwkJZm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTsKIH0KICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA5NGY5YzNmZjU0MTYwLi45YjI3Y2Y1M2JkYmM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTQ5MiwxMSAmIzQzOzQ5MiwxNCBAQCBlbnVtIGxydXZlY19mbGFncyB7CiAgKiBmb2xpby0mZ3Q7ZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLgogICovCiAjZGVmaW5lIE1BWF9OUl9USUVSUwkJNFUKJiM0MzsjZGVmaW5lIExSVV9USUVSX01JTgkJMFUKJiM0MzsjZGVmaW5lIExSVV9USUVSX01BWAkJKE1BWF9OUl9USUVSUyAtIDEpCiAKICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19ICiAKICNkZWZpbmUgTFJVX0dFTl9NQVNLCQkoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkYpCiAjZGVmaW5lIExSVV9SRUZTX01BU0sJCSgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpICZsdDsmbHQ7IExSVV9SRUZTX1BHT0ZGKQomIzQzOyNkZWZpbmUgTFJVX1JFRlNfTUFYCQlCSVQoTFJVX1JFRlNfV0lEVEgpCiAKIC8qCiAgKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycywKZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jCmluZGV4IGMwMmRjZWE5YzAzYzIuLmZiODc0ZmU0OTJiMmIgMTAwNjQ0Ci0tLSBhL21tL2ZvbGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZm9saW8uYwpAQCAtMzUzLDI2ICYjNDM7MzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IHJlZnM7CiAKIAlpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpCiAJCXJldHVybjsKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwotCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CWlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm47CiAJfQogCiAJZG8gewotCQlpZiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CQlyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQlpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHsKIAkJCWlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkKIAkJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiAJCQlyZXR1cm47CiAJCX0KLQotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiB9CiAKIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQpAQCAtMzg0LDcgJiM0MzszODYsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZ2VuICZsdDsgMCkKIAkJcmV0dXJuIHRydWU7CiAKLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJZm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJc2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktJmd0O2xydWdlbi5taW5fc2VxW3R5cGVdKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxMjcxZDM5MGI2MTdlLi5mOTE1NDBmZWFmNzM1IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0xNTI5LDI4ICYjNDM7MTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsCiAJCQkJaW50IHppZCwgbG9uZyBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7Ci0JdW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7Ci0JbG9uZyBzaXplOwogCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuOwogCiAJbXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKLQlscnVfc2l6ZSA9ICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdOwotCi0JaWYgKG5yX3BhZ2VzICZsdDsgMCkKLQkJKmxydV9zaXplICYjNDM7PSBucl9wYWdlczsKLQotCXNpemUgPSAqbHJ1X3NpemU7Ci0JaWYgKFdBUk5fT05DRShzaXplICZsdDsgMCwKLQkJJiMzNDslcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxuJiMzNDssCi0JCV9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7Ci0JCVZNX0JVR19PTigxKTsKLQkJKmxydV9zaXplID0gMDsKLQl9Ci0KLQlpZiAobnJfcGFnZXMgJmd0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwlhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtNzc2LDggJiM0Mzs3NzYsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpbnQgY3B1cGlkOwogCi0JaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCWZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTsKJiM0MzsJLyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqLwomIzQzOwlmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiYjNDM7CiAJaWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKQogCQlmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTsKIAlpZiAoZm9saW9fdGVzdF9jbGVhcl9hY3RpdmUoZm9saW8pKSB7CkBAIC04MDcsNyAmIzQzOzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKQogCQlmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7CiAKLQlmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTsKIAkvKgogCSAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlcgogCSAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBmMTE0OTFlZTllZDVjLi44N2U2NjdjNDEwZWQ0IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtODQzLDE5ICYjNDM7ODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkgewogCQkvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi8KIAkJaWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKJiM0MzsJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CiAKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqLwotCWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpOwotCWVsc2UKJiM0MzsJaWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSAmZ3Q7IDEpIHsKJiM0MzsJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CX0gZWxzZSB7CiAJCWZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pOwomIzQzOwl9CiAJcmV0dXJuIHRydWU7CiB9CiAjZWxzZQpAQCAtMzE5NSw4ICYjNDM7MzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7CiAJaW50IGdhaW47CiB9OwogCi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKLQkJCSAgc3RydWN0IGN0cmxfcG9zICpwb3MpCiYjNDM7c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sCiYjNDM7CQkJICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKIAlwb3MtJmd0O2dhaW4gPSBnYWluOwogCXBvcy0mZ3Q7cmVmYXVsdGVkID0gcG9zLSZndDt0b3RhbCA9IDA7CiAKLQlmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpICZsdDs9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gdGllcl9taW47IGkgJmx0Oz0gdGllcl9tYXg7IGkmIzQzOyYjNDM7KSB7CiAJCXBvcy0mZ3Q7cmVmYXVsdGVkICYjNDM7PSBscnVnZW4tJmd0O2F2Z19yZWZhdWx0ZWRbdHlwZV1baV0gJiM0MzsKIAkJCQkgIGF0b21pY19sb25nX3JlYWQoJmFtcDtscnVnZW4tJmd0O3JlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7CiAJCXBvcy0mZ3Q7dG90YWwgJiM0Mzs9IGxydWdlbi0mZ3Q7YXZnX3RvdGFsW3R5cGVdW2ldICYjNDM7CkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovCi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKJiM0MztzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSwKJiM0MzsJCQkgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgb2xkX2dlbjsKIAogCS8qCiAJICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWQKQEAgLTMyNzksMjAgJiM0MzszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hCiAJICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlkbyB7CiYjNDM7CQlvbGRfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsKIAkJLyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqLwotCQlpZiAoIShvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSkKLQkJCXJldHVybiAtMTsKJiM0MzsJCWlmIChvbGRfZ2VuICZsdDsgMCkKJiM0MzsJCQlicmVhazsKIAotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJmFtcDsgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7Ci0JCW5ld19mbGFncyB8PSAoKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X2dlbl9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwkJbmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCi0JcmV0dXJuICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KCZhbXA7b2xkX2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG9sZF9nZW47CiB9CiAKIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovCkBAIC0zMzAxLDIxICYjNDM7MzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwotCi0JVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKIAogCWRvIHsKLQkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkJbmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CiAJCS8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqLwogCQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKQogCQkJcmV0dXJuIG5ld19nZW47CiAKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKIAkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7Ci0KLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X2dlbl9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwogCkBAIC0zMzIzLDkgJiM0MzszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbywKLQkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbikKJiM0MzsJCQkgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKQogewotCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCWludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7CiAJaW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCkBAIC0zNTEyLDIyICYjNDM7MzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKQogfQogCiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpCiYjNDM7CQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpCiB7Ci0JaW50IG9sZF9nZW47CiYjNDM7CWludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlOwogCiAJaWYgKCFmb2xpbykKIAkJcmV0dXJuOwogCiYjNDM7CW5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxKSk7CiYjNDM7CiAJaWYgKGRpcnR5ICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpCiAJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwogCiAJaWYgKHdhbGspIHsKLQkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7dm1hLSZndDtmbGFncyk7CiYjNDM7CQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDtmaWxlLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQotCQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwomIzQzOwkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCBmaWxlKTsKIAl9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sICZhbXA7dm1hLSZndDtmbGFncykpIHsKIAkJb2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQpAQCAtMzU0OSw4ICYjNDM7MzU1Nyw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCXVuc2lnbmVkIGludCBucjsKIAlwbWRfdCBwbWR2YWw7CiAKQEAgLTM2MDEsNyAmIzQzOzM2MDcsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNjE0LDcgJiM0MzszNjIwLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCXdhbGstJmd0O21tX3N0YXRzW01NX0xFQUZfWU9VTkddICYjNDM7PSBucjsKIAl9CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCWxhc3QgPSBOVUxMOwogCiAJaWYgKGkgJmx0OyBQVFJTX1BFUl9QVEUgJmFtcDsmYW1wOyBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgJmFtcDtzdGFydCwgJmFtcDtlbmQpKQpAQCAtMzYzNyw4ICYjNDM7MzY0Myw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtJmd0O3ByaXZhdGU7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstJmd0O2xydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLSZndDtscnV2ZWMpOwotCURFRklORV9NQVhfU0VRKHdhbGstJmd0O2xydXZlYyk7Ci0JaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAKIAlWTV9XQVJOX09OX09OQ0UocHVkX2xlYWYoKnB1ZCkpOwogCkBAIC0zNjkyLDcgJiM0MzszNjk2LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJCWdvdG8gbmV4dDsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzcwNiw3ICYjNDM7MzcxMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCWkgPSBpICZndDsgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgJiM0MzsgMTsKIAl9IHdoaWxlIChpICZsdDs9IE1JTl9MUlVfQkFUQ0gpOwogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCXNwaW5fdW5sb2NrKHB0bCk7CkBAIC00MjcwLDggJiM0Mzs0Mjc0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7CiAJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwogCXN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTsKLQl1bnNpZ25lZCBsb25nIG1heF9zZXE7Ci0JaW50IGdlbjsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy0mZ3Q7cHRsKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7CkBAIC00MzA4LDggJiM0Mzs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCiAJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTsKIAlscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOwotCW1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktJmd0O2xydWdlbi5tYXhfc2VxKTsKLQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCW1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7CiAKIAlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwpAQCAtNDM0MSw3ICYjNDM7NDM0MSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC00MzUzLDEzICYjNDM7NDM1MywxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCXlvdW5nICYjNDM7PSBucjsKIAl9CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAKIAkvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi8KIAlpZiAobW1fc3RhdGUgJmFtcDsmYW1wOyBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSkKLQkJdXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy0mZ3Q7cG1kKTsKJiM0MzsJCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxKSwKJiM0MzsJCQkJICAgIHB2bXctJmd0O3BtZCk7CiAKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAKQEAgLTQ3MTYsNyAmIzQzOzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYQogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAogCXN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTsKQEAgLTQ4MDksOSAmIzQzOzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQogCSAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZQogCSAqIGFzIG1hbnkgcmVmYXVsdHMgYXMgdGhlIGZpcnN0IHRpZXIuCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsICZhbXA7c3ApOwotCWZvciAodGllciA9IDE7IHRpZXIgJmx0OyBNQVhfTlJfVElFUlM7IHRpZXImIzQzOyYjNDM7KSB7Ci0JCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUlOLCAyLCAmYW1wO3NwKTsKJiM0MzsJZm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICYjNDM7IDE7IHRpZXIgJmx0Oz0gTFJVX1RJRVJfTUFYOyB0aWVyJiM0MzsmIzQzOykgewomIzQzOwkJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsICZhbXA7cHYpOwogCQlpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpKQogCQkJYnJlYWs7CiAJfQpAQCAtNDgzMiw4ICYjNDM7NDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIAkgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lCiAJICogd2hpY2ggdHlwZSB0byBzY2FuLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgJmFtcDtzcCk7Ci0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCwKJiM0MzsJCSAgICAgIHN3YXBwaW5lc3MsICZhbXA7c3ApOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCwKJiM0MzsJCSAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiAKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CkBAIC00OTMyLDggJiM0Mzs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQl9CiAKIAkJLyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovCi0JCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTsKJiM0MzsJCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkgewomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CQkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CQl9CiAJfQogCiAJbW92ZV9mb2xpb3NfdG9fbHJ1KCZhbXA7bGlzdCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjU2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgdG91Y2hlZCBmaWxlcyBpbW1lZGlhdGVseSBzaWduYWwgdGhhdCB0aGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgbGlrZWx5IHRvdWNoaW5nIE11bHRpLUdlbiBMUlUgKE1HTFJVLCBvciBgQ09ORklHX0xSVV9HRU5gIGZvciB1cyksIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZy4gSSBzZWUgY2hhbmdlcyBpbiBgbWVtY29udHJvbC5oYCBhbmQgYG1lbWNvbnRyb2wuY2AsIHNvIEkgZXhwZWN0IG1lbWNnIExSVSB6b25lIHNpemUgYWNjb3VudGluZyBpcyBiZWluZyBtb2RpZmllZC4gVGhlIHN3aXRjaCBmcm9tIGBscnVfem9uZV9zaXplYCB0byBgYXRvbWljX2xvbmdfdGAgY29uZmlybXMgdGhhdCBzdXNwaWNpb24uCgpCZXlvbmQgdGhhdCwgdGhlIGZpbGUgbGlzdCBzdWdnZXN0cyByZWZhY3RvcmluZyBvZiBmb2xpbyBmbGFncyByZWxhdGVkIHRvIExSVSByZWZlcmVuY2VzIGFuZCBnZW5lcmF0aW9ucywgd2hpY2ggYXJlIGZ1bmRhbWVudGFsIHRvIGhvdyBNR0xSVSB3b3Jrcy4gTWlncmF0aW9uIG9mIExSVSByZWZlcmVuY2VzIGlzIHByZXNlbnQsIHdoaWNoIGlzIGEga2V5IHByb2Nlc3Mgd2hlbiB0aGUgTFJVIG5lZWRzIHRvIGNoYW5nZSwgYW5kIG9mIGNvdXJzZSwgdm1zY2FuIGxvZ2ljIGlzIGFsc28gYWZmZWN0ZWQuIEFsbCBlc3NlbnRpYWwgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gSSYjMzk7bGwgcHJvYmFibHkgZG8gYSBxdWljayBnaXQgZ3JlcCBmb3IgYENPTkZJR19MUlVfR0VOYCBhbmQgYE1FTUNHYCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiByZXF1aXJlbWVudHMgYW5kIHRoZSBzcGVjaWZpYyBmZWF0dXJlcyBiZWluZyBlbmFibGVkIGFuZC9vciBtb2RpZmllZCBieSB0aGlzIHBhdGNoLiBUaGlzIGlzIGdvaW5nIHRvIGJlIG15IGtleSBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTQwMy0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDUtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTItXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDE0LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxOC1cbm1tL0tjb25maWc6MTQxOTpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDIwLVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjctXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS2NvbmZpZyBmb3IgTFJVIGFuZCBNZW1jZyBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYExSVV9HRU5gIGFuZCBgTUVNQ0dgIGFyZSBpbnRlcmFjdGluZyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGRlZmluaXRpb25zIGluIGBtbS9LY29uZmlnYCBhcmUgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGRlZmluZWQgYW5kIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGZlYXR1cmVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgTFJVX0dFTmAgaXMgZGVwZW5kZW50IG9uIGBNRU1DR2AsIG9yIGlmIHRoZXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgb3IgaWYgdGhlcmUmIzM5O3MgbW9yZSBjb21wbGV4IGxvZ2ljIGF0IHBsYXkuIEkmIzM5O2xsIGZvY3VzIG9uIHdoYXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IHRoZSBvcHRpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgY3J1Y2lhbCB0byBnZXQgYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDAwOlx0XHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cbjE0MDE6XHRcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cbjE0MDI6XHRcbjE0MDM6XHQjIG11bHRpLWdlbiBMUlUge1xuMTQwNDpcdGNvbmZpZyBMUlVfR0VOXG4xNDA1Olx0XHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbjE0MDY6XHRcdGRlcGVuZHMgb24gTU1VXG4xNDA3Olx0XHQjIG1ha2Ugc3VyZSBmb2xpby1cdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcbjE0MDg6XHRcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxuMTQwOTpcdFx0aGVscFxuMTQxMDpcdFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcbjE0MTE6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxuMTQxMjpcdFxuMTQxMzpcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbjE0MTQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbjE0MTU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxNjpcdFx0aGVscFxuMTQxNzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXG4xNDE4Olx0XG4xNDE5Olx0Y29uZmlnIExSVV9HRU5fU1RBVFNcbjE0MjA6XHRcdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4xNDIxOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MjI6XHRcdGhlbHBcbjE0MjM6XHRcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXG4xNDI0Olx0XHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXG4xNDI1Olx0XG4xNDI2Olx0XHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxuMTQyNzpcdFxuMTQyODpcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxuMTQyOTpcdFx0ZGVmX2Jvb2wgeVxuMTQzMDpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbjE0MzE6XHQjIH1cbjE0MzI6XHRcbjE0MzM6XHRjb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbjE0MzQ6XHQgICAgICAgZGVmX2Jvb2wgblxuMTQzNTpcdFxuMTQzNjpcdGNvbmZpZyBQRVJfVk1BX0xPQ0tcbjE0Mzc6XHRcdGRlZl9ib29sIHlcbjE0Mzg6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgU01QXG4xNDM5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIHRoaXMgaXNzdWUsIGFuZCBuYXR1cmFsbHksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUmIzM5O3MgdGhlIHVzdWFsIHN1c3BlY3Q/JiMzNDsgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBNRU1DR2AgS2NvbmZpZyBvcHRpb25zLiBZb3Uga25vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGUgYmFzaWMgYnVpbGRpbmcgYmxvY2tzIGFyZSBlbmFibGVkIGFuZCBjb25maWd1cmVkIGFzIGV4cGVjdGVkLiBJdCYjMzk7cyBlYXN5IHRvIHdhc3RlIHRpbWUgY2hhc2luZyBnaG9zdHMgaWYgc29tZXRoaW5nIHNpbXBsZSBpcyBvZmYgaW4gdGhlIGNvbmZpZy4gR290dGEgcnVsZSBvdXQgdGhlIG9idmlvdXMgZmlyc3QsIGFsd2F5cy4gTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBgTUVNQ0dgIEtjb25maWcsIHNwZWNpZmljYWxseSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTEzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUgZm9yIE1FTUNHIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgYW55dGhpbmcgcmVsYXRlZCB0byBgTUVNQ0dgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggTWVtb3J5IENvbnRyb2wgR3JvdXBzLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhLCBzbyBhIHN5c3RlbWF0aWMgZXhwbG9yYXRpb24gaXMgaW4gb3JkZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgZXhwb3NlcyBNRU1DRyBzZXR0aW5ncyB0byB0aGUgYnVpbGQgc3lzdGVtLiBBcmUgdGhlcmUgYW55IG5ldyBvcHRpb25zIGludHJvZHVjZWQ/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBtYXkgaGF2ZSBmb3Jnb3R0ZW4/IEkmIzM5O20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIG1haW4gTUVNQ0cgZW5hYmxpbmcgb3B0aW9uLCBhbnkgYXNzb2NpYXRlZCBzdWJzeXN0ZW0tc3BlY2lmaWMgY29udHJvbHMgKGxpa2UgcmVzb3VyY2UgbGltaXRzKSwgYW5kIHBvc3NpYmx5IGV2ZW4gZWFybHkgYm9vdCBjb25maWd1cmF0aW9uIGRldGFpbHMgdGhhdCBhcmUgcmVsZXZhbnQuIEtub3dpbmcgdGhlIEtjb25maWcgc3RydWN0dXJlIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgTUVNQ0cmIzM5O3MgYXZhaWxhYmxlIGZlYXR1cmVzIGFuZCBob3cgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlbSBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuMTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwOTA6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA5MTpcdFx0aGVscFxuMTA5MjpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDkzOlx0XG4xMDk0Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDk5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBUaGVzZSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBmb2N1c2VzIG9uIGlkZW50aWZ5aW5nIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMgYW5kIGlmIGFueXRoaW5nIG5vbi10cml2aWFsIGlzIGhhcHBlbmluZyB3aXRoIHRoZW0uIEkmIzM5O20gbWFpbmx5IGludGVyZXN0ZWQgaW4gbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFzIHRob3NlIHJlcHJlc2VudCB0aGUgZW50cnkgcG9pbnRzIG9yIGtleSBwaWVjZXMgb2YgdGhlIGNoYW5nZWQgbG9naWMgdGhhdCBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gYW5kIHVuZGVyc3RhbmQgaW4gbW9yZSBkZXRhaWwsIGFzIHdlbGwgYXMgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkLgoKU28sIEkgc2VlIGNoYW5nZXMgYWNyb3NzIGEgZmV3IGZpbGVzLgoKSW4gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgdGhlIGBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZWAgaXMgY2hhbmdlZCwgc3BlY2lmaWNhbGx5IGBscnVfem9uZV9zaXplYCB3aGljaCBpcyBub3cgYW4gYGF0b21pY19sb25nX3RgLiAgQWxzbywgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgIGlzIGNoYW5nZWQgdG8gYmVjb21lIGEgYHN0YXRpYyBpbmxpbmVgIGZ1bmN0aW9uLiBOb3QgbXVjaCB0byBiZSBjb25jZXJuZWQgYWJvdXQgeWV0LgoKVGhlbiwgdGhlcmUmIzM5O3MgYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgLCB3aGljaCBjb250YWlucyBudW1lcm91cyBgc3RhdGljIGlubGluZWAgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZm9saW8gTFJVIG1hbmFnZW1lbnQ6IGBmb2xpb19mbGFnc19pc19maWxlX2xydWAsIGBmb2xpb19pc19maWxlX2xydWAsIGFuZCBzZXZlcmFsIHJlbGF0ZWQgdG8gZmxhZ3MgYW5kIHJlZmVyZW5jZSBjb3VudHMgbGlrZSBgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19scnVfcmVmc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbHJ1X2dlbmAsIGBscnVfZ2VuX2FkZF9mb2xpb2AsIGBscnVfZ2VuX2RlbF9mb2xpb2AsIGFuZCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AuIExvb2tzIGxpa2UgYSBsb3Qgb2YgaW5saW5lIGZ1bmN0aW9ucywgdGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4KCk5leHQsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCBpbnRyb2R1Y2VzIHNvbWUgbmV3IG1hY3JvczogYExSVV9USUVSX01JTmAsIGBMUlVfVElFUl9NQVhgLCBhbmQgYExSVV9SRUZTX01BWGAuIEkmIzM5O2xsIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVzZSwgYnV0IHRoZXkgYXJlIG1vc3QgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGlubGluZSBmdW5jdGlvbiBjaGFuZ2VzIG1lbnRpb25lZCBwcmV2aW91c2x5LgoKYG1tL2ZvbGlvLmNgIGhhcyBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgIGFzIHN0YXRpYyBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhlc2UgYW5kIHRoZSBhZm9yZW1lbnRpb25lZCBmb2xpbyBmdW5jdGlvbnMuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0cy4gSW4gYG1tL21lbWNvbnRyb2wuY2AsIHRoZXJlJiMzOTtzIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIHdoaWNoICppc24mIzM5O3QqIHN0YXRpYy4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBzbyBpdCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyB0aGVzZSBjaGFuZ2VzLiBJbiBgbW0vbWlncmF0ZS5jYCwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIG5vbi1zdGF0aWMsIHNvIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgZm9yIHRoaXMuIEZpbmFsbHksIGBtbS92bXNjYW4uY2AgY29udGFpbnMgc2V2ZXJhbCBzdGF0aWMgZnVuY3Rpb25zLCBhbmQgb25lIG5vbi1zdGF0aWMgKGFuZCBleHBvcnRlZCkgZnVuY3Rpb24gYGxydV9nZW5fbG9va19hcm91bmRgLiBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoaXMgZnVydGhlci4gVGhlIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZSBjYW4gYmUgc2VlbiBhcyBhdXhpbGlhcnkgZnVuY3Rpb25zLgoKU28sIHRvIHN1bW1hcml6ZSwgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgYXJlIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpcyBoYXBwZW5pbmcgd2l0aCB0aGVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9OTE4PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTk4Mi1cdFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSBcdTAwMjZcdTAwMjYgcHZtdy5wdGUpIHtcbm1tL3JtYXAuYzo5ODM6XHRcdFx0aWYgKGxydV9nZW5fbG9va19hcm91bmQoXHUwMDI2cHZtdywgbnIpKVxubW0vcm1hcC5jLTk4NC1cdFx0XHRcdHJlZmVyZW5jZWQmIzQzOyYjNDM7O1xuLS1cbm1tL3Ztc2Nhbi5jPTI3OTE9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy0yODIwLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxubW0vdm1zY2FuLmM6MjgyMTogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXG5tbS92bXNjYW4uYy0yODIyLSAqXG4tLVxubW0vdm1zY2FuLmM9NDA3ND1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MDkzLVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MDk0Olx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQwOTUtXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MjEzPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDI1OS0gKi9cbm1tL3Ztc2Nhbi5jOjQyNjA6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDI2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODkzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIEtleSBQZXJmb3JtYW5jZSBJbmRpY2F0b3JzKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZm9jdXNpbmcgb24gdHdvIGNyaXRpY2FsIHN5c3RlbSBmbGFnczogYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGFuZCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLiBUaGVzZSBhcmUgb2Z0ZW4gdGhlIGN1bHByaXRzIHdoZW4gSSBzZWUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBtZW1vcnkgYmVoYXZpb3IsIHNvIGl0JiMzOTtzIHNtYXJ0IHRvIHN0YXJ0IHdpdGggdGhlbS4gQSBxdWljayBhdWRpdCBvZiB0aGVpciBjdXJyZW50IHNldHRpbmdzIHdpbGwgdGVsbCBtZSBhIGxvdC4gQXJlIHRoZXkgc2V0IGFzIGV4cGVjdGVkLCBnaXZlbiB0aGUgd29ya2xvYWQgYW5kIGhhcmR3YXJlIHByb2ZpbGU/IEFueSBkZXZpYXRpb25zIGZyb20gdGhlIHJlY29tbWVuZGVkIHZhbHVlcyBjb3VsZCBpbW1lZGlhdGVseSBwb2ludCB0byB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUgSSYjMzk7bSBkZWJ1Z2dpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgaG93IHRoZXNlIGZsYWdzIGludGVyYWN0IHdpdGggYW55IHJlY2VudCBrZXJuZWwgdXBncmFkZXMsIGJlY2F1c2UgY2hhbmdlcyB0aGVyZSBjYW4gZWFzaWx5IGludmFsaWRhdGUgZXN0YWJsaXNoZWQgYXNzdW1wdGlvbnMuIEZ1cnRoZXJtb3JlLCBJJiMzOTtsbCBiZSBjZXJ0YWluIHRvIGNvcnJlbGF0ZSB0aGlzIGluZm9ybWF0aW9uIHdpdGggc3lzdGVtIGxvZ3MgYW5kIHJlbGV2YW50IG1ldHJpY3MgdG8gZ2V0IGEgbW9yZSBjb21wcmVoZW5zaXZlIHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtNzc0LSAqL1xubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21pZ3JhdGUuYy03NzYte1xuLS1cbm1tL21pZ3JhdGUuYy04NjMtfVxubW0vbWlncmF0ZS5jOjg2NDpFWFBPUlRfU1lNQk9MKGZvbGlvX21pZ3JhdGVfZmxhZ3MpO1xubW0vbWlncmF0ZS5jLTg2NS1cbi0tXG5tbS9taWdyYXRlLmM9ODcwPXN0YXRpYyBpbnQgX19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbi0tXG5tbS9taWdyYXRlLmMtODkwLVxubW0vbWlncmF0ZS5jOjg5MTpcdGZvbGlvX21pZ3JhdGVfZmxhZ3MoZHN0LCBzcmMpO1xubW0vbWlncmF0ZS5jLTg5Mi1cdHJldHVybiAwO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1MS1cdFx0XHRlbHNlXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTI6XHRcdFx0XHRmb2xpb19taWdyYXRlX2ZsYWdzKG5ld2ZvbGlvLCBmb2xpbyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTMtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaG93IG1lbW9yeSBjZ3JvdXBzIG1hbmFnZSB0aGVpciBMUlUgc2l6ZSwgYW5kIHRoYXQgbWVhbnMgaXQmIzM5O3MgaW50cmluc2ljYWxseSB0aWVkIHRvIHRoZSBwZXJmb3JtYW5jZSBhbmQgcmVzcG9uc2l2ZW5lc3Mgb2Ygd29ya2xvYWRzIHRoYXQgYXJlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqZXhhY3RseSogaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgTFJVIGxpc3Qgc2l6ZSBiYXNlZCBvbiBtZW1vcnkgdXNhZ2UsIHJlY2xhaW0gYWN0aXZpdHksIGFuZCBwb3RlbnRpYWxseSBldmVuIHVzZXItY29uZmlndXJlZCBsaW1pdHMgd2l0aGluIGEgbWVtb3J5IGNncm91cC4gVGhlcmUgY291bGQgYmUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY2dyb3VwIHN1YnN5c3RlbXMgdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCB0b28uIFNwZWNpZmljYWxseSBJJiMzOTttIGhvcGluZyB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBzdWJ0bGUgYnVncywgb3IgZm9yIHBvc3NpYmxlIGFyZWFzIGZvciBvcHRpbWl6YXRpb25zIHRvIHJlZHVjZSBsYXRlbmN5IG9yIGltcHJvdmUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBlZmZpY2llbmN5LCBvciBldmVuIGlkZW50aWZ5IHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZvbGlvLmM9MTEyMz1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9mb2xpby5jLTExNDMtXHRcdCAqL1xubW0vZm9saW8uYzoxMTQ0Olx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7XG5tbS9mb2xpby5jOjExNDU6XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcbm1tL2ZvbGlvLmMtMTE0Ni1cdH1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTUwMT1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtY29udHJvbC5jLTE1MTgtLyoqXG5tbS9tZW1jb250cm9sLmM6MTUxOTogKiBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSAtIGFjY291bnQgZm9yIGFkZGluZyBvciByZW1vdmluZyBhbiBscnUgcGFnZVxubW0vbWVtY29udHJvbC5jLTE1MjAtICogQGxydXZlYzogbWVtX2Nncm91cCBwZXIgem9uZSBscnUgdmVjdG9yXG4tLVxubW0vbWVtY29udHJvbC5jLTE1MjctICovXG5tbS9tZW1jb250cm9sLmM6MTUyODp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG5tbS9tZW1jb250cm9sLmMtMTUyOS1cdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vdm1zY2FuLmM9MTU5Mj11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vdm1zY2FuLmMtMTY0NC0gKiBVcGRhdGUgTFJVIHNpemVzIGFmdGVyIGlzb2xhdGluZyBwYWdlcy4gVGhlIExSVSBzaXplIHVwZGF0ZXMgbXVzdFxubW0vdm1zY2FuLmM6MTY0NTogKiBiZSBjb21wbGV0ZSBiZWZvcmUgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUgZHVlIHRvIGEgc2FuaXR5IGNoZWNrLlxubW0vdm1zY2FuLmMtMTY0Ni0gKi9cbi0tXG5tbS92bXNjYW4uYz00NjIxPXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDY0Mi1cdFx0XHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xubW0vdm1zY2FuLmM6NDY0MzpcdFx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7XG5tbS92bXNjYW4uYzo0NjQ0Olx0XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcbm1tL3Ztc2Nhbi5jLTQ2NDUtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL2ZvbGlvLmNgIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSByZWxhdGVkIG1vZGlmaWNhdGlvbnMgaW4gdGhvc2UgYXJlYXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIGluIHRob3NlIHR3byBmaWxlcy4gCgpUaGVuIEkmIzM5O2xsIHNoaWZ0IGdlYXJzIGFuZCBmb2N1cyBvbiBgbW0vZm9saW8uY2AgZm9yIG5vdywgYW5kIHRyYWNrIGRvd24gd2hlcmUgYGxydV9nZW5faW5jX3JlZnNgIGFuZCBgbHJ1X2dlbl9jbGVhcl9yZWZzYCBhcmUgYmVpbmcgY2FsbGVkIGZyb20uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZm9saW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQ1Olx0XHRcdFx0YnJlYWs7XG4gMzQ2Olx0XHRcdH1cbiAzNDc6XHRcdH1cbiAzNDg6XHRcbiAzNDk6XHRcdGxvY2FsX3VubG9jayhcdTAwMjZjcHVfZmJhdGNoZXMubG9jayk7XG4gMzUwOlx0fVxuIDM1MTpcdFxuIDM1MjpcdCNpZmRlZiBDT05GSUdfTFJVX0dFTlxuIDM1MzpcdFxuIDM1NDpcdHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiAzNTU6XHR7XG4gMzU2Olx0XHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIDM1NzpcdFx0aW50IHJlZnM7XG4gMzU4Olx0XG4gMzU5Olx0XHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXG4gMzYwOlx0XHRcdHJldHVybjtcbiAzNjE6XHRcbiAzNjI6XHRcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIDM2MzpcdFx0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbiAzNjQ6XHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiAzNjU6XHRcdFx0cmV0dXJuO1xuIDM2NjpcdFx0fVxuIDM2NzpcdFxuIDM2ODpcdFx0ZG8ge1xuIDM2OTpcdFx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4gMzcwOlx0XHRcdHJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTtcbiAzNzE6XHRcdFx0aWYgKHJlZnMgPT0gTFJVX1JFRlNfTUFYKSB7XG4gMzcyOlx0XHRcdFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxuIDM3MzpcdFx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIDM3NDpcdFx0XHRcdHJldHVybjtcbiAzNzU6XHRcdFx0fVxuIDM3NjpcdFx0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpO1xuIDM3NzpcdFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiAzNzg6XHR9XG4gMzc5Olx0XG4gMzgwOlx0c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gMzgxOlx0e1xuIDM4MjpcdFx0aW50IGdlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuIDM4MzpcdFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gMzg0Olx0XHR1bnNpZ25lZCBsb25nIHNlcTtcbiAzODU6XHRcbiAzODY6XHRcdGlmIChnZW4gXHUwMDNjIDApXG4gMzg3Olx0XHRcdHJldHVybiB0cnVlO1xuIDM4ODpcdFxuIDM4OTpcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiAzOTA6XHRcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIDM5MTpcdFxuIDM5MjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDM5MzpcdFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuIDM5NDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzk1Olx0XHQvKiB3aGV0aGVyIGNhbiBkbyB3aXRob3V0IHNodWZmbGluZyB1bmRlciB0aGUgTFJVIGxvY2sgKi9cbiAzOTY6XHRcdHJldHVybiBnZW4gPT0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuIDM5NzpcdH1cbiAzOTg6XHRcbiAzOTk6XHQjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiA0MDA6XHRcbiA0MDE6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gNDAyOlx0e1xuIDQwMzpcdH1cbiA0MDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBGb2xpbyBNYW5hZ2VtZW50IGluIG1tL2ZvbGlvLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgZm9saW8gcmVmZXJlbmNlIGNvdW50cywgcGFydGljdWxhcmx5IGhvdyB0aGV5JiMzOTtyZSBpbmNyZW1lbnRlZCBhbmQgY2xlYXJlZC4gVGhlIGZ1bmN0aW9ucyBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgIHNlZW0gY2VudHJhbCB0byB0aGF0LCBzbyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGVpciB1c2FnZSB3aXRoaW4gYG1tL2ZvbGlvLmNgLiBJIGV4cGVjdCB0aGUgY29kZSBhcm91bmQgbGluZSA0MDUgb253YXJkcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IG9mIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGhhbmRsZSBvbiBob3cgdGhlIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgZ2VuZXJhdGlvbiBhbmQgYXNzb2NpYXRlZCByZWZlcmVuY2UgY291bnQgbWVjaGFuaXNtcyBmdW5jdGlvbiBpbiB0aGlzIGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9mb2xpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDA6XHRcbiA0MDE6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gNDAyOlx0e1xuIDQwMzpcdH1cbiA0MDQ6XHRcbiA0MDU6XHRzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiA0MDY6XHR7XG4gNDA3Olx0XHRyZXR1cm4gZmFsc2U7XG4gNDA4Olx0fVxuIDQwOTpcdFxuIDQxMDpcdCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIDQxMTpcdFxuIDQxMjpcdC8qKlxuIDQxMzpcdCAqIGZvbGlvX21hcmtfYWNjZXNzZWQgLSBNYXJrIGEgZm9saW8gYXMgaGF2aW5nIHNlZW4gYWN0aXZpdHkuXG4gNDE0Olx0ICogQGZvbGlvOiBUaGUgZm9saW8gdG8gbWFyay5cbiA0MTU6XHQgKlxuIDQxNjpcdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCBwZXJmb3JtIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRyYW5zaXRpb25zOlxuIDQxNzpcdCAqXG4gNDE4Olx0ICogKiBpbmFjdGl2ZSx1bnJlZmVyZW5jZWRcdC1cdTAwM2VcdGluYWN0aXZlLHJlZmVyZW5jZWRcbiA0MTk6XHQgKiAqIGluYWN0aXZlLHJlZmVyZW5jZWRcdC1cdTAwM2VcdGFjdGl2ZSx1bnJlZmVyZW5jZWRcbiA0MjA6XHQgKiAqIGFjdGl2ZSx1bnJlZmVyZW5jZWRcdC1cdTAwM2VcdGFjdGl2ZSxyZWZlcmVuY2VkXG4gNDIxOlx0ICpcbiA0MjI6XHQgKiBXaGVuIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGlzIG5vdCB5ZXQgdmlzaWJsZSwgc28gc2FmZSBmb3Igbm9uLWF0b21pYyBvcHMsXG4gNDIzOlx0ICogX19mb2xpb19zZXRfcmVmZXJlbmNlZCgpIG1heSBiZSBzdWJzdGl0dXRlZCBmb3IgZm9saW9fbWFya19hY2Nlc3NlZCgpLlxuIDQyNDpcdCAqL1xuIDQyNTpcdHZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDQyNjpcdHtcbiA0Mjc6XHRcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuIDQyODpcdFx0XHRyZXR1cm47XG4gNDI5Olx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbiA0MzA6XHRcdFx0bHJ1X2dlbl9pbmNfcmVmcyhmb2xpbyk7XG4gNDMxOlx0XHRcdHJldHVybjtcbiA0MzI6XHRcdH1cbiA0MzM6XHRcbiA0MzQ6XHRcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkge1xuIDQzNTpcdFx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChmb2xpbyk7XG4gNDM2Olx0XHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKSB7XG4gNDM3Olx0XHRcdC8qXG4gNDM4Olx0XHRcdCAqIFVuZXZpY3RhYmxlIHBhZ2VzIGFyZSBvbiB0aGUgXCYjMzQ7TFJVX1VORVZJQ1RBQkxFXCYjMzQ7IGxpc3QuIEJ1dCxcbiA0Mzk6XHRcdFx0ICogdGhpcyBsaXN0IGlzIG5ldmVyIHJvdGF0ZWQgb3IgbWFpbnRhaW5lZCwgc28gbWFya2luZyBhblxuIDQ0MDpcdFx0XHQgKiB1bmV2aWN0YWJsZSBwYWdlIGFjY2Vzc2VkIGhhcyBubyBlZmZlY3QuXG4gNDQxOlx0XHRcdCAqL1xuIDQ0MjpcdFx0fSBlbHNlIGlmICghZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pKSB7XG4gNDQzOlx0XHRcdC8qXG4gNDQ0Olx0XHRcdCAqIElmIHRoZSBmb2xpbyBpcyBvbiB0aGUgTFJVLCBxdWV1ZSBpdCBmb3IgYWN0aXZhdGlvbiB2aWFcbiA0NDU6XHRcdFx0ICogY3B1X2ZiYXRjaGVzLmxydV9hY3RpdmF0ZS4gT3RoZXJ3aXNlLCBhc3N1bWUgdGhlIGZvbGlvIGlzIGluIGFcbiA0NDY6XHRcdFx0ICogZm9saW9fYmF0Y2gsIG1hcmsgaXQgYWN0aXZlIGFuZCBpdCYjMzk7bGwgYmUgbW92ZWQgdG8gdGhlIGFjdGl2ZVxuIDQ0NzpcdFx0XHQgKiBMUlUgb24gdGhlIG5leHQgZHJhaW4uXG4gNDQ4Olx0XHRcdCAqL1xuIDQ0OTpcdFx0XHRpZiAoZm9saW9fdGVzdF9scnUoZm9saW8pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQwMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhvdCBQYXRocyBmb3IgRnV6emluZyBQcmlvcml0aXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgY2hhbmdlIGFuZCB0cnlpbmcgdG8gcGlucG9pbnQgdGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb25zIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuIGBmb2xpb19tYXJrX2FjY2Vzc2VkYCBpcywgb2YgY291cnNlLCBhIGhpZ2gtZnJlcXVlbmN5IGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IG5vdCB0byBvdmVybG9vayBvdGhlcnMgdGhhdCBhcmUgYWxzbyByZWxldmFudC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgdGhlIGluc3RydWN0aW9uIHRvIGV4dHJhY3QgdGhlICYjMzQ7c3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scywmIzM0OyBzbyBsZXQmIzM5O3MgY2hlY2sgdGhhdC4gQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50cy4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgc2VlbXMgaW1wb3J0YW50IOKAkyBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgZm9yIHJtYXAgbG9vay1hcm91bmQsIGNhbGxlZCBmcm9tIGBtbS9ybWFwLmM6Zm9saW9fcmVmZXJlbmNlZF9vbmVgLiBUaGVuIHRoZXJlJiMzOTtzIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYW5vdGhlciBub24tc3RhdGljIGZ1bmN0aW9uIHVzZWQgZHVyaW5nIHBhZ2UgbWlncmF0aW9uIChgbW0vbWlncmF0ZS5jYCkuIEFuZCBmaW5hbGx5LCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGlzIGFsc28gbm9uLXN0YXRpYywgaW4gYG1tL21lbWNvbnRyb2wuY2AuCgpMZXQmIzM5O3MgZG8gYSBtb3JlIGNvbXByZWhlbnNpdmUgc2NhbiBvZiB0aGUgbW9kaWZpZWQgZmlsZXMg4oCTIGBtbS92bXNjYW4uY2AsIGBtbS9mb2xpby5jYCwgYW5kIGBtbS9tZW1jb250cm9sLmNgIOKAkyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGVzLiBPa2F5LCBoZXJlIGFyZSB0aGUgZnVuY3Rpb25zIGFmZmVjdGVkIGFuZCB0aGVpciB0eXBlczoKKiBJbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgOiBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgKHN0YXRpYyBpbmxpbmUpCiogSW4gYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgOiBBIGJ1bmNoIG9mIHN0YXRpYyBpbmxpbmVzOiBgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnVgLCBgZm9saW9faXNfZmlsZV9scnVgLCBgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19scnVfcmVmc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbHJ1X2dlbmAsIGBscnVfZ2VuX2FkZF9mb2xpb2AsIGBscnVfZ2VuX2RlbF9mb2xpb2AsIGBmb2xpb19taWdyYXRlX2xydV9yZWZzYC4KKiBJbiBgbW0vZm9saW8uY2A6IGBscnVfZ2VuX2luY19yZWZzYCAoc3RhdGljKSwgYGxydV9nZW5fY2xlYXJfcmVmc2AgKHN0YXRpYykKKiBJbiBgbW0vbWVtY29udHJvbC5jYDogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCAobm9uLXN0YXRpYykKKiBJbiBgbW0vbWlncmF0ZS5jYDogYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIChub24tc3RhdGljKQoqIEluIGBtbS92bXNjYW4uY2A6IGBscnVfZ2VuX3NldF9yZWZzYCAoc3RhdGljKSwgYHJlYWRfY3RybF9wb3NgIChzdGF0aWMpLCBgZm9saW9fdXBkYXRlX2dlbmAgKHN0YXRpYyksIGBmb2xpb19pbmNfZ2VuYCAoc3RhdGljKSwgYHVwZGF0ZV9iYXRjaF9zaXplYCAoc3RhdGljKSwgYHdhbGtfdXBkYXRlX2ZvbGlvYCAoc3RhdGljKSwgYHdhbGtfcHRlX3JhbmdlYCAoc3RhdGljKSwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAgKHN0YXRpYyksIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCAobm9uLXN0YXRpYyksIGBpc29sYXRlX2ZvbGlvYCAoc3RhdGljKSwgYGdldF90aWVyX2lkeGAgKHN0YXRpYyksIGBnZXRfdHlwZV90b19zY2FuYCAoc3RhdGljKSwgYGV2aWN0X2ZvbGlvc2AgKHN0YXRpYykKCkxldCYjMzk7cyBjb25maXJtIHRoYXQgdGhvc2UgdGhyZWUga2V5IGZ1bmN0aW9ucyBhcmUgaW5kZWVkIG5vbi1zdGF0aWM6IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpbiBgbW0vdm1zY2FuLmNgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaW4gYG1tL21pZ3JhdGUuY2AsIGFuZCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGluIGBtbS9tZW1jb250cm9sLmNgLiBZZXAsIHRoYXQmIzM5O3MgY29ycmVjdC4KCk9rYXksIGFyZSB0aGVyZSBvdGhlciBtZWFuaW5nZnVsIGNoYW5nZXMgdGhhdCBzaG91bGQgYWxzbyBiZSBmdXp6ZWQ/IEFmdGVyIHJldmlld2luZywgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgIGxvb2sgbGlrZSB0aGUgbWFpbiBub24tc3RhdGljIG9uZXMuIFRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSBtZWFuaW5nZnVsOyBpdCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggcmVmYWN0b3JzIG11bHRpLWdlbiBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZsYWdzIG1hbmlwdWxhdGlvbi4gSXQgYWxzbyBmaXhlcyB0aWVyIGNhbGN1bGF0aW9uLCB1cGRhdGVzIGZvbGlvIGdlbmVyYXRpb24gZHVyaW5nIE1NIHdhbGtpbmcsIGNoYW5nZXMgTFJVIHpvbmUgc2l6ZSBhY2NvdW50aW5nIHRvIGF0b21pYyBvcGVyYXRpb25zIGluIG1lbWNnLCBhbmQgZml4ZXMgZm9saW8gcmVmZXJlbmNlIG1pZ3JhdGlvbi4gVGhpcyB0b3VjaGVzIGNvcmUgcGFnZSByZWNsYW1hdGlvbiwgTFJVIG1hbmFnZW1lbnQsIHBhZ2UgbWlncmF0aW9uLCBhbmQgbWVtY2cgYWNjb3VudGluZyDigJMgYWxsIGZ1bmRhbWVudGFsIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGFuZCByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS9HQ0Uga2VybmVsIGV4ZWN1dGlvbi4gSXQgbW9kaWZpZXMgYWxsIG9mIHRoZSBtb3N0IHBlcmZvcm1hbmNlLXNlbnNpdGl2ZSBhcmVhcywgd2hpY2ggaXMgZ3JlYXQuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIEtjb25maWcgb3B0aW9ucyBmb3IgdGhpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRlc3RpbmcgdGhlIGNvbmZpZ3VyYXRpb25zIHByb3Blcmx5OgoxLiAgYExSVV9HRU5gOiBFbmFibGVzIE11bHRpLUdlbiBMUlUgY29kZS4KMi4gIAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSUdSQVRJT05cXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02NzM9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02ODMtXG5tbS9LY29uZmlnOjY4NDpjb25maWcgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4NS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgTWlncmF0aW9uIFN1cHBvcnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgTUlHUkFUSU9OYCBpbiB0aGlzIGtlcm5lbC4gTGV0JiMzOTtzIGdldCByaWdodCBkb3duIHRvIGl0LiBNeSBmaXJzdCBzdG9wIGlzIGdvaW5nIHRvIGJlIGBtbS9LY29uZmlnYCwgYW5kIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSA2ODAuIFRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQsIGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIHNvcnRzIG9mIGNvbmZpZ3VyYXRpb25zLiBIb3BlZnVsbHksIHRoZSBsb2dpYyByZWxhdGVkIHRvIGVuYWJsaW5nIG9yIHNlbGVjdGluZyBgTUlHUkFUSU9OYCBpcyBwcmV0dHkgY2xlYXJseSBsYWlkIG91dCB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIGRlcGVuZGVuY2llcyBvbiBhcmNoaXRlY3R1cmUgZmVhdHVyZXMsIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMsIG9yIG1heWJlIGV2ZW4gb3RoZXIgc3Vic3lzdGVtcy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRldmVsb3BlcnMgaGF2ZSBzZXQgaXQgdXAuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjcwOlx0XHQgIHRob3NlIHBhZ2VzIHRvIGFub3RoZXIgZW50aXR5LCBzdWNoIGFzIGEgaHlwZXJ2aXNvciwgc28gdGhhdCB0aGVcbiA2NzE6XHRcdCAgbWVtb3J5IGNhbiBiZSBmcmVlZCB3aXRoaW4gdGhlIGhvc3QgZm9yIG90aGVyIHVzZXMuXG4gNjcyOlx0XG4gNjczOlx0Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4gNjc0Olx0XHRib29sIFwmIzM0O05VTUEgcGFnZSBtaWdyYXRpb25cJiMzNDtcbiA2NzU6XHRcdGRlZmF1bHQgeVxuIDY3NjpcdFx0ZGVwZW5kcyBvbiBOVU1BIFx1MDAyNlx1MDAyNiBNTVVcbiA2Nzc6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA2Nzg6XHRcdGhlbHBcbiA2Nzk6XHRcdCAgU3VwcG9ydCB0aGUgbWlncmF0aW9uIG9mIHBhZ2VzIHRvIG90aGVyIE5VTUEgbm9kZXMsIGF2YWlsYWJsZSB0b1xuIDY4MDpcdFx0ICB1c2VyIHNwYWNlIHRocm91Z2ggaW50ZXJmYWNlcyBsaWtlIG1pZ3JhdGVfcGFnZXMoKSwgbW92ZV9wYWdlcygpLFxuIDY4MTpcdFx0ICBhbmQgbWJpbmQoKS4gU2VsZWN0aW5nIHRoaXMgb3B0aW9uIGFsc28gZW5hYmxlcyBzdXBwb3J0IGZvciBwYWdlXG4gNjgyOlx0XHQgIGRlbW90aW9uIGZvciBtZW1vcnkgdGllcmluZy5cbiA2ODM6XHRcbiA2ODQ6XHRjb25maWcgTUlHUkFUSU9OXG4gNjg1Olx0XHRib29sXG4gNjg2Olx0XHRkZXBlbmRzIG9uIE1NVVxuIDY4NzpcdFxuIDY4ODpcdGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXG4gNjg5Olx0XHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG4gNjkwOlx0XG4gNjkxOlx0Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxuIDY5MjpcdFx0Ym9vbFxuIDY5MzpcdFxuIDY5NDpcdGNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xuIDY5NTpcdFx0Ym9vbFxuIDY5NjpcdFxuIDY5NzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxuIDY5ODpcdFx0ZGVmX2Jvb2wgblxuIDY5OTpcdFx0aGVscFxuIDcwMDpcdFx0ICBBbGxvd3MgdGhlIHBhZ2VibG9ja19vcmRlciB2YWx1ZSB0byBiZSBkeW5hbWljIGluc3RlYWQgb2YganVzdCBzdGFuZGFyZFxuIDcwMTpcdFx0ICBIVUdFVExCX1BBR0VfT1JERVIgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgSHVnZVRMQiBwYWdlIHNpemVzIGF2YWlsYWJsZVxuIDcwMjpcdFx0ICBvbiBhIHBsYXRmb3JtLlxuIDcwMzpcdFxuIDcwNDpcdFx0ICBOb3RlIHRoYXQgdGhlIHBhZ2VibG9ja19vcmRlciBjYW5ub3QgZXhjZWVkIE1BWF9QQUdFX09SREVSIGFuZCB3aWxsIGJlXG4gNzA1Olx0XHQgIGNsYW1wZWQgZG93biB0byBNQVhfUEFHRV9PUkRFUi5cbiA3MDY6XHRcbiA3MDc6XHRjb25maWcgQ09OVElHX0FMTE9DXG4gNzA4Olx0XHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcdTAwMjZcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXG4gNzA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgUXVlcnk6IFRoZSAmIzM0O01JR1JBVElPTiYjMzQ7IFNlYXJjaCoqCgpBbHJpZ2h0LCBzbyB0aGUgdXNlciB0eXBlZCBpbiAmIzM0O01JR1JBVElPTi4mIzM0OyBMZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIHBvdGVudGlhbGx5IGJlaGluZCB0aGF0LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBhbHdheXM6IHdoYXQgYXJlIHRoZSBsaWtlbHkgY29udGV4dHMsIGFuZCB3aGF0IGluZm9ybWF0aW9uIGRvIHRoZXkgaG9wZSB0byBnbGVhbiBmcm9tIG1lPyAmIzM0O01JR1JBVElPTiYjMzQ7IGlzIGEgbWFzc2l2ZWx5IG92ZXJsb2FkZWQgdGVybS4gSXQgY291bGQgcmVmZXIgdG86CgoqICAgKipEYXRhIE1pZ3JhdGlvbioqOiBJcyB0aGlzIGFib3V0IG1vdmluZyBkYXRhIGJldHdlZW4gZGF0YWJhc2VzLCBwbGF0Zm9ybXMsIG9yIHN0b3JhZ2Ugc29sdXRpb25zPyBJZiBzbywgYW0gSSBnb2luZyB0byBuZWVkIHRvIHNwZWNpZnkgYSBzb3VyY2UgYW5kIHRhcmdldD8gV2hhdCBhYm91dCBkYXRhIHRyYW5zZm9ybWF0aW9uIGFuZCBtYXBwaW5nPyBBcmUgdGhleSBpbnRlcmVzdGVkIGluIGEgc3BlY2lmaWMgdG9vbCBvciBtZXRob2RvbG9neT8gVGhlIG51YW5jZXMgaGVyZSBhcmUgdmFzdCwgY292ZXJpbmcgZXZlcnl0aGluZyBmcm9tIEVUTCBwcm9jZXNzZXMgdG8gZGF0YWJhc2UgcmVwbGljYXRpb24gYW5kIGRpc2FzdGVyIHJlY292ZXJ5IHN0cmF0ZWdpZXMuCiogICAqKkluZnJhc3RydWN0dXJlIE1pZ3JhdGlvbioqOiBBcmUgd2UgdGFsa2luZyBhYm91dCBtb3ZpbmcgYXBwbGljYXRpb25zIG9yIGVudGlyZSBpbmZyYXN0cnVjdHVyZSAoc2VydmVycywgVk1zLCBjb250YWluZXJzKSB0byB0aGUgY2xvdWQsIGJldHdlZW4gY2xvdWQgcHJvdmlkZXJzLCBvciBmcm9tIG9uLXByZW1pc2UgdG8gYSBjbG91ZCBlbnZpcm9ubWVudD8gVGhpcyByYWlzZXMgcXVlc3Rpb25zIGFyb3VuZCBjb21wYXRpYmlsaXR5LCBzZWN1cml0eSwgZG93bnRpbWUsIGFuZCB0aGUgcmVxdWlyZWQgZXhwZXJ0aXNlIC0gaXMgaXQgYSAmIzM0O2xpZnQgYW5kIHNoaWZ0JiMzNDsgc2NlbmFyaW8sIG9yIGFyZSB0aGV5IHJlLWFyY2hpdGVjdGluZyBldmVyeXRoaW5nPwoqICAgKipDb2RlIE1pZ3JhdGlvbioqOiBUaGUgdGVybSAmIzM0O21pZ3JhdGlvbiYjMzQ7IGNhbiBhbHNvIGJlIHVzZWQsIHNwZWNpZmljYWxseSBpbiByZWZlcmVuY2UgdG8gY29kZS4gVGhpcyBjYW4gYmUgaW4gY29udGV4dCBvZiBwb3J0aW5nIGxlZ2FjeSBhcHBsaWNhdGlvbnMgdG8gYSBuZXdlciBjb2RlYmFzZSBvciBwbGF0Zm9ybS4gT3IsIHRoaXMgY291bGQgYmUgcmVsYXRlZCB0byBhIHNwZWNpZmljIGxpYnJhcnkgb3IgZnJhbWV3b3JrIHVwZ3JhZGUuCiogICAqKk90aGVyIENvbnRleHRzKio6IFRoZXJlIGFyZSBhbHNvIG90aGVyLCBtb3JlIGdlbmVyYWwgbWVhbmluZ3Mgb2YgbWlncmF0aW9uLCBkZXBlbmRpbmcgb24gdGhlIGZpZWxkLiBBbSBJIHN1cmUgSSBrbm93IHRoZSB1c2VycyYjMzk7IGNvbnRleHQsIGFuZCBjYW4gSSBtYWtlIGFuIGFzc3VtcHRpb24/CgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGxhcmdlciBjb250ZXh0LCBvciBhc2sgY2xhcmlmeWluZyBxdWVzdGlvbnMsIGJlZm9yZSBkaWdnaW5nIGludG8gYW55IHBhcnRpY3VsYXIgYXNwZWN0LiBUaGUgc2VhcmNoIHRlcm0gYWxvbmUgb2ZmZXJzIHZlcnkgbGltaXRlZCBpbmZvcm1hdGlvbiwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSB1c2VyJiMzOTtzIGltcGxpY2l0IGludGVudC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbW9yZSBpbmZvcm1hdGlvbiB0byBhc3Nlc3MgdGhlaXIgbmVlZHMsIGFuZCBkZXRlcm1pbmUgaWYgdGhleSByZXF1aXJlIGEgZ2VuZXJhbCBvdmVydmlldywgb3IgYSBkZWVwIGRpdmUgaW50byBzcGVjaWZpYyB0b29scywgdGVjaG5vbG9naWVzLCBhbmQgYmVzdCBwcmFjdGljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBNSUdSQVRJT05cXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01ODI9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcbm1tL0tjb25maWctNTgzLVx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbm1tL0tjb25maWc6NTg0Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy01ODUtXG4tLVxubW0vS2NvbmZpZz02NDI9Y29uZmlnIENPTVBBQ1RJT05cbi0tXG5tbS9LY29uZmlnLTY0NC1cdGRlZmF1bHQgeVxubW0vS2NvbmZpZzo2NDU6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY0Ni1cdGRlcGVuZHMgb24gTU1VXG4tLVxubW0vS2NvbmZpZz02NzM9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02NzYtXHRkZXBlbmRzIG9uIE5VTUEgXHUwMDI2XHUwMDI2IE1NVVxubW0vS2NvbmZpZzo2Nzc6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY3OC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTc2NT1jb25maWcgTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc2OS1cdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG5tbS9LY29uZmlnOjc3MDpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNzcxLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTA1Nj1jb25maWcgQ01BXG4tLVxubW0vS2NvbmZpZy0xMDU4LVx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWc6MTA1OTpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctMTA2MC1cdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IGFuZCBzcGVjaWZpY2FsbHksIGhvdyBgQ09NUEFDVElPTmAgYW5kIGBOVU1BX01JR1JBVElPTmAgaW50ZXJhY3QuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYm90aCBvZiB0aGVzZSB1bHRpbWF0ZWx5IHBvaW50IHRvIHVzaW5nIHRoZSBgTUlHUkFUSU9OYCBmdW5jdGlvbmFsaXR5LiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIGxpbmtlZCwgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIExldCYjMzk7cyBnbyBzdHJhaWdodCB0byBgbW0vTWFrZWZpbGVgLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgYG1pZ3JhdGUub2AsIGBtZW1jb250cm9sLm9gLCBhbmQgYHZtc2Nhbi5vYCBhcmUgY29tcGlsZWQuIFNlZWluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBsaW5raW5nIHN0ZXBzIHRoZXJlIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2Ygd2hlcmUgdGhlc2UgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgbW9kdWxlcyBmaXQgaW50byB0aGUgbGFyZ2VyIGtlcm5lbCBidWlsZC4gVGhpcyBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBkZXNpZ24gYW5kIHBvdGVudGlhbCBob3RzcG90cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KG1pZ3JhdGV8bWVtY29udHJvbHx2bXNjYW4pXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxuLS1cbm1tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxubW0vTWFrZWZpbGUtNTItXHRcdFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcbm1tL01ha2VmaWxlOjUzOlx0XHRcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG5tbS9NYWtlZmlsZS01NC1cdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG4tLVxubW0vTWFrZWZpbGU9OTc9b2JqLSQoQ09ORklHX01FTVRFU1QpXHRcdCYjNDM7PSBtZW10ZXN0Lm9cbm1tL01ha2VmaWxlOjk4Om9iai0kKENPTkZJR19NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlLm9cbm1tL01ha2VmaWxlLTk5LW9iai0kKENPTkZJR19OVU1BKSAmIzQzOz0gbWVtb3J5LXRpZXJzLm9cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDIwOAoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiA0NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS2VybmVsIFBhdGNoJiMzOTtzIFJlYWNoIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgdm1zY2FuLm9gIGFuZCBgZm9saW8ub2AgYXJlIGNvcmUsIHJlc2lkaW5nIGluIGBvYmoteWAuIFRoZSBNR0xSVSBsb2dpYyBpcyBnYXRlZCBieSBgTFJVX0dFTmAsIHdoaWNoIGltcGFjdHMgYHZtc2Nhbi5jYCwgYGZvbGlvLmNgLCBhbmQgYG1tX2lubGluZS5oYC4gYExSVV9HRU5fRU5BQkxFRGAgaXMgb3VyIGRlZmF1bHQgTUdMUlUgc3dpdGNoLiAgYE1FTUNHYCBpcyBjcml0aWNhbCwgY29tcGlsaW5nIGBtZW1jb250cm9sLm9gIGFuZCBlbmFibGluZyBtZW1jZyYjMzk7cyBMUlUgc2l6ZSB0cmFja2luZyB2aWEgYGxydV96b25lX3NpemVgLiAgV2UgYWxzbyBoYXZlIGBNSUdSQVRJT05gIG9yIGl0cyBhbHRlcm5hdGl2ZXMgKGBOVU1BX01JR1JBVElPTmAsIGBDT01QQUNUSU9OYCkgd2hpY2ggYnJpbmcgaW4gYG1pZ3JhdGUub2AuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBwcmVyZXF1aXNpdGVzLgoKMS4gIGBXb3J0aEZ1enppbmdgOiBDaGVja3Mgb3V0LCBpdCYjMzk7cyB0cnVlLCB3aGljaCBpcyBnb29kLgoyLiAgYEZvY3VzU3ltYm9sc2A6ICBFeGNlbGxlbnQsIHdlJiMzOTtyZSB0YXJnZXRpbmc6CiAgICAqICAgYGxydV9nZW5fbG9va19hcm91bmRgCiAgICAqICAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYAogICAgKiAgIGBmb2xpb19taWdyYXRlX2ZsYWdzYAozLiAgYEVuYWJsZUNvbmZpZ3NgOiBXZSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlOgogICAgKiAgIGBMUlVfR0VOYAogICAgKiAgIGBMUlVfR0VOX0VOQUJMRURgCiAgICAqICAgYE1FTUNHYAogICAgKiAgIGBNSUdSQVRJT05gIChvciBgQ09NUEFDVElPTmAgb3IgYE5VTUFfTUlHUkFUSU9OYCkKClNpbmNlIGBNSUdSQVRJT05gIGlzIGEgc2ltcGxlIGJvb2xlYW4gYW5kIGRvZXNuJiMzOTt0IGhhdmUgYSBwcm9tcHQsIHNldHRpbmcgZWl0aGVyIGBDT01QQUNUSU9OYCBvciBgTlVNQV9NSUdSQVRJT05gIHdpbGwgd29yaywgb3Igc2V0dGluZyBgTUlHUkFUSU9OYC4gTGV0JiMzOTtzIGxpc3QgYExSVV9HRU5gLCBgTFJVX0dFTl9FTkFCTEVEYCwgYE1FTUNHYCwgYW5kIHRoZW4gYE1JR1JBVElPTmAsIGBDT01QQUNUSU9OYCwgYW5kIGBOVU1BX01JR1JBVElPTmAuCgpSZWFzb25pbmcgaXMgc291bmQuIFRoaXMgcGF0Y2ggZGl2ZXMgaW50byB0aGUgaGVhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIE1HTFJVIHJlZmVyZW5jZS9nZW5lcmF0aW9uIGZsYWcgaGFuZGxpbmcsIG1ha2luZyBgbHJ1X3pvbmVfc2l6ZWAgYXRvbWljLCBmaXhpbmcgbWlncmF0aW9uIGJ1Z3MsIGFuZCB0d2Vha2luZyB0aWVyIGNhbGN1bGF0aW9ucy9tbS13YWxrIHVwZGF0ZXMgaW4gYHZtc2NhbmAuIFRoaXMgaGl0cyBjcml0aWNhbCBNTSBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlIHBhdGNoIGlzIGZ1bGx5IHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O05VTUFfTUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYWNyb3NzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHRyYWNraW5nLCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcgKGNvbnZlcnRlZCB0byBhdG9taWNfbG9uZ190KSwgcGFnZSBtaWdyYXRpb24gcmVmZXJlbmNlIGNvcHlpbmcgKGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMpLCBhbmQgcGFnZSByZWNsYW1hdGlvbiBzY2FubmluZyBhbmQgdGllciBjYWxjdWxhdGlvbnMgaW4gdm1zY2FuLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBjb3JlIGtlcm5lbCBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIG1pZ3JhdGlvbiBwYXRocyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OywKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7LAogICAgJiMzNDtOVU1BX01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFjcm9zcyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSB0cmFja2luZywgbWVtY2cgTFJVIHpvbmUgc2l6ZSBhY2NvdW50aW5nIChjb252ZXJ0ZWQgdG8gYXRvbWljX2xvbmdfdCksIHBhZ2UgbWlncmF0aW9uIHJlZmVyZW5jZSBjb3B5aW5nIChmb2xpb19taWdyYXRlX2xydV9yZWZzKSwgYW5kIHBhZ2UgcmVjbGFtYXRpb24gc2Nhbm5pbmcgYW5kIHRpZXIgY2FsY3VsYXRpb25zIGluIHZtc2Nhbi4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgY29yZSBrZXJuZWwgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBtaWdyYXRpb24gcGF0aHMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSByZWNsYWltIGxvZ2ljIChNR0xSVSByZWZlcmVuY2UvZ2VuZXJhdGlvbiBmbGFnIGhlbHBlcnMsIG11bHRpLWdlbiBMUlUgdGllciBjYWxjdWxhdGlvbnMsIG1lbWNnIHBlci1ub2RlIExSVSB6b25lIHNpemUgYXRvbWljIGNvdW50ZXJzLCBhbmQgZm9saW8gbWlncmF0aW9uIHJlZmVyZW5jZSBzdGF0ZSBoYW5kbGluZykuXG5cbjEuIE5vIGtlcm5lbC10by11c2VyIHNwYWNlIGRhdGEgY29weWluZyBwYXRocyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChubyBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBpb2N0bCBzdHJ1Y3RzLCBldGMuKS5cbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIGZsYWcgdmFsdWVzIChlLmcuIGBmaWxlYCBhbmQgYG9sZF9nZW5gIGluIGBmb2xpb191cGRhdGVfZ2VuYC9gd2Fsa191cGRhdGVfZm9saW9gLCBgc3RydWN0IGN0cmxfcG9zYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGd1YXJkZWQgYnkgY29udHJvbCBmbG93IGNvbmRpdGlvbnMuXG4zLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrL3BhZ2UgYnVmZmVycyBhcmUgaW50cm9kdWNlZC5cbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gY29uY3VycmVudCBmbGFnIHVwZGF0ZXMsIGF0b21pY3MsIG9yIHBhZ2Ugc3RhdGUgdHJhbnNpdGlvbnMgZmFsbCB1bmRlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5LCBjb25jdXJyZW5jeSwgb3Igc2FuaXR5IGNoZWNrcyBoYW5kbGVkIGJ5IEtBU0FOL0xPQ0tERVAvVk1fV0FSTl9PTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5M2QzNjk5MjM4MDFmNzg3YjNjYWVhYjk5ZjdiMWQ2NDQ5MTc1Yjg1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMzAgMTg6NTE6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDdkMWMwY2UxODlhODguLjFiNDlkOGI1OTFkYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHsKIAkvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi8KIAlzdHJ1Y3QgbHJ1dmVjCQlscnV2ZWM7CiAJQ0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTsKLQl1bnNpZ25lZCBsb25nCQlscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTsKJiM0MzsJYXRvbWljX2xvbmdfdAkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtOTAyLDEwICYjNDM7OTAyLDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IGF0b21pY19sb25nX3JlYWQoJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi43ZTQ4N2MyM2FmZjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTEwLDYgJiM0MzsxMCwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJmYXVsdGZkX2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sZWFmb3BzLmgmZ3Q7CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qKgogICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LgpAQCAtMjcsNyAmIzQzOzMyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7CiYjNDM7CXJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpOwogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLApAQCAtMTQyLDEwICYjNDM7MTQ3LDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KQogCXJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MzsvKioKJiM0MzsgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzCiYjNDM7ICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pCiYjNDM7ewomIzQzOwlCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLICZhbXA7IExSVV9SRUZTX01BU0spOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TIHx8IGdlbiAmbHQ7IDApOwomIzQzOwkvKiBTdG9yZSBnZW4gb2Zmc2V0IGJ5IDEsIHplcm8gbWVhbnMgdGhlIGZvbGlvIGlzIG9mZi1saXN0LiAqLwomIzQzOwkqZmxhZ3MgJmFtcDs9IH5MUlVfR0VOX01BU0s7CiYjNDM7CSpmbGFncyB8PSAoZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3MKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJucwomIzQzOyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwomIzQzOwkvKiBFeGNsdWRlIHRoZSBsZWdhbCAtMSBmcm9tIHRoZSB1bnNpZ25lZCBNQVhfTlJfR0VOUyBjb21wYXJpc29uICovCiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgJmFtcDsmYW1wOyBnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwomIzQzOwlyZXR1cm4gZ2VuOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuCiYjNDM7ICoKJiM0MzsgKiBGb3IgTUdMUlUsIFBHX3JlZmVyZW5jZWQgaG9sZHMgdGhlIGZpcnN0IHJlZiwgYW5kIHRoZSBleHRyYSBiaXRzIGhvbGQgdGhlCiYjNDM7ICogcmVtYWluaW5nIHJlZnMuIEZvciBjbGFzc2ljYWwgTFJVIHRoZSBleHRyYSBiaXRzIGFyZSBub3QgdXNlZCwgc28gaXQgY2FuCiYjNDM7ICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxCiYjNDM7ICogbWVhbnMgUEdfcmVmZXJlbmNlZCBpcyBzZXQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSB6ZXJvLCBhbmQgcmVmcyA9PSAwIG1lYW5zCiYjNDM7ICogUEdfcmVmZXJlbmNlZCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIGFsbCB1bnNldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKHJlZnMgJmd0OyBMUlVfUkVGU19NQVgpOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJKmZsYWdzICZhbXA7PSB+TFJVX1JFRlNfRkxBR1M7CiYjNDM7CWlmICghcmVmcykKJiM0MzsJCXJldHVybjsKJiM0MzsJKmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpICZsdDsmbHQ7IExSVV9SRUZTX1BHT0ZGKSk7CiYjNDM7fQogCiYjNDM7LyoqCiYjNDM7ICogbHJ1X2dldF9yZWZzX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHNldCBieSBscnVfc2V0X3JlZnNfZmxhZ3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiAJaWYgKCEoZmxhZ3MgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKSkKIAkJcmV0dXJuIDA7CiAJLyoKQEAgLTE1NSwxMSAmIzQzOzIxNiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfZ2V0X3JlZnNfZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzKTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzO30KIAotCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKQpAQCAtMjcwLDcgJiM0MzszNDQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKIAlmbGFncyA9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi8KLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiYjNDM7CXNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTsKIAkvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi8KQEAgLTI5NSw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAogCS8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi8KIAlmbGFncyA9ICFyZWNsYWltaW5nICZhbXA7JmFtcDsgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwOwotCWZsYWdzID0gc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKJiM0MzsJZmxhZ3MgPSBzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLLCBmbGFncyk7CiAJZ2VuID0gKChmbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKIAogCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7CkBAIC0zMDQsMTEgJiM0MzszNzgsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiYjNDM7LyoqCiYjNDM7ICogZm9saW9fbWlncmF0ZV9scnVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpbwomIzQzOyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpbwomIzQzOyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW8KJiM0MzsgKgomIzQzOyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlUKJiM0MzsgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGUKJiM0MzsgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQl1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLSZndDtmbGFncy5mKSAmYW1wOyBMUlVfUkVGU19NQVNLOwotCi0Jc2V0X21hc2tfYml0cygmYW1wO25ldy0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLICZhbXA7IEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CWZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpOwogfQogI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovCiAKQEAgLTMzNyw5ICYjNDM7NDE5LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiB7Ci0KJiM0MzsJaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKQomIzQzOwkJZm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTsKIH0KICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA5NGY5YzNmZjU0MTYwLi45YjI3Y2Y1M2JkYmM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTQ5MiwxMSAmIzQzOzQ5MiwxNCBAQCBlbnVtIGxydXZlY19mbGFncyB7CiAgKiBmb2xpby0mZ3Q7ZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLgogICovCiAjZGVmaW5lIE1BWF9OUl9USUVSUwkJNFUKJiM0MzsjZGVmaW5lIExSVV9USUVSX01JTgkJMFUKJiM0MzsjZGVmaW5lIExSVV9USUVSX01BWAkJKE1BWF9OUl9USUVSUyAtIDEpCiAKICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19ICiAKICNkZWZpbmUgTFJVX0dFTl9NQVNLCQkoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkYpCiAjZGVmaW5lIExSVV9SRUZTX01BU0sJCSgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpICZsdDsmbHQ7IExSVV9SRUZTX1BHT0ZGKQomIzQzOyNkZWZpbmUgTFJVX1JFRlNfTUFYCQlCSVQoTFJVX1JFRlNfV0lEVEgpCiAKIC8qCiAgKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycywKZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jCmluZGV4IGMwMmRjZWE5YzAzYzIuLmZiODc0ZmU0OTJiMmIgMTAwNjQ0Ci0tLSBhL21tL2ZvbGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZm9saW8uYwpAQCAtMzUzLDI2ICYjNDM7MzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IHJlZnM7CiAKIAlpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpCiAJCXJldHVybjsKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwotCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CWlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm47CiAJfQogCiAJZG8gewotCQlpZiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CQlyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQlpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHsKIAkJCWlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkKIAkJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiAJCQlyZXR1cm47CiAJCX0KLQotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiB9CiAKIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQpAQCAtMzg0LDcgJiM0MzszODYsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZ2VuICZsdDsgMCkKIAkJcmV0dXJuIHRydWU7CiAKLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJZm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJc2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktJmd0O2xydWdlbi5taW5fc2VxW3R5cGVdKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxMjcxZDM5MGI2MTdlLi5mOTE1NDBmZWFmNzM1IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0xNTI5LDI4ICYjNDM7MTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsCiAJCQkJaW50IHppZCwgbG9uZyBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7Ci0JdW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7Ci0JbG9uZyBzaXplOwogCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuOwogCiAJbXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKLQlscnVfc2l6ZSA9ICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdOwotCi0JaWYgKG5yX3BhZ2VzICZsdDsgMCkKLQkJKmxydV9zaXplICYjNDM7PSBucl9wYWdlczsKLQotCXNpemUgPSAqbHJ1X3NpemU7Ci0JaWYgKFdBUk5fT05DRShzaXplICZsdDsgMCwKLQkJJiMzNDslcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxuJiMzNDssCi0JCV9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7Ci0JCVZNX0JVR19PTigxKTsKLQkJKmxydV9zaXplID0gMDsKLQl9Ci0KLQlpZiAobnJfcGFnZXMgJmd0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwlhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtNzc2LDggJiM0Mzs3NzYsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpbnQgY3B1cGlkOwogCi0JaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCWZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTsKJiM0MzsJLyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqLwomIzQzOwlmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiYjNDM7CiAJaWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKQogCQlmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTsKIAlpZiAoZm9saW9fdGVzdF9jbGVhcl9hY3RpdmUoZm9saW8pKSB7CkBAIC04MDcsNyAmIzQzOzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKQogCQlmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7CiAKLQlmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTsKIAkvKgogCSAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlcgogCSAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBmMTE0OTFlZTllZDVjLi44N2U2NjdjNDEwZWQ0IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtODQzLDE5ICYjNDM7ODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkgewogCQkvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi8KIAkJaWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKJiM0MzsJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CiAKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqLwotCWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpOwotCWVsc2UKJiM0MzsJaWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSAmZ3Q7IDEpIHsKJiM0MzsJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CX0gZWxzZSB7CiAJCWZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pOwomIzQzOwl9CiAJcmV0dXJuIHRydWU7CiB9CiAjZWxzZQpAQCAtMzE5NSw4ICYjNDM7MzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7CiAJaW50IGdhaW47CiB9OwogCi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKLQkJCSAgc3RydWN0IGN0cmxfcG9zICpwb3MpCiYjNDM7c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sCiYjNDM7CQkJICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKIAlwb3MtJmd0O2dhaW4gPSBnYWluOwogCXBvcy0mZ3Q7cmVmYXVsdGVkID0gcG9zLSZndDt0b3RhbCA9IDA7CiAKLQlmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpICZsdDs9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gdGllcl9taW47IGkgJmx0Oz0gdGllcl9tYXg7IGkmIzQzOyYjNDM7KSB7CiAJCXBvcy0mZ3Q7cmVmYXVsdGVkICYjNDM7PSBscnVnZW4tJmd0O2F2Z19yZWZhdWx0ZWRbdHlwZV1baV0gJiM0MzsKIAkJCQkgIGF0b21pY19sb25nX3JlYWQoJmFtcDtscnVnZW4tJmd0O3JlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7CiAJCXBvcy0mZ3Q7dG90YWwgJiM0Mzs9IGxydWdlbi0mZ3Q7YXZnX3RvdGFsW3R5cGVdW2ldICYjNDM7CkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovCi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKJiM0MztzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSwKJiM0MzsJCQkgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgb2xkX2dlbjsKIAogCS8qCiAJICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWQKQEAgLTMyNzksMjAgJiM0MzszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hCiAJICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlkbyB7CiYjNDM7CQlvbGRfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsKIAkJLyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqLwotCQlpZiAoIShvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSkKLQkJCXJldHVybiAtMTsKJiM0MzsJCWlmIChvbGRfZ2VuICZsdDsgMCkKJiM0MzsJCQlicmVhazsKIAotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJmFtcDsgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7Ci0JCW5ld19mbGFncyB8PSAoKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X2dlbl9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwkJbmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCi0JcmV0dXJuICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KCZhbXA7b2xkX2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG9sZF9nZW47CiB9CiAKIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovCkBAIC0zMzAxLDIxICYjNDM7MzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwotCi0JVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKIAogCWRvIHsKLQkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkJbmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CiAJCS8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqLwogCQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKQogCQkJcmV0dXJuIG5ld19nZW47CiAKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKIAkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7Ci0KLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X2dlbl9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwogCkBAIC0zMzIzLDkgJiM0MzszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbywKLQkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbikKJiM0MzsJCQkgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKQogewotCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCWludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7CiAJaW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCkBAIC0zNTEyLDIyICYjNDM7MzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKQogfQogCiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpCiYjNDM7CQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpCiB7Ci0JaW50IG9sZF9nZW47CiYjNDM7CWludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlOwogCiAJaWYgKCFmb2xpbykKIAkJcmV0dXJuOwogCiYjNDM7CW5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxKSk7CiYjNDM7CiAJaWYgKGRpcnR5ICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpCiAJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwogCiAJaWYgKHdhbGspIHsKLQkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7dm1hLSZndDtmbGFncyk7CiYjNDM7CQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDtmaWxlLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQotCQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwomIzQzOwkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCBmaWxlKTsKIAl9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sICZhbXA7dm1hLSZndDtmbGFncykpIHsKIAkJb2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQpAQCAtMzU0OSw4ICYjNDM7MzU1Nyw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCXVuc2lnbmVkIGludCBucjsKIAlwbWRfdCBwbWR2YWw7CiAKQEAgLTM2MDEsNyAmIzQzOzM2MDcsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNjE0LDcgJiM0MzszNjIwLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCXdhbGstJmd0O21tX3N0YXRzW01NX0xFQUZfWU9VTkddICYjNDM7PSBucjsKIAl9CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCWxhc3QgPSBOVUxMOwogCiAJaWYgKGkgJmx0OyBQVFJTX1BFUl9QVEUgJmFtcDsmYW1wOyBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgJmFtcDtzdGFydCwgJmFtcDtlbmQpKQpAQCAtMzYzNyw4ICYjNDM7MzY0Myw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtJmd0O3ByaXZhdGU7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstJmd0O2xydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLSZndDtscnV2ZWMpOwotCURFRklORV9NQVhfU0VRKHdhbGstJmd0O2xydXZlYyk7Ci0JaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAKIAlWTV9XQVJOX09OX09OQ0UocHVkX2xlYWYoKnB1ZCkpOwogCkBAIC0zNjkyLDcgJiM0MzszNjk2LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJCWdvdG8gbmV4dDsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzcwNiw3ICYjNDM7MzcxMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCWkgPSBpICZndDsgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgJiM0MzsgMTsKIAl9IHdoaWxlIChpICZsdDs9IE1JTl9MUlVfQkFUQ0gpOwogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCXNwaW5fdW5sb2NrKHB0bCk7CkBAIC00MjcwLDggJiM0Mzs0Mjc0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7CiAJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwogCXN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTsKLQl1bnNpZ25lZCBsb25nIG1heF9zZXE7Ci0JaW50IGdlbjsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy0mZ3Q7cHRsKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7CkBAIC00MzA4LDggJiM0Mzs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCiAJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTsKIAlscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOwotCW1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktJmd0O2xydWdlbi5tYXhfc2VxKTsKLQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCW1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7CiAKIAlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwpAQCAtNDM0MSw3ICYjNDM7NDM0MSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC00MzUzLDEzICYjNDM7NDM1MywxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCXlvdW5nICYjNDM7PSBucjsKIAl9CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAKIAkvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi8KIAlpZiAobW1fc3RhdGUgJmFtcDsmYW1wOyBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSkKLQkJdXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy0mZ3Q7cG1kKTsKJiM0MzsJCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxKSwKJiM0MzsJCQkJICAgIHB2bXctJmd0O3BtZCk7CiAKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAKQEAgLTQ3MTYsNyAmIzQzOzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYQogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAogCXN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTsKQEAgLTQ4MDksOSAmIzQzOzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQogCSAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZQogCSAqIGFzIG1hbnkgcmVmYXVsdHMgYXMgdGhlIGZpcnN0IHRpZXIuCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsICZhbXA7c3ApOwotCWZvciAodGllciA9IDE7IHRpZXIgJmx0OyBNQVhfTlJfVElFUlM7IHRpZXImIzQzOyYjNDM7KSB7Ci0JCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUlOLCAyLCAmYW1wO3NwKTsKJiM0MzsJZm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICYjNDM7IDE7IHRpZXIgJmx0Oz0gTFJVX1RJRVJfTUFYOyB0aWVyJiM0MzsmIzQzOykgewomIzQzOwkJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsICZhbXA7cHYpOwogCQlpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpKQogCQkJYnJlYWs7CiAJfQpAQCAtNDgzMiw4ICYjNDM7NDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIAkgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lCiAJICogd2hpY2ggdHlwZSB0byBzY2FuLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgJmFtcDtzcCk7Ci0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCwKJiM0MzsJCSAgICAgIHN3YXBwaW5lc3MsICZhbXA7c3ApOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCwKJiM0MzsJCSAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiAKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CkBAIC00OTMyLDggJiM0Mzs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQl9CiAKIAkJLyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovCi0JCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTsKJiM0MzsJCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkgewomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CQkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CQl9CiAJfQogCiAJbW92ZV9mb2xpb3NfdG9fbHJ1KCZhbXA7bGlzdCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY1MwoJCQkJCQkJb3V0cHV0OiAyNjAKCQkJCQkJCXRob3VnaHRzOiAyMDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIEp1c3RpZmljYXRpb24gZm9yIERlZGljYXRlZCBGdXp6aW5nIFNlc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHF1ZXN0aW9uIGF0IGhhbmQgaXMgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGRlZGljYXRlZCBLZXJuZWxNZW1vcnlTYW5pdGl6ZXIgKEtNU0FOKSBmdXp6aW5nIHNlc3Npb24sIGluIGFkZGl0aW9uIHRvIG91ciBzdGFuZGFyZCBLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIgKEtBU0FOKSBydW5zLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgd2UgbmVlZCB0byBiZSBleHRyZW1lbHkganVkaWNpb3VzIGFib3V0IHNwaW5uaW5nIHVwIEtNU0FOOyBpdCYjMzk7cyByZXNvdXJjZS1pbnRlbnNpdmUsIHNvIHdlICpvbmx5KiB1c2UgaXQgd2hlbiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgY2hlY2tzIGFyZSBpbnN1ZmZpY2llbnQuCgpGaXJzdCwgSSBsb29rZWQgYXQgdGhlIG92ZXJhbGwgY2hhbmdlcy4gVGhpcyBwYXRjaCBzZXJpZXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzOiBNR0xSVSAoTXVsdGktR2VuZXJhdGlvbmFsIExSVSksIGZvbGlvIGZsYWdzLCBtZW1jZyB6b25lIExSVSBzaXplcywgYW5kIGZvbGlvIG1pZ3JhdGlvbi4gTXkgaW5pdGlhbCBzY2FuIHdhcyB0byBzZWUgaWYgYW55dGhpbmcgd2FzIHVzZXItZmFjaW5nLCBidXQgaXQmIzM5O3MgYWxsIGludGVybmFsIGtlcm5lbCBzdHVmZiwgcHJpbWFyaWx5IGFyb3VuZCBwYWdlIGNhY2hlIG1hbmFnZW1lbnQgYW5kIExSVSBsaXN0IG1hbmlwdWxhdGlvbi4gVGhhdCYjMzk7cyBnb29kOyBmZXdlciB2ZWN0b3JzIGZvciBpbmZvcm1hdGlvbiBsZWFrcy4KCk5leHQsIEkgbWV0aG9kaWNhbGx5IHdlbnQgdGhyb3VnaCB0aGUgY29kZSwgZnVuY3Rpb24gYnkgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyBsb29raW5nIGZvciB0aGUgKnNwZWNpZmljKiBLTVNBTiB0cmlnZ2VyOiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBkaXN0aW5jdGlvbjogS0FTQU4gY292ZXJzIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBsb2NraW5nIGJ1Z3MsIGFuZCB0aGUgbGlrZS4gS01TQU7igJlzIHRlcnJpdG9yeSBpcyB0aGUgbmFzdGllciBzdHVmZiAtIHVuaW5pdGlhbGl6ZWQgZGF0YS4KCkkgZXhhbWluZWQgdGhlIGBmb2xpb191cGRhdGVfZ2VuYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiB0aGUgYGZpbGVgIHZhcmlhYmxlLiBUaGVyZSYjMzk7cyBjb25kaXRpb25hbCBsb2dpYyB0aGVyZSwgYnV0IEkgdHJhY2VkIGFsbCBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMuICBJIGNvbmZpcm1lZCB0aGF0IHRoZSBgZmlsZWAgdmFyaWFibGUgKmlzKiBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgZXZlbiBpbiB0aGUgY2FzZXMgd2hlcmUgdGhlIGZ1bmN0aW9uIHJldHVybnMgZWFybHkuIEkgc2ltaWxhcmx5IHZlcmlmaWVkIHRoZSBgcmVhZF9jdHJsX3Bvc2Agc3RydWN0LCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAsIGZvbGlvIG1pZ3JhdGlvbiBhbmQgdGhlIGZsYWdzIGZ1bmN0aW9ucywgZW5zdXJpbmcgdGhhdCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0cnVjdCBmaWVsZHMgd2VyZSBlaXRoZXIgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgb3IgYXNzaWduZWQgdmFsdWVzIHByaW9yIHRvIHRoZWlyIGZpcnN0IHJlYWQuIFRoZXJlIGFyZSBhdG9taWMgb3BlcmF0aW9ucyBvbiBjb3VudGVycyBhbmQgZmxhZyBiaXQgbWFuaXB1bGF0aW9uLCBidXQgdGhlIGxvZ2ljIGlzIHNvdW5kIGFuZCB0aGUgZGF0YSBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgYWN0ZWQgdXBvbi4gVGhlcmUgd2VyZSBubyBuZXcgYWxsb2NhdGlvbnMgaW50cm9kdWNlZC4KClRoZXJlZm9yZSwgSSYjMzk7dmUgY29uY2x1ZGVkIHRoZXJlIGlzIG5vIGluc3RhbmNlIHdoZXJlIGEgcmVhZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleGlzdHMuIFRoZXJlIGFyZSBubyBleHBvc2VkIGNoYW5nZXMgdG8gdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMgKHNvLCBubyBpbmZvLWxlYWtzKSBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgcmVhZCwgYWNjb3JkaW5nIHRvIG15IGFzc2Vzc21lbnRzIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdXBkYXRlZC4KCk15IGZpbmFsIGFuYWx5c2lzIGlzIGJhc2VkIG9uIHRoaXMgbG9naWM6IFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgd2lsbCBkZXRlY3QgYW55IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKG91dC1vZi1ib3VuZHMgd3JpdGVzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLikuICpDcnVjaWFsbHkqLCB0aGUgY3VycmVudCBwYXRjaCBzZXJpZXMgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2Ugc2hvdWxkICpvbmx5KiB0cmlnZ2VyIEtNU0FOIGlmIHRoZSBjb2RlIGNoYW5nZXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgKm9ubHkqIGJlIGRldGVjdGVkIGJ5IEtNU0FOLiBTaW5jZSB0aGVzZSBjaGFuZ2VzIGRvICpub3QqLCBJIGFtIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcyBhbmQsIHRoZXJlZm9yZSwgSSBhbSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhpcyBwYXRjaCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHJlY2xhaW0gbG9naWMgKE1HTFJVIHJlZmVyZW5jZS9nZW5lcmF0aW9uIGZsYWcgaGVscGVycywgbXVsdGktZ2VuIExSVSB0aWVyIGNhbGN1bGF0aW9ucywgbWVtY2cgcGVyLW5vZGUgTFJVIHpvbmUgc2l6ZSBhdG9taWMgY291bnRlcnMsIGFuZCBmb2xpbyBtaWdyYXRpb24gcmVmZXJlbmNlIHN0YXRlIGhhbmRsaW5nKS5cblxuMS4gTm8ga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBjb3B5aW5nIHBhdGhzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIGlvY3RsIHN0cnVjdHMsIGV0Yy4pLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgZmxhZyB2YWx1ZXMgKGUuZy4gYGZpbGVgIGFuZCBgb2xkX2dlbmAgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gL2B3YWxrX3VwZGF0ZV9mb2xpb2AsIGBzdHJ1Y3QgY3RybF9wb3NgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgZ3VhcmRlZCBieSBjb250cm9sIGZsb3cgY29uZGl0aW9ucy5cbjMuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2svcGFnZSBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkLlxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBjb25jdXJyZW50IGZsYWcgdXBkYXRlcywgYXRvbWljcywgb3IgcGFnZSBzdGF0ZSB0cmFuc2l0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBzYWZldHksIGNvbmN1cnJlbmN5LCBvciBzYW5pdHkgY2hlY2tzIGhhbmRsZWQgYnkgS0FTQU4vTE9DS0RFUC9WTV9XQVJOX09OLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgcmVjbGFpbSBsb2dpYyAoTUdMUlUgcmVmZXJlbmNlL2dlbmVyYXRpb24gZmxhZyBoZWxwZXJzLCBtdWx0aS1nZW4gTFJVIHRpZXIgY2FsY3VsYXRpb25zLCBtZW1jZyBwZXItbm9kZSBMUlUgem9uZSBzaXplIGF0b21pYyBjb3VudGVycywgYW5kIGZvbGlvIG1pZ3JhdGlvbiByZWZlcmVuY2Ugc3RhdGUgaGFuZGxpbmcpLlxuXG4xLiBObyBrZXJuZWwtdG8tdXNlciBzcGFjZSBkYXRhIGNvcHlpbmcgcGF0aHMgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCAobm8gY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBtZXNzYWdlcywgaW9jdGwgc3RydWN0cywgZXRjLikuXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBmbGFnIHZhbHVlcyAoZS5nLiBgZmlsZWAgYW5kIGBvbGRfZ2VuYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAvYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHN0cnVjdCBjdHJsX3Bvc2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBvciBndWFyZGVkIGJ5IGNvbnRyb2wgZmxvdyBjb25kaXRpb25zLlxuMy4gTm8gbWVtb3J5IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjay9wYWdlIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQuXG40LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIGNvbmN1cnJlbnQgZmxhZyB1cGRhdGVzLCBhdG9taWNzLCBvciBwYWdlIHN0YXRlIHRyYW5zaXRpb25zIGZhbGwgdW5kZXIgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSwgY29uY3VycmVuY3ksIG9yIHNhbml0eSBjaGVja3MgaGFuZGxlZCBieSBLQVNBTi9MT0NLREVQL1ZNX1dBUk5fT04uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MTYuMzE3MjA0NThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMwNTU1NDQzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCIsXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJOVU1BX01JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIixcbiAgICBcIm1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgcmVjbGFpbSBsb2dpYyAoTUdMUlUgcmVmZXJlbmNlL2dlbmVyYXRpb24gZmxhZyBoZWxwZXJzLCBtdWx0aS1nZW4gTFJVIHRpZXIgY2FsY3VsYXRpb25zLCBtZW1jZyBwZXItbm9kZSBMUlUgem9uZSBzaXplIGF0b21pYyBjb3VudGVycywgYW5kIGZvbGlvIG1pZ3JhdGlvbiByZWZlcmVuY2Ugc3RhdGUgaGFuZGxpbmcpLlxcblxcbjEuIE5vIGtlcm5lbC10by11c2VyIHNwYWNlIGRhdGEgY29weWluZyBwYXRocyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChubyBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBpb2N0bCBzdHJ1Y3RzLCBldGMuKS5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBmbGFnIHZhbHVlcyAoZS5nLiBgZmlsZWAgYW5kIGBvbGRfZ2VuYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAvYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHN0cnVjdCBjdHJsX3Bvc2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBvciBndWFyZGVkIGJ5IGNvbnRyb2wgZmxvdyBjb25kaXRpb25zLlxcbjMuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2svcGFnZSBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gY29uY3VycmVudCBmbGFnIHVwZGF0ZXMsIGF0b21pY3MsIG9yIHBhZ2Ugc3RhdGUgdHJhbnNpdGlvbnMgZmFsbCB1bmRlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5LCBjb25jdXJyZW5jeSwgb3Igc2FuaXR5IGNoZWNrcyBoYW5kbGVkIGJ5IEtBU0FOL0xPQ0tERVAvVk1fV0FSTl9PTi5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhY3Jvc3MgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgdHJhY2tpbmcsIG1lbWNnIExSVSB6b25lIHNpemUgYWNjb3VudGluZyAoY29udmVydGVkIHRvIGF0b21pY19sb25nX3QpLCBwYWdlIG1pZ3JhdGlvbiByZWZlcmVuY2UgY29weWluZyAoZm9saW9fbWlncmF0ZV9scnVfcmVmcyksIGFuZCBwYWdlIHJlY2xhbWF0aW9uIHNjYW5uaW5nIGFuZCB0aWVyIGNhbGN1bGF0aW9ucyBpbiB2bXNjYW4uIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IGNvcmUga2VybmVsIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgbWlncmF0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUxOjE2LjMxNzIwODU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxODIyNTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTNkMzY5OTIzODAxZjc4N2IzY2FlYWI5OWY3YjFkNjQ0OTE3NWI4NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAzMCAxODo1MToxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggN2QxYzBjZTE4OWE4OC4uMWI0OWQ4YjU5MWRhNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuQEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XFxuIFxcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xcbiBcXHRzdHJ1Y3QgbHJ1dmVjXFx0XFx0bHJ1dmVjO1xcbiBcXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xcbi1cXHR1bnNpZ25lZCBsb25nXFx0XFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XFxuK1xcdGF0b21pY19sb25nX3RcXHRcXHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyXFx0aXRlcjtcXG4gXFxuIFxcdC8qXFxuQEAgLTkwMiwxMCArOTAyLDE1IEBAIHN0YXRpYyBpbmxpbmVcXG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcXG4ge1xcbitcXHRsb25nIHZhbDtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbiBcXG4gXFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4tXFx0cmV0dXJuIFJFQURfT05DRShtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XFxuK1xcdHZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm16LVxcdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSh2YWwgXFx1MDAzYyAwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gdmFsO1xcbiB9XFxuIFxcbiB2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5pbmRleCA2MjFjODY1M2Q4ZjdlLi43ZTQ4N2MyM2FmZjcwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuQEAgLTEwLDYgKzEwLDExIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sZWFmb3BzLmhcXHUwMDNlXFxuIFxcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcXG4re1xcbitcXHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGZvbGlvX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVP1xcbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxcbkBAIC0yNyw3ICszMiw3IEBAXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuLVxcdHJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTtcXG4rXFx0cmV0dXJuIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuQEAgLTE0MiwxMCArMTQ3LDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxcbiBcXHRyZXR1cm4gd29ya2luZ3NldCA/IE1BWF9OUl9USUVSUyAtIDEgOiBvcmRlcl9iYXNlXzIocmVmcyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuKy8qKlxcbisgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxcbit7XFxuK1xcdEJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgXFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyB8fCBnZW4gXFx1MDAzYyAwKTtcXG4rXFx0LyogU3RvcmUgZ2VuIG9mZnNldCBieSAxLCB6ZXJvIG1lYW5zIHRoZSBmb2xpbyBpcyBvZmYtbGlzdC4gKi9cXG4rXFx0KmZsYWdzIFxcdTAwMjY9IH5MUlVfR0VOX01BU0s7XFxuK1xcdCpmbGFncyB8PSAoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbit9XFxuK1xcbisvKipcXG4rICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXFxuKyAqXFxuKyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xcbisgKiAtMSBpZiB0aGUgZmxhZ3MgaW5kaWNhdGUgdGhlIGZvbGlvIGlzIG9mZiB0aGUgbGlzdCAoZS5nLiwgaXNvbGF0ZWQpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpbnQgZ2VuID0gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbitcXG4rXFx0LyogRXhjbHVkZSB0aGUgbGVnYWwgLTEgZnJvbSB0aGUgdW5zaWduZWQgTUFYX05SX0dFTlMgY29tcGFyaXNvbiAqL1xcbitcXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFxcdTAwMjZcXHUwMDI2IGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyk7XFxuK1xcdHJldHVybiBnZW47XFxuK31cXG4rXFxuKy8qKlxcbisgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXFxuKyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS5cXG4rICpcXG4rICogRm9yIE1HTFJVLCBQR19yZWZlcmVuY2VkIGhvbGRzIHRoZSBmaXJzdCByZWYsIGFuZCB0aGUgZXh0cmEgYml0cyBob2xkIHRoZVxcbisgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW5cXG4rICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxXFxuKyAqIG1lYW5zIFBHX3JlZmVyZW5jZWQgaXMgc2V0IGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgemVybywgYW5kIHJlZnMgPT0gMCBtZWFuc1xcbisgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdFZNX1dBUk5fT05fT05DRShyZWZzIFxcdTAwM2UgTFJVX1JFRlNfTUFYKTtcXG4rXFx0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcXHUwMDNlXFx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxKTtcXG4rXFxuK1xcdCpmbGFncyBcXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XFxuK1xcdGlmICghcmVmcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcXG4rfVxcbiBcXG4rLyoqXFxuKyAqIGxydV9nZXRfcmVmc19mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXFxuKyAqXFxuKyAqIFJlYWRzIHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCBzZXQgYnkgbHJ1X3NldF9yZWZzX2ZsYWdzKCkuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbiBcXHRpZiAoIShmbGFncyBcXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHQvKlxcbkBAIC0xNTUsMTEgKzIxNiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gKChmbGFncyBcXHUwMDI2IExSVV9SRUZTX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncztcXG4rXFx0XFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xcbitcXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuICgoZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxcbkBAIC0yNzAsNyArMzQ0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xcbiBcXHRmbGFncyA9IChnZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkY7XFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cXG4tXFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XFxuK1xcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xcbiBcXG4gXFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcXG4gXFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXFxuQEAgLTI5NSw3ICszNjksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXG4gXFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xcbiBcXHRmbGFncyA9ICFyZWNsYWltaW5nIFxcdTAwMjZcXHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcXG4tXFx0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XFxuK1xcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xcbiBcXHRnZW4gPSAoKGZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpO1xcbkBAIC0zMDQsMTEgKzM3OCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuKy8qKlxcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXFxuKyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xcbisgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXFxuKyAqXFxuKyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcXG4rICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXFxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cXHUwMDNlZmxhZ3MuZikgXFx1MDAyNiBMUlVfUkVGU19NQVNLO1xcbi1cXG4tXFx0c2V0X21hc2tfYml0cyhcXHUwMDI2bmV3LVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcXG4rXFx0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcXG4gfVxcbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG4gXFxuQEAgLTMzNyw5ICs0MTksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbiB7XFxuLVxcbitcXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXFxuK1xcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtNDkyLDExICs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xcbiAgKiBmb2xpby1cXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxcbiAgKi9cXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcXHRcXHQ0VVxcbisjZGVmaW5lIExSVV9USUVSX01JTlxcdFxcdDBVXFxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXFx0XFx0KE1BWF9OUl9USUVSUyAtIDEpXFxuIFxcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxcbiBcXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcXHRcXHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpXFxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1xcdFxcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxcbisjZGVmaW5lIExSVV9SRUZTX01BWFxcdFxcdEJJVChMUlVfUkVGU19XSURUSClcXG4gXFxuIC8qXFxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmZiODc0ZmU0OTJiMmIgMTAwNjQ0XFxuLS0tIGEvbW0vZm9saW8uY1xcbisrKyBiL21tL2ZvbGlvLmNcXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4rXFx0aW50IHJlZnM7XFxuIFxcbiBcXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRpZiAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXHRcXHRyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7XFxuK1xcdFxcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xcbiBcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpXFxuIFxcdFxcdFxcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuLVxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgKyBCSVQoTFJVX1JFRlNfUEdPRkYpO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIHJlZnMgKyAxKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbkBAIC0zODQsNyArMzg2LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGlmIChnZW4gXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUyB8IEJJVChQR193b3JraW5nc2V0KSwgMCk7XFxuK1xcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuK1xcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS1cXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAxMjcxZDM5MGI2MTdlLi5mOTE1NDBmZWFmNzM1IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0xNTI5LDI4ICsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcXG4gXFx0XFx0XFx0XFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XFxuLVxcdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xcbi1cXHRsb25nIHNpemU7XFxuIFxcbiBcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbi1cXHRscnVfc2l6ZSA9IFxcdTAwMjZtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XFxuLVxcbi1cXHRpZiAobnJfcGFnZXMgXFx1MDAzYyAwKVxcbi1cXHRcXHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XFxuLVxcbi1cXHRzaXplID0gKmxydV9zaXplO1xcbi1cXHRpZiAoV0FSTl9PTkNFKHNpemUgXFx1MDAzYyAwLFxcbi1cXHRcXHRcXFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXFxcblxcXCIsXFxuLVxcdFxcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XFxuLVxcdFxcdFZNX0JVR19PTigxKTtcXG4tXFx0XFx0KmxydV9zaXplID0gMDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2UgMClcXG4tXFx0XFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xcbitcXHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFxcdTAwMjZtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0pO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXFxuaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDRcXG4tLS0gYS9tbS9taWdyYXRlLmNcXG4rKysgYi9tbS9taWdyYXRlLmNcXG5AQCAtNzc2LDggKzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGludCBjcHVwaWQ7XFxuIFxcbi1cXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcXG4tXFx0XFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xcbitcXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXFxuK1xcdGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcXG4rXFxuIFxcdGlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG4gXFx0XFx0Zm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7XFxuIFxcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcXG5AQCAtODA3LDcgKzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcXG4gXFx0XFx0Zm9saW9fc2V0X2lkbGUobmV3Zm9saW8pO1xcbiBcXG4tXFx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XFxuIFxcdC8qXFxuIFxcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxcbiBcXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGYxMTQ5MWVlOWVkNWMuLjg3ZTY2N2M0MTBlZDQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC04NDMsMTkgKzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbiBcXHRcXHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cXG4gXFx0XFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xcbi1cXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuK1xcdFxcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xcbi1cXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFxcdTAwM2UgMSlcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xcbi1cXHRlbHNlXFxuK1xcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gI2Vsc2VcXG5AQCAtMzE5NSw4ICszMTk4LDggQEAgc3RydWN0IGN0cmxfcG9zIHtcXG4gXFx0aW50IGdhaW47XFxuIH07XFxuIFxcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcXG4rc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sXFxuK1xcdFxcdFxcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuQEAgLTMyMDUsNyArMzIwOCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbiBcXHRwb3MtXFx1MDAzZWdhaW4gPSBnYWluO1xcbiBcXHRwb3MtXFx1MDAzZXJlZmF1bHRlZCA9IHBvcy1cXHUwMDNldG90YWwgPSAwO1xcbiBcXG4tXFx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcXHUwMDNjPSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkrKykge1xcbitcXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcXHUwMDNjPSB0aWVyX21heDsgaSsrKSB7XFxuIFxcdFxcdHBvcy1cXHUwMDNlcmVmYXVsdGVkICs9IGxydWdlbi1cXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXFxuIFxcdFxcdFxcdFxcdCAgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bHJ1Z2VuLVxcdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xcbiBcXHRcXHRwb3MtXFx1MDAzZXRvdGFsICs9IGxydWdlbi1cXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcXG5AQCAtMzI2NiwxMSArMzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXFxuLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuLVxcbi1cXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFxcdTAwM2U9IE1BWF9OUl9HRU5TKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4rXFx0aW50IG9sZF9nZW47XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxcbkBAIC0zMjc5LDIwICszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbitcXHRcXHRvbGRfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXG4gXFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbi1cXHRcXHRpZiAoIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG4tXFx0XFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9zZXRfZ2VuX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xcbitcXHRcXHRscnVfc2V0X3JlZnNfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgMCk7XFxuK1xcdFxcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiBcXG4tXFx0cmV0dXJuICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuK1xcdCppc19maWxlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXFx1MDAyNm9sZF9mbGFncyk7XFxuK1xcdHJldHVybiBvbGRfZ2VuO1xcbiB9XFxuIFxcbiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xcbkBAIC0zMzAxLDIxICszMzA5LDIwIEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbiBcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG4tXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuLVxcbi1cXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIFxcbiBcXHRkbyB7XFxuLVxcdFxcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbitcXHRcXHRuZXdfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcXG4rXFxuIFxcdFxcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xcbiBcXHRcXHRpZiAobmV3X2dlbiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcXG4gXFx0XFx0XFx0cmV0dXJuIG5ld19nZW47XFxuIFxcbitcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuIFxcdFxcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XFxuLVxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG4tXFx0XFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X3NldF9nZW5fZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XFxuK1xcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbiBcXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0XFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxcbitcXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxcbiB7XFxuLVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbiBcXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xcbiBcXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcbkBAIC0zNTEyLDIyICszNTE4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4rXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxcbiB7XFxuLVxcdGludCBvbGRfZ2VuO1xcbitcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTtcXG4gXFxuIFxcdGlmICghZm9saW8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxKSk7XFxuK1xcbiBcXHRpZiAoZGlydHkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcXG4gXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuIFxcbiBcXHRpZiAod2Fsaykge1xcbi1cXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNmZpbGUsIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXFxuLVxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4rXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xcbiBcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbkBAIC0zNTQ5LDggKzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnI7XFxuIFxcdHBtZF90IHBtZHZhbDtcXG4gXFxuQEAgLTM2MDEsNyArMzYwNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHR3YWxrLVxcdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFx0bGFzdCA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoaSBcXHUwMDNjIFBUUlNfUEVSX1BURSBcXHUwMDI2XFx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKSlcXG5AQCAtMzYzNyw4ICszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcXG4gXFxuQEAgLTM2OTIsNyArMzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM3MDYsNyArMzcxMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdGkgPSBpIFxcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xcbiBcXHR9IHdoaWxlIChpIFxcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHRzcGluX3VubG9jayhwdGwpO1xcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuLVxcdGludCBnZW47XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXFx1MDAzZXB0bCk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcXG5AQCAtNDMwOCw4ICs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXG4gXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4tXFx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xcbi1cXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTQzNTMsMTMgKzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHR5b3VuZyArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXG4gXFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXFxuIFxcdGlmIChtbV9zdGF0ZSBcXHUwMDI2XFx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcXG4tXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4rXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxcbitcXHRcXHRcXHRcXHQgICAgcHZtdy1cXHUwMDNlcG1kKTtcXG4gXFxuIFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4gXFxuQEAgLTQ3MTYsNyArNDcxNyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXFxuIFxcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuIFxcbiBcXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbiBcXHQgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2VcXG4gXFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cXG4gXFx0ICovXFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCBcXHUwMDI2c3ApO1xcbi1cXHRmb3IgKHRpZXIgPSAxOyB0aWVyIFxcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcXG4tXFx0XFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFxcdTAwMjZwdik7XFxuK1xcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXFx1MDAyNnNwKTtcXG4rXFx0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xcbitcXHRcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXFx1MDAyNnB2KTtcXG4gXFx0XFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdikpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTQ4MzIsOCArNDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxcbiBcXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXFxuIFxcdCAqL1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbitcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcXG4rXFx0XFx0ICAgICAgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG4rXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXFxuK1xcdFxcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXFx1MDAyNnB2KTtcXG4gXFxuIFxcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdik7XFxuIH1cXG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbi1cXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXFxuLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xcbitcXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFxcdTAwMjZsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MTcuOTM5NzE3MTg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzk0NzgwMTczNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCIsXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJOVU1BX01JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIixcbiAgICBcIm1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhY3Jvc3MgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgdHJhY2tpbmcsIG1lbWNnIExSVSB6b25lIHNpemUgYWNjb3VudGluZyAoY29udmVydGVkIHRvIGF0b21pY19sb25nX3QpLCBwYWdlIG1pZ3JhdGlvbiByZWZlcmVuY2UgY29weWluZyAoZm9saW9fbWlncmF0ZV9scnVfcmVmcyksIGFuZCBwYWdlIHJlY2xhbWF0aW9uIHNjYW5uaW5nIGFuZCB0aWVyIGNhbGN1bGF0aW9ucyBpbiB2bXNjYW4uIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IGNvcmUga2VybmVsIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgbWlncmF0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkzZDM2OTkyMzgwMWY3ODdiM2NhZWFiOTlmN2IxZDY0NDkxNzViODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAzMCAxODo1MToxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDdkMWMwY2UxODlhODguLjFiNDlkOGI1OTFkYTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbiBcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XG4tXHR1bnNpZ25lZCBsb25nXHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuK1x0YXRvbWljX2xvbmdfdFx0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlclx0aXRlcjtcbiBcbiBcdC8qXG5AQCAtOTAyLDEwICs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuK1x0bG9uZyB2YWw7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbitcdHZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjdlNDg3YzIzYWZmNzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMTAsNiArMTAsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWFmb3BzLmhcdTAwM2VcbiBcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbit7XG4rXHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbit9XG4rXG4gLyoqXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC5cbkBAIC0yNyw3ICszMiw3IEBAXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4rXHRyZXR1cm4gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbkBAIC0xNDIsMTAgKzE0Nyw2NiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcbiBcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pXG4re1xuK1x0QlVJTERfQlVHX09OKExSVV9HRU5fTUFTSyBcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XG4rXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMgfHwgZ2VuIFx1MDAzYyAwKTtcbitcdC8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xuK1x0KmZsYWdzIHw9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuK31cbitcbisvKipcbisgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqXG4rICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zXG4rICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdGludCBnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXG4rXHQvKiBFeGNsdWRlIHRoZSBsZWdhbCAtMSBmcm9tIHRoZSB1bnNpZ25lZCBNQVhfTlJfR0VOUyBjb21wYXJpc29uICovXG4rXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFx1MDAyNlx1MDAyNiBnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4rXHRyZXR1cm4gZ2VuO1xuK31cbitcbisvKipcbisgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXG4rICpcbisgKiBGb3IgTUdMUlUsIFBHX3JlZmVyZW5jZWQgaG9sZHMgdGhlIGZpcnN0IHJlZiwgYW5kIHRoZSBleHRyYSBiaXRzIGhvbGQgdGhlXG4rICogcmVtYWluaW5nIHJlZnMuIEZvciBjbGFzc2ljYWwgTFJVIHRoZSBleHRyYSBiaXRzIGFyZSBub3QgdXNlZCwgc28gaXQgY2FuXG4rICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxXG4rICogbWVhbnMgUEdfcmVmZXJlbmNlZCBpcyBzZXQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSB6ZXJvLCBhbmQgcmVmcyA9PSAwIG1lYW5zXG4rICogUEdfcmVmZXJlbmNlZCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIGFsbCB1bnNldC5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKHJlZnMgXHUwMDNlIExSVV9SRUZTX01BWCk7XG4rXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxKTtcbitcbitcdCpmbGFncyBcdTAwMjY9IH5MUlVfUkVGU19GTEFHUztcbitcdGlmICghcmVmcylcbitcdFx0cmV0dXJuO1xuK1x0KmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRikpO1xuK31cbiBcbisvKipcbisgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4rICpcbisgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qXG5AQCAtMTU1LDExICsyMTYsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGxydV9nZXRfcmVmc19mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1xuK1x0ZG8ge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbit9XG4gXG4tXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X2dldF9nZW5fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbilcbkBAIC0yNzAsNyArMzQ0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdGZsYWdzID0gKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4rXHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7XG4gXHQvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbkBAIC0yOTUsNyArMzY5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbiBcdGZsYWdzID0gIXJlY2xhaW1pbmcgXHUwMDI2XHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcbi1cdGZsYWdzID0gc2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbitcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuIFx0Z2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTtcbkBAIC0zMDQsMTEgKzM3OCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuKy8qKlxuKyAqIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW9cbisgKiBAbmV3OiB0aGUgZGVzdGluYXRpb24gZm9saW9cbisgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXG4rICpcbisgKiBUcmFuc2ZlciB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIEBuZXcgZHVyaW5nIG1pZ3JhdGlvbjogdGhlIE1HTFJVXG4rICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXG4rICogYWN0aXZlL2luYWN0aXZlIExSVS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cdTAwM2VmbGFncy5mKSBcdTAwMjYgTFJVX1JFRlNfTUFTSztcbi1cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2bmV3LVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcbiB9XG4gI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG4gXG5AQCAtMzM3LDkgKzQxOSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVxuK1x0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKVxuK1x0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggOTRmOWMzZmY1NDE2MC4uOWIyN2NmNTNiZGJjNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC00OTIsMTEgKzQ5MiwxNCBAQCBlbnVtIGxydXZlY19mbGFncyB7XG4gICogZm9saW8tXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxuICAqL1xuICNkZWZpbmUgTUFYX05SX1RJRVJTXHRcdDRVXG4rI2RlZmluZSBMUlVfVElFUl9NSU5cdFx0MFVcbisjZGVmaW5lIExSVV9USUVSX01BWFx0XHQoTUFYX05SX1RJRVJTIC0gMSlcbiBcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxuIFxuICNkZWZpbmUgTFJVX0dFTl9NQVNLXHRcdCgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpXG4gI2RlZmluZSBMUlVfUkVGU19NQVNLXHRcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRilcbisjZGVmaW5lIExSVV9SRUZTX01BWFx0XHRCSVQoTFJVX1JFRlNfV0lEVEgpXG4gXG4gLypcbiAgKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xuaW5kZXggYzAyZGNlYTljMDNjMi4uZmI4NzRmZTQ5MmIyYiAxMDA2NDRcbi0tLSBhL21tL2ZvbGlvLmNcbisrKyBiL21tL2ZvbGlvLmNcbkBAIC0zNTMsMjYgKzM1MywyOCBAQCBzdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbitcdGludCByZWZzO1xuIFxuIFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbi1cdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkge1xuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkge1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcdFx0cmVmcyA9IGxydV9nZXRfcmVmc19mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcbiBcdFx0XHRpZiAoIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpXG4gXHRcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyArIEJJVChMUlVfUkVGU19QR09GRik7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyArIDEpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5AQCAtMzg0LDcgKzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGdlbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTtcbitcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNlcSA9IFJFQURfT05DRShmb2xpb19scnV2ZWMoZm9saW8pLVx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLmY5MTU0MGZlYWY3MzUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTE1MjksMjggKzE1MjksMTIgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRcdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcbi1cdGxvbmcgc2l6ZTtcbiBcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRscnVfc2l6ZSA9IFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4tXG4tXHRzaXplID0gKmxydV9zaXplO1xuLVx0aWYgKFdBUk5fT05DRShzaXplIFx1MDAzYyAwLFxuLVx0XHRcIiVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxuXCIsXG4tXHRcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XG4tXHRcdFZNX0JVR19PTigxKTtcbi1cdFx0KmxydV9zaXplID0gMDtcbi1cdH1cbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMClcbi1cdFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xuK1x0YXRvbWljX2xvbmdfYWRkKG5yX3BhZ2VzLCBcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuKysrIGIvbW0vbWlncmF0ZS5jXG5AQCAtNzc2LDggKzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuK1x0LyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqL1xuK1x0Zm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuK1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyArODA4LDYgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcbiBcdFx0Zm9saW9fc2V0X2lkbGUobmV3Zm9saW8pO1xuIFxuLVx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4gXHQvKlxuIFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXG4gXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmMTE0OTFlZTllZDVjLi44N2U2NjdjNDEwZWQ0IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtODQzLDE5ICs4NDMsMjIgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xuIFx0XHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cbiBcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuLVx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4rXHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHQvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi9cbi1cdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4tXHRlbHNlXG4rXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKSB7XG4rXHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdH0gZWxzZSB7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuK1x0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG5AQCAtMzE5NSw4ICszMTk4LDggQEAgc3RydWN0IGN0cmxfcG9zIHtcbiBcdGludCBnYWluO1xuIH07XG4gXG4tc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4tXHRcdFx0ICBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbitzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbitcdFx0XHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5AQCAtMzIwNSw3ICszMjA4LDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4gXHRwb3MtXHUwMDNlZ2FpbiA9IGdhaW47XG4gXHRwb3MtXHUwMDNlcmVmYXVsdGVkID0gcG9zLVx1MDAzZXRvdGFsID0gMDtcbiBcbi1cdGZvciAoaSA9IHRpZXIgJSBNQVhfTlJfVElFUlM7IGkgXHUwMDNjPSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkrKykge1xuK1x0Zm9yIChpID0gdGllcl9taW47IGkgXHUwMDNjPSB0aWVyX21heDsgaSsrKSB7XG4gXHRcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgKz0gbHJ1Z2VuLVx1MDAzZWF2Z19yZWZhdWx0ZWRbdHlwZV1baV0gK1xuIFx0XHRcdFx0ICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xuIFx0XHRwb3MtXHUwMDNldG90YWwgKz0gbHJ1Z2VuLVx1MDAzZWF2Z190b3RhbFt0eXBlXVtpXSArXG5AQCAtMzI2NiwxMSArMzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4rc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKmlzX2ZpbGUsXG4rXHRcdFx0ICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1x0aW50IG9sZF9nZW47XG4gXG4gXHQvKlxuIFx0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcbkBAIC0zMjc5LDIwICszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXG4gXHQgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiBcdGRvIHtcbitcdFx0b2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbiBcbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3NldF9nZW5fZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHQqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KFx1MDAyNm9sZF9mbGFncyk7XG4rXHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAxLDIxICszMzA5LDIwIEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0XHRuZXdfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcbitcbiBcdFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXG4gXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKVxuIFx0XHRcdHJldHVybiBuZXdfZ2VuO1xuIFxuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4gXHRcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3NldF9nZW5fZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcbkBAIC0zMzIzLDkgKzMzMzAsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbilcbitcdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcbiBcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbkBAIC0zNTEyLDIyICszNTE4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcbitcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxuIHtcbi1cdGludCBvbGRfZ2VuO1xuK1x0aW50IG5ld19nZW4sIG9sZF9nZW4sIGZpbGU7XG4gXG4gXHRpZiAoIWZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRuZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxKSk7XG4rXG4gXHRpZiAoZGlydHkgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcbiBcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4gXG4gXHRpZiAod2Fsaykge1xuLVx0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbitcdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNmZpbGUsIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuLVx0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbitcdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgZmlsZSk7XG4gXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFx1MDAyNnZtYS1cdTAwM2VmbGFncykpIHtcbiBcdFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbkBAIC0zNTQ5LDggKzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdHVuc2lnbmVkIGludCBucjtcbiBcdHBtZF90IHBtZHZhbDtcbiBcbkBAIC0zNjAxLDcgKzM2MDcsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzYxNCw3ICszNjIwLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHdhbGstXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcdGxhc3QgPSBOVUxMO1xuIFxuIFx0aWYgKGkgXHUwMDNjIFBUUlNfUEVSX1BURSBcdTAwMjZcdTAwMjYgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpKVxuQEAgLTM2MzcsOCArMzY0Myw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UocHVkX2xlYWYoKnB1ZCkpO1xuIFxuQEAgLTM2OTIsNyArMzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdFx0Z290byBuZXh0O1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM3MDYsNyArMzcxMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdGkgPSBpIFx1MDAzZSBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSArIDE7XG4gXHR9IHdoaWxlIChpIFx1MDAzYz0gTUlOX0xSVV9CQVRDSCk7XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHRzcGluX3VubG9jayhwdGwpO1xuQEAgLTQyNzAsOCArNDI3NCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XG4tXHRpbnQgZ2VuO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LVx1MDAzZXB0bCk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG5AQCAtNDMwOCw4ICs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFxuIFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4tXHRtYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKTtcbi1cdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbkBAIC00MzQxLDcgKzQzNDEsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTQzNTMsMTMgKzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHR5b3VuZyArPSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXG4gXHQvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi9cbiBcdGlmIChtbV9zdGF0ZSBcdTAwMjZcdTAwMjYgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpXG4tXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctXHUwMDNlcG1kKTtcbitcdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSksXG4rXHRcdFx0XHQgICAgcHZtdy1cdTAwM2VwbWQpO1xuIFxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFxuQEAgLTQ3MTYsNyArNDcxNyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcbiBcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xuQEAgLTQ4MDksOSArNDgxMCw5IEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG4gXHQgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2VcbiBcdCAqIGFzIG1hbnkgcmVmYXVsdHMgYXMgdGhlIGZpcnN0IHRpZXIuXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCBcdTAwMjZzcCk7XG4tXHRmb3IgKHRpZXIgPSAxOyB0aWVyIFx1MDAzYyBNQVhfTlJfVElFUlM7IHRpZXIrKykge1xuLVx0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgXHUwMDI2cHYpO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUlOLCAyLCBcdTAwMjZzcCk7XG4rXHRmb3IgKHRpZXIgPSBMUlVfVElFUl9NSU4gKyAxOyB0aWVyIFx1MDAzYz0gTFJVX1RJRVJfTUFYOyB0aWVyKyspIHtcbitcdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbiBcdFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTQ4MzIsOCArNDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiBcdCAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmVcbiBcdCAqIHdoaWNoIHR5cGUgdG8gc2Nhbi5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4rXHRcdCAgICAgIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbiBcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbkBAIC00OTMyLDggKzQ5MzUsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdH1cbiBcbiBcdFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbi1cdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxuLVx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTtcbitcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmxpc3QpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MTcuOTM5NzE4NzA0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc4OTQ1NzA0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFRoZSB0b3VjaGVkIGZpbGVzIGltbWVkaWF0ZWx5IHNpZ25hbCB0aGF0IHRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBsaWtlbHkgdG91Y2hpbmcgTXVsdGktR2VuIExSVSAoTUdMUlUsIG9yIGBDT05GSUdfTFJVX0dFTmAgZm9yIHVzKSwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nLiBJIHNlZSBjaGFuZ2VzIGluIGBtZW1jb250cm9sLmhgIGFuZCBgbWVtY29udHJvbC5jYCwgc28gSSBleHBlY3QgbWVtY2cgTFJVIHpvbmUgc2l6ZSBhY2NvdW50aW5nIGlzIGJlaW5nIG1vZGlmaWVkLiBUaGUgc3dpdGNoIGZyb20gYGxydV96b25lX3NpemVgIHRvIGBhdG9taWNfbG9uZ190YCBjb25maXJtcyB0aGF0IHN1c3BpY2lvbi5cblxuQmV5b25kIHRoYXQsIHRoZSBmaWxlIGxpc3Qgc3VnZ2VzdHMgcmVmYWN0b3Jpbmcgb2YgZm9saW8gZmxhZ3MgcmVsYXRlZCB0byBMUlUgcmVmZXJlbmNlcyBhbmQgZ2VuZXJhdGlvbnMsIHdoaWNoIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgTUdMUlUgd29ya3MuIE1pZ3JhdGlvbiBvZiBMUlUgcmVmZXJlbmNlcyBpcyBwcmVzZW50LCB3aGljaCBpcyBhIGtleSBwcm9jZXNzIHdoZW4gdGhlIExSVSBuZWVkcyB0byBjaGFuZ2UsIGFuZCBvZiBjb3Vyc2UsIHZtc2NhbiBsb2dpYyBpcyBhbHNvIGFmZmVjdGVkLiBBbGwgZXNzZW50aWFsIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHNldHRpbmdzLiBJJ2xsIHByb2JhYmx5IGRvIGEgcXVpY2sgZ2l0IGdyZXAgZm9yIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBNRU1DR2AgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcmVxdWlyZW1lbnRzIGFuZCB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgYmVpbmcgZW5hYmxlZCBhbmQvb3IgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4gVGhpcyBpcyBnb2luZyB0byBiZSBteSBrZXkgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MjQuNzI5MTc4OTA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjU2MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDA1LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTItXFxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTQtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTgtXFxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDIwLVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyNy1cXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MjQuNzc5NDQxMjM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc1NDM0MTI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEtjb25maWcgZm9yIExSVSBhbmQgTWVtY2cgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYExSVV9HRU5gIGFuZCBgTUVNQ0dgIGFyZSBpbnRlcmFjdGluZyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGRlZmluaXRpb25zIGluIGBtbS9LY29uZmlnYCBhcmUgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGRlZmluZWQgYW5kIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZmVhdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBMUlVfR0VOYCBpcyBkZXBlbmRlbnQgb24gYE1FTUNHYCwgb3IgaWYgdGhleSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBvciBpZiB0aGVyZSdzIG1vcmUgY29tcGxleCBsb2dpYyBhdCBwbGF5LiBJJ2xsIGZvY3VzIG9uIHdoYXQncyBkZWZpbmVkIGFuZCBob3cgdGhlIG9wdGlvbnMgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBjcnVjaWFsIHRvIGdldCBhbnkgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MToyNy41MzM3ODQ2MzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0XFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXFxuMTQwMTpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTQwMjpcXHRcXG4xNDAzOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQwNDpcXHRjb25maWcgTFJVX0dFTlxcbjE0MDU6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDA2OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwNzpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwODpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDA5OlxcdFxcdGhlbHBcXG4xNDEwOlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQxMTpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDEyOlxcdFxcbjE0MTM6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MTQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQxNTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDE2OlxcdFxcdGhlbHBcXG4xNDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTg6XFx0XFxuMTQxOTpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0MjA6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbjE0MjE6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQyMjpcXHRcXHRoZWxwXFxuMTQyMzpcXHRcXHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xcbjE0MjQ6XFx0XFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxcbjE0MjU6XFx0XFxuMTQyNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxcbjE0Mjc6XFx0XFxuMTQyODpcXHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4xNDI5OlxcdFxcdGRlZl9ib29sIHlcXG4xNDMwOlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTiBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcXG4xNDMxOlxcdCMgfVxcbjE0MzI6XFx0XFxuMTQzMzpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcXG4xNDM0OlxcdCAgICAgICBkZWZfYm9vbCBuXFxuMTQzNTpcXHRcXG4xNDM2OlxcdGNvbmZpZyBQRVJfVk1BX0xPQ0tcXG4xNDM3OlxcdFxcdGRlZl9ib29sIHlcXG4xNDM4OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXFx1MDAyNlxcdTAwMjYgTU1VIFxcdTAwMjZcXHUwMDI2IFNNUFxcbjE0Mzk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MToyNy41MzM4ODYyNTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTIwMDMwMDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byB0aGlzIGlzc3VlLCBhbmQgbmF0dXJhbGx5LCBJJ20gdGhpbmtpbmcsIFwiV2hlcmUncyB0aGUgdXN1YWwgc3VzcGVjdD9cIiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCZWZvcmUgSSBnbyB0b28gZGVlcCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBgTUVNQ0dgIEtjb25maWcgb3B0aW9ucy4gWW91IGtub3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcyBhcmUgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBhcyBleHBlY3RlZC4gSXQncyBlYXN5IHRvIHdhc3RlIHRpbWUgY2hhc2luZyBnaG9zdHMgaWYgc29tZXRoaW5nIHNpbXBsZSBpcyBvZmYgaW4gdGhlIGNvbmZpZy4gR290dGEgcnVsZSBvdXQgdGhlIG9idmlvdXMgZmlyc3QsIGFsd2F5cy4gTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBgTUVNQ0dgIEtjb25maWcsIHNwZWNpZmljYWxseSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjMyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MTozMi40NTM5MTkyMzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2ODE1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4Ni1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MzIuNTA5NjA0MzgzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk0OTcyMTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUgZm9yIE1FTUNHIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gYE1FTUNHYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIE1lbW9yeSBDb250cm9sIEdyb3Vwcy4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSwgc28gYSBzeXN0ZW1hdGljIGV4cGxvcmF0aW9uIGlzIGluIG9yZGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgTUVNQ0cgc2V0dGluZ3MgdG8gdGhlIGJ1aWxkIHN5c3RlbS4gQXJlIHRoZXJlIGFueSBuZXcgb3B0aW9ucyBpbnRyb2R1Y2VkPyBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcyB0aGF0IEkgbWF5IGhhdmUgZm9yZ290dGVuPyBJJ20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIG1haW4gTUVNQ0cgZW5hYmxpbmcgb3B0aW9uLCBhbnkgYXNzb2NpYXRlZCBzdWJzeXN0ZW0tc3BlY2lmaWMgY29udHJvbHMgKGxpa2UgcmVzb3VyY2UgbGltaXRzKSwgYW5kIHBvc3NpYmx5IGV2ZW4gZWFybHkgYm9vdCBjb25maWd1cmF0aW9uIGRldGFpbHMgdGhhdCBhcmUgcmVsZXZhbnQuIEtub3dpbmcgdGhlIEtjb25maWcgc3RydWN0dXJlIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgTUVNQ0cncyBhdmFpbGFibGUgZmVhdHVyZXMgYW5kIGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGVtIGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MzYuNDU5MzI4MjYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MDpcXHRcXHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xcbjEwODE6XFx0XFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxcbjEwODI6XFx0XFxuMTA4MzpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDg0OlxcdFxcbjEwODU6XFx0Y29uZmlnIE1FTUNHXFxuMTA4NjpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDg3OlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDg4OlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4OTpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA5MDpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDkxOlxcdFxcdGhlbHBcXG4xMDkyOlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwOTM6XFx0XFxuMTA5NDpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwOTU6XFx0XFx0Ym9vbFxcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTg6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTk6XFx0XFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUxOjM2LjQ1OTUwMTYxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjI5OTQ0Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgVGhlc2UgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGZvY3VzZXMgb24gaWRlbnRpZnlpbmcgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucyBhbmQgaWYgYW55dGhpbmcgbm9uLXRyaXZpYWwgaXMgaGFwcGVuaW5nIHdpdGggdGhlbS4gSSdtIG1haW5seSBpbnRlcmVzdGVkIGluIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyB0aG9zZSByZXByZXNlbnQgdGhlIGVudHJ5IHBvaW50cyBvciBrZXkgcGllY2VzIG9mIHRoZSBjaGFuZ2VkIGxvZ2ljIHRoYXQgSSB3aWxsIG5lZWQgdG8gbG9vayBpbnRvIGFuZCB1bmRlcnN0YW5kIGluIG1vcmUgZGV0YWlsLCBhcyB3ZWxsIGFzIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZC5cblxuU28sIEkgc2VlIGNoYW5nZXMgYWNyb3NzIGEgZmV3IGZpbGVzLlxuXG5JbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCB0aGUgYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCBpcyBjaGFuZ2VkLCBzcGVjaWZpY2FsbHkgYGxydV96b25lX3NpemVgIHdoaWNoIGlzIG5vdyBhbiBgYXRvbWljX2xvbmdfdGAuICBBbHNvLCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgaXMgY2hhbmdlZCB0byBiZWNvbWUgYSBgc3RhdGljIGlubGluZWAgZnVuY3Rpb24uIE5vdCBtdWNoIHRvIGJlIGNvbmNlcm5lZCBhYm91dCB5ZXQuXG5cblRoZW4sIHRoZXJlJ3MgYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgLCB3aGljaCBjb250YWlucyBudW1lcm91cyBgc3RhdGljIGlubGluZWAgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZm9saW8gTFJVIG1hbmFnZW1lbnQ6IGBmb2xpb19mbGFnc19pc19maWxlX2xydWAsIGBmb2xpb19pc19maWxlX2xydWAsIGFuZCBzZXZlcmFsIHJlbGF0ZWQgdG8gZmxhZ3MgYW5kIHJlZmVyZW5jZSBjb3VudHMgbGlrZSBgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19scnVfcmVmc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbHJ1X2dlbmAsIGBscnVfZ2VuX2FkZF9mb2xpb2AsIGBscnVfZ2VuX2RlbF9mb2xpb2AsIGFuZCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AuIExvb2tzIGxpa2UgYSBsb3Qgb2YgaW5saW5lIGZ1bmN0aW9ucywgdGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cblxuTmV4dCwgYGluY2x1ZGUvbGludXgvbW16b25lLmhgIGludHJvZHVjZXMgc29tZSBuZXcgbWFjcm9zOiBgTFJVX1RJRVJfTUlOYCwgYExSVV9USUVSX01BWGAsIGFuZCBgTFJVX1JFRlNfTUFYYC4gSSdsbCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlc2UsIGJ1dCB0aGV5IGFyZSBtb3N0IGxpa2VseSByZWxhdGVkIHRvIHRoZSBpbmxpbmUgZnVuY3Rpb24gY2hhbmdlcyBtZW50aW9uZWQgcHJldmlvdXNseS5cblxuYG1tL2ZvbGlvLmNgIGhhcyBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgIGFzIHN0YXRpYyBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiB0aGVzZSBhbmQgdGhlIGFmb3JlbWVudGlvbmVkIGZvbGlvIGZ1bmN0aW9ucy5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydHMuIEluIGBtbS9tZW1jb250cm9sLmNgLCB0aGVyZSdzIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIHdoaWNoICppc24ndCogc3RhdGljLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQncyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gc28gaXQgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhlc2UgY2hhbmdlcy4gSW4gYG1tL21pZ3JhdGUuY2AsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBub24tc3RhdGljLCBzbyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgZm9yIHRoaXMuIEZpbmFsbHksIGBtbS92bXNjYW4uY2AgY29udGFpbnMgc2V2ZXJhbCBzdGF0aWMgZnVuY3Rpb25zLCBhbmQgb25lIG5vbi1zdGF0aWMgKGFuZCBleHBvcnRlZCkgZnVuY3Rpb24gYGxydV9nZW5fbG9va19hcm91bmRgLiBJJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhpcyBmdXJ0aGVyLiBUaGUgb3RoZXIgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBmaWxlIGNhbiBiZSBzZWVuIGFzIGF1eGlsaWFyeSBmdW5jdGlvbnMuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGFyZSBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXMgaGFwcGVuaW5nIHdpdGggdGhlc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDIyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6NDQuMDg5NDQ4NDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTkwNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fbG9va19hcm91bmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz05MTg9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy05ODItXFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpIFxcdTAwMjZcXHUwMDI2IHB2bXcucHRlKSB7XFxubW0vcm1hcC5jOjk4MzpcXHRcXHRcXHRpZiAobHJ1X2dlbl9sb29rX2Fyb3VuZChcXHUwMDI2cHZtdywgbnIpKVxcbm1tL3JtYXAuYy05ODQtXFx0XFx0XFx0XFx0cmVmZXJlbmNlZCsrO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjc5MT1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyMC0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcXG5tbS92bXNjYW4uYzoyODIxOiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cXG5tbS92bXNjYW4uYy0yODIyLSAqXFxuLS1cXG5tbS92bXNjYW4uYz00MDc0PXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDA5My1cXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xcbm1tL3Ztc2Nhbi5jOjQwOTQ6XFx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcXG5tbS92bXNjYW4uYy00MDk1LVxcdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxcbi0tXFxubW0vdm1zY2FuLmM9NDIxMz1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDI1OS0gKi9cXG5tbS92bXNjYW4uYzo0MjYwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MjYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6NDQuMTM4NDQzMzk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0NTc4NjAzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIEtleSBQZXJmb3JtYW5jZSBJbmRpY2F0b3JzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBmb2N1c2luZyBvbiB0d28gY3JpdGljYWwgc3lzdGVtIGZsYWdzOiBgZm9saW9fbWlncmF0ZV9mbGFnc2AgYW5kIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAuIFRoZXNlIGFyZSBvZnRlbiB0aGUgY3VscHJpdHMgd2hlbiBJIHNlZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIG1lbW9yeSBiZWhhdmlvciwgc28gaXQncyBzbWFydCB0byBzdGFydCB3aXRoIHRoZW0uIEEgcXVpY2sgYXVkaXQgb2YgdGhlaXIgY3VycmVudCBzZXR0aW5ncyB3aWxsIHRlbGwgbWUgYSBsb3QuIEFyZSB0aGV5IHNldCBhcyBleHBlY3RlZCwgZ2l2ZW4gdGhlIHdvcmtsb2FkIGFuZCBoYXJkd2FyZSBwcm9maWxlPyBBbnkgZGV2aWF0aW9ucyBmcm9tIHRoZSByZWNvbW1lbmRlZCB2YWx1ZXMgY291bGQgaW1tZWRpYXRlbHkgcG9pbnQgdG8gdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGlzc3VlIEknbSBkZWJ1Z2dpbmcuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBob3cgdGhlc2UgZmxhZ3MgaW50ZXJhY3Qgd2l0aCBhbnkgcmVjZW50IGtlcm5lbCB1cGdyYWRlcywgYmVjYXVzZSBjaGFuZ2VzIHRoZXJlIGNhbiBlYXNpbHkgaW52YWxpZGF0ZSBlc3RhYmxpc2hlZCBhc3N1bXB0aW9ucy4gRnVydGhlcm1vcmUsIEknbGwgYmUgY2VydGFpbiB0byBjb3JyZWxhdGUgdGhpcyBpbmZvcm1hdGlvbiB3aXRoIHN5c3RlbSBsb2dzIGFuZCByZWxldmFudCBtZXRyaWNzIHRvIGdldCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBwZXJzcGVjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4OTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MTo1My41OTYzMDYzNzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjU0Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX21pZ3JhdGVfZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL21pZ3JhdGUuYy03NzQtICovXFxubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9taWdyYXRlLmMtNzc2LXtcXG4tLVxcbm1tL21pZ3JhdGUuYy04NjMtfVxcbm1tL21pZ3JhdGUuYzo4NjQ6RVhQT1JUX1NZTUJPTChmb2xpb19taWdyYXRlX2ZsYWdzKTtcXG5tbS9taWdyYXRlLmMtODY1LVxcbi0tXFxubW0vbWlncmF0ZS5jPTg3MD1zdGF0aWMgaW50IF9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5tbS9taWdyYXRlLmMtODkwLVxcbm1tL21pZ3JhdGUuYzo4OTE6XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XFxubW0vbWlncmF0ZS5jLTg5Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUxLVxcdFxcdFxcdGVsc2VcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTI6XFx0XFx0XFx0XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhuZXdmb2xpbywgZm9saW8pO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1My1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUxOjUzLjY0NjU2Mzc5OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5OTEwMDIzMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGhvdyBtZW1vcnkgY2dyb3VwcyBtYW5hZ2UgdGhlaXIgTFJVIHNpemUsIGFuZCB0aGF0IG1lYW5zIGl0J3MgaW50cmluc2ljYWxseSB0aWVkIHRvIHRoZSBwZXJmb3JtYW5jZSBhbmQgcmVzcG9uc2l2ZW5lc3Mgb2Ygd29ya2xvYWRzIHRoYXQgYXJlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqZXhhY3RseSogaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHVwZGF0aW5nIHRoZSBMUlUgbGlzdCBzaXplIGJhc2VkIG9uIG1lbW9yeSB1c2FnZSwgcmVjbGFpbSBhY3Rpdml0eSwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gdXNlci1jb25maWd1cmVkIGxpbWl0cyB3aXRoaW4gYSBtZW1vcnkgY2dyb3VwLiBUaGVyZSBjb3VsZCBiZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBjZ3JvdXAgc3Vic3lzdGVtcyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIHRvby4gU3BlY2lmaWNhbGx5IEknbSBob3BpbmcgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgc3VidGxlIGJ1Z3MsIG9yIGZvciBwb3NzaWJsZSBhcmVhcyBmb3Igb3B0aW1pemF0aW9ucyB0byByZWR1Y2UgbGF0ZW5jeSBvciBpbXByb3ZlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgZWZmaWNpZW5jeSwgb3IgZXZlbiBpZGVudGlmeSByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDUzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTI6MDMuNTU2NTg5NzgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQyNDkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZm9saW8uYz0xMTIzPXN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxcbi0tXFxubW0vZm9saW8uYy0xMTQzLVxcdFxcdCAqL1xcbm1tL2ZvbGlvLmM6MTE0NDpcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7XFxubW0vZm9saW8uYzoxMTQ1OlxcdFxcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcXG5tbS9mb2xpby5jLTExNDYtXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1MDE9c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1MTgtLyoqXFxubW0vbWVtY29udHJvbC5jOjE1MTk6ICogbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUgLSBhY2NvdW50IGZvciBhZGRpbmcgb3IgcmVtb3ZpbmcgYW4gbHJ1IHBhZ2VcXG5tbS9tZW1jb250cm9sLmMtMTUyMC0gKiBAbHJ1dmVjOiBtZW1fY2dyb3VwIHBlciB6b25lIGxydSB2ZWN0b3JcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTI3LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoxNTI4OnZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcXG5tbS9tZW1jb250cm9sLmMtMTUyOS1cXHRcXHRcXHRcXHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vdm1zY2FuLmM9MTU5Mj11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS92bXNjYW4uYy0xNjQ0LSAqIFVwZGF0ZSBMUlUgc2l6ZXMgYWZ0ZXIgaXNvbGF0aW5nIHBhZ2VzLiBUaGUgTFJVIHNpemUgdXBkYXRlcyBtdXN0XFxubW0vdm1zY2FuLmM6MTY0NTogKiBiZSBjb21wbGV0ZSBiZWZvcmUgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUgZHVlIHRvIGEgc2FuaXR5IGNoZWNrLlxcbm1tL3Ztc2Nhbi5jLTE2NDYtICovXFxuLS1cXG5tbS92bXNjYW4uYz00NjIxPXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy00NjQyLVxcdFxcdFxcdC8qIE1vdmUgdGhlIGFjY291bnRpbmcsIGRvIG5vdCBkdXBsaWNhdGUgaXQuICovXFxubW0vdm1zY2FuLmM6NDY0MzpcXHRcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7XFxubW0vdm1zY2FuLmM6NDY0NDpcXHRcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XFxubW0vdm1zY2FuLmMtNDY0NS1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUyOjAzLjYwNTAxODQzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzA4MzY5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vZm9saW8uY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcmVsYXRlZCBtb2RpZmljYXRpb25zIGluIHRob3NlIGFyZWFzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IHRoZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBpbiB0aG9zZSB0d28gZmlsZXMuIFxuXG5UaGVuIEknbGwgc2hpZnQgZ2VhcnMgYW5kIGZvY3VzIG9uIGBtbS9mb2xpby5jYCBmb3Igbm93LCBhbmQgdHJhY2sgZG93biB3aGVyZSBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgIGFyZSBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczNTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MjowNS43MzU4NTg4MDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ZvbGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNDY6XFx0XFx0XFx0fVxcbiAzNDc6XFx0XFx0fVxcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHRsb2NhbF91bmxvY2soXFx1MDAyNmNwdV9mYmF0Y2hlcy5sb2NrKTtcXG4gMzUwOlxcdH1cXG4gMzUxOlxcdFxcbiAzNTI6XFx0I2lmZGVmIENPTkZJR19MUlVfR0VOXFxuIDM1MzpcXHRcXG4gMzU0OlxcdHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gMzU1OlxcdHtcXG4gMzU2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIDM1NzpcXHRcXHRpbnQgcmVmcztcXG4gMzU4OlxcdFxcbiAzNTk6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxcbiAzNjA6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNjE6XFx0XFxuIDM2MjpcXHRcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4gMzYzOlxcdFxcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XFxuIDM2NDpcXHRcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xcbiAzNjU6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNjY6XFx0XFx0fVxcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRkbyB7XFxuIDM2OTpcXHRcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuIDM3MDpcXHRcXHRcXHRyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7XFxuIDM3MTpcXHRcXHRcXHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcXG4gMzcyOlxcdFxcdFxcdFxcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcXG4gMzczOlxcdFxcdFxcdFxcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4gMzc0OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMzc1OlxcdFxcdFxcdH1cXG4gMzc2OlxcdFxcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XFxuIDM3NzpcXHRcXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4gMzc4OlxcdH1cXG4gMzc5OlxcdFxcbiAzODA6XFx0c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDM4MTpcXHR7XFxuIDM4MjpcXHRcXHRpbnQgZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIDM4MzpcXHRcXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4gMzg0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2VxO1xcbiAzODU6XFx0XFxuIDM4NjpcXHRcXHRpZiAoZ2VuIFxcdTAwM2MgMClcXG4gMzg3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbiAzOTA6XFx0XFx0Zm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7XFxuIDM5MTpcXHRcXG4gMzkyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzkzOlxcdFxcdHNlcSA9IFJFQURfT05DRShmb2xpb19scnV2ZWMoZm9saW8pLVxcdTAwM2VscnVnZW4ubWluX3NlcVt0eXBlXSk7XFxuIDM5NDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzk1OlxcdFxcdC8qIHdoZXRoZXIgY2FuIGRvIHdpdGhvdXQgc2h1ZmZsaW5nIHVuZGVyIHRoZSBMUlUgbG9jayAqL1xcbiAzOTY6XFx0XFx0cmV0dXJuIGdlbiA9PSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxuIDM5NzpcXHR9XFxuIDM5ODpcXHRcXG4gMzk5OlxcdCNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbiA0MDA6XFx0XFxuIDQwMTpcXHRzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDQwMjpcXHR7XFxuIDQwMzpcXHR9XFxuIDQwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTI6MDUuNzM1OTcwODQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg5MzQwNjQyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIEZvbGlvIE1hbmFnZW1lbnQgaW4gbW0vZm9saW8uYyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgZm9saW8gcmVmZXJlbmNlIGNvdW50cywgcGFydGljdWxhcmx5IGhvdyB0aGV5J3JlIGluY3JlbWVudGVkIGFuZCBjbGVhcmVkLiBUaGUgZnVuY3Rpb25zIGBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2Agc2VlbSBjZW50cmFsIHRvIHRoYXQsIHNvIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlaXIgdXNhZ2Ugd2l0aGluIGBtbS9mb2xpby5jYC4gSSBleHBlY3QgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNDA1IG9ud2FyZHMgd2lsbCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyBvZiB0aGVzZSBjcml0aWNhbCBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBoYW5kbGUgb24gaG93IHRoZSBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIGdlbmVyYXRpb24gYW5kIGFzc29jaWF0ZWQgcmVmZXJlbmNlIGNvdW50IG1lY2hhbmlzbXMgZnVuY3Rpb24gaW4gdGhpcyBjcnVjaWFsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDIwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MjoxNC42NzAwMzc5NDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ZvbGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcbiA0MDE6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiA0MDI6XFx0e1xcbiA0MDM6XFx0fVxcbiA0MDQ6XFx0XFxuIDQwNTpcXHRzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gNDA2OlxcdHtcXG4gNDA3OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDA4OlxcdH1cXG4gNDA5OlxcdFxcbiA0MTA6XFx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIDQxMTpcXHRcXG4gNDEyOlxcdC8qKlxcbiA0MTM6XFx0ICogZm9saW9fbWFya19hY2Nlc3NlZCAtIE1hcmsgYSBmb2xpbyBhcyBoYXZpbmcgc2VlbiBhY3Rpdml0eS5cXG4gNDE0OlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIG1hcmsuXFxuIDQxNTpcXHQgKlxcbiA0MTY6XFx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIHBlcmZvcm0gb25lIG9mIHRoZSBmb2xsb3dpbmcgdHJhbnNpdGlvbnM6XFxuIDQxNzpcXHQgKlxcbiA0MTg6XFx0ICogKiBpbmFjdGl2ZSx1bnJlZmVyZW5jZWRcXHQtXFx1MDAzZVxcdGluYWN0aXZlLHJlZmVyZW5jZWRcXG4gNDE5OlxcdCAqICogaW5hY3RpdmUscmVmZXJlbmNlZFxcdC1cXHUwMDNlXFx0YWN0aXZlLHVucmVmZXJlbmNlZFxcbiA0MjA6XFx0ICogKiBhY3RpdmUsdW5yZWZlcmVuY2VkXFx0LVxcdTAwM2VcXHRhY3RpdmUscmVmZXJlbmNlZFxcbiA0MjE6XFx0ICpcXG4gNDIyOlxcdCAqIFdoZW4gYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gaXMgbm90IHlldCB2aXNpYmxlLCBzbyBzYWZlIGZvciBub24tYXRvbWljIG9wcyxcXG4gNDIzOlxcdCAqIF9fZm9saW9fc2V0X3JlZmVyZW5jZWQoKSBtYXkgYmUgc3Vic3RpdHV0ZWQgZm9yIGZvbGlvX21hcmtfYWNjZXNzZWQoKS5cXG4gNDI0OlxcdCAqL1xcbiA0MjU6XFx0dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDQyNjpcXHR7XFxuIDQyNzpcXHRcXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG4gNDI4OlxcdFxcdFxcdHJldHVybjtcXG4gNDI5OlxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbiA0MzA6XFx0XFx0XFx0bHJ1X2dlbl9pbmNfcmVmcyhmb2xpbyk7XFxuIDQzMTpcXHRcXHRcXHRyZXR1cm47XFxuIDQzMjpcXHRcXHR9XFxuIDQzMzpcXHRcXG4gNDM0OlxcdFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkge1xcbiA0MzU6XFx0XFx0XFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pO1xcbiA0MzY6XFx0XFx0fSBlbHNlIGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkge1xcbiA0Mzc6XFx0XFx0XFx0LypcXG4gNDM4OlxcdFxcdFxcdCAqIFVuZXZpY3RhYmxlIHBhZ2VzIGFyZSBvbiB0aGUgXFxcIkxSVV9VTkVWSUNUQUJMRVxcXCIgbGlzdC4gQnV0LFxcbiA0Mzk6XFx0XFx0XFx0ICogdGhpcyBsaXN0IGlzIG5ldmVyIHJvdGF0ZWQgb3IgbWFpbnRhaW5lZCwgc28gbWFya2luZyBhblxcbiA0NDA6XFx0XFx0XFx0ICogdW5ldmljdGFibGUgcGFnZSBhY2Nlc3NlZCBoYXMgbm8gZWZmZWN0LlxcbiA0NDE6XFx0XFx0XFx0ICovXFxuIDQ0MjpcXHRcXHR9IGVsc2UgaWYgKCFmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykpIHtcXG4gNDQzOlxcdFxcdFxcdC8qXFxuIDQ0NDpcXHRcXHRcXHQgKiBJZiB0aGUgZm9saW8gaXMgb24gdGhlIExSVSwgcXVldWUgaXQgZm9yIGFjdGl2YXRpb24gdmlhXFxuIDQ0NTpcXHRcXHRcXHQgKiBjcHVfZmJhdGNoZXMubHJ1X2FjdGl2YXRlLiBPdGhlcndpc2UsIGFzc3VtZSB0aGUgZm9saW8gaXMgaW4gYVxcbiA0NDY6XFx0XFx0XFx0ICogZm9saW9fYmF0Y2gsIG1hcmsgaXQgYWN0aXZlIGFuZCBpdCdsbCBiZSBtb3ZlZCB0byB0aGUgYWN0aXZlXFxuIDQ0NzpcXHRcXHRcXHQgKiBMUlUgb24gdGhlIG5leHQgZHJhaW4uXFxuIDQ0ODpcXHRcXHRcXHQgKi9cXG4gNDQ5OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2xydShmb2xpbykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUyOjE0LjY3MDE0NDkxNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDIzMjA0NDUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSG90IFBhdGhzIGZvciBGdXp6aW5nIFByaW9yaXRpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgY2hhbmdlIGFuZCB0cnlpbmcgdG8gcGlucG9pbnQgdGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb25zIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuIGBmb2xpb19tYXJrX2FjY2Vzc2VkYCBpcywgb2YgY291cnNlLCBhIGhpZ2gtZnJlcXVlbmN5IGZ1bmN0aW9uLCBidXQgaXQncyBpbXBvcnRhbnQgbm90IHRvIG92ZXJsb29rIG90aGVycyB0aGF0IGFyZSBhbHNvIHJlbGV2YW50LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSB0aGUgaW5zdHJ1Y3Rpb24gdG8gZXh0cmFjdCB0aGUgXCJzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLFwiIHNvIGxldCdzIGNoZWNrIHRoYXQuIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50cy4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBzZWVtcyBpbXBvcnRhbnQg4oCTIGEgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludCBmb3Igcm1hcCBsb29rLWFyb3VuZCwgY2FsbGVkIGZyb20gYG1tL3JtYXAuYzpmb2xpb19yZWZlcmVuY2VkX29uZWAuIFRoZW4gdGhlcmUncyBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFub3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbiB1c2VkIGR1cmluZyBwYWdlIG1pZ3JhdGlvbiAoYG1tL21pZ3JhdGUuY2ApLiBBbmQgZmluYWxseSwgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpcyBhbHNvIG5vbi1zdGF0aWMsIGluIGBtbS9tZW1jb250cm9sLmNgLlxuXG5MZXQncyBkbyBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzY2FuIG9mIHRoZSBtb2RpZmllZCBmaWxlcyDigJMgYG1tL3Ztc2Nhbi5jYCwgYG1tL2ZvbGlvLmNgLCBhbmQgYG1tL21lbWNvbnRyb2wuY2Ag4oCTIGFuZCB0aGUgY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZXMuIE9rYXksIGhlcmUgYXJlIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYW5kIHRoZWlyIHR5cGVzOlxuKiBJbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgOiBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgKHN0YXRpYyBpbmxpbmUpXG4qIEluIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYDogQSBidW5jaCBvZiBzdGF0aWMgaW5saW5lczogYGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1YCwgYGZvbGlvX2lzX2ZpbGVfbHJ1YCwgYGxydV9zZXRfZ2VuX2ZsYWdzYCwgYGxydV9nZXRfZ2VuX2ZsYWdzYCwgYGxydV9zZXRfcmVmc19mbGFnc2AsIGBscnVfZ2V0X3JlZnNfZmxhZ3NgLCBgZm9saW9fbHJ1X3JlZnNgLCBgZm9saW9fc2V0X2xydV9yZWZzYCwgYGZvbGlvX2xydV9nZW5gLCBgbHJ1X2dlbl9hZGRfZm9saW9gLCBgbHJ1X2dlbl9kZWxfZm9saW9gLCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AuXG4qIEluIGBtbS9mb2xpby5jYDogYGxydV9nZW5faW5jX3JlZnNgIChzdGF0aWMpLCBgbHJ1X2dlbl9jbGVhcl9yZWZzYCAoc3RhdGljKVxuKiBJbiBgbW0vbWVtY29udHJvbC5jYDogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCAobm9uLXN0YXRpYylcbiogSW4gYG1tL21pZ3JhdGUuY2A6IGBmb2xpb19taWdyYXRlX2ZsYWdzYCAobm9uLXN0YXRpYylcbiogSW4gYG1tL3Ztc2Nhbi5jYDogYGxydV9nZW5fc2V0X3JlZnNgIChzdGF0aWMpLCBgcmVhZF9jdHJsX3Bvc2AgKHN0YXRpYyksIGBmb2xpb191cGRhdGVfZ2VuYCAoc3RhdGljKSwgYGZvbGlvX2luY19nZW5gIChzdGF0aWMpLCBgdXBkYXRlX2JhdGNoX3NpemVgIChzdGF0aWMpLCBgd2Fsa191cGRhdGVfZm9saW9gIChzdGF0aWMpLCBgd2Fsa19wdGVfcmFuZ2VgIChzdGF0aWMpLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCAoc3RhdGljKSwgYGxydV9nZW5fbG9va19hcm91bmRgIChub24tc3RhdGljKSwgYGlzb2xhdGVfZm9saW9gIChzdGF0aWMpLCBgZ2V0X3RpZXJfaWR4YCAoc3RhdGljKSwgYGdldF90eXBlX3RvX3NjYW5gIChzdGF0aWMpLCBgZXZpY3RfZm9saW9zYCAoc3RhdGljKVxuXG5MZXQncyBjb25maXJtIHRoYXQgdGhvc2UgdGhyZWUga2V5IGZ1bmN0aW9ucyBhcmUgaW5kZWVkIG5vbi1zdGF0aWM6IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpbiBgbW0vdm1zY2FuLmNgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaW4gYG1tL21pZ3JhdGUuY2AsIGFuZCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGluIGBtbS9tZW1jb250cm9sLmNgLiBZZXAsIHRoYXQncyBjb3JyZWN0LlxuXG5Pa2F5LCBhcmUgdGhlcmUgb3RoZXIgbWVhbmluZ2Z1bCBjaGFuZ2VzIHRoYXQgc2hvdWxkIGFsc28gYmUgZnV6emVkPyBBZnRlciByZXZpZXdpbmcsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBsb29rIGxpa2UgdGhlIG1haW4gbm9uLXN0YXRpYyBvbmVzLiBUaGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsbHkgbWVhbmluZ2Z1bDsgaXQgaXMgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIHJlZmFjdG9ycyBtdWx0aS1nZW4gTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZSBmbGFncyBtYW5pcHVsYXRpb24uIEl0IGFsc28gZml4ZXMgdGllciBjYWxjdWxhdGlvbiwgdXBkYXRlcyBmb2xpbyBnZW5lcmF0aW9uIGR1cmluZyBNTSB3YWxraW5nLCBjaGFuZ2VzIExSVSB6b25lIHNpemUgYWNjb3VudGluZyB0byBhdG9taWMgb3BlcmF0aW9ucyBpbiBtZW1jZywgYW5kIGZpeGVzIGZvbGlvIHJlZmVyZW5jZSBtaWdyYXRpb24uIFRoaXMgdG91Y2hlcyBjb3JlIHBhZ2UgcmVjbGFtYXRpb24sIExSVSBtYW5hZ2VtZW50LCBwYWdlIG1pZ3JhdGlvbiwgYW5kIG1lbWNnIGFjY291bnRpbmcg4oCTIGFsbCBmdW5kYW1lbnRhbCBwYXJ0cyBvZiB0aGUga2VybmVsLCBhbmQgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUvR0NFIGtlcm5lbCBleGVjdXRpb24uIEl0IG1vZGlmaWVzIGFsbCBvZiB0aGUgbW9zdCBwZXJmb3JtYW5jZS1zZW5zaXRpdmUgYXJlYXMsIHdoaWNoIGlzIGdyZWF0LlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIEtjb25maWcgb3B0aW9ucyBmb3IgdGhpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdGVzdGluZyB0aGUgY29uZmlndXJhdGlvbnMgcHJvcGVybHk6XG4xLiAgYExSVV9HRU5gOiBFbmFibGVzIE11bHRpLUdlbiBMUlUgY29kZS5cbjIuICBcblxuIiwiSW5wdXRUb2tlbnMiOjE5NDAwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUyOjI4LjkwMjE5MTE5OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3NjU3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1JR1JBVElPTlxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY3Mz1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjgzLVxcbm1tL0tjb25maWc6Njg0OmNvbmZpZyBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY4NS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUyOjI4Ljk2MDk2MDk5OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc1NDk0MTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE1pZ3JhdGlvbiBTdXBwb3J0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgTUlHUkFUSU9OYCBpbiB0aGlzIGtlcm5lbC4gTGV0J3MgZ2V0IHJpZ2h0IGRvd24gdG8gaXQuIE15IGZpcnN0IHN0b3AgaXMgZ29pbmcgdG8gYmUgYG1tL0tjb25maWdgLCBhbmQgSSdtIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgNjgwLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0LCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGVzZSBzb3J0cyBvZiBjb25maWd1cmF0aW9ucy4gSG9wZWZ1bGx5LCB0aGUgbG9naWMgcmVsYXRlZCB0byBlbmFibGluZyBvciBzZWxlY3RpbmcgYE1JR1JBVElPTmAgaXMgcHJldHR5IGNsZWFybHkgbGFpZCBvdXQgdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIGRlcGVuZGVuY2llcyBvbiBhcmNoaXRlY3R1cmUgZmVhdHVyZXMsIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMsIG9yIG1heWJlIGV2ZW4gb3RoZXIgc3Vic3lzdGVtcy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRldmVsb3BlcnMgaGF2ZSBzZXQgaXQgdXAuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDA2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTI6NDYuNzE1OTA0Mzc3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3MDpcXHRcXHQgIHRob3NlIHBhZ2VzIHRvIGFub3RoZXIgZW50aXR5LCBzdWNoIGFzIGEgaHlwZXJ2aXNvciwgc28gdGhhdCB0aGVcXG4gNjcxOlxcdFxcdCAgbWVtb3J5IGNhbiBiZSBmcmVlZCB3aXRoaW4gdGhlIGhvc3QgZm9yIG90aGVyIHVzZXMuXFxuIDY3MjpcXHRcXG4gNjczOlxcdGNvbmZpZyBOVU1BX01JR1JBVElPTlxcbiA2NzQ6XFx0XFx0Ym9vbCBcXFwiTlVNQSBwYWdlIG1pZ3JhdGlvblxcXCJcXG4gNjc1OlxcdFxcdGRlZmF1bHQgeVxcbiA2NzY6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiA2Nzc6XFx0XFx0c2VsZWN0IE1JR1JBVElPTlxcbiA2Nzg6XFx0XFx0aGVscFxcbiA2Nzk6XFx0XFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXFxuIDY4MDpcXHRcXHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXFxuIDY4MTpcXHRcXHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcXG4gNjgyOlxcdFxcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxcbiA2ODM6XFx0XFxuIDY4NDpcXHRjb25maWcgTUlHUkFUSU9OXFxuIDY4NTpcXHRcXHRib29sXFxuIDY4NjpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiA2ODc6XFx0XFxuIDY4ODpcXHRjb25maWcgREVWSUNFX01JR1JBVElPTlxcbiA2ODk6XFx0XFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuIDY5MDpcXHRcXG4gNjkxOlxcdGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cXG4gNjkyOlxcdFxcdGJvb2xcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXFxuIDY5NTpcXHRcXHRib29sXFxuIDY5NjpcXHRcXG4gNjk3OlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbiA2OTg6XFx0XFx0ZGVmX2Jvb2wgblxcbiA2OTk6XFx0XFx0aGVscFxcbiA3MDA6XFx0XFx0ICBBbGxvd3MgdGhlIHBhZ2VibG9ja19vcmRlciB2YWx1ZSB0byBiZSBkeW5hbWljIGluc3RlYWQgb2YganVzdCBzdGFuZGFyZFxcbiA3MDE6XFx0XFx0ICBIVUdFVExCX1BBR0VfT1JERVIgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgSHVnZVRMQiBwYWdlIHNpemVzIGF2YWlsYWJsZVxcbiA3MDI6XFx0XFx0ICBvbiBhIHBsYXRmb3JtLlxcbiA3MDM6XFx0XFxuIDcwNDpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgcGFnZWJsb2NrX29yZGVyIGNhbm5vdCBleGNlZWQgTUFYX1BBR0VfT1JERVIgYW5kIHdpbGwgYmVcXG4gNzA1OlxcdFxcdCAgY2xhbXBlZCBkb3duIHRvIE1BWF9QQUdFX09SREVSLlxcbiA3MDY6XFx0XFxuIDcwNzpcXHRjb25maWcgQ09OVElHX0FMTE9DXFxuIDcwODpcXHRcXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcXHUwMDI2XFx1MDAyNiBDT01QQUNUSU9OKSB8fCBDTUFcXG4gNzA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1Mjo0Ni43MTYwMzM1OTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0NzAzMzUzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFF1ZXJ5OiBUaGUgXCJNSUdSQVRJT05cIiBTZWFyY2gqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdXNlciB0eXBlZCBpbiBcIk1JR1JBVElPTi5cIiBMZXQncyBicmVhayBkb3duIHdoYXQncyBwb3RlbnRpYWxseSBiZWhpbmQgdGhhdC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgYWx3YXlzOiB3aGF0IGFyZSB0aGUgbGlrZWx5IGNvbnRleHRzLCBhbmQgd2hhdCBpbmZvcm1hdGlvbiBkbyB0aGV5IGhvcGUgdG8gZ2xlYW4gZnJvbSBtZT8gXCJNSUdSQVRJT05cIiBpcyBhIG1hc3NpdmVseSBvdmVybG9hZGVkIHRlcm0uIEl0IGNvdWxkIHJlZmVyIHRvOlxuXG4qICAgKipEYXRhIE1pZ3JhdGlvbioqOiBJcyB0aGlzIGFib3V0IG1vdmluZyBkYXRhIGJldHdlZW4gZGF0YWJhc2VzLCBwbGF0Zm9ybXMsIG9yIHN0b3JhZ2Ugc29sdXRpb25zPyBJZiBzbywgYW0gSSBnb2luZyB0byBuZWVkIHRvIHNwZWNpZnkgYSBzb3VyY2UgYW5kIHRhcmdldD8gV2hhdCBhYm91dCBkYXRhIHRyYW5zZm9ybWF0aW9uIGFuZCBtYXBwaW5nPyBBcmUgdGhleSBpbnRlcmVzdGVkIGluIGEgc3BlY2lmaWMgdG9vbCBvciBtZXRob2RvbG9neT8gVGhlIG51YW5jZXMgaGVyZSBhcmUgdmFzdCwgY292ZXJpbmcgZXZlcnl0aGluZyBmcm9tIEVUTCBwcm9jZXNzZXMgdG8gZGF0YWJhc2UgcmVwbGljYXRpb24gYW5kIGRpc2FzdGVyIHJlY292ZXJ5IHN0cmF0ZWdpZXMuXG4qICAgKipJbmZyYXN0cnVjdHVyZSBNaWdyYXRpb24qKjogQXJlIHdlIHRhbGtpbmcgYWJvdXQgbW92aW5nIGFwcGxpY2F0aW9ucyBvciBlbnRpcmUgaW5mcmFzdHJ1Y3R1cmUgKHNlcnZlcnMsIFZNcywgY29udGFpbmVycykgdG8gdGhlIGNsb3VkLCBiZXR3ZWVuIGNsb3VkIHByb3ZpZGVycywgb3IgZnJvbSBvbi1wcmVtaXNlIHRvIGEgY2xvdWQgZW52aXJvbm1lbnQ/IFRoaXMgcmFpc2VzIHF1ZXN0aW9ucyBhcm91bmQgY29tcGF0aWJpbGl0eSwgc2VjdXJpdHksIGRvd250aW1lLCBhbmQgdGhlIHJlcXVpcmVkIGV4cGVydGlzZSAtIGlzIGl0IGEgXCJsaWZ0IGFuZCBzaGlmdFwiIHNjZW5hcmlvLCBvciBhcmUgdGhleSByZS1hcmNoaXRlY3RpbmcgZXZlcnl0aGluZz9cbiogICAqKkNvZGUgTWlncmF0aW9uKio6IFRoZSB0ZXJtIFwibWlncmF0aW9uXCIgY2FuIGFsc28gYmUgdXNlZCwgc3BlY2lmaWNhbGx5IGluIHJlZmVyZW5jZSB0byBjb2RlLiBUaGlzIGNhbiBiZSBpbiBjb250ZXh0IG9mIHBvcnRpbmcgbGVnYWN5IGFwcGxpY2F0aW9ucyB0byBhIG5ld2VyIGNvZGViYXNlIG9yIHBsYXRmb3JtLiBPciwgdGhpcyBjb3VsZCBiZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgbGlicmFyeSBvciBmcmFtZXdvcmsgdXBncmFkZS5cbiogICAqKk90aGVyIENvbnRleHRzKio6IFRoZXJlIGFyZSBhbHNvIG90aGVyLCBtb3JlIGdlbmVyYWwgbWVhbmluZ3Mgb2YgbWlncmF0aW9uLCBkZXBlbmRpbmcgb24gdGhlIGZpZWxkLiBBbSBJIHN1cmUgSSBrbm93IHRoZSB1c2VycycgY29udGV4dCwgYW5kIGNhbiBJIG1ha2UgYW4gYXNzdW1wdGlvbj9cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBsYXJnZXIgY29udGV4dCwgb3IgYXNrIGNsYXJpZnlpbmcgcXVlc3Rpb25zLCBiZWZvcmUgZGlnZ2luZyBpbnRvIGFueSBwYXJ0aWN1bGFyIGFzcGVjdC4gVGhlIHNlYXJjaCB0ZXJtIGFsb25lIG9mZmVycyB2ZXJ5IGxpbWl0ZWQgaW5mb3JtYXRpb24sIGFuZCBpdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSB1c2VyJ3MgaW1wbGljaXQgaW50ZW50LiBJJ2xsIG5lZWQgdG8gdXNlIG1vcmUgaW5mb3JtYXRpb24gdG8gYXNzZXNzIHRoZWlyIG5lZWRzLCBhbmQgZGV0ZXJtaW5lIGlmIHRoZXkgcmVxdWlyZSBhIGdlbmVyYWwgb3ZlcnZpZXcsIG9yIGEgZGVlcCBkaXZlIGludG8gc3BlY2lmaWMgdG9vbHMsIHRlY2hub2xvZ2llcywgYW5kIGJlc3QgcHJhY3RpY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc4OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTM6MTQuMTg2MzcyMzY2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE1OTkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTUlHUkFUSU9OXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTgyPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01ODMtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcbm1tL0tjb25maWc6NTg0OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTU4NS1cXG4tLVxcbm1tL0tjb25maWc9NjQyPWNvbmZpZyBDT01QQUNUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY0NC1cXHRkZWZhdWx0IHlcXG5tbS9LY29uZmlnOjY0NTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02NDYtXFx0ZGVwZW5kcyBvbiBNTVVcXG4tLVxcbm1tL0tjb25maWc9NjczPWNvbmZpZyBOVU1BX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NzYtXFx0ZGVwZW5kcyBvbiBOVU1BIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL0tjb25maWc6Njc3OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY3OC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTc2NT1jb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzY5LVxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxubW0vS2NvbmZpZzo3NzA6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNzcxLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTA1Nj1jb25maWcgQ01BXFxuLS1cXG5tbS9LY29uZmlnLTEwNTgtXFx0ZGVwZW5kcyBvbiBNTVVcXG5tbS9LY29uZmlnOjEwNTk6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctMTA2MC1cXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MzoxNC4yMzg1MzcxMDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM2MzA0MDkwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBhbmQgc3BlY2lmaWNhbGx5LCBob3cgYENPTVBBQ1RJT05gIGFuZCBgTlVNQV9NSUdSQVRJT05gIGludGVyYWN0LiBJdCdzIGNsZWFyIHRoYXQgYm90aCBvZiB0aGVzZSB1bHRpbWF0ZWx5IHBvaW50IHRvIHVzaW5nIHRoZSBgTUlHUkFUSU9OYCBmdW5jdGlvbmFsaXR5LiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIGxpbmtlZCwgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIExldCdzIGdvIHN0cmFpZ2h0IHRvIGBtbS9NYWtlZmlsZWAuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGBtaWdyYXRlLm9gLCBgbWVtY29udHJvbC5vYCwgYW5kIGB2bXNjYW4ub2AgYXJlIGNvbXBpbGVkLiBTZWVpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgbGlua2luZyBzdGVwcyB0aGVyZSB3aWxsIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHdoZXJlIHRoZXNlIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IG1vZHVsZXMgZml0IGludG8gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQuIFRoaXMgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgZGVzaWduIGFuZCBwb3RlbnRpYWwgaG90c3BvdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTg0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTM6MjcuODY4OTQ4OTU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzMwNzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIobWlncmF0ZXxtZW1jb250cm9sfHZtc2NhbilcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTUxPW9iai15XFx0XFx0XFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxcXFxubW0vTWFrZWZpbGUtNTItXFx0XFx0XFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcXFxcbm1tL01ha2VmaWxlOjUzOlxcdFxcdFxcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NC1cXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlPTk3PW9iai0kKENPTkZJR19NRU1URVNUKVxcdFxcdCs9IG1lbXRlc3Qub1xcbm1tL01ha2VmaWxlOjk4Om9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUub1xcbm1tL01ha2VmaWxlLTk5LW9iai0kKENPTkZJR19OVU1BKSArPSBtZW1vcnktdGllcnMub1xcbi0tXFxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19NRU1DR19WMSkgKz0gbWVtY29udHJvbC12MS5vXFxubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgKz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xcbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSArPSBicGZfbWVtY29udHJvbC5vXFxubW0vTWFrZWZpbGUtMTA4LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUzOjI3Ljk2NjI2Mjg1N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MjQ3NzI4NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBQYXRjaCdzIFJlYWNoIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYHZtc2Nhbi5vYCBhbmQgYGZvbGlvLm9gIGFyZSBjb3JlLCByZXNpZGluZyBpbiBgb2JqLXlgLiBUaGUgTUdMUlUgbG9naWMgaXMgZ2F0ZWQgYnkgYExSVV9HRU5gLCB3aGljaCBpbXBhY3RzIGB2bXNjYW4uY2AsIGBmb2xpby5jYCwgYW5kIGBtbV9pbmxpbmUuaGAuIGBMUlVfR0VOX0VOQUJMRURgIGlzIG91ciBkZWZhdWx0IE1HTFJVIHN3aXRjaC4gIGBNRU1DR2AgaXMgY3JpdGljYWwsIGNvbXBpbGluZyBgbWVtY29udHJvbC5vYCBhbmQgZW5hYmxpbmcgbWVtY2cncyBMUlUgc2l6ZSB0cmFja2luZyB2aWEgYGxydV96b25lX3NpemVgLiAgV2UgYWxzbyBoYXZlIGBNSUdSQVRJT05gIG9yIGl0cyBhbHRlcm5hdGl2ZXMgKGBOVU1BX01JR1JBVElPTmAsIGBDT01QQUNUSU9OYCkgd2hpY2ggYnJpbmcgaW4gYG1pZ3JhdGUub2AuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcHJlcmVxdWlzaXRlcy5cblxuMS4gIGBXb3J0aEZ1enppbmdgOiBDaGVja3Mgb3V0LCBpdCdzIHRydWUsIHdoaWNoIGlzIGdvb2QuXG4yLiAgYEZvY3VzU3ltYm9sc2A6ICBFeGNlbGxlbnQsIHdlJ3JlIHRhcmdldGluZzpcbiAgICAqICAgYGxydV9nZW5fbG9va19hcm91bmRgXG4gICAgKiAgIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWBcbiAgICAqICAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgXG4zLiAgYEVuYWJsZUNvbmZpZ3NgOiBXZSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlOlxuICAgICogICBgTFJVX0dFTmBcbiAgICAqICAgYExSVV9HRU5fRU5BQkxFRGBcbiAgICAqICAgYE1FTUNHYFxuICAgICogICBgTUlHUkFUSU9OYCAob3IgYENPTVBBQ1RJT05gIG9yIGBOVU1BX01JR1JBVElPTmApXG5cblNpbmNlIGBNSUdSQVRJT05gIGlzIGEgc2ltcGxlIGJvb2xlYW4gYW5kIGRvZXNuJ3QgaGF2ZSBhIHByb21wdCwgc2V0dGluZyBlaXRoZXIgYENPTVBBQ1RJT05gIG9yIGBOVU1BX01JR1JBVElPTmAgd2lsbCB3b3JrLCBvciBzZXR0aW5nIGBNSUdSQVRJT05gLiBMZXQncyBsaXN0IGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAsIGBNRU1DR2AsIGFuZCB0aGVuIGBNSUdSQVRJT05gLCBgQ09NUEFDVElPTmAsIGFuZCBgTlVNQV9NSUdSQVRJT05gLlxuXG5SZWFzb25pbmcgaXMgc291bmQuIFRoaXMgcGF0Y2ggZGl2ZXMgaW50byB0aGUgaGVhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIE1HTFJVIHJlZmVyZW5jZS9nZW5lcmF0aW9uIGZsYWcgaGFuZGxpbmcsIG1ha2luZyBgbHJ1X3pvbmVfc2l6ZWAgYXRvbWljLCBmaXhpbmcgbWlncmF0aW9uIGJ1Z3MsIGFuZCB0d2Vha2luZyB0aWVyIGNhbGN1bGF0aW9ucy9tbS13YWxrIHVwZGF0ZXMgaW4gYHZtc2NhbmAuIFRoaXMgaGl0cyBjcml0aWNhbCBNTSBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlIHBhdGNoIGlzIGZ1bGx5IHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDIwOCwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTM6MzcuMjEzOTkzMjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM3Mzg1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiTlVNQV9NSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYWNyb3NzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHRyYWNraW5nLCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcgKGNvbnZlcnRlZCB0byBhdG9taWNfbG9uZ190KSwgcGFnZSBtaWdyYXRpb24gcmVmZXJlbmNlIGNvcHlpbmcgKGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMpLCBhbmQgcGFnZSByZWNsYW1hdGlvbiBzY2FubmluZyBhbmQgdGllciBjYWxjdWxhdGlvbnMgaW4gdm1zY2FuLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBjb3JlIGtlcm5lbCBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIG1pZ3JhdGlvbiBwYXRocyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiTlVNQV9NSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYWNyb3NzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHRyYWNraW5nLCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcgKGNvbnZlcnRlZCB0byBhdG9taWNfbG9uZ190KSwgcGFnZSBtaWdyYXRpb24gcmVmZXJlbmNlIGNvcHlpbmcgKGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMpLCBhbmQgcGFnZSByZWNsYW1hdGlvbiBzY2FubmluZyBhbmQgdGllciBjYWxjdWxhdGlvbnMgaW4gdm1zY2FuLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBjb3JlIGtlcm5lbCBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIG1pZ3JhdGlvbiBwYXRocyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MzozNy40MTc3MzgxOTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTU0OTk2MDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTM6MzcuNDE4MjQ4Nzk3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE5NTQ0NzkwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSByZWNsYWltIGxvZ2ljIChNR0xSVSByZWZlcmVuY2UvZ2VuZXJhdGlvbiBmbGFnIGhlbHBlcnMsIG11bHRpLWdlbiBMUlUgdGllciBjYWxjdWxhdGlvbnMsIG1lbWNnIHBlci1ub2RlIExSVSB6b25lIHNpemUgYXRvbWljIGNvdW50ZXJzLCBhbmQgZm9saW8gbWlncmF0aW9uIHJlZmVyZW5jZSBzdGF0ZSBoYW5kbGluZykuXFxuXFxuMS4gTm8ga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBjb3B5aW5nIHBhdGhzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIGlvY3RsIHN0cnVjdHMsIGV0Yy4pLlxcbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIGZsYWcgdmFsdWVzIChlLmcuIGBmaWxlYCBhbmQgYG9sZF9nZW5gIGluIGBmb2xpb191cGRhdGVfZ2VuYC9gd2Fsa191cGRhdGVfZm9saW9gLCBgc3RydWN0IGN0cmxfcG9zYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGd1YXJkZWQgYnkgY29udHJvbCBmbG93IGNvbmRpdGlvbnMuXFxuMy4gTm8gbWVtb3J5IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjay9wYWdlIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBjb25jdXJyZW50IGZsYWcgdXBkYXRlcywgYXRvbWljcywgb3IgcGFnZSBzdGF0ZSB0cmFuc2l0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBzYWZldHksIGNvbmN1cnJlbmN5LCBvciBzYW5pdHkgY2hlY2tzIGhhbmRsZWQgYnkgS0FTQU4vTE9DS0RFUC9WTV9XQVJOX09OLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5M2QzNjk5MjM4MDFmNzg3YjNjYWVhYjk5ZjdiMWQ2NDQ5MTc1Yjg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMzAgMTg6NTE6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li4xYjQ5ZDhiNTkxZGE2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTEzLDcgKzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbitcdGF0b21pY19sb25nX3RcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcdGl0ZXI7XG4gXG4gXHQvKlxuQEAgLTkwMiwxMCArOTAyLDE1IEBAIHN0YXRpYyBpbmxpbmVcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbitcdGxvbmcgdmFsO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdHJldHVybiBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHR2YWwgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuK1x0aWYgKFdBUk5fT05fT05DRSh2YWwgXHUwMDNjIDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB2YWw7XG4gfVxuIFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCA2MjFjODY1M2Q4ZjdlLi43ZTQ4N2MyM2FmZjcwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTEwLDYgKzEwLDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVhZm9wcy5oXHUwMDNlXG4gXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4re1xuK1x0cmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7XG4rfVxuK1xuIC8qKlxuICAqIGZvbGlvX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVP1xuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXG5AQCAtMjcsNyArMzIsNyBAQFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuK1x0cmV0dXJuIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gfVxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5AQCAtMTQyLDEwICsxNDcsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpXG4gXHRyZXR1cm4gd29ya2luZ3NldCA/IE1BWF9OUl9USUVSUyAtIDEgOiBvcmRlcl9iYXNlXzIocmVmcyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rLyoqXG4rICogbHJ1X3NldF9nZW5fZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuKyAqIEBnZW46IGdlbmVyYXRpb24gbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxuK3tcbitcdEJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgXHUwMDI2IExSVV9SRUZTX01BU0spO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcdTAwM2MgMCk7XG4rXHQvKiBTdG9yZSBnZW4gb2Zmc2V0IGJ5IDEsIHplcm8gbWVhbnMgdGhlIGZvbGlvIGlzIG9mZi1saXN0LiAqL1xuK1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9HRU5fTUFTSztcbitcdCpmbGFncyB8PSAoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbit9XG4rXG4rLyoqXG4rICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKlxuKyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xuKyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRpbnQgZ2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1xuK1x0LyogRXhjbHVkZSB0aGUgbGVnYWwgLTEgZnJvbSB0aGUgdW5zaWduZWQgTUFYX05SX0dFTlMgY29tcGFyaXNvbiAqL1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSBcdTAwMjZcdTAwMjYgZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuK1x0cmV0dXJuIGdlbjtcbit9XG4rXG4rLyoqXG4rICogbHJ1X3NldF9yZWZzX2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCB0byBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxuKyAqXG4rICogRm9yIE1HTFJVLCBQR19yZWZlcmVuY2VkIGhvbGRzIHRoZSBmaXJzdCByZWYsIGFuZCB0aGUgZXh0cmEgYml0cyBob2xkIHRoZVxuKyAqIHJlbWFpbmluZyByZWZzLiBGb3IgY2xhc3NpY2FsIExSVSB0aGUgZXh0cmEgYml0cyBhcmUgbm90IHVzZWQsIHNvIGl0IGNhblxuKyAqIGFsc28gYmUgc2VlbiBhcyB0aGUgcmVmcyBjb3VudCBuZXZlciBleGNlZWRzIDEuIEluIGJvdGggY2FzZXMsIHJlZnMgPT0gMVxuKyAqIG1lYW5zIFBHX3JlZmVyZW5jZWQgaXMgc2V0IGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgemVybywgYW5kIHJlZnMgPT0gMCBtZWFuc1xuKyAqIFBHX3JlZmVyZW5jZWQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSBhbGwgdW5zZXQuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XG4rXHRpZiAoIXJlZnMpXG4rXHRcdHJldHVybjtcbitcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcbit9XG4gXG4rLyoqXG4rICogbHJ1X2dldF9yZWZzX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqXG4rICogUmVhZHMgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHNldCBieSBscnVfc2V0X3JlZnNfZmxhZ3MoKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHQvKlxuQEAgLTE1NSwxMSArMjE2LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBscnVfZ2V0X3JlZnNfZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbitcbitcdGRvIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rfVxuIFxuLVx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pXG5AQCAtMjcwLDcgKzM0NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRmbGFncyA9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuK1x0c2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pO1xuIFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5AQCAtMjk1LDcgKzM2OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHQvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovXG4gXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4rXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICszNzgsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbisvKipcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXG4rICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4rICogQG9sZDogdGhlIHNvdXJjZSBmb2xpb1xuKyAqXG4rICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxuKyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZVxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXHUwMDNlZmxhZ3MuZikgXHUwMDI2IExSVV9SRUZTX01BU0s7XG4tXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNm5ldy1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIFxuQEAgLTMzNyw5ICs0MTksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbitcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbitcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDkyLDExICs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuKyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4rI2RlZmluZSBMUlVfVElFUl9NQVhcdFx0KE1BWF9OUl9USUVSUyAtIDEpXG4gXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcbiBcbiAjZGVmaW5lIExSVV9HRU5fTUFTS1x0XHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKVxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1x0XHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpXG4rI2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmZiODc0ZmU0OTJiMmIgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4rKysgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdHJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTtcbitcdFx0aWYgKHJlZnMgPT0gTFJVX1JFRlNfTUFYKSB7XG4gXHRcdFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxuIFx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgKyBCSVQoTFJVX1JFRlNfUEdPRkYpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMgKyAxKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuQEAgLTM4NCw3ICszODYsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChnZW4gXHUwMDNjIDApXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUyB8IEJJVChQR193b3JraW5nc2V0KSwgMCk7XG4rXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0Zm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS1cdTAwM2VscnVnZW4ubWluX3NlcVt0eXBlXSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi5mOTE1NDBmZWFmNzM1IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0xNTI5LDI4ICsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcbiBcdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVx0dW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7XG4tXHRsb25nIHNpemU7XG4gXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0bHJ1X3NpemUgPSBcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XTtcbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2MgMClcbi1cdFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xuLVxuLVx0c2l6ZSA9ICpscnVfc2l6ZTtcbi1cdGlmIChXQVJOX09OQ0Uoc2l6ZSBcdTAwM2MgMCxcbi1cdFx0XCIlcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxcblwiLFxuLVx0XHRfX2Z1bmNfXywgbHJ1dmVjLCBscnUsIG5yX3BhZ2VzLCBzaXplKSkge1xuLVx0XHRWTV9CVUdfT04oMSk7XG4tXHRcdCpscnVfc2l6ZSA9IDA7XG4tXHR9XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbitcdGF0b21pY19sb25nX2FkZChucl9wYWdlcywgXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0pO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlLmNcbisrKyBiL21tL21pZ3JhdGUuY1xuQEAgLTc3Niw4ICs3NzYsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRpbnQgY3B1cGlkO1xuIFxuLVx0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTtcbitcdC8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi9cbitcdGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbitcbiBcdGlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbiBcdFx0Zm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7XG4gXHRpZiAoZm9saW9fdGVzdF9jbGVhcl9hY3RpdmUoZm9saW8pKSB7XG5AQCAtODA3LDcgKzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4gXHRcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcbiBcbi1cdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuIFx0LypcbiBcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxuIFx0ICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZjExNDkxZWU5ZWQ1Yy4uODdlNjY3YzQxMGVkNCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTg0MywxOSArODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbiBcdFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXG4gXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuK1x0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4gXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0LyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovXG4tXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuLVx0ZWxzZVxuK1x0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSkge1xuK1x0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHR9IGVsc2Uge1xuIFx0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbitcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuQEAgLTMxOTUsOCArMzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7XG4gXHRpbnQgZ2FpbjtcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuLVx0XHRcdCAgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4rc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sXG4rXHRcdFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbiB7XG4gXHRpbnQgaTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuQEAgLTMyMDUsNyArMzIwOCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuIFx0cG9zLVx1MDAzZWdhaW4gPSBnYWluO1xuIFx0cG9zLVx1MDAzZXJlZmF1bHRlZCA9IHBvcy1cdTAwM2V0b3RhbCA9IDA7XG4gXG4tXHRmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpIFx1MDAzYz0gbWluKHRpZXIsIE1BWF9OUl9USUVSUyAtIDEpOyBpKyspIHtcbitcdGZvciAoaSA9IHRpZXJfbWluOyBpIFx1MDAzYz0gdGllcl9tYXg7IGkrKykge1xuIFx0XHRwb3MtXHUwMDNlcmVmYXVsdGVkICs9IGxydWdlbi1cdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW2ldICtcbiBcdFx0XHRcdCAgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZscnVnZW4tXHUwMDNlcmVmYXVsdGVkW2hpc3RdW3R5cGVdW2ldKTtcbiBcdFx0cG9zLVx1MDAzZXRvdGFsICs9IGxydWdlbi1cdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gK1xuQEAgLTMyNjYsMTEgKzMyNjksMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqL1xuLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuK3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLFxuK1x0XHRcdCAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbitcdGludCBvbGRfZ2VuO1xuIFxuIFx0LypcbiBcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXG5AQCAtMzI3OSwyMCArMzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIFx0ICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4gXHRkbyB7XG4rXHRcdG9sZF9nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXG4gXHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxuLVx0XHRcdHJldHVybiAtMTtcbitcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAoKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0XHRuZXdfZmxhZ3MgfD0gQklUKFBHX3dvcmtpbmdzZXQpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0KmlzX2ZpbGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydShcdTAwMjZvbGRfZmxhZ3MpO1xuK1x0cmV0dXJuIG9sZF9nZW47XG4gfVxuIFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG5AQCAtMzMwMSwyMSArMzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIFxuIFx0ZG8ge1xuLVx0XHRuZXdfZ2VuID0gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdFx0bmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XG4rXG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuIFx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4rXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG5AQCAtMzUxMiwyMiArMzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuK1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4rXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZmaWxlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICszNTU3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzYwMSw3ICszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggKzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNjkyLDcgKzM2OTYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgKzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzMDgsOCArNDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MzUzLDEzICs0MzUzLDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuK1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzE2LDcgKzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuK1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllcisrKSB7XG4rXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00ODMyLDggKzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUzOjM3LjQxODI1MDIxN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTk1NDQ1MDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBKdXN0aWZpY2F0aW9uIGZvciBEZWRpY2F0ZWQgRnV6emluZyBTZXNzaW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcXVlc3Rpb24gYXQgaGFuZCBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtlcm5lbE1lbW9yeVNhbml0aXplciAoS01TQU4pIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtlcm5lbCBBZGRyZXNzIFNhbml0aXplciAoS0FTQU4pIHJ1bnMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB3ZSBuZWVkIHRvIGJlIGV4dHJlbWVseSBqdWRpY2lvdXMgYWJvdXQgc3Bpbm5pbmcgdXAgS01TQU47IGl0J3MgcmVzb3VyY2UtaW50ZW5zaXZlLCBzbyB3ZSAqb25seSogdXNlIGl0IHdoZW4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGNoZWNrcyBhcmUgaW5zdWZmaWNpZW50LlxuXG5GaXJzdCwgSSBsb29rZWQgYXQgdGhlIG92ZXJhbGwgY2hhbmdlcy4gVGhpcyBwYXRjaCBzZXJpZXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzOiBNR0xSVSAoTXVsdGktR2VuZXJhdGlvbmFsIExSVSksIGZvbGlvIGZsYWdzLCBtZW1jZyB6b25lIExSVSBzaXplcywgYW5kIGZvbGlvIG1pZ3JhdGlvbi4gTXkgaW5pdGlhbCBzY2FuIHdhcyB0byBzZWUgaWYgYW55dGhpbmcgd2FzIHVzZXItZmFjaW5nLCBidXQgaXQncyBhbGwgaW50ZXJuYWwga2VybmVsIHN0dWZmLCBwcmltYXJpbHkgYXJvdW5kIHBhZ2UgY2FjaGUgbWFuYWdlbWVudCBhbmQgTFJVIGxpc3QgbWFuaXB1bGF0aW9uLiBUaGF0J3MgZ29vZDsgZmV3ZXIgdmVjdG9ycyBmb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cbk5leHQsIEkgbWV0aG9kaWNhbGx5IHdlbnQgdGhyb3VnaCB0aGUgY29kZSwgZnVuY3Rpb24gYnkgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyBsb29raW5nIGZvciB0aGUgKnNwZWNpZmljKiBLTVNBTiB0cmlnZ2VyOiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBkaXN0aW5jdGlvbjogS0FTQU4gY292ZXJzIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBsb2NraW5nIGJ1Z3MsIGFuZCB0aGUgbGlrZS4gS01TQU7igJlzIHRlcnJpdG9yeSBpcyB0aGUgbmFzdGllciBzdHVmZiAtIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuSSBleGFtaW5lZCB0aGUgYGZvbGlvX3VwZGF0ZV9nZW5gIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIHRoZSBgZmlsZWAgdmFyaWFibGUuIFRoZXJlJ3MgY29uZGl0aW9uYWwgbG9naWMgdGhlcmUsIGJ1dCBJIHRyYWNlZCBhbGwgcG9zc2libGUgZXhlY3V0aW9uIHBhdGhzLiAgSSBjb25maXJtZWQgdGhhdCB0aGUgYGZpbGVgIHZhcmlhYmxlICppcyogYWx3YXlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGV2ZW4gaW4gdGhlIGNhc2VzIHdoZXJlIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5LiBJIHNpbWlsYXJseSB2ZXJpZmllZCB0aGUgYHJlYWRfY3RybF9wb3NgIHN0cnVjdCwgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgLCBmb2xpbyBtaWdyYXRpb24gYW5kIHRoZSBmbGFncyBmdW5jdGlvbnMsIGVuc3VyaW5nIHRoYXQgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3QgZmllbGRzIHdlcmUgZWl0aGVyIGluaXRpYWxpemVkIGRpcmVjdGx5IG9yIGFzc2lnbmVkIHZhbHVlcyBwcmlvciB0byB0aGVpciBmaXJzdCByZWFkLiBUaGVyZSBhcmUgYXRvbWljIG9wZXJhdGlvbnMgb24gY291bnRlcnMgYW5kIGZsYWcgYml0IG1hbmlwdWxhdGlvbiwgYnV0IHRoZSBsb2dpYyBpcyBzb3VuZCBhbmQgdGhlIGRhdGEgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGFjdGVkIHVwb24uIFRoZXJlIHdlcmUgbm8gbmV3IGFsbG9jYXRpb25zIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgSSd2ZSBjb25jbHVkZWQgdGhlcmUgaXMgbm8gaW5zdGFuY2Ugd2hlcmUgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4aXN0cy4gVGhlcmUgYXJlIG5vIGV4cG9zZWQgY2hhbmdlcyB0byB1c2VyLXNwYWNlIGRhdGEgc3RydWN0dXJlcyAoc28sIG5vIGluZm8tbGVha3MpIGFuZCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyByZWFkLCBhY2NvcmRpbmcgdG8gbXkgYXNzZXNzbWVudHMgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB1cGRhdGVkLlxuXG5NeSBmaW5hbCBhbmFseXNpcyBpcyBiYXNlZCBvbiB0aGlzIGxvZ2ljOiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIHdpbGwgZGV0ZWN0IGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChvdXQtb2YtYm91bmRzIHdyaXRlcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4pLiAqQ3J1Y2lhbGx5KiwgdGhlIGN1cnJlbnQgcGF0Y2ggc2VyaWVzIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFdlIHNob3VsZCAqb25seSogdHJpZ2dlciBLTVNBTiBpZiB0aGUgY29kZSBjaGFuZ2VzIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkICpvbmx5KiBiZSBkZXRlY3RlZCBieSBLTVNBTi4gU2luY2UgdGhlc2UgY2hhbmdlcyBkbyAqbm90KiwgSSBhbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMgYW5kLCB0aGVyZWZvcmUsIEkgYW0gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoaXMgcGF0Y2ggZG9lcyBub3QganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjUzLCJPdXRwdXRUb2tlbnMiOjI2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1Mzo0OS4zNzI3MDQ3NThaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSByZWNsYWltIGxvZ2ljIChNR0xSVSByZWZlcmVuY2UvZ2VuZXJhdGlvbiBmbGFnIGhlbHBlcnMsIG11bHRpLWdlbiBMUlUgdGllciBjYWxjdWxhdGlvbnMsIG1lbWNnIHBlci1ub2RlIExSVSB6b25lIHNpemUgYXRvbWljIGNvdW50ZXJzLCBhbmQgZm9saW8gbWlncmF0aW9uIHJlZmVyZW5jZSBzdGF0ZSBoYW5kbGluZykuXFxuXFxuMS4gTm8ga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBjb3B5aW5nIHBhdGhzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIGlvY3RsIHN0cnVjdHMsIGV0Yy4pLlxcbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIGZsYWcgdmFsdWVzIChlLmcuIGBmaWxlYCBhbmQgYG9sZF9nZW5gIGluIGBmb2xpb191cGRhdGVfZ2VuYC9gd2Fsa191cGRhdGVfZm9saW9gLCBgc3RydWN0IGN0cmxfcG9zYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGd1YXJkZWQgYnkgY29udHJvbCBmbG93IGNvbmRpdGlvbnMuXFxuMy4gTm8gbWVtb3J5IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjay9wYWdlIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBjb25jdXJyZW50IGZsYWcgdXBkYXRlcywgYXRvbWljcywgb3IgcGFnZSBzdGF0ZSB0cmFuc2l0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBzYWZldHksIGNvbmN1cnJlbmN5LCBvciBzYW5pdHkgY2hlY2tzIGhhbmRsZWQgYnkgS0FTQU4vTE9DS0RFUC9WTV9XQVJOX09OLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgcmVjbGFpbSBsb2dpYyAoTUdMUlUgcmVmZXJlbmNlL2dlbmVyYXRpb24gZmxhZyBoZWxwZXJzLCBtdWx0aS1nZW4gTFJVIHRpZXIgY2FsY3VsYXRpb25zLCBtZW1jZyBwZXItbm9kZSBMUlUgem9uZSBzaXplIGF0b21pYyBjb3VudGVycywgYW5kIGZvbGlvIG1pZ3JhdGlvbiByZWZlcmVuY2Ugc3RhdGUgaGFuZGxpbmcpLlxcblxcbjEuIE5vIGtlcm5lbC10by11c2VyIHNwYWNlIGRhdGEgY29weWluZyBwYXRocyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChubyBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBpb2N0bCBzdHJ1Y3RzLCBldGMuKS5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBmbGFnIHZhbHVlcyAoZS5nLiBgZmlsZWAgYW5kIGBvbGRfZ2VuYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAvYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHN0cnVjdCBjdHJsX3Bvc2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBvciBndWFyZGVkIGJ5IGNvbnRyb2wgZmxvdyBjb25kaXRpb25zLlxcbjMuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2svcGFnZSBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gY29uY3VycmVudCBmbGFnIHVwZGF0ZXMsIGF0b21pY3MsIG9yIHBhZ2Ugc3RhdGUgdHJhbnNpdGlvbnMgZmFsbCB1bmRlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5LCBjb25jdXJyZW5jeSwgb3Igc2FuaXR5IGNoZWNrcyBoYW5kbGVkIGJ5IEtBU0FOL0xPQ0tERVAvVk1fV0FSTl9PTi5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjn7vl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-30 18:49:54 +0000 UTC FinishedAt: 2026-08-30 18:53:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "aeddb4d52acfcc5ce5e988acd48f2906fe966ca3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "MIGRATION", "COMPACTION", "NUMA_MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "aeddb4d52acfcc5ce5e988acd48f2906fe966ca3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "MIGRATION", "COMPACTION", "NUMA_MIGRATION" ], "series_id": "f36e09ee-1523-490d-a040-0758235fc909" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "lru_gen_look_around", "mem_cgroup_update_lru_size", "folio_migrate_flags" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O05VTUFfTUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHJlY2xhaW0gbG9naWMgKE1HTFJVIHJlZmVyZW5jZS9nZW5lcmF0aW9uIGZsYWcgaGVscGVycywgbXVsdGktZ2VuIExSVSB0aWVyIGNhbGN1bGF0aW9ucywgbWVtY2cgcGVyLW5vZGUgTFJVIHpvbmUgc2l6ZSBhdG9taWMgY291bnRlcnMsIGFuZCBmb2xpbyBtaWdyYXRpb24gcmVmZXJlbmNlIHN0YXRlIGhhbmRsaW5nKS5cblxuMS4gTm8ga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBjb3B5aW5nIHBhdGhzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIGlvY3RsIHN0cnVjdHMsIGV0Yy4pLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgZmxhZyB2YWx1ZXMgKGUuZy4gYGZpbGVgIGFuZCBgb2xkX2dlbmAgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gL2B3YWxrX3VwZGF0ZV9mb2xpb2AsIGBzdHJ1Y3QgY3RybF9wb3NgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgZ3VhcmRlZCBieSBjb250cm9sIGZsb3cgY29uZGl0aW9ucy5cbjMuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2svcGFnZSBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkLlxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBjb25jdXJyZW50IGZsYWcgdXBkYXRlcywgYXRvbWljcywgb3IgcGFnZSBzdGF0ZSB0cmFuc2l0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBzYWZldHksIGNvbmN1cnJlbmN5LCBvciBzYW5pdHkgY2hlY2tzIGhhbmRsZWQgYnkgS0FTQU4vTE9DS0RFUC9WTV9XQVJOX09OLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYWNyb3NzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHRyYWNraW5nLCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcgKGNvbnZlcnRlZCB0byBhdG9taWNfbG9uZ190KSwgcGFnZSBtaWdyYXRpb24gcmVmZXJlbmNlIGNvcHlpbmcgKGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMpLCBhbmQgcGFnZSByZWNsYW1hdGlvbiBzY2FubmluZyBhbmQgdGllciBjYWxjdWxhdGlvbnMgaW4gdm1zY2FuLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBjb3JlIGtlcm5lbCBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIG1pZ3JhdGlvbiBwYXRocyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTNkMzY5OTIzODAxZjc4N2IzY2FlYWI5OWY3YjFkNjQ0OTE3NWI4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDMwIDE4OjUxOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDdkMWMwY2UxODlhODguLjFiNDlkOGI1OTFkYTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiYjNDM7XHRhdG9taWNfbG9uZ190XHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyXHRpdGVyO1xuIFxuIFx0LypcbkBAIC05MDIsMTAgJiM0Mzs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuJiM0MztcdGxvbmcgdmFsO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdHJldHVybiBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4mIzQzO1x0dmFsID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjdlNDg3YzIzYWZmNzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMTAsNiAmIzQzOzEwLDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVhZm9wcy5oXHUwMDNlXG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC5cbkBAIC0yNyw3ICYjNDM7MzIsNyBAQFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuJiM0MztcdHJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuQEAgLTE0MiwxMCAmIzQzOzE0Nyw2NiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcbiBcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7LyoqXG4mIzQzOyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxuJiM0MzsgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4mIzQzOyAqIEBnZW46IGdlbmVyYXRpb24gbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pXG4mIzQzO3tcbiYjNDM7XHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMgfHwgZ2VuIFx1MDAzYyAwKTtcbiYjNDM7XHQvKiBTdG9yZSBnZW4gb2Zmc2V0IGJ5IDEsIHplcm8gbWVhbnMgdGhlIGZvbGlvIGlzIG9mZi1saXN0LiAqL1xuJiM0MztcdCpmbGFncyBcdTAwMjY9IH5MUlVfR0VOX01BU0s7XG4mIzQzO1x0KmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGxydV9nZXRfZ2VuX2ZsYWdzIC0gUmV0dXJuIHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuIFJldHVybnNcbiYjNDM7ICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZ2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztcbiYjNDM7XHQvKiBFeGNsdWRlIHRoZSBsZWdhbCAtMSBmcm9tIHRoZSB1bnNpZ25lZCBNQVhfTlJfR0VOUyBjb21wYXJpc29uICovXG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSBcdTAwMjZcdTAwMjYgZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuJiM0MztcdHJldHVybiBnZW47XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLlxuJiM0MzsgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4mIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS5cbiYjNDM7ICpcbiYjNDM7ICogRm9yIE1HTFJVLCBQR19yZWZlcmVuY2VkIGhvbGRzIHRoZSBmaXJzdCByZWYsIGFuZCB0aGUgZXh0cmEgYml0cyBob2xkIHRoZVxuJiM0MzsgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW5cbiYjNDM7ICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxXG4mIzQzOyAqIG1lYW5zIFBHX3JlZmVyZW5jZWQgaXMgc2V0IGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgemVybywgYW5kIHJlZnMgPT0gMCBtZWFuc1xuJiM0MzsgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UocmVmcyBcdTAwM2UgTFJVX1JFRlNfTUFYKTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdCpmbGFncyBcdTAwMjY9IH5MUlVfUkVGU19GTEFHUztcbiYjNDM7XHRpZiAoIXJlZnMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0KmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRikpO1xuJiM0Mzt9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuJiM0MzsgKlxuJiM0MzsgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qXG5AQCAtMTU1LDExICYjNDM7MjE2LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4mIzQzO1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuJiM0Mzt9XG4gXG4tXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbHJ1X2dldF9nZW5fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbilcbkBAIC0yNzAsNyAmIzQzOzM0NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRmbGFncyA9IChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbiYjNDM7XHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7XG4gXHQvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbkBAIC0yOTUsNyAmIzQzOzM2OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHQvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovXG4gXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4mIzQzO1x0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4gXHRnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpO1xuQEAgLTMwNCwxMSAmIzQzOzM3OCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuJiM0MzsvKipcbiYjNDM7ICogZm9saW9fbWlncmF0ZV9scnVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xuJiM0MzsgKiBAbmV3OiB0aGUgZGVzdGluYXRpb24gZm9saW9cbiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpb1xuJiM0MzsgKlxuJiM0MzsgKiBUcmFuc2ZlciB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIEBuZXcgZHVyaW5nIG1pZ3JhdGlvbjogdGhlIE1HTFJVXG4mIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZVxuJiM0MzsgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXHUwMDNlZmxhZ3MuZikgXHUwMDI2IExSVV9SRUZTX01BU0s7XG4tXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNm5ldy1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcbiYjNDM7XHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFTSyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcbiB9XG4gI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG4gXG5AQCAtMzM3LDkgJiM0Mzs0MTksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXG4mIzQzO1x0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKVxuJiM0MztcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDkyLDExICYjNDM7NDkyLDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHtcbiAgKiBmb2xpby1cdTAwM2VmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suXG4gICovXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcdFx0NFVcbiYjNDM7I2RlZmluZSBMUlVfVElFUl9NSU5cdFx0MFVcbiYjNDM7I2RlZmluZSBMUlVfVElFUl9NQVhcdFx0KE1BWF9OUl9USUVSUyAtIDEpXG4gXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcbiBcbiAjZGVmaW5lIExSVV9HRU5fTUFTS1x0XHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKVxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1x0XHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpXG4mIzQzOyNkZWZpbmUgTFJVX1JFRlNfTUFYXHRcdEJJVChMUlVfUkVGU19XSURUSClcbiBcbiAvKlxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxuZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jXG5pbmRleCBjMDJkY2VhOWMwM2MyLi5mYjg3NGZlNDkyYjJiIDEwMDY0NFxuLS0tIGEvbW0vZm9saW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZm9saW8uY1xuQEAgLTM1MywyNiAmIzQzOzM1MywyOCBAQCBzdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4mIzQzO1x0aW50IHJlZnM7XG4gXG4gXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuLVx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkge1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykge1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcdFx0cmVmcyA9IGxydV9nZXRfcmVmc19mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcdFx0aWYgKHJlZnMgPT0gTFJVX1JFRlNfTUFYKSB7XG4gXHRcdFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxuIFx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuJiM0MztcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyAmIzQzOyAxKTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGdlbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTtcbiYjNDM7XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTI3MWQzOTBiNjE3ZS4uZjkxNTQwZmVhZjczNSAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCAmIzQzOzE1MjksMTIgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRcdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcbi1cdGxvbmcgc2l6ZTtcbiBcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRscnVfc2l6ZSA9IFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHQqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzO1xuLVxuLVx0c2l6ZSA9ICpscnVfc2l6ZTtcbi1cdGlmIChXQVJOX09OQ0Uoc2l6ZSBcdTAwM2MgMCxcbi1cdFx0XCYjMzQ7JXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cJiMzNDssXG4tXHRcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XG4tXHRcdFZNX0JVR19PTigxKTtcbi1cdFx0KmxydV9zaXplID0gMDtcbi1cdH1cbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMClcbi1cdFx0KmxydV9zaXplICYjNDM7PSBucl9wYWdlcztcbiYjNDM7XHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCAmIzQzOzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuJiM0MztcdC8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi9cbiYjNDM7XHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4mIzQzO1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyAmIzQzOzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4gXHRcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcbiBcbi1cdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuIFx0LypcbiBcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxuIFx0ICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZjExNDkxZWU5ZWQ1Yy4uODdlNjY3YzQxMGVkNCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTg0MywxOSAmIzQzOzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4gXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbiYjNDM7XHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuJiM0MztcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuQEAgLTMxOTUsOCAmIzQzOzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuJiM0MztzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbiYjNDM7XHRcdFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbiB7XG4gXHRpbnQgaTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykge1xuIFx0XHRwb3MtXHUwMDNlcmVmYXVsdGVkICYjNDM7PSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSAmIzQzO1xuIFx0XHRcdFx0ICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xuIFx0XHRwb3MtXHUwMDNldG90YWwgJiM0Mzs9IGxydWdlbi1cdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gJiM0MztcbkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLFxuJiM0MztcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuJiM0MztcdGludCBvbGRfZ2VuO1xuIFxuIFx0LypcbiBcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXG5AQCAtMzI3OSwyMCAmIzQzOzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiBcdGRvIHtcbiYjNDM7XHRcdG9sZF9nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7XHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4mIzQzO1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbiYjNDM7XHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztcdCppc19maWxlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXHUwMDI2b2xkX2ZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAxLDIxICYjNDM7MzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbiBcdGRvIHtcbi1cdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4mIzQzO1x0XHRuZXdfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcbiYjNDM7XG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuIFx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcbiYjNDM7XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiBcdFx0bmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO1x0XHRscnVfc2V0X2dlbl9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuJiM0MztcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXG5AQCAtMzMyMyw5ICYjNDM7MzMzMCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuJiM0MztcdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcbiBcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbkBAIC0zNTEyLDIyICYjNDM7MzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4mIzQzO1x0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpXG4ge1xuLVx0aW50IG9sZF9nZW47XG4mIzQzO1x0aW50IG5ld19nZW4sIG9sZF9nZW4sIGZpbGU7XG4gXG4gXHRpZiAoIWZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuJiM0MztcbiBcdGlmIChkaXJ0eSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiBcbiBcdGlmICh3YWxrKSB7XG4tXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNmZpbGUsIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuLVx0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiYjNDM7XHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICYjNDM7MzU1Nyw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0dW5zaWduZWQgaW50IG5yO1xuIFx0cG1kX3QgcG1kdmFsO1xuIFxuQEAgLTM2MDEsNyAmIzQzOzM2MDcsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyAmIzQzOzM2MjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSAmIzQzOz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggJiM0MzszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7XG4gXG5AQCAtMzY5Miw3ICYjNDM7MzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdFx0Z290byBuZXh0O1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgJiM0MzszNzEwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0aSA9IGkgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7XG4gXHR9IHdoaWxlIChpIFx1MDAzYz0gTUlOX0xSVV9CQVRDSCk7XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggJiM0Mzs0Mjc0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi1cdGludCBnZW47XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXHUwMDNlcHRsKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbkBAIC00MzA4LDggJiM0Mzs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFxuIFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4tXHRtYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKTtcbi1cdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbkBAIC00MzQxLDcgJiM0Mzs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtNDM1MywxMyAmIzQzOzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHR5b3VuZyAmIzQzOz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiBcdC8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqL1xuIFx0aWYgKG1tX3N0YXRlIFx1MDAyNlx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcbi1cdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cdTAwM2VwbWQpO1xuJiM0MztcdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSksXG4mIzQzO1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzE2LDcgJiM0Mzs0NzE3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApO1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcbiBcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xuQEAgLTQ4MDksOSAmIzQzOzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykge1xuLVx0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgXHUwMDI2cHYpO1xuJiM0MztcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuJiM0MztcdGZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyIFx1MDAzYz0gTFJVX1RJRVJfTUFYOyB0aWVyJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbiBcdFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTQ4MzIsOCAmIzQzOzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbiYjNDM7XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbiYjNDM7XHRcdCAgICAgIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbiYjNDM7XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbiYjNDM7XHRcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuIFxuIFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG4gfVxuQEAgLTQ5MzIsOCAmIzQzOzQ5MzUsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdH1cbiBcbiBcdFx0LyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4mIzQzO1x0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDssCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7TlVNQV9NSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDssCiAgICAmIzM0O2ZvbGlvX21pZ3JhdGVfZmxhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhY3Jvc3MgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgdHJhY2tpbmcsIG1lbWNnIExSVSB6b25lIHNpemUgYWNjb3VudGluZyAoY29udmVydGVkIHRvIGF0b21pY19sb25nX3QpLCBwYWdlIG1pZ3JhdGlvbiByZWZlcmVuY2UgY29weWluZyAoZm9saW9fbWlncmF0ZV9scnVfcmVmcyksIGFuZCBwYWdlIHJlY2xhbWF0aW9uIHNjYW5uaW5nIGFuZCB0aWVyIGNhbGN1bGF0aW9ucyBpbiB2bXNjYW4uIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IGNvcmUga2VybmVsIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgbWlncmF0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5M2QzNjk5MjM4MDFmNzg3YjNjYWVhYjk5ZjdiMWQ2NDQ5MTc1Yjg1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMzAgMTg6NTE6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDdkMWMwY2UxODlhODguLjFiNDlkOGI1OTFkYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHsKIAkvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi8KIAlzdHJ1Y3QgbHJ1dmVjCQlscnV2ZWM7CiAJQ0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTsKLQl1bnNpZ25lZCBsb25nCQlscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTsKJiM0MzsJYXRvbWljX2xvbmdfdAkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtOTAyLDEwICYjNDM7OTAyLDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IGF0b21pY19sb25nX3JlYWQoJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi43ZTQ4N2MyM2FmZjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTEwLDYgJiM0MzsxMCwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJmYXVsdGZkX2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sZWFmb3BzLmgmZ3Q7CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qKgogICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LgpAQCAtMjcsNyAmIzQzOzMyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7CiYjNDM7CXJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpOwogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLApAQCAtMTQyLDEwICYjNDM7MTQ3LDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KQogCXJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MzsvKioKJiM0MzsgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzCiYjNDM7ICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pCiYjNDM7ewomIzQzOwlCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLICZhbXA7IExSVV9SRUZTX01BU0spOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TIHx8IGdlbiAmbHQ7IDApOwomIzQzOwkvKiBTdG9yZSBnZW4gb2Zmc2V0IGJ5IDEsIHplcm8gbWVhbnMgdGhlIGZvbGlvIGlzIG9mZi1saXN0LiAqLwomIzQzOwkqZmxhZ3MgJmFtcDs9IH5MUlVfR0VOX01BU0s7CiYjNDM7CSpmbGFncyB8PSAoZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3MKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJucwomIzQzOyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwomIzQzOwkvKiBFeGNsdWRlIHRoZSBsZWdhbCAtMSBmcm9tIHRoZSB1bnNpZ25lZCBNQVhfTlJfR0VOUyBjb21wYXJpc29uICovCiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgJmFtcDsmYW1wOyBnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwomIzQzOwlyZXR1cm4gZ2VuOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuCiYjNDM7ICoKJiM0MzsgKiBGb3IgTUdMUlUsIFBHX3JlZmVyZW5jZWQgaG9sZHMgdGhlIGZpcnN0IHJlZiwgYW5kIHRoZSBleHRyYSBiaXRzIGhvbGQgdGhlCiYjNDM7ICogcmVtYWluaW5nIHJlZnMuIEZvciBjbGFzc2ljYWwgTFJVIHRoZSBleHRyYSBiaXRzIGFyZSBub3QgdXNlZCwgc28gaXQgY2FuCiYjNDM7ICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxCiYjNDM7ICogbWVhbnMgUEdfcmVmZXJlbmNlZCBpcyBzZXQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSB6ZXJvLCBhbmQgcmVmcyA9PSAwIG1lYW5zCiYjNDM7ICogUEdfcmVmZXJlbmNlZCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIGFsbCB1bnNldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKHJlZnMgJmd0OyBMUlVfUkVGU19NQVgpOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJKmZsYWdzICZhbXA7PSB+TFJVX1JFRlNfRkxBR1M7CiYjNDM7CWlmICghcmVmcykKJiM0MzsJCXJldHVybjsKJiM0MzsJKmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpICZsdDsmbHQ7IExSVV9SRUZTX1BHT0ZGKSk7CiYjNDM7fQogCiYjNDM7LyoqCiYjNDM7ICogbHJ1X2dldF9yZWZzX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHNldCBieSBscnVfc2V0X3JlZnNfZmxhZ3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiAJaWYgKCEoZmxhZ3MgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKSkKIAkJcmV0dXJuIDA7CiAJLyoKQEAgLTE1NSwxMSAmIzQzOzIxNiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfZ2V0X3JlZnNfZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzKTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzO30KIAotCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKQpAQCAtMjcwLDcgJiM0MzszNDQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKIAlmbGFncyA9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi8KLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiYjNDM7CXNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTsKIAkvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi8KQEAgLTI5NSw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAogCS8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi8KIAlmbGFncyA9ICFyZWNsYWltaW5nICZhbXA7JmFtcDsgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwOwotCWZsYWdzID0gc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKJiM0MzsJZmxhZ3MgPSBzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLLCBmbGFncyk7CiAJZ2VuID0gKChmbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKIAogCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7CkBAIC0zMDQsMTEgJiM0MzszNzgsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiYjNDM7LyoqCiYjNDM7ICogZm9saW9fbWlncmF0ZV9scnVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpbwomIzQzOyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpbwomIzQzOyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW8KJiM0MzsgKgomIzQzOyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlUKJiM0MzsgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGUKJiM0MzsgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQl1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLSZndDtmbGFncy5mKSAmYW1wOyBMUlVfUkVGU19NQVNLOwotCi0Jc2V0X21hc2tfYml0cygmYW1wO25ldy0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLICZhbXA7IEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CWZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpOwogfQogI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovCiAKQEAgLTMzNyw5ICYjNDM7NDE5LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiB7Ci0KJiM0MzsJaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKQomIzQzOwkJZm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTsKIH0KICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA5NGY5YzNmZjU0MTYwLi45YjI3Y2Y1M2JkYmM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTQ5MiwxMSAmIzQzOzQ5MiwxNCBAQCBlbnVtIGxydXZlY19mbGFncyB7CiAgKiBmb2xpby0mZ3Q7ZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLgogICovCiAjZGVmaW5lIE1BWF9OUl9USUVSUwkJNFUKJiM0MzsjZGVmaW5lIExSVV9USUVSX01JTgkJMFUKJiM0MzsjZGVmaW5lIExSVV9USUVSX01BWAkJKE1BWF9OUl9USUVSUyAtIDEpCiAKICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19ICiAKICNkZWZpbmUgTFJVX0dFTl9NQVNLCQkoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkYpCiAjZGVmaW5lIExSVV9SRUZTX01BU0sJCSgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpICZsdDsmbHQ7IExSVV9SRUZTX1BHT0ZGKQomIzQzOyNkZWZpbmUgTFJVX1JFRlNfTUFYCQlCSVQoTFJVX1JFRlNfV0lEVEgpCiAKIC8qCiAgKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycywKZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jCmluZGV4IGMwMmRjZWE5YzAzYzIuLmZiODc0ZmU0OTJiMmIgMTAwNjQ0Ci0tLSBhL21tL2ZvbGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZm9saW8uYwpAQCAtMzUzLDI2ICYjNDM7MzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IHJlZnM7CiAKIAlpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpCiAJCXJldHVybjsKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwotCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CWlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm47CiAJfQogCiAJZG8gewotCQlpZiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CQlyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQlpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHsKIAkJCWlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkKIAkJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiAJCQlyZXR1cm47CiAJCX0KLQotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiB9CiAKIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQpAQCAtMzg0LDcgJiM0MzszODYsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZ2VuICZsdDsgMCkKIAkJcmV0dXJuIHRydWU7CiAKLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJZm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJc2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktJmd0O2xydWdlbi5taW5fc2VxW3R5cGVdKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxMjcxZDM5MGI2MTdlLi5mOTE1NDBmZWFmNzM1IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0xNTI5LDI4ICYjNDM7MTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsCiAJCQkJaW50IHppZCwgbG9uZyBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7Ci0JdW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7Ci0JbG9uZyBzaXplOwogCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuOwogCiAJbXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKLQlscnVfc2l6ZSA9ICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdOwotCi0JaWYgKG5yX3BhZ2VzICZsdDsgMCkKLQkJKmxydV9zaXplICYjNDM7PSBucl9wYWdlczsKLQotCXNpemUgPSAqbHJ1X3NpemU7Ci0JaWYgKFdBUk5fT05DRShzaXplICZsdDsgMCwKLQkJJiMzNDslcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxuJiMzNDssCi0JCV9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7Ci0JCVZNX0JVR19PTigxKTsKLQkJKmxydV9zaXplID0gMDsKLQl9Ci0KLQlpZiAobnJfcGFnZXMgJmd0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwlhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtNzc2LDggJiM0Mzs3NzYsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpbnQgY3B1cGlkOwogCi0JaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCWZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTsKJiM0MzsJLyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqLwomIzQzOwlmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiYjNDM7CiAJaWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKQogCQlmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTsKIAlpZiAoZm9saW9fdGVzdF9jbGVhcl9hY3RpdmUoZm9saW8pKSB7CkBAIC04MDcsNyAmIzQzOzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKQogCQlmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7CiAKLQlmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTsKIAkvKgogCSAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlcgogCSAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBmMTE0OTFlZTllZDVjLi44N2U2NjdjNDEwZWQ0IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtODQzLDE5ICYjNDM7ODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkgewogCQkvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi8KIAkJaWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKJiM0MzsJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CiAKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqLwotCWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpOwotCWVsc2UKJiM0MzsJaWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSAmZ3Q7IDEpIHsKJiM0MzsJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CX0gZWxzZSB7CiAJCWZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pOwomIzQzOwl9CiAJcmV0dXJuIHRydWU7CiB9CiAjZWxzZQpAQCAtMzE5NSw4ICYjNDM7MzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7CiAJaW50IGdhaW47CiB9OwogCi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKLQkJCSAgc3RydWN0IGN0cmxfcG9zICpwb3MpCiYjNDM7c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sCiYjNDM7CQkJICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKIAlwb3MtJmd0O2dhaW4gPSBnYWluOwogCXBvcy0mZ3Q7cmVmYXVsdGVkID0gcG9zLSZndDt0b3RhbCA9IDA7CiAKLQlmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpICZsdDs9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gdGllcl9taW47IGkgJmx0Oz0gdGllcl9tYXg7IGkmIzQzOyYjNDM7KSB7CiAJCXBvcy0mZ3Q7cmVmYXVsdGVkICYjNDM7PSBscnVnZW4tJmd0O2F2Z19yZWZhdWx0ZWRbdHlwZV1baV0gJiM0MzsKIAkJCQkgIGF0b21pY19sb25nX3JlYWQoJmFtcDtscnVnZW4tJmd0O3JlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7CiAJCXBvcy0mZ3Q7dG90YWwgJiM0Mzs9IGxydWdlbi0mZ3Q7YXZnX3RvdGFsW3R5cGVdW2ldICYjNDM7CkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovCi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKJiM0MztzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSwKJiM0MzsJCQkgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgb2xkX2dlbjsKIAogCS8qCiAJICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWQKQEAgLTMyNzksMjAgJiM0MzszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hCiAJICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlkbyB7CiYjNDM7CQlvbGRfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsKIAkJLyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqLwotCQlpZiAoIShvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSkKLQkJCXJldHVybiAtMTsKJiM0MzsJCWlmIChvbGRfZ2VuICZsdDsgMCkKJiM0MzsJCQlicmVhazsKIAotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJmFtcDsgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7Ci0JCW5ld19mbGFncyB8PSAoKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X2dlbl9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwkJbmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCi0JcmV0dXJuICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KCZhbXA7b2xkX2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG9sZF9nZW47CiB9CiAKIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovCkBAIC0zMzAxLDIxICYjNDM7MzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwotCi0JVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKIAogCWRvIHsKLQkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkJbmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CiAJCS8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqLwogCQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKQogCQkJcmV0dXJuIG5ld19nZW47CiAKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKIAkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7Ci0KLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X2dlbl9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwogCkBAIC0zMzIzLDkgJiM0MzszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbywKLQkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbikKJiM0MzsJCQkgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKQogewotCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCWludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7CiAJaW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCkBAIC0zNTEyLDIyICYjNDM7MzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKQogfQogCiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpCiYjNDM7CQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpCiB7Ci0JaW50IG9sZF9nZW47CiYjNDM7CWludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlOwogCiAJaWYgKCFmb2xpbykKIAkJcmV0dXJuOwogCiYjNDM7CW5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxKSk7CiYjNDM7CiAJaWYgKGRpcnR5ICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpCiAJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwogCiAJaWYgKHdhbGspIHsKLQkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7dm1hLSZndDtmbGFncyk7CiYjNDM7CQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDtmaWxlLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQotCQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwomIzQzOwkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCBmaWxlKTsKIAl9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sICZhbXA7dm1hLSZndDtmbGFncykpIHsKIAkJb2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQpAQCAtMzU0OSw4ICYjNDM7MzU1Nyw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCXVuc2lnbmVkIGludCBucjsKIAlwbWRfdCBwbWR2YWw7CiAKQEAgLTM2MDEsNyAmIzQzOzM2MDcsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNjE0LDcgJiM0MzszNjIwLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCXdhbGstJmd0O21tX3N0YXRzW01NX0xFQUZfWU9VTkddICYjNDM7PSBucjsKIAl9CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCWxhc3QgPSBOVUxMOwogCiAJaWYgKGkgJmx0OyBQVFJTX1BFUl9QVEUgJmFtcDsmYW1wOyBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgJmFtcDtzdGFydCwgJmFtcDtlbmQpKQpAQCAtMzYzNyw4ICYjNDM7MzY0Myw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtJmd0O3ByaXZhdGU7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstJmd0O2xydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLSZndDtscnV2ZWMpOwotCURFRklORV9NQVhfU0VRKHdhbGstJmd0O2xydXZlYyk7Ci0JaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAKIAlWTV9XQVJOX09OX09OQ0UocHVkX2xlYWYoKnB1ZCkpOwogCkBAIC0zNjkyLDcgJiM0MzszNjk2LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJCWdvdG8gbmV4dDsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzcwNiw3ICYjNDM7MzcxMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCWkgPSBpICZndDsgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgJiM0MzsgMTsKIAl9IHdoaWxlIChpICZsdDs9IE1JTl9MUlVfQkFUQ0gpOwogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCXNwaW5fdW5sb2NrKHB0bCk7CkBAIC00MjcwLDggJiM0Mzs0Mjc0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7CiAJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwogCXN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTsKLQl1bnNpZ25lZCBsb25nIG1heF9zZXE7Ci0JaW50IGdlbjsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy0mZ3Q7cHRsKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7CkBAIC00MzA4LDggJiM0Mzs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCiAJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTsKIAlscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOwotCW1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktJmd0O2xydWdlbi5tYXhfc2VxKTsKLQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCW1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7CiAKIAlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwpAQCAtNDM0MSw3ICYjNDM7NDM0MSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC00MzUzLDEzICYjNDM7NDM1MywxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCXlvdW5nICYjNDM7PSBucjsKIAl9CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAKIAkvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi8KIAlpZiAobW1fc3RhdGUgJmFtcDsmYW1wOyBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSkKLQkJdXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy0mZ3Q7cG1kKTsKJiM0MzsJCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxKSwKJiM0MzsJCQkJICAgIHB2bXctJmd0O3BtZCk7CiAKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAKQEAgLTQ3MTYsNyAmIzQzOzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYQogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAogCXN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTsKQEAgLTQ4MDksOSAmIzQzOzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQogCSAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZQogCSAqIGFzIG1hbnkgcmVmYXVsdHMgYXMgdGhlIGZpcnN0IHRpZXIuCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsICZhbXA7c3ApOwotCWZvciAodGllciA9IDE7IHRpZXIgJmx0OyBNQVhfTlJfVElFUlM7IHRpZXImIzQzOyYjNDM7KSB7Ci0JCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUlOLCAyLCAmYW1wO3NwKTsKJiM0MzsJZm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICYjNDM7IDE7IHRpZXIgJmx0Oz0gTFJVX1RJRVJfTUFYOyB0aWVyJiM0MzsmIzQzOykgewomIzQzOwkJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsICZhbXA7cHYpOwogCQlpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpKQogCQkJYnJlYWs7CiAJfQpAQCAtNDgzMiw4ICYjNDM7NDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIAkgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lCiAJICogd2hpY2ggdHlwZSB0byBzY2FuLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgJmFtcDtzcCk7Ci0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCwKJiM0MzsJCSAgICAgIHN3YXBwaW5lc3MsICZhbXA7c3ApOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCwKJiM0MzsJCSAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiAKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CkBAIC00OTMyLDggJiM0Mzs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQl9CiAKIAkJLyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovCi0JCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTsKJiM0MzsJCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkgewomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CQkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CQl9CiAJfQogCiAJbW92ZV9mb2xpb3NfdG9fbHJ1KCZhbXA7bGlzdCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjU2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgdG91Y2hlZCBmaWxlcyBpbW1lZGlhdGVseSBzaWduYWwgdGhhdCB0aGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgbGlrZWx5IHRvdWNoaW5nIE11bHRpLUdlbiBMUlUgKE1HTFJVLCBvciBgQ09ORklHX0xSVV9HRU5gIGZvciB1cyksIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZy4gSSBzZWUgY2hhbmdlcyBpbiBgbWVtY29udHJvbC5oYCBhbmQgYG1lbWNvbnRyb2wuY2AsIHNvIEkgZXhwZWN0IG1lbWNnIExSVSB6b25lIHNpemUgYWNjb3VudGluZyBpcyBiZWluZyBtb2RpZmllZC4gVGhlIHN3aXRjaCBmcm9tIGBscnVfem9uZV9zaXplYCB0byBgYXRvbWljX2xvbmdfdGAgY29uZmlybXMgdGhhdCBzdXNwaWNpb24uCgpCZXlvbmQgdGhhdCwgdGhlIGZpbGUgbGlzdCBzdWdnZXN0cyByZWZhY3RvcmluZyBvZiBmb2xpbyBmbGFncyByZWxhdGVkIHRvIExSVSByZWZlcmVuY2VzIGFuZCBnZW5lcmF0aW9ucywgd2hpY2ggYXJlIGZ1bmRhbWVudGFsIHRvIGhvdyBNR0xSVSB3b3Jrcy4gTWlncmF0aW9uIG9mIExSVSByZWZlcmVuY2VzIGlzIHByZXNlbnQsIHdoaWNoIGlzIGEga2V5IHByb2Nlc3Mgd2hlbiB0aGUgTFJVIG5lZWRzIHRvIGNoYW5nZSwgYW5kIG9mIGNvdXJzZSwgdm1zY2FuIGxvZ2ljIGlzIGFsc28gYWZmZWN0ZWQuIEFsbCBlc3NlbnRpYWwgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gSSYjMzk7bGwgcHJvYmFibHkgZG8gYSBxdWljayBnaXQgZ3JlcCBmb3IgYENPTkZJR19MUlVfR0VOYCBhbmQgYE1FTUNHYCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiByZXF1aXJlbWVudHMgYW5kIHRoZSBzcGVjaWZpYyBmZWF0dXJlcyBiZWluZyBlbmFibGVkIGFuZC9vciBtb2RpZmllZCBieSB0aGlzIHBhdGNoLiBUaGlzIGlzIGdvaW5nIHRvIGJlIG15IGtleSBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTQwMy0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDUtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTItXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDE0LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxOC1cbm1tL0tjb25maWc6MTQxOTpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDIwLVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjctXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS2NvbmZpZyBmb3IgTFJVIGFuZCBNZW1jZyBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYExSVV9HRU5gIGFuZCBgTUVNQ0dgIGFyZSBpbnRlcmFjdGluZyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGRlZmluaXRpb25zIGluIGBtbS9LY29uZmlnYCBhcmUgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGRlZmluZWQgYW5kIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIGZlYXR1cmVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgTFJVX0dFTmAgaXMgZGVwZW5kZW50IG9uIGBNRU1DR2AsIG9yIGlmIHRoZXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgb3IgaWYgdGhlcmUmIzM5O3MgbW9yZSBjb21wbGV4IGxvZ2ljIGF0IHBsYXkuIEkmIzM5O2xsIGZvY3VzIG9uIHdoYXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IHRoZSBvcHRpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgY3J1Y2lhbCB0byBnZXQgYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDAwOlx0XHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cbjE0MDE6XHRcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cbjE0MDI6XHRcbjE0MDM6XHQjIG11bHRpLWdlbiBMUlUge1xuMTQwNDpcdGNvbmZpZyBMUlVfR0VOXG4xNDA1Olx0XHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbjE0MDY6XHRcdGRlcGVuZHMgb24gTU1VXG4xNDA3Olx0XHQjIG1ha2Ugc3VyZSBmb2xpby1cdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcbjE0MDg6XHRcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxuMTQwOTpcdFx0aGVscFxuMTQxMDpcdFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcbjE0MTE6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxuMTQxMjpcdFxuMTQxMzpcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbjE0MTQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbjE0MTU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxNjpcdFx0aGVscFxuMTQxNzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXG4xNDE4Olx0XG4xNDE5Olx0Y29uZmlnIExSVV9HRU5fU1RBVFNcbjE0MjA6XHRcdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4xNDIxOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MjI6XHRcdGhlbHBcbjE0MjM6XHRcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXG4xNDI0Olx0XHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXG4xNDI1Olx0XG4xNDI2Olx0XHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxuMTQyNzpcdFxuMTQyODpcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxuMTQyOTpcdFx0ZGVmX2Jvb2wgeVxuMTQzMDpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbjE0MzE6XHQjIH1cbjE0MzI6XHRcbjE0MzM6XHRjb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbjE0MzQ6XHQgICAgICAgZGVmX2Jvb2wgblxuMTQzNTpcdFxuMTQzNjpcdGNvbmZpZyBQRVJfVk1BX0xPQ0tcbjE0Mzc6XHRcdGRlZl9ib29sIHlcbjE0Mzg6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXHUwMDI2XHUwMDI2IE1NVSBcdTAwMjZcdTAwMjYgU01QXG4xNDM5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIHRoaXMgaXNzdWUsIGFuZCBuYXR1cmFsbHksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUmIzM5O3MgdGhlIHVzdWFsIHN1c3BlY3Q/JiMzNDsgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBNRU1DR2AgS2NvbmZpZyBvcHRpb25zLiBZb3Uga25vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGUgYmFzaWMgYnVpbGRpbmcgYmxvY2tzIGFyZSBlbmFibGVkIGFuZCBjb25maWd1cmVkIGFzIGV4cGVjdGVkLiBJdCYjMzk7cyBlYXN5IHRvIHdhc3RlIHRpbWUgY2hhc2luZyBnaG9zdHMgaWYgc29tZXRoaW5nIHNpbXBsZSBpcyBvZmYgaW4gdGhlIGNvbmZpZy4gR290dGEgcnVsZSBvdXQgdGhlIG9idmlvdXMgZmlyc3QsIGFsd2F5cy4gTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBgTUVNQ0dgIEtjb25maWcsIHNwZWNpZmljYWxseSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTEzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUgZm9yIE1FTUNHIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgYW55dGhpbmcgcmVsYXRlZCB0byBgTUVNQ0dgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggTWVtb3J5IENvbnRyb2wgR3JvdXBzLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhLCBzbyBhIHN5c3RlbWF0aWMgZXhwbG9yYXRpb24gaXMgaW4gb3JkZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgZXhwb3NlcyBNRU1DRyBzZXR0aW5ncyB0byB0aGUgYnVpbGQgc3lzdGVtLiBBcmUgdGhlcmUgYW55IG5ldyBvcHRpb25zIGludHJvZHVjZWQ/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgSSBtYXkgaGF2ZSBmb3Jnb3R0ZW4/IEkmIzM5O20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIG1haW4gTUVNQ0cgZW5hYmxpbmcgb3B0aW9uLCBhbnkgYXNzb2NpYXRlZCBzdWJzeXN0ZW0tc3BlY2lmaWMgY29udHJvbHMgKGxpa2UgcmVzb3VyY2UgbGltaXRzKSwgYW5kIHBvc3NpYmx5IGV2ZW4gZWFybHkgYm9vdCBjb25maWd1cmF0aW9uIGRldGFpbHMgdGhhdCBhcmUgcmVsZXZhbnQuIEtub3dpbmcgdGhlIEtjb25maWcgc3RydWN0dXJlIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgTUVNQ0cmIzM5O3MgYXZhaWxhYmxlIGZlYXR1cmVzIGFuZCBob3cgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlbSBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4MDpcdFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcbjEwODE6XHRcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cbjEwODI6XHRcbjEwODM6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTA4NDpcdFxuMTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwOTA6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA5MTpcdFx0aGVscFxuMTA5MjpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDkzOlx0XG4xMDk0Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDk5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBvZiBUaGVzZSBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBmb2N1c2VzIG9uIGlkZW50aWZ5aW5nIHRoZSBhZmZlY3RlZCBmdW5jdGlvbnMgYW5kIGlmIGFueXRoaW5nIG5vbi10cml2aWFsIGlzIGhhcHBlbmluZyB3aXRoIHRoZW0uIEkmIzM5O20gbWFpbmx5IGludGVyZXN0ZWQgaW4gbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFzIHRob3NlIHJlcHJlc2VudCB0aGUgZW50cnkgcG9pbnRzIG9yIGtleSBwaWVjZXMgb2YgdGhlIGNoYW5nZWQgbG9naWMgdGhhdCBJIHdpbGwgbmVlZCB0byBsb29rIGludG8gYW5kIHVuZGVyc3RhbmQgaW4gbW9yZSBkZXRhaWwsIGFzIHdlbGwgYXMgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkLgoKU28sIEkgc2VlIGNoYW5nZXMgYWNyb3NzIGEgZmV3IGZpbGVzLgoKSW4gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgdGhlIGBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZWAgaXMgY2hhbmdlZCwgc3BlY2lmaWNhbGx5IGBscnVfem9uZV9zaXplYCB3aGljaCBpcyBub3cgYW4gYGF0b21pY19sb25nX3RgLiAgQWxzbywgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgIGlzIGNoYW5nZWQgdG8gYmVjb21lIGEgYHN0YXRpYyBpbmxpbmVgIGZ1bmN0aW9uLiBOb3QgbXVjaCB0byBiZSBjb25jZXJuZWQgYWJvdXQgeWV0LgoKVGhlbiwgdGhlcmUmIzM5O3MgYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgLCB3aGljaCBjb250YWlucyBudW1lcm91cyBgc3RhdGljIGlubGluZWAgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZm9saW8gTFJVIG1hbmFnZW1lbnQ6IGBmb2xpb19mbGFnc19pc19maWxlX2xydWAsIGBmb2xpb19pc19maWxlX2xydWAsIGFuZCBzZXZlcmFsIHJlbGF0ZWQgdG8gZmxhZ3MgYW5kIHJlZmVyZW5jZSBjb3VudHMgbGlrZSBgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19scnVfcmVmc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbHJ1X2dlbmAsIGBscnVfZ2VuX2FkZF9mb2xpb2AsIGBscnVfZ2VuX2RlbF9mb2xpb2AsIGFuZCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AuIExvb2tzIGxpa2UgYSBsb3Qgb2YgaW5saW5lIGZ1bmN0aW9ucywgdGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4KCk5leHQsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCBpbnRyb2R1Y2VzIHNvbWUgbmV3IG1hY3JvczogYExSVV9USUVSX01JTmAsIGBMUlVfVElFUl9NQVhgLCBhbmQgYExSVV9SRUZTX01BWGAuIEkmIzM5O2xsIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVzZSwgYnV0IHRoZXkgYXJlIG1vc3QgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGlubGluZSBmdW5jdGlvbiBjaGFuZ2VzIG1lbnRpb25lZCBwcmV2aW91c2x5LgoKYG1tL2ZvbGlvLmNgIGhhcyBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgIGFzIHN0YXRpYyBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhlc2UgYW5kIHRoZSBhZm9yZW1lbnRpb25lZCBmb2xpbyBmdW5jdGlvbnMuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0cy4gSW4gYG1tL21lbWNvbnRyb2wuY2AsIHRoZXJlJiMzOTtzIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIHdoaWNoICppc24mIzM5O3QqIHN0YXRpYy4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBzbyBpdCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGV4cGxvcmluZyB0aGVzZSBjaGFuZ2VzLiBJbiBgbW0vbWlncmF0ZS5jYCwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIG5vbi1zdGF0aWMsIHNvIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgZm9yIHRoaXMuIEZpbmFsbHksIGBtbS92bXNjYW4uY2AgY29udGFpbnMgc2V2ZXJhbCBzdGF0aWMgZnVuY3Rpb25zLCBhbmQgb25lIG5vbi1zdGF0aWMgKGFuZCBleHBvcnRlZCkgZnVuY3Rpb24gYGxydV9nZW5fbG9va19hcm91bmRgLiBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoaXMgZnVydGhlci4gVGhlIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZSBjYW4gYmUgc2VlbiBhcyBhdXhpbGlhcnkgZnVuY3Rpb25zLgoKU28sIHRvIHN1bW1hcml6ZSwgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgYXJlIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpcyBoYXBwZW5pbmcgd2l0aCB0aGVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9OTE4PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTk4Mi1cdFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSBcdTAwMjZcdTAwMjYgcHZtdy5wdGUpIHtcbm1tL3JtYXAuYzo5ODM6XHRcdFx0aWYgKGxydV9nZW5fbG9va19hcm91bmQoXHUwMDI2cHZtdywgbnIpKVxubW0vcm1hcC5jLTk4NC1cdFx0XHRcdHJlZmVyZW5jZWQmIzQzOyYjNDM7O1xuLS1cbm1tL3Ztc2Nhbi5jPTI3OTE9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy0yODIwLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxubW0vdm1zY2FuLmM6MjgyMTogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXG5tbS92bXNjYW4uYy0yODIyLSAqXG4tLVxubW0vdm1zY2FuLmM9NDA3ND1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MDkzLVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MDk0Olx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQwOTUtXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MjEzPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDI1OS0gKi9cbm1tL3Ztc2Nhbi5jOjQyNjA6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDI2MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODkzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIEtleSBQZXJmb3JtYW5jZSBJbmRpY2F0b3JzKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZm9jdXNpbmcgb24gdHdvIGNyaXRpY2FsIHN5c3RlbSBmbGFnczogYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGFuZCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLiBUaGVzZSBhcmUgb2Z0ZW4gdGhlIGN1bHByaXRzIHdoZW4gSSBzZWUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBtZW1vcnkgYmVoYXZpb3IsIHNvIGl0JiMzOTtzIHNtYXJ0IHRvIHN0YXJ0IHdpdGggdGhlbS4gQSBxdWljayBhdWRpdCBvZiB0aGVpciBjdXJyZW50IHNldHRpbmdzIHdpbGwgdGVsbCBtZSBhIGxvdC4gQXJlIHRoZXkgc2V0IGFzIGV4cGVjdGVkLCBnaXZlbiB0aGUgd29ya2xvYWQgYW5kIGhhcmR3YXJlIHByb2ZpbGU/IEFueSBkZXZpYXRpb25zIGZyb20gdGhlIHJlY29tbWVuZGVkIHZhbHVlcyBjb3VsZCBpbW1lZGlhdGVseSBwb2ludCB0byB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUgSSYjMzk7bSBkZWJ1Z2dpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgaG93IHRoZXNlIGZsYWdzIGludGVyYWN0IHdpdGggYW55IHJlY2VudCBrZXJuZWwgdXBncmFkZXMsIGJlY2F1c2UgY2hhbmdlcyB0aGVyZSBjYW4gZWFzaWx5IGludmFsaWRhdGUgZXN0YWJsaXNoZWQgYXNzdW1wdGlvbnMuIEZ1cnRoZXJtb3JlLCBJJiMzOTtsbCBiZSBjZXJ0YWluIHRvIGNvcnJlbGF0ZSB0aGlzIGluZm9ybWF0aW9uIHdpdGggc3lzdGVtIGxvZ3MgYW5kIHJlbGV2YW50IG1ldHJpY3MgdG8gZ2V0IGEgbW9yZSBjb21wcmVoZW5zaXZlIHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtNzc0LSAqL1xubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21pZ3JhdGUuYy03NzYte1xuLS1cbm1tL21pZ3JhdGUuYy04NjMtfVxubW0vbWlncmF0ZS5jOjg2NDpFWFBPUlRfU1lNQk9MKGZvbGlvX21pZ3JhdGVfZmxhZ3MpO1xubW0vbWlncmF0ZS5jLTg2NS1cbi0tXG5tbS9taWdyYXRlLmM9ODcwPXN0YXRpYyBpbnQgX19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbi0tXG5tbS9taWdyYXRlLmMtODkwLVxubW0vbWlncmF0ZS5jOjg5MTpcdGZvbGlvX21pZ3JhdGVfZmxhZ3MoZHN0LCBzcmMpO1xubW0vbWlncmF0ZS5jLTg5Mi1cdHJldHVybiAwO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1MS1cdFx0XHRlbHNlXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTI6XHRcdFx0XHRmb2xpb19taWdyYXRlX2ZsYWdzKG5ld2ZvbGlvLCBmb2xpbyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTMtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgaG93IG1lbW9yeSBjZ3JvdXBzIG1hbmFnZSB0aGVpciBMUlUgc2l6ZSwgYW5kIHRoYXQgbWVhbnMgaXQmIzM5O3MgaW50cmluc2ljYWxseSB0aWVkIHRvIHRoZSBwZXJmb3JtYW5jZSBhbmQgcmVzcG9uc2l2ZW5lc3Mgb2Ygd29ya2xvYWRzIHRoYXQgYXJlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqZXhhY3RseSogaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgTFJVIGxpc3Qgc2l6ZSBiYXNlZCBvbiBtZW1vcnkgdXNhZ2UsIHJlY2xhaW0gYWN0aXZpdHksIGFuZCBwb3RlbnRpYWxseSBldmVuIHVzZXItY29uZmlndXJlZCBsaW1pdHMgd2l0aGluIGEgbWVtb3J5IGNncm91cC4gVGhlcmUgY291bGQgYmUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY2dyb3VwIHN1YnN5c3RlbXMgdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCB0b28uIFNwZWNpZmljYWxseSBJJiMzOTttIGhvcGluZyB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBzdWJ0bGUgYnVncywgb3IgZm9yIHBvc3NpYmxlIGFyZWFzIGZvciBvcHRpbWl6YXRpb25zIHRvIHJlZHVjZSBsYXRlbmN5IG9yIGltcHJvdmUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBlZmZpY2llbmN5LCBvciBldmVuIGlkZW50aWZ5IHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZvbGlvLmM9MTEyMz1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9mb2xpby5jLTExNDMtXHRcdCAqL1xubW0vZm9saW8uYzoxMTQ0Olx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7XG5tbS9mb2xpby5jOjExNDU6XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcbm1tL2ZvbGlvLmMtMTE0Ni1cdH1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTUwMT1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtY29udHJvbC5jLTE1MTgtLyoqXG5tbS9tZW1jb250cm9sLmM6MTUxOTogKiBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSAtIGFjY291bnQgZm9yIGFkZGluZyBvciByZW1vdmluZyBhbiBscnUgcGFnZVxubW0vbWVtY29udHJvbC5jLTE1MjAtICogQGxydXZlYzogbWVtX2Nncm91cCBwZXIgem9uZSBscnUgdmVjdG9yXG4tLVxubW0vbWVtY29udHJvbC5jLTE1MjctICovXG5tbS9tZW1jb250cm9sLmM6MTUyODp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG5tbS9tZW1jb250cm9sLmMtMTUyOS1cdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vdm1zY2FuLmM9MTU5Mj11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vdm1zY2FuLmMtMTY0NC0gKiBVcGRhdGUgTFJVIHNpemVzIGFmdGVyIGlzb2xhdGluZyBwYWdlcy4gVGhlIExSVSBzaXplIHVwZGF0ZXMgbXVzdFxubW0vdm1zY2FuLmM6MTY0NTogKiBiZSBjb21wbGV0ZSBiZWZvcmUgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUgZHVlIHRvIGEgc2FuaXR5IGNoZWNrLlxubW0vdm1zY2FuLmMtMTY0Ni0gKi9cbi0tXG5tbS92bXNjYW4uYz00NjIxPXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDY0Mi1cdFx0XHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xubW0vdm1zY2FuLmM6NDY0MzpcdFx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7XG5tbS92bXNjYW4uYzo0NjQ0Olx0XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcbm1tL3Ztc2Nhbi5jLTQ2NDUtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL2ZvbGlvLmNgIGFnYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSByZWxhdGVkIG1vZGlmaWNhdGlvbnMgaW4gdGhvc2UgYXJlYXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIGluIHRob3NlIHR3byBmaWxlcy4gCgpUaGVuIEkmIzM5O2xsIHNoaWZ0IGdlYXJzIGFuZCBmb2N1cyBvbiBgbW0vZm9saW8uY2AgZm9yIG5vdywgYW5kIHRyYWNrIGRvd24gd2hlcmUgYGxydV9nZW5faW5jX3JlZnNgIGFuZCBgbHJ1X2dlbl9jbGVhcl9yZWZzYCBhcmUgYmVpbmcgY2FsbGVkIGZyb20uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZm9saW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQ1Olx0XHRcdFx0YnJlYWs7XG4gMzQ2Olx0XHRcdH1cbiAzNDc6XHRcdH1cbiAzNDg6XHRcbiAzNDk6XHRcdGxvY2FsX3VubG9jayhcdTAwMjZjcHVfZmJhdGNoZXMubG9jayk7XG4gMzUwOlx0fVxuIDM1MTpcdFxuIDM1MjpcdCNpZmRlZiBDT05GSUdfTFJVX0dFTlxuIDM1MzpcdFxuIDM1NDpcdHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiAzNTU6XHR7XG4gMzU2Olx0XHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIDM1NzpcdFx0aW50IHJlZnM7XG4gMzU4Olx0XG4gMzU5Olx0XHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXG4gMzYwOlx0XHRcdHJldHVybjtcbiAzNjE6XHRcbiAzNjI6XHRcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIDM2MzpcdFx0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbiAzNjQ6XHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiAzNjU6XHRcdFx0cmV0dXJuO1xuIDM2NjpcdFx0fVxuIDM2NzpcdFxuIDM2ODpcdFx0ZG8ge1xuIDM2OTpcdFx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4gMzcwOlx0XHRcdHJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTtcbiAzNzE6XHRcdFx0aWYgKHJlZnMgPT0gTFJVX1JFRlNfTUFYKSB7XG4gMzcyOlx0XHRcdFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxuIDM3MzpcdFx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIDM3NDpcdFx0XHRcdHJldHVybjtcbiAzNzU6XHRcdFx0fVxuIDM3NjpcdFx0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpO1xuIDM3NzpcdFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiAzNzg6XHR9XG4gMzc5Olx0XG4gMzgwOlx0c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gMzgxOlx0e1xuIDM4MjpcdFx0aW50IGdlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuIDM4MzpcdFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gMzg0Olx0XHR1bnNpZ25lZCBsb25nIHNlcTtcbiAzODU6XHRcbiAzODY6XHRcdGlmIChnZW4gXHUwMDNjIDApXG4gMzg3Olx0XHRcdHJldHVybiB0cnVlO1xuIDM4ODpcdFxuIDM4OTpcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiAzOTA6XHRcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIDM5MTpcdFxuIDM5MjpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDM5MzpcdFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuIDM5NDpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzk1Olx0XHQvKiB3aGV0aGVyIGNhbiBkbyB3aXRob3V0IHNodWZmbGluZyB1bmRlciB0aGUgTFJVIGxvY2sgKi9cbiAzOTY6XHRcdHJldHVybiBnZW4gPT0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuIDM5NzpcdH1cbiAzOTg6XHRcbiAzOTk6XHQjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiA0MDA6XHRcbiA0MDE6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gNDAyOlx0e1xuIDQwMzpcdH1cbiA0MDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyBGb2xpbyBNYW5hZ2VtZW50IGluIG1tL2ZvbGlvLmMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgZm9saW8gcmVmZXJlbmNlIGNvdW50cywgcGFydGljdWxhcmx5IGhvdyB0aGV5JiMzOTtyZSBpbmNyZW1lbnRlZCBhbmQgY2xlYXJlZC4gVGhlIGZ1bmN0aW9ucyBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgIHNlZW0gY2VudHJhbCB0byB0aGF0LCBzbyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGVpciB1c2FnZSB3aXRoaW4gYG1tL2ZvbGlvLmNgLiBJIGV4cGVjdCB0aGUgY29kZSBhcm91bmQgbGluZSA0MDUgb253YXJkcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93IG9mIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGhhbmRsZSBvbiBob3cgdGhlIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgZ2VuZXJhdGlvbiBhbmQgYXNzb2NpYXRlZCByZWZlcmVuY2UgY291bnQgbWVjaGFuaXNtcyBmdW5jdGlvbiBpbiB0aGlzIGNydWNpYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9mb2xpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MDA6XHRcbiA0MDE6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gNDAyOlx0e1xuIDQwMzpcdH1cbiA0MDQ6XHRcbiA0MDU6XHRzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiA0MDY6XHR7XG4gNDA3Olx0XHRyZXR1cm4gZmFsc2U7XG4gNDA4Olx0fVxuIDQwOTpcdFxuIDQxMDpcdCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIDQxMTpcdFxuIDQxMjpcdC8qKlxuIDQxMzpcdCAqIGZvbGlvX21hcmtfYWNjZXNzZWQgLSBNYXJrIGEgZm9saW8gYXMgaGF2aW5nIHNlZW4gYWN0aXZpdHkuXG4gNDE0Olx0ICogQGZvbGlvOiBUaGUgZm9saW8gdG8gbWFyay5cbiA0MTU6XHQgKlxuIDQxNjpcdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCBwZXJmb3JtIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRyYW5zaXRpb25zOlxuIDQxNzpcdCAqXG4gNDE4Olx0ICogKiBpbmFjdGl2ZSx1bnJlZmVyZW5jZWRcdC1cdTAwM2VcdGluYWN0aXZlLHJlZmVyZW5jZWRcbiA0MTk6XHQgKiAqIGluYWN0aXZlLHJlZmVyZW5jZWRcdC1cdTAwM2VcdGFjdGl2ZSx1bnJlZmVyZW5jZWRcbiA0MjA6XHQgKiAqIGFjdGl2ZSx1bnJlZmVyZW5jZWRcdC1cdTAwM2VcdGFjdGl2ZSxyZWZlcmVuY2VkXG4gNDIxOlx0ICpcbiA0MjI6XHQgKiBXaGVuIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGlzIG5vdCB5ZXQgdmlzaWJsZSwgc28gc2FmZSBmb3Igbm9uLWF0b21pYyBvcHMsXG4gNDIzOlx0ICogX19mb2xpb19zZXRfcmVmZXJlbmNlZCgpIG1heSBiZSBzdWJzdGl0dXRlZCBmb3IgZm9saW9fbWFya19hY2Nlc3NlZCgpLlxuIDQyNDpcdCAqL1xuIDQyNTpcdHZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDQyNjpcdHtcbiA0Mjc6XHRcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuIDQyODpcdFx0XHRyZXR1cm47XG4gNDI5Olx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbiA0MzA6XHRcdFx0bHJ1X2dlbl9pbmNfcmVmcyhmb2xpbyk7XG4gNDMxOlx0XHRcdHJldHVybjtcbiA0MzI6XHRcdH1cbiA0MzM6XHRcbiA0MzQ6XHRcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkge1xuIDQzNTpcdFx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChmb2xpbyk7XG4gNDM2Olx0XHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKSB7XG4gNDM3Olx0XHRcdC8qXG4gNDM4Olx0XHRcdCAqIFVuZXZpY3RhYmxlIHBhZ2VzIGFyZSBvbiB0aGUgXCYjMzQ7TFJVX1VORVZJQ1RBQkxFXCYjMzQ7IGxpc3QuIEJ1dCxcbiA0Mzk6XHRcdFx0ICogdGhpcyBsaXN0IGlzIG5ldmVyIHJvdGF0ZWQgb3IgbWFpbnRhaW5lZCwgc28gbWFya2luZyBhblxuIDQ0MDpcdFx0XHQgKiB1bmV2aWN0YWJsZSBwYWdlIGFjY2Vzc2VkIGhhcyBubyBlZmZlY3QuXG4gNDQxOlx0XHRcdCAqL1xuIDQ0MjpcdFx0fSBlbHNlIGlmICghZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pKSB7XG4gNDQzOlx0XHRcdC8qXG4gNDQ0Olx0XHRcdCAqIElmIHRoZSBmb2xpbyBpcyBvbiB0aGUgTFJVLCBxdWV1ZSBpdCBmb3IgYWN0aXZhdGlvbiB2aWFcbiA0NDU6XHRcdFx0ICogY3B1X2ZiYXRjaGVzLmxydV9hY3RpdmF0ZS4gT3RoZXJ3aXNlLCBhc3N1bWUgdGhlIGZvbGlvIGlzIGluIGFcbiA0NDY6XHRcdFx0ICogZm9saW9fYmF0Y2gsIG1hcmsgaXQgYWN0aXZlIGFuZCBpdCYjMzk7bGwgYmUgbW92ZWQgdG8gdGhlIGFjdGl2ZVxuIDQ0NzpcdFx0XHQgKiBMUlUgb24gdGhlIG5leHQgZHJhaW4uXG4gNDQ4Olx0XHRcdCAqL1xuIDQ0OTpcdFx0XHRpZiAoZm9saW9fdGVzdF9scnUoZm9saW8pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQwMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhvdCBQYXRocyBmb3IgRnV6emluZyBQcmlvcml0aXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgY2hhbmdlIGFuZCB0cnlpbmcgdG8gcGlucG9pbnQgdGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb25zIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuIGBmb2xpb19tYXJrX2FjY2Vzc2VkYCBpcywgb2YgY291cnNlLCBhIGhpZ2gtZnJlcXVlbmN5IGZ1bmN0aW9uLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IG5vdCB0byBvdmVybG9vayBvdGhlcnMgdGhhdCBhcmUgYWxzbyByZWxldmFudC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byB1c2UgdGhlIGluc3RydWN0aW9uIHRvIGV4dHJhY3QgdGhlICYjMzQ7c3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scywmIzM0OyBzbyBsZXQmIzM5O3MgY2hlY2sgdGhhdC4gQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50cy4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgc2VlbXMgaW1wb3J0YW50IOKAkyBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQgZm9yIHJtYXAgbG9vay1hcm91bmQsIGNhbGxlZCBmcm9tIGBtbS9ybWFwLmM6Zm9saW9fcmVmZXJlbmNlZF9vbmVgLiBUaGVuIHRoZXJlJiMzOTtzIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYW5vdGhlciBub24tc3RhdGljIGZ1bmN0aW9uIHVzZWQgZHVyaW5nIHBhZ2UgbWlncmF0aW9uIChgbW0vbWlncmF0ZS5jYCkuIEFuZCBmaW5hbGx5LCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGlzIGFsc28gbm9uLXN0YXRpYywgaW4gYG1tL21lbWNvbnRyb2wuY2AuCgpMZXQmIzM5O3MgZG8gYSBtb3JlIGNvbXByZWhlbnNpdmUgc2NhbiBvZiB0aGUgbW9kaWZpZWQgZmlsZXMg4oCTIGBtbS92bXNjYW4uY2AsIGBtbS9mb2xpby5jYCwgYW5kIGBtbS9tZW1jb250cm9sLmNgIOKAkyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGVzLiBPa2F5LCBoZXJlIGFyZSB0aGUgZnVuY3Rpb25zIGFmZmVjdGVkIGFuZCB0aGVpciB0eXBlczoKKiBJbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgOiBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgKHN0YXRpYyBpbmxpbmUpCiogSW4gYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgOiBBIGJ1bmNoIG9mIHN0YXRpYyBpbmxpbmVzOiBgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnVgLCBgZm9saW9faXNfZmlsZV9scnVgLCBgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19scnVfcmVmc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbHJ1X2dlbmAsIGBscnVfZ2VuX2FkZF9mb2xpb2AsIGBscnVfZ2VuX2RlbF9mb2xpb2AsIGBmb2xpb19taWdyYXRlX2xydV9yZWZzYC4KKiBJbiBgbW0vZm9saW8uY2A6IGBscnVfZ2VuX2luY19yZWZzYCAoc3RhdGljKSwgYGxydV9nZW5fY2xlYXJfcmVmc2AgKHN0YXRpYykKKiBJbiBgbW0vbWVtY29udHJvbC5jYDogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCAobm9uLXN0YXRpYykKKiBJbiBgbW0vbWlncmF0ZS5jYDogYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIChub24tc3RhdGljKQoqIEluIGBtbS92bXNjYW4uY2A6IGBscnVfZ2VuX3NldF9yZWZzYCAoc3RhdGljKSwgYHJlYWRfY3RybF9wb3NgIChzdGF0aWMpLCBgZm9saW9fdXBkYXRlX2dlbmAgKHN0YXRpYyksIGBmb2xpb19pbmNfZ2VuYCAoc3RhdGljKSwgYHVwZGF0ZV9iYXRjaF9zaXplYCAoc3RhdGljKSwgYHdhbGtfdXBkYXRlX2ZvbGlvYCAoc3RhdGljKSwgYHdhbGtfcHRlX3JhbmdlYCAoc3RhdGljKSwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAgKHN0YXRpYyksIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCAobm9uLXN0YXRpYyksIGBpc29sYXRlX2ZvbGlvYCAoc3RhdGljKSwgYGdldF90aWVyX2lkeGAgKHN0YXRpYyksIGBnZXRfdHlwZV90b19zY2FuYCAoc3RhdGljKSwgYGV2aWN0X2ZvbGlvc2AgKHN0YXRpYykKCkxldCYjMzk7cyBjb25maXJtIHRoYXQgdGhvc2UgdGhyZWUga2V5IGZ1bmN0aW9ucyBhcmUgaW5kZWVkIG5vbi1zdGF0aWM6IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpbiBgbW0vdm1zY2FuLmNgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaW4gYG1tL21pZ3JhdGUuY2AsIGFuZCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGluIGBtbS9tZW1jb250cm9sLmNgLiBZZXAsIHRoYXQmIzM5O3MgY29ycmVjdC4KCk9rYXksIGFyZSB0aGVyZSBvdGhlciBtZWFuaW5nZnVsIGNoYW5nZXMgdGhhdCBzaG91bGQgYWxzbyBiZSBmdXp6ZWQ/IEFmdGVyIHJldmlld2luZywgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgIGxvb2sgbGlrZSB0aGUgbWFpbiBub24tc3RhdGljIG9uZXMuIFRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWxseSBtZWFuaW5nZnVsOyBpdCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggcmVmYWN0b3JzIG11bHRpLWdlbiBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZsYWdzIG1hbmlwdWxhdGlvbi4gSXQgYWxzbyBmaXhlcyB0aWVyIGNhbGN1bGF0aW9uLCB1cGRhdGVzIGZvbGlvIGdlbmVyYXRpb24gZHVyaW5nIE1NIHdhbGtpbmcsIGNoYW5nZXMgTFJVIHpvbmUgc2l6ZSBhY2NvdW50aW5nIHRvIGF0b21pYyBvcGVyYXRpb25zIGluIG1lbWNnLCBhbmQgZml4ZXMgZm9saW8gcmVmZXJlbmNlIG1pZ3JhdGlvbi4gVGhpcyB0b3VjaGVzIGNvcmUgcGFnZSByZWNsYW1hdGlvbiwgTFJVIG1hbmFnZW1lbnQsIHBhZ2UgbWlncmF0aW9uLCBhbmQgbWVtY2cgYWNjb3VudGluZyDigJMgYWxsIGZ1bmRhbWVudGFsIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGFuZCByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS9HQ0Uga2VybmVsIGV4ZWN1dGlvbi4gSXQgbW9kaWZpZXMgYWxsIG9mIHRoZSBtb3N0IHBlcmZvcm1hbmNlLXNlbnNpdGl2ZSBhcmVhcywgd2hpY2ggaXMgZ3JlYXQuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIEtjb25maWcgb3B0aW9ucyBmb3IgdGhpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRlc3RpbmcgdGhlIGNvbmZpZ3VyYXRpb25zIHByb3Blcmx5OgoxLiAgYExSVV9HRU5gOiBFbmFibGVzIE11bHRpLUdlbiBMUlUgY29kZS4KMi4gIAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSUdSQVRJT05cXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02NzM9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02ODMtXG5tbS9LY29uZmlnOjY4NDpjb25maWcgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY4NS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgTWlncmF0aW9uIFN1cHBvcnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgTUlHUkFUSU9OYCBpbiB0aGlzIGtlcm5lbC4gTGV0JiMzOTtzIGdldCByaWdodCBkb3duIHRvIGl0LiBNeSBmaXJzdCBzdG9wIGlzIGdvaW5nIHRvIGJlIGBtbS9LY29uZmlnYCwgYW5kIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSA2ODAuIFRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQsIGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIHNvcnRzIG9mIGNvbmZpZ3VyYXRpb25zLiBIb3BlZnVsbHksIHRoZSBsb2dpYyByZWxhdGVkIHRvIGVuYWJsaW5nIG9yIHNlbGVjdGluZyBgTUlHUkFUSU9OYCBpcyBwcmV0dHkgY2xlYXJseSBsYWlkIG91dCB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIGRlcGVuZGVuY2llcyBvbiBhcmNoaXRlY3R1cmUgZmVhdHVyZXMsIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMsIG9yIG1heWJlIGV2ZW4gb3RoZXIgc3Vic3lzdGVtcy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRldmVsb3BlcnMgaGF2ZSBzZXQgaXQgdXAuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjcwOlx0XHQgIHRob3NlIHBhZ2VzIHRvIGFub3RoZXIgZW50aXR5LCBzdWNoIGFzIGEgaHlwZXJ2aXNvciwgc28gdGhhdCB0aGVcbiA2NzE6XHRcdCAgbWVtb3J5IGNhbiBiZSBmcmVlZCB3aXRoaW4gdGhlIGhvc3QgZm9yIG90aGVyIHVzZXMuXG4gNjcyOlx0XG4gNjczOlx0Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4gNjc0Olx0XHRib29sIFwmIzM0O05VTUEgcGFnZSBtaWdyYXRpb25cJiMzNDtcbiA2NzU6XHRcdGRlZmF1bHQgeVxuIDY3NjpcdFx0ZGVwZW5kcyBvbiBOVU1BIFx1MDAyNlx1MDAyNiBNTVVcbiA2Nzc6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA2Nzg6XHRcdGhlbHBcbiA2Nzk6XHRcdCAgU3VwcG9ydCB0aGUgbWlncmF0aW9uIG9mIHBhZ2VzIHRvIG90aGVyIE5VTUEgbm9kZXMsIGF2YWlsYWJsZSB0b1xuIDY4MDpcdFx0ICB1c2VyIHNwYWNlIHRocm91Z2ggaW50ZXJmYWNlcyBsaWtlIG1pZ3JhdGVfcGFnZXMoKSwgbW92ZV9wYWdlcygpLFxuIDY4MTpcdFx0ICBhbmQgbWJpbmQoKS4gU2VsZWN0aW5nIHRoaXMgb3B0aW9uIGFsc28gZW5hYmxlcyBzdXBwb3J0IGZvciBwYWdlXG4gNjgyOlx0XHQgIGRlbW90aW9uIGZvciBtZW1vcnkgdGllcmluZy5cbiA2ODM6XHRcbiA2ODQ6XHRjb25maWcgTUlHUkFUSU9OXG4gNjg1Olx0XHRib29sXG4gNjg2Olx0XHRkZXBlbmRzIG9uIE1NVVxuIDY4NzpcdFxuIDY4ODpcdGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXG4gNjg5Olx0XHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG4gNjkwOlx0XG4gNjkxOlx0Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxuIDY5MjpcdFx0Ym9vbFxuIDY5MzpcdFxuIDY5NDpcdGNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xuIDY5NTpcdFx0Ym9vbFxuIDY5NjpcdFxuIDY5NzpcdGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxuIDY5ODpcdFx0ZGVmX2Jvb2wgblxuIDY5OTpcdFx0aGVscFxuIDcwMDpcdFx0ICBBbGxvd3MgdGhlIHBhZ2VibG9ja19vcmRlciB2YWx1ZSB0byBiZSBkeW5hbWljIGluc3RlYWQgb2YganVzdCBzdGFuZGFyZFxuIDcwMTpcdFx0ICBIVUdFVExCX1BBR0VfT1JERVIgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgSHVnZVRMQiBwYWdlIHNpemVzIGF2YWlsYWJsZVxuIDcwMjpcdFx0ICBvbiBhIHBsYXRmb3JtLlxuIDcwMzpcdFxuIDcwNDpcdFx0ICBOb3RlIHRoYXQgdGhlIHBhZ2VibG9ja19vcmRlciBjYW5ub3QgZXhjZWVkIE1BWF9QQUdFX09SREVSIGFuZCB3aWxsIGJlXG4gNzA1Olx0XHQgIGNsYW1wZWQgZG93biB0byBNQVhfUEFHRV9PUkRFUi5cbiA3MDY6XHRcbiA3MDc6XHRjb25maWcgQ09OVElHX0FMTE9DXG4gNzA4Olx0XHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcdTAwMjZcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXG4gNzA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgUXVlcnk6IFRoZSAmIzM0O01JR1JBVElPTiYjMzQ7IFNlYXJjaCoqCgpBbHJpZ2h0LCBzbyB0aGUgdXNlciB0eXBlZCBpbiAmIzM0O01JR1JBVElPTi4mIzM0OyBMZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIHBvdGVudGlhbGx5IGJlaGluZCB0aGF0LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBhbHdheXM6IHdoYXQgYXJlIHRoZSBsaWtlbHkgY29udGV4dHMsIGFuZCB3aGF0IGluZm9ybWF0aW9uIGRvIHRoZXkgaG9wZSB0byBnbGVhbiBmcm9tIG1lPyAmIzM0O01JR1JBVElPTiYjMzQ7IGlzIGEgbWFzc2l2ZWx5IG92ZXJsb2FkZWQgdGVybS4gSXQgY291bGQgcmVmZXIgdG86CgoqICAgKipEYXRhIE1pZ3JhdGlvbioqOiBJcyB0aGlzIGFib3V0IG1vdmluZyBkYXRhIGJldHdlZW4gZGF0YWJhc2VzLCBwbGF0Zm9ybXMsIG9yIHN0b3JhZ2Ugc29sdXRpb25zPyBJZiBzbywgYW0gSSBnb2luZyB0byBuZWVkIHRvIHNwZWNpZnkgYSBzb3VyY2UgYW5kIHRhcmdldD8gV2hhdCBhYm91dCBkYXRhIHRyYW5zZm9ybWF0aW9uIGFuZCBtYXBwaW5nPyBBcmUgdGhleSBpbnRlcmVzdGVkIGluIGEgc3BlY2lmaWMgdG9vbCBvciBtZXRob2RvbG9neT8gVGhlIG51YW5jZXMgaGVyZSBhcmUgdmFzdCwgY292ZXJpbmcgZXZlcnl0aGluZyBmcm9tIEVUTCBwcm9jZXNzZXMgdG8gZGF0YWJhc2UgcmVwbGljYXRpb24gYW5kIGRpc2FzdGVyIHJlY292ZXJ5IHN0cmF0ZWdpZXMuCiogICAqKkluZnJhc3RydWN0dXJlIE1pZ3JhdGlvbioqOiBBcmUgd2UgdGFsa2luZyBhYm91dCBtb3ZpbmcgYXBwbGljYXRpb25zIG9yIGVudGlyZSBpbmZyYXN0cnVjdHVyZSAoc2VydmVycywgVk1zLCBjb250YWluZXJzKSB0byB0aGUgY2xvdWQsIGJldHdlZW4gY2xvdWQgcHJvdmlkZXJzLCBvciBmcm9tIG9uLXByZW1pc2UgdG8gYSBjbG91ZCBlbnZpcm9ubWVudD8gVGhpcyByYWlzZXMgcXVlc3Rpb25zIGFyb3VuZCBjb21wYXRpYmlsaXR5LCBzZWN1cml0eSwgZG93bnRpbWUsIGFuZCB0aGUgcmVxdWlyZWQgZXhwZXJ0aXNlIC0gaXMgaXQgYSAmIzM0O2xpZnQgYW5kIHNoaWZ0JiMzNDsgc2NlbmFyaW8sIG9yIGFyZSB0aGV5IHJlLWFyY2hpdGVjdGluZyBldmVyeXRoaW5nPwoqICAgKipDb2RlIE1pZ3JhdGlvbioqOiBUaGUgdGVybSAmIzM0O21pZ3JhdGlvbiYjMzQ7IGNhbiBhbHNvIGJlIHVzZWQsIHNwZWNpZmljYWxseSBpbiByZWZlcmVuY2UgdG8gY29kZS4gVGhpcyBjYW4gYmUgaW4gY29udGV4dCBvZiBwb3J0aW5nIGxlZ2FjeSBhcHBsaWNhdGlvbnMgdG8gYSBuZXdlciBjb2RlYmFzZSBvciBwbGF0Zm9ybS4gT3IsIHRoaXMgY291bGQgYmUgcmVsYXRlZCB0byBhIHNwZWNpZmljIGxpYnJhcnkgb3IgZnJhbWV3b3JrIHVwZ3JhZGUuCiogICAqKk90aGVyIENvbnRleHRzKio6IFRoZXJlIGFyZSBhbHNvIG90aGVyLCBtb3JlIGdlbmVyYWwgbWVhbmluZ3Mgb2YgbWlncmF0aW9uLCBkZXBlbmRpbmcgb24gdGhlIGZpZWxkLiBBbSBJIHN1cmUgSSBrbm93IHRoZSB1c2VycyYjMzk7IGNvbnRleHQsIGFuZCBjYW4gSSBtYWtlIGFuIGFzc3VtcHRpb24/CgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGxhcmdlciBjb250ZXh0LCBvciBhc2sgY2xhcmlmeWluZyBxdWVzdGlvbnMsIGJlZm9yZSBkaWdnaW5nIGludG8gYW55IHBhcnRpY3VsYXIgYXNwZWN0LiBUaGUgc2VhcmNoIHRlcm0gYWxvbmUgb2ZmZXJzIHZlcnkgbGltaXRlZCBpbmZvcm1hdGlvbiwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSB1c2VyJiMzOTtzIGltcGxpY2l0IGludGVudC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbW9yZSBpbmZvcm1hdGlvbiB0byBhc3Nlc3MgdGhlaXIgbmVlZHMsIGFuZCBkZXRlcm1pbmUgaWYgdGhleSByZXF1aXJlIGEgZ2VuZXJhbCBvdmVydmlldywgb3IgYSBkZWVwIGRpdmUgaW50byBzcGVjaWZpYyB0b29scywgdGVjaG5vbG9naWVzLCBhbmQgYmVzdCBwcmFjdGljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBNSUdSQVRJT05cXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01ODI9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcbm1tL0tjb25maWctNTgzLVx0Ym9vbCBcJiMzNDtBbGxvdyBmb3IgbWVtb3J5IGhvdCByZW1vdmVcJiMzNDtcbm1tL0tjb25maWc6NTg0Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy01ODUtXG4tLVxubW0vS2NvbmZpZz02NDI9Y29uZmlnIENPTVBBQ1RJT05cbi0tXG5tbS9LY29uZmlnLTY0NC1cdGRlZmF1bHQgeVxubW0vS2NvbmZpZzo2NDU6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY0Ni1cdGRlcGVuZHMgb24gTU1VXG4tLVxubW0vS2NvbmZpZz02NzM9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02NzYtXHRkZXBlbmRzIG9uIE5VTUEgXHUwMDI2XHUwMDI2IE1NVVxubW0vS2NvbmZpZzo2Nzc6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY3OC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTc2NT1jb25maWcgTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc2OS1cdHNlbGVjdCBJTlRFUlZBTF9UUkVFXG5tbS9LY29uZmlnOjc3MDpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNzcxLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTA1Nj1jb25maWcgQ01BXG4tLVxubW0vS2NvbmZpZy0xMDU4LVx0ZGVwZW5kcyBvbiBNTVVcbm1tL0tjb25maWc6MTA1OTpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctMTA2MC1cdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMwIDE4OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5IGFuZCBzcGVjaWZpY2FsbHksIGhvdyBgQ09NUEFDVElPTmAgYW5kIGBOVU1BX01JR1JBVElPTmAgaW50ZXJhY3QuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYm90aCBvZiB0aGVzZSB1bHRpbWF0ZWx5IHBvaW50IHRvIHVzaW5nIHRoZSBgTUlHUkFUSU9OYCBmdW5jdGlvbmFsaXR5LiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIGxpbmtlZCwgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIExldCYjMzk7cyBnbyBzdHJhaWdodCB0byBgbW0vTWFrZWZpbGVgLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgYG1pZ3JhdGUub2AsIGBtZW1jb250cm9sLm9gLCBhbmQgYHZtc2Nhbi5vYCBhcmUgY29tcGlsZWQuIFNlZWluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBsaW5raW5nIHN0ZXBzIHRoZXJlIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIHBpY3R1cmUgb2Ygd2hlcmUgdGhlc2UgY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgbW9kdWxlcyBmaXQgaW50byB0aGUgbGFyZ2VyIGtlcm5lbCBidWlsZC4gVGhpcyBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBkZXNpZ24gYW5kIHBvdGVudGlhbCBob3RzcG90cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KG1pZ3JhdGV8bWVtY29udHJvbHx2bXNjYW4pXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlLTI5LUtDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxuLS1cbm1tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxubW0vTWFrZWZpbGUtNTItXHRcdFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcbm1tL01ha2VmaWxlOjUzOlx0XHRcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG5tbS9NYWtlZmlsZS01NC1cdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG4tLVxubW0vTWFrZWZpbGU9OTc9b2JqLSQoQ09ORklHX01FTVRFU1QpXHRcdCYjNDM7PSBtZW10ZXN0Lm9cbm1tL01ha2VmaWxlOjk4Om9iai0kKENPTkZJR19NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlLm9cbm1tL01ha2VmaWxlLTk5LW9iai0kKENPTkZJR19OVU1BKSAmIzQzOz0gbWVtb3J5LXRpZXJzLm9cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDIwOAoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiA0NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS2VybmVsIFBhdGNoJiMzOTtzIFJlYWNoIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgdm1zY2FuLm9gIGFuZCBgZm9saW8ub2AgYXJlIGNvcmUsIHJlc2lkaW5nIGluIGBvYmoteWAuIFRoZSBNR0xSVSBsb2dpYyBpcyBnYXRlZCBieSBgTFJVX0dFTmAsIHdoaWNoIGltcGFjdHMgYHZtc2Nhbi5jYCwgYGZvbGlvLmNgLCBhbmQgYG1tX2lubGluZS5oYC4gYExSVV9HRU5fRU5BQkxFRGAgaXMgb3VyIGRlZmF1bHQgTUdMUlUgc3dpdGNoLiAgYE1FTUNHYCBpcyBjcml0aWNhbCwgY29tcGlsaW5nIGBtZW1jb250cm9sLm9gIGFuZCBlbmFibGluZyBtZW1jZyYjMzk7cyBMUlUgc2l6ZSB0cmFja2luZyB2aWEgYGxydV96b25lX3NpemVgLiAgV2UgYWxzbyBoYXZlIGBNSUdSQVRJT05gIG9yIGl0cyBhbHRlcm5hdGl2ZXMgKGBOVU1BX01JR1JBVElPTmAsIGBDT01QQUNUSU9OYCkgd2hpY2ggYnJpbmcgaW4gYG1pZ3JhdGUub2AuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBwcmVyZXF1aXNpdGVzLgoKMS4gIGBXb3J0aEZ1enppbmdgOiBDaGVja3Mgb3V0LCBpdCYjMzk7cyB0cnVlLCB3aGljaCBpcyBnb29kLgoyLiAgYEZvY3VzU3ltYm9sc2A6ICBFeGNlbGxlbnQsIHdlJiMzOTtyZSB0YXJnZXRpbmc6CiAgICAqICAgYGxydV9nZW5fbG9va19hcm91bmRgCiAgICAqICAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYAogICAgKiAgIGBmb2xpb19taWdyYXRlX2ZsYWdzYAozLiAgYEVuYWJsZUNvbmZpZ3NgOiBXZSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlOgogICAgKiAgIGBMUlVfR0VOYAogICAgKiAgIGBMUlVfR0VOX0VOQUJMRURgCiAgICAqICAgYE1FTUNHYAogICAgKiAgIGBNSUdSQVRJT05gIChvciBgQ09NUEFDVElPTmAgb3IgYE5VTUFfTUlHUkFUSU9OYCkKClNpbmNlIGBNSUdSQVRJT05gIGlzIGEgc2ltcGxlIGJvb2xlYW4gYW5kIGRvZXNuJiMzOTt0IGhhdmUgYSBwcm9tcHQsIHNldHRpbmcgZWl0aGVyIGBDT01QQUNUSU9OYCBvciBgTlVNQV9NSUdSQVRJT05gIHdpbGwgd29yaywgb3Igc2V0dGluZyBgTUlHUkFUSU9OYC4gTGV0JiMzOTtzIGxpc3QgYExSVV9HRU5gLCBgTFJVX0dFTl9FTkFCTEVEYCwgYE1FTUNHYCwgYW5kIHRoZW4gYE1JR1JBVElPTmAsIGBDT01QQUNUSU9OYCwgYW5kIGBOVU1BX01JR1JBVElPTmAuCgpSZWFzb25pbmcgaXMgc291bmQuIFRoaXMgcGF0Y2ggZGl2ZXMgaW50byB0aGUgaGVhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIE1HTFJVIHJlZmVyZW5jZS9nZW5lcmF0aW9uIGZsYWcgaGFuZGxpbmcsIG1ha2luZyBgbHJ1X3pvbmVfc2l6ZWAgYXRvbWljLCBmaXhpbmcgbWlncmF0aW9uIGJ1Z3MsIGFuZCB0d2Vha2luZyB0aWVyIGNhbGN1bGF0aW9ucy9tbS13YWxrIHVwZGF0ZXMgaW4gYHZtc2NhbmAuIFRoaXMgaGl0cyBjcml0aWNhbCBNTSBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlIHBhdGNoIGlzIGZ1bGx5IHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O05VTUFfTUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYWNyb3NzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHRyYWNraW5nLCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcgKGNvbnZlcnRlZCB0byBhdG9taWNfbG9uZ190KSwgcGFnZSBtaWdyYXRpb24gcmVmZXJlbmNlIGNvcHlpbmcgKGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMpLCBhbmQgcGFnZSByZWNsYW1hdGlvbiBzY2FubmluZyBhbmQgdGllciBjYWxjdWxhdGlvbnMgaW4gdm1zY2FuLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBjb3JlIGtlcm5lbCBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIG1pZ3JhdGlvbiBwYXRocyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OywKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7LAogICAgJiMzNDtOVU1BX01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFjcm9zcyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcGFnZSB0cmFja2luZywgbWVtY2cgTFJVIHpvbmUgc2l6ZSBhY2NvdW50aW5nIChjb252ZXJ0ZWQgdG8gYXRvbWljX2xvbmdfdCksIHBhZ2UgbWlncmF0aW9uIHJlZmVyZW5jZSBjb3B5aW5nIChmb2xpb19taWdyYXRlX2xydV9yZWZzKSwgYW5kIHBhZ2UgcmVjbGFtYXRpb24gc2Nhbm5pbmcgYW5kIHRpZXIgY2FsY3VsYXRpb25zIGluIHZtc2Nhbi4gVGhlc2UgY2hhbmdlcyBkaXJlY3RseSBhZmZlY3QgY29yZSBrZXJuZWwgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBtaWdyYXRpb24gcGF0aHMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSByZWNsYWltIGxvZ2ljIChNR0xSVSByZWZlcmVuY2UvZ2VuZXJhdGlvbiBmbGFnIGhlbHBlcnMsIG11bHRpLWdlbiBMUlUgdGllciBjYWxjdWxhdGlvbnMsIG1lbWNnIHBlci1ub2RlIExSVSB6b25lIHNpemUgYXRvbWljIGNvdW50ZXJzLCBhbmQgZm9saW8gbWlncmF0aW9uIHJlZmVyZW5jZSBzdGF0ZSBoYW5kbGluZykuXG5cbjEuIE5vIGtlcm5lbC10by11c2VyIHNwYWNlIGRhdGEgY29weWluZyBwYXRocyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChubyBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBpb2N0bCBzdHJ1Y3RzLCBldGMuKS5cbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIGZsYWcgdmFsdWVzIChlLmcuIGBmaWxlYCBhbmQgYG9sZF9nZW5gIGluIGBmb2xpb191cGRhdGVfZ2VuYC9gd2Fsa191cGRhdGVfZm9saW9gLCBgc3RydWN0IGN0cmxfcG9zYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGd1YXJkZWQgYnkgY29udHJvbCBmbG93IGNvbmRpdGlvbnMuXG4zLiBObyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgdW5pbml0aWFsaXplZCBoZWFwL3N0YWNrL3BhZ2UgYnVmZmVycyBhcmUgaW50cm9kdWNlZC5cbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gY29uY3VycmVudCBmbGFnIHVwZGF0ZXMsIGF0b21pY3MsIG9yIHBhZ2Ugc3RhdGUgdHJhbnNpdGlvbnMgZmFsbCB1bmRlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5LCBjb25jdXJyZW5jeSwgb3Igc2FuaXR5IGNoZWNrcyBoYW5kbGVkIGJ5IEtBU0FOL0xPQ0tERVAvVk1fV0FSTl9PTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5M2QzNjk5MjM4MDFmNzg3YjNjYWVhYjk5ZjdiMWQ2NDQ5MTc1Yjg1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMzAgMTg6NTE6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDdkMWMwY2UxODlhODguLjFiNDlkOGI1OTFkYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHsKIAkvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi8KIAlzdHJ1Y3QgbHJ1dmVjCQlscnV2ZWM7CiAJQ0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTsKLQl1bnNpZ25lZCBsb25nCQlscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTsKJiM0MzsJYXRvbWljX2xvbmdfdAkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtOTAyLDEwICYjNDM7OTAyLDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IGF0b21pY19sb25nX3JlYWQoJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi43ZTQ4N2MyM2FmZjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTEwLDYgJiM0MzsxMCwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJmYXVsdGZkX2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sZWFmb3BzLmgmZ3Q7CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qKgogICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LgpAQCAtMjcsNyAmIzQzOzMyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7CiYjNDM7CXJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpOwogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLApAQCAtMTQyLDEwICYjNDM7MTQ3LDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KQogCXJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MzsvKioKJiM0MzsgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzCiYjNDM7ICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pCiYjNDM7ewomIzQzOwlCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLICZhbXA7IExSVV9SRUZTX01BU0spOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TIHx8IGdlbiAmbHQ7IDApOwomIzQzOwkvKiBTdG9yZSBnZW4gb2Zmc2V0IGJ5IDEsIHplcm8gbWVhbnMgdGhlIGZvbGlvIGlzIG9mZi1saXN0LiAqLwomIzQzOwkqZmxhZ3MgJmFtcDs9IH5MUlVfR0VOX01BU0s7CiYjNDM7CSpmbGFncyB8PSAoZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3MKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJucwomIzQzOyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwomIzQzOwkvKiBFeGNsdWRlIHRoZSBsZWdhbCAtMSBmcm9tIHRoZSB1bnNpZ25lZCBNQVhfTlJfR0VOUyBjb21wYXJpc29uICovCiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgJmFtcDsmYW1wOyBnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwomIzQzOwlyZXR1cm4gZ2VuOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuCiYjNDM7ICoKJiM0MzsgKiBGb3IgTUdMUlUsIFBHX3JlZmVyZW5jZWQgaG9sZHMgdGhlIGZpcnN0IHJlZiwgYW5kIHRoZSBleHRyYSBiaXRzIGhvbGQgdGhlCiYjNDM7ICogcmVtYWluaW5nIHJlZnMuIEZvciBjbGFzc2ljYWwgTFJVIHRoZSBleHRyYSBiaXRzIGFyZSBub3QgdXNlZCwgc28gaXQgY2FuCiYjNDM7ICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxCiYjNDM7ICogbWVhbnMgUEdfcmVmZXJlbmNlZCBpcyBzZXQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSB6ZXJvLCBhbmQgcmVmcyA9PSAwIG1lYW5zCiYjNDM7ICogUEdfcmVmZXJlbmNlZCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIGFsbCB1bnNldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKHJlZnMgJmd0OyBMUlVfUkVGU19NQVgpOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJKmZsYWdzICZhbXA7PSB+TFJVX1JFRlNfRkxBR1M7CiYjNDM7CWlmICghcmVmcykKJiM0MzsJCXJldHVybjsKJiM0MzsJKmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpICZsdDsmbHQ7IExSVV9SRUZTX1BHT0ZGKSk7CiYjNDM7fQogCiYjNDM7LyoqCiYjNDM7ICogbHJ1X2dldF9yZWZzX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHNldCBieSBscnVfc2V0X3JlZnNfZmxhZ3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiAJaWYgKCEoZmxhZ3MgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKSkKIAkJcmV0dXJuIDA7CiAJLyoKQEAgLTE1NSwxMSAmIzQzOzIxNiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfZ2V0X3JlZnNfZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzKTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzO30KIAotCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKQpAQCAtMjcwLDcgJiM0MzszNDQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKIAlmbGFncyA9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi8KLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiYjNDM7CXNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTsKIAkvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi8KQEAgLTI5NSw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAogCS8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi8KIAlmbGFncyA9ICFyZWNsYWltaW5nICZhbXA7JmFtcDsgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwOwotCWZsYWdzID0gc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKJiM0MzsJZmxhZ3MgPSBzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLLCBmbGFncyk7CiAJZ2VuID0gKChmbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKIAogCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7CkBAIC0zMDQsMTEgJiM0MzszNzgsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiYjNDM7LyoqCiYjNDM7ICogZm9saW9fbWlncmF0ZV9scnVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpbwomIzQzOyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpbwomIzQzOyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW8KJiM0MzsgKgomIzQzOyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlUKJiM0MzsgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGUKJiM0MzsgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQl1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLSZndDtmbGFncy5mKSAmYW1wOyBMUlVfUkVGU19NQVNLOwotCi0Jc2V0X21hc2tfYml0cygmYW1wO25ldy0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLICZhbXA7IEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CWZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpOwogfQogI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovCiAKQEAgLTMzNyw5ICYjNDM7NDE5LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiB7Ci0KJiM0MzsJaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKQomIzQzOwkJZm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTsKIH0KICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA5NGY5YzNmZjU0MTYwLi45YjI3Y2Y1M2JkYmM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTQ5MiwxMSAmIzQzOzQ5MiwxNCBAQCBlbnVtIGxydXZlY19mbGFncyB7CiAgKiBmb2xpby0mZ3Q7ZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLgogICovCiAjZGVmaW5lIE1BWF9OUl9USUVSUwkJNFUKJiM0MzsjZGVmaW5lIExSVV9USUVSX01JTgkJMFUKJiM0MzsjZGVmaW5lIExSVV9USUVSX01BWAkJKE1BWF9OUl9USUVSUyAtIDEpCiAKICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19ICiAKICNkZWZpbmUgTFJVX0dFTl9NQVNLCQkoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkYpCiAjZGVmaW5lIExSVV9SRUZTX01BU0sJCSgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpICZsdDsmbHQ7IExSVV9SRUZTX1BHT0ZGKQomIzQzOyNkZWZpbmUgTFJVX1JFRlNfTUFYCQlCSVQoTFJVX1JFRlNfV0lEVEgpCiAKIC8qCiAgKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycywKZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jCmluZGV4IGMwMmRjZWE5YzAzYzIuLmZiODc0ZmU0OTJiMmIgMTAwNjQ0Ci0tLSBhL21tL2ZvbGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZm9saW8uYwpAQCAtMzUzLDI2ICYjNDM7MzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IHJlZnM7CiAKIAlpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpCiAJCXJldHVybjsKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwotCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CWlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm47CiAJfQogCiAJZG8gewotCQlpZiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CQlyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQlpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHsKIAkJCWlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkKIAkJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiAJCQlyZXR1cm47CiAJCX0KLQotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiB9CiAKIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQpAQCAtMzg0LDcgJiM0MzszODYsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZ2VuICZsdDsgMCkKIAkJcmV0dXJuIHRydWU7CiAKLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJZm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJc2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktJmd0O2xydWdlbi5taW5fc2VxW3R5cGVdKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxMjcxZDM5MGI2MTdlLi5mOTE1NDBmZWFmNzM1IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0xNTI5LDI4ICYjNDM7MTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsCiAJCQkJaW50IHppZCwgbG9uZyBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7Ci0JdW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7Ci0JbG9uZyBzaXplOwogCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuOwogCiAJbXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKLQlscnVfc2l6ZSA9ICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdOwotCi0JaWYgKG5yX3BhZ2VzICZsdDsgMCkKLQkJKmxydV9zaXplICYjNDM7PSBucl9wYWdlczsKLQotCXNpemUgPSAqbHJ1X3NpemU7Ci0JaWYgKFdBUk5fT05DRShzaXplICZsdDsgMCwKLQkJJiMzNDslcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxuJiMzNDssCi0JCV9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7Ci0JCVZNX0JVR19PTigxKTsKLQkJKmxydV9zaXplID0gMDsKLQl9Ci0KLQlpZiAobnJfcGFnZXMgJmd0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwlhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtNzc2LDggJiM0Mzs3NzYsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpbnQgY3B1cGlkOwogCi0JaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCWZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTsKJiM0MzsJLyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqLwomIzQzOwlmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiYjNDM7CiAJaWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKQogCQlmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTsKIAlpZiAoZm9saW9fdGVzdF9jbGVhcl9hY3RpdmUoZm9saW8pKSB7CkBAIC04MDcsNyAmIzQzOzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKQogCQlmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7CiAKLQlmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTsKIAkvKgogCSAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlcgogCSAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBmMTE0OTFlZTllZDVjLi44N2U2NjdjNDEwZWQ0IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtODQzLDE5ICYjNDM7ODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkgewogCQkvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi8KIAkJaWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKJiM0MzsJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CiAKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqLwotCWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpOwotCWVsc2UKJiM0MzsJaWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSAmZ3Q7IDEpIHsKJiM0MzsJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CX0gZWxzZSB7CiAJCWZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pOwomIzQzOwl9CiAJcmV0dXJuIHRydWU7CiB9CiAjZWxzZQpAQCAtMzE5NSw4ICYjNDM7MzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7CiAJaW50IGdhaW47CiB9OwogCi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKLQkJCSAgc3RydWN0IGN0cmxfcG9zICpwb3MpCiYjNDM7c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sCiYjNDM7CQkJICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKIAlwb3MtJmd0O2dhaW4gPSBnYWluOwogCXBvcy0mZ3Q7cmVmYXVsdGVkID0gcG9zLSZndDt0b3RhbCA9IDA7CiAKLQlmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpICZsdDs9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gdGllcl9taW47IGkgJmx0Oz0gdGllcl9tYXg7IGkmIzQzOyYjNDM7KSB7CiAJCXBvcy0mZ3Q7cmVmYXVsdGVkICYjNDM7PSBscnVnZW4tJmd0O2F2Z19yZWZhdWx0ZWRbdHlwZV1baV0gJiM0MzsKIAkJCQkgIGF0b21pY19sb25nX3JlYWQoJmFtcDtscnVnZW4tJmd0O3JlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7CiAJCXBvcy0mZ3Q7dG90YWwgJiM0Mzs9IGxydWdlbi0mZ3Q7YXZnX3RvdGFsW3R5cGVdW2ldICYjNDM7CkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovCi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKJiM0MztzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSwKJiM0MzsJCQkgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgb2xkX2dlbjsKIAogCS8qCiAJICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWQKQEAgLTMyNzksMjAgJiM0MzszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hCiAJICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlkbyB7CiYjNDM7CQlvbGRfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsKIAkJLyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqLwotCQlpZiAoIShvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSkKLQkJCXJldHVybiAtMTsKJiM0MzsJCWlmIChvbGRfZ2VuICZsdDsgMCkKJiM0MzsJCQlicmVhazsKIAotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJmFtcDsgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7Ci0JCW5ld19mbGFncyB8PSAoKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X2dlbl9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwkJbmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCi0JcmV0dXJuICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KCZhbXA7b2xkX2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG9sZF9nZW47CiB9CiAKIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovCkBAIC0zMzAxLDIxICYjNDM7MzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuOwogCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwotCi0JVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKIAogCWRvIHsKLQkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkJbmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CiAJCS8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqLwogCQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKQogCQkJcmV0dXJuIG5ld19nZW47CiAKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKIAkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7Ci0KLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X2dlbl9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwogCkBAIC0zMzIzLDkgJiM0MzszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbywKLQkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbikKJiM0MzsJCQkgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKQogewotCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCWludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7CiAJaW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCkBAIC0zNTEyLDIyICYjNDM7MzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKQogfQogCiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpCiYjNDM7CQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpCiB7Ci0JaW50IG9sZF9nZW47CiYjNDM7CWludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlOwogCiAJaWYgKCFmb2xpbykKIAkJcmV0dXJuOwogCiYjNDM7CW5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxKSk7CiYjNDM7CiAJaWYgKGRpcnR5ICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpCiAJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwogCiAJaWYgKHdhbGspIHsKLQkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7dm1hLSZndDtmbGFncyk7CiYjNDM7CQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDtmaWxlLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQotCQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwomIzQzOwkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCBmaWxlKTsKIAl9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sICZhbXA7dm1hLSZndDtmbGFncykpIHsKIAkJb2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQpAQCAtMzU0OSw4ICYjNDM7MzU1Nyw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCXVuc2lnbmVkIGludCBucjsKIAlwbWRfdCBwbWR2YWw7CiAKQEAgLTM2MDEsNyAmIzQzOzM2MDcsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNjE0LDcgJiM0MzszNjIwLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCXdhbGstJmd0O21tX3N0YXRzW01NX0xFQUZfWU9VTkddICYjNDM7PSBucjsKIAl9CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCWxhc3QgPSBOVUxMOwogCiAJaWYgKGkgJmx0OyBQVFJTX1BFUl9QVEUgJmFtcDsmYW1wOyBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgJmFtcDtzdGFydCwgJmFtcDtlbmQpKQpAQCAtMzYzNyw4ICYjNDM7MzY0Myw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtJmd0O3ByaXZhdGU7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstJmd0O2xydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLSZndDtscnV2ZWMpOwotCURFRklORV9NQVhfU0VRKHdhbGstJmd0O2xydXZlYyk7Ci0JaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAKIAlWTV9XQVJOX09OX09OQ0UocHVkX2xlYWYoKnB1ZCkpOwogCkBAIC0zNjkyLDcgJiM0MzszNjk2LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJCWdvdG8gbmV4dDsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzcwNiw3ICYjNDM7MzcxMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCWkgPSBpICZndDsgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgJiM0MzsgMTsKIAl9IHdoaWxlIChpICZsdDs9IE1JTl9MUlVfQkFUQ0gpOwogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCXNwaW5fdW5sb2NrKHB0bCk7CkBAIC00MjcwLDggJiM0Mzs0Mjc0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7CiAJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwogCXN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTsKLQl1bnNpZ25lZCBsb25nIG1heF9zZXE7Ci0JaW50IGdlbjsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy0mZ3Q7cHRsKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7CkBAIC00MzA4LDggJiM0Mzs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCiAJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTsKIAlscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOwotCW1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktJmd0O2xydWdlbi5tYXhfc2VxKTsKLQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCW1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7CiAKIAlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwpAQCAtNDM0MSw3ICYjNDM7NDM0MSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC00MzUzLDEzICYjNDM7NDM1MywxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCXlvdW5nICYjNDM7PSBucjsKIAl9CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAKIAkvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi8KIAlpZiAobW1fc3RhdGUgJmFtcDsmYW1wOyBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSkKLQkJdXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy0mZ3Q7cG1kKTsKJiM0MzsJCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxKSwKJiM0MzsJCQkJICAgIHB2bXctJmd0O3BtZCk7CiAKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAKQEAgLTQ3MTYsNyAmIzQzOzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYQogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAogCXN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTsKQEAgLTQ4MDksOSAmIzQzOzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQogCSAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZQogCSAqIGFzIG1hbnkgcmVmYXVsdHMgYXMgdGhlIGZpcnN0IHRpZXIuCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsICZhbXA7c3ApOwotCWZvciAodGllciA9IDE7IHRpZXIgJmx0OyBNQVhfTlJfVElFUlM7IHRpZXImIzQzOyYjNDM7KSB7Ci0JCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUlOLCAyLCAmYW1wO3NwKTsKJiM0MzsJZm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICYjNDM7IDE7IHRpZXIgJmx0Oz0gTFJVX1RJRVJfTUFYOyB0aWVyJiM0MzsmIzQzOykgewomIzQzOwkJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsICZhbXA7cHYpOwogCQlpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpKQogCQkJYnJlYWs7CiAJfQpAQCAtNDgzMiw4ICYjNDM7NDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIAkgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lCiAJICogd2hpY2ggdHlwZSB0byBzY2FuLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgJmFtcDtzcCk7Ci0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCwKJiM0MzsJCSAgICAgIHN3YXBwaW5lc3MsICZhbXA7c3ApOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCwKJiM0MzsJCSAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiAKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CkBAIC00OTMyLDggJiM0Mzs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQl9CiAKIAkJLyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovCi0JCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTsKJiM0MzsJCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkgewomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CQkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CQl9CiAJfQogCiAJbW92ZV9mb2xpb3NfdG9fbHJ1KCZhbXA7bGlzdCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMCAxODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY1MwoJCQkJCQkJb3V0cHV0OiAyNjAKCQkJCQkJCXRob3VnaHRzOiAyMDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIEp1c3RpZmljYXRpb24gZm9yIERlZGljYXRlZCBGdXp6aW5nIFNlc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHF1ZXN0aW9uIGF0IGhhbmQgaXMgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGRlZGljYXRlZCBLZXJuZWxNZW1vcnlTYW5pdGl6ZXIgKEtNU0FOKSBmdXp6aW5nIHNlc3Npb24sIGluIGFkZGl0aW9uIHRvIG91ciBzdGFuZGFyZCBLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIgKEtBU0FOKSBydW5zLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgd2UgbmVlZCB0byBiZSBleHRyZW1lbHkganVkaWNpb3VzIGFib3V0IHNwaW5uaW5nIHVwIEtNU0FOOyBpdCYjMzk7cyByZXNvdXJjZS1pbnRlbnNpdmUsIHNvIHdlICpvbmx5KiB1c2UgaXQgd2hlbiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgY2hlY2tzIGFyZSBpbnN1ZmZpY2llbnQuCgpGaXJzdCwgSSBsb29rZWQgYXQgdGhlIG92ZXJhbGwgY2hhbmdlcy4gVGhpcyBwYXRjaCBzZXJpZXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzOiBNR0xSVSAoTXVsdGktR2VuZXJhdGlvbmFsIExSVSksIGZvbGlvIGZsYWdzLCBtZW1jZyB6b25lIExSVSBzaXplcywgYW5kIGZvbGlvIG1pZ3JhdGlvbi4gTXkgaW5pdGlhbCBzY2FuIHdhcyB0byBzZWUgaWYgYW55dGhpbmcgd2FzIHVzZXItZmFjaW5nLCBidXQgaXQmIzM5O3MgYWxsIGludGVybmFsIGtlcm5lbCBzdHVmZiwgcHJpbWFyaWx5IGFyb3VuZCBwYWdlIGNhY2hlIG1hbmFnZW1lbnQgYW5kIExSVSBsaXN0IG1hbmlwdWxhdGlvbi4gVGhhdCYjMzk7cyBnb29kOyBmZXdlciB2ZWN0b3JzIGZvciBpbmZvcm1hdGlvbiBsZWFrcy4KCk5leHQsIEkgbWV0aG9kaWNhbGx5IHdlbnQgdGhyb3VnaCB0aGUgY29kZSwgZnVuY3Rpb24gYnkgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyBsb29raW5nIGZvciB0aGUgKnNwZWNpZmljKiBLTVNBTiB0cmlnZ2VyOiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBkaXN0aW5jdGlvbjogS0FTQU4gY292ZXJzIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBsb2NraW5nIGJ1Z3MsIGFuZCB0aGUgbGlrZS4gS01TQU7igJlzIHRlcnJpdG9yeSBpcyB0aGUgbmFzdGllciBzdHVmZiAtIHVuaW5pdGlhbGl6ZWQgZGF0YS4KCkkgZXhhbWluZWQgdGhlIGBmb2xpb191cGRhdGVfZ2VuYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiB0aGUgYGZpbGVgIHZhcmlhYmxlLiBUaGVyZSYjMzk7cyBjb25kaXRpb25hbCBsb2dpYyB0aGVyZSwgYnV0IEkgdHJhY2VkIGFsbCBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMuICBJIGNvbmZpcm1lZCB0aGF0IHRoZSBgZmlsZWAgdmFyaWFibGUgKmlzKiBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgZXZlbiBpbiB0aGUgY2FzZXMgd2hlcmUgdGhlIGZ1bmN0aW9uIHJldHVybnMgZWFybHkuIEkgc2ltaWxhcmx5IHZlcmlmaWVkIHRoZSBgcmVhZF9jdHJsX3Bvc2Agc3RydWN0LCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAsIGZvbGlvIG1pZ3JhdGlvbiBhbmQgdGhlIGZsYWdzIGZ1bmN0aW9ucywgZW5zdXJpbmcgdGhhdCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0cnVjdCBmaWVsZHMgd2VyZSBlaXRoZXIgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgb3IgYXNzaWduZWQgdmFsdWVzIHByaW9yIHRvIHRoZWlyIGZpcnN0IHJlYWQuIFRoZXJlIGFyZSBhdG9taWMgb3BlcmF0aW9ucyBvbiBjb3VudGVycyBhbmQgZmxhZyBiaXQgbWFuaXB1bGF0aW9uLCBidXQgdGhlIGxvZ2ljIGlzIHNvdW5kIGFuZCB0aGUgZGF0YSBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgYWN0ZWQgdXBvbi4gVGhlcmUgd2VyZSBubyBuZXcgYWxsb2NhdGlvbnMgaW50cm9kdWNlZC4KClRoZXJlZm9yZSwgSSYjMzk7dmUgY29uY2x1ZGVkIHRoZXJlIGlzIG5vIGluc3RhbmNlIHdoZXJlIGEgcmVhZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleGlzdHMuIFRoZXJlIGFyZSBubyBleHBvc2VkIGNoYW5nZXMgdG8gdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMgKHNvLCBubyBpbmZvLWxlYWtzKSBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgcmVhZCwgYWNjb3JkaW5nIHRvIG15IGFzc2Vzc21lbnRzIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdXBkYXRlZC4KCk15IGZpbmFsIGFuYWx5c2lzIGlzIGJhc2VkIG9uIHRoaXMgbG9naWM6IFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgd2lsbCBkZXRlY3QgYW55IG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgKG91dC1vZi1ib3VuZHMgd3JpdGVzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLikuICpDcnVjaWFsbHkqLCB0aGUgY3VycmVudCBwYXRjaCBzZXJpZXMgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2Ugc2hvdWxkICpvbmx5KiB0cmlnZ2VyIEtNU0FOIGlmIHRoZSBjb2RlIGNoYW5nZXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgKm9ubHkqIGJlIGRldGVjdGVkIGJ5IEtNU0FOLiBTaW5jZSB0aGVzZSBjaGFuZ2VzIGRvICpub3QqLCBJIGFtIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcyBhbmQsIHRoZXJlZm9yZSwgSSBhbSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC4gVGhpcyBwYXRjaCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzAgMTg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHJlY2xhaW0gbG9naWMgKE1HTFJVIHJlZmVyZW5jZS9nZW5lcmF0aW9uIGZsYWcgaGVscGVycywgbXVsdGktZ2VuIExSVSB0aWVyIGNhbGN1bGF0aW9ucywgbWVtY2cgcGVyLW5vZGUgTFJVIHpvbmUgc2l6ZSBhdG9taWMgY291bnRlcnMsIGFuZCBmb2xpbyBtaWdyYXRpb24gcmVmZXJlbmNlIHN0YXRlIGhhbmRsaW5nKS5cblxuMS4gTm8ga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBjb3B5aW5nIHBhdGhzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIGlvY3RsIHN0cnVjdHMsIGV0Yy4pLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgZmxhZyB2YWx1ZXMgKGUuZy4gYGZpbGVgIGFuZCBgb2xkX2dlbmAgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gL2B3YWxrX3VwZGF0ZV9mb2xpb2AsIGBzdHJ1Y3QgY3RybF9wb3NgKSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgb3IgZ3VhcmRlZCBieSBjb250cm9sIGZsb3cgY29uZGl0aW9ucy5cbjMuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2svcGFnZSBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkLlxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBjb25jdXJyZW50IGZsYWcgdXBkYXRlcywgYXRvbWljcywgb3IgcGFnZSBzdGF0ZSB0cmFuc2l0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBzYWZldHksIGNvbmN1cnJlbmN5LCBvciBzYW5pdHkgY2hlY2tzIGhhbmRsZWQgYnkgS0FTQU4vTE9DS0RFUC9WTV9XQVJOX09OLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgcmVjbGFpbSBsb2dpYyAoTUdMUlUgcmVmZXJlbmNlL2dlbmVyYXRpb24gZmxhZyBoZWxwZXJzLCBtdWx0aS1nZW4gTFJVIHRpZXIgY2FsY3VsYXRpb25zLCBtZW1jZyBwZXItbm9kZSBMUlUgem9uZSBzaXplIGF0b21pYyBjb3VudGVycywgYW5kIGZvbGlvIG1pZ3JhdGlvbiByZWZlcmVuY2Ugc3RhdGUgaGFuZGxpbmcpLlxuXG4xLiBObyBrZXJuZWwtdG8tdXNlciBzcGFjZSBkYXRhIGNvcHlpbmcgcGF0aHMgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCAobm8gY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBtZXNzYWdlcywgaW9jdGwgc3RydWN0cywgZXRjLikuXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBmbGFnIHZhbHVlcyAoZS5nLiBgZmlsZWAgYW5kIGBvbGRfZ2VuYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAvYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHN0cnVjdCBjdHJsX3Bvc2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBvciBndWFyZGVkIGJ5IGNvbnRyb2wgZmxvdyBjb25kaXRpb25zLlxuMy4gTm8gbWVtb3J5IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjay9wYWdlIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQuXG40LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIGNvbmN1cnJlbnQgZmxhZyB1cGRhdGVzLCBhdG9taWNzLCBvciBwYWdlIHN0YXRlIHRyYW5zaXRpb25zIGZhbGwgdW5kZXIgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSwgY29uY3VycmVuY3ksIG9yIHNhbml0eSBjaGVja3MgaGFuZGxlZCBieSBLQVNBTi9MT0NLREVQL1ZNX1dBUk5fT04uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MTYuMzE3MjA0NThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMwNTU1NDQzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCIsXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJOVU1BX01JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIixcbiAgICBcIm1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgcmVjbGFpbSBsb2dpYyAoTUdMUlUgcmVmZXJlbmNlL2dlbmVyYXRpb24gZmxhZyBoZWxwZXJzLCBtdWx0aS1nZW4gTFJVIHRpZXIgY2FsY3VsYXRpb25zLCBtZW1jZyBwZXItbm9kZSBMUlUgem9uZSBzaXplIGF0b21pYyBjb3VudGVycywgYW5kIGZvbGlvIG1pZ3JhdGlvbiByZWZlcmVuY2Ugc3RhdGUgaGFuZGxpbmcpLlxcblxcbjEuIE5vIGtlcm5lbC10by11c2VyIHNwYWNlIGRhdGEgY29weWluZyBwYXRocyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChubyBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBpb2N0bCBzdHJ1Y3RzLCBldGMuKS5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBmbGFnIHZhbHVlcyAoZS5nLiBgZmlsZWAgYW5kIGBvbGRfZ2VuYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAvYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHN0cnVjdCBjdHJsX3Bvc2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBvciBndWFyZGVkIGJ5IGNvbnRyb2wgZmxvdyBjb25kaXRpb25zLlxcbjMuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2svcGFnZSBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gY29uY3VycmVudCBmbGFnIHVwZGF0ZXMsIGF0b21pY3MsIG9yIHBhZ2Ugc3RhdGUgdHJhbnNpdGlvbnMgZmFsbCB1bmRlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5LCBjb25jdXJyZW5jeSwgb3Igc2FuaXR5IGNoZWNrcyBoYW5kbGVkIGJ5IEtBU0FOL0xPQ0tERVAvVk1fV0FSTl9PTi5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhY3Jvc3MgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgdHJhY2tpbmcsIG1lbWNnIExSVSB6b25lIHNpemUgYWNjb3VudGluZyAoY29udmVydGVkIHRvIGF0b21pY19sb25nX3QpLCBwYWdlIG1pZ3JhdGlvbiByZWZlcmVuY2UgY29weWluZyAoZm9saW9fbWlncmF0ZV9scnVfcmVmcyksIGFuZCBwYWdlIHJlY2xhbWF0aW9uIHNjYW5uaW5nIGFuZCB0aWVyIGNhbGN1bGF0aW9ucyBpbiB2bXNjYW4uIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IGNvcmUga2VybmVsIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgbWlncmF0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUxOjE2LjMxNzIwODU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxODIyNTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTNkMzY5OTIzODAxZjc4N2IzY2FlYWI5OWY3YjFkNjQ0OTE3NWI4NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAzMCAxODo1MToxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggN2QxYzBjZTE4OWE4OC4uMWI0OWQ4YjU5MWRhNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuQEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XFxuIFxcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xcbiBcXHRzdHJ1Y3QgbHJ1dmVjXFx0XFx0bHJ1dmVjO1xcbiBcXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xcbi1cXHR1bnNpZ25lZCBsb25nXFx0XFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XFxuK1xcdGF0b21pY19sb25nX3RcXHRcXHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyXFx0aXRlcjtcXG4gXFxuIFxcdC8qXFxuQEAgLTkwMiwxMCArOTAyLDE1IEBAIHN0YXRpYyBpbmxpbmVcXG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcXG4ge1xcbitcXHRsb25nIHZhbDtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbiBcXG4gXFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4tXFx0cmV0dXJuIFJFQURfT05DRShtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XFxuK1xcdHZhbCA9IGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm16LVxcdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSh2YWwgXFx1MDAzYyAwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gdmFsO1xcbiB9XFxuIFxcbiB2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5pbmRleCA2MjFjODY1M2Q4ZjdlLi43ZTQ4N2MyM2FmZjcwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuQEAgLTEwLDYgKzEwLDExIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9sZWFmb3BzLmhcXHUwMDNlXFxuIFxcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcXG4re1xcbitcXHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGZvbGlvX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVP1xcbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxcbkBAIC0yNyw3ICszMiw3IEBAXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuLVxcdHJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTtcXG4rXFx0cmV0dXJuIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuQEAgLTE0MiwxMCArMTQ3LDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxcbiBcXHRyZXR1cm4gd29ya2luZ3NldCA/IE1BWF9OUl9USUVSUyAtIDEgOiBvcmRlcl9iYXNlXzIocmVmcyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuKy8qKlxcbisgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxcbit7XFxuK1xcdEJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgXFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyB8fCBnZW4gXFx1MDAzYyAwKTtcXG4rXFx0LyogU3RvcmUgZ2VuIG9mZnNldCBieSAxLCB6ZXJvIG1lYW5zIHRoZSBmb2xpbyBpcyBvZmYtbGlzdC4gKi9cXG4rXFx0KmZsYWdzIFxcdTAwMjY9IH5MUlVfR0VOX01BU0s7XFxuK1xcdCpmbGFncyB8PSAoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbit9XFxuK1xcbisvKipcXG4rICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXFxuKyAqXFxuKyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xcbisgKiAtMSBpZiB0aGUgZmxhZ3MgaW5kaWNhdGUgdGhlIGZvbGlvIGlzIG9mZiB0aGUgbGlzdCAoZS5nLiwgaXNvbGF0ZWQpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpbnQgZ2VuID0gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbitcXG4rXFx0LyogRXhjbHVkZSB0aGUgbGVnYWwgLTEgZnJvbSB0aGUgdW5zaWduZWQgTUFYX05SX0dFTlMgY29tcGFyaXNvbiAqL1xcbitcXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFxcdTAwMjZcXHUwMDI2IGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyk7XFxuK1xcdHJldHVybiBnZW47XFxuK31cXG4rXFxuKy8qKlxcbisgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXFxuKyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS5cXG4rICpcXG4rICogRm9yIE1HTFJVLCBQR19yZWZlcmVuY2VkIGhvbGRzIHRoZSBmaXJzdCByZWYsIGFuZCB0aGUgZXh0cmEgYml0cyBob2xkIHRoZVxcbisgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW5cXG4rICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxXFxuKyAqIG1lYW5zIFBHX3JlZmVyZW5jZWQgaXMgc2V0IGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgemVybywgYW5kIHJlZnMgPT0gMCBtZWFuc1xcbisgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdFZNX1dBUk5fT05fT05DRShyZWZzIFxcdTAwM2UgTFJVX1JFRlNfTUFYKTtcXG4rXFx0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcXHUwMDNlXFx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxKTtcXG4rXFxuK1xcdCpmbGFncyBcXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XFxuK1xcdGlmICghcmVmcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcXG4rfVxcbiBcXG4rLyoqXFxuKyAqIGxydV9nZXRfcmVmc19mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXFxuKyAqXFxuKyAqIFJlYWRzIHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCBzZXQgYnkgbHJ1X3NldF9yZWZzX2ZsYWdzKCkuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbiBcXHRpZiAoIShmbGFncyBcXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHQvKlxcbkBAIC0xNTUsMTEgKzIxNiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gKChmbGFncyBcXHUwMDI2IExSVV9SRUZTX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncztcXG4rXFx0XFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xcbitcXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuICgoZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxcbkBAIC0yNzAsNyArMzQ0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xcbiBcXHRmbGFncyA9IChnZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkY7XFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cXG4tXFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XFxuK1xcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xcbiBcXG4gXFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcXG4gXFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXFxuQEAgLTI5NSw3ICszNjksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXG4gXFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xcbiBcXHRmbGFncyA9ICFyZWNsYWltaW5nIFxcdTAwMjZcXHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcXG4tXFx0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XFxuK1xcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xcbiBcXHRnZW4gPSAoKGZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpO1xcbkBAIC0zMDQsMTEgKzM3OCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuKy8qKlxcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXFxuKyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xcbisgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXFxuKyAqXFxuKyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcXG4rICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXFxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cXHUwMDNlZmxhZ3MuZikgXFx1MDAyNiBMUlVfUkVGU19NQVNLO1xcbi1cXG4tXFx0c2V0X21hc2tfYml0cyhcXHUwMDI2bmV3LVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcXG4rXFx0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcXG4gfVxcbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG4gXFxuQEAgLTMzNyw5ICs0MTksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbiB7XFxuLVxcbitcXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXFxuK1xcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtNDkyLDExICs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xcbiAgKiBmb2xpby1cXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxcbiAgKi9cXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcXHRcXHQ0VVxcbisjZGVmaW5lIExSVV9USUVSX01JTlxcdFxcdDBVXFxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXFx0XFx0KE1BWF9OUl9USUVSUyAtIDEpXFxuIFxcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxcbiBcXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcXHRcXHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpXFxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1xcdFxcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxcbisjZGVmaW5lIExSVV9SRUZTX01BWFxcdFxcdEJJVChMUlVfUkVGU19XSURUSClcXG4gXFxuIC8qXFxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmZiODc0ZmU0OTJiMmIgMTAwNjQ0XFxuLS0tIGEvbW0vZm9saW8uY1xcbisrKyBiL21tL2ZvbGlvLmNcXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4rXFx0aW50IHJlZnM7XFxuIFxcbiBcXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRpZiAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXHRcXHRyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7XFxuK1xcdFxcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xcbiBcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpXFxuIFxcdFxcdFxcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuLVxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgKyBCSVQoTFJVX1JFRlNfUEdPRkYpO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIHJlZnMgKyAxKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbkBAIC0zODQsNyArMzg2LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGlmIChnZW4gXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUyB8IEJJVChQR193b3JraW5nc2V0KSwgMCk7XFxuK1xcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuK1xcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS1cXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAxMjcxZDM5MGI2MTdlLi5mOTE1NDBmZWFmNzM1IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0xNTI5LDI4ICsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcXG4gXFx0XFx0XFx0XFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XFxuLVxcdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xcbi1cXHRsb25nIHNpemU7XFxuIFxcbiBcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbi1cXHRscnVfc2l6ZSA9IFxcdTAwMjZtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XFxuLVxcbi1cXHRpZiAobnJfcGFnZXMgXFx1MDAzYyAwKVxcbi1cXHRcXHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XFxuLVxcbi1cXHRzaXplID0gKmxydV9zaXplO1xcbi1cXHRpZiAoV0FSTl9PTkNFKHNpemUgXFx1MDAzYyAwLFxcbi1cXHRcXHRcXFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXFxcblxcXCIsXFxuLVxcdFxcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XFxuLVxcdFxcdFZNX0JVR19PTigxKTtcXG4tXFx0XFx0KmxydV9zaXplID0gMDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2UgMClcXG4tXFx0XFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xcbitcXHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFxcdTAwMjZtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0pO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXFxuaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDRcXG4tLS0gYS9tbS9taWdyYXRlLmNcXG4rKysgYi9tbS9taWdyYXRlLmNcXG5AQCAtNzc2LDggKzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGludCBjcHVwaWQ7XFxuIFxcbi1cXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcXG4tXFx0XFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xcbitcXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXFxuK1xcdGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcXG4rXFxuIFxcdGlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG4gXFx0XFx0Zm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7XFxuIFxcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcXG5AQCAtODA3LDcgKzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcXG4gXFx0XFx0Zm9saW9fc2V0X2lkbGUobmV3Zm9saW8pO1xcbiBcXG4tXFx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XFxuIFxcdC8qXFxuIFxcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxcbiBcXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGYxMTQ5MWVlOWVkNWMuLjg3ZTY2N2M0MTBlZDQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC04NDMsMTkgKzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbiBcXHRcXHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cXG4gXFx0XFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xcbi1cXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuK1xcdFxcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xcbi1cXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFxcdTAwM2UgMSlcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xcbi1cXHRlbHNlXFxuK1xcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gI2Vsc2VcXG5AQCAtMzE5NSw4ICszMTk4LDggQEAgc3RydWN0IGN0cmxfcG9zIHtcXG4gXFx0aW50IGdhaW47XFxuIH07XFxuIFxcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcXG4rc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sXFxuK1xcdFxcdFxcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuQEAgLTMyMDUsNyArMzIwOCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbiBcXHRwb3MtXFx1MDAzZWdhaW4gPSBnYWluO1xcbiBcXHRwb3MtXFx1MDAzZXJlZmF1bHRlZCA9IHBvcy1cXHUwMDNldG90YWwgPSAwO1xcbiBcXG4tXFx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcXHUwMDNjPSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkrKykge1xcbitcXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcXHUwMDNjPSB0aWVyX21heDsgaSsrKSB7XFxuIFxcdFxcdHBvcy1cXHUwMDNlcmVmYXVsdGVkICs9IGxydWdlbi1cXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXFxuIFxcdFxcdFxcdFxcdCAgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bHJ1Z2VuLVxcdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xcbiBcXHRcXHRwb3MtXFx1MDAzZXRvdGFsICs9IGxydWdlbi1cXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcXG5AQCAtMzI2NiwxMSArMzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXFxuLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuLVxcbi1cXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFxcdTAwM2U9IE1BWF9OUl9HRU5TKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4rXFx0aW50IG9sZF9nZW47XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxcbkBAIC0zMjc5LDIwICszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbitcXHRcXHRvbGRfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXG4gXFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbi1cXHRcXHRpZiAoIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG4tXFx0XFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9zZXRfZ2VuX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xcbitcXHRcXHRscnVfc2V0X3JlZnNfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgMCk7XFxuK1xcdFxcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiBcXG4tXFx0cmV0dXJuICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuK1xcdCppc19maWxlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXFx1MDAyNm9sZF9mbGFncyk7XFxuK1xcdHJldHVybiBvbGRfZ2VuO1xcbiB9XFxuIFxcbiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xcbkBAIC0zMzAxLDIxICszMzA5LDIwIEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbiBcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG4tXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuLVxcbi1cXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIFxcbiBcXHRkbyB7XFxuLVxcdFxcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbitcXHRcXHRuZXdfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcXG4rXFxuIFxcdFxcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xcbiBcXHRcXHRpZiAobmV3X2dlbiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcXG4gXFx0XFx0XFx0cmV0dXJuIG5ld19nZW47XFxuIFxcbitcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuIFxcdFxcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XFxuLVxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG4tXFx0XFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X3NldF9nZW5fZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XFxuK1xcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbiBcXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0XFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxcbitcXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxcbiB7XFxuLVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbiBcXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xcbiBcXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcbkBAIC0zNTEyLDIyICszNTE4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4rXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxcbiB7XFxuLVxcdGludCBvbGRfZ2VuO1xcbitcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTtcXG4gXFxuIFxcdGlmICghZm9saW8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxKSk7XFxuK1xcbiBcXHRpZiAoZGlydHkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcXG4gXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuIFxcbiBcXHRpZiAod2Fsaykge1xcbi1cXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNmZpbGUsIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXFxuLVxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4rXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xcbiBcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbkBAIC0zNTQ5LDggKzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnI7XFxuIFxcdHBtZF90IHBtZHZhbDtcXG4gXFxuQEAgLTM2MDEsNyArMzYwNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHR3YWxrLVxcdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFx0bGFzdCA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoaSBcXHUwMDNjIFBUUlNfUEVSX1BURSBcXHUwMDI2XFx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKSlcXG5AQCAtMzYzNyw4ICszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcXG4gXFxuQEAgLTM2OTIsNyArMzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM3MDYsNyArMzcxMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdGkgPSBpIFxcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xcbiBcXHR9IHdoaWxlIChpIFxcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHRzcGluX3VubG9jayhwdGwpO1xcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuLVxcdGludCBnZW47XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXFx1MDAzZXB0bCk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcXG5AQCAtNDMwOCw4ICs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXG4gXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4tXFx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xcbi1cXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTQzNTMsMTMgKzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHR5b3VuZyArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXG4gXFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXFxuIFxcdGlmIChtbV9zdGF0ZSBcXHUwMDI2XFx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcXG4tXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4rXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxcbitcXHRcXHRcXHRcXHQgICAgcHZtdy1cXHUwMDNlcG1kKTtcXG4gXFxuIFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4gXFxuQEAgLTQ3MTYsNyArNDcxNyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXFxuIFxcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuIFxcbiBcXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbiBcXHQgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2VcXG4gXFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cXG4gXFx0ICovXFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCBcXHUwMDI2c3ApO1xcbi1cXHRmb3IgKHRpZXIgPSAxOyB0aWVyIFxcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcXG4tXFx0XFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFxcdTAwMjZwdik7XFxuK1xcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXFx1MDAyNnNwKTtcXG4rXFx0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xcbitcXHRcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXFx1MDAyNnB2KTtcXG4gXFx0XFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdikpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTQ4MzIsOCArNDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxcbiBcXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXFxuIFxcdCAqL1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbitcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcXG4rXFx0XFx0ICAgICAgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG4rXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXFxuK1xcdFxcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXFx1MDAyNnB2KTtcXG4gXFxuIFxcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdik7XFxuIH1cXG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbi1cXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXFxuLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xcbitcXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFxcdTAwMjZsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MTcuOTM5NzE3MTg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzk0NzgwMTczNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCIsXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJOVU1BX01JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIixcbiAgICBcIm1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhY3Jvc3MgTXVsdGktR2VuIExSVSAoTUdMUlUpIHBhZ2UgdHJhY2tpbmcsIG1lbWNnIExSVSB6b25lIHNpemUgYWNjb3VudGluZyAoY29udmVydGVkIHRvIGF0b21pY19sb25nX3QpLCBwYWdlIG1pZ3JhdGlvbiByZWZlcmVuY2UgY29weWluZyAoZm9saW9fbWlncmF0ZV9scnVfcmVmcyksIGFuZCBwYWdlIHJlY2xhbWF0aW9uIHNjYW5uaW5nIGFuZCB0aWVyIGNhbGN1bGF0aW9ucyBpbiB2bXNjYW4uIFRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgYWZmZWN0IGNvcmUga2VybmVsIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgbWlncmF0aW9uIHBhdGhzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkzZDM2OTkyMzgwMWY3ODdiM2NhZWFiOTlmN2IxZDY0NDkxNzViODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAzMCAxODo1MToxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDdkMWMwY2UxODlhODguLjFiNDlkOGI1OTFkYTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbiBcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XG4tXHR1bnNpZ25lZCBsb25nXHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuK1x0YXRvbWljX2xvbmdfdFx0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlclx0aXRlcjtcbiBcbiBcdC8qXG5AQCAtOTAyLDEwICs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuK1x0bG9uZyB2YWw7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbitcdHZhbCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjdlNDg3YzIzYWZmNzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMTAsNiArMTAsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWFmb3BzLmhcdTAwM2VcbiBcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbit7XG4rXHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbit9XG4rXG4gLyoqXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4gICogQGZvbGlvOiBUaGUgZm9saW8gdG8gdGVzdC5cbkBAIC0yNyw3ICszMiw3IEBAXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4rXHRyZXR1cm4gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiB9XG4gXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbkBAIC0xNDIsMTAgKzE0Nyw2NiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcbiBcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pXG4re1xuK1x0QlVJTERfQlVHX09OKExSVV9HRU5fTUFTSyBcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XG4rXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMgfHwgZ2VuIFx1MDAzYyAwKTtcbitcdC8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xuK1x0KmZsYWdzIHw9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuK31cbitcbisvKipcbisgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqXG4rICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zXG4rICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdGludCBnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXG4rXHQvKiBFeGNsdWRlIHRoZSBsZWdhbCAtMSBmcm9tIHRoZSB1bnNpZ25lZCBNQVhfTlJfR0VOUyBjb21wYXJpc29uICovXG4rXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFx1MDAyNlx1MDAyNiBnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4rXHRyZXR1cm4gZ2VuO1xuK31cbitcbisvKipcbisgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXG4rICpcbisgKiBGb3IgTUdMUlUsIFBHX3JlZmVyZW5jZWQgaG9sZHMgdGhlIGZpcnN0IHJlZiwgYW5kIHRoZSBleHRyYSBiaXRzIGhvbGQgdGhlXG4rICogcmVtYWluaW5nIHJlZnMuIEZvciBjbGFzc2ljYWwgTFJVIHRoZSBleHRyYSBiaXRzIGFyZSBub3QgdXNlZCwgc28gaXQgY2FuXG4rICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxXG4rICogbWVhbnMgUEdfcmVmZXJlbmNlZCBpcyBzZXQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSB6ZXJvLCBhbmQgcmVmcyA9PSAwIG1lYW5zXG4rICogUEdfcmVmZXJlbmNlZCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIGFsbCB1bnNldC5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKHJlZnMgXHUwMDNlIExSVV9SRUZTX01BWCk7XG4rXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxKTtcbitcbitcdCpmbGFncyBcdTAwMjY9IH5MUlVfUkVGU19GTEFHUztcbitcdGlmICghcmVmcylcbitcdFx0cmV0dXJuO1xuK1x0KmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRikpO1xuK31cbiBcbisvKipcbisgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4rICpcbisgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qXG5AQCAtMTU1LDExICsyMTYsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGxydV9nZXRfcmVmc19mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1xuK1x0ZG8ge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbit9XG4gXG4tXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X2dldF9nZW5fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbilcbkBAIC0yNzAsNyArMzQ0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdGZsYWdzID0gKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4rXHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7XG4gXHQvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbkBAIC0yOTUsNyArMzY5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbiBcdGZsYWdzID0gIXJlY2xhaW1pbmcgXHUwMDI2XHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcbi1cdGZsYWdzID0gc2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbitcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuIFx0Z2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTtcbkBAIC0zMDQsMTEgKzM3OCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuKy8qKlxuKyAqIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW9cbisgKiBAbmV3OiB0aGUgZGVzdGluYXRpb24gZm9saW9cbisgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXG4rICpcbisgKiBUcmFuc2ZlciB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIEBuZXcgZHVyaW5nIG1pZ3JhdGlvbjogdGhlIE1HTFJVXG4rICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXG4rICogYWN0aXZlL2luYWN0aXZlIExSVS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cdTAwM2VmbGFncy5mKSBcdTAwMjYgTFJVX1JFRlNfTUFTSztcbi1cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2bmV3LVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcbiB9XG4gI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG4gXG5AQCAtMzM3LDkgKzQxOSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVxuK1x0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKVxuK1x0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggOTRmOWMzZmY1NDE2MC4uOWIyN2NmNTNiZGJjNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC00OTIsMTEgKzQ5MiwxNCBAQCBlbnVtIGxydXZlY19mbGFncyB7XG4gICogZm9saW8tXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxuICAqL1xuICNkZWZpbmUgTUFYX05SX1RJRVJTXHRcdDRVXG4rI2RlZmluZSBMUlVfVElFUl9NSU5cdFx0MFVcbisjZGVmaW5lIExSVV9USUVSX01BWFx0XHQoTUFYX05SX1RJRVJTIC0gMSlcbiBcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxuIFxuICNkZWZpbmUgTFJVX0dFTl9NQVNLXHRcdCgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpXG4gI2RlZmluZSBMUlVfUkVGU19NQVNLXHRcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRilcbisjZGVmaW5lIExSVV9SRUZTX01BWFx0XHRCSVQoTFJVX1JFRlNfV0lEVEgpXG4gXG4gLypcbiAgKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xuaW5kZXggYzAyZGNlYTljMDNjMi4uZmI4NzRmZTQ5MmIyYiAxMDA2NDRcbi0tLSBhL21tL2ZvbGlvLmNcbisrKyBiL21tL2ZvbGlvLmNcbkBAIC0zNTMsMjYgKzM1MywyOCBAQCBzdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbitcdGludCByZWZzO1xuIFxuIFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbi1cdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkge1xuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkge1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcdFx0cmVmcyA9IGxydV9nZXRfcmVmc19mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcbiBcdFx0XHRpZiAoIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpXG4gXHRcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyArIEJJVChMUlVfUkVGU19QR09GRik7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyArIDEpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5AQCAtMzg0LDcgKzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGdlbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTtcbitcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNlcSA9IFJFQURfT05DRShmb2xpb19scnV2ZWMoZm9saW8pLVx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLmY5MTU0MGZlYWY3MzUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTE1MjksMjggKzE1MjksMTIgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRcdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcbi1cdGxvbmcgc2l6ZTtcbiBcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRscnVfc2l6ZSA9IFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4tXG4tXHRzaXplID0gKmxydV9zaXplO1xuLVx0aWYgKFdBUk5fT05DRShzaXplIFx1MDAzYyAwLFxuLVx0XHRcIiVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxuXCIsXG4tXHRcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XG4tXHRcdFZNX0JVR19PTigxKTtcbi1cdFx0KmxydV9zaXplID0gMDtcbi1cdH1cbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMClcbi1cdFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xuK1x0YXRvbWljX2xvbmdfYWRkKG5yX3BhZ2VzLCBcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuKysrIGIvbW0vbWlncmF0ZS5jXG5AQCAtNzc2LDggKzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuK1x0LyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqL1xuK1x0Zm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuK1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyArODA4LDYgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcbiBcdFx0Zm9saW9fc2V0X2lkbGUobmV3Zm9saW8pO1xuIFxuLVx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4gXHQvKlxuIFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXG4gXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmMTE0OTFlZTllZDVjLi44N2U2NjdjNDEwZWQ0IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtODQzLDE5ICs4NDMsMjIgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xuIFx0XHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cbiBcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuLVx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4rXHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHQvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi9cbi1cdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4tXHRlbHNlXG4rXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKSB7XG4rXHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdH0gZWxzZSB7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuK1x0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG5AQCAtMzE5NSw4ICszMTk4LDggQEAgc3RydWN0IGN0cmxfcG9zIHtcbiBcdGludCBnYWluO1xuIH07XG4gXG4tc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4tXHRcdFx0ICBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbitzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbitcdFx0XHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5AQCAtMzIwNSw3ICszMjA4LDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4gXHRwb3MtXHUwMDNlZ2FpbiA9IGdhaW47XG4gXHRwb3MtXHUwMDNlcmVmYXVsdGVkID0gcG9zLVx1MDAzZXRvdGFsID0gMDtcbiBcbi1cdGZvciAoaSA9IHRpZXIgJSBNQVhfTlJfVElFUlM7IGkgXHUwMDNjPSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkrKykge1xuK1x0Zm9yIChpID0gdGllcl9taW47IGkgXHUwMDNjPSB0aWVyX21heDsgaSsrKSB7XG4gXHRcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgKz0gbHJ1Z2VuLVx1MDAzZWF2Z19yZWZhdWx0ZWRbdHlwZV1baV0gK1xuIFx0XHRcdFx0ICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xuIFx0XHRwb3MtXHUwMDNldG90YWwgKz0gbHJ1Z2VuLVx1MDAzZWF2Z190b3RhbFt0eXBlXVtpXSArXG5AQCAtMzI2NiwxMSArMzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4rc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKmlzX2ZpbGUsXG4rXHRcdFx0ICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1x0aW50IG9sZF9nZW47XG4gXG4gXHQvKlxuIFx0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcbkBAIC0zMjc5LDIwICszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXG4gXHQgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiBcdGRvIHtcbitcdFx0b2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbiBcbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3NldF9nZW5fZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHQqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KFx1MDAyNm9sZF9mbGFncyk7XG4rXHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAxLDIxICszMzA5LDIwIEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuIFx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0XHRuZXdfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcbitcbiBcdFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXG4gXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKVxuIFx0XHRcdHJldHVybiBuZXdfZ2VuO1xuIFxuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4gXHRcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3NldF9nZW5fZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcbkBAIC0zMzIzLDkgKzMzMzAsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbilcbitcdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcbiBcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbkBAIC0zNTEyLDIyICszNTE4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcbitcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxuIHtcbi1cdGludCBvbGRfZ2VuO1xuK1x0aW50IG5ld19nZW4sIG9sZF9nZW4sIGZpbGU7XG4gXG4gXHRpZiAoIWZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRuZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxKSk7XG4rXG4gXHRpZiAoZGlydHkgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcbiBcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4gXG4gXHRpZiAod2Fsaykge1xuLVx0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbitcdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNmZpbGUsIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuLVx0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbitcdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgZmlsZSk7XG4gXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFx1MDAyNnZtYS1cdTAwM2VmbGFncykpIHtcbiBcdFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbkBAIC0zNTQ5LDggKzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdHVuc2lnbmVkIGludCBucjtcbiBcdHBtZF90IHBtZHZhbDtcbiBcbkBAIC0zNjAxLDcgKzM2MDcsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzYxNCw3ICszNjIwLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHdhbGstXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcdGxhc3QgPSBOVUxMO1xuIFxuIFx0aWYgKGkgXHUwMDNjIFBUUlNfUEVSX1BURSBcdTAwMjZcdTAwMjYgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQpKVxuQEAgLTM2MzcsOCArMzY0Myw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UocHVkX2xlYWYoKnB1ZCkpO1xuIFxuQEAgLTM2OTIsNyArMzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdFx0Z290byBuZXh0O1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM3MDYsNyArMzcxMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdGkgPSBpIFx1MDAzZSBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSArIDE7XG4gXHR9IHdoaWxlIChpIFx1MDAzYz0gTUlOX0xSVV9CQVRDSCk7XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHRzcGluX3VubG9jayhwdGwpO1xuQEAgLTQyNzAsOCArNDI3NCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XG4tXHRpbnQgZ2VuO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LVx1MDAzZXB0bCk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG5AQCAtNDMwOCw4ICs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFxuIFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4tXHRtYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKTtcbi1cdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbkBAIC00MzQxLDcgKzQzNDEsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTQzNTMsMTMgKzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHR5b3VuZyArPSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXG4gXHQvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi9cbiBcdGlmIChtbV9zdGF0ZSBcdTAwMjZcdTAwMjYgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpXG4tXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctXHUwMDNlcG1kKTtcbitcdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSksXG4rXHRcdFx0XHQgICAgcHZtdy1cdTAwM2VwbWQpO1xuIFxuIFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuIFxuQEAgLTQ3MTYsNyArNDcxNyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcbiBcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xuQEAgLTQ4MDksOSArNDgxMCw5IEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG4gXHQgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2VcbiBcdCAqIGFzIG1hbnkgcmVmYXVsdHMgYXMgdGhlIGZpcnN0IHRpZXIuXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCBcdTAwMjZzcCk7XG4tXHRmb3IgKHRpZXIgPSAxOyB0aWVyIFx1MDAzYyBNQVhfTlJfVElFUlM7IHRpZXIrKykge1xuLVx0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgXHUwMDI2cHYpO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUlOLCAyLCBcdTAwMjZzcCk7XG4rXHRmb3IgKHRpZXIgPSBMUlVfVElFUl9NSU4gKyAxOyB0aWVyIFx1MDAzYz0gTFJVX1RJRVJfTUFYOyB0aWVyKyspIHtcbitcdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbiBcdFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTQ4MzIsOCArNDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbiBcdCAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmVcbiBcdCAqIHdoaWNoIHR5cGUgdG8gc2Nhbi5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4rXHRcdCAgICAgIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbiBcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbkBAIC00OTMyLDggKzQ5MzUsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdH1cbiBcbiBcdFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbi1cdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxuLVx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTtcbitcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmxpc3QpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MTcuOTM5NzE4NzA0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc4OTQ1NzA0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFRoZSB0b3VjaGVkIGZpbGVzIGltbWVkaWF0ZWx5IHNpZ25hbCB0aGF0IHRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBsaWtlbHkgdG91Y2hpbmcgTXVsdGktR2VuIExSVSAoTUdMUlUsIG9yIGBDT05GSUdfTFJVX0dFTmAgZm9yIHVzKSwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nLiBJIHNlZSBjaGFuZ2VzIGluIGBtZW1jb250cm9sLmhgIGFuZCBgbWVtY29udHJvbC5jYCwgc28gSSBleHBlY3QgbWVtY2cgTFJVIHpvbmUgc2l6ZSBhY2NvdW50aW5nIGlzIGJlaW5nIG1vZGlmaWVkLiBUaGUgc3dpdGNoIGZyb20gYGxydV96b25lX3NpemVgIHRvIGBhdG9taWNfbG9uZ190YCBjb25maXJtcyB0aGF0IHN1c3BpY2lvbi5cblxuQmV5b25kIHRoYXQsIHRoZSBmaWxlIGxpc3Qgc3VnZ2VzdHMgcmVmYWN0b3Jpbmcgb2YgZm9saW8gZmxhZ3MgcmVsYXRlZCB0byBMUlUgcmVmZXJlbmNlcyBhbmQgZ2VuZXJhdGlvbnMsIHdoaWNoIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgTUdMUlUgd29ya3MuIE1pZ3JhdGlvbiBvZiBMUlUgcmVmZXJlbmNlcyBpcyBwcmVzZW50LCB3aGljaCBpcyBhIGtleSBwcm9jZXNzIHdoZW4gdGhlIExSVSBuZWVkcyB0byBjaGFuZ2UsIGFuZCBvZiBjb3Vyc2UsIHZtc2NhbiBsb2dpYyBpcyBhbHNvIGFmZmVjdGVkLiBBbGwgZXNzZW50aWFsIHBhcnRzIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHNldHRpbmdzLiBJJ2xsIHByb2JhYmx5IGRvIGEgcXVpY2sgZ2l0IGdyZXAgZm9yIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBNRU1DR2AgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcmVxdWlyZW1lbnRzIGFuZCB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgYmVpbmcgZW5hYmxlZCBhbmQvb3IgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4gVGhpcyBpcyBnb2luZyB0byBiZSBteSBrZXkgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MjQuNzI5MTc4OTA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjU2MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDA1LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTItXFxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTQtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTgtXFxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDIwLVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyNy1cXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MjQuNzc5NDQxMjM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc1NDM0MTI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEtjb25maWcgZm9yIExSVSBhbmQgTWVtY2cgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYExSVV9HRU5gIGFuZCBgTUVNQ0dgIGFyZSBpbnRlcmFjdGluZyB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIGRlZmluaXRpb25zIGluIGBtbS9LY29uZmlnYCBhcmUgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGRlZmluZWQgYW5kIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZmVhdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBMUlVfR0VOYCBpcyBkZXBlbmRlbnQgb24gYE1FTUNHYCwgb3IgaWYgdGhleSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBvciBpZiB0aGVyZSdzIG1vcmUgY29tcGxleCBsb2dpYyBhdCBwbGF5LiBJJ2xsIGZvY3VzIG9uIHdoYXQncyBkZWZpbmVkIGFuZCBob3cgdGhlIG9wdGlvbnMgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBjcnVjaWFsIHRvIGdldCBhbnkgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MToyNy41MzM3ODQ2MzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0XFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXFxuMTQwMTpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTQwMjpcXHRcXG4xNDAzOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQwNDpcXHRjb25maWcgTFJVX0dFTlxcbjE0MDU6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDA2OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwNzpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwODpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDA5OlxcdFxcdGhlbHBcXG4xNDEwOlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQxMTpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDEyOlxcdFxcbjE0MTM6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MTQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQxNTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDE2OlxcdFxcdGhlbHBcXG4xNDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTg6XFx0XFxuMTQxOTpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0MjA6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbjE0MjE6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQyMjpcXHRcXHRoZWxwXFxuMTQyMzpcXHRcXHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xcbjE0MjQ6XFx0XFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxcbjE0MjU6XFx0XFxuMTQyNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxcbjE0Mjc6XFx0XFxuMTQyODpcXHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4xNDI5OlxcdFxcdGRlZl9ib29sIHlcXG4xNDMwOlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTiBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcXG4xNDMxOlxcdCMgfVxcbjE0MzI6XFx0XFxuMTQzMzpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcXG4xNDM0OlxcdCAgICAgICBkZWZfYm9vbCBuXFxuMTQzNTpcXHRcXG4xNDM2OlxcdGNvbmZpZyBQRVJfVk1BX0xPQ0tcXG4xNDM3OlxcdFxcdGRlZl9ib29sIHlcXG4xNDM4OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sgXFx1MDAyNlxcdTAwMjYgTU1VIFxcdTAwMjZcXHUwMDI2IFNNUFxcbjE0Mzk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MToyNy41MzM4ODYyNTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTIwMDMwMDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byB0aGlzIGlzc3VlLCBhbmQgbmF0dXJhbGx5LCBJJ20gdGhpbmtpbmcsIFwiV2hlcmUncyB0aGUgdXN1YWwgc3VzcGVjdD9cIiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBCZWZvcmUgSSBnbyB0b28gZGVlcCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBgTUVNQ0dgIEtjb25maWcgb3B0aW9ucy4gWW91IGtub3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcyBhcmUgZW5hYmxlZCBhbmQgY29uZmlndXJlZCBhcyBleHBlY3RlZC4gSXQncyBlYXN5IHRvIHdhc3RlIHRpbWUgY2hhc2luZyBnaG9zdHMgaWYgc29tZXRoaW5nIHNpbXBsZSBpcyBvZmYgaW4gdGhlIGNvbmZpZy4gR290dGEgcnVsZSBvdXQgdGhlIG9idmlvdXMgZmlyc3QsIGFsd2F5cy4gTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBgTUVNQ0dgIEtjb25maWcsIHNwZWNpZmljYWxseSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgY29udHJvbCBncm91cHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjMyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MTozMi40NTM5MTkyMzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2ODE1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4Ni1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MzIuNTA5NjA0MzgzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk0OTcyMTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUgZm9yIE1FTUNHIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gYE1FTUNHYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIE1lbW9yeSBDb250cm9sIEdyb3Vwcy4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSwgc28gYSBzeXN0ZW1hdGljIGV4cGxvcmF0aW9uIGlzIGluIG9yZGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgTUVNQ0cgc2V0dGluZ3MgdG8gdGhlIGJ1aWxkIHN5c3RlbS4gQXJlIHRoZXJlIGFueSBuZXcgb3B0aW9ucyBpbnRyb2R1Y2VkPyBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcyB0aGF0IEkgbWF5IGhhdmUgZm9yZ290dGVuPyBJJ20gYW50aWNpcGF0aW5nIGZpbmRpbmcgdGhlIG1haW4gTUVNQ0cgZW5hYmxpbmcgb3B0aW9uLCBhbnkgYXNzb2NpYXRlZCBzdWJzeXN0ZW0tc3BlY2lmaWMgY29udHJvbHMgKGxpa2UgcmVzb3VyY2UgbGltaXRzKSwgYW5kIHBvc3NpYmx5IGV2ZW4gZWFybHkgYm9vdCBjb25maWd1cmF0aW9uIGRldGFpbHMgdGhhdCBhcmUgcmVsZXZhbnQuIEtub3dpbmcgdGhlIEtjb25maWcgc3RydWN0dXJlIGlzIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgTUVNQ0cncyBhdmFpbGFibGUgZmVhdHVyZXMgYW5kIGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGVtIGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6MzYuNDU5MzI4MjYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4MDpcXHRcXHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xcbjEwODE6XFx0XFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxcbjEwODI6XFx0XFxuMTA4MzpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMDg0OlxcdFxcbjEwODU6XFx0Y29uZmlnIE1FTUNHXFxuMTA4NjpcXHRcXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4xMDg3OlxcdFxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4xMDg4OlxcdFxcdHNlbGVjdCBFVkVOVEZEXFxuMTA4OTpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuMTA5MDpcXHRcXHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcXG4xMDkxOlxcdFxcdGhlbHBcXG4xMDkyOlxcdFxcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxcbjEwOTM6XFx0XFxuMTA5NDpcXHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbjEwOTU6XFx0XFx0Ym9vbFxcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTg6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjEwOTk6XFx0XFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUxOjM2LjQ1OTUwMTYxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjI5OTQ0Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgVGhlc2UgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGZvY3VzZXMgb24gaWRlbnRpZnlpbmcgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucyBhbmQgaWYgYW55dGhpbmcgbm9uLXRyaXZpYWwgaXMgaGFwcGVuaW5nIHdpdGggdGhlbS4gSSdtIG1haW5seSBpbnRlcmVzdGVkIGluIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyB0aG9zZSByZXByZXNlbnQgdGhlIGVudHJ5IHBvaW50cyBvciBrZXkgcGllY2VzIG9mIHRoZSBjaGFuZ2VkIGxvZ2ljIHRoYXQgSSB3aWxsIG5lZWQgdG8gbG9vayBpbnRvIGFuZCB1bmRlcnN0YW5kIGluIG1vcmUgZGV0YWlsLCBhcyB3ZWxsIGFzIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZC5cblxuU28sIEkgc2VlIGNoYW5nZXMgYWNyb3NzIGEgZmV3IGZpbGVzLlxuXG5JbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCB0aGUgYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCBpcyBjaGFuZ2VkLCBzcGVjaWZpY2FsbHkgYGxydV96b25lX3NpemVgIHdoaWNoIGlzIG5vdyBhbiBgYXRvbWljX2xvbmdfdGAuICBBbHNvLCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgaXMgY2hhbmdlZCB0byBiZWNvbWUgYSBgc3RhdGljIGlubGluZWAgZnVuY3Rpb24uIE5vdCBtdWNoIHRvIGJlIGNvbmNlcm5lZCBhYm91dCB5ZXQuXG5cblRoZW4sIHRoZXJlJ3MgYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgLCB3aGljaCBjb250YWlucyBudW1lcm91cyBgc3RhdGljIGlubGluZWAgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZm9saW8gTFJVIG1hbmFnZW1lbnQ6IGBmb2xpb19mbGFnc19pc19maWxlX2xydWAsIGBmb2xpb19pc19maWxlX2xydWAsIGFuZCBzZXZlcmFsIHJlbGF0ZWQgdG8gZmxhZ3MgYW5kIHJlZmVyZW5jZSBjb3VudHMgbGlrZSBgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19scnVfcmVmc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbHJ1X2dlbmAsIGBscnVfZ2VuX2FkZF9mb2xpb2AsIGBscnVfZ2VuX2RlbF9mb2xpb2AsIGFuZCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AuIExvb2tzIGxpa2UgYSBsb3Qgb2YgaW5saW5lIGZ1bmN0aW9ucywgdGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cblxuTmV4dCwgYGluY2x1ZGUvbGludXgvbW16b25lLmhgIGludHJvZHVjZXMgc29tZSBuZXcgbWFjcm9zOiBgTFJVX1RJRVJfTUlOYCwgYExSVV9USUVSX01BWGAsIGFuZCBgTFJVX1JFRlNfTUFYYC4gSSdsbCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlc2UsIGJ1dCB0aGV5IGFyZSBtb3N0IGxpa2VseSByZWxhdGVkIHRvIHRoZSBpbmxpbmUgZnVuY3Rpb24gY2hhbmdlcyBtZW50aW9uZWQgcHJldmlvdXNseS5cblxuYG1tL2ZvbGlvLmNgIGhhcyBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgIGFzIHN0YXRpYyBmdW5jdGlvbnMuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiB0aGVzZSBhbmQgdGhlIGFmb3JlbWVudGlvbmVkIGZvbGlvIGZ1bmN0aW9ucy5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydHMuIEluIGBtbS9tZW1jb250cm9sLmNgLCB0aGVyZSdzIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIHdoaWNoICppc24ndCogc3RhdGljLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQncyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gc28gaXQgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgdGhlc2UgY2hhbmdlcy4gSW4gYG1tL21pZ3JhdGUuY2AsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBub24tc3RhdGljLCBzbyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgZm9yIHRoaXMuIEZpbmFsbHksIGBtbS92bXNjYW4uY2AgY29udGFpbnMgc2V2ZXJhbCBzdGF0aWMgZnVuY3Rpb25zLCBhbmQgb25lIG5vbi1zdGF0aWMgKGFuZCBleHBvcnRlZCkgZnVuY3Rpb24gYGxydV9nZW5fbG9va19hcm91bmRgLiBJJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhpcyBmdXJ0aGVyLiBUaGUgb3RoZXIgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBmaWxlIGNhbiBiZSBzZWVuIGFzIGF1eGlsaWFyeSBmdW5jdGlvbnMuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIGFyZSBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXMgaGFwcGVuaW5nIHdpdGggdGhlc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDIyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6NDQuMDg5NDQ4NDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTkwNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fbG9va19hcm91bmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz05MTg9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy05ODItXFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpIFxcdTAwMjZcXHUwMDI2IHB2bXcucHRlKSB7XFxubW0vcm1hcC5jOjk4MzpcXHRcXHRcXHRpZiAobHJ1X2dlbl9sb29rX2Fyb3VuZChcXHUwMDI2cHZtdywgbnIpKVxcbm1tL3JtYXAuYy05ODQtXFx0XFx0XFx0XFx0cmVmZXJlbmNlZCsrO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjc5MT1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyMC0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcXG5tbS92bXNjYW4uYzoyODIxOiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cXG5tbS92bXNjYW4uYy0yODIyLSAqXFxuLS1cXG5tbS92bXNjYW4uYz00MDc0PXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDA5My1cXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xcbm1tL3Ztc2Nhbi5jOjQwOTQ6XFx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcXG5tbS92bXNjYW4uYy00MDk1LVxcdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxcbi0tXFxubW0vdm1zY2FuLmM9NDIxMz1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDI1OS0gKi9cXG5tbS92bXNjYW4uYzo0MjYwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MjYxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTE6NDQuMTM4NDQzMzk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk0NTc4NjAzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIEtleSBQZXJmb3JtYW5jZSBJbmRpY2F0b3JzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBmb2N1c2luZyBvbiB0d28gY3JpdGljYWwgc3lzdGVtIGZsYWdzOiBgZm9saW9fbWlncmF0ZV9mbGFnc2AgYW5kIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAuIFRoZXNlIGFyZSBvZnRlbiB0aGUgY3VscHJpdHMgd2hlbiBJIHNlZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIG1lbW9yeSBiZWhhdmlvciwgc28gaXQncyBzbWFydCB0byBzdGFydCB3aXRoIHRoZW0uIEEgcXVpY2sgYXVkaXQgb2YgdGhlaXIgY3VycmVudCBzZXR0aW5ncyB3aWxsIHRlbGwgbWUgYSBsb3QuIEFyZSB0aGV5IHNldCBhcyBleHBlY3RlZCwgZ2l2ZW4gdGhlIHdvcmtsb2FkIGFuZCBoYXJkd2FyZSBwcm9maWxlPyBBbnkgZGV2aWF0aW9ucyBmcm9tIHRoZSByZWNvbW1lbmRlZCB2YWx1ZXMgY291bGQgaW1tZWRpYXRlbHkgcG9pbnQgdG8gdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGlzc3VlIEknbSBkZWJ1Z2dpbmcuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBob3cgdGhlc2UgZmxhZ3MgaW50ZXJhY3Qgd2l0aCBhbnkgcmVjZW50IGtlcm5lbCB1cGdyYWRlcywgYmVjYXVzZSBjaGFuZ2VzIHRoZXJlIGNhbiBlYXNpbHkgaW52YWxpZGF0ZSBlc3RhYmxpc2hlZCBhc3N1bXB0aW9ucy4gRnVydGhlcm1vcmUsIEknbGwgYmUgY2VydGFpbiB0byBjb3JyZWxhdGUgdGhpcyBpbmZvcm1hdGlvbiB3aXRoIHN5c3RlbSBsb2dzIGFuZCByZWxldmFudCBtZXRyaWNzIHRvIGdldCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBwZXJzcGVjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4OTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MTo1My41OTYzMDYzNzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjU0Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX21pZ3JhdGVfZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL21pZ3JhdGUuYy03NzQtICovXFxubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9taWdyYXRlLmMtNzc2LXtcXG4tLVxcbm1tL21pZ3JhdGUuYy04NjMtfVxcbm1tL21pZ3JhdGUuYzo4NjQ6RVhQT1JUX1NZTUJPTChmb2xpb19taWdyYXRlX2ZsYWdzKTtcXG5tbS9taWdyYXRlLmMtODY1LVxcbi0tXFxubW0vbWlncmF0ZS5jPTg3MD1zdGF0aWMgaW50IF9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5tbS9taWdyYXRlLmMtODkwLVxcbm1tL21pZ3JhdGUuYzo4OTE6XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XFxubW0vbWlncmF0ZS5jLTg5Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUxLVxcdFxcdFxcdGVsc2VcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTI6XFx0XFx0XFx0XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhuZXdmb2xpbywgZm9saW8pO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1My1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUxOjUzLjY0NjU2Mzc5OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5OTEwMDIzMDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYC4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGhvdyBtZW1vcnkgY2dyb3VwcyBtYW5hZ2UgdGhlaXIgTFJVIHNpemUsIGFuZCB0aGF0IG1lYW5zIGl0J3MgaW50cmluc2ljYWxseSB0aWVkIHRvIHRoZSBwZXJmb3JtYW5jZSBhbmQgcmVzcG9uc2l2ZW5lc3Mgb2Ygd29ya2xvYWRzIHRoYXQgYXJlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqZXhhY3RseSogaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIHVwZGF0aW5nIHRoZSBMUlUgbGlzdCBzaXplIGJhc2VkIG9uIG1lbW9yeSB1c2FnZSwgcmVjbGFpbSBhY3Rpdml0eSwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gdXNlci1jb25maWd1cmVkIGxpbWl0cyB3aXRoaW4gYSBtZW1vcnkgY2dyb3VwLiBUaGVyZSBjb3VsZCBiZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBjZ3JvdXAgc3Vic3lzdGVtcyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIHRvby4gU3BlY2lmaWNhbGx5IEknbSBob3BpbmcgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgc3VidGxlIGJ1Z3MsIG9yIGZvciBwb3NzaWJsZSBhcmVhcyBmb3Igb3B0aW1pemF0aW9ucyB0byByZWR1Y2UgbGF0ZW5jeSBvciBpbXByb3ZlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgZWZmaWNpZW5jeSwgb3IgZXZlbiBpZGVudGlmeSByYWNlIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDUzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTI6MDMuNTU2NTg5NzgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQyNDkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZm9saW8uYz0xMTIzPXN0YXRpYyB2b2lkIGxydXZlY19yZXBhcmVudF9scnUoc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLFxcbi0tXFxubW0vZm9saW8uYy0xMTQzLVxcdFxcdCAqL1xcbm1tL2ZvbGlvLmM6MTE0NDpcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7XFxubW0vZm9saW8uYzoxMTQ1OlxcdFxcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1LCB6aWQsIC0obG9uZylzaXplKTtcXG5tbS9mb2xpby5jLTExNDYtXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1MDE9c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1MTgtLyoqXFxubW0vbWVtY29udHJvbC5jOjE1MTk6ICogbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUgLSBhY2NvdW50IGZvciBhZGRpbmcgb3IgcmVtb3ZpbmcgYW4gbHJ1IHBhZ2VcXG5tbS9tZW1jb250cm9sLmMtMTUyMC0gKiBAbHJ1dmVjOiBtZW1fY2dyb3VwIHBlciB6b25lIGxydSB2ZWN0b3JcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTI3LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoxNTI4OnZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcXG5tbS9tZW1jb250cm9sLmMtMTUyOS1cXHRcXHRcXHRcXHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vdm1zY2FuLmM9MTU5Mj11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS92bXNjYW4uYy0xNjQ0LSAqIFVwZGF0ZSBMUlUgc2l6ZXMgYWZ0ZXIgaXNvbGF0aW5nIHBhZ2VzLiBUaGUgTFJVIHNpemUgdXBkYXRlcyBtdXN0XFxubW0vdm1zY2FuLmM6MTY0NTogKiBiZSBjb21wbGV0ZSBiZWZvcmUgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUgZHVlIHRvIGEgc2FuaXR5IGNoZWNrLlxcbm1tL3Ztc2Nhbi5jLTE2NDYtICovXFxuLS1cXG5tbS92bXNjYW4uYz00NjIxPXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy00NjQyLVxcdFxcdFxcdC8qIE1vdmUgdGhlIGFjY291bnRpbmcsIGRvIG5vdCBkdXBsaWNhdGUgaXQuICovXFxubW0vdm1zY2FuLmM6NDY0MzpcXHRcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7XFxubW0vdm1zY2FuLmM6NDY0NDpcXHRcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XFxubW0vdm1zY2FuLmMtNDY0NS1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUyOjAzLjYwNTAxODQzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzA4MzY5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vZm9saW8uY2AgYWdhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcmVsYXRlZCBtb2RpZmljYXRpb25zIGluIHRob3NlIGFyZWFzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IHRoZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBpbiB0aG9zZSB0d28gZmlsZXMuIFxuXG5UaGVuIEknbGwgc2hpZnQgZ2VhcnMgYW5kIGZvY3VzIG9uIGBtbS9mb2xpby5jYCBmb3Igbm93LCBhbmQgdHJhY2sgZG93biB3aGVyZSBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgIGFyZSBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczNTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MjowNS43MzU4NTg4MDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ZvbGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNDY6XFx0XFx0XFx0fVxcbiAzNDc6XFx0XFx0fVxcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHRsb2NhbF91bmxvY2soXFx1MDAyNmNwdV9mYmF0Y2hlcy5sb2NrKTtcXG4gMzUwOlxcdH1cXG4gMzUxOlxcdFxcbiAzNTI6XFx0I2lmZGVmIENPTkZJR19MUlVfR0VOXFxuIDM1MzpcXHRcXG4gMzU0OlxcdHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gMzU1OlxcdHtcXG4gMzU2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIDM1NzpcXHRcXHRpbnQgcmVmcztcXG4gMzU4OlxcdFxcbiAzNTk6XFx0XFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxcbiAzNjA6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNjE6XFx0XFxuIDM2MjpcXHRcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4gMzYzOlxcdFxcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XFxuIDM2NDpcXHRcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xcbiAzNjU6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNjY6XFx0XFx0fVxcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRkbyB7XFxuIDM2OTpcXHRcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuIDM3MDpcXHRcXHRcXHRyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7XFxuIDM3MTpcXHRcXHRcXHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcXG4gMzcyOlxcdFxcdFxcdFxcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcXG4gMzczOlxcdFxcdFxcdFxcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4gMzc0OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMzc1OlxcdFxcdFxcdH1cXG4gMzc2OlxcdFxcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XFxuIDM3NzpcXHRcXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4gMzc4OlxcdH1cXG4gMzc5OlxcdFxcbiAzODA6XFx0c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDM4MTpcXHR7XFxuIDM4MjpcXHRcXHRpbnQgZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIDM4MzpcXHRcXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4gMzg0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc2VxO1xcbiAzODU6XFx0XFxuIDM4NjpcXHRcXHRpZiAoZ2VuIFxcdTAwM2MgMClcXG4gMzg3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbiAzOTA6XFx0XFx0Zm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7XFxuIDM5MTpcXHRcXG4gMzkyOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzkzOlxcdFxcdHNlcSA9IFJFQURfT05DRShmb2xpb19scnV2ZWMoZm9saW8pLVxcdTAwM2VscnVnZW4ubWluX3NlcVt0eXBlXSk7XFxuIDM5NDpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzk1OlxcdFxcdC8qIHdoZXRoZXIgY2FuIGRvIHdpdGhvdXQgc2h1ZmZsaW5nIHVuZGVyIHRoZSBMUlUgbG9jayAqL1xcbiAzOTY6XFx0XFx0cmV0dXJuIGdlbiA9PSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XFxuIDM5NzpcXHR9XFxuIDM5ODpcXHRcXG4gMzk5OlxcdCNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbiA0MDA6XFx0XFxuIDQwMTpcXHRzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDQwMjpcXHR7XFxuIDQwMzpcXHR9XFxuIDQwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTI6MDUuNzM1OTcwODQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg5MzQwNjQyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIEZvbGlvIE1hbmFnZW1lbnQgaW4gbW0vZm9saW8uYyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgZm9saW8gcmVmZXJlbmNlIGNvdW50cywgcGFydGljdWxhcmx5IGhvdyB0aGV5J3JlIGluY3JlbWVudGVkIGFuZCBjbGVhcmVkLiBUaGUgZnVuY3Rpb25zIGBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2Agc2VlbSBjZW50cmFsIHRvIHRoYXQsIHNvIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlaXIgdXNhZ2Ugd2l0aGluIGBtbS9mb2xpby5jYC4gSSBleHBlY3QgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNDA1IG9ud2FyZHMgd2lsbCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyBvZiB0aGVzZSBjcml0aWNhbCBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBoYW5kbGUgb24gaG93IHRoZSBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIGdlbmVyYXRpb24gYW5kIGFzc29jaWF0ZWQgcmVmZXJlbmNlIGNvdW50IG1lY2hhbmlzbXMgZnVuY3Rpb24gaW4gdGhpcyBjcnVjaWFsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDIwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MjoxNC42NzAwMzc5NDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ZvbGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcbiA0MDE6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiA0MDI6XFx0e1xcbiA0MDM6XFx0fVxcbiA0MDQ6XFx0XFxuIDQwNTpcXHRzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gNDA2OlxcdHtcXG4gNDA3OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDA4OlxcdH1cXG4gNDA5OlxcdFxcbiA0MTA6XFx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIDQxMTpcXHRcXG4gNDEyOlxcdC8qKlxcbiA0MTM6XFx0ICogZm9saW9fbWFya19hY2Nlc3NlZCAtIE1hcmsgYSBmb2xpbyBhcyBoYXZpbmcgc2VlbiBhY3Rpdml0eS5cXG4gNDE0OlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIG1hcmsuXFxuIDQxNTpcXHQgKlxcbiA0MTY6XFx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIHBlcmZvcm0gb25lIG9mIHRoZSBmb2xsb3dpbmcgdHJhbnNpdGlvbnM6XFxuIDQxNzpcXHQgKlxcbiA0MTg6XFx0ICogKiBpbmFjdGl2ZSx1bnJlZmVyZW5jZWRcXHQtXFx1MDAzZVxcdGluYWN0aXZlLHJlZmVyZW5jZWRcXG4gNDE5OlxcdCAqICogaW5hY3RpdmUscmVmZXJlbmNlZFxcdC1cXHUwMDNlXFx0YWN0aXZlLHVucmVmZXJlbmNlZFxcbiA0MjA6XFx0ICogKiBhY3RpdmUsdW5yZWZlcmVuY2VkXFx0LVxcdTAwM2VcXHRhY3RpdmUscmVmZXJlbmNlZFxcbiA0MjE6XFx0ICpcXG4gNDIyOlxcdCAqIFdoZW4gYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gaXMgbm90IHlldCB2aXNpYmxlLCBzbyBzYWZlIGZvciBub24tYXRvbWljIG9wcyxcXG4gNDIzOlxcdCAqIF9fZm9saW9fc2V0X3JlZmVyZW5jZWQoKSBtYXkgYmUgc3Vic3RpdHV0ZWQgZm9yIGZvbGlvX21hcmtfYWNjZXNzZWQoKS5cXG4gNDI0OlxcdCAqL1xcbiA0MjU6XFx0dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDQyNjpcXHR7XFxuIDQyNzpcXHRcXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG4gNDI4OlxcdFxcdFxcdHJldHVybjtcXG4gNDI5OlxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbiA0MzA6XFx0XFx0XFx0bHJ1X2dlbl9pbmNfcmVmcyhmb2xpbyk7XFxuIDQzMTpcXHRcXHRcXHRyZXR1cm47XFxuIDQzMjpcXHRcXHR9XFxuIDQzMzpcXHRcXG4gNDM0OlxcdFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkge1xcbiA0MzU6XFx0XFx0XFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pO1xcbiA0MzY6XFx0XFx0fSBlbHNlIGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkge1xcbiA0Mzc6XFx0XFx0XFx0LypcXG4gNDM4OlxcdFxcdFxcdCAqIFVuZXZpY3RhYmxlIHBhZ2VzIGFyZSBvbiB0aGUgXFxcIkxSVV9VTkVWSUNUQUJMRVxcXCIgbGlzdC4gQnV0LFxcbiA0Mzk6XFx0XFx0XFx0ICogdGhpcyBsaXN0IGlzIG5ldmVyIHJvdGF0ZWQgb3IgbWFpbnRhaW5lZCwgc28gbWFya2luZyBhblxcbiA0NDA6XFx0XFx0XFx0ICogdW5ldmljdGFibGUgcGFnZSBhY2Nlc3NlZCBoYXMgbm8gZWZmZWN0LlxcbiA0NDE6XFx0XFx0XFx0ICovXFxuIDQ0MjpcXHRcXHR9IGVsc2UgaWYgKCFmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykpIHtcXG4gNDQzOlxcdFxcdFxcdC8qXFxuIDQ0NDpcXHRcXHRcXHQgKiBJZiB0aGUgZm9saW8gaXMgb24gdGhlIExSVSwgcXVldWUgaXQgZm9yIGFjdGl2YXRpb24gdmlhXFxuIDQ0NTpcXHRcXHRcXHQgKiBjcHVfZmJhdGNoZXMubHJ1X2FjdGl2YXRlLiBPdGhlcndpc2UsIGFzc3VtZSB0aGUgZm9saW8gaXMgaW4gYVxcbiA0NDY6XFx0XFx0XFx0ICogZm9saW9fYmF0Y2gsIG1hcmsgaXQgYWN0aXZlIGFuZCBpdCdsbCBiZSBtb3ZlZCB0byB0aGUgYWN0aXZlXFxuIDQ0NzpcXHRcXHRcXHQgKiBMUlUgb24gdGhlIG5leHQgZHJhaW4uXFxuIDQ0ODpcXHRcXHRcXHQgKi9cXG4gNDQ5OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2xydShmb2xpbykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUyOjE0LjY3MDE0NDkxNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDIzMjA0NDUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSG90IFBhdGhzIGZvciBGdXp6aW5nIFByaW9yaXRpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgY2hhbmdlIGFuZCB0cnlpbmcgdG8gcGlucG9pbnQgdGhlIG1vc3QgY3JpdGljYWwgZnVuY3Rpb25zIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuIGBmb2xpb19tYXJrX2FjY2Vzc2VkYCBpcywgb2YgY291cnNlLCBhIGhpZ2gtZnJlcXVlbmN5IGZ1bmN0aW9uLCBidXQgaXQncyBpbXBvcnRhbnQgbm90IHRvIG92ZXJsb29rIG90aGVycyB0aGF0IGFyZSBhbHNvIHJlbGV2YW50LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSB0aGUgaW5zdHJ1Y3Rpb24gdG8gZXh0cmFjdCB0aGUgXCJzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLFwiIHNvIGxldCdzIGNoZWNrIHRoYXQuIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50cy4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBzZWVtcyBpbXBvcnRhbnQg4oCTIGEgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludCBmb3Igcm1hcCBsb29rLWFyb3VuZCwgY2FsbGVkIGZyb20gYG1tL3JtYXAuYzpmb2xpb19yZWZlcmVuY2VkX29uZWAuIFRoZW4gdGhlcmUncyBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFub3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbiB1c2VkIGR1cmluZyBwYWdlIG1pZ3JhdGlvbiAoYG1tL21pZ3JhdGUuY2ApLiBBbmQgZmluYWxseSwgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpcyBhbHNvIG5vbi1zdGF0aWMsIGluIGBtbS9tZW1jb250cm9sLmNgLlxuXG5MZXQncyBkbyBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzY2FuIG9mIHRoZSBtb2RpZmllZCBmaWxlcyDigJMgYG1tL3Ztc2Nhbi5jYCwgYG1tL2ZvbGlvLmNgLCBhbmQgYG1tL21lbWNvbnRyb2wuY2Ag4oCTIGFuZCB0aGUgY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZXMuIE9rYXksIGhlcmUgYXJlIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgYW5kIHRoZWlyIHR5cGVzOlxuKiBJbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgOiBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgKHN0YXRpYyBpbmxpbmUpXG4qIEluIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYDogQSBidW5jaCBvZiBzdGF0aWMgaW5saW5lczogYGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1YCwgYGZvbGlvX2lzX2ZpbGVfbHJ1YCwgYGxydV9zZXRfZ2VuX2ZsYWdzYCwgYGxydV9nZXRfZ2VuX2ZsYWdzYCwgYGxydV9zZXRfcmVmc19mbGFnc2AsIGBscnVfZ2V0X3JlZnNfZmxhZ3NgLCBgZm9saW9fbHJ1X3JlZnNgLCBgZm9saW9fc2V0X2xydV9yZWZzYCwgYGZvbGlvX2xydV9nZW5gLCBgbHJ1X2dlbl9hZGRfZm9saW9gLCBgbHJ1X2dlbl9kZWxfZm9saW9gLCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AuXG4qIEluIGBtbS9mb2xpby5jYDogYGxydV9nZW5faW5jX3JlZnNgIChzdGF0aWMpLCBgbHJ1X2dlbl9jbGVhcl9yZWZzYCAoc3RhdGljKVxuKiBJbiBgbW0vbWVtY29udHJvbC5jYDogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCAobm9uLXN0YXRpYylcbiogSW4gYG1tL21pZ3JhdGUuY2A6IGBmb2xpb19taWdyYXRlX2ZsYWdzYCAobm9uLXN0YXRpYylcbiogSW4gYG1tL3Ztc2Nhbi5jYDogYGxydV9nZW5fc2V0X3JlZnNgIChzdGF0aWMpLCBgcmVhZF9jdHJsX3Bvc2AgKHN0YXRpYyksIGBmb2xpb191cGRhdGVfZ2VuYCAoc3RhdGljKSwgYGZvbGlvX2luY19nZW5gIChzdGF0aWMpLCBgdXBkYXRlX2JhdGNoX3NpemVgIChzdGF0aWMpLCBgd2Fsa191cGRhdGVfZm9saW9gIChzdGF0aWMpLCBgd2Fsa19wdGVfcmFuZ2VgIChzdGF0aWMpLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCAoc3RhdGljKSwgYGxydV9nZW5fbG9va19hcm91bmRgIChub24tc3RhdGljKSwgYGlzb2xhdGVfZm9saW9gIChzdGF0aWMpLCBgZ2V0X3RpZXJfaWR4YCAoc3RhdGljKSwgYGdldF90eXBlX3RvX3NjYW5gIChzdGF0aWMpLCBgZXZpY3RfZm9saW9zYCAoc3RhdGljKVxuXG5MZXQncyBjb25maXJtIHRoYXQgdGhvc2UgdGhyZWUga2V5IGZ1bmN0aW9ucyBhcmUgaW5kZWVkIG5vbi1zdGF0aWM6IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpbiBgbW0vdm1zY2FuLmNgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaW4gYG1tL21pZ3JhdGUuY2AsIGFuZCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGluIGBtbS9tZW1jb250cm9sLmNgLiBZZXAsIHRoYXQncyBjb3JyZWN0LlxuXG5Pa2F5LCBhcmUgdGhlcmUgb3RoZXIgbWVhbmluZ2Z1bCBjaGFuZ2VzIHRoYXQgc2hvdWxkIGFsc28gYmUgZnV6emVkPyBBZnRlciByZXZpZXdpbmcsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBsb29rIGxpa2UgdGhlIG1haW4gbm9uLXN0YXRpYyBvbmVzLiBUaGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsbHkgbWVhbmluZ2Z1bDsgaXQgaXMgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIHJlZmFjdG9ycyBtdWx0aS1nZW4gTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZSBmbGFncyBtYW5pcHVsYXRpb24uIEl0IGFsc28gZml4ZXMgdGllciBjYWxjdWxhdGlvbiwgdXBkYXRlcyBmb2xpbyBnZW5lcmF0aW9uIGR1cmluZyBNTSB3YWxraW5nLCBjaGFuZ2VzIExSVSB6b25lIHNpemUgYWNjb3VudGluZyB0byBhdG9taWMgb3BlcmF0aW9ucyBpbiBtZW1jZywgYW5kIGZpeGVzIGZvbGlvIHJlZmVyZW5jZSBtaWdyYXRpb24uIFRoaXMgdG91Y2hlcyBjb3JlIHBhZ2UgcmVjbGFtYXRpb24sIExSVSBtYW5hZ2VtZW50LCBwYWdlIG1pZ3JhdGlvbiwgYW5kIG1lbWNnIGFjY291bnRpbmcg4oCTIGFsbCBmdW5kYW1lbnRhbCBwYXJ0cyBvZiB0aGUga2VybmVsLCBhbmQgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUvR0NFIGtlcm5lbCBleGVjdXRpb24uIEl0IG1vZGlmaWVzIGFsbCBvZiB0aGUgbW9zdCBwZXJmb3JtYW5jZS1zZW5zaXRpdmUgYXJlYXMsIHdoaWNoIGlzIGdyZWF0LlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIEtjb25maWcgb3B0aW9ucyBmb3IgdGhpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdGVzdGluZyB0aGUgY29uZmlndXJhdGlvbnMgcHJvcGVybHk6XG4xLiAgYExSVV9HRU5gOiBFbmFibGVzIE11bHRpLUdlbiBMUlUgY29kZS5cbjIuICBcblxuIiwiSW5wdXRUb2tlbnMiOjE5NDAwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUyOjI4LjkwMjE5MTE5OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3NjU3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1JR1JBVElPTlxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY3Mz1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjgzLVxcbm1tL0tjb25maWc6Njg0OmNvbmZpZyBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY4NS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUyOjI4Ljk2MDk2MDk5OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzc1NDk0MTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE1pZ3JhdGlvbiBTdXBwb3J0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBgTUlHUkFUSU9OYCBpbiB0aGlzIGtlcm5lbC4gTGV0J3MgZ2V0IHJpZ2h0IGRvd24gdG8gaXQuIE15IGZpcnN0IHN0b3AgaXMgZ29pbmcgdG8gYmUgYG1tL0tjb25maWdgLCBhbmQgSSdtIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgNjgwLiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0LCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGVzZSBzb3J0cyBvZiBjb25maWd1cmF0aW9ucy4gSG9wZWZ1bGx5LCB0aGUgbG9naWMgcmVsYXRlZCB0byBlbmFibGluZyBvciBzZWxlY3RpbmcgYE1JR1JBVElPTmAgaXMgcHJldHR5IGNsZWFybHkgbGFpZCBvdXQgdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIGRlcGVuZGVuY2llcyBvbiBhcmNoaXRlY3R1cmUgZmVhdHVyZXMsIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMsIG9yIG1heWJlIGV2ZW4gb3RoZXIgc3Vic3lzdGVtcy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRldmVsb3BlcnMgaGF2ZSBzZXQgaXQgdXAuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDA2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTI6NDYuNzE1OTA0Mzc3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3MDpcXHRcXHQgIHRob3NlIHBhZ2VzIHRvIGFub3RoZXIgZW50aXR5LCBzdWNoIGFzIGEgaHlwZXJ2aXNvciwgc28gdGhhdCB0aGVcXG4gNjcxOlxcdFxcdCAgbWVtb3J5IGNhbiBiZSBmcmVlZCB3aXRoaW4gdGhlIGhvc3QgZm9yIG90aGVyIHVzZXMuXFxuIDY3MjpcXHRcXG4gNjczOlxcdGNvbmZpZyBOVU1BX01JR1JBVElPTlxcbiA2NzQ6XFx0XFx0Ym9vbCBcXFwiTlVNQSBwYWdlIG1pZ3JhdGlvblxcXCJcXG4gNjc1OlxcdFxcdGRlZmF1bHQgeVxcbiA2NzY6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiA2Nzc6XFx0XFx0c2VsZWN0IE1JR1JBVElPTlxcbiA2Nzg6XFx0XFx0aGVscFxcbiA2Nzk6XFx0XFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXFxuIDY4MDpcXHRcXHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXFxuIDY4MTpcXHRcXHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcXG4gNjgyOlxcdFxcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxcbiA2ODM6XFx0XFxuIDY4NDpcXHRjb25maWcgTUlHUkFUSU9OXFxuIDY4NTpcXHRcXHRib29sXFxuIDY4NjpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiA2ODc6XFx0XFxuIDY4ODpcXHRjb25maWcgREVWSUNFX01JR1JBVElPTlxcbiA2ODk6XFx0XFx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2IFpPTkVfREVWSUNFXFxuIDY5MDpcXHRcXG4gNjkxOlxcdGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cXG4gNjkyOlxcdFxcdGJvb2xcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXFxuIDY5NTpcXHRcXHRib29sXFxuIDY5NjpcXHRcXG4gNjk3OlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbiA2OTg6XFx0XFx0ZGVmX2Jvb2wgblxcbiA2OTk6XFx0XFx0aGVscFxcbiA3MDA6XFx0XFx0ICBBbGxvd3MgdGhlIHBhZ2VibG9ja19vcmRlciB2YWx1ZSB0byBiZSBkeW5hbWljIGluc3RlYWQgb2YganVzdCBzdGFuZGFyZFxcbiA3MDE6XFx0XFx0ICBIVUdFVExCX1BBR0VfT1JERVIgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgSHVnZVRMQiBwYWdlIHNpemVzIGF2YWlsYWJsZVxcbiA3MDI6XFx0XFx0ICBvbiBhIHBsYXRmb3JtLlxcbiA3MDM6XFx0XFxuIDcwNDpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgcGFnZWJsb2NrX29yZGVyIGNhbm5vdCBleGNlZWQgTUFYX1BBR0VfT1JERVIgYW5kIHdpbGwgYmVcXG4gNzA1OlxcdFxcdCAgY2xhbXBlZCBkb3duIHRvIE1BWF9QQUdFX09SREVSLlxcbiA3MDY6XFx0XFxuIDcwNzpcXHRjb25maWcgQ09OVElHX0FMTE9DXFxuIDcwODpcXHRcXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcXHUwMDI2XFx1MDAyNiBDT01QQUNUSU9OKSB8fCBDTUFcXG4gNzA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1Mjo0Ni43MTYwMzM1OTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0NzAzMzUzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFF1ZXJ5OiBUaGUgXCJNSUdSQVRJT05cIiBTZWFyY2gqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdXNlciB0eXBlZCBpbiBcIk1JR1JBVElPTi5cIiBMZXQncyBicmVhayBkb3duIHdoYXQncyBwb3RlbnRpYWxseSBiZWhpbmQgdGhhdC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgYWx3YXlzOiB3aGF0IGFyZSB0aGUgbGlrZWx5IGNvbnRleHRzLCBhbmQgd2hhdCBpbmZvcm1hdGlvbiBkbyB0aGV5IGhvcGUgdG8gZ2xlYW4gZnJvbSBtZT8gXCJNSUdSQVRJT05cIiBpcyBhIG1hc3NpdmVseSBvdmVybG9hZGVkIHRlcm0uIEl0IGNvdWxkIHJlZmVyIHRvOlxuXG4qICAgKipEYXRhIE1pZ3JhdGlvbioqOiBJcyB0aGlzIGFib3V0IG1vdmluZyBkYXRhIGJldHdlZW4gZGF0YWJhc2VzLCBwbGF0Zm9ybXMsIG9yIHN0b3JhZ2Ugc29sdXRpb25zPyBJZiBzbywgYW0gSSBnb2luZyB0byBuZWVkIHRvIHNwZWNpZnkgYSBzb3VyY2UgYW5kIHRhcmdldD8gV2hhdCBhYm91dCBkYXRhIHRyYW5zZm9ybWF0aW9uIGFuZCBtYXBwaW5nPyBBcmUgdGhleSBpbnRlcmVzdGVkIGluIGEgc3BlY2lmaWMgdG9vbCBvciBtZXRob2RvbG9neT8gVGhlIG51YW5jZXMgaGVyZSBhcmUgdmFzdCwgY292ZXJpbmcgZXZlcnl0aGluZyBmcm9tIEVUTCBwcm9jZXNzZXMgdG8gZGF0YWJhc2UgcmVwbGljYXRpb24gYW5kIGRpc2FzdGVyIHJlY292ZXJ5IHN0cmF0ZWdpZXMuXG4qICAgKipJbmZyYXN0cnVjdHVyZSBNaWdyYXRpb24qKjogQXJlIHdlIHRhbGtpbmcgYWJvdXQgbW92aW5nIGFwcGxpY2F0aW9ucyBvciBlbnRpcmUgaW5mcmFzdHJ1Y3R1cmUgKHNlcnZlcnMsIFZNcywgY29udGFpbmVycykgdG8gdGhlIGNsb3VkLCBiZXR3ZWVuIGNsb3VkIHByb3ZpZGVycywgb3IgZnJvbSBvbi1wcmVtaXNlIHRvIGEgY2xvdWQgZW52aXJvbm1lbnQ/IFRoaXMgcmFpc2VzIHF1ZXN0aW9ucyBhcm91bmQgY29tcGF0aWJpbGl0eSwgc2VjdXJpdHksIGRvd250aW1lLCBhbmQgdGhlIHJlcXVpcmVkIGV4cGVydGlzZSAtIGlzIGl0IGEgXCJsaWZ0IGFuZCBzaGlmdFwiIHNjZW5hcmlvLCBvciBhcmUgdGhleSByZS1hcmNoaXRlY3RpbmcgZXZlcnl0aGluZz9cbiogICAqKkNvZGUgTWlncmF0aW9uKio6IFRoZSB0ZXJtIFwibWlncmF0aW9uXCIgY2FuIGFsc28gYmUgdXNlZCwgc3BlY2lmaWNhbGx5IGluIHJlZmVyZW5jZSB0byBjb2RlLiBUaGlzIGNhbiBiZSBpbiBjb250ZXh0IG9mIHBvcnRpbmcgbGVnYWN5IGFwcGxpY2F0aW9ucyB0byBhIG5ld2VyIGNvZGViYXNlIG9yIHBsYXRmb3JtLiBPciwgdGhpcyBjb3VsZCBiZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgbGlicmFyeSBvciBmcmFtZXdvcmsgdXBncmFkZS5cbiogICAqKk90aGVyIENvbnRleHRzKio6IFRoZXJlIGFyZSBhbHNvIG90aGVyLCBtb3JlIGdlbmVyYWwgbWVhbmluZ3Mgb2YgbWlncmF0aW9uLCBkZXBlbmRpbmcgb24gdGhlIGZpZWxkLiBBbSBJIHN1cmUgSSBrbm93IHRoZSB1c2VycycgY29udGV4dCwgYW5kIGNhbiBJIG1ha2UgYW4gYXNzdW1wdGlvbj9cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBsYXJnZXIgY29udGV4dCwgb3IgYXNrIGNsYXJpZnlpbmcgcXVlc3Rpb25zLCBiZWZvcmUgZGlnZ2luZyBpbnRvIGFueSBwYXJ0aWN1bGFyIGFzcGVjdC4gVGhlIHNlYXJjaCB0ZXJtIGFsb25lIG9mZmVycyB2ZXJ5IGxpbWl0ZWQgaW5mb3JtYXRpb24sIGFuZCBpdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSB1c2VyJ3MgaW1wbGljaXQgaW50ZW50LiBJJ2xsIG5lZWQgdG8gdXNlIG1vcmUgaW5mb3JtYXRpb24gdG8gYXNzZXNzIHRoZWlyIG5lZWRzLCBhbmQgZGV0ZXJtaW5lIGlmIHRoZXkgcmVxdWlyZSBhIGdlbmVyYWwgb3ZlcnZpZXcsIG9yIGEgZGVlcCBkaXZlIGludG8gc3BlY2lmaWMgdG9vbHMsIHRlY2hub2xvZ2llcywgYW5kIGJlc3QgcHJhY3RpY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc4OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTM6MTQuMTg2MzcyMzY2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE1OTkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTUlHUkFUSU9OXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTgyPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01ODMtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcbm1tL0tjb25maWc6NTg0OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTU4NS1cXG4tLVxcbm1tL0tjb25maWc9NjQyPWNvbmZpZyBDT01QQUNUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY0NC1cXHRkZWZhdWx0IHlcXG5tbS9LY29uZmlnOjY0NTpcXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02NDYtXFx0ZGVwZW5kcyBvbiBNTVVcXG4tLVxcbm1tL0tjb25maWc9NjczPWNvbmZpZyBOVU1BX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NzYtXFx0ZGVwZW5kcyBvbiBOVU1BIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL0tjb25maWc6Njc3OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY3OC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTc2NT1jb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzY5LVxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxubW0vS2NvbmZpZzo3NzA6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNzcxLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTA1Nj1jb25maWcgQ01BXFxuLS1cXG5tbS9LY29uZmlnLTEwNTgtXFx0ZGVwZW5kcyBvbiBNTVVcXG5tbS9LY29uZmlnOjEwNTk6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctMTA2MC1cXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MzoxNC4yMzg1MzcxMDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM2MzA0MDkwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeSBhbmQgc3BlY2lmaWNhbGx5LCBob3cgYENPTVBBQ1RJT05gIGFuZCBgTlVNQV9NSUdSQVRJT05gIGludGVyYWN0LiBJdCdzIGNsZWFyIHRoYXQgYm90aCBvZiB0aGVzZSB1bHRpbWF0ZWx5IHBvaW50IHRvIHVzaW5nIHRoZSBgTUlHUkFUSU9OYCBmdW5jdGlvbmFsaXR5LiBUbyByZWFsbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIGxpbmtlZCwgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIExldCdzIGdvIHN0cmFpZ2h0IHRvIGBtbS9NYWtlZmlsZWAuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGBtaWdyYXRlLm9gLCBgbWVtY29udHJvbC5vYCwgYW5kIGB2bXNjYW4ub2AgYXJlIGNvbXBpbGVkLiBTZWVpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgbGlua2luZyBzdGVwcyB0aGVyZSB3aWxsIGdpdmUgbWUgYSBzb2xpZCBwaWN0dXJlIG9mIHdoZXJlIHRoZXNlIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IG1vZHVsZXMgZml0IGludG8gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQuIFRoaXMgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgZGVzaWduIGFuZCBwb3RlbnRpYWwgaG90c3BvdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTg0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTM6MjcuODY4OTQ4OTU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzMwNzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIobWlncmF0ZXxtZW1jb250cm9sfHZtc2NhbilcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTUxPW9iai15XFx0XFx0XFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxcXFxubW0vTWFrZWZpbGUtNTItXFx0XFx0XFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcXFxcbm1tL01ha2VmaWxlOjUzOlxcdFxcdFxcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NC1cXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlPTk3PW9iai0kKENPTkZJR19NRU1URVNUKVxcdFxcdCs9IG1lbXRlc3Qub1xcbm1tL01ha2VmaWxlOjk4Om9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUub1xcbm1tL01ha2VmaWxlLTk5LW9iai0kKENPTkZJR19OVU1BKSArPSBtZW1vcnktdGllcnMub1xcbi0tXFxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19NRU1DR19WMSkgKz0gbWVtY29udHJvbC12MS5vXFxubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgKz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xcbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSArPSBicGZfbWVtY29udHJvbC5vXFxubW0vTWFrZWZpbGUtMTA4LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUzOjI3Ljk2NjI2Mjg1N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MjQ3NzI4NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBQYXRjaCdzIFJlYWNoIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYHZtc2Nhbi5vYCBhbmQgYGZvbGlvLm9gIGFyZSBjb3JlLCByZXNpZGluZyBpbiBgb2JqLXlgLiBUaGUgTUdMUlUgbG9naWMgaXMgZ2F0ZWQgYnkgYExSVV9HRU5gLCB3aGljaCBpbXBhY3RzIGB2bXNjYW4uY2AsIGBmb2xpby5jYCwgYW5kIGBtbV9pbmxpbmUuaGAuIGBMUlVfR0VOX0VOQUJMRURgIGlzIG91ciBkZWZhdWx0IE1HTFJVIHN3aXRjaC4gIGBNRU1DR2AgaXMgY3JpdGljYWwsIGNvbXBpbGluZyBgbWVtY29udHJvbC5vYCBhbmQgZW5hYmxpbmcgbWVtY2cncyBMUlUgc2l6ZSB0cmFja2luZyB2aWEgYGxydV96b25lX3NpemVgLiAgV2UgYWxzbyBoYXZlIGBNSUdSQVRJT05gIG9yIGl0cyBhbHRlcm5hdGl2ZXMgKGBOVU1BX01JR1JBVElPTmAsIGBDT01QQUNUSU9OYCkgd2hpY2ggYnJpbmcgaW4gYG1pZ3JhdGUub2AuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcHJlcmVxdWlzaXRlcy5cblxuMS4gIGBXb3J0aEZ1enppbmdgOiBDaGVja3Mgb3V0LCBpdCdzIHRydWUsIHdoaWNoIGlzIGdvb2QuXG4yLiAgYEZvY3VzU3ltYm9sc2A6ICBFeGNlbGxlbnQsIHdlJ3JlIHRhcmdldGluZzpcbiAgICAqICAgYGxydV9nZW5fbG9va19hcm91bmRgXG4gICAgKiAgIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWBcbiAgICAqICAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgXG4zLiAgYEVuYWJsZUNvbmZpZ3NgOiBXZSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlOlxuICAgICogICBgTFJVX0dFTmBcbiAgICAqICAgYExSVV9HRU5fRU5BQkxFRGBcbiAgICAqICAgYE1FTUNHYFxuICAgICogICBgTUlHUkFUSU9OYCAob3IgYENPTVBBQ1RJT05gIG9yIGBOVU1BX01JR1JBVElPTmApXG5cblNpbmNlIGBNSUdSQVRJT05gIGlzIGEgc2ltcGxlIGJvb2xlYW4gYW5kIGRvZXNuJ3QgaGF2ZSBhIHByb21wdCwgc2V0dGluZyBlaXRoZXIgYENPTVBBQ1RJT05gIG9yIGBOVU1BX01JR1JBVElPTmAgd2lsbCB3b3JrLCBvciBzZXR0aW5nIGBNSUdSQVRJT05gLiBMZXQncyBsaXN0IGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAsIGBNRU1DR2AsIGFuZCB0aGVuIGBNSUdSQVRJT05gLCBgQ09NUEFDVElPTmAsIGFuZCBgTlVNQV9NSUdSQVRJT05gLlxuXG5SZWFzb25pbmcgaXMgc291bmQuIFRoaXMgcGF0Y2ggZGl2ZXMgaW50byB0aGUgaGVhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIE1HTFJVIHJlZmVyZW5jZS9nZW5lcmF0aW9uIGZsYWcgaGFuZGxpbmcsIG1ha2luZyBgbHJ1X3pvbmVfc2l6ZWAgYXRvbWljLCBmaXhpbmcgbWlncmF0aW9uIGJ1Z3MsIGFuZCB0d2Vha2luZyB0aWVyIGNhbGN1bGF0aW9ucy9tbS13YWxrIHVwZGF0ZXMgaW4gYHZtc2NhbmAuIFRoaXMgaGl0cyBjcml0aWNhbCBNTSBmdW5jdGlvbmFsaXR5LCBhbmQgdGhlIHBhdGNoIGlzIGZ1bGx5IHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDIwOCwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTM6MzcuMjEzOTkzMjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM3Mzg1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiTlVNQV9NSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYWNyb3NzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHRyYWNraW5nLCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcgKGNvbnZlcnRlZCB0byBhdG9taWNfbG9uZ190KSwgcGFnZSBtaWdyYXRpb24gcmVmZXJlbmNlIGNvcHlpbmcgKGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMpLCBhbmQgcGFnZSByZWNsYW1hdGlvbiBzY2FubmluZyBhbmQgdGllciBjYWxjdWxhdGlvbnMgaW4gdm1zY2FuLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBjb3JlIGtlcm5lbCBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIG1pZ3JhdGlvbiBwYXRocyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiTlVNQV9NSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYWNyb3NzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBwYWdlIHRyYWNraW5nLCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcgKGNvbnZlcnRlZCB0byBhdG9taWNfbG9uZ190KSwgcGFnZSBtaWdyYXRpb24gcmVmZXJlbmNlIGNvcHlpbmcgKGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMpLCBhbmQgcGFnZSByZWNsYW1hdGlvbiBzY2FubmluZyBhbmQgdGllciBjYWxjdWxhdGlvbnMgaW4gdm1zY2FuLiBUaGVzZSBjaGFuZ2VzIGRpcmVjdGx5IGFmZmVjdCBjb3JlIGtlcm5lbCBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIG1pZ3JhdGlvbiBwYXRocyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1MzozNy40MTc3MzgxOTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTU0OTk2MDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzBUMTg6NTM6MzcuNDE4MjQ4Nzk3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE5NTQ0NzkwNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSByZWNsYWltIGxvZ2ljIChNR0xSVSByZWZlcmVuY2UvZ2VuZXJhdGlvbiBmbGFnIGhlbHBlcnMsIG11bHRpLWdlbiBMUlUgdGllciBjYWxjdWxhdGlvbnMsIG1lbWNnIHBlci1ub2RlIExSVSB6b25lIHNpemUgYXRvbWljIGNvdW50ZXJzLCBhbmQgZm9saW8gbWlncmF0aW9uIHJlZmVyZW5jZSBzdGF0ZSBoYW5kbGluZykuXFxuXFxuMS4gTm8ga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBjb3B5aW5nIHBhdGhzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIGlvY3RsIHN0cnVjdHMsIGV0Yy4pLlxcbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIGZsYWcgdmFsdWVzIChlLmcuIGBmaWxlYCBhbmQgYG9sZF9nZW5gIGluIGBmb2xpb191cGRhdGVfZ2VuYC9gd2Fsa191cGRhdGVfZm9saW9gLCBgc3RydWN0IGN0cmxfcG9zYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGd1YXJkZWQgYnkgY29udHJvbCBmbG93IGNvbmRpdGlvbnMuXFxuMy4gTm8gbWVtb3J5IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjay9wYWdlIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBjb25jdXJyZW50IGZsYWcgdXBkYXRlcywgYXRvbWljcywgb3IgcGFnZSBzdGF0ZSB0cmFuc2l0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBzYWZldHksIGNvbmN1cnJlbmN5LCBvciBzYW5pdHkgY2hlY2tzIGhhbmRsZWQgYnkgS0FTQU4vTE9DS0RFUC9WTV9XQVJOX09OLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5M2QzNjk5MjM4MDFmNzg3YjNjYWVhYjk5ZjdiMWQ2NDQ5MTc1Yjg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMzAgMTg6NTE6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li4xYjQ5ZDhiNTkxZGE2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTEzLDcgKzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbitcdGF0b21pY19sb25nX3RcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcdGl0ZXI7XG4gXG4gXHQvKlxuQEAgLTkwMiwxMCArOTAyLDE1IEBAIHN0YXRpYyBpbmxpbmVcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbitcdGxvbmcgdmFsO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdHJldHVybiBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHR2YWwgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuK1x0aWYgKFdBUk5fT05fT05DRSh2YWwgXHUwMDNjIDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB2YWw7XG4gfVxuIFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCA2MjFjODY1M2Q4ZjdlLi43ZTQ4N2MyM2FmZjcwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTEwLDYgKzEwLDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVhZm9wcy5oXHUwMDNlXG4gXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4re1xuK1x0cmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7XG4rfVxuK1xuIC8qKlxuICAqIGZvbGlvX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVP1xuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXG5AQCAtMjcsNyArMzIsNyBAQFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuK1x0cmV0dXJuIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gfVxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5AQCAtMTQyLDEwICsxNDcsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpXG4gXHRyZXR1cm4gd29ya2luZ3NldCA/IE1BWF9OUl9USUVSUyAtIDEgOiBvcmRlcl9iYXNlXzIocmVmcyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rLyoqXG4rICogbHJ1X3NldF9nZW5fZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuKyAqIEBnZW46IGdlbmVyYXRpb24gbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxuK3tcbitcdEJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgXHUwMDI2IExSVV9SRUZTX01BU0spO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcdTAwM2MgMCk7XG4rXHQvKiBTdG9yZSBnZW4gb2Zmc2V0IGJ5IDEsIHplcm8gbWVhbnMgdGhlIGZvbGlvIGlzIG9mZi1saXN0LiAqL1xuK1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9HRU5fTUFTSztcbitcdCpmbGFncyB8PSAoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbit9XG4rXG4rLyoqXG4rICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKlxuKyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xuKyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRpbnQgZ2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1xuK1x0LyogRXhjbHVkZSB0aGUgbGVnYWwgLTEgZnJvbSB0aGUgdW5zaWduZWQgTUFYX05SX0dFTlMgY29tcGFyaXNvbiAqL1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSBcdTAwMjZcdTAwMjYgZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuK1x0cmV0dXJuIGdlbjtcbit9XG4rXG4rLyoqXG4rICogbHJ1X3NldF9yZWZzX2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCB0byBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxuKyAqXG4rICogRm9yIE1HTFJVLCBQR19yZWZlcmVuY2VkIGhvbGRzIHRoZSBmaXJzdCByZWYsIGFuZCB0aGUgZXh0cmEgYml0cyBob2xkIHRoZVxuKyAqIHJlbWFpbmluZyByZWZzLiBGb3IgY2xhc3NpY2FsIExSVSB0aGUgZXh0cmEgYml0cyBhcmUgbm90IHVzZWQsIHNvIGl0IGNhblxuKyAqIGFsc28gYmUgc2VlbiBhcyB0aGUgcmVmcyBjb3VudCBuZXZlciBleGNlZWRzIDEuIEluIGJvdGggY2FzZXMsIHJlZnMgPT0gMVxuKyAqIG1lYW5zIFBHX3JlZmVyZW5jZWQgaXMgc2V0IGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgemVybywgYW5kIHJlZnMgPT0gMCBtZWFuc1xuKyAqIFBHX3JlZmVyZW5jZWQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSBhbGwgdW5zZXQuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XG4rXHRpZiAoIXJlZnMpXG4rXHRcdHJldHVybjtcbitcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcbit9XG4gXG4rLyoqXG4rICogbHJ1X2dldF9yZWZzX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqXG4rICogUmVhZHMgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHNldCBieSBscnVfc2V0X3JlZnNfZmxhZ3MoKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHQvKlxuQEAgLTE1NSwxMSArMjE2LDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBscnVfZ2V0X3JlZnNfZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbitcbitcdGRvIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rfVxuIFxuLVx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pXG5AQCAtMjcwLDcgKzM0NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRmbGFncyA9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuK1x0c2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pO1xuIFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5AQCAtMjk1LDcgKzM2OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHQvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovXG4gXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4rXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICszNzgsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbisvKipcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXG4rICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4rICogQG9sZDogdGhlIHNvdXJjZSBmb2xpb1xuKyAqXG4rICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxuKyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZVxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXHUwMDNlZmxhZ3MuZikgXHUwMDI2IExSVV9SRUZTX01BU0s7XG4tXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNm5ldy1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIFxuQEAgLTMzNyw5ICs0MTksMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbitcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbitcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDkyLDExICs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuKyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4rI2RlZmluZSBMUlVfVElFUl9NQVhcdFx0KE1BWF9OUl9USUVSUyAtIDEpXG4gXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcbiBcbiAjZGVmaW5lIExSVV9HRU5fTUFTS1x0XHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKVxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1x0XHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpXG4rI2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmZiODc0ZmU0OTJiMmIgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4rKysgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdHJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTtcbitcdFx0aWYgKHJlZnMgPT0gTFJVX1JFRlNfTUFYKSB7XG4gXHRcdFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxuIFx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgKyBCSVQoTFJVX1JFRlNfUEdPRkYpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMgKyAxKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuQEAgLTM4NCw3ICszODYsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChnZW4gXHUwMDNjIDApXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUyB8IEJJVChQR193b3JraW5nc2V0KSwgMCk7XG4rXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0Zm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS1cdTAwM2VscnVnZW4ubWluX3NlcVt0eXBlXSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi5mOTE1NDBmZWFmNzM1IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0xNTI5LDI4ICsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcbiBcdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVx0dW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7XG4tXHRsb25nIHNpemU7XG4gXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0bHJ1X3NpemUgPSBcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XTtcbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2MgMClcbi1cdFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xuLVxuLVx0c2l6ZSA9ICpscnVfc2l6ZTtcbi1cdGlmIChXQVJOX09OQ0Uoc2l6ZSBcdTAwM2MgMCxcbi1cdFx0XCIlcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxcblwiLFxuLVx0XHRfX2Z1bmNfXywgbHJ1dmVjLCBscnUsIG5yX3BhZ2VzLCBzaXplKSkge1xuLVx0XHRWTV9CVUdfT04oMSk7XG4tXHRcdCpscnVfc2l6ZSA9IDA7XG4tXHR9XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbitcdGF0b21pY19sb25nX2FkZChucl9wYWdlcywgXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0pO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlLmNcbisrKyBiL21tL21pZ3JhdGUuY1xuQEAgLTc3Niw4ICs3NzYsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRpbnQgY3B1cGlkO1xuIFxuLVx0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTtcbitcdC8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi9cbitcdGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbitcbiBcdGlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbiBcdFx0Zm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7XG4gXHRpZiAoZm9saW9fdGVzdF9jbGVhcl9hY3RpdmUoZm9saW8pKSB7XG5AQCAtODA3LDcgKzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4gXHRcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcbiBcbi1cdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuIFx0LypcbiBcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxuIFx0ICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZjExNDkxZWU5ZWQ1Yy4uODdlNjY3YzQxMGVkNCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTg0MywxOSArODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbiBcdFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXG4gXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuK1x0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4gXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0LyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovXG4tXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuLVx0ZWxzZVxuK1x0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSkge1xuK1x0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHR9IGVsc2Uge1xuIFx0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbitcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuQEAgLTMxOTUsOCArMzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7XG4gXHRpbnQgZ2FpbjtcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuLVx0XHRcdCAgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4rc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sXG4rXHRcdFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbiB7XG4gXHRpbnQgaTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuQEAgLTMyMDUsNyArMzIwOCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuIFx0cG9zLVx1MDAzZWdhaW4gPSBnYWluO1xuIFx0cG9zLVx1MDAzZXJlZmF1bHRlZCA9IHBvcy1cdTAwM2V0b3RhbCA9IDA7XG4gXG4tXHRmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpIFx1MDAzYz0gbWluKHRpZXIsIE1BWF9OUl9USUVSUyAtIDEpOyBpKyspIHtcbitcdGZvciAoaSA9IHRpZXJfbWluOyBpIFx1MDAzYz0gdGllcl9tYXg7IGkrKykge1xuIFx0XHRwb3MtXHUwMDNlcmVmYXVsdGVkICs9IGxydWdlbi1cdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW2ldICtcbiBcdFx0XHRcdCAgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZscnVnZW4tXHUwMDNlcmVmYXVsdGVkW2hpc3RdW3R5cGVdW2ldKTtcbiBcdFx0cG9zLVx1MDAzZXRvdGFsICs9IGxydWdlbi1cdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gK1xuQEAgLTMyNjYsMTEgKzMyNjksMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqL1xuLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuK3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLFxuK1x0XHRcdCAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbitcdGludCBvbGRfZ2VuO1xuIFxuIFx0LypcbiBcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXG5AQCAtMzI3OSwyMCArMzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIFx0ICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4gXHRkbyB7XG4rXHRcdG9sZF9nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXG4gXHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxuLVx0XHRcdHJldHVybiAtMTtcbitcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAoKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0XHRuZXdfZmxhZ3MgfD0gQklUKFBHX3dvcmtpbmdzZXQpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0KmlzX2ZpbGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydShcdTAwMjZvbGRfZmxhZ3MpO1xuK1x0cmV0dXJuIG9sZF9nZW47XG4gfVxuIFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG5AQCAtMzMwMSwyMSArMzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIFxuIFx0ZG8ge1xuLVx0XHRuZXdfZ2VuID0gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdFx0bmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XG4rXG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuIFx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4rXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG5AQCAtMzUxMiwyMiArMzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuK1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4rXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZmaWxlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICszNTU3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzYwMSw3ICszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggKzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNjkyLDcgKzM2OTYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgKzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzMDgsOCArNDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MzUzLDEzICs0MzUzLDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuK1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzE2LDcgKzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuK1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllcisrKSB7XG4rXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00ODMyLDggKzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMwVDE4OjUzOjM3LjQxODI1MDIxN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTk1NDQ1MDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBKdXN0aWZpY2F0aW9uIGZvciBEZWRpY2F0ZWQgRnV6emluZyBTZXNzaW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcXVlc3Rpb24gYXQgaGFuZCBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtlcm5lbE1lbW9yeVNhbml0aXplciAoS01TQU4pIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtlcm5lbCBBZGRyZXNzIFNhbml0aXplciAoS0FTQU4pIHJ1bnMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB3ZSBuZWVkIHRvIGJlIGV4dHJlbWVseSBqdWRpY2lvdXMgYWJvdXQgc3Bpbm5pbmcgdXAgS01TQU47IGl0J3MgcmVzb3VyY2UtaW50ZW5zaXZlLCBzbyB3ZSAqb25seSogdXNlIGl0IHdoZW4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGNoZWNrcyBhcmUgaW5zdWZmaWNpZW50LlxuXG5GaXJzdCwgSSBsb29rZWQgYXQgdGhlIG92ZXJhbGwgY2hhbmdlcy4gVGhpcyBwYXRjaCBzZXJpZXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFyZWFzOiBNR0xSVSAoTXVsdGktR2VuZXJhdGlvbmFsIExSVSksIGZvbGlvIGZsYWdzLCBtZW1jZyB6b25lIExSVSBzaXplcywgYW5kIGZvbGlvIG1pZ3JhdGlvbi4gTXkgaW5pdGlhbCBzY2FuIHdhcyB0byBzZWUgaWYgYW55dGhpbmcgd2FzIHVzZXItZmFjaW5nLCBidXQgaXQncyBhbGwgaW50ZXJuYWwga2VybmVsIHN0dWZmLCBwcmltYXJpbHkgYXJvdW5kIHBhZ2UgY2FjaGUgbWFuYWdlbWVudCBhbmQgTFJVIGxpc3QgbWFuaXB1bGF0aW9uLiBUaGF0J3MgZ29vZDsgZmV3ZXIgdmVjdG9ycyBmb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cbk5leHQsIEkgbWV0aG9kaWNhbGx5IHdlbnQgdGhyb3VnaCB0aGUgY29kZSwgZnVuY3Rpb24gYnkgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBpcyBsb29raW5nIGZvciB0aGUgKnNwZWNpZmljKiBLTVNBTiB0cmlnZ2VyOiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBkaXN0aW5jdGlvbjogS0FTQU4gY292ZXJzIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBsb2NraW5nIGJ1Z3MsIGFuZCB0aGUgbGlrZS4gS01TQU7igJlzIHRlcnJpdG9yeSBpcyB0aGUgbmFzdGllciBzdHVmZiAtIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuSSBleGFtaW5lZCB0aGUgYGZvbGlvX3VwZGF0ZV9nZW5gIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIHRoZSBgZmlsZWAgdmFyaWFibGUuIFRoZXJlJ3MgY29uZGl0aW9uYWwgbG9naWMgdGhlcmUsIGJ1dCBJIHRyYWNlZCBhbGwgcG9zc2libGUgZXhlY3V0aW9uIHBhdGhzLiAgSSBjb25maXJtZWQgdGhhdCB0aGUgYGZpbGVgIHZhcmlhYmxlICppcyogYWx3YXlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGV2ZW4gaW4gdGhlIGNhc2VzIHdoZXJlIHRoZSBmdW5jdGlvbiByZXR1cm5zIGVhcmx5LiBJIHNpbWlsYXJseSB2ZXJpZmllZCB0aGUgYHJlYWRfY3RybF9wb3NgIHN0cnVjdCwgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgLCBmb2xpbyBtaWdyYXRpb24gYW5kIHRoZSBmbGFncyBmdW5jdGlvbnMsIGVuc3VyaW5nIHRoYXQgbG9jYWwgdmFyaWFibGVzIGFuZCBzdHJ1Y3QgZmllbGRzIHdlcmUgZWl0aGVyIGluaXRpYWxpemVkIGRpcmVjdGx5IG9yIGFzc2lnbmVkIHZhbHVlcyBwcmlvciB0byB0aGVpciBmaXJzdCByZWFkLiBUaGVyZSBhcmUgYXRvbWljIG9wZXJhdGlvbnMgb24gY291bnRlcnMgYW5kIGZsYWcgYml0IG1hbmlwdWxhdGlvbiwgYnV0IHRoZSBsb2dpYyBpcyBzb3VuZCBhbmQgdGhlIGRhdGEgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIGFjdGVkIHVwb24uIFRoZXJlIHdlcmUgbm8gbmV3IGFsbG9jYXRpb25zIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgSSd2ZSBjb25jbHVkZWQgdGhlcmUgaXMgbm8gaW5zdGFuY2Ugd2hlcmUgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4aXN0cy4gVGhlcmUgYXJlIG5vIGV4cG9zZWQgY2hhbmdlcyB0byB1c2VyLXNwYWNlIGRhdGEgc3RydWN0dXJlcyAoc28sIG5vIGluZm8tbGVha3MpIGFuZCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyByZWFkLCBhY2NvcmRpbmcgdG8gbXkgYXNzZXNzbWVudHMgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB1cGRhdGVkLlxuXG5NeSBmaW5hbCBhbmFseXNpcyBpcyBiYXNlZCBvbiB0aGlzIGxvZ2ljOiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIHdpbGwgZGV0ZWN0IGFueSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIChvdXQtb2YtYm91bmRzIHdyaXRlcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4pLiAqQ3J1Y2lhbGx5KiwgdGhlIGN1cnJlbnQgcGF0Y2ggc2VyaWVzIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFdlIHNob3VsZCAqb25seSogdHJpZ2dlciBLTVNBTiBpZiB0aGUgY29kZSBjaGFuZ2VzIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkICpvbmx5KiBiZSBkZXRlY3RlZCBieSBLTVNBTi4gU2luY2UgdGhlc2UgY2hhbmdlcyBkbyAqbm90KiwgSSBhbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMgYW5kLCB0aGVyZWZvcmUsIEkgYW0gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoaXMgcGF0Y2ggZG9lcyBub3QganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjUzLCJPdXRwdXRUb2tlbnMiOjI2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNzcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMFQxODo1Mzo0OS4zNzI3MDQ3NThaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSByZWNsYWltIGxvZ2ljIChNR0xSVSByZWZlcmVuY2UvZ2VuZXJhdGlvbiBmbGFnIGhlbHBlcnMsIG11bHRpLWdlbiBMUlUgdGllciBjYWxjdWxhdGlvbnMsIG1lbWNnIHBlci1ub2RlIExSVSB6b25lIHNpemUgYXRvbWljIGNvdW50ZXJzLCBhbmQgZm9saW8gbWlncmF0aW9uIHJlZmVyZW5jZSBzdGF0ZSBoYW5kbGluZykuXFxuXFxuMS4gTm8ga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBjb3B5aW5nIHBhdGhzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgKG5vIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgbWVzc2FnZXMsIGlvY3RsIHN0cnVjdHMsIGV0Yy4pLlxcbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIGZsYWcgdmFsdWVzIChlLmcuIGBmaWxlYCBhbmQgYG9sZF9nZW5gIGluIGBmb2xpb191cGRhdGVfZ2VuYC9gd2Fsa191cGRhdGVfZm9saW9gLCBgc3RydWN0IGN0cmxfcG9zYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIG9yIGd1YXJkZWQgYnkgY29udHJvbCBmbG93IGNvbmRpdGlvbnMuXFxuMy4gTm8gbWVtb3J5IGFsbG9jYXRpb25zIG9yIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjay9wYWdlIGJ1ZmZlcnMgYXJlIGludHJvZHVjZWQuXFxuNC4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBjb25jdXJyZW50IGZsYWcgdXBkYXRlcywgYXRvbWljcywgb3IgcGFnZSBzdGF0ZSB0cmFuc2l0aW9ucyBmYWxsIHVuZGVyIHN0YW5kYXJkIG1lbW9yeSBzYWZldHksIGNvbmN1cnJlbmN5LCBvciBzYW5pdHkgY2hlY2tzIGhhbmRsZWQgYnkgS0FTQU4vTE9DS0RFUC9WTV9XQVJOX09OLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgcmVjbGFpbSBsb2dpYyAoTUdMUlUgcmVmZXJlbmNlL2dlbmVyYXRpb24gZmxhZyBoZWxwZXJzLCBtdWx0aS1nZW4gTFJVIHRpZXIgY2FsY3VsYXRpb25zLCBtZW1jZyBwZXItbm9kZSBMUlUgem9uZSBzaXplIGF0b21pYyBjb3VudGVycywgYW5kIGZvbGlvIG1pZ3JhdGlvbiByZWZlcmVuY2Ugc3RhdGUgaGFuZGxpbmcpLlxcblxcbjEuIE5vIGtlcm5lbC10by11c2VyIHNwYWNlIGRhdGEgY29weWluZyBwYXRocyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIChubyBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIG1lc3NhZ2VzLCBpb2N0bCBzdHJ1Y3RzLCBldGMuKS5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBmbGFnIHZhbHVlcyAoZS5nLiBgZmlsZWAgYW5kIGBvbGRfZ2VuYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAvYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHN0cnVjdCBjdHJsX3Bvc2ApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCBvciBndWFyZGVkIGJ5IGNvbnRyb2wgZmxvdyBjb25kaXRpb25zLlxcbjMuIE5vIG1lbW9yeSBhbGxvY2F0aW9ucyBvciB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2svcGFnZSBidWZmZXJzIGFyZSBpbnRyb2R1Y2VkLlxcbjQuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gY29uY3VycmVudCBmbGFnIHVwZGF0ZXMsIGF0b21pY3MsIG9yIHBhZ2Ugc3RhdGUgdHJhbnNpdGlvbnMgZmFsbCB1bmRlciBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5LCBjb25jdXJyZW5jeSwgb3Igc2FuaXR5IGNoZWNrcyBoYW5kbGVkIGJ5IEtBU0FOL0xPQ0tERVAvVk1fV0FSTl9PTi5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjn7vl[1] Phase: Succeeded StartedAt: 2026-08-30 18:54:01 +0000 UTC FinishedAt: 2026-08-30 18:54:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-30 18:54:01 +0000 UTC FinishedAt: 2026-08-30 18:54:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2] Phase: Succeeded StartedAt: 2026-08-30 18:54:01 +0000 UTC FinishedAt: 2026-08-30 22:36:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-30 18:54:01 +0000 UTC FinishedAt: 2026-08-30 22:36:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-30 18:54:01 +0000 UTC FinishedAt: 2026-08-30 18:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-30 18:54:01 +0000 UTC FinishedAt: 2026-08-30 18:54:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowjn7vl/series-workflowjn7vl-convert-artifact-42407088/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-30 18:54:11 +0000 UTC FinishedAt: 2026-08-30 19:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-30 18:54:11 +0000 UTC FinishedAt: 2026-08-30 19:10:42 +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:*4f44724e-3979-4afe-9416-ace419bf3e34,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-workflowjn7vl/series-workflowjn7vl-convert-artifact-42407088/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": "5add3f68-5fb8-49a3-8055-2a05f80b5d5a", "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-workflowjn7vl/series-workflowjn7vl-build-action-2466709942/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-30 18:54:11 +0000 UTC FinishedAt: 2026-08-30 19:10:32 +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:*4f44724e-3979-4afe-9416-ace419bf3e34,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-workflowjn7vl/series-workflowjn7vl-convert-artifact-42407088/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": "5add3f68-5fb8-49a3-8055-2a05f80b5d5a", "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-workflowjn7vl/series-workflowjn7vl-build-action-2466709942/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-30 19:10:42 +0000 UTC FinishedAt: 2026-08-30 19:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-30 19:10:42 +0000 UTC FinishedAt: 2026-08-30 19:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-30 19:10:42 +0000 UTC FinishedAt: 2026-08-30 19:10:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-30 19:10:42 +0000 UTC FinishedAt: 2026-08-30 19:10:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowjn7vl/series-workflowjn7vl-convert-artifact-1553504407/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-30 19:10:52 +0000 UTC FinishedAt: 2026-08-30 19:12:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-30 19:10:52 +0000 UTC FinishedAt: 2026-08-30 19:12:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5add3f68-5fb8-49a3-8055-2a05f80b5d5a,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-workflowjn7vl/series-workflowjn7vl-build-action-2466709942/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-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-30 19:12:34 +0000 UTC FinishedAt: 2026-08-30 19:12:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-30 19:12:34 +0000 UTC FinishedAt: 2026-08-30 19:12:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-30 19:12:34 +0000 UTC FinishedAt: 2026-08-30 19:29:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-30 19:12:34 +0000 UTC FinishedAt: 2026-08-30 19:29:01 +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:*4f44724e-3979-4afe-9416-ace419bf3e34,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-workflowjn7vl/series-workflowjn7vl-convert-artifact-1553504407/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": "5f4145ea-57c8-4281-a3b1-f916230cfe2d", "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-workflowjn7vl/series-workflowjn7vl-build-action-2894319323/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-30 19:12:34 +0000 UTC FinishedAt: 2026-08-30 19:28:51 +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:*4f44724e-3979-4afe-9416-ace419bf3e34,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-workflowjn7vl/series-workflowjn7vl-convert-artifact-1553504407/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": "5f4145ea-57c8-4281-a3b1-f916230cfe2d", "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-workflowjn7vl/series-workflowjn7vl-build-action-2894319323/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-30 19:29:01 +0000 UTC FinishedAt: 2026-08-30 19:29:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-30 19:29:01 +0000 UTC FinishedAt: 2026-08-30 19:29:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-30 19:29:01 +0000 UTC FinishedAt: 2026-08-30 19:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-30 19:29:01 +0000 UTC FinishedAt: 2026-08-30 19:30:29 +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:*5f4145ea-57c8-4281-a3b1-f916230cfe2d,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-workflowjn7vl/series-workflowjn7vl-build-action-2894319323/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-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-30 19:30:39 +0000 UTC FinishedAt: 2026-08-30 22:36:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-30 19:30:39 +0000 UTC FinishedAt: 2026-08-30 22:36:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5add3f68-5fb8-49a3-8055-2a05f80b5d5a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5f4145ea-57c8-4281-a3b1-f916230cfe2d,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-workflowjn7vl/series-workflowjn7vl-build-action-2466709942/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-workflowjn7vl/series-workflowjn7vl-build-action-2894319323/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-30 19:30:39 +0000 UTC FinishedAt: 2026-08-30 19:30:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-30 19:30:39 +0000 UTC FinishedAt: 2026-08-30 19:30:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjn7vl/series-workflowjn7vl-convert-artifact-717760592/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-30 19:30:39 +0000 UTC FinishedAt: 2026-08-30 19:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-30 19:30:39 +0000 UTC FinishedAt: 2026-08-30 19:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-30 19:30:39 +0000 UTC FinishedAt: 2026-08-30 19:30:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-30 19:30:49 +0000 UTC FinishedAt: 2026-08-30 22:36:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjn7vl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","mem_cgroup_update_lru_size","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"aeddb4d52acfcc5ce5e988acd48f2906fe966ca3","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION","COMPACTION","NUMA_MIGRATION"],"series_id":"f36e09ee-1523-490d-a040-0758235fc909","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-30 19:30:49 +0000 UTC FinishedAt: 2026-08-30 22:36:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5add3f68-5fb8-49a3-8055-2a05f80b5d5a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5f4145ea-57c8-4281-a3b1-f916230cfe2d,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-workflowjn7vl/series-workflowjn7vl-build-action-2466709942/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-workflowjn7vl/series-workflowjn7vl-build-action-2894319323/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-workflowjn7vl/series-workflowjn7vl-convert-artifact-717760592/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,}