Name: series-workflowtzd66 Phase: Succeeded StartedAt: 2026-07-01 10:57:39 +0000 UTC FinishedAt: 2026-07-01 15:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[0] Phase: Succeeded StartedAt: 2026-07-01 10:57:39 +0000 UTC FinishedAt: 2026-07-01 11:15:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 10:57:39 +0000 UTC FinishedAt: 2026-07-01 11:15:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "13105b584a18fa6f52f0f89e55feba52eb0e6a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "13105b584a18fa6f52f0f89e55feba52eb0e6a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER" ], "series_id": "5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "read_page_owner", "pagetypeinfo_showmixedcount_print" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWFkX3BhZ2Vfb3duZXImIzM0OywKICAgICYjMzQ7cGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtbS9wYWdlX293bmVyLmMgdG8gc2FmZWx5IHNraXAgYnVkZHkgcGFnZXMgZHVyaW5nIGl0ZXJhdGlvbiwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBQRk4gYWNjZXNzZXMgd2hlbiByZWFkaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgb3IgL3Byb2MvcGFnZXR5cGVpbmZvLiBJdCBhbHNvIGZpeGVzIG1lbWNnIGRhdGEgcmVhZGluZyBpbiBwYWdlIG93bmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2Q0MzZiZjY5MGVhMGU2MGMzNmE2Y2VlOWIzMjM1ZmMyYmJlOGM5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTE6MTI6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLmZhODI4MjMyZGZjYzE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTU0LDcgJiM0MzsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuIGJvb2wgZm9saW9faXNvbGF0ZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuIGludCBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sICpodWdldGxiLCBib29sIHVucG9pc29uKTtcbiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pO1xuJiM0Mzt2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4mIzQzO1x0XHRcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTtcbiB2b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBzdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGU7XG4gdTMyIGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpZHgpO1xuQEAgLTQyNCw3ICYjNDM7NDI1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gfVxuIFxuQEAgLTk1Niw3ICYjNDM7OTU3LDcgQEAgc3RhdGljIGlubGluZSBnZnBfdCBodGxiX21vZGlmeV9hbGxvY19tYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrKVxuIFx0cmV0dXJuIG1vZGlmaWVkX21hc2s7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGludCByZWFzb24pXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdGJvb2wgYWxsb3dlZF9mYWxsYmFjayA9IGZhbHNlO1xuIFxuQEAgLTEyMzgsNyAmIzQzOzEyMzksNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXG5pbmRleCBkNWFmMmI3ZjU3N2IzMy4uMWY4MzkyNDYxNWQ2ZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcbkBAIC01Nyw3ICYjNDM7NTcsOCBAQCB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKTtcbiBpbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXG4gXHRcdHN0cnVjdCBmb2xpbyAqc3JjLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKTtcbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLFxuLVx0XHQgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdCAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxuJiM0MztcdFx0ICBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0ICB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpO1xuIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKTtcbiBib29sIGlzb2xhdGVfbW92YWJsZV9vcHNfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaXNvbGF0ZV9tb2RlX3QgbW9kZSk7XG5AQCAtNzcsNyAmIzQzOzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7XG4gc3RhdGljIGlubGluZSB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LFxuIFx0XHRmcmVlX2ZvbGlvX3QgZnJlZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiYjNDM7XHRcdHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiBcdHsgcmV0dXJuIC1FTk9TWVM7IH1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYyxcbiBcdFx0dW5zaWduZWQgbG9uZyBwcml2YXRlKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXG5pbmRleCAyNjVjNDMyOGIzNmFkNS4uMDUxMDJkNGQyNDkwZTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXG5AQCAtMjUsNiAmIzQzOzI1LDcgQEAgZW51bSBtaWdyYXRlX3JlYXNvbiB7XG4gXHRNUl9MT05HVEVSTV9QSU4sXG4gXHRNUl9ERU1PVElPTixcbiBcdE1SX0RBTU9OLFxuJiM0MztcdE1SX05FVkVSLFx0XHQvKiBwYWdlIGhhcyBuZXZlciBiZWVuIG1pZ3JhdGVkICovXG4gXHRNUl9UWVBFU1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxuaW5kZXggMzMyODM1N2Y2ZGJhNzIuLjlmZTUxZGZjY2YyNjg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gI2RlZmluZSBfX0xJTlVYX1BBR0VfT1dORVJfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2p1bXBfbGFiZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlX21vZGUuaFx1MDAzZVxuIFxuICNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBwYWdlX293bmVyX2luaXRlZDtcbkBAIC0xNCw3ICYjNDM7MTUsNyBAQCBleHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxuIGV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbiBcdFx0XHRpbnQgbmV3X29yZGVyKTtcbiBleHRlcm4gdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpO1xuLWV4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pO1xuJiM0MztleHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7XG4gZXh0ZXJuIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIGV4dGVybiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0XHRcdHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKTtcbkBAIC00Myw3ICYjNDM7NDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbiBcdFx0X19mb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBvbGQpO1xuIH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuIFx0XHRfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihmb2xpbywgcmVhc29uKTtcbkBAIC02OCw3ICYjNDM7NjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcbmluZGV4IGNkMDFkZDdiMzY0MGRjLi4xNWVlMmVmMjAxYjVmOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXG5AQCAtMjMsNyAmIzQzOzIzLDggQEBcbiBcdEVNKCBNUl9DT05USUdfUkFOR0UsXHRcJiMzNDtjb250aWdfcmFuZ2VcJiMzNDspXHRcdFx0XFxcbiBcdEVNKCBNUl9MT05HVEVSTV9QSU4sXHRcJiMzNDtsb25ndGVybV9waW5cJiMzNDspXHRcdFx0XFxcbiBcdEVNKCBNUl9ERU1PVElPTixcdFwmIzM0O2RlbW90aW9uXCYjMzQ7KVx0XHRcdFxcXG4tXHRFTWUoTVJfREFNT04sXHRcdFwmIzM0O2RhbW9uXCYjMzQ7KVxuJiM0MztcdEVNKCBNUl9EQU1PTixcdFx0XCYjMzQ7ZGFtb25cJiMzNDspXHRcdFx0XFxcbiYjNDM7XHRFTWUoTVJfTkVWRVIsXHRcdFwmIzM0O25ldmVyX21pZ3JhdGVkXCYjMzQ7KVxuIFxuIC8qXG4gICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZVxuQEAgLTUxLDcgJiM0Mzs1Miw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXG4gXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHN1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyBmYWlsZWQsXG4gXHRcdCB1bnNpZ25lZCBsb25nIHRocF9zdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgdGhwX2ZhaWxlZCxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3NwbGl0LCB1bnNpZ25lZCBsb25nIGxhcmdlX2ZvbGlvX3NwbGl0LFxuLVx0XHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXG4mIzQzO1x0XHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLFxuIFxuIFx0VFBfQVJHUyhzdWNjZWVkZWQsIGZhaWxlZCwgdGhwX3N1Y2NlZWRlZCwgdGhwX2ZhaWxlZCxcbiBcdFx0dGhwX3NwbGl0LCBsYXJnZV9mb2xpb19zcGxpdCwgbW9kZSwgcmVhc29uKSxcbkBAIC02NCw3ICYjNDM7NjUsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0dGhwX3NwbGl0KVxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0bGFyZ2VfZm9saW9fc3BsaXQpXG4gXHRcdF9fZmllbGQoXHRlbnVtIG1pZ3JhdGVfbW9kZSxcdG1vZGUpXG4tXHRcdF9fZmllbGQoXHRpbnQsXHRcdFx0cmVhc29uKVxuJiM0MztcdFx0X19maWVsZChcdGVudW0gbWlncmF0ZV9yZWFzb24sXHRyZWFzb24pXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtOTEsMTMgJiM0Mzs5MiwxMyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuIFxuIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXNfc3RhcnQsXG4gXG4tXHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcbiYjNDM7XHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXG4gXG4gXHRUUF9BUkdTKG1vZGUsIHJlYXNvbiksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9tb2RlLCBtb2RlKVxuLVx0XHRfX2ZpZWxkKGludCwgcmVhc29uKVxuJiM0MztcdFx0X19maWVsZChlbnVtIG1pZ3JhdGVfcmVhc29uLCByZWFzb24pXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uMTc3MzJkMWZkYzVlZmQgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTcxODIsNyAmIzQzOzcxODIsOCBAQCB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbiB9XG4gXG4tdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxuJiM0Mzt2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4mIzQzO1x0XHRcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li40OWUxMGZlZWIwOTRmMCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jXG5AQCAtMTQ2OSw3ICYjNDM7MTQ2OSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4gc3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbiBcdFx0c3RydWN0IGZvbGlvICpzcmMsIGludCBmb3JjZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSxcbi1cdFx0aW50IHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KVxuJiM0MztcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmRzdDtcbiBcdGludCByYyA9IC1FQUdBSU47XG5AQCAtMTYyNiw3ICYjNDM7MTYyNiw3IEBAIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcbiAgKi9cbiBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0XHQgICAgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXG4gXHRcdFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MpXG4ge1xuQEAgLTE3MTYsNyAmIzQzOzE3MTYsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc19tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmRzdF9mb2xpb3MsXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxuIFx0XHRpbnQgKnJldHJ5LCBpbnQgKnRocF9yZXRyeSwgaW50ICpucl9mYWlsZWQsXG5AQCAtMTc5OSw3ICYjNDM7MTc5OSw3IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcbiAgKi9cbiBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcbiBcdFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXG4tXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcbiB7XG5AQCAtMjAxMSw3ICYjNDM7MjAxMSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFxuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMpXG4ge1xuQEAgLTIwODgsNyAmIzQzOzIwODgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuICAqL1xuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiYjNDM7XHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4ge1xuIFx0aW50IHJjLCByY19nYXRoZXI7XG4gXHRpbnQgbnJfcGFnZXM7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXG5pbmRleCAyZGRkY2I2NTEwYWExZS4uZWZiZjY3ZDU0ZWUyNjYgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTMzOSwxMyAmIzQzOzMzOSwxMyBAQCBub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLFxuIFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIFxuIFx0aGFuZGxlID0gc2F2ZV9zdGFjayhnZnBfbWFzayk7XG4tXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsXG4mIzQzO1x0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1SX05FVkVSLFxuIFx0XHRcdFx0ICAgdHNfbnNlYywgY3VycmVudC1cdTAwM2VwaWQsIGN1cnJlbnQtXHUwMDNldGdpZCxcbiBcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNlY29tbSk7XG4gXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbiB9XG4gXG4tdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuJiM0Mzt2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbkBAIC00MjIsNiAmIzQzOzQyMiwzOSBAQCB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ2hlY2sgaWYgYSBwYWdlIGlzIGEgYnVkZHkgcGFnZSBhbmQgYWR2YW5jZSBAcGZuIHBhc3QgdGhlIGVudGlyZSBidWRkeSBibG9jay5cbiYjNDM7ICogVGhpcyBzYWZlbHkgcmVhZHMgdGhlIGJ1ZGR5IG9yZGVyIHdpdGhvdXQgdGhlIHpvbmUgbG9jaywgd2hpY2ggbWF5IGNhdXNlIHVzXG4mIzQzOyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyXG4mIzQzOyAqIGl0ZXJhdGlvbiBwdXJwb3Nlcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGxvY2tsZXNzIHJlYWQgb2YgYnVkZHlfb3JkZXJfdW5zYWZlKCkgY2FuIGFsc28gcmV0dXJuIGEgZ2FyYmFnZSBvcmRlciBpZlxuJiM0MzsgKiB0aGUgcGFnZSBpcyBjb25jdXJyZW50bHkgYWxsb2NhdGVkIGFuZCBQYWdlQnVkZHkgaXMgY2xlYXJlZCBiZXR3ZWVuIHRoZSBjaGVja1xuJiM0MzsgKiBhbmQgdGhlIHJlYWQuIENsYW1wIHRoZSBhZHZhbmNlIGF0IHRoZSBuZXh0IE1BWF9PUkRFUl9OUl9QQUdFUyBib3VuZGFyeSBzb1xuJiM0MzsgKiB0aGF0IGEgYm9ndXMgb3JkZXIgY2Fubm90IGNhcnJ5IEBwZm4gaW50byBhbiB1bnZhbGlkYXRlZCBtZW1vcnkgc2VjdGlvbixcbiYjNDM7ICogd2hpY2ggd291bGQgYnJlYWsgY2FsbGVycyB0aGF0IHJlbHkgb24gYm91bmRhcnktYWxpZ25lZCBwZm5fdmFsaWQoKSBjaGVja3MuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcGFnZSB3YXMgc2tpcHBlZCAoY2FsbGVyIHNob3VsZCBjb250aW51ZSBpdHMgbG9vcCksXG4mIzQzOyAqICAgICAgICAgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgbm90IGEgYnVkZHkgcGFnZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCBub3JtYWxseS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG9yZGVyO1xuJiM0MztcbiYjNDM7XHRpZiAoIVBhZ2VCdWRkeShwYWdlKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0b3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4mIzQzO1x0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbmV3X3BmbiA9ICpwZm4gJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBib3VuZGFyeSA9IEFMSUdOKCpwZm4gJiM0MzsgMSwgTUFYX09SREVSX05SX1BBR0VTKTtcbiYjNDM7XG4mIzQzO1x0XHQqcGZuID0gbWluKG5ld19wZm4sIGJvdW5kYXJ5KSAtIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0XHQgICAgICAgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuQEAgLTQ2MSwxNCAmIzQzOzQ5NCw4IEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyO1xuLVxuLVx0XHRcdFx0ZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4tXHRcdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICYjNDM7PSAoMVVMIFx1MDAzY1x1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xuJiM0MztcdFx0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC01MDUsMTMgJiM0Mzs1MzIsMTMgQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0c2VxX3B1dGMobSwgJiMzOTtcXG4mIzM5Oyk7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4gLypcbiAgKiBMb29raW5nIGZvciBtZW1jZyBpbmZvcm1hdGlvbiBhbmQgcHJpbnQgaXQgb3V0XG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0Ym9vbCBvbmxpbmU7XG5AQCAtNTM0LDE1ICYjNDM7NTYxLDIxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIFx0Y2dyb3VwX25hbWUobWVtY2ctXHUwMDNlY3NzLmNncm91cCwgbmFtZSwgc2l6ZW9mKG5hbWUpKTtcbiBcdHJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCxcbiBcdFx0XHRcJiMzNDtDaGFyZ2VkICVzdG8gJXNtZW1jZyAlc1xcblwmIzM0Oyxcbi1cdFx0XHRQYWdlTWVtY2dLbWVtKHBhZ2UpID8gXCYjMzQ7KHZpYSBvYmpjZykgXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LFxuJiM0MztcdFx0XHQobWVtY2dfZGF0YSBcdTAwMjYgTUVNQ0dfREFUQV9LTUVNKSA/IFwmIzM0Oyh2aWEgb2JqY2cpIFwmIzM0OyA6IFwmIzM0O1wmIzM0OyxcbiBcdFx0XHRvbmxpbmUgPyBcJiMzNDtcJiMzNDsgOiBcJiMzNDtvZmZsaW5lIFwmIzM0OyxcbiBcdFx0XHRuYW1lKTtcbiBvdXRfdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiBcbiBzdGF0aWMgc3NpemVfdFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbkBAIC01NzksNyAmIzQzOzYxMiw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7XG4mIzQzO1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUikge1xuIFx0XHRyZXQgJiM0Mzs9IHNjbnByaW50ZihrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsXG4gXHRcdFx0XCYjMzQ7UGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cJiMzNDssXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG5AQCAtNjMwLDEwICYjNDM7NjYzLDEwIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRlbHNlXG4gXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXFxuXCYjMzQ7KTtcbiBcbi1cdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSwgZnJlZV90cyAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdVxcblwmIzM0OyxcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssIFx1MDAyNmdmcF9tYXNrLFxuIFx0XHQgcGFnZV9vd25lci1cdTAwM2VwaWQsIHBhZ2Vfb3duZXItXHUwMDNldGdpZCwgcGFnZV9vd25lci1cdTAwM2Vjb21tLFxuLVx0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4mIzQzO1x0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjKTtcbiBcbiBcdGhhbmRsZSA9IFJFQURfT05DRShwYWdlX293bmVyLVx1MDAzZWhhbmRsZSk7XG4gXHRpZiAoIWhhbmRsZSlcbkBAIC02NDUsMTIgJiM0Mzs2NzgsMTMgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmICghaGFuZGxlKSB7XG4gXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXFxuXCYjMzQ7KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHN0YWNrIHRyYWNlOlxcblwmIzM0Oyxcbi1cdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkKTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHRzICVsbHUgc3RhY2sgdHJhY2U6XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkLFxuJiM0MztcdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90c19uc2VjKTtcbiBcdFx0c3RhY2tfZGVwb3RfcHJpbnQoaGFuZGxlKTtcbiBcdH1cbiBcbi1cdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpXG4mIzQzO1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUilcbiBcdFx0cHJfYWxlcnQoXCYjMzQ7cGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cJiMzNDssXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG4gXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xuQEAgLTY5NywxMyAmIzQzOzczMSw4IEBAIHJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRcdH1cbiBcbiBcdFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4tXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVxuLVx0XHRcdGlmIChmcmVlcGFnZV9vcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0cGZuICYjNDM7PSAoMVVMIFx1MDAzY1x1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xuJiM0MztcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuIFxuIFx0XHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG5AQCAtNzk4LDIwICYjNDM7ODI3LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxuIFx0XHRcdGlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS1cdTAwM2Vsb2NrLCBiZSBhIGxpdHRsZVxuLVx0XHRcdCAqIGNhcmVmdWwgd2hlbiByZWFkaW5nIGJ1ZGR5IHBhZ2Ugb3JkZXIuIFRoZSBvbmx5XG4tXHRcdFx0ICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzc1xuLVx0XHRcdCAqIHNvbWUgZWFybHkgYWxsb2NhdGVkIHBhZ2VzLCB3aGljaCBpcyBiZXR0ZXIgdGhhblxuLVx0XHRcdCAqIGhlYXZ5IGxvY2sgY29udGVudGlvbi5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVxuLVx0XHRcdFx0aWYgKG9yZGVyIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0XHRwZm4gJiM0Mzs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4mIzQzO1x0XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4gXG4gXHRcdFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTgyNiw3ICYjNDM7ODQzLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxuIFxuIFx0XHRcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXG4gXHRcdFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgZWFybHlfaGFuZGxlLCAwLCAwLFxuLVx0XHRcdFx0XHRcdCAgIC0xLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LVx1MDAzZXBpZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuIFx0XHRcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNldGdpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdFx0XHRjb3VudCYjNDM7JiM0Mzs7XG4gZXh0X3B1dF9jb250aW51ZTpcbkBAIC04ODcsNyAmIzQzOzkwNCw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxuIFx0cmV0dXJuIHN0YWNrO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZXNfdGhyZXNob2xkO1xuIFxuIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbkBAIC05MDQsNyAmIzQzOzkyMSw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0bnJfYmFzZV9wYWdlcyA9IHJlZmNvdW50X3JlYWQoXHUwMDI2c3RhY2tfcmVjb3JkLVx1MDAzZWNvdW50KSAtIDE7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1BBR0VTIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChucl9iYXNlX3BhZ2VzIFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXHUwMDNjIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSlcbiYjNDM7XHQgICAgKG5yX2Jhc2VfcGFnZXMgXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7XG5AQCAtOTI2LDE2ICYjNDM7OTQzLDE2IEBAIHN0YXRpYyB2b2lkIHN0YWNrX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0ge1xuIFx0LnN0YXJ0XHQ9IHN0YWNrX3N0YXJ0LFxuIFx0Lm5leHRcdD0gc3RhY2tfbmV4dCxcbiBcdC5zdG9wXHQ9IHN0YWNrX3N0b3AsXG4gXHQuc2hvd1x0PSBzdGFja19wcmludFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxuJiM0MztcdGludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFx1MDAyNnN0YWNrX29wLFxuIFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCBzdGFja19wcmludF9jdHgpKTtcbiBcbiBcdGlmICghcmV0KSB7XG5AQCAtOTQ4LDI4ICYjNDM7OTY1LDI2IEBAIHN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19mb3BzID0ge1xuLVx0Lm9wZW5cdFx0PSBwYWdlX293bmVyX3N0YWNrX29wZW4sXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7XG4mIzQzO1x0Lm9wZW5cdFx0PSBzdGFja19vcGVuLFxuIFx0LnJlYWRcdFx0PSBzZXFfcmVhZCxcbiBcdC5sbHNlZWtcdFx0PSBzZXFfbHNlZWssXG4gXHQucmVsZWFzZVx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4mIzQzO3N0YXRpYyBpbnQgdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbiB7XG4tXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKTtcbiYjNDM7XHQqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG4ge1xuLVx0V1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiYjNDM7XHRXUklURV9PTkNFKHBhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzLCBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9nZXQsXG4tXHRcdFx0XHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfc2V0LCBcJiMzNDslbGx1XCYjMzQ7KTtcbi1cbiYjNDM7REVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsIFx1MDAyNnRocmVzaG9sZF9nZXQsIFx1MDAyNnRocmVzaG9sZF9zZXQsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xuIFxuIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXG4ge1xuQEAgLTk4NSwxNyAmIzQzOzEwMDAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2hvd19zdGFja3NcJiMzNDssIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XG4gXHRcdFx0XHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxuLVx0XHRcdCAgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2hvd19oYW5kbGVzXCYjMzQ7LCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4mIzQzO1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2hvd19zdGFja3NfaGFuZGxlc1wmIzM0OywgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUpLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2c3RhY2tfZm9wcyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2NvdW50X3RocmVzaG9sZFwmIzM0OywgMDYwMCwgZGlyLCBOVUxMLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTtcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNnRocmVzaG9sZF9mb3BzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KVxuZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHkgYi9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5XG5pbmRleCA4ZTcxM2EwOWNmZTc4Zi4uZWVhYmFlZWQ0MzhiMmEgMTAwNjQ0XG4tLS0gYS9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5XG5AQCAtMzQsNiAmIzQzOzM0LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4gICAgIG1heF9wZm4gPSBOb25lXG4gICAgIHBfb3BzID0gTm9uZVxuICAgICBtaWdyYXRlX3JlYXNvbl9uYW1lcyA9IE5vbmVcbiYjNDM7ICAgIG1yX25ldmVyID0gTm9uZVxuIFxuICAgICBkZWYgX19pbml0X18oc2VsZik6XG4gICAgICAgICBzdXBlcihEdW1wUGFnZU93bmVyLCBzZWxmKS5fX2luaXRfXyhcJiMzNDtseC1kdW1wLXBhZ2Utb3duZXJcJiMzNDssIGdkYi5DT01NQU5EX1NVUFBPUlQpXG5AQCAtNjUsNiAmIzQzOzY2LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4gICAgICAgICBzZWxmLm1heF9wZm4gPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKFwmIzM0O21heF9wZm5cJiMzNDspKVxuICAgICAgICAgc2VsZi5wYWdlX2V4dF9zaXplID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbChcJiMzNDtwYWdlX2V4dF9zaXplXCYjMzQ7KSlcbiAgICAgICAgIHNlbGYubWlncmF0ZV9yZWFzb25fbmFtZXMgPSBnZGIucGFyc2VfYW5kX2V2YWwoJiMzOTttaWdyYXRlX3JlYXNvbl9uYW1lcyYjMzk7KVxuJiM0MzsgICAgICAgIHNlbGYubXJfbmV2ZXIgPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKCYjMzk7TVJfTkVWRVImIzM5OykpXG4gXG4gICAgIGRlZiBwYWdlX2V4dF9pbnZhbGlkKHNlbGYsIHBhZ2VfZXh0KTpcbiAgICAgICAgIGlmIHBhZ2VfZXh0ID09IGdkYi5WYWx1ZSgwKTpcbkBAIC0xMzgsNyAmIzQzOzE0MCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOlxuICAgICAgICAgZWxzZTpcbiAgICAgICAgICAgICBnZGIud3JpdGUoJiMzOTtwYWdlIGxhc3QgZnJlZSBzdGFjayB0cmFjZTpcXG4mIzM5OylcbiAgICAgICAgICAgICBzdGFja2RlcG90LnN0YWNrX2RlcG90X3ByaW50KHBhZ2Vfb3duZXJbXCYjMzQ7ZnJlZV9oYW5kbGVcJiMzNDtdKVxuLSAgICAgICAgaWYgcGFnZV9vd25lclsmIzM5O2xhc3RfbWlncmF0ZV9yZWFzb24mIzM5O10gIT0gLTE6XG4mIzQzOyAgICAgICAgaWYgcGFnZV9vd25lclsmIzM5O2xhc3RfbWlncmF0ZV9yZWFzb24mIzM5O10gIT0gc2VsZi5tcl9uZXZlcjpcbiAgICAgICAgICAgICBnZGIud3JpdGUoJiMzOTtwYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xcbiYjMzk7ICUgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyWyYjMzk7bGFzdF9taWdyYXRlX3JlYXNvbiYjMzk7XV0pXG4gXG4gICAgIGRlZiByZWFkX3BhZ2Vfb3duZXIoc2VsZik6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9PV05FUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlYWRfcGFnZV9vd25lciYjMzQ7LAogICAgJiMzNDtwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1tL3BhZ2Vfb3duZXIuYyB0byBzYWZlbHkgc2tpcCBidWRkeSBwYWdlcyBkdXJpbmcgaXRlcmF0aW9uLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIFBGTiBhY2Nlc3NlcyB3aGVuIHJlYWRpbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciBvciAvcHJvYy9wYWdldHlwZWluZm8uIEl0IGFsc28gZml4ZXMgbWVtY2cgZGF0YSByZWFkaW5nIGluIHBhZ2Ugb3duZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkNDM2YmY2OTBlYTBlNjBjMzZhNmNlZTliMzIzNWZjMmJiZThjOTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDExOjEyOjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAyYWJhZjk5MzIxZTkwZC4uZmE4MjgyMzJkZmNjMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0xNTQsNyAmIzQzOzE1NCw4IEBAIGxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsCiBib29sIGZvbGlvX2lzb2xhdGVfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTsKIGludCBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sICpodWdldGxiLCBib29sIHVucG9pc29uKTsKIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pOwotdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKTsKJiM0Mzt2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sCiYjNDM7CQkJZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pOwogdm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGU7CiB1MzIgaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGlkeCk7CkBAIC00MjQsNyAmIzQzOzQyNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywKLQkJCQkJc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pCiYjNDM7CQkJCQlzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pCiB7CiB9CiAKQEAgLTk1Niw3ICYjNDM7OTU3LDcgQEAgc3RhdGljIGlubGluZSBnZnBfdCBodGxiX21vZGlmeV9hbGxvY19tYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrKQogCXJldHVybiBtb2RpZmllZF9tYXNrOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogCWJvb2wgYWxsb3dlZF9mYWxsYmFjayA9IGZhbHNlOwogCkBAIC0xMjM4LDcgJiM0MzsxMjM5LDcgQEAgc3RhdGljIGlubGluZSBnZnBfdCBodGxiX21vZGlmeV9hbGxvY19tYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogCXJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKaW5kZXggZDVhZjJiN2Y1NzdiMzMuLjFmODM5MjQ2MTVkNmQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaApAQCAtNTcsNyAmIzQzOzU3LDggQEAgdm9pZCBwdXRiYWNrX21vdmFibGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCk7CiBpbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsCiAJCXN0cnVjdCBmb2xpbyAqc3JjLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKTsKIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldywgZnJlZV9mb2xpb190IGZyZWUsCi0JCSAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLAomIzQzOwkJICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsCiYjNDM7CQkgIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLAogCQkgIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCk7CiBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSk7CiBib29sIGlzb2xhdGVfbW92YWJsZV9vcHNfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaXNvbGF0ZV9tb2RlX3QgbW9kZSk7CkBAIC03Nyw3ICYjNDM7NzgsOCBAQCBpbnQgc2V0X21vdmFibGVfb3BzKGNvbnN0IHN0cnVjdCBtb3ZhYmxlX29wZXJhdGlvbnMgKm9wcywgZW51bSBwYWdldHlwZSB0eXBlKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRiYWNrX21vdmFibGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCkge30KIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LAogCQlmcmVlX2ZvbGlvX3QgZnJlZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlLAotCQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpCiYjNDM7CQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwKJiM0MzsJCXVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCkKIAl7IHJldHVybiAtRU5PU1lTOyB9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywKIAkJdW5zaWduZWQgbG9uZyBwcml2YXRlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmgKaW5kZXggMjY1YzQzMjhiMzZhZDUuLjA1MTAyZDRkMjQ5MGU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmgKQEAgLTI1LDYgJiM0MzsyNSw3IEBAIGVudW0gbWlncmF0ZV9yZWFzb24gewogCU1SX0xPTkdURVJNX1BJTiwKIAlNUl9ERU1PVElPTiwKIAlNUl9EQU1PTiwKJiM0MzsJTVJfTkVWRVIsCQkvKiBwYWdlIGhhcyBuZXZlciBiZWVuIG1pZ3JhdGVkICovCiAJTVJfVFlQRVMKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgKaW5kZXggMzMyODM1N2Y2ZGJhNzIuLjlmZTUxZGZjY2YyNjg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaApAQCAtMyw2ICYjNDM7Myw3IEBACiAjZGVmaW5lIF9fTElOVVhfUEFHRV9PV05FUl9ICiAKICNpbmNsdWRlICZsdDtsaW51eC9qdW1wX2xhYmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21pZ3JhdGVfbW9kZS5oJmd0OwogCiAjaWZkZWYgQ09ORklHX1BBR0VfT1dORVIKIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBwYWdlX293bmVyX2luaXRlZDsKQEAgLTE0LDcgJiM0MzsxNSw3IEBAIGV4dGVybiB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsCiBleHRlcm4gdm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsCiAJCQlpbnQgbmV3X29yZGVyKTsKIGV4dGVybiB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCk7Ci1leHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKTsKJiM0MztleHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7CiBleHRlcm4gdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLAogCQkJCQlwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSk7CkBAIC00Myw3ICYjNDM7NDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCkKIAlpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO3BhZ2Vfb3duZXJfaW5pdGVkKSkKIAkJX19mb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBvbGQpOwogfQotc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pCiB7CiAJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtwYWdlX293bmVyX2luaXRlZCkpCiAJCV9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKGZvbGlvLCByZWFzb24pOwpAQCAtNjgsNyAmIzQzOzY5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsCiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogfQotc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pCiB7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oCmluZGV4IGNkMDFkZDdiMzY0MGRjLi4xNWVlMmVmMjAxYjVmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaApAQCAtMjMsNyAmIzQzOzIzLDggQEAKIAlFTSggTVJfQ09OVElHX1JBTkdFLAkmIzM0O2NvbnRpZ19yYW5nZSYjMzQ7KQkJCVwKIAlFTSggTVJfTE9OR1RFUk1fUElOLAkmIzM0O2xvbmd0ZXJtX3BpbiYjMzQ7KQkJCVwKIAlFTSggTVJfREVNT1RJT04sCSYjMzQ7ZGVtb3Rpb24mIzM0OykJCQlcCi0JRU1lKE1SX0RBTU9OLAkJJiMzNDtkYW1vbiYjMzQ7KQomIzQzOwlFTSggTVJfREFNT04sCQkmIzM0O2RhbW9uJiMzNDspCQkJXAomIzQzOwlFTWUoTVJfTkVWRVIsCQkmIzM0O25ldmVyX21pZ3JhdGVkJiMzNDspCiAKIC8qCiAgKiBGaXJzdCBkZWZpbmUgdGhlIGVudW1zIGluIHRoZSBhYm92ZSBtYWNyb3MgdG8gYmUgZXhwb3J0ZWQgdG8gdXNlcnNwYWNlCkBAIC01MSw3ICYjNDM7NTIsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLAogCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIGZhaWxlZCwKIAkJIHVuc2lnbmVkIGxvbmcgdGhwX3N1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyB0aHBfZmFpbGVkLAogCQkgdW5zaWduZWQgbG9uZyB0aHBfc3BsaXQsIHVuc2lnbmVkIGxvbmcgbGFyZ2VfZm9saW9fc3BsaXQsCi0JCSBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSwKJiM0MzsJCSBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksCiAKIAlUUF9BUkdTKHN1Y2NlZWRlZCwgZmFpbGVkLCB0aHBfc3VjY2VlZGVkLCB0aHBfZmFpbGVkLAogCQl0aHBfc3BsaXQsIGxhcmdlX2ZvbGlvX3NwbGl0LCBtb2RlLCByZWFzb24pLApAQCAtNjQsNyAmIzQzOzY1LDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcywKIAkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJCXRocF9zcGxpdCkKIAkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJCWxhcmdlX2ZvbGlvX3NwbGl0KQogCQlfX2ZpZWxkKAllbnVtIG1pZ3JhdGVfbW9kZSwJbW9kZSkKLQkJX19maWVsZCgJaW50LAkJCXJlYXNvbikKJiM0MzsJCV9fZmllbGQoCWVudW0gbWlncmF0ZV9yZWFzb24sCXJlYXNvbikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCkBAIC05MSwxMyAmIzQzOzkyLDEzIEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsCiAKIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXNfc3RhcnQsCiAKLQlUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSwKJiM0MzsJVFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLAogCiAJVFBfQVJHUyhtb2RlLCByZWFzb24pLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19maWVsZChlbnVtIG1pZ3JhdGVfbW9kZSwgbW9kZSkKLQkJX19maWVsZChpbnQsIHJlYXNvbikKJiM0MzsJCV9fZmllbGQoZW51bSBtaWdyYXRlX3JlYXNvbiwgcmVhc29uKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlYy4uMTc3MzJkMWZkYzVlZmQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTcxODIsNyAmIzQzOzcxODIsOCBAQCB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWZvbGlvX3B1dChmb2xpbyk7CiB9CiAKLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbikKJiM0Mzt2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sCiYjNDM7CQkJZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pCiB7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pOwogCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggZDliMjM5MDlkNzE2YzYuLjQ5ZTEwZmVlYjA5NGYwIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jCkBAIC0xNDY5LDcgJiM0MzsxNDY5LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwKIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sCiAJCWZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCiAJCXN0cnVjdCBmb2xpbyAqc3JjLCBpbnQgZm9yY2UsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsCi0JCWludCByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldCkKJiM0MzsJCWVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpCiB7CiAJc3RydWN0IGZvbGlvICpkc3Q7CiAJaW50IHJjID0gLUVBR0FJTjsKQEAgLTE2MjYsNyAmIzQzOzE2MjYsNyBAQCBzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyB7CiAgKi8KIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogCQkJICAgIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCi0JCQkgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwKJiM0MzsJCQkgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sCiAJCQkgICAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLAogCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MpCiB7CkBAIC0xNzE2LDcgJiM0MzsxNzE2LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sCiBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc19tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsCiAJCXN0cnVjdCBsaXN0X2hlYWQgKmRzdF9mb2xpb3MsCiAJCWZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCi0JCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwKIAkJc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywKIAkJc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLAogCQlpbnQgKnJldHJ5LCBpbnQgKnRocF9yZXRyeSwgaW50ICpucl9mYWlsZWQsCkBAIC0xNzk5LDcgJiM0MzsxNzk5LDcgQEAgc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfdW5kbyhzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLAogICovCiBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwKIAkJbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sCi0JCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sCiAJCXN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcywKIAkJc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcykKIHsKQEAgLTIwMTEsNyAmIzQzOzIwMTEsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwKIAogc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKIAkJZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwKLQkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwKJiM0MzsJCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsCiAJCXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cykKIHsKQEAgLTIwODgsNyAmIzQzOzIwODgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogICovCiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogCQlmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAotCQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpCiYjNDM7CQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKQogewogCWludCByYywgcmNfZ2F0aGVyOwogCWludCBucl9wYWdlczsKZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuYwppbmRleCAyZGRkY2I2NTEwYWExZS4uZWZiZjY3ZDU0ZWUyNjYgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Vfb3duZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX293bmVyLmMKQEAgLTMzOSwxMyAmIzQzOzMzOSwxMyBAQCBub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLAogCWRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTsKIAogCWhhbmRsZSA9IHNhdmVfc3RhY2soZ2ZwX21hc2spOwotCV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCAtMSwKJiM0MzsJX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1SX05FVkVSLAogCQkJCSAgIHRzX25zZWMsIGN1cnJlbnQtJmd0O3BpZCwgY3VycmVudC0mZ3Q7dGdpZCwKIAkJCQkgICBjdXJyZW50LSZndDtjb21tKTsKIAlpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgJmx0OyZsdDsgb3JkZXIpOwogfQogCi12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pCiYjNDM7dm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbikKIHsKIAlzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KCZhbXA7Zm9saW8tJmd0O3BhZ2UpOwogCXN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyOwpAQCAtNDIyLDYgJiM0Mzs0MjIsMzkgQEAgdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIENoZWNrIGlmIGEgcGFnZSBpcyBhIGJ1ZGR5IHBhZ2UgYW5kIGFkdmFuY2UgQHBmbiBwYXN0IHRoZSBlbnRpcmUgYnVkZHkgYmxvY2suCiYjNDM7ICogVGhpcyBzYWZlbHkgcmVhZHMgdGhlIGJ1ZGR5IG9yZGVyIHdpdGhvdXQgdGhlIHpvbmUgbG9jaywgd2hpY2ggbWF5IGNhdXNlIHVzCiYjNDM7ICogdG8gc2tpcCBsZXNzIHRoYW4gdGhlIGZ1bGwgYnVkZHkgYmxvY2ssIGJ1dCB0aGF0IGlzIGFjY2VwdGFibGUgZm9yIHBhZ2Ugb3duZXIKJiM0MzsgKiBpdGVyYXRpb24gcHVycG9zZXMuCiYjNDM7ICoKJiM0MzsgKiBUaGUgbG9ja2xlc3MgcmVhZCBvZiBidWRkeV9vcmRlcl91bnNhZmUoKSBjYW4gYWxzbyByZXR1cm4gYSBnYXJiYWdlIG9yZGVyIGlmCiYjNDM7ICogdGhlIHBhZ2UgaXMgY29uY3VycmVudGx5IGFsbG9jYXRlZCBhbmQgUGFnZUJ1ZGR5IGlzIGNsZWFyZWQgYmV0d2VlbiB0aGUgY2hlY2sKJiM0MzsgKiBhbmQgdGhlIHJlYWQuIENsYW1wIHRoZSBhZHZhbmNlIGF0IHRoZSBuZXh0IE1BWF9PUkRFUl9OUl9QQUdFUyBib3VuZGFyeSBzbwomIzQzOyAqIHRoYXQgYSBib2d1cyBvcmRlciBjYW5ub3QgY2FycnkgQHBmbiBpbnRvIGFuIHVudmFsaWRhdGVkIG1lbW9yeSBzZWN0aW9uLAomIzQzOyAqIHdoaWNoIHdvdWxkIGJyZWFrIGNhbGxlcnMgdGhhdCByZWx5IG9uIGJvdW5kYXJ5LWFsaWduZWQgcGZuX3ZhbGlkKCkgY2hlY2tzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSwKJiM0MzsgKiAgICAgICAgIGZhbHNlIGlmIHRoZSBwYWdlIGlzIG5vdCBhIGJ1ZGR5IHBhZ2UgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb3JkZXI7CiYjNDM7CiYjNDM7CWlmICghUGFnZUJ1ZGR5KHBhZ2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTsKJiM0MzsJaWYgKG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIG5ld19wZm4gPSAqcGZuICYjNDM7ICgxVUwgJmx0OyZsdDsgb3JkZXIpOwomIzQzOwkJdW5zaWduZWQgbG9uZyBib3VuZGFyeSA9IEFMSUdOKCpwZm4gJiM0MzsgMSwgTUFYX09SREVSX05SX1BBR0VTKTsKJiM0MzsKJiM0MzsJCSpwZm4gPSBtaW4obmV3X3BmbiwgYm91bmRhcnkpIC0gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCiAJCQkJICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKQogewpAQCAtNDYxLDE0ICYjNDM7NDk0LDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLAogCQkJaWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjsKLQotCQkJCWZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCQkJCWlmIChmcmVlcGFnZV9vcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUikKLQkJCQkJcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IGZyZWVwYWdlX29yZGVyKSAtIDE7CiYjNDM7CQkJaWYgKHNraXBfYnVkZHlfcGFnZXMoJmFtcDtwZm4sIHBhZ2UpKQogCQkJCWNvbnRpbnVlOwotCQkJfQogCiAJCQlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKQogCQkJCWNvbnRpbnVlOwpAQCAtNTA1LDEzICYjNDM7NTMyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKIAlzZXFfcHV0YyhtLCAmIzM5O1xuJiMzOTspOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwogLyoKICAqIExvb2tpbmcgZm9yIG1lbWNnIGluZm9ybWF0aW9uIGFuZCBwcmludCBpdCBvdXQKICAqLwogc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsCiAJCQkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLSNpZmRlZiBDT05GSUdfTUVNQ0cKIAl1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCWJvb2wgb25saW5lOwpAQCAtNTM0LDE1ICYjNDM7NTYxLDIxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LAogCWNncm91cF9uYW1lKG1lbWNnLSZndDtjc3MuY2dyb3VwLCBuYW1lLCBzaXplb2YobmFtZSkpOwogCXJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwKIAkJCSYjMzQ7Q2hhcmdlZCAlc3RvICVzbWVtY2cgJXNcbiYjMzQ7LAotCQkJUGFnZU1lbWNnS21lbShwYWdlKSA/ICYjMzQ7KHZpYSBvYmpjZykgJiMzNDsgOiAmIzM0OyYjMzQ7LAomIzQzOwkJCShtZW1jZ19kYXRhICZhbXA7IE1FTUNHX0RBVEFfS01FTSkgPyAmIzM0Oyh2aWEgb2JqY2cpICYjMzQ7IDogJiMzNDsmIzM0OywKIAkJCW9ubGluZSA/ICYjMzQ7JiMzNDsgOiAmIzM0O29mZmxpbmUgJiMzNDssCiAJCQluYW1lKTsKIG91dF91bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0jZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKIAlyZXR1cm4gcmV0OwogfQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsCiYjNDM7CQkJCQkgc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsjZW5kaWYKIAogc3RhdGljIHNzaXplX3QKIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbiwKQEAgLTU3OSw3ICYjNDM7NjEyLDcgQEAgcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLAogCWlmIChyZXQgJmd0Oz0gY291bnQpCiAJCWdvdG8gZXJyOwogCi0JaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHsKJiM0MzsJaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpIHsKIAkJcmV0ICYjNDM7PSBzY25wcmludGYoa2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LAogCQkJJiMzNDtQYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xuJiMzNDssCiAJCQltaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uXSk7CkBAIC02MzAsMTAgJiM0Mzs2NjMsMTAgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAllbHNlCiAJCXByX2FsZXJ0KCYjMzQ7cGFnZV9vd25lciB0cmFja3MgdGhlIHBhZ2UgYXMgZnJlZWRcbiYjMzQ7KTsKIAotCXByX2FsZXJ0KCYjMzQ7cGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1LCBmcmVlX3RzICVsbHVcbiYjMzQ7LAomIzQzOwlwcl9hbGVydCgmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdVxuJiMzNDssCiAJCSBwYWdlX293bmVyLSZndDtvcmRlciwgbWlncmF0ZXR5cGVfbmFtZXNbbXRdLCBnZnBfbWFzaywgJmFtcDtnZnBfbWFzaywKIAkJIHBhZ2Vfb3duZXItJmd0O3BpZCwgcGFnZV9vd25lci0mZ3Q7dGdpZCwgcGFnZV9vd25lci0mZ3Q7Y29tbSwKLQkJIHBhZ2Vfb3duZXItJmd0O3RzX25zZWMsIHBhZ2Vfb3duZXItJmd0O2ZyZWVfdHNfbnNlYyk7CiYjNDM7CQkgcGFnZV9vd25lci0mZ3Q7dHNfbnNlYyk7CiAKIAloYW5kbGUgPSBSRUFEX09OQ0UocGFnZV9vd25lci0mZ3Q7aGFuZGxlKTsKIAlpZiAoIWhhbmRsZSkKQEAgLTY0NSwxMiAmIzQzOzY3OCwxMyBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogCWlmICghaGFuZGxlKSB7CiAJCXByX2FsZXJ0KCYjMzQ7cGFnZV9vd25lciBmcmVlIHN0YWNrIHRyYWNlIG1pc3NpbmdcbiYjMzQ7KTsKIAl9IGVsc2UgewotCQlwcl9hbGVydCgmIzM0O3BhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHN0YWNrIHRyYWNlOlxuJiMzNDssCi0JCQkgIHBhZ2Vfb3duZXItJmd0O2ZyZWVfcGlkLCBwYWdlX293bmVyLSZndDtmcmVlX3RnaWQpOwomIzQzOwkJcHJfYWxlcnQoJiMzNDtwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCB0cyAlbGx1IHN0YWNrIHRyYWNlOlxuJiMzNDssCiYjNDM7CQkJICBwYWdlX293bmVyLSZndDtmcmVlX3BpZCwgcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkLAomIzQzOwkJCSAgcGFnZV9vd25lci0mZ3Q7ZnJlZV90c19uc2VjKTsKIAkJc3RhY2tfZGVwb3RfcHJpbnQoaGFuZGxlKTsKIAl9CiAKLQlpZiAocGFnZV9vd25lci0mZ3Q7bGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkKJiM0MzsJaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpCiAJCXByX2FsZXJ0KCYjMzQ7cGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcbiYjMzQ7LAogCQkJbWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci0mZ3Q7bGFzdF9taWdyYXRlX3JlYXNvbl0pOwogCXBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7CkBAIC02OTcsMTMgJiM0Mzs3MzEsOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogCQl9CiAKIAkJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JCWlmIChQYWdlQnVkZHkocGFnZSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7Ci0KLQkJCWlmIChmcmVlcGFnZV9vcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUikKLQkJCQlwZm4gJiM0Mzs9ICgxVUwgJmx0OyZsdDsgZnJlZXBhZ2Vfb3JkZXIpIC0gMTsKJiM0MzsJCWlmIChza2lwX2J1ZGR5X3BhZ2VzKCZhbXA7cGZuLCBwYWdlKSkKIAkJCWNvbnRpbnVlOwotCQl9CiAKIAkJcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQocGFnZSk7CiAJCWlmICh1bmxpa2VseSghcGFnZV9leHQpKQpAQCAtNzk4LDIwICYjNDM7ODI3LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKQogCQkJaWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKQogCQkJCWNvbnRpbnVlOwogCi0JCQkvKgotCQkJICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS0mZ3Q7bG9jaywgYmUgYSBsaXR0bGUKLQkJCSAqIGNhcmVmdWwgd2hlbiByZWFkaW5nIGJ1ZGR5IHBhZ2Ugb3JkZXIuIFRoZSBvbmx5Ci0JCQkgKiBkYW5nZXIgaXMgdGhhdCB3ZSBza2lwIHRvbyBtdWNoIGFuZCBwb3RlbnRpYWxseSBtaXNzCi0JCQkgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW4KLQkJCSAqIGhlYXZ5IGxvY2sgY29udGVudGlvbi4KLQkJCSAqLwotCQkJaWYgKFBhZ2VCdWRkeShwYWdlKSkgewotCQkJCXVuc2lnbmVkIGxvbmcgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7Ci0KLQkJCQlpZiAob3JkZXIgJmd0OyAwICZhbXA7JmFtcDsgb3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIpCi0JCQkJCXBmbiAmIzQzOz0gKDFVTCAmbHQ7Jmx0OyBvcmRlcikgLSAxOwomIzQzOwkJCWlmIChza2lwX2J1ZGR5X3BhZ2VzKCZhbXA7cGZuLCBwYWdlKSkKIAkJCQljb250aW51ZTsKLQkJCX0KIAogCQkJaWYgKFBhZ2VSZXNlcnZlZChwYWdlKSkKIAkJCQljb250aW51ZTsKQEAgLTgyNiw3ICYjNDM7ODQzLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKQogCiAJCQkvKiBGb3VuZCBlYXJseSBhbGxvY2F0ZWQgcGFnZSAqLwogCQkJX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgZWFybHlfaGFuZGxlLCAwLCAwLAotCQkJCQkJICAgLTEsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtJmd0O3BpZCwKJiM0MzsJCQkJCQkgICBNUl9ORVZFUiwgbG9jYWxfY2xvY2soKSwgY3VycmVudC0mZ3Q7cGlkLAogCQkJCQkJICAgY3VycmVudC0mZ3Q7dGdpZCwgY3VycmVudC0mZ3Q7Y29tbSk7CiAJCQljb3VudCYjNDM7JiM0Mzs7CiBleHRfcHV0X2NvbnRpbnVlOgpAQCAtODg3LDcgJiM0Mzs5MDQsNyBAQCBzdGF0aWMgdm9pZCAqc3RhY2tfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcHBvcykKIAlyZXR1cm4gc3RhY2s7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VzX3RocmVzaG9sZDsKIAogc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CkBAIC05MDQsNyAmIzQzOzkyMSw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogCW5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKCZhbXA7c3RhY2tfcmVjb3JkLSZndDtjb3VudCkgLSAxOwogCiAJaWYgKGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyAmYW1wOyZhbXA7Ci0JICAgIChucl9iYXNlX3BhZ2VzICZsdDsgMSB8fCBucl9iYXNlX3BhZ2VzICZsdDsgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQpKQomIzQzOwkgICAgKG5yX2Jhc2VfcGFnZXMgJmx0OyAxIHx8IG5yX2Jhc2VfcGFnZXMgJmx0OyBwYWdlc190aHJlc2hvbGQpKQogCQlyZXR1cm4gMDsKIAogCWlmIChjdHgtJmd0O2ZsYWdzICZhbXA7IFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0spIHsKQEAgLTkyNiwxNiAmIzQzOzk0MywxNiBAQCBzdGF0aWMgdm9pZCBzdGFja19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc3RhY2tfb3AgPSB7CiAJLnN0YXJ0CT0gc3RhY2tfc3RhcnQsCiAJLm5leHQJPSBzdGFja19uZXh0LAogCS5zdG9wCT0gc3RhY2tfc3RvcCwKIAkuc2hvdwk9IHN0YWNrX3ByaW50CiB9OwogCi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0MztzdGF0aWMgaW50IHN0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmFtcDtwYWdlX293bmVyX3N0YWNrX29wLAomIzQzOwlpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmYW1wO3N0YWNrX29wLAogCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4KSk7CiAKIAlpZiAoIXJldCkgewpAQCAtOTQ4LDI4ICYjNDM7OTY1LDI2IEBAIHN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHsKLQkub3BlbgkJPSBwYWdlX293bmVyX3N0YWNrX29wZW4sCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhY2tfZm9wcyA9IHsKJiM0MzsJLm9wZW4JCT0gc3RhY2tfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCiB9OwogCi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKJiM0MztzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCiB7Ci0JKnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7CiYjNDM7CSp2YWwgPSBSRUFEX09OQ0UocGFnZXNfdGhyZXNob2xkKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKJiM0MztzdGF0aWMgaW50IHRocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKIHsKLQlXUklURV9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkLCB2YWwpOwomIzQzOwlXUklURV9PTkNFKHBhZ2VzX3RocmVzaG9sZCwgdmFsKTsKIAlyZXR1cm4gMDsKIH0KIAotREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9nZXQsCi0JCQkmYW1wO3BhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgJiMzNDslbGx1JiMzNDspOwotCiYjNDM7REVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsICZhbXA7dGhyZXNob2xkX2dldCwgJmFtcDt0aHJlc2hvbGRfc2V0LCAmIzM0OyVsbHVcbiYjMzQ7KTsKIAogc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZCkKIHsKQEAgLTk4NSwxNyAmIzQzOzEwMDAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZCkKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7c2hvd19zdGFja3MmIzM0OywgMDQwMCwgZGlyLAogCQkJICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfAogCQkJCSAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksCi0JCQkgICAgICZhbXA7cGFnZV9vd25lcl9zdGFja19mb3BzKTsKJiM0MzsJCQkgICAgICZhbXA7c3RhY2tfZm9wcyk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3Nob3dfaGFuZGxlcyYjMzQ7LCAwNDAwLCBkaXIsCiAJCQkgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfAogCQkJCSAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3N0YWNrX2ZvcHMpOwomIzQzOwkJCSAgICAmYW1wO3N0YWNrX2ZvcHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtzaG93X3N0YWNrc19oYW5kbGVzJiMzNDssIDA0MDAsIGRpciwKIAkJCSAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHwKIAkJCQkgICAgIFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFKSwKLQkJCSAgICAmYW1wO3BhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7CiYjNDM7CQkJICAgICZhbXA7c3RhY2tfZm9wcyk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O2NvdW50X3RocmVzaG9sZCYjMzQ7LCAwNjAwLCBkaXIsIE5VTEwsCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTsKJiM0MzsJCQkgICAgJmFtcDt0aHJlc2hvbGRfZm9wcyk7CiAJcmV0dXJuIDA7CiB9CiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weSBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHkKaW5kZXggOGU3MTNhMDljZmU3OGYuLmVlYWJhZWVkNDM4YjJhIDEwMDY0NAotLS0gYS9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHkKQEAgLTM0LDYgJiM0MzszNCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOgogICAgIG1heF9wZm4gPSBOb25lCiAgICAgcF9vcHMgPSBOb25lCiAgICAgbWlncmF0ZV9yZWFzb25fbmFtZXMgPSBOb25lCiYjNDM7ICAgIG1yX25ldmVyID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzdXBlcihEdW1wUGFnZU93bmVyLCBzZWxmKS5fX2luaXRfXygmIzM0O2x4LWR1bXAtcGFnZS1vd25lciYjMzQ7LCBnZGIuQ09NTUFORF9TVVBQT1JUKQpAQCAtNjUsNiAmIzQzOzY2LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6CiAgICAgICAgIHNlbGYubWF4X3BmbiA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoJiMzNDttYXhfcGZuJiMzNDspKQogICAgICAgICBzZWxmLnBhZ2VfZXh0X3NpemUgPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKCYjMzQ7cGFnZV9leHRfc2l6ZSYjMzQ7KSkKICAgICAgICAgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lcyA9IGdkYi5wYXJzZV9hbmRfZXZhbCgmIzM5O21pZ3JhdGVfcmVhc29uX25hbWVzJiMzOTspCiYjNDM7ICAgICAgICBzZWxmLm1yX25ldmVyID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbCgmIzM5O01SX05FVkVSJiMzOTspKQogCiAgICAgZGVmIHBhZ2VfZXh0X2ludmFsaWQoc2VsZiwgcGFnZV9leHQpOgogICAgICAgICBpZiBwYWdlX2V4dCA9PSBnZGIuVmFsdWUoMCk6CkBAIC0xMzgsNyAmIzQzOzE0MCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZ2RiLndyaXRlKCYjMzk7cGFnZSBsYXN0IGZyZWUgc3RhY2sgdHJhY2U6XG4mIzM5OykKICAgICAgICAgICAgIHN0YWNrZGVwb3Quc3RhY2tfZGVwb3RfcHJpbnQocGFnZV9vd25lclsmIzM0O2ZyZWVfaGFuZGxlJiMzNDtdKQotICAgICAgICBpZiBwYWdlX293bmVyWyYjMzk7bGFzdF9taWdyYXRlX3JlYXNvbiYjMzk7XSAhPSAtMToKJiM0MzsgICAgICAgIGlmIHBhZ2Vfb3duZXJbJiMzOTtsYXN0X21pZ3JhdGVfcmVhc29uJiMzOTtdICE9IHNlbGYubXJfbmV2ZXI6CiAgICAgICAgICAgICBnZGIud3JpdGUoJiMzOTtwYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xuJiMzOTsgJSBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXJbJiMzOTtsYXN0X21pZ3JhdGVfcmVhc29uJiMzOTtdXSkKIAogICAgIGRlZiByZWFkX3BhZ2Vfb3duZXIoc2VsZik6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1ODEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBhcmUgc3VpdGFibGUgZm9yIGZ1enppbmcuIFRoZSBhZmZlY3RlZCBmaWxlcyBhcmU6IGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGBpbmNsdWRlL2xpbnV4L21pZ3JhdGUuaGAsIGBpbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oYCwgYGluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oYCwgYHRyYWNlL2V2ZW50cy9taWdyYXRlLmhgLCBgbW0vaHVnZXRsYi5jYCwgYG1tL21pZ3JhdGUuY2AsIGBtbS9wYWdlX293bmVyLmNgLCBhbmQgYHNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlgLiBUaGF0JiMzOTtzIGEgZGVjZW50IHNwcmVhZC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgZ29vZCBhbW91bnQgb2YgcmVmYWN0b3JpbmcuIFBhcmFtZXRlciBzaWduYXR1cmVzIGZvciBmdW5jdGlvbnMgbGlrZSBgbW92ZV9odWdldGxiX3N0YXRlYCwgYGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2tgLCBgbWlncmF0ZV9wYWdlc2AsIGFuZCBgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb25gIGFyZSBjaGFuZ2luZyBmcm9tIGBpbnQgcmVhc29uYCB0byBgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb25gLiBUaGUgYE1SX05FVkVSYCB2YWx1ZSBpcyBiZWluZyBhZGRlZCB0byB0aGF0IGVudW0uIFRyYWNlcG9pbnRzIGFyZSBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGVudW0gYXMgd2VsbC4gVGhhdCYjMzk7cyBnb29kIHByYWN0aWNlLiBDbGVhbiB1cC4KCkRpdmluZyBkZWVwZXIgaW50byBgbW0vcGFnZV9vd25lci5jYCwgdGhlcmUgYXJlIHNldmVyYWwgY2hhbmdlczogcmVwbGFjaW5nIGAtMWAgd2l0aCBgTVJfTkVWRVJgLCBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHNraXBfYnVkZHlfcGFnZXNgLCBhbmQgdXBkYXRlcyB0byBmdW5jdGlvbnMgbGlrZSBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCwgYHJlYWRfcGFnZV9vd25lcmAsIGBpbml0X3BhZ2VzX2luX3pvbmVgLCBgcHJpbnRfcGFnZV9vd25lcl9tZW1jZ2AsIGBwcmludF9wYWdlX293bmVyYCwgYW5kIGBfX2R1bXBfcGFnZV9vd25lcmAuIFBsdXMsIHNvbWUgcmVuYW1pbmcgb2YgdmFyaWFibGVzLiBUaGUgdXNlIG9mIGBNRU1DR19EQVRBX0tNRU1gIGluc3RlYWQgb2YgYFBhZ2VNZW1jZ0ttZW1gIGluIGBwcmludF9wYWdlX293bmVyX21lbWNnYCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYmVjYXVzZSB0aGF0JiMzOTtzIGxpa2VseSBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiBob3cgbWVtb3J5IGNncm91cHMgYXJlIGJlaW5nIGhhbmRsZWQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBQYWdlTWVtY2dLbWVtYCB3YXNuJiMzOTt0IGp1c3QgcmVtb3ZlZCBhbmQgcmVwbGFjZWQuCgpUaGUga2V5IHRoaW5nIGlzIHRoaXMgYHNraXBfYnVkZHlfcGFnZXNgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBtbS9wYWdlX293bmVyLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBmdXp6aW5nIHJlbGV2YW5jZSBjb21lcyBpbi4gTm93LCBpcyBpdCByZWFjaGFibGUgYW5kIGZ1enotd29ydGh5PwoKYG1tL3BhZ2Vfb3duZXIuY2AgaXMgY29udHJvbGxlZCBieSBgQ09ORklHX1BBR0VfT1dORVJgLiBPa2F5LCBzbyBpdCYjMzk7cyBhIGRlYnVnIGZlYXR1cmUuIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgIGlzIHVzZWQgaW4gYC9wcm9jL3BhZ2V0eXBlaW5mb2AsIGFuZCBgcmVhZF9wYWdlX293bmVyYCBpcyB1c2VkIGZvciBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAsIGFuZCBgaW5pdF9wYWdlc19pbl96b25lYCBpcyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgoKU28sIGlzIHRoaXMgd29ydGggZnV6emluZz8gTW9zdGx5LCB0aGVzZSBjaGFuZ2VzIHNlZW0gbGlrZSByZWZhY3RvcmluZyBhbmQgZml4aW5nIHNvbWUgZGVidWdmcyBhbmQgcHJvY2ZzIG91dHB1dCwgYWxvbmcgd2l0aCBhbiBvcHRpbWl6YXRpb24vZml4IGZvciBidWRkeSBwYWdlIHNraXBwaW5nIGluIHBhZ2Vfb3duZXIuIFRoaXMgZGVidWdnaW5nIGNvZGUgaXMgZXhwb3NlZCBpbiBwcm9jIGFuZCBkZWJ1Z2ZzLCBzbyB1c2VyIHNwYWNlIGludGVyYWN0aW9uIGlzIHBvc3NpYmxlLgoKVGhhdCBgc2tpcF9idWRkeV9wYWdlc2AgZnVuY3Rpb24gbG9naWM6CgpgYGBjCnN0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpCnsKCXVuc2lnbmVkIGxvbmcgb3JkZXI7CgoJaWYgKCFQYWdlQnVkZHkocGFnZSkpCgkJcmV0dXJuIGZhbHNlOwoKCW9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwoJaWYgKG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKSB7CgkJdW5zaWduZWQgbG9uZyBuZXdfcGZuID0gKnBmbiAmIzQzOyAoMVVMICZsdDsmbHQ7IG9yZGVyKTsKCQl1bnNpZ25lZCBsb25nIGJvdW5kYXJ5ID0gQUxJR04oKnBmbiAmIzQzOyAxLCBNQVhfT1JERVJfTlJfUEFHRVMpOwoKCQkqcGZuID0gbWluKG5ld19wZm4sIGJvdW5kYXJ5KSAtIDE7Cgl9CgoJcmV0dXJuIHRydWU7Cn0KYGBgCgpUaGlzICpjb3VsZCogcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGV2ZW4gYW4gaW5maW5pdGUgbG9vcCB3aGVuIGludGVyYWN0aW5nIHdpdGggYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIG9yIGAvcHJvYy9wYWdldHlwZWluZm9gLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSB3aXRoaW4gYSBkZWJ1ZyBmZWF0dXJlLiBJdCYjMzk7cyBhbiBpbXBvcnRhbnQgZml4LgoKT2gsIGFuZCBgc2tpcF9idWRkeV9wYWdlc2AgaXMgYWN0dWFsbHkgdXNlZCBpbiBgcmVhZF9wYWdlX293bmVyYCwgYSAqZmlsZSByZWFkKiBvcGVyYXRpb24uIFllcywgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWRfcGFnZV9vd25lciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2Vfb3duZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX293bmVyLmM9NjkzPXN0YXRpYyBzc2l6ZV90XG5tbS9wYWdlX293bmVyLmM6Njk0OnJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG5tbS9wYWdlX293bmVyLmMtNjk1LXtcbi0tXG5tbS9wYWdlX293bmVyLmM9ODY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfZm9wcyA9IHtcbm1tL3BhZ2Vfb3duZXIuYzo4Njg6XHQucmVhZFx0XHQ9IHJlYWRfcGFnZV9vd25lcixcbm1tL3BhZ2Vfb3duZXIuYy04NjktXHQubGxzZWVrXHRcdD0gbHNlZWtfcGFnZV9vd25lcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcxNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFBhZ2UgT3duZXIgJmFtcDsgUGFnZXR5cGVpbmZvKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCB0cmlnZ2VyIHNvbWV0aGluZy4gSW50ZXJlc3RpbmcuIEFuZCBpdCBsb29rcyBsaWtlIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgIHBsYXlzIGEgcm9sZSBpbiBgL3Byb2MvcGFnZXR5cGVpbmZvYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGNvbm5lY3Rpb24gaXMgcHJldHR5IGNsZWFyLiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gdHJhY2tpbmcgYW5kIHJlcG9ydGluZyBvbiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcGFnZSB0eXBlcywgcGFydGljdWxhcmx5IG1peGVkIHBhZ2VzLiBOb3cgSSBuZWVkIHRvIGRpdmUgaW50byBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCBzcGVjaWZpY2FsbHkuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcyBmb3IgZGlzcGxheWluZyB0aGUgY291bnRzIG9mIG1peGVkIHBhZ2UgdHlwZXMsIHdoaWNoIGlzIGVzc2VudGlhbCBpbmZvcm1hdGlvbiB3aGVuIHlvdSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBmcmFnbWVudGF0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBpcyB1c2luZyBkaWZmZXJlbnQgcGFnZSBzaXplcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9MTk9ZXh0ZXJuIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MjA6ZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTIxLVx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSk7XG4tLVxubW0vcGFnZV9vd25lci5jPTQ0MD1zdGF0aWMgaW5saW5lIGJvb2wgc2tpcF9idWRkeV9wYWdlcyh1bnNpZ25lZCBsb25nICpwZm4sIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL3BhZ2Vfb3duZXIuYy00NTctXG5tbS9wYWdlX293bmVyLmM6NDU4OnZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbm1tL3BhZ2Vfb3duZXIuYy00NTktXHRcdFx0XHQgICAgICAgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpXG4tLVxubW0vdm1zdGF0LmM9MTY4ND1zdGF0aWMgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnQoc3RydWN0IHNlcV9maWxlICptLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc3RhdC5jLTE2OTktXHR3YWxrX3pvbmVzX2luX25vZGUobSwgcGdkYXQsIHRydWUsIHRydWUsXG5tbS92bXN0YXQuYzoxNzAwOlx0XHRwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQpO1xubW0vdm1zdGF0LmMtMTcwMS0jZW5kaWYgLyogQ09ORklHX1BBR0VfT1dORVIgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMxOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIGBtbS9wYWdlX293bmVyLmNgIENoYW5nZXMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzLCBpdCBzZWVtcyBsaWtlIHRoZSBtb3N0IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMgYXJlIGhhcHBlbmluZyBpbiBgbW0vcGFnZV9vd25lci5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IGJ1ZGR5IHBhZ2VzIGFyZSBza2lwcGVkLiBUaGUgbW9kaWZpY2F0aW9ucyBpbiBgbW0vbWlncmF0ZS5jYCwgYG1tL2h1Z2V0bGIuY2AsIGFuZCBgaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oYCBhcmUgbW9zdGx5IHR5cGUgY2hhbmdlcyBhbmQgdHJhY2Vwb2ludCB1cGRhdGVzIOKAkyBwcm9iYWJseSBub3QgdGhlIHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcuIEFuZCB0aGUgYHNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlgIGNoYW5nZXMgYXJlIGp1c3QgZm9yIEdEQiBzY3JpcHRpbmcuCgpNeSBndXQgc2F5cyB0aGlzIGlzIHdvcnRoIGEgZnV6emluZyBlZmZvcnQuIFRoZSBjb21taXQgbWVzc2FnZSBsaWtlbHkgaGlnaGxpZ2h0cyBhIGJ1ZyBmaXgg4oCTIHBvdGVudGlhbGx5IGEgZml4IGZvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpc3N1ZXMgd2l0aCBpbnZhbGlkIFBGTnMgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCBwYWdlcyBpbiBgcGFnZV9vd25lcmAgYW5kIGBwYWdldHlwZWluZm9gLiBUaGUgYHNraXBfYnVkZHlfcGFnZXNgIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY3J1eCBvZiB0aGUgZml4LCBhaW1pbmcgdG8gYWRkcmVzcyBhIHNpdHVhdGlvbiB3aGVyZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBtaWdodCByZXR1cm4gYSBnYXJiYWdlIG9yZGVyLCBsZWFkaW5nIHRvIHVudmFsaWRhdGVkIG1lbW9yeSBhY2Nlc3MuCgpXZSBzaG91bGQgdGFyZ2V0IGZ1enppbmcgYnkgcmVhZGluZyBmcm9tIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCBhbmQgYC9wcm9jL3BhZ2V0eXBlaW5mb2AuIFRoZSBgUEFHRV9PV05FUmAgY29uZmlnIG9wdGlvbiBpcyBlc3NlbnRpYWwsIG9mIGNvdXJzZS4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBvZiBmb2N1c2luZyBvbiBgcmVhZF9wYWdlX293bmVyYCwgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAsIGFuZCBgc2tpcF9idWRkeV9wYWdlc2AuIEJ1dCB3YWl0LCBgc2tpcF9idWRkeV9wYWdlc2AgaXMgKmlubGluZSohIFRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzLCBzbyB3ZSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGByZWFkX3BhZ2Vfb3duZXJgIGFuZCBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCBpbnN0ZWFkLgoKSSBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzIEkmIzM5O20gbWlzc2luZy4gQWgsIGBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbmAgaXMganVzdCBhIHR5cGUgY2hhbmdlLiBUaGVuLCBgcHJpbnRfcGFnZV9vd25lcl9tZW1jZ2AgaXMgY2hhbmdpbmcgYFBhZ2VNZW1jZ0ttZW0ocGFnZSlgIHRvIGAobWVtY2dfZGF0YSAmYW1wOyBNRU1DR19EQVRBX0tNRU0pYC4gSG1tbSwgSSBuZWVkIHRvIGxvb2sgaW50byB0aGF0IGBQYWdlTWVtY2dLbWVtYCBiaXQuLi4gZGlkIGl0IGdldCByZW1vdmVkIG9yIHJlbmFtZWQ/IExldCYjMzk7cyBjaGVjayB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQYWdlTWVtY2dLbWVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTUwNj1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTUxMi1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjUxMzpzdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTUxNC17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTA1OT1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwNjMtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDY0OnN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA2NS17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTEzMTQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xMzMwLVxubW0vcGFnZV9hbGxvYy5jOjEzMzE6XHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcdTAwMjZcdTAwMjYgUGFnZU1lbWNnS21lbShwYWdlKSlcbm1tL3BhZ2VfYWxsb2MuYy0xMzMyLVx0XHRfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7XG4tLVxubW0vc2x1Yi5jPTI1MDg9Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxuLS1cbm1tL3NsdWIuYy0yNTIxLVxubW0vc2x1Yi5jOjI1MjI6XHRcdGlmIChQYWdlTWVtY2dLbWVtKHBhZ2UpKVxubW0vc2x1Yi5jLTI1MjMtXHRcdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NDcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNwb3QgYSBmYW1pbGlhciBmYWNlOiBgUGFnZU1lbWNnS21lbWAuIEFoLCByaWdodCwgdGhleSYjMzk7dmUgdXBkYXRlZCBob3cgaXQmIzM5O3MgaGFuZGxlZCwgbm93IGl0JiMzOTtzIHR1Y2tlZCBhd2F5IGluIGBtbS9wYWdlX293bmVyLmNgIGFuZCByZXByZXNlbnRlZCBhcyBgKG1lbWNnX2RhdGEgJmFtcDsgTUVNQ0dfREFUQV9LTUVNKWAuIE1ha2VzIHNlbnNlLiBOb3csIGxldCBtZSBzZWUuLi4gSSBzZWUgdGhleSYjMzk7cmUgcmVhZGluZyBgbWVtY2dfZGF0YWAgbG9ja2xlc3NseToKCmBgYGMKCW1lbWNnX2RhdGEgPSBSRUFEX09OQ0UocGFnZS0mZ3Q7bWVtY2dfZGF0YSk7CglpZiAoIW1lbWNnX2RhdGEpCgkJZ290byBvdXRfdW5sb2NrOwoKCW1lbWNnID0gcGFnZV9tZW1jZ19jaGVjayhwYWdlKTsKYGBgCgpUaGVuIHRoZXkmIzM5O3JlIGNoZWNraW5nIGl0IHdpdGggYSBiaXR3aXNlIEFORCBvcGVyYXRpb24gLSBgKG1lbWNnX2RhdGEgJmFtcDsgTUVNQ0dfREFUQV9LTUVNKWAuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQsIG1pbm9yIGFkanVzdG1lbnQuCgpCdXQgdGhlIG1lYXQgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBza2lwX2J1ZGR5X3BhZ2VzYC4gSW50ZXJlc3RpbmcuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIHNlZS4uLiBZZXAsIHRoaXMgYWRkcmVzc2VzIGEgYnVnIGluIHBhZ2UgaXRlcmF0aW9uLCB3aGljaCBJIHNlZSBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIGJ5IHJlYWRpbmcgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIG9yIGAvcHJvYy9wYWdldHlwZWluZm9gLiBHaXZlbiBpdCYjMzk7cyB1c2VyLWFjY2Vzc2libGUgYW5kIGZpeGVzIGEgYnVnLCBhYnNvbHV0ZWx5LCBmdXp6aW5nIHRoaXMgaXMgdGhlIHJpZ2h0IGNhbGwuIFRoZSByaXNrL3Jld2FyZCByYXRpbyBpcyBkZWZpbml0ZWx5IHRoZXJlLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGBDT05GSUdfUEFHRV9PV05FUmAgaXMgZW5hYmxlZCwganVzdCB0byBiZSBzdXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX09XTkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xMDQtXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxubW0vS2NvbmZpZy5kZWJ1Zy0xMDYtXHRib29sIFwmIzM0O1RyYWNrIHBhZ2Ugb3duZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIFBhZ2UgT3duZXIgQ29uZmlndXJhdGlvbiBhbmQgUnVudGltZSBSZWFjaGFiaWxpdHkqKgoKUmlnaHQsIHNvIGBQQUdFX09XTkVSYC4uLiB0aGF0JiMzOTtzIG91ciBrZXkgY29uZmlndXJhdGlvbiBwb2ludC4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBhZmZlY3RzIHRoZSBzeXN0ZW0sIGFuZCByaWdodCBub3csIHRoZSBwcmltYXJ5IHN5bWJvbHMgZHJhd2luZyBteSBhdHRlbnRpb24gYXJlIGByZWFkX3BhZ2Vfb3duZXJgIGFuZCBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YC4gVGhlc2UgYXJlIGxpa2VseSBjcnVjaWFsIGZvciBhY2Nlc3NpbmcgYW5kIGRpc3BsYXlpbmcgcGFnZSBvd25lcnNoaXAgaW5mb3JtYXRpb24sIHdoaWNoLCBnaXZlbiB0aGUgY29udGV4dCwgcHJvYmFibHkgbWVhbnMgdHJhY2tpbmcgbWVtb3J5IGFsbG9jYXRpb24uCgpOb3csIGhvbGQgb24uLi4gSSBzZWUgdGhhdCBgaW5pdF9wYWdlc19pbl96b25lYCBnZXRzIG1vZGlmaWVkIHRvby4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSB0aGF0JiMzOTtzIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGlzbiYjMzk7dCB1c3VhbGx5IHNvbWV0aGluZyBJJiMzOTtkIGltbWVkaWF0ZWx5IGFzc29jaWF0ZSB3aXRoIHJ1bnRpbWUgYmVoYXZpb3IuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGlzIGBpbml0X3BhZ2VzX2luX3pvbmVgIGFjdHVhbGx5ICpyZWFjaGFibGUqIGR1cmluZyBydW50aW1lPyBFdmVuIHRob3VnaCBpdCYjMzk7cyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgY291bGQgc29tZXRoaW5nIGxhdGVyIG9uIGNhdXNlIGl0IHRvIGJlIGV4ZWN1dGVkIGFnYWluLCBvciBpbnRlcmFjdCB3aXRoIGl0cyByZXN1bHRzPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgcGF0aCBhbmQgc2VlIGlmIGl0JiMzOTtzIHBvdGVudGlhbGx5IGNhbGxlZCBhdCBzb21lIHBvaW50LCBvciBpdHMgaW5pdGlhbCBzdGF0ZSB1c2VkIGF0IHJ1bnRpbWUgaW4gYW4gdW5leHBlY3RlZCB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luaXRfcGFnZXNfaW5fem9uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX293bmVyLmM9Mjk4PXZvaWQgX19yZXNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcilcbi0tXG5tbS9wYWdlX293bmVyLmMtMzI2LVx0XHQgKiBlYXJseV9oYW5kbGUgaXMgYmVpbmcgc2V0IGFzIGEgaGFuZGxlIGZvciBhbGwgdGhvc2Vcbm1tL3BhZ2Vfb3duZXIuYzozMjc6XHRcdCAqIGVhcmx5IGFsbG9jYXRlZCBwYWdlcy4gU2VlIGluaXRfcGFnZXNfaW5fem9uZSgpLlxubW0vcGFnZV9vd25lci5jLTMyOC1cdFx0ICogU2luY2UgdGhlaXIgcmVmY291bnQgaXMgbm90IGJlaW5nIGluY3JlbWVudGVkIGJlY2F1c2Vcbi0tXG5tbS9wYWdlX293bmVyLmM9Nzg2PXN0YXRpYyBsb2ZmX3QgbHNlZWtfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpXG4tLVxubW0vcGFnZV9vd25lci5jLTgwMC1cbm1tL3BhZ2Vfb3duZXIuYzo4MDE6c3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxubW0vcGFnZV9vd25lci5jLTgwMi17XG4tLVxubW0vcGFnZV9vd25lci5jPTg1OT1zdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxuLS1cbm1tL3BhZ2Vfb3duZXIuYy04NjMtXHRmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKVxubW0vcGFnZV9vd25lci5jOjg2NDpcdFx0aW5pdF9wYWdlc19pbl96b25lKHpvbmUpO1xubW0vcGFnZV9vd25lci5jLTg2NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTc4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQYWdlIE93bmVyIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gYGluaXRfcGFnZXNfaW5fem9uZWAgaXMgZGVmaW5pdGVseSBhIGtlcm5lbC1sZXZlbCBmdW5jdGlvbiwgY2FsbGVkIHdheSBlYXJseSBkdXJpbmcgdGhlIGJvb3QgcHJvY2VzcyB2aWEgYGluaXRfZWFybHlfYWxsb2NhdGVkX3BhZ2VzYC4gTm8gdXNlciBzcGFjZSBpbnRlcmFjdGlvbiB0aGVyZS4gQnV0IGByZWFkX3BhZ2Vfb3duZXJgIGFuZCBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCwgdGhvc2UgYXJlIGFjY2Vzc2libGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB3b3JrLgoKSSBzaG91bGQgY2hlY2sgdGhlIHNvdXJjZSBmb3IgYHJlYWRfcGFnZV9vd25lcmAsIHRoYXQmIzM5O3MgaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIEZyb20gd2hhdCBJIGtub3csIGl0IGFwcGVhcnMgdGhhdCB0aGlzIGlzIHRoZSBgLnJlYWRgIG9wZXJhdGlvbiBmb3IgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgLiBUaGF0IG1ha2VzIHNlbnNlLiBBbmQgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAgc2hvd3MgdXAgaW4gYC9wcm9jL3BhZ2V0eXBlaW5mb2AuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXM/IEkga25vdyB0aGF0IGBQQUdFX09XTkVSYCBkZXBlbmRzIG9uIGBERUJVR19LRVJORUxgIGFuZCBgU1RBQ0tUUkFDRV9TVVBQT1JUYCwgc28gbGV0IG1lIHRha2UgYSBsb29rIGF0IGBtbS9LY29uZmlnLmRlYnVnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9wZXIgY29uZmlnIG9wdGlvbnMgYXJlIGVuYWJsZWQgdG8gdXNlIHRoZXNlIGZlYXR1cmVzIHByb3Blcmx5IGFuZCB0aGF0IEkgdW5kZXJzdGFuZCBhbnkgcmVsYXRlZCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX09XTkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnPTczPWNvbmZpZyBTTFVCX1JDVV9ERUJVR1xuLS1cbm1tL0tjb25maWcuZGVidWctMTA0LVxubW0vS2NvbmZpZy5kZWJ1ZzoxMDU6Y29uZmlnIFBBR0VfT1dORVJcbm1tL0tjb25maWcuZGVidWctMTA2LVx0Ym9vbCBcJiMzNDtUcmFjayBwYWdlIG93bmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBEZWJ1ZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGRpZyBpbnRvIHRoZXNlIGRlYnVnIG9wdGlvbnM/IE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEwNS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIGdyYW51bGFyIGRlYnVnIGZlYXR1cmVzIGFyZSBkZWZpbmVkLCByaWdodD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBkZXRlcm1pbmUgaG93IHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhpbmdzIHRoYXQgYXJlIHR5cGljYWxseSBlbmFibGVkIGR1cmluZyBkZXZlbG9wbWVudCBvciBmb3IgdmVyeSBzcGVjaWZpYyB0cm91Ymxlc2hvb3RpbmcuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZmlsZSB3aWxsIG9mZmVyIGEgY2xlYXIgb3ZlcnZpZXcgb2YgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBkZXNjcmlwdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRlYnVnIGZlYXR1cmVzIGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHQgIFRoaXMgaXMgZGVzaWduZWQgYXMgYSBkZWJ1Z2dpbmcgZmVhdHVyZSwgbm90IGEgc2VjdXJpdHkgZmVhdHVyZS5cbiAxMDE6XHRcdCAgT2JqZWN0cyBhcmUgc29tZXRpbWVzIHJlY3ljbGVkIHdpdGhvdXQgUkNVIGRlbGF5IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiAxMDI6XHRcbiAxMDM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMDQ6XHRcbiAxMDU6XHRjb25maWcgUEFHRV9PV05FUlxuIDEwNjpcdFx0Ym9vbCBcJiMzNDtUcmFjayBwYWdlIG93bmVyXCYjMzQ7XG4gMTA3Olx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUXG4gMTA4Olx0XHRzZWxlY3QgREVCVUdfRlNcbiAxMDk6XHRcdHNlbGVjdCBTVEFDS1RSQUNFXG4gMTEwOlx0XHRzZWxlY3QgU1RBQ0tERVBPVFxuIDExMTpcdFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXG4gMTEyOlx0XHRoZWxwXG4gMTEzOlx0XHQgIFRoaXMga2VlcHMgdHJhY2sgb2Ygd2hhdCBjYWxsIGNoYWluIGlzIHRoZSBvd25lciBvZiBhIHBhZ2UsIG1heVxuIDExNDpcdFx0ICBoZWxwIHRvIGZpbmQgYmFyZSBhbGxvY19wYWdlKHMpIGxlYWtzLiBFdmVuIGlmIHlvdSBpbmNsdWRlIHRoaXNcbiAxMTU6XHRcdCAgZmVhdHVyZSBvbiB5b3VyIGJ1aWxkLCBpdCBpcyBkaXNhYmxlZCBpbiBkZWZhdWx0LiBZb3Ugc2hvdWxkIHBhc3NcbiAxMTY6XHRcdCAgXCYjMzQ7cGFnZV9vd25lcj1vblwmIzM0OyB0byBib290IHBhcmFtZXRlciBpbiBvcmRlciB0byBlbmFibGUgaXQuIEVhdHNcbiAxMTc6XHRcdCAgYSBmYWlyIGFtb3VudCBvZiBtZW1vcnkgaWYgZW5hYmxlZC4gU2VlIHRvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jXG4gMTE4Olx0XHQgIGZvciB1c2VyLXNwYWNlIGhlbHBlci5cbiAxMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgYSBDb25maWd1cmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UsIGFuZCB0aGUgaW5pdGlhbCBub3RlIHNheXMsICYjMzQ7WW91IHNob3VsZCBwYXNzICYjMzk7cGFnZV9vd25lcj1vbiYjMzk7IHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC4mIzM0OyBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gSSBrbm93IHN5emthbGxlciAqdXN1YWxseSogaGFuZGxlcyB0aGF0IGF1dG9tYXRpY2FsbHkgaWYgYENPTkZJR19QQUdFX09XTkVSYCBpcyBzZXQuIEhvd2V2ZXIsIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCBvbmx5ICptaWdodCogZG8gdGhhdC4gU28sIHRvIGJlIHNhZmUsIHdlIGNhbiBqdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSBgUEFHRV9PV05FUmAgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IHNob3VsZCBiZSB0aGUgY2xlYW5lc3Qgd2F5IHRvIGRvIHRoaXMuIFdhaXQsIHN5emthbGxlciBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHBhc3MgYm9vdCBwYXJhbWV0ZXJzIGJhc2VkIG9uIGNvbmZpZ3MgdW5sZXNzIGNvbmZpZ3VyZWQgaW4gdGhlIHN5emthbGxlciBtYW5hZ2VyLCByaWdodD8gVGhhdCYjMzk7cyByaWdodCwgYW5kIHdlIHdlcmUgYXNrZWQgdG8gcHJvdmlkZSBgRW5hYmxlQ29uZmlnc2AuIEZpbmUsIHNvIHRoYXQmIzM5O3MgaGFuZGxlZC4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gTm8sIGp1c3QgYFBBR0VfT1dORVJgIGlzIG1lbnRpb25lZC4KCkJ1dCB3YWl0LCB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBtbS9taWdyYXRlLmNgIGFuZCBgbW0vaHVnZXRsYi5jYC4gT2gsIHRob3NlIGFyZSBqdXN0IG1pbm9yLCBwdXJlbHkgZGVjb3JhdGl2ZSwgcmVmYWN0b3JpbmcgY2hhbmdlcy4gVGhleSYjMzk7cmUgY2hhbmdpbmcgYGludCByZWFzb25gIHRvIGBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbmAuIERvZXNuJiMzOTt0IGFmZmVjdCBhbnl0aGluZyBmdW5jdGlvbmFsbHkuIFRoZSAqcmVhbCogZnVuY3Rpb25hbCBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGBza2lwX2J1ZGR5X3BhZ2VzYCBpbiBgbW0vcGFnZV9vd25lci5jYC4gTm93LCBgc2tpcF9idWRkeV9wYWdlc2AgaXMgaW50ZXJlc3RpbmcuIEl0ICpwcmV2ZW50cyogcmVhZGluZyBhIGdhcmJhZ2Ugb3JkZXIgYW5kIHNraXBwaW5nIGludG8gYW4gdW52YWxpZGF0ZWQgbWVtb3J5IHNlY3Rpb24uIFRoYXQgc291bmRzIGxpa2UgYSBsZWdpdGltYXRlIGJ1ZyBmaXguIEEgdmVyeSBpbXBvcnRhbnQgb25lLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBpZiBgc2tpcF9idWRkeV9wYWdlc2AgaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBrZXJuZWwgYmVzaWRlcyBgbW0vcGFnZV9vd25lci5jYC4gTm9wZSwgb25seSB0aGVyZS4gSXQmIzM5O3MgbG9jYWxpemVkIHRvIHRoYXQgbW9kdWxlLCB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gcmVhc29uIGFib3V0LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUgY2hlY2sgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAsIGp1c3QgdG8gbWFrZSBzdXJlIG5vIHN1YnRsZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXN0YXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXN0YXQuYz0xNjg0PXN0YXRpYyB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zdGF0LmMtMTY5OS1cdHdhbGtfem9uZXNfaW5fbm9kZShtLCBwZ2RhdCwgdHJ1ZSwgdHJ1ZSxcbm1tL3Ztc3RhdC5jOjE3MDA6XHRcdHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludCk7XG5tbS92bXN0YXQuYy0xNzAxLSNlbmRpZiAvKiBDT05GSUdfUEFHRV9PV05FUiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkwOQoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiA5MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIHBhZ2Vfb3duZXIgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZmZlY3RzIGBtbS92bXN0YXQuY2AgdW5kZXIgYENPTkZJR19QQUdFX09XTkVSYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlcmUgYXJlIHR3byBwcmltYXJ5IGZ1bmN0aW9uYWwgY2hhbmdlczoKCjEuICBUaGUgYHNraXBfYnVkZHlfcGFnZXNgIGxvZ2ljIGlzIG1vZGlmaWVkIHdpdGhpbiBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAuCjIuICBgcHJpbnRfcGFnZV9vd25lcl9tZW1jZ2Agbm93IHVzZXMgYG1lbWNnX2RhdGEgJmFtcDsgTUVNQ0dfREFUQV9LTUVNYCBpbnN0ZWFkIG9mIHRoZSBgUGFnZU1lbWNnS21lbShwYWdlKWAgbWFjcm8uCgpCb3RoIG9mIHRoZXNlIGNoYW5nZXMgYXJlIGxvY2F0ZWQgd2l0aGluIGBtbS9wYWdlX293bmVyLmNgIGFuZCBhcmUgZ3VhcmRlZCBieSBgQ09ORklHX1BBR0VfT1dORVJgLgoKTXkgZm9jdXMgc3ltYm9scyBhcmUgYHJlYWRfcGFnZV9vd25lcmAgYW5kIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgLiBMZXQmIzM5O3MgY29uZmlybSBpZiBlaXRoZXIgb2YgdGhlc2UgYXJlIGluIGEgaG90IHBhdGguIEl0IGxvb2tzIGxpa2UgYHJlYWRfcGFnZV9vd25lcmAgaXMgcGFydCBvZiBhIGRlYnVnZnMgcmVhZCBvcGVyYXRpb24sIGFuZCBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCBpcyBhIHByb2NmcyByZWFkIG9wZXJhdGlvbi4gVGhhdCBtZWFucyBuZWl0aGVyIGFyZSBwZXJmb3JtYW5jZSBjcml0aWNhbCwgc28gdGhlIGNoYW5nZSBpc24mIzM5O3QgYWJvdXQgcGVyZm9ybWFuY2UsIGJ1dCBzYWZldHkuCgpJIHNob3VsZCBjaGVjayBpZiBgUEFHRV9PV05FUmAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIHN5emJvdC4gSXQgdXN1YWxseSBlbmFibGVzIGEgbG90IG9mIGRlYnVnIGNvbmZpZ3MsIHNvIGl0JiMzOTtzIGxpa2VseSBhbHJlYWR5IG9uLCBidXQgaXQmIzM5O3Mgc3RpbGwgZ29vZCBwcmFjdGljZSB0byBleHBsaWNpdGx5IGxpc3QgaXQgaW4gYEVuYWJsZUNvbmZpZ3NgLgoKTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgc2tpcF9idWRkeV9wYWdlc2AgY2hhbmdlLiBJIHNlZSB0aGUgY29kZSBwcmV2ZW50cyBgcGZuYCBmcm9tIGFkdmFuY2luZyB0b28gZmFyIGlmIGBidWRkeV9vcmRlcl91bnNhZmVgIHJldHVybnMgYSBwb3RlbnRpYWxseSBiYWQgdmFsdWUuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByb3RlY3RzIGFnYWluc3Qgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb3IgaW5maW5pdGUgbG9vcHMuIFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIGJlY2F1c2UgaXQgY2FuIGxlYWQgdG8gdmVyeSBpbnRlcmVzdGluZyBiZWhhdmlvcnMgd2l0aCBidWRkeSBhbGxvY2F0b3IgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LgoKTm93IGxldCYjMzk7cyByZXZpZXcgdGhlIGBwcmludF9wYWdlX293bmVyX21lbWNnYCBjaGFuZ2UuIFRoaXMgc2VlbXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgaW1wYWN0cyBob3cgdGhlICYjMzQ7dmlhIG9iamNnJiMzNDsgc3RyaW5nIGlzIHByaW50ZWQuIEl0IGF2b2lkcyBjYWxsaW5nIGBQYWdlTWVtY2dLbWVtKHBhZ2UpYCwgd2hpY2ggY291bGQgYmUgdW5zYWZlIG9yIGluYWNjdXJhdGUgaW4gdGhlIG5ldyBjb250ZXh0LgoKT3ZlcmFsbCwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgcGF0Y2ggSSBzaG91bGQgcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gSXQgaW50cm9kdWNlcyBjaGFuZ2VzIHRvIHByb3RlY3QgdGhlIGJ1ZGR5IGFsbG9jYXRvciBhbmQgcG90ZW50aWFsbHkgYWx0ZXJzIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBpbiBkZWJ1Z2dpbmcgdG9vbHMuCgpTbywgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gZ29pbmcgdG8gcHJlcGFyZSBmb3IgdGhlIHJlc3VsdHM6CgoqICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgCiogICAqKkZvY3VzU3ltYm9scyoqOiBgWyYjMzQ7cmVhZF9wYWdlX293bmVyJiMzNDssICYjMzQ7cGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50JiMzNDtdYAoqICAgKipFbmFibGVDb25maWdzKio6IGBbJiMzNDtQQUdFX09XTkVSJiMzNDtdYAoqICAgKipSZWFzb25pbmcqKjogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBtbS9wYWdlX293bmVyLmNgIHRvIHNhZmVseSBza2lwIGJ1ZGR5IHBhZ2VzIGR1cmluZyBpdGVyYXRpb24sIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgUEZOIGFjY2Vzc2VzIHdoZW4gcmVhZGluZyBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgb3IgYC9wcm9jL3BhZ2V0eXBlaW5mb2AuIEl0IGFsc28gZml4ZXMgbWVtY2cgZGF0YSByZWFkaW5nIGluIHBhZ2Ugb3duZXIuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWFkX3BhZ2Vfb3duZXImIzM0OywKICAgICYjMzQ7cGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtbS9wYWdlX293bmVyLmMgdG8gc2FmZWx5IHNraXAgYnVkZHkgcGFnZXMgZHVyaW5nIGl0ZXJhdGlvbiwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBQRk4gYWNjZXNzZXMgd2hlbiByZWFkaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgb3IgL3Byb2MvcGFnZXR5cGVpbmZvLiBJdCBhbHNvIGZpeGVzIG1lbWNnIGRhdGEgcmVhZGluZyBpbiBwYWdlIG93bmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX09XTkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVhZF9wYWdlX293bmVyJiMzNDssCiAgICAmIzM0O3BhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbW0vcGFnZV9vd25lci5jIHRvIHNhZmVseSBza2lwIGJ1ZGR5IHBhZ2VzIGR1cmluZyBpdGVyYXRpb24sIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgUEZOIGFjY2Vzc2VzIHdoZW4gcmVhZGluZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIG9yIC9wcm9jL3BhZ2V0eXBlaW5mby4gSXQgYWxzbyBmaXhlcyBtZW1jZyBkYXRhIHJlYWRpbmcgaW4gcGFnZSBvd25lci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEyOjM3Ljk2NTM5NDU4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODIzODQ2ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfT1dORVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWFkX3BhZ2Vfb3duZXJcIixcbiAgICBcInBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtbS9wYWdlX293bmVyLmMgdG8gc2FmZWx5IHNraXAgYnVkZHkgcGFnZXMgZHVyaW5nIGl0ZXJhdGlvbiwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBQRk4gYWNjZXNzZXMgd2hlbiByZWFkaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgb3IgL3Byb2MvcGFnZXR5cGVpbmZvLiBJdCBhbHNvIGZpeGVzIG1lbWNnIGRhdGEgcmVhZGluZyBpbiBwYWdlIG93bmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMjozNy45NjU1MDU0MDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzA3MTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNkNDM2YmY2OTBlYTBlNjBjMzZhNmNlZTliMzIzNWZjMmJiZThjOTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAxMToxMjozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLmZhODI4MjMyZGZjYzE4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5AQCAtMTU0LDcgKzE1NCw4IEBAIGxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXFxuIGJvb2wgZm9saW9faXNvbGF0ZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xcbiBpbnQgZ2V0X2h3cG9pc29uX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCAqaHVnZXRsYiwgYm9vbCB1bnBvaXNvbik7XFxuIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pO1xcbit2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXFxuK1xcdFxcdFxcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTtcXG4gdm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIHN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZTtcXG4gdTMyIGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpZHgpO1xcbkBAIC00MjQsNyArNDI1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIH1cXG4gXFxuQEAgLTk1Niw3ICs5NTcsNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXFxuIFxcdHJldHVybiBtb2RpZmllZF9tYXNrO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiBcXHRib29sIGFsbG93ZWRfZmFsbGJhY2sgPSBmYWxzZTtcXG4gXFxuQEAgLTEyMzgsNyArMTIzOSw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGludCByZWFzb24pXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXFxuaW5kZXggZDVhZjJiN2Y1NzdiMzMuLjFmODM5MjQ2MTVkNmQzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcXG5AQCAtNTcsNyArNTcsOCBAQCB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKTtcXG4gaW50IG1pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKnNyYywgZW51bSBtaWdyYXRlX21vZGUgbW9kZSk7XFxuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldywgZnJlZV9mb2xpb190IGZyZWUsXFxuLVxcdFxcdCAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxcbitcXHRcXHQgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSxcXG4rXFx0XFx0ICBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4gXFx0XFx0ICB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpO1xcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSk7XFxuIGJvb2wgaXNvbGF0ZV9tb3ZhYmxlX29wc19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpc29sYXRlX21vZGVfdCBtb2RlKTtcXG5AQCAtNzcsNyArNzgsOCBAQCBpbnQgc2V0X21vdmFibGVfb3BzKGNvbnN0IHN0cnVjdCBtb3ZhYmxlX29wZXJhdGlvbnMgKm9wcywgZW51bSBwYWdldHlwZSB0eXBlKTtcXG4gc3RhdGljIGlubGluZSB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKSB7fVxcbiBzdGF0aWMgaW5saW5lIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldyxcXG4gXFx0XFx0ZnJlZV9mb2xpb190IGZyZWUsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxcbitcXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4rXFx0XFx0dW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxcbiBcXHR7IHJldHVybiAtRU5PU1lTOyB9XFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHByaXZhdGUpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXFxuaW5kZXggMjY1YzQzMjhiMzZhZDUuLjA1MTAyZDRkMjQ5MGU2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXFxuQEAgLTI1LDYgKzI1LDcgQEAgZW51bSBtaWdyYXRlX3JlYXNvbiB7XFxuIFxcdE1SX0xPTkdURVJNX1BJTixcXG4gXFx0TVJfREVNT1RJT04sXFxuIFxcdE1SX0RBTU9OLFxcbitcXHRNUl9ORVZFUixcXHRcXHQvKiBwYWdlIGhhcyBuZXZlciBiZWVuIG1pZ3JhdGVkICovXFxuIFxcdE1SX1RZUEVTXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXFxuaW5kZXggMzMyODM1N2Y2ZGJhNzIuLjlmZTUxZGZjY2YyNjg1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcXG5AQCAtMyw2ICszLDcgQEBcXG4gI2RlZmluZSBfX0xJTlVYX1BBR0VfT1dORVJfSFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2p1bXBfbGFiZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pZ3JhdGVfbW9kZS5oXFx1MDAzZVxcbiBcXG4gI2lmZGVmIENPTkZJR19QQUdFX09XTkVSXFxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBwYWdlX293bmVyX2luaXRlZDtcXG5AQCAtMTQsNyArMTUsNyBAQCBleHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBleHRlcm4gdm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXFxuIFxcdFxcdFxcdGludCBuZXdfb3JkZXIpO1xcbiBleHRlcm4gdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpO1xcbi1leHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKTtcXG4rZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pO1xcbiBleHRlcm4gdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIGV4dGVybiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuIFxcdFxcdFxcdFxcdFxcdHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKTtcXG5AQCAtNDMsNyArNDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4gXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG4gXFx0XFx0X19mb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBvbGQpO1xcbiB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiBcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbiBcXHRcXHRfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihmb2xpbywgcmVhc29uKTtcXG5AQCAtNjgsNyArNjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcXG4gc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxcbmluZGV4IGNkMDFkZDdiMzY0MGRjLi4xNWVlMmVmMjAxYjVmOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcXG5AQCAtMjMsNyArMjMsOCBAQFxcbiBcXHRFTSggTVJfQ09OVElHX1JBTkdFLFxcdFxcXCJjb250aWdfcmFuZ2VcXFwiKVxcdFxcdFxcdFxcXFxcXG4gXFx0RU0oIE1SX0xPTkdURVJNX1BJTixcXHRcXFwibG9uZ3Rlcm1fcGluXFxcIilcXHRcXHRcXHRcXFxcXFxuIFxcdEVNKCBNUl9ERU1PVElPTixcXHRcXFwiZGVtb3Rpb25cXFwiKVxcdFxcdFxcdFxcXFxcXG4tXFx0RU1lKE1SX0RBTU9OLFxcdFxcdFxcXCJkYW1vblxcXCIpXFxuK1xcdEVNKCBNUl9EQU1PTixcXHRcXHRcXFwiZGFtb25cXFwiKVxcdFxcdFxcdFxcXFxcXG4rXFx0RU1lKE1SX05FVkVSLFxcdFxcdFxcXCJuZXZlcl9taWdyYXRlZFxcXCIpXFxuIFxcbiAvKlxcbiAgKiBGaXJzdCBkZWZpbmUgdGhlIGVudW1zIGluIHRoZSBhYm92ZSBtYWNyb3MgdG8gYmUgZXhwb3J0ZWQgdG8gdXNlcnNwYWNlXFxuQEAgLTUxLDcgKzUyLDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcXG4gXFx0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBzdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgZmFpbGVkLFxcbiBcXHRcXHQgdW5zaWduZWQgbG9uZyB0aHBfc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIHRocF9mYWlsZWQsXFxuIFxcdFxcdCB1bnNpZ25lZCBsb25nIHRocF9zcGxpdCwgdW5zaWduZWQgbG9uZyBsYXJnZV9mb2xpb19zcGxpdCxcXG4tXFx0XFx0IGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24pLFxcbitcXHRcXHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLFxcbiBcXG4gXFx0VFBfQVJHUyhzdWNjZWVkZWQsIGZhaWxlZCwgdGhwX3N1Y2NlZWRlZCwgdGhwX2ZhaWxlZCxcXG4gXFx0XFx0dGhwX3NwbGl0LCBsYXJnZV9mb2xpb19zcGxpdCwgbW9kZSwgcmVhc29uKSxcXG5AQCAtNjQsNyArNjUsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxcbiBcXHRcXHRfX2ZpZWxkKFxcdHVuc2lnbmVkIGxvbmcsXFx0XFx0dGhwX3NwbGl0KVxcbiBcXHRcXHRfX2ZpZWxkKFxcdHVuc2lnbmVkIGxvbmcsXFx0XFx0bGFyZ2VfZm9saW9fc3BsaXQpXFxuIFxcdFxcdF9fZmllbGQoXFx0ZW51bSBtaWdyYXRlX21vZGUsXFx0bW9kZSlcXG4tXFx0XFx0X19maWVsZChcXHRpbnQsXFx0XFx0XFx0cmVhc29uKVxcbitcXHRcXHRfX2ZpZWxkKFxcdGVudW0gbWlncmF0ZV9yZWFzb24sXFx0cmVhc29uKVxcbiBcXHQpLFxcbiBcXG4gXFx0VFBfZmFzdF9hc3NpZ24oXFxuQEAgLTkxLDEzICs5MiwxMyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxcbiBcXG4gVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlc19zdGFydCxcXG4gXFxuLVxcdFRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24pLFxcbitcXHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXFxuIFxcbiBcXHRUUF9BUkdTKG1vZGUsIHJlYXNvbiksXFxuIFxcbiBcXHRUUF9TVFJVQ1RfX2VudHJ5KFxcbiBcXHRcXHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9tb2RlLCBtb2RlKVxcbi1cXHRcXHRfX2ZpZWxkKGludCwgcmVhc29uKVxcbitcXHRcXHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9yZWFzb24sIHJlYXNvbilcXG4gXFx0KSxcXG4gXFxuIFxcdFRQX2Zhc3RfYXNzaWduKFxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uMTc3MzJkMWZkYzVlZmQgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTcxODIsNyArNzE4Miw4IEBAIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIH1cXG4gXFxuLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcXG4rdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLFxcbitcXHRcXHRcXHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgaHN0YXRlICpoID0gZm9saW9faHN0YXRlKG9sZF9mb2xpbyk7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcXG5pbmRleCBkOWIyMzkwOWQ3MTZjNi4uNDllMTBmZWViMDk0ZjAgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZS5jXFxuKysrIGIvbW0vbWlncmF0ZS5jXFxuQEAgLTE0NjksNyArMTQ2OSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuIFxcdFxcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuIFxcdFxcdHN0cnVjdCBmb2xpbyAqc3JjLCBpbnQgZm9yY2UsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXFxuLVxcdFxcdGludCByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcXG4rXFx0XFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcXG4ge1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmRzdDtcXG4gXFx0aW50IHJjID0gLUVBR0FJTjtcXG5AQCAtMTYyNiw3ICsxNjI2LDcgQEAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMge1xcbiAgKi9cXG4gc3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuIFxcdFxcdFxcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi1cXHRcXHRcXHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcXG4rXFx0XFx0XFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcylcXG4ge1xcbkBAIC0xNzE2LDcgKzE3MTYsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfbW92ZShzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpkc3RfZm9saW9zLFxcbiBcXHRcXHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi1cXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxcbitcXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4gXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcyxcXG4gXFx0XFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxcbiBcXHRcXHRpbnQgKnJldHJ5LCBpbnQgKnRocF9yZXRyeSwgaW50ICpucl9mYWlsZWQsXFxuQEAgLTE3OTksNyArMTc5OSw3IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcXG4gICovXFxuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxcbiBcXHRcXHRuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLCBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbyxcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXFxuIFxcdFxcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywgaW50IG5yX3Bhc3MpXFxuIHtcXG5AQCAtMjAxMSw3ICsyMDExLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXFxuIFxcbiBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbiBcXHRcXHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi1cXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxcbitcXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4gXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxcbiBcXHRcXHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMpXFxuIHtcXG5AQCAtMjA4OCw3ICsyMDg4LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gICovXFxuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuIFxcdFxcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuLVxcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcXG4rXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcXG4ge1xcbiBcXHRpbnQgcmMsIHJjX2dhdGhlcjtcXG4gXFx0aW50IG5yX3BhZ2VzO1xcbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcXG5pbmRleCAyZGRkY2I2NTEwYWExZS4uZWZiZjY3ZDU0ZWUyNjYgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9vd25lci5jXFxuKysrIGIvbW0vcGFnZV9vd25lci5jXFxuQEAgLTMzOSwxMyArMzM5LDEzIEBAIG5vaW5saW5lIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIsXFxuIFxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcXG4gXFxuIFxcdGhhbmRsZSA9IHNhdmVfc3RhY2soZ2ZwX21hc2spO1xcbi1cXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsXFxuK1xcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNUl9ORVZFUixcXG4gXFx0XFx0XFx0XFx0ICAgdHNfbnNlYywgY3VycmVudC1cXHUwMDNlcGlkLCBjdXJyZW50LVxcdTAwM2V0Z2lkLFxcbiBcXHRcXHRcXHRcXHQgICBjdXJyZW50LVxcdTAwM2Vjb21tKTtcXG4gXFx0aW5jX3N0YWNrX3JlY29yZF9jb3VudChoYW5kbGUsIGdmcF9tYXNrLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4gfVxcbiBcXG4tdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxcbit2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4gXFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XFxuQEAgLTQyMiw2ICs0MjIsMzkgQEAgdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLlxcbisgKiBUaGlzIHNhZmVseSByZWFkcyB0aGUgYnVkZHkgb3JkZXIgd2l0aG91dCB0aGUgem9uZSBsb2NrLCB3aGljaCBtYXkgY2F1c2UgdXNcXG4rICogdG8gc2tpcCBsZXNzIHRoYW4gdGhlIGZ1bGwgYnVkZHkgYmxvY2ssIGJ1dCB0aGF0IGlzIGFjY2VwdGFibGUgZm9yIHBhZ2Ugb3duZXJcXG4rICogaXRlcmF0aW9uIHB1cnBvc2VzLlxcbisgKlxcbisgKiBUaGUgbG9ja2xlc3MgcmVhZCBvZiBidWRkeV9vcmRlcl91bnNhZmUoKSBjYW4gYWxzbyByZXR1cm4gYSBnYXJiYWdlIG9yZGVyIGlmXFxuKyAqIHRoZSBwYWdlIGlzIGNvbmN1cnJlbnRseSBhbGxvY2F0ZWQgYW5kIFBhZ2VCdWRkeSBpcyBjbGVhcmVkIGJldHdlZW4gdGhlIGNoZWNrXFxuKyAqIGFuZCB0aGUgcmVhZC4gQ2xhbXAgdGhlIGFkdmFuY2UgYXQgdGhlIG5leHQgTUFYX09SREVSX05SX1BBR0VTIGJvdW5kYXJ5IHNvXFxuKyAqIHRoYXQgYSBib2d1cyBvcmRlciBjYW5ub3QgY2FycnkgQHBmbiBpbnRvIGFuIHVudmFsaWRhdGVkIG1lbW9yeSBzZWN0aW9uLFxcbisgKiB3aGljaCB3b3VsZCBicmVhayBjYWxsZXJzIHRoYXQgcmVseSBvbiBib3VuZGFyeS1hbGlnbmVkIHBmbl92YWxpZCgpIGNoZWNrcy5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSxcXG4rICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIG9yZGVyO1xcbitcXG4rXFx0aWYgKCFQYWdlQnVkZHkocGFnZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbitcXHRpZiAob3JkZXIgXFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBuZXdfcGZuID0gKnBmbiArICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGJvdW5kYXJ5ID0gQUxJR04oKnBmbiArIDEsIE1BWF9PUkRFUl9OUl9QQUdFUyk7XFxuK1xcbitcXHRcXHQqcGZuID0gbWluKG5ld19wZm4sIGJvdW5kYXJ5KSAtIDE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4ge1xcbkBAIC00NjEsMTQgKzQ5NCw4IEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0XFx0XFx0aWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjtcXG4tXFxuLVxcdFxcdFxcdFxcdGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbi1cXHRcXHRcXHRcXHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXFxuLVxcdFxcdFxcdFxcdFxcdHBmbiArPSAoMVVMIFxcdTAwM2NcXHUwMDNjIGZyZWVwYWdlX29yZGVyKSAtIDE7XFxuK1xcdFxcdFxcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFxcdTAwMjZwZm4sIHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTUwNSwxMyArNTMyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0c2VxX3B1dGMobSwgJ1xcXFxuJyk7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gLypcXG4gICogTG9va2luZyBmb3IgbWVtY2cgaW5mb3JtYXRpb24gYW5kIHByaW50IGl0IG91dFxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi0jaWZkZWYgQ09ORklHX01FTUNHXFxuIFxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXHRib29sIG9ubGluZTtcXG5AQCAtNTM0LDE1ICs1NjEsMjEgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXFxuIFxcdGNncm91cF9uYW1lKG1lbWNnLVxcdTAwM2Vjc3MuY2dyb3VwLCBuYW1lLCBzaXplb2YobmFtZSkpO1xcbiBcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LFxcbiBcXHRcXHRcXHRcXFwiQ2hhcmdlZCAlc3RvICVzbWVtY2cgJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFBhZ2VNZW1jZ0ttZW0ocGFnZSkgPyBcXFwiKHZpYSBvYmpjZykgXFxcIiA6IFxcXCJcXFwiLFxcbitcXHRcXHRcXHQobWVtY2dfZGF0YSBcXHUwMDI2IE1FTUNHX0RBVEFfS01FTSkgPyBcXFwiKHZpYSBvYmpjZykgXFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRvbmxpbmUgPyBcXFwiXFxcIiA6IFxcXCJvZmZsaW5lIFxcXCIsXFxuIFxcdFxcdFxcdG5hbWUpO1xcbiBvdXRfdW5sb2NrOlxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rI2VuZGlmXFxuIFxcbiBzdGF0aWMgc3NpemVfdFxcbiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuQEAgLTU3OSw3ICs2MTIsNyBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdGlmIChyZXQgXFx1MDAzZT0gY291bnQpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4tXFx0aWYgKHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHtcXG4rXFx0aWYgKHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpIHtcXG4gXFx0XFx0cmV0ICs9IHNjbnByaW50ZihrYnVmICsgcmV0LCBjb3VudCAtIHJldCxcXG4gXFx0XFx0XFx0XFxcIlBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XFxuQEAgLTYzMCwxMCArNjYzLDEwIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdGVsc2VcXG4gXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXFxcXG5cXFwiKTtcXG4gXFxuLVxcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUsIGZyZWVfdHMgJWxsdVxcXFxuXFxcIixcXG4rXFx0cHJfYWxlcnQoXFxcInBhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdVxcXFxuXFxcIixcXG4gXFx0XFx0IHBhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBtaWdyYXRldHlwZV9uYW1lc1ttdF0sIGdmcF9tYXNrLCBcXHUwMDI2Z2ZwX21hc2ssXFxuIFxcdFxcdCBwYWdlX293bmVyLVxcdTAwM2VwaWQsIHBhZ2Vfb3duZXItXFx1MDAzZXRnaWQsIHBhZ2Vfb3duZXItXFx1MDAzZWNvbW0sXFxuLVxcdFxcdCBwYWdlX293bmVyLVxcdTAwM2V0c19uc2VjLCBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RzX25zZWMpO1xcbitcXHRcXHQgcGFnZV9vd25lci1cXHUwMDNldHNfbnNlYyk7XFxuIFxcbiBcXHRoYW5kbGUgPSBSRUFEX09OQ0UocGFnZV9vd25lci1cXHUwMDNlaGFuZGxlKTtcXG4gXFx0aWYgKCFoYW5kbGUpXFxuQEAgLTY0NSwxMiArNjc4LDEzIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdGlmICghaGFuZGxlKSB7XFxuIFxcdFxcdHByX2FsZXJ0KFxcXCJwYWdlX293bmVyIGZyZWUgc3RhY2sgdHJhY2UgbWlzc2luZ1xcXFxuXFxcIik7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgcGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdGdpZCk7XFxuK1xcdFxcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCB0cyAlbGx1IHN0YWNrIHRyYWNlOlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cXHUwMDNlZnJlZV90Z2lkLFxcbitcXHRcXHRcXHQgIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdHNfbnNlYyk7XFxuIFxcdFxcdHN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChwYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKVxcbitcXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUilcXG4gXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XFxuIFxcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XFxuQEAgLTY5NywxMyArNzMxLDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuLVxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcXG4tXFxuLVxcdFxcdFxcdGlmIChmcmVlcGFnZV9vcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcXG4rXFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuIFxcbiBcXHRcXHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXFxuQEAgLTc5OCwyMCArODI3LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxcbiBcXHRcXHRcXHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS1cXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcXG4tXFx0XFx0XFx0ICogY2FyZWZ1bCB3aGVuIHJlYWRpbmcgYnVkZHkgcGFnZSBvcmRlci4gVGhlIG9ubHlcXG4tXFx0XFx0XFx0ICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzc1xcbi1cXHRcXHRcXHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cXG4tXFx0XFx0XFx0ICogaGVhdnkgbG9jayBjb250ZW50aW9uLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbi1cXG4tXFx0XFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBvcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpIC0gMTtcXG4rXFx0XFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtODI2LDcgKzg0Myw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gXFxuIFxcdFxcdFxcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXFxuIFxcdFxcdFxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgLTEsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXFx1MDAzZXBpZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXFx1MDAzZXBpZCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgY3VycmVudC1cXHUwMDNldGdpZCwgY3VycmVudC1cXHUwMDNlY29tbSk7XFxuIFxcdFxcdFxcdGNvdW50Kys7XFxuIGV4dF9wdXRfY29udGludWU6XFxuQEAgLTg4Nyw3ICs5MDQsNyBAQCBzdGF0aWMgdm9pZCAqc3RhY2tfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcHBvcylcXG4gXFx0cmV0dXJuIHN0YWNrO1xcbiB9XFxuIFxcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZXNfdGhyZXNob2xkO1xcbiBcXG4gc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIHtcXG5AQCAtOTA0LDcgKzkyMSw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiBcXHRucl9iYXNlX3BhZ2VzID0gcmVmY291bnRfcmVhZChcXHUwMDI2c3RhY2tfcmVjb3JkLVxcdTAwM2Vjb3VudCkgLSAxO1xcbiBcXG4gXFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1BBR0VTIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAobnJfYmFzZV9wYWdlcyBcXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcXHUwMDNjIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSlcXG4rXFx0ICAgIChucl9iYXNlX3BhZ2VzIFxcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFxcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0spIHtcXG5AQCAtOTI2LDE2ICs5NDMsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIHtcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0ge1xcbiBcXHQuc3RhcnRcXHQ9IHN0YWNrX3N0YXJ0LFxcbiBcXHQubmV4dFxcdD0gc3RhY2tfbmV4dCxcXG4gXFx0LnN0b3BcXHQ9IHN0YWNrX3N0b3AsXFxuIFxcdC5zaG93XFx0PSBzdGFja19wcmludFxcbiB9O1xcbiBcXG4tc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbi1cXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcXHUwMDI2cGFnZV9vd25lcl9zdGFja19vcCxcXG4rXFx0aW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXFx1MDAyNnN0YWNrX29wLFxcbiBcXHRcXHRcXHRcXHQgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpO1xcbiBcXG4gXFx0aWYgKCFyZXQpIHtcXG5AQCAtOTQ4LDI4ICs5NjUsMjYgQEAgc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHtcXG4tXFx0Lm9wZW5cXHRcXHQ9IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbixcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhY2tfZm9wcyA9IHtcXG4rXFx0Lm9wZW5cXHRcXHQ9IHN0YWNrX29wZW4sXFxuIFxcdC5yZWFkXFx0XFx0PSBzZXFfcmVhZCxcXG4gXFx0Lmxsc2Vla1xcdFxcdD0gc2VxX2xzZWVrLFxcbiBcXHQucmVsZWFzZVxcdD0gc2VxX3JlbGVhc2VfcHJpdmF0ZSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxcbitzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxuIHtcXG4tXFx0KnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7XFxuK1xcdCp2YWwgPSBSRUFEX09OQ0UocGFnZXNfdGhyZXNob2xkKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXFxuK3N0YXRpYyBpbnQgdGhyZXNob2xkX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxcbiB7XFxuLVxcdFdSSVRFX09OQ0UocGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQsIHZhbCk7XFxuK1xcdFdSSVRFX09OQ0UocGFnZXNfdGhyZXNob2xkLCB2YWwpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgXFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCxcXG4tXFx0XFx0XFx0XFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgXFxcIiVsbHVcXFwiKTtcXG4tXFxuK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCBcXHUwMDI2dGhyZXNob2xkX2dldCwgXFx1MDAyNnRocmVzaG9sZF9zZXQsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXFxuIHtcXG5AQCAtOTg1LDE3ICsxMDAwLDE3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNob3dfc3RhY2tzXFxcIiwgMDQwMCwgZGlyLFxcbiBcXHRcXHRcXHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXFxuLVxcdFxcdFxcdCAgICAgXFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnN0YWNrX2ZvcHMpO1xcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzaG93X2hhbmRsZXNcXFwiLCAwNDAwLCBkaXIsXFxuIFxcdFxcdFxcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX0hBTkRMRSB8XFxuIFxcdFxcdFxcdFxcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXFxuLVxcdFxcdFxcdCAgICBcXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZzdGFja19mb3BzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic2hvd19zdGFja3NfaGFuZGxlc1xcXCIsIDA0MDAsIGRpcixcXG4gXFx0XFx0XFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxcbiBcXHRcXHRcXHRcXHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFKSxcXG4tXFx0XFx0XFx0ICAgIFxcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xcbitcXHRcXHRcXHQgICAgXFx1MDAyNnN0YWNrX2ZvcHMpO1xcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJjb3VudF90aHJlc2hvbGRcXFwiLCAwNjAwLCBkaXIsIE5VTEwsXFxuLVxcdFxcdFxcdCAgICBcXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcyk7XFxuK1xcdFxcdFxcdCAgICBcXHUwMDI2dGhyZXNob2xkX2ZvcHMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KVxcbmRpZmYgLS1naXQgYS9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5IGIvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weVxcbmluZGV4IDhlNzEzYTA5Y2ZlNzhmLi5lZWFiYWVlZDQzOGIyYSAxMDA2NDRcXG4tLS0gYS9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5XFxuKysrIGIvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weVxcbkBAIC0zNCw2ICszNCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOlxcbiAgICAgbWF4X3BmbiA9IE5vbmVcXG4gICAgIHBfb3BzID0gTm9uZVxcbiAgICAgbWlncmF0ZV9yZWFzb25fbmFtZXMgPSBOb25lXFxuKyAgICBtcl9uZXZlciA9IE5vbmVcXG4gXFxuICAgICBkZWYgX19pbml0X18oc2VsZik6XFxuICAgICAgICAgc3VwZXIoRHVtcFBhZ2VPd25lciwgc2VsZikuX19pbml0X18oXFxcImx4LWR1bXAtcGFnZS1vd25lclxcXCIsIGdkYi5DT01NQU5EX1NVUFBPUlQpXFxuQEAgLTY1LDYgKzY2LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XFxuICAgICAgICAgc2VsZi5tYXhfcGZuID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbChcXFwibWF4X3BmblxcXCIpKVxcbiAgICAgICAgIHNlbGYucGFnZV9leHRfc2l6ZSA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoXFxcInBhZ2VfZXh0X3NpemVcXFwiKSlcXG4gICAgICAgICBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzID0gZ2RiLnBhcnNlX2FuZF9ldmFsKCdtaWdyYXRlX3JlYXNvbl9uYW1lcycpXFxuKyAgICAgICAgc2VsZi5tcl9uZXZlciA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoJ01SX05FVkVSJykpXFxuIFxcbiAgICAgZGVmIHBhZ2VfZXh0X2ludmFsaWQoc2VsZiwgcGFnZV9leHQpOlxcbiAgICAgICAgIGlmIHBhZ2VfZXh0ID09IGdkYi5WYWx1ZSgwKTpcXG5AQCAtMTM4LDcgKzE0MCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOlxcbiAgICAgICAgIGVsc2U6XFxuICAgICAgICAgICAgIGdkYi53cml0ZSgncGFnZSBsYXN0IGZyZWUgc3RhY2sgdHJhY2U6XFxcXG4nKVxcbiAgICAgICAgICAgICBzdGFja2RlcG90LnN0YWNrX2RlcG90X3ByaW50KHBhZ2Vfb3duZXJbXFxcImZyZWVfaGFuZGxlXFxcIl0pXFxuLSAgICAgICAgaWYgcGFnZV9vd25lclsnbGFzdF9taWdyYXRlX3JlYXNvbiddICE9IC0xOlxcbisgICAgICAgIGlmIHBhZ2Vfb3duZXJbJ2xhc3RfbWlncmF0ZV9yZWFzb24nXSAhPSBzZWxmLm1yX25ldmVyOlxcbiAgICAgICAgICAgICBnZGIud3JpdGUoJ3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxcXG4nICUgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyWydsYXN0X21pZ3JhdGVfcmVhc29uJ11dKVxcbiBcXG4gICAgIGRlZiByZWFkX3BhZ2Vfb3duZXIoc2VsZik6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEyOjM4LjY4MzY3ODA2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTEwNTU1MDA3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVhZF9wYWdlX293bmVyXCIsXG4gICAgXCJwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbW0vcGFnZV9vd25lci5jIHRvIHNhZmVseSBza2lwIGJ1ZGR5IHBhZ2VzIGR1cmluZyBpdGVyYXRpb24sIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgUEZOIGFjY2Vzc2VzIHdoZW4gcmVhZGluZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIG9yIC9wcm9jL3BhZ2V0eXBlaW5mby4gSXQgYWxzbyBmaXhlcyBtZW1jZyBkYXRhIHJlYWRpbmcgaW4gcGFnZSBvd25lci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZDQzNmJmNjkwZWEwZTYwYzM2YTZjZWU5YjMyMzVmYzJiYmU4Yzk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxMToxMjozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDJhYmFmOTkzMjFlOTBkLi5mYTgyODIzMmRmY2MxOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTE1NCw3ICsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuIGJvb2wgZm9saW9faXNvbGF0ZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuIGludCBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sICpodWdldGxiLCBib29sIHVucG9pc29uKTtcbiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pO1xuK3ZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcbitcdFx0XHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7XG4gdm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gc3RydWN0IG11dGV4ICpodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlO1xuIHUzMiBodWdldGxiX2ZhdWx0X211dGV4X2hhc2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaWR4KTtcbkBAIC00MjQsNyArNDI1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbitcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gXG5AQCAtOTU2LDcgKzk1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcbiBcdHJldHVybiBtb2RpZmllZF9tYXNrO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdGJvb2wgYWxsb3dlZF9mYWxsYmFjayA9IGZhbHNlO1xuIFxuQEAgLTEyMzgsNyArMTIzOSw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxuaW5kZXggZDVhZjJiN2Y1NzdiMzMuLjFmODM5MjQ2MTVkNmQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXG5AQCAtNTcsNyArNTcsOCBAQCB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKTtcbiBpbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXG4gXHRcdHN0cnVjdCBmb2xpbyAqc3JjLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKTtcbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLFxuLVx0XHQgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbitcdFx0ICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXG4rXHRcdCAgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdCAgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKTtcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSk7XG4gYm9vbCBpc29sYXRlX21vdmFibGVfb3BzX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGlzb2xhdGVfbW9kZV90IG1vZGUpO1xuQEAgLTc3LDcgKzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7XG4gc3RhdGljIGlubGluZSB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LFxuIFx0XHRmcmVlX2ZvbGlvX3QgZnJlZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4rXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuK1x0XHR1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4gXHR7IHJldHVybiAtRU5PU1lTOyB9XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsXG4gXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxuaW5kZXggMjY1YzQzMjhiMzZhZDUuLjA1MTAyZDRkMjQ5MGU2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxuQEAgLTI1LDYgKzI1LDcgQEAgZW51bSBtaWdyYXRlX3JlYXNvbiB7XG4gXHRNUl9MT05HVEVSTV9QSU4sXG4gXHRNUl9ERU1PVElPTixcbiBcdE1SX0RBTU9OLFxuK1x0TVJfTkVWRVIsXHRcdC8qIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQgKi9cbiBcdE1SX1RZUEVTXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXG5pbmRleCAzMzI4MzU3ZjZkYmE3Mi4uOWZlNTFkZmNjZjI2ODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcbkBAIC0zLDYgKzMsNyBAQFxuICNkZWZpbmUgX19MSU5VWF9QQUdFX09XTkVSX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9qdW1wX2xhYmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlX21vZGUuaFx1MDAzZVxuIFxuICNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBwYWdlX293bmVyX2luaXRlZDtcbkBAIC0xNCw3ICsxNSw3IEBAIGV4dGVybiB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuIFx0XHRcdGludCBuZXdfb3JkZXIpO1xuIGV4dGVybiB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCk7XG4tZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbik7XG4rZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pO1xuIGV4dGVybiB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbiBleHRlcm4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSk7XG5AQCAtNDMsNyArNDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbiBcdFx0X19mb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBvbGQpO1xuIH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG4gXHRcdF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKGZvbGlvLCByZWFzb24pO1xuQEAgLTY4LDcgKzY5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXG4gc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcbmluZGV4IGNkMDFkZDdiMzY0MGRjLi4xNWVlMmVmMjAxYjVmOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXG5AQCAtMjMsNyArMjMsOCBAQFxuIFx0RU0oIE1SX0NPTlRJR19SQU5HRSxcdFwiY29udGlnX3JhbmdlXCIpXHRcdFx0XFxcbiBcdEVNKCBNUl9MT05HVEVSTV9QSU4sXHRcImxvbmd0ZXJtX3BpblwiKVx0XHRcdFxcXG4gXHRFTSggTVJfREVNT1RJT04sXHRcImRlbW90aW9uXCIpXHRcdFx0XFxcbi1cdEVNZShNUl9EQU1PTixcdFx0XCJkYW1vblwiKVxuK1x0RU0oIE1SX0RBTU9OLFx0XHRcImRhbW9uXCIpXHRcdFx0XFxcbitcdEVNZShNUl9ORVZFUixcdFx0XCJuZXZlcl9taWdyYXRlZFwiKVxuIFxuIC8qXG4gICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZVxuQEAgLTUxLDcgKzUyLDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcbiBcdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIGZhaWxlZCxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3N1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyB0aHBfZmFpbGVkLFxuIFx0XHQgdW5zaWduZWQgbG9uZyB0aHBfc3BsaXQsIHVuc2lnbmVkIGxvbmcgbGFyZ2VfZm9saW9fc3BsaXQsXG4tXHRcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcbitcdFx0IGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSxcbiBcbiBcdFRQX0FSR1Moc3VjY2VlZGVkLCBmYWlsZWQsIHRocF9zdWNjZWVkZWQsIHRocF9mYWlsZWQsXG4gXHRcdHRocF9zcGxpdCwgbGFyZ2VfZm9saW9fc3BsaXQsIG1vZGUsIHJlYXNvbiksXG5AQCAtNjQsNyArNjUsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0dGhwX3NwbGl0KVxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0bGFyZ2VfZm9saW9fc3BsaXQpXG4gXHRcdF9fZmllbGQoXHRlbnVtIG1pZ3JhdGVfbW9kZSxcdG1vZGUpXG4tXHRcdF9fZmllbGQoXHRpbnQsXHRcdFx0cmVhc29uKVxuK1x0XHRfX2ZpZWxkKFx0ZW51bSBtaWdyYXRlX3JlYXNvbixcdHJlYXNvbilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbkBAIC05MSwxMyArOTIsMTMgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcbiBcbiBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzX3N0YXJ0LFxuIFxuLVx0VFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXG4rXHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXG4gXG4gXHRUUF9BUkdTKG1vZGUsIHJlYXNvbiksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9tb2RlLCBtb2RlKVxuLVx0XHRfX2ZpZWxkKGludCwgcmVhc29uKVxuK1x0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9yZWFzb24sIHJlYXNvbilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi4xNzczMmQxZmRjNWVmZCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtNzE4Miw3ICs3MTgyLDggQEAgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGZvbGlvX3B1dChmb2xpbyk7XG4gfVxuIFxuLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbit2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4rXHRcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pO1xuIFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggZDliMjM5MDlkNzE2YzYuLjQ5ZTEwZmVlYjA5NGYwIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC0xNDY5LDcgKzE0NjksNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fbW92ZShmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4gXHRcdHN0cnVjdCBmb2xpbyAqc3JjLCBpbnQgZm9yY2UsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXG4tXHRcdGludCByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbitcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmRzdDtcbiBcdGludCByYyA9IC1FQUdBSU47XG5AQCAtMTYyNiw3ICsxNjI2LDcgQEAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMge1xuICAqL1xuIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuK1x0XHRcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0XHQgICAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zKVxuIHtcbkBAIC0xNzE2LDcgKzE3MTYsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc19tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmRzdF9mb2xpb3MsXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4rXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXG4gXHRcdGludCAqcmV0cnksIGludCAqdGhwX3JldHJ5LCBpbnQgKm5yX2ZhaWxlZCxcbkBAIC0xNzk5LDcgKzE3OTksNyBAQCBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc191bmRvKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4gICovXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG4gXHRcdG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLFxuLVx0XHR1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4rXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcbiB7XG5AQCAtMjAxMSw3ICsyMDExLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG4gXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbitcdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzKVxuIHtcbkBAIC0yMDg4LDcgKzIwODgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuICAqL1xuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbitcdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiB7XG4gXHRpbnQgcmMsIHJjX2dhdGhlcjtcbiBcdGludCBucl9wYWdlcztcbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDJkZGRjYjY1MTBhYTFlLi5lZmJmNjdkNTRlZTI2NiAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xuKysrIGIvbW0vcGFnZV9vd25lci5jXG5AQCAtMzM5LDEzICszMzksMTMgQEAgbm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcixcbiBcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbiBcbiBcdGhhbmRsZSA9IHNhdmVfc3RhY2soZ2ZwX21hc2spO1xuLVx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIC0xLFxuK1x0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1SX05FVkVSLFxuIFx0XHRcdFx0ICAgdHNfbnNlYywgY3VycmVudC1cdTAwM2VwaWQsIGN1cnJlbnQtXHUwMDNldGdpZCxcbiBcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNlY29tbSk7XG4gXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbiB9XG4gXG4tdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuK3ZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbiBcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuQEAgLTQyMiw2ICs0MjIsMzkgQEAgdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4rLypcbisgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLlxuKyAqIFRoaXMgc2FmZWx5IHJlYWRzIHRoZSBidWRkeSBvcmRlciB3aXRob3V0IHRoZSB6b25lIGxvY2ssIHdoaWNoIG1heSBjYXVzZSB1c1xuKyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyXG4rICogaXRlcmF0aW9uIHB1cnBvc2VzLlxuKyAqXG4rICogVGhlIGxvY2tsZXNzIHJlYWQgb2YgYnVkZHlfb3JkZXJfdW5zYWZlKCkgY2FuIGFsc28gcmV0dXJuIGEgZ2FyYmFnZSBvcmRlciBpZlxuKyAqIHRoZSBwYWdlIGlzIGNvbmN1cnJlbnRseSBhbGxvY2F0ZWQgYW5kIFBhZ2VCdWRkeSBpcyBjbGVhcmVkIGJldHdlZW4gdGhlIGNoZWNrXG4rICogYW5kIHRoZSByZWFkLiBDbGFtcCB0aGUgYWR2YW5jZSBhdCB0aGUgbmV4dCBNQVhfT1JERVJfTlJfUEFHRVMgYm91bmRhcnkgc29cbisgKiB0aGF0IGEgYm9ndXMgb3JkZXIgY2Fubm90IGNhcnJ5IEBwZm4gaW50byBhbiB1bnZhbGlkYXRlZCBtZW1vcnkgc2VjdGlvbixcbisgKiB3aGljaCB3b3VsZCBicmVhayBjYWxsZXJzIHRoYXQgcmVseSBvbiBib3VuZGFyeS1hbGlnbmVkIHBmbl92YWxpZCgpIGNoZWNrcy5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcGFnZSB3YXMgc2tpcHBlZCAoY2FsbGVyIHNob3VsZCBjb250aW51ZSBpdHMgbG9vcCksXG4rICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBvcmRlcjtcbitcbitcdGlmICghUGFnZUJ1ZGR5KHBhZ2UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbitcdGlmIChvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgbmV3X3BmbiA9ICpwZm4gKyAoMVVMIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4rXHRcdHVuc2lnbmVkIGxvbmcgYm91bmRhcnkgPSBBTElHTigqcGZuICsgMSwgTUFYX09SREVSX05SX1BBR0VTKTtcbitcbitcdFx0KnBmbiA9IG1pbihuZXdfcGZuLCBib3VuZGFyeSkgLSAxO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRcdCAgICAgICBwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiB7XG5AQCAtNDYxLDE0ICs0OTQsOCBAQCB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0aWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjtcbi1cbi1cdFx0XHRcdGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVx0XHRcdFx0aWYgKGZyZWVwYWdlX29yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXG4tXHRcdFx0XHRcdHBmbiArPSAoMVVMIFx1MDAzY1x1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xuK1x0XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4gXG4gXHRcdFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTUwNSwxMyArNTMyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdHNlcV9wdXRjKG0sICdcXG4nKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19NRU1DR1xuIC8qXG4gICogTG9va2luZyBmb3IgbWVtY2cgaW5mb3JtYXRpb24gYW5kIHByaW50IGl0IG91dFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIFx0XHRcdFx0XHQgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdGJvb2wgb25saW5lO1xuQEAgLTUzNCwxNSArNTYxLDIxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIFx0Y2dyb3VwX25hbWUobWVtY2ctXHUwMDNlY3NzLmNncm91cCwgbmFtZSwgc2l6ZW9mKG5hbWUpKTtcbiBcdHJldCArPSBzY25wcmludGYoa2J1ZiArIHJldCwgY291bnQgLSByZXQsXG4gXHRcdFx0XCJDaGFyZ2VkICVzdG8gJXNtZW1jZyAlc1xcblwiLFxuLVx0XHRcdFBhZ2VNZW1jZ0ttZW0ocGFnZSkgPyBcIih2aWEgb2JqY2cpIFwiIDogXCJcIixcbitcdFx0XHQobWVtY2dfZGF0YSBcdTAwMjYgTUVNQ0dfREFUQV9LTUVNKSA/IFwiKHZpYSBvYmpjZykgXCIgOiBcIlwiLFxuIFx0XHRcdG9ubGluZSA/IFwiXCIgOiBcIm9mZmxpbmUgXCIsXG4gXHRcdFx0bmFtZSk7XG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuLSNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRyZXR1cm4gcmV0O1xuK31cbisjZW5kaWZcbiBcbiBzdGF0aWMgc3NpemVfdFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbkBAIC01NzksNyArNjEyLDcgQEAgcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuIFx0XHRnb3RvIGVycjtcbiBcbi1cdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHtcbitcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpIHtcbiBcdFx0cmV0ICs9IHNjbnByaW50ZihrYnVmICsgcmV0LCBjb3VudCAtIHJldCxcbiBcdFx0XHRcIlBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuXCIsXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG5AQCAtNjMwLDEwICs2NjMsMTAgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGVsc2VcbiBcdFx0cHJfYWxlcnQoXCJwYWdlX293bmVyIHRyYWNrcyB0aGUgcGFnZSBhcyBmcmVlZFxcblwiKTtcbiBcbi1cdHByX2FsZXJ0KFwicGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1LCBmcmVlX3RzICVsbHVcXG5cIixcbitcdHByX2FsZXJ0KFwicGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1XFxuXCIsXG4gXHRcdCBwYWdlX293bmVyLVx1MDAzZW9yZGVyLCBtaWdyYXRldHlwZV9uYW1lc1ttdF0sIGdmcF9tYXNrLCBcdTAwMjZnZnBfbWFzayxcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlcGlkLCBwYWdlX293bmVyLVx1MDAzZXRnaWQsIHBhZ2Vfb3duZXItXHUwMDNlY29tbSxcbi1cdFx0IHBhZ2Vfb3duZXItXHUwMDNldHNfbnNlYywgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMpO1xuK1x0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjKTtcbiBcbiBcdGhhbmRsZSA9IFJFQURfT05DRShwYWdlX293bmVyLVx1MDAzZWhhbmRsZSk7XG4gXHRpZiAoIWhhbmRsZSlcbkBAIC02NDUsMTIgKzY3OCwxMyBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0aWYgKCFoYW5kbGUpIHtcbiBcdFx0cHJfYWxlcnQoXCJwYWdlX293bmVyIGZyZWUgc3RhY2sgdHJhY2UgbWlzc2luZ1xcblwiKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHByX2FsZXJ0KFwicGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgc3RhY2sgdHJhY2U6XFxuXCIsXG4tXHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCk7XG4rXHRcdHByX2FsZXJ0KFwicGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgdHMgJWxsdSBzdGFjayB0cmFjZTpcXG5cIixcbitcdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkLFxuK1x0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMpO1xuIFx0XHRzdGFja19kZXBvdF9wcmludChoYW5kbGUpO1xuIFx0fVxuIFxuLVx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSlcbitcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpXG4gXHRcdHByX2FsZXJ0KFwicGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cIixcbiBcdFx0XHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcbiBcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XG5AQCAtNjk3LDEzICs3MzEsOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0XHR9XG4gXG4gXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuLVx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdHBmbiArPSAoMVVMIFx1MDAzY1x1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xuK1x0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4gXG4gXHRcdHBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpO1xuIFx0XHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcbkBAIC03OTgsMjAgKzgyNyw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcbi1cdFx0XHQgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seVxuLVx0XHRcdCAqIGRhbmdlciBpcyB0aGF0IHdlIHNraXAgdG9vIG11Y2ggYW5kIHBvdGVudGlhbGx5IG1pc3Ncbi1cdFx0XHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cbi1cdFx0XHQgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRcdGlmIChvcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4rXHRcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtODI2LDcgKzg0Myw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcbiBcdFx0XHQvKiBGb3VuZCBlYXJseSBhbGxvY2F0ZWQgcGFnZSAqL1xuIFx0XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcbi1cdFx0XHRcdFx0XHQgICAtMSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cdTAwM2VwaWQsXG4rXHRcdFx0XHRcdFx0ICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuIFx0XHRcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNldGdpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdFx0XHRjb3VudCsrO1xuIGV4dF9wdXRfY29udGludWU6XG5AQCAtODg3LDcgKzkwNCw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxuIFx0cmV0dXJuIHN0YWNrO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7XG4gXG4gc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuQEAgLTkwNCw3ICs5MjEsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdG5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKFx1MDAyNnN0YWNrX3JlY29yZC1cdTAwM2Vjb3VudCkgLSAxO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyBcdTAwMjZcdTAwMjZcbi1cdCAgICAobnJfYmFzZV9wYWdlcyBcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFx1MDAzYyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCkpXG4rXHQgICAgKG5yX2Jhc2VfcGFnZXMgXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7XG5AQCAtOTI2LDE2ICs5NDMsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuIH1cbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfb3AgPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzdGFja19vcCA9IHtcbiBcdC5zdGFydFx0PSBzdGFja19zdGFydCxcbiBcdC5uZXh0XHQ9IHN0YWNrX25leHQsXG4gXHQuc3RvcFx0PSBzdGFja19zdG9wLFxuIFx0LnNob3dcdD0gc3RhY2tfcHJpbnRcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxuK1x0aW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXHUwMDI2c3RhY2tfb3AsXG4gXHRcdFx0XHQgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpO1xuIFxuIFx0aWYgKCFyZXQpIHtcbkBAIC05NDgsMjggKzk2NSwyNiBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHtcbi1cdC5vcGVuXHRcdD0gcGFnZV9vd25lcl9zdGFja19vcGVuLFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7XG4rXHQub3Blblx0XHQ9IHN0YWNrX29wZW4sXG4gXHQucmVhZFx0XHQ9IHNlcV9yZWFkLFxuIFx0Lmxsc2Vla1x0XHQ9IHNlcV9sc2VlayxcbiBcdC5yZWxlYXNlXHQ9IHNlcV9yZWxlYXNlX3ByaXZhdGUsXG4gfTtcbiBcbi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbitzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4ge1xuLVx0KnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7XG4rXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbitzdGF0aWMgaW50IHRocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiB7XG4tXHRXUklURV9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkLCB2YWwpO1xuK1x0V1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LFxuLVx0XHRcdFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgXCIlbGx1XCIpO1xuLVxuK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCBcdTAwMjZ0aHJlc2hvbGRfZ2V0LCBcdTAwMjZ0aHJlc2hvbGRfc2V0LCBcIiVsbHVcXG5cIik7XG4gXG4gc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcbiB7XG5AQCAtOTg1LDE3ICsxMDAwLDE3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwic2hvd19zdGFja3NcIiwgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuK1x0XHRcdCAgICAgXHUwMDI2c3RhY2tfZm9wcyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwic2hvd19oYW5kbGVzXCIsIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX1BBR0VTKSxcbi1cdFx0XHQgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2c3RhY2tfZm9wcyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwic2hvd19zdGFja3NfaGFuZGxlc1wiLCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX0hBTkRMRSksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4rXHRcdFx0ICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcImNvdW50X3RocmVzaG9sZFwiLCAwNjAwLCBkaXIsIE5VTEwsXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMpO1xuK1x0XHRcdCAgICBcdTAwMjZ0aHJlc2hvbGRfZm9wcyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gbGF0ZV9pbml0Y2FsbChwYWdlb3duZXJfaW5pdClcbmRpZmYgLS1naXQgYS9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5IGIvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weVxuaW5kZXggOGU3MTNhMDljZmU3OGYuLmVlYWJhZWVkNDM4YjJhIDEwMDY0NFxuLS0tIGEvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weVxuKysrIGIvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weVxuQEAgLTM0LDYgKzM0LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4gICAgIG1heF9wZm4gPSBOb25lXG4gICAgIHBfb3BzID0gTm9uZVxuICAgICBtaWdyYXRlX3JlYXNvbl9uYW1lcyA9IE5vbmVcbisgICAgbXJfbmV2ZXIgPSBOb25lXG4gXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmKTpcbiAgICAgICAgIHN1cGVyKER1bXBQYWdlT3duZXIsIHNlbGYpLl9faW5pdF9fKFwibHgtZHVtcC1wYWdlLW93bmVyXCIsIGdkYi5DT01NQU5EX1NVUFBPUlQpXG5AQCAtNjUsNiArNjYsNyBAQCBjbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcbiAgICAgICAgIHNlbGYubWF4X3BmbiA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoXCJtYXhfcGZuXCIpKVxuICAgICAgICAgc2VsZi5wYWdlX2V4dF9zaXplID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbChcInBhZ2VfZXh0X3NpemVcIikpXG4gICAgICAgICBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzID0gZ2RiLnBhcnNlX2FuZF9ldmFsKCdtaWdyYXRlX3JlYXNvbl9uYW1lcycpXG4rICAgICAgICBzZWxmLm1yX25ldmVyID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbCgnTVJfTkVWRVInKSlcbiBcbiAgICAgZGVmIHBhZ2VfZXh0X2ludmFsaWQoc2VsZiwgcGFnZV9leHQpOlxuICAgICAgICAgaWYgcGFnZV9leHQgPT0gZ2RiLlZhbHVlKDApOlxuQEAgLTEzOCw3ICsxNDAsNyBAQCBjbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcbiAgICAgICAgIGVsc2U6XG4gICAgICAgICAgICAgZ2RiLndyaXRlKCdwYWdlIGxhc3QgZnJlZSBzdGFjayB0cmFjZTpcXG4nKVxuICAgICAgICAgICAgIHN0YWNrZGVwb3Quc3RhY2tfZGVwb3RfcHJpbnQocGFnZV9vd25lcltcImZyZWVfaGFuZGxlXCJdKVxuLSAgICAgICAgaWYgcGFnZV9vd25lclsnbGFzdF9taWdyYXRlX3JlYXNvbiddICE9IC0xOlxuKyAgICAgICAgaWYgcGFnZV9vd25lclsnbGFzdF9taWdyYXRlX3JlYXNvbiddICE9IHNlbGYubXJfbmV2ZXI6XG4gICAgICAgICAgICAgZ2RiLndyaXRlKCdwYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xcbicgJSBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXJbJ2xhc3RfbWlncmF0ZV9yZWFzb24nXV0pXG4gXG4gICAgIGRlZiByZWFkX3BhZ2Vfb3duZXIoc2VsZik6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMjozOC42ODM2Nzk4M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Mjk4OTQ1ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYXJlIHN1aXRhYmxlIGZvciBmdXp6aW5nLiBUaGUgYWZmZWN0ZWQgZmlsZXMgYXJlOiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBgaW5jbHVkZS9saW51eC9taWdyYXRlLmhgLCBgaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaGAsIGBpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaGAsIGB0cmFjZS9ldmVudHMvbWlncmF0ZS5oYCwgYG1tL2h1Z2V0bGIuY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vcGFnZV9vd25lci5jYCwgYW5kIGBzY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5YC4gVGhhdCdzIGEgZGVjZW50IHNwcmVhZC5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgdGhlcmUncyBhIGdvb2QgYW1vdW50IG9mIHJlZmFjdG9yaW5nLiBQYXJhbWV0ZXIgc2lnbmF0dXJlcyBmb3IgZnVuY3Rpb25zIGxpa2UgYG1vdmVfaHVnZXRsYl9zdGF0ZWAsIGBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrYCwgYG1pZ3JhdGVfcGFnZXNgLCBhbmQgYF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uYCBhcmUgY2hhbmdpbmcgZnJvbSBgaW50IHJlYXNvbmAgdG8gYGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uYC4gVGhlIGBNUl9ORVZFUmAgdmFsdWUgaXMgYmVpbmcgYWRkZWQgdG8gdGhhdCBlbnVtLiBUcmFjZXBvaW50cyBhcmUgYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBlbnVtIGFzIHdlbGwuIFRoYXQncyBnb29kIHByYWN0aWNlLiBDbGVhbiB1cC5cblxuRGl2aW5nIGRlZXBlciBpbnRvIGBtbS9wYWdlX293bmVyLmNgLCB0aGVyZSBhcmUgc2V2ZXJhbCBjaGFuZ2VzOiByZXBsYWNpbmcgYC0xYCB3aXRoIGBNUl9ORVZFUmAsIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgc2tpcF9idWRkeV9wYWdlc2AsIGFuZCB1cGRhdGVzIHRvIGZ1bmN0aW9ucyBsaWtlIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgLCBgcmVhZF9wYWdlX293bmVyYCwgYGluaXRfcGFnZXNfaW5fem9uZWAsIGBwcmludF9wYWdlX293bmVyX21lbWNnYCwgYHByaW50X3BhZ2Vfb3duZXJgLCBhbmQgYF9fZHVtcF9wYWdlX293bmVyYC4gUGx1cywgc29tZSByZW5hbWluZyBvZiB2YXJpYWJsZXMuIFRoZSB1c2Ugb2YgYE1FTUNHX0RBVEFfS01FTWAgaW5zdGVhZCBvZiBgUGFnZU1lbWNnS21lbWAgaW4gYHByaW50X3BhZ2Vfb3duZXJfbWVtY2dgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIHRoYXQncyBsaWtlbHkgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBiZWluZyBoYW5kbGVkLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCBgUGFnZU1lbWNnS21lbWAgd2Fzbid0IGp1c3QgcmVtb3ZlZCBhbmQgcmVwbGFjZWQuXG5cblRoZSBrZXkgdGhpbmcgaXMgdGhpcyBgc2tpcF9idWRkeV9wYWdlc2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGZ1enppbmcgcmVsZXZhbmNlIGNvbWVzIGluLiBOb3csIGlzIGl0IHJlYWNoYWJsZSBhbmQgZnV6ei13b3J0aHk/XG5cbmBtbS9wYWdlX293bmVyLmNgIGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19QQUdFX09XTkVSYC4gT2theSwgc28gaXQncyBhIGRlYnVnIGZlYXR1cmUuIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgIGlzIHVzZWQgaW4gYC9wcm9jL3BhZ2V0eXBlaW5mb2AsIGFuZCBgcmVhZF9wYWdlX293bmVyYCBpcyB1c2VkIGZvciBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAsIGFuZCBgaW5pdF9wYWdlc19pbl96b25lYCBpcyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuXG5TbywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBNb3N0bHksIHRoZXNlIGNoYW5nZXMgc2VlbSBsaWtlIHJlZmFjdG9yaW5nIGFuZCBmaXhpbmcgc29tZSBkZWJ1Z2ZzIGFuZCBwcm9jZnMgb3V0cHV0LCBhbG9uZyB3aXRoIGFuIG9wdGltaXphdGlvbi9maXggZm9yIGJ1ZGR5IHBhZ2Ugc2tpcHBpbmcgaW4gcGFnZV9vd25lci4gVGhpcyBkZWJ1Z2dpbmcgY29kZSBpcyBleHBvc2VkIGluIHByb2MgYW5kIGRlYnVnZnMsIHNvIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gaXMgcG9zc2libGUuXG5cblRoYXQgYHNraXBfYnVkZHlfcGFnZXNgIGZ1bmN0aW9uIGxvZ2ljOlxuXG5gYGBjXG5zdGF0aWMgaW5saW5lIGJvb2wgc2tpcF9idWRkeV9wYWdlcyh1bnNpZ25lZCBsb25nICpwZm4sIHN0cnVjdCBwYWdlICpwYWdlKVxue1xuXHR1bnNpZ25lZCBsb25nIG9yZGVyO1xuXG5cdGlmICghUGFnZUJ1ZGR5KHBhZ2UpKVxuXHRcdHJldHVybiBmYWxzZTtcblxuXHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcblx0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpIHtcblx0XHR1bnNpZ25lZCBsb25nIG5ld19wZm4gPSAqcGZuICsgKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuXHRcdHVuc2lnbmVkIGxvbmcgYm91bmRhcnkgPSBBTElHTigqcGZuICsgMSwgTUFYX09SREVSX05SX1BBR0VTKTtcblxuXHRcdCpwZm4gPSBtaW4obmV3X3BmbiwgYm91bmRhcnkpIC0gMTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufVxuYGBgXG5cblRoaXMgKmNvdWxkKiBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgZXZlbiBhbiBpbmZpbml0ZSBsb29wIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgb3IgYC9wcm9jL3BhZ2V0eXBlaW5mb2AuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlIHdpdGhpbiBhIGRlYnVnIGZlYXR1cmUuIEl0J3MgYW4gaW1wb3J0YW50IGZpeC5cblxuT2gsIGFuZCBgc2tpcF9idWRkeV9wYWdlc2AgaXMgYWN0dWFsbHkgdXNlZCBpbiBgcmVhZF9wYWdlX293bmVyYCwgYSAqZmlsZSByZWFkKiBvcGVyYXRpb24uIFllcywgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEyOjUyLjk4MjYyODIwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc5ODk1NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9wYWdlX293bmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2Vfb3duZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX293bmVyLmM9NjkzPXN0YXRpYyBzc2l6ZV90XFxubW0vcGFnZV9vd25lci5jOjY5NDpyZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbm1tL3BhZ2Vfb3duZXIuYy02OTUte1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTg2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdlX293bmVyX2ZvcHMgPSB7XFxubW0vcGFnZV9vd25lci5jOjg2ODpcXHQucmVhZFxcdFxcdD0gcmVhZF9wYWdlX293bmVyLFxcbm1tL3BhZ2Vfb3duZXIuYy04NjktXFx0Lmxsc2Vla1xcdFxcdD0gbHNlZWtfcGFnZV9vd25lcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MTI6NTMuNDMwNjI0MDY5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzNjU5MjY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gUGFnZSBPd25lciBcdTAwMjYgUGFnZXR5cGVpbmZvKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhpcyBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgdHJpZ2dlciBzb21ldGhpbmcuIEludGVyZXN0aW5nLiBBbmQgaXQgbG9va3MgbGlrZSBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCBwbGF5cyBhIHJvbGUgaW4gYC9wcm9jL3BhZ2V0eXBlaW5mb2AuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBjb25uZWN0aW9uIGlzIHByZXR0eSBjbGVhci4gVGhlc2UgYXJlIGxpa2VseSByZWxhdGVkIHRvIHRyYWNraW5nIGFuZCByZXBvcnRpbmcgb24gbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBhZ2UgdHlwZXMsIHBhcnRpY3VsYXJseSBtaXhlZCBwYWdlcy4gTm93IEkgbmVlZCB0byBkaXZlIGludG8gYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAgc3BlY2lmaWNhbGx5LiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgZm9yIGRpc3BsYXlpbmcgdGhlIGNvdW50cyBvZiBtaXhlZCBwYWdlIHR5cGVzLCB3aGljaCBpcyBlc3NlbnRpYWwgaW5mb3JtYXRpb24gd2hlbiB5b3UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBmcmFnbWVudGF0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBpcyB1c2luZyBkaWZmZXJlbnQgcGFnZSBzaXplcy4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nIGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzE2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MTI6NTYuODY3MjE5MjczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDU5MzU5MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xOT1leHRlcm4gdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MjA6ZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0yMS1cXHRcXHRcXHRcXHRcXHRwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9NDQwPXN0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtNDU3LVxcbm1tL3BhZ2Vfb3duZXIuYzo0NTg6dm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbm1tL3BhZ2Vfb3duZXIuYy00NTktXFx0XFx0XFx0XFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxcbi0tXFxubW0vdm1zdGF0LmM9MTY4ND1zdGF0aWMgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnQoc3RydWN0IHNlcV9maWxlICptLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zdGF0LmMtMTY5OS1cXHR3YWxrX3pvbmVzX2luX25vZGUobSwgcGdkYXQsIHRydWUsIHRydWUsXFxubW0vdm1zdGF0LmM6MTcwMDpcXHRcXHRwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQpO1xcbm1tL3Ztc3RhdC5jLTE3MDEtI2VuZGlmIC8qIENPTkZJR19QQUdFX09XTkVSICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEyOjU5LjUxMzE2MjQ5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMDExNjc2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBgbW0vcGFnZV9vd25lci5jYCBDaGFuZ2VzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzLCBpdCBzZWVtcyBsaWtlIHRoZSBtb3N0IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMgYXJlIGhhcHBlbmluZyBpbiBgbW0vcGFnZV9vd25lci5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IGJ1ZGR5IHBhZ2VzIGFyZSBza2lwcGVkLiBUaGUgbW9kaWZpY2F0aW9ucyBpbiBgbW0vbWlncmF0ZS5jYCwgYG1tL2h1Z2V0bGIuY2AsIGFuZCBgaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oYCBhcmUgbW9zdGx5IHR5cGUgY2hhbmdlcyBhbmQgdHJhY2Vwb2ludCB1cGRhdGVzIOKAkyBwcm9iYWJseSBub3QgdGhlIHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcuIEFuZCB0aGUgYHNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlgIGNoYW5nZXMgYXJlIGp1c3QgZm9yIEdEQiBzY3JpcHRpbmcuXG5cbk15IGd1dCBzYXlzIHRoaXMgaXMgd29ydGggYSBmdXp6aW5nIGVmZm9ydC4gVGhlIGNvbW1pdCBtZXNzYWdlIGxpa2VseSBoaWdobGlnaHRzIGEgYnVnIGZpeCDigJMgcG90ZW50aWFsbHkgYSBmaXggZm9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGlzc3VlcyB3aXRoIGludmFsaWQgUEZOcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHBhZ2VzIGluIGBwYWdlX293bmVyYCBhbmQgYHBhZ2V0eXBlaW5mb2AuIFRoZSBgc2tpcF9idWRkeV9wYWdlc2AgZnVuY3Rpb24gaXMgbGlrZWx5IHRoZSBjcnV4IG9mIHRoZSBmaXgsIGFpbWluZyB0byBhZGRyZXNzIGEgc2l0dWF0aW9uIHdoZXJlIGBidWRkeV9vcmRlcl91bnNhZmVgIG1pZ2h0IHJldHVybiBhIGdhcmJhZ2Ugb3JkZXIsIGxlYWRpbmcgdG8gdW52YWxpZGF0ZWQgbWVtb3J5IGFjY2Vzcy5cblxuV2Ugc2hvdWxkIHRhcmdldCBmdXp6aW5nIGJ5IHJlYWRpbmcgZnJvbSBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgYW5kIGAvcHJvYy9wYWdldHlwZWluZm9gLiBUaGUgYFBBR0VfT1dORVJgIGNvbmZpZyBvcHRpb24gaXMgZXNzZW50aWFsLCBvZiBjb3Vyc2UuIEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgb2YgZm9jdXNpbmcgb24gYHJlYWRfcGFnZV9vd25lcmAsIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgLCBhbmQgYHNraXBfYnVkZHlfcGFnZXNgLiBCdXQgd2FpdCwgYHNraXBfYnVkZHlfcGFnZXNgIGlzICppbmxpbmUqISBUaGF0IGNvbXBsaWNhdGVzIHRoaW5ncywgc28gd2UgbmVlZCB0byBjb25jZW50cmF0ZSBvbiBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAgaW5zdGVhZC5cblxuSSBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbmFsIGNoYW5nZXMgSSdtIG1pc3NpbmcuIEFoLCBgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb25gIGlzIGp1c3QgYSB0eXBlIGNoYW5nZS4gVGhlbiwgYHByaW50X3BhZ2Vfb3duZXJfbWVtY2dgIGlzIGNoYW5naW5nIGBQYWdlTWVtY2dLbWVtKHBhZ2UpYCB0byBgKG1lbWNnX2RhdGEgXHUwMDI2IE1FTUNHX0RBVEFfS01FTSlgLiBIbW1tLCBJIG5lZWQgdG8gbG9vayBpbnRvIHRoYXQgYFBhZ2VNZW1jZ0ttZW1gIGJpdC4uLiBkaWQgaXQgZ2V0IHJlbW92ZWQgb3IgcmVuYW1lZD8gTGV0J3MgY2hlY2sgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzE5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEzOjA2LjgxNDMzMjIxMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI5MjIyNjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBhZ2VNZW1jZ0ttZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTUwNj1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNTEyLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjUxMzpzdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC01MTQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTA1OT1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA2My1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDY0OnN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKHN0cnVjdCBwYWdlICpwYWdlKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwNjUte1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTEzMTQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTEzMzAtXFxubW0vcGFnZV9hbGxvYy5jOjEzMzE6XFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXFx1MDAyNlxcdTAwMjYgUGFnZU1lbWNnS21lbShwYWdlKSlcXG5tbS9wYWdlX2FsbG9jLmMtMTMzMi1cXHRcXHRfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7XFxuLS1cXG5tbS9zbHViLmM9MjUwOD1ib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmMtMjUyMS1cXG5tbS9zbHViLmM6MjUyMjpcXHRcXHRpZiAoUGFnZU1lbWNnS21lbShwYWdlKSlcXG5tbS9zbHViLmMtMjUyMy1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MTM6MDkuNTQzNTY0NTY0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY0MzIwNDUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNwb3QgYSBmYW1pbGlhciBmYWNlOiBgUGFnZU1lbWNnS21lbWAuIEFoLCByaWdodCwgdGhleSd2ZSB1cGRhdGVkIGhvdyBpdCdzIGhhbmRsZWQsIG5vdyBpdCdzIHR1Y2tlZCBhd2F5IGluIGBtbS9wYWdlX293bmVyLmNgIGFuZCByZXByZXNlbnRlZCBhcyBgKG1lbWNnX2RhdGEgXHUwMDI2IE1FTUNHX0RBVEFfS01FTSlgLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQgbWUgc2VlLi4uIEkgc2VlIHRoZXkncmUgcmVhZGluZyBgbWVtY2dfZGF0YWAgbG9ja2xlc3NseTpcblxuYGBgY1xuXHRtZW1jZ19kYXRhID0gUkVBRF9PTkNFKHBhZ2UtXHUwMDNlbWVtY2dfZGF0YSk7XG5cdGlmICghbWVtY2dfZGF0YSlcblx0XHRnb3RvIG91dF91bmxvY2s7XG5cblx0bWVtY2cgPSBwYWdlX21lbWNnX2NoZWNrKHBhZ2UpO1xuYGBgXG5cblRoZW4gdGhleSdyZSBjaGVja2luZyBpdCB3aXRoIGEgYml0d2lzZSBBTkQgb3BlcmF0aW9uIC0gYChtZW1jZ19kYXRhIFx1MDAyNiBNRU1DR19EQVRBX0tNRU0pYC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCwgbWlub3IgYWRqdXN0bWVudC5cblxuQnV0IHRoZSBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBgc2tpcF9idWRkeV9wYWdlc2AuIEludGVyZXN0aW5nLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCdzIHNlZS4uLiBZZXAsIHRoaXMgYWRkcmVzc2VzIGEgYnVnIGluIHBhZ2UgaXRlcmF0aW9uLCB3aGljaCBJIHNlZSBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIGJ5IHJlYWRpbmcgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIG9yIGAvcHJvYy9wYWdldHlwZWluZm9gLiBHaXZlbiBpdCdzIHVzZXItYWNjZXNzaWJsZSBhbmQgZml4ZXMgYSBidWcsIGFic29sdXRlbHksIGZ1enppbmcgdGhpcyBpcyB0aGUgcmlnaHQgY2FsbC4gVGhlIHJpc2svcmV3YXJkIHJhdGlvIGlzIGRlZmluaXRlbHkgdGhlcmUuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBgQ09ORklHX1BBR0VfT1dORVJgIGlzIGVuYWJsZWQsIGp1c3QgdG8gYmUgc3VyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY0NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMzoxNy4xODY3NzIxNzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTY2MTk4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfT1dORVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxcbm1tL0tjb25maWcuZGVidWctMTA2LVxcdGJvb2wgXFxcIlRyYWNrIHBhZ2Ugb3duZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEzOjE5LjgwMzQwMTg5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ4NTE0ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIFBhZ2UgT3duZXIgQ29uZmlndXJhdGlvbiBhbmQgUnVudGltZSBSZWFjaGFiaWxpdHkqKlxuXG5SaWdodCwgc28gYFBBR0VfT1dORVJgLi4uIHRoYXQncyBvdXIga2V5IGNvbmZpZ3VyYXRpb24gcG9pbnQuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgYWZmZWN0cyB0aGUgc3lzdGVtLCBhbmQgcmlnaHQgbm93LCB0aGUgcHJpbWFyeSBzeW1ib2xzIGRyYXdpbmcgbXkgYXR0ZW50aW9uIGFyZSBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAuIFRoZXNlIGFyZSBsaWtlbHkgY3J1Y2lhbCBmb3IgYWNjZXNzaW5nIGFuZCBkaXNwbGF5aW5nIHBhZ2Ugb3duZXJzaGlwIGluZm9ybWF0aW9uLCB3aGljaCwgZ2l2ZW4gdGhlIGNvbnRleHQsIHByb2JhYmx5IG1lYW5zIHRyYWNraW5nIG1lbW9yeSBhbGxvY2F0aW9uLlxuXG5Ob3csIGhvbGQgb24uLi4gSSBzZWUgdGhhdCBgaW5pdF9wYWdlc19pbl96b25lYCBnZXRzIG1vZGlmaWVkIHRvby4gVGhhdCdzIGludGVyZXN0aW5nLCBiZWNhdXNlIHRoYXQncyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBpc24ndCB1c3VhbGx5IHNvbWV0aGluZyBJJ2QgaW1tZWRpYXRlbHkgYXNzb2NpYXRlIHdpdGggcnVudGltZSBiZWhhdmlvci4gVGhlIHF1ZXN0aW9uIG5vdyBpczogaXMgYGluaXRfcGFnZXNfaW5fem9uZWAgYWN0dWFsbHkgKnJlYWNoYWJsZSogZHVyaW5nIHJ1bnRpbWU/IEV2ZW4gdGhvdWdoIGl0J3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGNvdWxkIHNvbWV0aGluZyBsYXRlciBvbiBjYXVzZSBpdCB0byBiZSBleGVjdXRlZCBhZ2Fpbiwgb3IgaW50ZXJhY3Qgd2l0aCBpdHMgcmVzdWx0cz8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgcGF0aCBhbmQgc2VlIGlmIGl0J3MgcG90ZW50aWFsbHkgY2FsbGVkIGF0IHNvbWUgcG9pbnQsIG9yIGl0cyBpbml0aWFsIHN0YXRlIHVzZWQgYXQgcnVudGltZSBpbiBhbiB1bmV4cGVjdGVkIHdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMzoyNC4wNTE5MTk0MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTY4MzA0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5pdF9wYWdlc19pbl96b25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX293bmVyLmM9Mjk4PXZvaWQgX19yZXNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcilcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zMjYtXFx0XFx0ICogZWFybHlfaGFuZGxlIGlzIGJlaW5nIHNldCBhcyBhIGhhbmRsZSBmb3IgYWxsIHRob3NlXFxubW0vcGFnZV9vd25lci5jOjMyNzpcXHRcXHQgKiBlYXJseSBhbGxvY2F0ZWQgcGFnZXMuIFNlZSBpbml0X3BhZ2VzX2luX3pvbmUoKS5cXG5tbS9wYWdlX293bmVyLmMtMzI4LVxcdFxcdCAqIFNpbmNlIHRoZWlyIHJlZmNvdW50IGlzIG5vdCBiZWluZyBpbmNyZW1lbnRlZCBiZWNhdXNlXFxuLS1cXG5tbS9wYWdlX293bmVyLmM9Nzg2PXN0YXRpYyBsb2ZmX3QgbHNlZWtfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtODAwLVxcbm1tL3BhZ2Vfb3duZXIuYzo4MDE6c3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxcbm1tL3BhZ2Vfb3duZXIuYy04MDIte1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTg1OT1zdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTg2My1cXHRmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKVxcbm1tL3BhZ2Vfb3duZXIuYzo4NjQ6XFx0XFx0aW5pdF9wYWdlc19pbl96b25lKHpvbmUpO1xcbm1tL3BhZ2Vfb3duZXIuYy04NjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMzoyNi42MDg3NTQzODdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzNTk0NTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFnZSBPd25lciBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gYGluaXRfcGFnZXNfaW5fem9uZWAgaXMgZGVmaW5pdGVseSBhIGtlcm5lbC1sZXZlbCBmdW5jdGlvbiwgY2FsbGVkIHdheSBlYXJseSBkdXJpbmcgdGhlIGJvb3QgcHJvY2VzcyB2aWEgYGluaXRfZWFybHlfYWxsb2NhdGVkX3BhZ2VzYC4gTm8gdXNlciBzcGFjZSBpbnRlcmFjdGlvbiB0aGVyZS4gQnV0IGByZWFkX3BhZ2Vfb3duZXJgIGFuZCBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCwgdGhvc2UgYXJlIGFjY2Vzc2libGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB3b3JrLlxuXG5JIHNob3VsZCBjaGVjayB0aGUgc291cmNlIGZvciBgcmVhZF9wYWdlX293bmVyYCwgdGhhdCdzIGluIGBtbS9wYWdlX293bmVyLmNgLiBGcm9tIHdoYXQgSSBrbm93LCBpdCBhcHBlYXJzIHRoYXQgdGhpcyBpcyB0aGUgYC5yZWFkYCBvcGVyYXRpb24gZm9yIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYC4gVGhhdCBtYWtlcyBzZW5zZS4gQW5kIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgIHNob3dzIHVwIGluIGAvcHJvYy9wYWdldHlwZWluZm9gLlxuXG5Ob3csIEknbSB0aGlua2luZywgYXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcz8gSSBrbm93IHRoYXQgYFBBR0VfT1dORVJgIGRlcGVuZHMgb24gYERFQlVHX0tFUk5FTGAgYW5kIGBTVEFDS1RSQUNFX1NVUFBPUlRgLCBzbyBsZXQgbWUgdGFrZSBhIGxvb2sgYXQgYG1tL0tjb25maWcuZGVidWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlciBjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZCB0byB1c2UgdGhlc2UgZmVhdHVyZXMgcHJvcGVybHkgYW5kIHRoYXQgSSB1bmRlcnN0YW5kIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MTM6MzAuOTQ0NzAzNTAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcxNjgxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfT1dORVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTczPWNvbmZpZyBTTFVCX1JDVV9ERUJVR1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMDQtXFxubW0vS2NvbmZpZy5kZWJ1ZzoxMDU6Y29uZmlnIFBBR0VfT1dORVJcXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cXHRib29sIFxcXCJUcmFjayBwYWdlIG93bmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMzozMS4wOTE4Nzc3MDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNjkzNTYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBEZWJ1ZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIGRpZyBpbnRvIHRoZXNlIGRlYnVnIG9wdGlvbnM/IE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEwNS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgZ3JhbnVsYXIgZGVidWcgZmVhdHVyZXMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJJ20gYW50aWNpcGF0aW5nIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRldGVybWluZSBob3cgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGRlYnVnZ2luZyBpcyBoYW5kbGVkLCBlc3BlY2lhbGx5IHNpbmNlIHdlJ3JlIGxvb2tpbmcgYXQgdGhpbmdzIHRoYXQgYXJlIHR5cGljYWxseSBlbmFibGVkIGR1cmluZyBkZXZlbG9wbWVudCBvciBmb3IgdmVyeSBzcGVjaWZpYyB0cm91Ymxlc2hvb3RpbmcuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZmlsZSB3aWxsIG9mZmVyIGEgY2xlYXIgb3ZlcnZpZXcgb2YgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBkZXNjcmlwdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRlYnVnIGZlYXR1cmVzIGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MTM6MzQuMjk4ODE0OTA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdCAgVGhpcyBpcyBkZXNpZ25lZCBhcyBhIGRlYnVnZ2luZyBmZWF0dXJlLCBub3QgYSBzZWN1cml0eSBmZWF0dXJlLlxcbiAxMDE6XFx0XFx0ICBPYmplY3RzIGFyZSBzb21ldGltZXMgcmVjeWNsZWQgd2l0aG91dCBSQ1UgZGVsYXkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEwNDpcXHRcXG4gMTA1OlxcdGNvbmZpZyBQQUdFX09XTkVSXFxuIDEwNjpcXHRcXHRib29sIFxcXCJUcmFjayBwYWdlIG93bmVyXFxcIlxcbiAxMDc6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuIDEwODpcXHRcXHRzZWxlY3QgREVCVUdfRlNcXG4gMTA5OlxcdFxcdHNlbGVjdCBTVEFDS1RSQUNFXFxuIDExMDpcXHRcXHRzZWxlY3QgU1RBQ0tERVBPVFxcbiAxMTE6XFx0XFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXFxuIDExMjpcXHRcXHRoZWxwXFxuIDExMzpcXHRcXHQgIFRoaXMga2VlcHMgdHJhY2sgb2Ygd2hhdCBjYWxsIGNoYWluIGlzIHRoZSBvd25lciBvZiBhIHBhZ2UsIG1heVxcbiAxMTQ6XFx0XFx0ICBoZWxwIHRvIGZpbmQgYmFyZSBhbGxvY19wYWdlKHMpIGxlYWtzLiBFdmVuIGlmIHlvdSBpbmNsdWRlIHRoaXNcXG4gMTE1OlxcdFxcdCAgZmVhdHVyZSBvbiB5b3VyIGJ1aWxkLCBpdCBpcyBkaXNhYmxlZCBpbiBkZWZhdWx0LiBZb3Ugc2hvdWxkIHBhc3NcXG4gMTE2OlxcdFxcdCAgXFxcInBhZ2Vfb3duZXI9b25cXFwiIHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC4gRWF0c1xcbiAxMTc6XFx0XFx0ICBhIGZhaXIgYW1vdW50IG9mIG1lbW9yeSBpZiBlbmFibGVkLiBTZWUgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcXG4gMTE4OlxcdFxcdCAgZm9yIHVzZXItc3BhY2UgaGVscGVyLlxcbiAxMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEzOjM0LjI5ODg3NjYzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ3MzM3MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIGEgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSwgYW5kIHRoZSBpbml0aWFsIG5vdGUgc2F5cywgXCJZb3Ugc2hvdWxkIHBhc3MgJ3BhZ2Vfb3duZXI9b24nIHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC5cIiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gSSBrbm93IHN5emthbGxlciAqdXN1YWxseSogaGFuZGxlcyB0aGF0IGF1dG9tYXRpY2FsbHkgaWYgYENPTkZJR19QQUdFX09XTkVSYCBpcyBzZXQuIEhvd2V2ZXIsIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCBvbmx5ICptaWdodCogZG8gdGhhdC4gU28sIHRvIGJlIHNhZmUsIHdlIGNhbiBqdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSBgUEFHRV9PV05FUmAgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IHNob3VsZCBiZSB0aGUgY2xlYW5lc3Qgd2F5IHRvIGRvIHRoaXMuIFdhaXQsIHN5emthbGxlciBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgcGFzcyBib290IHBhcmFtZXRlcnMgYmFzZWQgb24gY29uZmlncyB1bmxlc3MgY29uZmlndXJlZCBpbiB0aGUgc3l6a2FsbGVyIG1hbmFnZXIsIHJpZ2h0PyBUaGF0J3MgcmlnaHQsIGFuZCB3ZSB3ZXJlIGFza2VkIHRvIHByb3ZpZGUgYEVuYWJsZUNvbmZpZ3NgLiBGaW5lLCBzbyB0aGF0J3MgaGFuZGxlZC4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gTm8sIGp1c3QgYFBBR0VfT1dORVJgIGlzIG1lbnRpb25lZC5cblxuQnV0IHdhaXQsIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYG1tL21pZ3JhdGUuY2AgYW5kIGBtbS9odWdldGxiLmNgLiBPaCwgdGhvc2UgYXJlIGp1c3QgbWlub3IsIHB1cmVseSBkZWNvcmF0aXZlLCByZWZhY3RvcmluZyBjaGFuZ2VzLiBUaGV5J3JlIGNoYW5naW5nIGBpbnQgcmVhc29uYCB0byBgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb25gLiBEb2Vzbid0IGFmZmVjdCBhbnl0aGluZyBmdW5jdGlvbmFsbHkuIFRoZSAqcmVhbCogZnVuY3Rpb25hbCBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGBza2lwX2J1ZGR5X3BhZ2VzYCBpbiBgbW0vcGFnZV9vd25lci5jYC4gTm93LCBgc2tpcF9idWRkeV9wYWdlc2AgaXMgaW50ZXJlc3RpbmcuIEl0ICpwcmV2ZW50cyogcmVhZGluZyBhIGdhcmJhZ2Ugb3JkZXIgYW5kIHNraXBwaW5nIGludG8gYW4gdW52YWxpZGF0ZWQgbWVtb3J5IHNlY3Rpb24uIFRoYXQgc291bmRzIGxpa2UgYSBsZWdpdGltYXRlIGJ1ZyBmaXguIEEgdmVyeSBpbXBvcnRhbnQgb25lLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGlmIGBza2lwX2J1ZGR5X3BhZ2VzYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGtlcm5lbCBiZXNpZGVzIGBtbS9wYWdlX293bmVyLmNgLiBOb3BlLCBvbmx5IHRoZXJlLiBJdCdzIGxvY2FsaXplZCB0byB0aGF0IG1vZHVsZSwgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUgY2hlY2sgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAsIGp1c3QgdG8gbWFrZSBzdXJlIG5vIHN1YnRsZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEzOjQxLjM0NjIxNjgyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTMxNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXN0YXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXN0YXQuYz0xNjg0PXN0YXRpYyB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXN0YXQuYy0xNjk5LVxcdHdhbGtfem9uZXNfaW5fbm9kZShtLCBwZ2RhdCwgdHJ1ZSwgdHJ1ZSxcXG5tbS92bXN0YXQuYzoxNzAwOlxcdFxcdHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludCk7XFxubW0vdm1zdGF0LmMtMTcwMS0jZW5kaWYgLyogQ09ORklHX1BBR0VfT1dORVIgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MTM6NDEuNTA0MTU0MjgxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDk2NjcyNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBwYWdlX293bmVyIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBhZmZlY3RzIGBtbS92bXN0YXQuY2AgdW5kZXIgYENPTkZJR19QQUdFX09XTkVSYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlcmUgYXJlIHR3byBwcmltYXJ5IGZ1bmN0aW9uYWwgY2hhbmdlczpcblxuMS4gIFRoZSBgc2tpcF9idWRkeV9wYWdlc2AgbG9naWMgaXMgbW9kaWZpZWQgd2l0aGluIGByZWFkX3BhZ2Vfb3duZXJgIGFuZCBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YC5cbjIuICBgcHJpbnRfcGFnZV9vd25lcl9tZW1jZ2Agbm93IHVzZXMgYG1lbWNnX2RhdGEgXHUwMDI2IE1FTUNHX0RBVEFfS01FTWAgaW5zdGVhZCBvZiB0aGUgYFBhZ2VNZW1jZ0ttZW0ocGFnZSlgIG1hY3JvLlxuXG5Cb3RoIG9mIHRoZXNlIGNoYW5nZXMgYXJlIGxvY2F0ZWQgd2l0aGluIGBtbS9wYWdlX293bmVyLmNgIGFuZCBhcmUgZ3VhcmRlZCBieSBgQ09ORklHX1BBR0VfT1dORVJgLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZSBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAuIExldCdzIGNvbmZpcm0gaWYgZWl0aGVyIG9mIHRoZXNlIGFyZSBpbiBhIGhvdCBwYXRoLiBJdCBsb29rcyBsaWtlIGByZWFkX3BhZ2Vfb3duZXJgIGlzIHBhcnQgb2YgYSBkZWJ1Z2ZzIHJlYWQgb3BlcmF0aW9uLCBhbmQgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAgaXMgYSBwcm9jZnMgcmVhZCBvcGVyYXRpb24uIFRoYXQgbWVhbnMgbmVpdGhlciBhcmUgcGVyZm9ybWFuY2UgY3JpdGljYWwsIHNvIHRoZSBjaGFuZ2UgaXNuJ3QgYWJvdXQgcGVyZm9ybWFuY2UsIGJ1dCBzYWZldHkuXG5cbkkgc2hvdWxkIGNoZWNrIGlmIGBQQUdFX09XTkVSYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gc3l6Ym90LiBJdCB1c3VhbGx5IGVuYWJsZXMgYSBsb3Qgb2YgZGVidWcgY29uZmlncywgc28gaXQncyBsaWtlbHkgYWxyZWFkeSBvbiwgYnV0IGl0J3Mgc3RpbGwgZ29vZCBwcmFjdGljZSB0byBleHBsaWNpdGx5IGxpc3QgaXQgaW4gYEVuYWJsZUNvbmZpZ3NgLlxuXG5MZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBza2lwX2J1ZGR5X3BhZ2VzYCBjaGFuZ2UuIEkgc2VlIHRoZSBjb2RlIHByZXZlbnRzIGBwZm5gIGZyb20gYWR2YW5jaW5nIHRvbyBmYXIgaWYgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgcmV0dXJucyBhIHBvdGVudGlhbGx5IGJhZCB2YWx1ZS4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJvdGVjdHMgYWdhaW5zdCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBvciBpbmZpbml0ZSBsb29wcy4gVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCBjYW4gbGVhZCB0byB2ZXJ5IGludGVyZXN0aW5nIGJlaGF2aW9ycyB3aXRoIGJ1ZGR5IGFsbG9jYXRvciBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuXG5cbk5vdyBsZXQncyByZXZpZXcgdGhlIGBwcmludF9wYWdlX293bmVyX21lbWNnYCBjaGFuZ2UuIFRoaXMgc2VlbXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgaW1wYWN0cyBob3cgdGhlIFwidmlhIG9iamNnXCIgc3RyaW5nIGlzIHByaW50ZWQuIEl0IGF2b2lkcyBjYWxsaW5nIGBQYWdlTWVtY2dLbWVtKHBhZ2UpYCwgd2hpY2ggY291bGQgYmUgdW5zYWZlIG9yIGluYWNjdXJhdGUgaW4gdGhlIG5ldyBjb250ZXh0LlxuXG5PdmVyYWxsLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBwYXRjaCBJIHNob3VsZCBwcmlvcml0aXplIGZvciBmdXp6aW5nLiBJdCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gcHJvdGVjdCB0aGUgYnVkZHkgYWxsb2NhdG9yIGFuZCBwb3RlbnRpYWxseSBhbHRlcnMgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIGRlYnVnZ2luZyB0b29scy5cblxuU28sIGhlcmUncyB3aGF0IEknbSBnb2luZyB0byBwcmVwYXJlIGZvciB0aGUgcmVzdWx0czpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IGB0cnVlYFxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJyZWFkX3BhZ2Vfb3duZXJcIiwgXCJwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRcIl1gXG4qICAgKipFbmFibGVDb25maWdzKio6IGBbXCJQQUdFX09XTkVSXCJdYFxuKiAgICoqUmVhc29uaW5nKio6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgbW0vcGFnZV9vd25lci5jYCB0byBzYWZlbHkgc2tpcCBidWRkeSBwYWdlcyBkdXJpbmcgaXRlcmF0aW9uLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIFBGTiBhY2Nlc3NlcyB3aGVuIHJlYWRpbmcgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIG9yIGAvcHJvYy9wYWdldHlwZWluZm9gLiBJdCBhbHNvIGZpeGVzIG1lbWNnIGRhdGEgcmVhZGluZyBpbiBwYWdlIG93bmVyLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTA5LCJPdXRwdXRUb2tlbnMiOjExOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMzo1My42MDA4Mjk5NTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgzOTAyMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfT1dORVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWFkX3BhZ2Vfb3duZXJcIixcbiAgICBcInBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtbS9wYWdlX293bmVyLmMgdG8gc2FmZWx5IHNraXAgYnVkZHkgcGFnZXMgZHVyaW5nIGl0ZXJhdGlvbiwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBQRk4gYWNjZXNzZXMgd2hlbiByZWFkaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgb3IgL3Byb2MvcGFnZXR5cGVpbmZvLiBJdCBhbHNvIGZpeGVzIG1lbWNnIGRhdGEgcmVhZGluZyBpbiBwYWdlIG93bmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfT1dORVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWFkX3BhZ2Vfb3duZXJcIixcbiAgICBcInBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtbS9wYWdlX293bmVyLmMgdG8gc2FmZWx5IHNraXAgYnVkZHkgcGFnZXMgZHVyaW5nIGl0ZXJhdGlvbiwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBQRk4gYWNjZXNzZXMgd2hlbiByZWFkaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgb3IgL3Byb2MvcGFnZXR5cGVpbmZvLiBJdCBhbHNvIGZpeGVzIG1lbWNnIGRhdGEgcmVhZGluZyBpbiBwYWdlIG93bmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowtzd66[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 10:57:39 +0000 UTC FinishedAt: 2026-07-01 11:13:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "13105b584a18fa6f52f0f89e55feba52eb0e6a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "13105b584a18fa6f52f0f89e55feba52eb0e6a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER" ], "series_id": "5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "read_page_owner", "pagetypeinfo_showmixedcount_print" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWFkX3BhZ2Vfb3duZXImIzM0OywKICAgICYjMzQ7cGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtbS9wYWdlX293bmVyLmMgdG8gc2FmZWx5IHNraXAgYnVkZHkgcGFnZXMgZHVyaW5nIGl0ZXJhdGlvbiwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBQRk4gYWNjZXNzZXMgd2hlbiByZWFkaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgb3IgL3Byb2MvcGFnZXR5cGVpbmZvLiBJdCBhbHNvIGZpeGVzIG1lbWNnIGRhdGEgcmVhZGluZyBpbiBwYWdlIG93bmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2Q0MzZiZjY5MGVhMGU2MGMzNmE2Y2VlOWIzMjM1ZmMyYmJlOGM5OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTE6MTI6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLmZhODI4MjMyZGZjYzE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTU0LDcgJiM0MzsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuIGJvb2wgZm9saW9faXNvbGF0ZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuIGludCBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sICpodWdldGxiLCBib29sIHVucG9pc29uKTtcbiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pO1xuJiM0Mzt2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4mIzQzO1x0XHRcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTtcbiB2b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBzdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGU7XG4gdTMyIGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpZHgpO1xuQEAgLTQyNCw3ICYjNDM7NDI1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gfVxuIFxuQEAgLTk1Niw3ICYjNDM7OTU3LDcgQEAgc3RhdGljIGlubGluZSBnZnBfdCBodGxiX21vZGlmeV9hbGxvY19tYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrKVxuIFx0cmV0dXJuIG1vZGlmaWVkX21hc2s7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGludCByZWFzb24pXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdGJvb2wgYWxsb3dlZF9mYWxsYmFjayA9IGZhbHNlO1xuIFxuQEAgLTEyMzgsNyAmIzQzOzEyMzksNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXG5pbmRleCBkNWFmMmI3ZjU3N2IzMy4uMWY4MzkyNDYxNWQ2ZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcbkBAIC01Nyw3ICYjNDM7NTcsOCBAQCB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKTtcbiBpbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXG4gXHRcdHN0cnVjdCBmb2xpbyAqc3JjLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKTtcbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLFxuLVx0XHQgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdCAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxuJiM0MztcdFx0ICBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0ICB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpO1xuIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKTtcbiBib29sIGlzb2xhdGVfbW92YWJsZV9vcHNfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaXNvbGF0ZV9tb2RlX3QgbW9kZSk7XG5AQCAtNzcsNyAmIzQzOzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7XG4gc3RhdGljIGlubGluZSB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LFxuIFx0XHRmcmVlX2ZvbGlvX3QgZnJlZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiYjNDM7XHRcdHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiBcdHsgcmV0dXJuIC1FTk9TWVM7IH1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYyxcbiBcdFx0dW5zaWduZWQgbG9uZyBwcml2YXRlKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXG5pbmRleCAyNjVjNDMyOGIzNmFkNS4uMDUxMDJkNGQyNDkwZTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXG5AQCAtMjUsNiAmIzQzOzI1LDcgQEAgZW51bSBtaWdyYXRlX3JlYXNvbiB7XG4gXHRNUl9MT05HVEVSTV9QSU4sXG4gXHRNUl9ERU1PVElPTixcbiBcdE1SX0RBTU9OLFxuJiM0MztcdE1SX05FVkVSLFx0XHQvKiBwYWdlIGhhcyBuZXZlciBiZWVuIG1pZ3JhdGVkICovXG4gXHRNUl9UWVBFU1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxuaW5kZXggMzMyODM1N2Y2ZGJhNzIuLjlmZTUxZGZjY2YyNjg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gI2RlZmluZSBfX0xJTlVYX1BBR0VfT1dORVJfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2p1bXBfbGFiZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlX21vZGUuaFx1MDAzZVxuIFxuICNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBwYWdlX293bmVyX2luaXRlZDtcbkBAIC0xNCw3ICYjNDM7MTUsNyBAQCBleHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxuIGV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbiBcdFx0XHRpbnQgbmV3X29yZGVyKTtcbiBleHRlcm4gdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpO1xuLWV4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pO1xuJiM0MztleHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7XG4gZXh0ZXJuIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIGV4dGVybiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0XHRcdHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKTtcbkBAIC00Myw3ICYjNDM7NDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbiBcdFx0X19mb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBvbGQpO1xuIH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuIFx0XHRfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihmb2xpbywgcmVhc29uKTtcbkBAIC02OCw3ICYjNDM7NjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcbmluZGV4IGNkMDFkZDdiMzY0MGRjLi4xNWVlMmVmMjAxYjVmOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXG5AQCAtMjMsNyAmIzQzOzIzLDggQEBcbiBcdEVNKCBNUl9DT05USUdfUkFOR0UsXHRcJiMzNDtjb250aWdfcmFuZ2VcJiMzNDspXHRcdFx0XFxcbiBcdEVNKCBNUl9MT05HVEVSTV9QSU4sXHRcJiMzNDtsb25ndGVybV9waW5cJiMzNDspXHRcdFx0XFxcbiBcdEVNKCBNUl9ERU1PVElPTixcdFwmIzM0O2RlbW90aW9uXCYjMzQ7KVx0XHRcdFxcXG4tXHRFTWUoTVJfREFNT04sXHRcdFwmIzM0O2RhbW9uXCYjMzQ7KVxuJiM0MztcdEVNKCBNUl9EQU1PTixcdFx0XCYjMzQ7ZGFtb25cJiMzNDspXHRcdFx0XFxcbiYjNDM7XHRFTWUoTVJfTkVWRVIsXHRcdFwmIzM0O25ldmVyX21pZ3JhdGVkXCYjMzQ7KVxuIFxuIC8qXG4gICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZVxuQEAgLTUxLDcgJiM0Mzs1Miw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXG4gXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHN1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyBmYWlsZWQsXG4gXHRcdCB1bnNpZ25lZCBsb25nIHRocF9zdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgdGhwX2ZhaWxlZCxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3NwbGl0LCB1bnNpZ25lZCBsb25nIGxhcmdlX2ZvbGlvX3NwbGl0LFxuLVx0XHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXG4mIzQzO1x0XHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLFxuIFxuIFx0VFBfQVJHUyhzdWNjZWVkZWQsIGZhaWxlZCwgdGhwX3N1Y2NlZWRlZCwgdGhwX2ZhaWxlZCxcbiBcdFx0dGhwX3NwbGl0LCBsYXJnZV9mb2xpb19zcGxpdCwgbW9kZSwgcmVhc29uKSxcbkBAIC02NCw3ICYjNDM7NjUsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0dGhwX3NwbGl0KVxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0bGFyZ2VfZm9saW9fc3BsaXQpXG4gXHRcdF9fZmllbGQoXHRlbnVtIG1pZ3JhdGVfbW9kZSxcdG1vZGUpXG4tXHRcdF9fZmllbGQoXHRpbnQsXHRcdFx0cmVhc29uKVxuJiM0MztcdFx0X19maWVsZChcdGVudW0gbWlncmF0ZV9yZWFzb24sXHRyZWFzb24pXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtOTEsMTMgJiM0Mzs5MiwxMyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuIFxuIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXNfc3RhcnQsXG4gXG4tXHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcbiYjNDM7XHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXG4gXG4gXHRUUF9BUkdTKG1vZGUsIHJlYXNvbiksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9tb2RlLCBtb2RlKVxuLVx0XHRfX2ZpZWxkKGludCwgcmVhc29uKVxuJiM0MztcdFx0X19maWVsZChlbnVtIG1pZ3JhdGVfcmVhc29uLCByZWFzb24pXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uMTc3MzJkMWZkYzVlZmQgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTcxODIsNyAmIzQzOzcxODIsOCBAQCB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbiB9XG4gXG4tdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxuJiM0Mzt2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4mIzQzO1x0XHRcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li40OWUxMGZlZWIwOTRmMCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jXG5AQCAtMTQ2OSw3ICYjNDM7MTQ2OSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4gc3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbiBcdFx0c3RydWN0IGZvbGlvICpzcmMsIGludCBmb3JjZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSxcbi1cdFx0aW50IHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KVxuJiM0MztcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmRzdDtcbiBcdGludCByYyA9IC1FQUdBSU47XG5AQCAtMTYyNiw3ICYjNDM7MTYyNiw3IEBAIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcbiAgKi9cbiBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0XHQgICAgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXG4gXHRcdFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MpXG4ge1xuQEAgLTE3MTYsNyAmIzQzOzE3MTYsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc19tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmRzdF9mb2xpb3MsXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxuIFx0XHRpbnQgKnJldHJ5LCBpbnQgKnRocF9yZXRyeSwgaW50ICpucl9mYWlsZWQsXG5AQCAtMTc5OSw3ICYjNDM7MTc5OSw3IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcbiAgKi9cbiBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcbiBcdFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXG4tXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcbiB7XG5AQCAtMjAxMSw3ICYjNDM7MjAxMSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFxuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMpXG4ge1xuQEAgLTIwODgsNyAmIzQzOzIwODgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuICAqL1xuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiYjNDM7XHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4ge1xuIFx0aW50IHJjLCByY19nYXRoZXI7XG4gXHRpbnQgbnJfcGFnZXM7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXG5pbmRleCAyZGRkY2I2NTEwYWExZS4uZWZiZjY3ZDU0ZWUyNjYgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTMzOSwxMyAmIzQzOzMzOSwxMyBAQCBub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLFxuIFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIFxuIFx0aGFuZGxlID0gc2F2ZV9zdGFjayhnZnBfbWFzayk7XG4tXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsXG4mIzQzO1x0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1SX05FVkVSLFxuIFx0XHRcdFx0ICAgdHNfbnNlYywgY3VycmVudC1cdTAwM2VwaWQsIGN1cnJlbnQtXHUwMDNldGdpZCxcbiBcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNlY29tbSk7XG4gXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbiB9XG4gXG4tdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuJiM0Mzt2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbkBAIC00MjIsNiAmIzQzOzQyMiwzOSBAQCB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ2hlY2sgaWYgYSBwYWdlIGlzIGEgYnVkZHkgcGFnZSBhbmQgYWR2YW5jZSBAcGZuIHBhc3QgdGhlIGVudGlyZSBidWRkeSBibG9jay5cbiYjNDM7ICogVGhpcyBzYWZlbHkgcmVhZHMgdGhlIGJ1ZGR5IG9yZGVyIHdpdGhvdXQgdGhlIHpvbmUgbG9jaywgd2hpY2ggbWF5IGNhdXNlIHVzXG4mIzQzOyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyXG4mIzQzOyAqIGl0ZXJhdGlvbiBwdXJwb3Nlcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGxvY2tsZXNzIHJlYWQgb2YgYnVkZHlfb3JkZXJfdW5zYWZlKCkgY2FuIGFsc28gcmV0dXJuIGEgZ2FyYmFnZSBvcmRlciBpZlxuJiM0MzsgKiB0aGUgcGFnZSBpcyBjb25jdXJyZW50bHkgYWxsb2NhdGVkIGFuZCBQYWdlQnVkZHkgaXMgY2xlYXJlZCBiZXR3ZWVuIHRoZSBjaGVja1xuJiM0MzsgKiBhbmQgdGhlIHJlYWQuIENsYW1wIHRoZSBhZHZhbmNlIGF0IHRoZSBuZXh0IE1BWF9PUkRFUl9OUl9QQUdFUyBib3VuZGFyeSBzb1xuJiM0MzsgKiB0aGF0IGEgYm9ndXMgb3JkZXIgY2Fubm90IGNhcnJ5IEBwZm4gaW50byBhbiB1bnZhbGlkYXRlZCBtZW1vcnkgc2VjdGlvbixcbiYjNDM7ICogd2hpY2ggd291bGQgYnJlYWsgY2FsbGVycyB0aGF0IHJlbHkgb24gYm91bmRhcnktYWxpZ25lZCBwZm5fdmFsaWQoKSBjaGVja3MuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcGFnZSB3YXMgc2tpcHBlZCAoY2FsbGVyIHNob3VsZCBjb250aW51ZSBpdHMgbG9vcCksXG4mIzQzOyAqICAgICAgICAgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgbm90IGEgYnVkZHkgcGFnZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCBub3JtYWxseS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG9yZGVyO1xuJiM0MztcbiYjNDM7XHRpZiAoIVBhZ2VCdWRkeShwYWdlKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0b3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4mIzQzO1x0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbmV3X3BmbiA9ICpwZm4gJiM0MzsgKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBib3VuZGFyeSA9IEFMSUdOKCpwZm4gJiM0MzsgMSwgTUFYX09SREVSX05SX1BBR0VTKTtcbiYjNDM7XG4mIzQzO1x0XHQqcGZuID0gbWluKG5ld19wZm4sIGJvdW5kYXJ5KSAtIDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0XHQgICAgICAgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuQEAgLTQ2MSwxNCAmIzQzOzQ5NCw4IEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyO1xuLVxuLVx0XHRcdFx0ZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4tXHRcdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICYjNDM7PSAoMVVMIFx1MDAzY1x1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xuJiM0MztcdFx0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC01MDUsMTMgJiM0Mzs1MzIsMTMgQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0c2VxX3B1dGMobSwgJiMzOTtcXG4mIzM5Oyk7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHXG4gLypcbiAgKiBMb29raW5nIGZvciBtZW1jZyBpbmZvcm1hdGlvbiBhbmQgcHJpbnQgaXQgb3V0XG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0Ym9vbCBvbmxpbmU7XG5AQCAtNTM0LDE1ICYjNDM7NTYxLDIxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIFx0Y2dyb3VwX25hbWUobWVtY2ctXHUwMDNlY3NzLmNncm91cCwgbmFtZSwgc2l6ZW9mKG5hbWUpKTtcbiBcdHJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCxcbiBcdFx0XHRcJiMzNDtDaGFyZ2VkICVzdG8gJXNtZW1jZyAlc1xcblwmIzM0Oyxcbi1cdFx0XHRQYWdlTWVtY2dLbWVtKHBhZ2UpID8gXCYjMzQ7KHZpYSBvYmpjZykgXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LFxuJiM0MztcdFx0XHQobWVtY2dfZGF0YSBcdTAwMjYgTUVNQ0dfREFUQV9LTUVNKSA/IFwmIzM0Oyh2aWEgb2JqY2cpIFwmIzM0OyA6IFwmIzM0O1wmIzM0OyxcbiBcdFx0XHRvbmxpbmUgPyBcJiMzNDtcJiMzNDsgOiBcJiMzNDtvZmZsaW5lIFwmIzM0OyxcbiBcdFx0XHRuYW1lKTtcbiBvdXRfdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiBcbiBzdGF0aWMgc3NpemVfdFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbkBAIC01NzksNyAmIzQzOzYxMiw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdGlmIChyZXQgXHUwMDNlPSBjb3VudClcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7XG4mIzQzO1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUikge1xuIFx0XHRyZXQgJiM0Mzs9IHNjbnByaW50ZihrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsXG4gXHRcdFx0XCYjMzQ7UGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cJiMzNDssXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG5AQCAtNjMwLDEwICYjNDM7NjYzLDEwIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRlbHNlXG4gXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXFxuXCYjMzQ7KTtcbiBcbi1cdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSwgZnJlZV90cyAlbGx1XFxuXCYjMzQ7LFxuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdVxcblwmIzM0OyxcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssIFx1MDAyNmdmcF9tYXNrLFxuIFx0XHQgcGFnZV9vd25lci1cdTAwM2VwaWQsIHBhZ2Vfb3duZXItXHUwMDNldGdpZCwgcGFnZV9vd25lci1cdTAwM2Vjb21tLFxuLVx0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4mIzQzO1x0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjKTtcbiBcbiBcdGhhbmRsZSA9IFJFQURfT05DRShwYWdlX293bmVyLVx1MDAzZWhhbmRsZSk7XG4gXHRpZiAoIWhhbmRsZSlcbkBAIC02NDUsMTIgJiM0Mzs2NzgsMTMgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmICghaGFuZGxlKSB7XG4gXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXFxuXCYjMzQ7KTtcbiBcdH0gZWxzZSB7XG4tXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHN0YWNrIHRyYWNlOlxcblwmIzM0Oyxcbi1cdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkKTtcbiYjNDM7XHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHRzICVsbHUgc3RhY2sgdHJhY2U6XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkLFxuJiM0MztcdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90c19uc2VjKTtcbiBcdFx0c3RhY2tfZGVwb3RfcHJpbnQoaGFuZGxlKTtcbiBcdH1cbiBcbi1cdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpXG4mIzQzO1x0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUilcbiBcdFx0cHJfYWxlcnQoXCYjMzQ7cGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cJiMzNDssXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG4gXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xuQEAgLTY5NywxMyAmIzQzOzczMSw4IEBAIHJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4gXHRcdH1cbiBcbiBcdFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4tXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVxuLVx0XHRcdGlmIChmcmVlcGFnZV9vcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0cGZuICYjNDM7PSAoMVVMIFx1MDAzY1x1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xuJiM0MztcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuIFxuIFx0XHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcbiBcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG5AQCAtNzk4LDIwICYjNDM7ODI3LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxuIFx0XHRcdGlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS1cdTAwM2Vsb2NrLCBiZSBhIGxpdHRsZVxuLVx0XHRcdCAqIGNhcmVmdWwgd2hlbiByZWFkaW5nIGJ1ZGR5IHBhZ2Ugb3JkZXIuIFRoZSBvbmx5XG4tXHRcdFx0ICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzc1xuLVx0XHRcdCAqIHNvbWUgZWFybHkgYWxsb2NhdGVkIHBhZ2VzLCB3aGljaCBpcyBiZXR0ZXIgdGhhblxuLVx0XHRcdCAqIGhlYXZ5IGxvY2sgY29udGVudGlvbi5cbi1cdFx0XHQgKi9cbi1cdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVxuLVx0XHRcdFx0aWYgKG9yZGVyIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0XHRwZm4gJiM0Mzs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4mIzQzO1x0XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4gXG4gXHRcdFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTgyNiw3ICYjNDM7ODQzLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxuIFxuIFx0XHRcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXG4gXHRcdFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgZWFybHlfaGFuZGxlLCAwLCAwLFxuLVx0XHRcdFx0XHRcdCAgIC0xLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LVx1MDAzZXBpZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuIFx0XHRcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNldGdpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdFx0XHRjb3VudCYjNDM7JiM0Mzs7XG4gZXh0X3B1dF9jb250aW51ZTpcbkBAIC04ODcsNyAmIzQzOzkwNCw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxuIFx0cmV0dXJuIHN0YWNrO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZXNfdGhyZXNob2xkO1xuIFxuIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbkBAIC05MDQsNyAmIzQzOzkyMSw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0bnJfYmFzZV9wYWdlcyA9IHJlZmNvdW50X3JlYWQoXHUwMDI2c3RhY2tfcmVjb3JkLVx1MDAzZWNvdW50KSAtIDE7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1BBR0VTIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChucl9iYXNlX3BhZ2VzIFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXHUwMDNjIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSlcbiYjNDM7XHQgICAgKG5yX2Jhc2VfcGFnZXMgXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7XG5AQCAtOTI2LDE2ICYjNDM7OTQzLDE2IEBAIHN0YXRpYyB2b2lkIHN0YWNrX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0ge1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0ge1xuIFx0LnN0YXJ0XHQ9IHN0YWNrX3N0YXJ0LFxuIFx0Lm5leHRcdD0gc3RhY2tfbmV4dCxcbiBcdC5zdG9wXHQ9IHN0YWNrX3N0b3AsXG4gXHQuc2hvd1x0PSBzdGFja19wcmludFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxuJiM0MztcdGludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFx1MDAyNnN0YWNrX29wLFxuIFx0XHRcdFx0ICAgc2l6ZW9mKHN0cnVjdCBzdGFja19wcmludF9jdHgpKTtcbiBcbiBcdGlmICghcmV0KSB7XG5AQCAtOTQ4LDI4ICYjNDM7OTY1LDI2IEBAIHN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19mb3BzID0ge1xuLVx0Lm9wZW5cdFx0PSBwYWdlX293bmVyX3N0YWNrX29wZW4sXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7XG4mIzQzO1x0Lm9wZW5cdFx0PSBzdGFja19vcGVuLFxuIFx0LnJlYWRcdFx0PSBzZXFfcmVhZCxcbiBcdC5sbHNlZWtcdFx0PSBzZXFfbHNlZWssXG4gXHQucmVsZWFzZVx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxuIH07XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4mIzQzO3N0YXRpYyBpbnQgdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbiB7XG4tXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKTtcbiYjNDM7XHQqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG4ge1xuLVx0V1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiYjNDM7XHRXUklURV9PTkNFKHBhZ2VzX3RocmVzaG9sZCwgdmFsKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzLCBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9nZXQsXG4tXHRcdFx0XHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfc2V0LCBcJiMzNDslbGx1XCYjMzQ7KTtcbi1cbiYjNDM7REVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsIFx1MDAyNnRocmVzaG9sZF9nZXQsIFx1MDAyNnRocmVzaG9sZF9zZXQsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xuIFxuIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXG4ge1xuQEAgLTk4NSwxNyAmIzQzOzEwMDAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2hvd19zdGFja3NcJiMzNDssIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XG4gXHRcdFx0XHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxuLVx0XHRcdCAgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2hvd19oYW5kbGVzXCYjMzQ7LCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4mIzQzO1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2hvd19zdGFja3NfaGFuZGxlc1wmIzM0OywgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUpLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2c3RhY2tfZm9wcyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2NvdW50X3RocmVzaG9sZFwmIzM0OywgMDYwMCwgZGlyLCBOVUxMLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTtcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNnRocmVzaG9sZF9mb3BzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KVxuZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHkgYi9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5XG5pbmRleCA4ZTcxM2EwOWNmZTc4Zi4uZWVhYmFlZWQ0MzhiMmEgMTAwNjQ0XG4tLS0gYS9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5XG5AQCAtMzQsNiAmIzQzOzM0LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4gICAgIG1heF9wZm4gPSBOb25lXG4gICAgIHBfb3BzID0gTm9uZVxuICAgICBtaWdyYXRlX3JlYXNvbl9uYW1lcyA9IE5vbmVcbiYjNDM7ICAgIG1yX25ldmVyID0gTm9uZVxuIFxuICAgICBkZWYgX19pbml0X18oc2VsZik6XG4gICAgICAgICBzdXBlcihEdW1wUGFnZU93bmVyLCBzZWxmKS5fX2luaXRfXyhcJiMzNDtseC1kdW1wLXBhZ2Utb3duZXJcJiMzNDssIGdkYi5DT01NQU5EX1NVUFBPUlQpXG5AQCAtNjUsNiAmIzQzOzY2LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4gICAgICAgICBzZWxmLm1heF9wZm4gPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKFwmIzM0O21heF9wZm5cJiMzNDspKVxuICAgICAgICAgc2VsZi5wYWdlX2V4dF9zaXplID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbChcJiMzNDtwYWdlX2V4dF9zaXplXCYjMzQ7KSlcbiAgICAgICAgIHNlbGYubWlncmF0ZV9yZWFzb25fbmFtZXMgPSBnZGIucGFyc2VfYW5kX2V2YWwoJiMzOTttaWdyYXRlX3JlYXNvbl9uYW1lcyYjMzk7KVxuJiM0MzsgICAgICAgIHNlbGYubXJfbmV2ZXIgPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKCYjMzk7TVJfTkVWRVImIzM5OykpXG4gXG4gICAgIGRlZiBwYWdlX2V4dF9pbnZhbGlkKHNlbGYsIHBhZ2VfZXh0KTpcbiAgICAgICAgIGlmIHBhZ2VfZXh0ID09IGdkYi5WYWx1ZSgwKTpcbkBAIC0xMzgsNyAmIzQzOzE0MCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOlxuICAgICAgICAgZWxzZTpcbiAgICAgICAgICAgICBnZGIud3JpdGUoJiMzOTtwYWdlIGxhc3QgZnJlZSBzdGFjayB0cmFjZTpcXG4mIzM5OylcbiAgICAgICAgICAgICBzdGFja2RlcG90LnN0YWNrX2RlcG90X3ByaW50KHBhZ2Vfb3duZXJbXCYjMzQ7ZnJlZV9oYW5kbGVcJiMzNDtdKVxuLSAgICAgICAgaWYgcGFnZV9vd25lclsmIzM5O2xhc3RfbWlncmF0ZV9yZWFzb24mIzM5O10gIT0gLTE6XG4mIzQzOyAgICAgICAgaWYgcGFnZV9vd25lclsmIzM5O2xhc3RfbWlncmF0ZV9yZWFzb24mIzM5O10gIT0gc2VsZi5tcl9uZXZlcjpcbiAgICAgICAgICAgICBnZGIud3JpdGUoJiMzOTtwYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xcbiYjMzk7ICUgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyWyYjMzk7bGFzdF9taWdyYXRlX3JlYXNvbiYjMzk7XV0pXG4gXG4gICAgIGRlZiByZWFkX3BhZ2Vfb3duZXIoc2VsZik6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9PV05FUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlYWRfcGFnZV9vd25lciYjMzQ7LAogICAgJiMzNDtwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1tL3BhZ2Vfb3duZXIuYyB0byBzYWZlbHkgc2tpcCBidWRkeSBwYWdlcyBkdXJpbmcgaXRlcmF0aW9uLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIFBGTiBhY2Nlc3NlcyB3aGVuIHJlYWRpbmcgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lciBvciAvcHJvYy9wYWdldHlwZWluZm8uIEl0IGFsc28gZml4ZXMgbWVtY2cgZGF0YSByZWFkaW5nIGluIHBhZ2Ugb3duZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNkNDM2YmY2OTBlYTBlNjBjMzZhNmNlZTliMzIzNWZjMmJiZThjOTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDExOjEyOjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAyYWJhZjk5MzIxZTkwZC4uZmE4MjgyMzJkZmNjMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0xNTQsNyAmIzQzOzE1NCw4IEBAIGxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsCiBib29sIGZvbGlvX2lzb2xhdGVfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTsKIGludCBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sICpodWdldGxiLCBib29sIHVucG9pc29uKTsKIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pOwotdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKTsKJiM0Mzt2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sCiYjNDM7CQkJZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pOwogdm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGU7CiB1MzIgaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGlkeCk7CkBAIC00MjQsNyAmIzQzOzQyNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywKLQkJCQkJc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pCiYjNDM7CQkJCQlzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pCiB7CiB9CiAKQEAgLTk1Niw3ICYjNDM7OTU3LDcgQEAgc3RhdGljIGlubGluZSBnZnBfdCBodGxiX21vZGlmeV9hbGxvY19tYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrKQogCXJldHVybiBtb2RpZmllZF9tYXNrOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogCWJvb2wgYWxsb3dlZF9mYWxsYmFjayA9IGZhbHNlOwogCkBAIC0xMjM4LDcgJiM0MzsxMjM5LDcgQEAgc3RhdGljIGlubGluZSBnZnBfdCBodGxiX21vZGlmeV9hbGxvY19tYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogCXJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKaW5kZXggZDVhZjJiN2Y1NzdiMzMuLjFmODM5MjQ2MTVkNmQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaApAQCAtNTcsNyAmIzQzOzU3LDggQEAgdm9pZCBwdXRiYWNrX21vdmFibGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCk7CiBpbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsCiAJCXN0cnVjdCBmb2xpbyAqc3JjLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKTsKIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldywgZnJlZV9mb2xpb190IGZyZWUsCi0JCSAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLAomIzQzOwkJICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsCiYjNDM7CQkgIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLAogCQkgIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCk7CiBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSk7CiBib29sIGlzb2xhdGVfbW92YWJsZV9vcHNfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaXNvbGF0ZV9tb2RlX3QgbW9kZSk7CkBAIC03Nyw3ICYjNDM7NzgsOCBAQCBpbnQgc2V0X21vdmFibGVfb3BzKGNvbnN0IHN0cnVjdCBtb3ZhYmxlX29wZXJhdGlvbnMgKm9wcywgZW51bSBwYWdldHlwZSB0eXBlKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRiYWNrX21vdmFibGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCkge30KIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LAogCQlmcmVlX2ZvbGlvX3QgZnJlZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlLAotCQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpCiYjNDM7CQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwKJiM0MzsJCXVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCkKIAl7IHJldHVybiAtRU5PU1lTOyB9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywKIAkJdW5zaWduZWQgbG9uZyBwcml2YXRlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmgKaW5kZXggMjY1YzQzMjhiMzZhZDUuLjA1MTAyZDRkMjQ5MGU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmgKQEAgLTI1LDYgJiM0MzsyNSw3IEBAIGVudW0gbWlncmF0ZV9yZWFzb24gewogCU1SX0xPTkdURVJNX1BJTiwKIAlNUl9ERU1PVElPTiwKIAlNUl9EQU1PTiwKJiM0MzsJTVJfTkVWRVIsCQkvKiBwYWdlIGhhcyBuZXZlciBiZWVuIG1pZ3JhdGVkICovCiAJTVJfVFlQRVMKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgKaW5kZXggMzMyODM1N2Y2ZGJhNzIuLjlmZTUxZGZjY2YyNjg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaApAQCAtMyw2ICYjNDM7Myw3IEBACiAjZGVmaW5lIF9fTElOVVhfUEFHRV9PV05FUl9ICiAKICNpbmNsdWRlICZsdDtsaW51eC9qdW1wX2xhYmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21pZ3JhdGVfbW9kZS5oJmd0OwogCiAjaWZkZWYgQ09ORklHX1BBR0VfT1dORVIKIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBwYWdlX293bmVyX2luaXRlZDsKQEAgLTE0LDcgJiM0MzsxNSw3IEBAIGV4dGVybiB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsCiBleHRlcm4gdm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsCiAJCQlpbnQgbmV3X29yZGVyKTsKIGV4dGVybiB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCk7Ci1leHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKTsKJiM0MztleHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7CiBleHRlcm4gdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLAogCQkJCQlwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSk7CkBAIC00Myw3ICYjNDM7NDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCkKIAlpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseSgmYW1wO3BhZ2Vfb3duZXJfaW5pdGVkKSkKIAkJX19mb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBvbGQpOwogfQotc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pCiB7CiAJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtwYWdlX293bmVyX2luaXRlZCkpCiAJCV9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKGZvbGlvLCByZWFzb24pOwpAQCAtNjgsNyAmIzQzOzY5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsCiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogfQotc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pCiB7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oCmluZGV4IGNkMDFkZDdiMzY0MGRjLi4xNWVlMmVmMjAxYjVmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaApAQCAtMjMsNyAmIzQzOzIzLDggQEAKIAlFTSggTVJfQ09OVElHX1JBTkdFLAkmIzM0O2NvbnRpZ19yYW5nZSYjMzQ7KQkJCVwKIAlFTSggTVJfTE9OR1RFUk1fUElOLAkmIzM0O2xvbmd0ZXJtX3BpbiYjMzQ7KQkJCVwKIAlFTSggTVJfREVNT1RJT04sCSYjMzQ7ZGVtb3Rpb24mIzM0OykJCQlcCi0JRU1lKE1SX0RBTU9OLAkJJiMzNDtkYW1vbiYjMzQ7KQomIzQzOwlFTSggTVJfREFNT04sCQkmIzM0O2RhbW9uJiMzNDspCQkJXAomIzQzOwlFTWUoTVJfTkVWRVIsCQkmIzM0O25ldmVyX21pZ3JhdGVkJiMzNDspCiAKIC8qCiAgKiBGaXJzdCBkZWZpbmUgdGhlIGVudW1zIGluIHRoZSBhYm92ZSBtYWNyb3MgdG8gYmUgZXhwb3J0ZWQgdG8gdXNlcnNwYWNlCkBAIC01MSw3ICYjNDM7NTIsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLAogCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIGZhaWxlZCwKIAkJIHVuc2lnbmVkIGxvbmcgdGhwX3N1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyB0aHBfZmFpbGVkLAogCQkgdW5zaWduZWQgbG9uZyB0aHBfc3BsaXQsIHVuc2lnbmVkIGxvbmcgbGFyZ2VfZm9saW9fc3BsaXQsCi0JCSBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSwKJiM0MzsJCSBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksCiAKIAlUUF9BUkdTKHN1Y2NlZWRlZCwgZmFpbGVkLCB0aHBfc3VjY2VlZGVkLCB0aHBfZmFpbGVkLAogCQl0aHBfc3BsaXQsIGxhcmdlX2ZvbGlvX3NwbGl0LCBtb2RlLCByZWFzb24pLApAQCAtNjQsNyAmIzQzOzY1LDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcywKIAkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJCXRocF9zcGxpdCkKIAkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJCWxhcmdlX2ZvbGlvX3NwbGl0KQogCQlfX2ZpZWxkKAllbnVtIG1pZ3JhdGVfbW9kZSwJbW9kZSkKLQkJX19maWVsZCgJaW50LAkJCXJlYXNvbikKJiM0MzsJCV9fZmllbGQoCWVudW0gbWlncmF0ZV9yZWFzb24sCXJlYXNvbikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCkBAIC05MSwxMyAmIzQzOzkyLDEzIEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsCiAKIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXNfc3RhcnQsCiAKLQlUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSwKJiM0MzsJVFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLAogCiAJVFBfQVJHUyhtb2RlLCByZWFzb24pLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19maWVsZChlbnVtIG1pZ3JhdGVfbW9kZSwgbW9kZSkKLQkJX19maWVsZChpbnQsIHJlYXNvbikKJiM0MzsJCV9fZmllbGQoZW51bSBtaWdyYXRlX3JlYXNvbiwgcmVhc29uKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlYy4uMTc3MzJkMWZkYzVlZmQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTcxODIsNyAmIzQzOzcxODIsOCBAQCB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWZvbGlvX3B1dChmb2xpbyk7CiB9CiAKLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbikKJiM0Mzt2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sCiYjNDM7CQkJZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pCiB7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pOwogCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggZDliMjM5MDlkNzE2YzYuLjQ5ZTEwZmVlYjA5NGYwIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jCkBAIC0xNDY5LDcgJiM0MzsxNDY5LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwKIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sCiAJCWZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCiAJCXN0cnVjdCBmb2xpbyAqc3JjLCBpbnQgZm9yY2UsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsCi0JCWludCByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldCkKJiM0MzsJCWVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpCiB7CiAJc3RydWN0IGZvbGlvICpkc3Q7CiAJaW50IHJjID0gLUVBR0FJTjsKQEAgLTE2MjYsNyAmIzQzOzE2MjYsNyBAQCBzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyB7CiAgKi8KIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogCQkJICAgIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCi0JCQkgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwKJiM0MzsJCQkgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sCiAJCQkgICAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLAogCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MpCiB7CkBAIC0xNzE2LDcgJiM0MzsxNzE2LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sCiBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc19tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsCiAJCXN0cnVjdCBsaXN0X2hlYWQgKmRzdF9mb2xpb3MsCiAJCWZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCi0JCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwKIAkJc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywKIAkJc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLAogCQlpbnQgKnJldHJ5LCBpbnQgKnRocF9yZXRyeSwgaW50ICpucl9mYWlsZWQsCkBAIC0xNzk5LDcgJiM0MzsxNzk5LDcgQEAgc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfdW5kbyhzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLAogICovCiBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwKIAkJbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sCi0JCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sCiAJCXN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcywKIAkJc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcykKIHsKQEAgLTIwMTEsNyAmIzQzOzIwMTEsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwKIAogc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKIAkJZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwKLQkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwKJiM0MzsJCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsCiAJCXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cykKIHsKQEAgLTIwODgsNyAmIzQzOzIwODgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogICovCiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogCQlmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAotCQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpCiYjNDM7CQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKQogewogCWludCByYywgcmNfZ2F0aGVyOwogCWludCBucl9wYWdlczsKZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuYwppbmRleCAyZGRkY2I2NTEwYWExZS4uZWZiZjY3ZDU0ZWUyNjYgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Vfb3duZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX293bmVyLmMKQEAgLTMzOSwxMyAmIzQzOzMzOSwxMyBAQCBub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLAogCWRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTsKIAogCWhhbmRsZSA9IHNhdmVfc3RhY2soZ2ZwX21hc2spOwotCV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCAtMSwKJiM0MzsJX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1SX05FVkVSLAogCQkJCSAgIHRzX25zZWMsIGN1cnJlbnQtJmd0O3BpZCwgY3VycmVudC0mZ3Q7dGdpZCwKIAkJCQkgICBjdXJyZW50LSZndDtjb21tKTsKIAlpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgJmx0OyZsdDsgb3JkZXIpOwogfQogCi12b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pCiYjNDM7dm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbikKIHsKIAlzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KCZhbXA7Zm9saW8tJmd0O3BhZ2UpOwogCXN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyOwpAQCAtNDIyLDYgJiM0Mzs0MjIsMzkgQEAgdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIENoZWNrIGlmIGEgcGFnZSBpcyBhIGJ1ZGR5IHBhZ2UgYW5kIGFkdmFuY2UgQHBmbiBwYXN0IHRoZSBlbnRpcmUgYnVkZHkgYmxvY2suCiYjNDM7ICogVGhpcyBzYWZlbHkgcmVhZHMgdGhlIGJ1ZGR5IG9yZGVyIHdpdGhvdXQgdGhlIHpvbmUgbG9jaywgd2hpY2ggbWF5IGNhdXNlIHVzCiYjNDM7ICogdG8gc2tpcCBsZXNzIHRoYW4gdGhlIGZ1bGwgYnVkZHkgYmxvY2ssIGJ1dCB0aGF0IGlzIGFjY2VwdGFibGUgZm9yIHBhZ2Ugb3duZXIKJiM0MzsgKiBpdGVyYXRpb24gcHVycG9zZXMuCiYjNDM7ICoKJiM0MzsgKiBUaGUgbG9ja2xlc3MgcmVhZCBvZiBidWRkeV9vcmRlcl91bnNhZmUoKSBjYW4gYWxzbyByZXR1cm4gYSBnYXJiYWdlIG9yZGVyIGlmCiYjNDM7ICogdGhlIHBhZ2UgaXMgY29uY3VycmVudGx5IGFsbG9jYXRlZCBhbmQgUGFnZUJ1ZGR5IGlzIGNsZWFyZWQgYmV0d2VlbiB0aGUgY2hlY2sKJiM0MzsgKiBhbmQgdGhlIHJlYWQuIENsYW1wIHRoZSBhZHZhbmNlIGF0IHRoZSBuZXh0IE1BWF9PUkRFUl9OUl9QQUdFUyBib3VuZGFyeSBzbwomIzQzOyAqIHRoYXQgYSBib2d1cyBvcmRlciBjYW5ub3QgY2FycnkgQHBmbiBpbnRvIGFuIHVudmFsaWRhdGVkIG1lbW9yeSBzZWN0aW9uLAomIzQzOyAqIHdoaWNoIHdvdWxkIGJyZWFrIGNhbGxlcnMgdGhhdCByZWx5IG9uIGJvdW5kYXJ5LWFsaWduZWQgcGZuX3ZhbGlkKCkgY2hlY2tzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSwKJiM0MzsgKiAgICAgICAgIGZhbHNlIGlmIHRoZSBwYWdlIGlzIG5vdCBhIGJ1ZGR5IHBhZ2UgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb3JkZXI7CiYjNDM7CiYjNDM7CWlmICghUGFnZUJ1ZGR5KHBhZ2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTsKJiM0MzsJaWYgKG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIG5ld19wZm4gPSAqcGZuICYjNDM7ICgxVUwgJmx0OyZsdDsgb3JkZXIpOwomIzQzOwkJdW5zaWduZWQgbG9uZyBib3VuZGFyeSA9IEFMSUdOKCpwZm4gJiM0MzsgMSwgTUFYX09SREVSX05SX1BBR0VTKTsKJiM0MzsKJiM0MzsJCSpwZm4gPSBtaW4obmV3X3BmbiwgYm91bmRhcnkpIC0gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCiAJCQkJICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKQogewpAQCAtNDYxLDE0ICYjNDM7NDk0LDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLAogCQkJaWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjsKLQotCQkJCWZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCQkJCWlmIChmcmVlcGFnZV9vcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUikKLQkJCQkJcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IGZyZWVwYWdlX29yZGVyKSAtIDE7CiYjNDM7CQkJaWYgKHNraXBfYnVkZHlfcGFnZXMoJmFtcDtwZm4sIHBhZ2UpKQogCQkJCWNvbnRpbnVlOwotCQkJfQogCiAJCQlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKQogCQkJCWNvbnRpbnVlOwpAQCAtNTA1LDEzICYjNDM7NTMyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKIAlzZXFfcHV0YyhtLCAmIzM5O1xuJiMzOTspOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwogLyoKICAqIExvb2tpbmcgZm9yIG1lbWNnIGluZm9ybWF0aW9uIGFuZCBwcmludCBpdCBvdXQKICAqLwogc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsCiAJCQkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLSNpZmRlZiBDT05GSUdfTUVNQ0cKIAl1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCWJvb2wgb25saW5lOwpAQCAtNTM0LDE1ICYjNDM7NTYxLDIxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LAogCWNncm91cF9uYW1lKG1lbWNnLSZndDtjc3MuY2dyb3VwLCBuYW1lLCBzaXplb2YobmFtZSkpOwogCXJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwKIAkJCSYjMzQ7Q2hhcmdlZCAlc3RvICVzbWVtY2cgJXNcbiYjMzQ7LAotCQkJUGFnZU1lbWNnS21lbShwYWdlKSA/ICYjMzQ7KHZpYSBvYmpjZykgJiMzNDsgOiAmIzM0OyYjMzQ7LAomIzQzOwkJCShtZW1jZ19kYXRhICZhbXA7IE1FTUNHX0RBVEFfS01FTSkgPyAmIzM0Oyh2aWEgb2JqY2cpICYjMzQ7IDogJiMzNDsmIzM0OywKIAkJCW9ubGluZSA/ICYjMzQ7JiMzNDsgOiAmIzM0O29mZmxpbmUgJiMzNDssCiAJCQluYW1lKTsKIG91dF91bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0jZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKIAlyZXR1cm4gcmV0OwogfQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsCiYjNDM7CQkJCQkgc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsjZW5kaWYKIAogc3RhdGljIHNzaXplX3QKIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbiwKQEAgLTU3OSw3ICYjNDM7NjEyLDcgQEAgcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLAogCWlmIChyZXQgJmd0Oz0gY291bnQpCiAJCWdvdG8gZXJyOwogCi0JaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHsKJiM0MzsJaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpIHsKIAkJcmV0ICYjNDM7PSBzY25wcmludGYoa2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LAogCQkJJiMzNDtQYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xuJiMzNDssCiAJCQltaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uXSk7CkBAIC02MzAsMTAgJiM0Mzs2NjMsMTAgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAllbHNlCiAJCXByX2FsZXJ0KCYjMzQ7cGFnZV9vd25lciB0cmFja3MgdGhlIHBhZ2UgYXMgZnJlZWRcbiYjMzQ7KTsKIAotCXByX2FsZXJ0KCYjMzQ7cGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1LCBmcmVlX3RzICVsbHVcbiYjMzQ7LAomIzQzOwlwcl9hbGVydCgmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdVxuJiMzNDssCiAJCSBwYWdlX293bmVyLSZndDtvcmRlciwgbWlncmF0ZXR5cGVfbmFtZXNbbXRdLCBnZnBfbWFzaywgJmFtcDtnZnBfbWFzaywKIAkJIHBhZ2Vfb3duZXItJmd0O3BpZCwgcGFnZV9vd25lci0mZ3Q7dGdpZCwgcGFnZV9vd25lci0mZ3Q7Y29tbSwKLQkJIHBhZ2Vfb3duZXItJmd0O3RzX25zZWMsIHBhZ2Vfb3duZXItJmd0O2ZyZWVfdHNfbnNlYyk7CiYjNDM7CQkgcGFnZV9vd25lci0mZ3Q7dHNfbnNlYyk7CiAKIAloYW5kbGUgPSBSRUFEX09OQ0UocGFnZV9vd25lci0mZ3Q7aGFuZGxlKTsKIAlpZiAoIWhhbmRsZSkKQEAgLTY0NSwxMiAmIzQzOzY3OCwxMyBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogCWlmICghaGFuZGxlKSB7CiAJCXByX2FsZXJ0KCYjMzQ7cGFnZV9vd25lciBmcmVlIHN0YWNrIHRyYWNlIG1pc3NpbmdcbiYjMzQ7KTsKIAl9IGVsc2UgewotCQlwcl9hbGVydCgmIzM0O3BhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHN0YWNrIHRyYWNlOlxuJiMzNDssCi0JCQkgIHBhZ2Vfb3duZXItJmd0O2ZyZWVfcGlkLCBwYWdlX293bmVyLSZndDtmcmVlX3RnaWQpOwomIzQzOwkJcHJfYWxlcnQoJiMzNDtwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCB0cyAlbGx1IHN0YWNrIHRyYWNlOlxuJiMzNDssCiYjNDM7CQkJICBwYWdlX293bmVyLSZndDtmcmVlX3BpZCwgcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkLAomIzQzOwkJCSAgcGFnZV9vd25lci0mZ3Q7ZnJlZV90c19uc2VjKTsKIAkJc3RhY2tfZGVwb3RfcHJpbnQoaGFuZGxlKTsKIAl9CiAKLQlpZiAocGFnZV9vd25lci0mZ3Q7bGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkKJiM0MzsJaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpCiAJCXByX2FsZXJ0KCYjMzQ7cGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcbiYjMzQ7LAogCQkJbWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci0mZ3Q7bGFzdF9taWdyYXRlX3JlYXNvbl0pOwogCXBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7CkBAIC02OTcsMTMgJiM0Mzs3MzEsOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogCQl9CiAKIAkJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JCWlmIChQYWdlQnVkZHkocGFnZSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7Ci0KLQkJCWlmIChmcmVlcGFnZV9vcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUikKLQkJCQlwZm4gJiM0Mzs9ICgxVUwgJmx0OyZsdDsgZnJlZXBhZ2Vfb3JkZXIpIC0gMTsKJiM0MzsJCWlmIChza2lwX2J1ZGR5X3BhZ2VzKCZhbXA7cGZuLCBwYWdlKSkKIAkJCWNvbnRpbnVlOwotCQl9CiAKIAkJcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQocGFnZSk7CiAJCWlmICh1bmxpa2VseSghcGFnZV9leHQpKQpAQCAtNzk4LDIwICYjNDM7ODI3LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKQogCQkJaWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKQogCQkJCWNvbnRpbnVlOwogCi0JCQkvKgotCQkJICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS0mZ3Q7bG9jaywgYmUgYSBsaXR0bGUKLQkJCSAqIGNhcmVmdWwgd2hlbiByZWFkaW5nIGJ1ZGR5IHBhZ2Ugb3JkZXIuIFRoZSBvbmx5Ci0JCQkgKiBkYW5nZXIgaXMgdGhhdCB3ZSBza2lwIHRvbyBtdWNoIGFuZCBwb3RlbnRpYWxseSBtaXNzCi0JCQkgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW4KLQkJCSAqIGhlYXZ5IGxvY2sgY29udGVudGlvbi4KLQkJCSAqLwotCQkJaWYgKFBhZ2VCdWRkeShwYWdlKSkgewotCQkJCXVuc2lnbmVkIGxvbmcgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7Ci0KLQkJCQlpZiAob3JkZXIgJmd0OyAwICZhbXA7JmFtcDsgb3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIpCi0JCQkJCXBmbiAmIzQzOz0gKDFVTCAmbHQ7Jmx0OyBvcmRlcikgLSAxOwomIzQzOwkJCWlmIChza2lwX2J1ZGR5X3BhZ2VzKCZhbXA7cGZuLCBwYWdlKSkKIAkJCQljb250aW51ZTsKLQkJCX0KIAogCQkJaWYgKFBhZ2VSZXNlcnZlZChwYWdlKSkKIAkJCQljb250aW51ZTsKQEAgLTgyNiw3ICYjNDM7ODQzLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKQogCiAJCQkvKiBGb3VuZCBlYXJseSBhbGxvY2F0ZWQgcGFnZSAqLwogCQkJX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgZWFybHlfaGFuZGxlLCAwLCAwLAotCQkJCQkJICAgLTEsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtJmd0O3BpZCwKJiM0MzsJCQkJCQkgICBNUl9ORVZFUiwgbG9jYWxfY2xvY2soKSwgY3VycmVudC0mZ3Q7cGlkLAogCQkJCQkJICAgY3VycmVudC0mZ3Q7dGdpZCwgY3VycmVudC0mZ3Q7Y29tbSk7CiAJCQljb3VudCYjNDM7JiM0Mzs7CiBleHRfcHV0X2NvbnRpbnVlOgpAQCAtODg3LDcgJiM0Mzs5MDQsNyBAQCBzdGF0aWMgdm9pZCAqc3RhY2tfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcHBvcykKIAlyZXR1cm4gc3RhY2s7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VzX3RocmVzaG9sZDsKIAogc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CkBAIC05MDQsNyAmIzQzOzkyMSw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogCW5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKCZhbXA7c3RhY2tfcmVjb3JkLSZndDtjb3VudCkgLSAxOwogCiAJaWYgKGN0eC0mZ3Q7ZmxhZ3MgJmFtcDsgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyAmYW1wOyZhbXA7Ci0JICAgIChucl9iYXNlX3BhZ2VzICZsdDsgMSB8fCBucl9iYXNlX3BhZ2VzICZsdDsgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQpKQomIzQzOwkgICAgKG5yX2Jhc2VfcGFnZXMgJmx0OyAxIHx8IG5yX2Jhc2VfcGFnZXMgJmx0OyBwYWdlc190aHJlc2hvbGQpKQogCQlyZXR1cm4gMDsKIAogCWlmIChjdHgtJmd0O2ZsYWdzICZhbXA7IFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0spIHsKQEAgLTkyNiwxNiAmIzQzOzk0MywxNiBAQCBzdGF0aWMgdm9pZCBzdGFja19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0gewomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc3RhY2tfb3AgPSB7CiAJLnN0YXJ0CT0gc3RhY2tfc3RhcnQsCiAJLm5leHQJPSBzdGFja19uZXh0LAogCS5zdG9wCT0gc3RhY2tfc3RvcCwKIAkuc2hvdwk9IHN0YWNrX3ByaW50CiB9OwogCi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0MztzdGF0aWMgaW50IHN0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmFtcDtwYWdlX293bmVyX3N0YWNrX29wLAomIzQzOwlpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmYW1wO3N0YWNrX29wLAogCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4KSk7CiAKIAlpZiAoIXJldCkgewpAQCAtOTQ4LDI4ICYjNDM7OTY1LDI2IEBAIHN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHsKLQkub3BlbgkJPSBwYWdlX293bmVyX3N0YWNrX29wZW4sCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhY2tfZm9wcyA9IHsKJiM0MzsJLm9wZW4JCT0gc3RhY2tfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCiB9OwogCi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKJiM0MztzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCiB7Ci0JKnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7CiYjNDM7CSp2YWwgPSBSRUFEX09OQ0UocGFnZXNfdGhyZXNob2xkKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKJiM0MztzdGF0aWMgaW50IHRocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKIHsKLQlXUklURV9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkLCB2YWwpOwomIzQzOwlXUklURV9PTkNFKHBhZ2VzX3RocmVzaG9sZCwgdmFsKTsKIAlyZXR1cm4gMDsKIH0KIAotREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9nZXQsCi0JCQkmYW1wO3BhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgJiMzNDslbGx1JiMzNDspOwotCiYjNDM7REVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsICZhbXA7dGhyZXNob2xkX2dldCwgJmFtcDt0aHJlc2hvbGRfc2V0LCAmIzM0OyVsbHVcbiYjMzQ7KTsKIAogc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZCkKIHsKQEAgLTk4NSwxNyAmIzQzOzEwMDAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZCkKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7c2hvd19zdGFja3MmIzM0OywgMDQwMCwgZGlyLAogCQkJICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfAogCQkJCSAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksCi0JCQkgICAgICZhbXA7cGFnZV9vd25lcl9zdGFja19mb3BzKTsKJiM0MzsJCQkgICAgICZhbXA7c3RhY2tfZm9wcyk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3Nob3dfaGFuZGxlcyYjMzQ7LCAwNDAwLCBkaXIsCiAJCQkgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfAogCQkJCSAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3N0YWNrX2ZvcHMpOwomIzQzOwkJCSAgICAmYW1wO3N0YWNrX2ZvcHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtzaG93X3N0YWNrc19oYW5kbGVzJiMzNDssIDA0MDAsIGRpciwKIAkJCSAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHwKIAkJCQkgICAgIFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFKSwKLQkJCSAgICAmYW1wO3BhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7CiYjNDM7CQkJICAgICZhbXA7c3RhY2tfZm9wcyk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O2NvdW50X3RocmVzaG9sZCYjMzQ7LCAwNjAwLCBkaXIsIE5VTEwsCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTsKJiM0MzsJCQkgICAgJmFtcDt0aHJlc2hvbGRfZm9wcyk7CiAJcmV0dXJuIDA7CiB9CiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weSBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHkKaW5kZXggOGU3MTNhMDljZmU3OGYuLmVlYWJhZWVkNDM4YjJhIDEwMDY0NAotLS0gYS9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3NjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHkKQEAgLTM0LDYgJiM0MzszNCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOgogICAgIG1heF9wZm4gPSBOb25lCiAgICAgcF9vcHMgPSBOb25lCiAgICAgbWlncmF0ZV9yZWFzb25fbmFtZXMgPSBOb25lCiYjNDM7ICAgIG1yX25ldmVyID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzdXBlcihEdW1wUGFnZU93bmVyLCBzZWxmKS5fX2luaXRfXygmIzM0O2x4LWR1bXAtcGFnZS1vd25lciYjMzQ7LCBnZGIuQ09NTUFORF9TVVBQT1JUKQpAQCAtNjUsNiAmIzQzOzY2LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6CiAgICAgICAgIHNlbGYubWF4X3BmbiA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoJiMzNDttYXhfcGZuJiMzNDspKQogICAgICAgICBzZWxmLnBhZ2VfZXh0X3NpemUgPSBpbnQoZ2RiLnBhcnNlX2FuZF9ldmFsKCYjMzQ7cGFnZV9leHRfc2l6ZSYjMzQ7KSkKICAgICAgICAgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lcyA9IGdkYi5wYXJzZV9hbmRfZXZhbCgmIzM5O21pZ3JhdGVfcmVhc29uX25hbWVzJiMzOTspCiYjNDM7ICAgICAgICBzZWxmLm1yX25ldmVyID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbCgmIzM5O01SX05FVkVSJiMzOTspKQogCiAgICAgZGVmIHBhZ2VfZXh0X2ludmFsaWQoc2VsZiwgcGFnZV9leHQpOgogICAgICAgICBpZiBwYWdlX2V4dCA9PSBnZGIuVmFsdWUoMCk6CkBAIC0xMzgsNyAmIzQzOzE0MCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZ2RiLndyaXRlKCYjMzk7cGFnZSBsYXN0IGZyZWUgc3RhY2sgdHJhY2U6XG4mIzM5OykKICAgICAgICAgICAgIHN0YWNrZGVwb3Quc3RhY2tfZGVwb3RfcHJpbnQocGFnZV9vd25lclsmIzM0O2ZyZWVfaGFuZGxlJiMzNDtdKQotICAgICAgICBpZiBwYWdlX293bmVyWyYjMzk7bGFzdF9taWdyYXRlX3JlYXNvbiYjMzk7XSAhPSAtMToKJiM0MzsgICAgICAgIGlmIHBhZ2Vfb3duZXJbJiMzOTtsYXN0X21pZ3JhdGVfcmVhc29uJiMzOTtdICE9IHNlbGYubXJfbmV2ZXI6CiAgICAgICAgICAgICBnZGIud3JpdGUoJiMzOTtwYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xuJiMzOTsgJSBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXJbJiMzOTtsYXN0X21pZ3JhdGVfcmVhc29uJiMzOTtdXSkKIAogICAgIGRlZiByZWFkX3BhZ2Vfb3duZXIoc2VsZik6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1ODEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBhcmUgc3VpdGFibGUgZm9yIGZ1enppbmcuIFRoZSBhZmZlY3RlZCBmaWxlcyBhcmU6IGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGBpbmNsdWRlL2xpbnV4L21pZ3JhdGUuaGAsIGBpbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oYCwgYGluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oYCwgYHRyYWNlL2V2ZW50cy9taWdyYXRlLmhgLCBgbW0vaHVnZXRsYi5jYCwgYG1tL21pZ3JhdGUuY2AsIGBtbS9wYWdlX293bmVyLmNgLCBhbmQgYHNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlgLiBUaGF0JiMzOTtzIGEgZGVjZW50IHNwcmVhZC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgZ29vZCBhbW91bnQgb2YgcmVmYWN0b3JpbmcuIFBhcmFtZXRlciBzaWduYXR1cmVzIGZvciBmdW5jdGlvbnMgbGlrZSBgbW92ZV9odWdldGxiX3N0YXRlYCwgYGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2tgLCBgbWlncmF0ZV9wYWdlc2AsIGFuZCBgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb25gIGFyZSBjaGFuZ2luZyBmcm9tIGBpbnQgcmVhc29uYCB0byBgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb25gLiBUaGUgYE1SX05FVkVSYCB2YWx1ZSBpcyBiZWluZyBhZGRlZCB0byB0aGF0IGVudW0uIFRyYWNlcG9pbnRzIGFyZSBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGVudW0gYXMgd2VsbC4gVGhhdCYjMzk7cyBnb29kIHByYWN0aWNlLiBDbGVhbiB1cC4KCkRpdmluZyBkZWVwZXIgaW50byBgbW0vcGFnZV9vd25lci5jYCwgdGhlcmUgYXJlIHNldmVyYWwgY2hhbmdlczogcmVwbGFjaW5nIGAtMWAgd2l0aCBgTVJfTkVWRVJgLCBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHNraXBfYnVkZHlfcGFnZXNgLCBhbmQgdXBkYXRlcyB0byBmdW5jdGlvbnMgbGlrZSBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCwgYHJlYWRfcGFnZV9vd25lcmAsIGBpbml0X3BhZ2VzX2luX3pvbmVgLCBgcHJpbnRfcGFnZV9vd25lcl9tZW1jZ2AsIGBwcmludF9wYWdlX293bmVyYCwgYW5kIGBfX2R1bXBfcGFnZV9vd25lcmAuIFBsdXMsIHNvbWUgcmVuYW1pbmcgb2YgdmFyaWFibGVzLiBUaGUgdXNlIG9mIGBNRU1DR19EQVRBX0tNRU1gIGluc3RlYWQgb2YgYFBhZ2VNZW1jZ0ttZW1gIGluIGBwcmludF9wYWdlX293bmVyX21lbWNnYCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYmVjYXVzZSB0aGF0JiMzOTtzIGxpa2VseSBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiBob3cgbWVtb3J5IGNncm91cHMgYXJlIGJlaW5nIGhhbmRsZWQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGBQYWdlTWVtY2dLbWVtYCB3YXNuJiMzOTt0IGp1c3QgcmVtb3ZlZCBhbmQgcmVwbGFjZWQuCgpUaGUga2V5IHRoaW5nIGlzIHRoaXMgYHNraXBfYnVkZHlfcGFnZXNgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBtbS9wYWdlX293bmVyLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBmdXp6aW5nIHJlbGV2YW5jZSBjb21lcyBpbi4gTm93LCBpcyBpdCByZWFjaGFibGUgYW5kIGZ1enotd29ydGh5PwoKYG1tL3BhZ2Vfb3duZXIuY2AgaXMgY29udHJvbGxlZCBieSBgQ09ORklHX1BBR0VfT1dORVJgLiBPa2F5LCBzbyBpdCYjMzk7cyBhIGRlYnVnIGZlYXR1cmUuIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgIGlzIHVzZWQgaW4gYC9wcm9jL3BhZ2V0eXBlaW5mb2AsIGFuZCBgcmVhZF9wYWdlX293bmVyYCBpcyB1c2VkIGZvciBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAsIGFuZCBgaW5pdF9wYWdlc19pbl96b25lYCBpcyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgoKU28sIGlzIHRoaXMgd29ydGggZnV6emluZz8gTW9zdGx5LCB0aGVzZSBjaGFuZ2VzIHNlZW0gbGlrZSByZWZhY3RvcmluZyBhbmQgZml4aW5nIHNvbWUgZGVidWdmcyBhbmQgcHJvY2ZzIG91dHB1dCwgYWxvbmcgd2l0aCBhbiBvcHRpbWl6YXRpb24vZml4IGZvciBidWRkeSBwYWdlIHNraXBwaW5nIGluIHBhZ2Vfb3duZXIuIFRoaXMgZGVidWdnaW5nIGNvZGUgaXMgZXhwb3NlZCBpbiBwcm9jIGFuZCBkZWJ1Z2ZzLCBzbyB1c2VyIHNwYWNlIGludGVyYWN0aW9uIGlzIHBvc3NpYmxlLgoKVGhhdCBgc2tpcF9idWRkeV9wYWdlc2AgZnVuY3Rpb24gbG9naWM6CgpgYGBjCnN0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpCnsKCXVuc2lnbmVkIGxvbmcgb3JkZXI7CgoJaWYgKCFQYWdlQnVkZHkocGFnZSkpCgkJcmV0dXJuIGZhbHNlOwoKCW9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwoJaWYgKG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKSB7CgkJdW5zaWduZWQgbG9uZyBuZXdfcGZuID0gKnBmbiAmIzQzOyAoMVVMICZsdDsmbHQ7IG9yZGVyKTsKCQl1bnNpZ25lZCBsb25nIGJvdW5kYXJ5ID0gQUxJR04oKnBmbiAmIzQzOyAxLCBNQVhfT1JERVJfTlJfUEFHRVMpOwoKCQkqcGZuID0gbWluKG5ld19wZm4sIGJvdW5kYXJ5KSAtIDE7Cgl9CgoJcmV0dXJuIHRydWU7Cn0KYGBgCgpUaGlzICpjb3VsZCogcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGV2ZW4gYW4gaW5maW5pdGUgbG9vcCB3aGVuIGludGVyYWN0aW5nIHdpdGggYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIG9yIGAvcHJvYy9wYWdldHlwZWluZm9gLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSB3aXRoaW4gYSBkZWJ1ZyBmZWF0dXJlLiBJdCYjMzk7cyBhbiBpbXBvcnRhbnQgZml4LgoKT2gsIGFuZCBgc2tpcF9idWRkeV9wYWdlc2AgaXMgYWN0dWFsbHkgdXNlZCBpbiBgcmVhZF9wYWdlX293bmVyYCwgYSAqZmlsZSByZWFkKiBvcGVyYXRpb24uIFllcywgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWRfcGFnZV9vd25lciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2Vfb3duZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX293bmVyLmM9NjkzPXN0YXRpYyBzc2l6ZV90XG5tbS9wYWdlX293bmVyLmM6Njk0OnJlYWRfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG5tbS9wYWdlX293bmVyLmMtNjk1LXtcbi0tXG5tbS9wYWdlX293bmVyLmM9ODY3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfZm9wcyA9IHtcbm1tL3BhZ2Vfb3duZXIuYzo4Njg6XHQucmVhZFx0XHQ9IHJlYWRfcGFnZV9vd25lcixcbm1tL3BhZ2Vfb3duZXIuYy04NjktXHQubGxzZWVrXHRcdD0gbHNlZWtfcGFnZV9vd25lcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcxNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFBhZ2UgT3duZXIgJmFtcDsgUGFnZXR5cGVpbmZvKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCB0cmlnZ2VyIHNvbWV0aGluZy4gSW50ZXJlc3RpbmcuIEFuZCBpdCBsb29rcyBsaWtlIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgIHBsYXlzIGEgcm9sZSBpbiBgL3Byb2MvcGFnZXR5cGVpbmZvYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGNvbm5lY3Rpb24gaXMgcHJldHR5IGNsZWFyLiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gdHJhY2tpbmcgYW5kIHJlcG9ydGluZyBvbiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcGFnZSB0eXBlcywgcGFydGljdWxhcmx5IG1peGVkIHBhZ2VzLiBOb3cgSSBuZWVkIHRvIGRpdmUgaW50byBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCBzcGVjaWZpY2FsbHkuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcyBmb3IgZGlzcGxheWluZyB0aGUgY291bnRzIG9mIG1peGVkIHBhZ2UgdHlwZXMsIHdoaWNoIGlzIGVzc2VudGlhbCBpbmZvcm1hdGlvbiB3aGVuIHlvdSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBmcmFnbWVudGF0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBpcyB1c2luZyBkaWZmZXJlbnQgcGFnZSBzaXplcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg9MTk9ZXh0ZXJuIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MjA6ZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbmluY2x1ZGUvbGludXgvcGFnZV9vd25lci5oLTIxLVx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSk7XG4tLVxubW0vcGFnZV9vd25lci5jPTQ0MD1zdGF0aWMgaW5saW5lIGJvb2wgc2tpcF9idWRkeV9wYWdlcyh1bnNpZ25lZCBsb25nICpwZm4sIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL3BhZ2Vfb3duZXIuYy00NTctXG5tbS9wYWdlX293bmVyLmM6NDU4OnZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbm1tL3BhZ2Vfb3duZXIuYy00NTktXHRcdFx0XHQgICAgICAgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpXG4tLVxubW0vdm1zdGF0LmM9MTY4ND1zdGF0aWMgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnQoc3RydWN0IHNlcV9maWxlICptLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc3RhdC5jLTE2OTktXHR3YWxrX3pvbmVzX2luX25vZGUobSwgcGdkYXQsIHRydWUsIHRydWUsXG5tbS92bXN0YXQuYzoxNzAwOlx0XHRwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQpO1xubW0vdm1zdGF0LmMtMTcwMS0jZW5kaWYgLyogQ09ORklHX1BBR0VfT1dORVIgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMxOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIGBtbS9wYWdlX293bmVyLmNgIENoYW5nZXMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzLCBpdCBzZWVtcyBsaWtlIHRoZSBtb3N0IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMgYXJlIGhhcHBlbmluZyBpbiBgbW0vcGFnZV9vd25lci5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IGJ1ZGR5IHBhZ2VzIGFyZSBza2lwcGVkLiBUaGUgbW9kaWZpY2F0aW9ucyBpbiBgbW0vbWlncmF0ZS5jYCwgYG1tL2h1Z2V0bGIuY2AsIGFuZCBgaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oYCBhcmUgbW9zdGx5IHR5cGUgY2hhbmdlcyBhbmQgdHJhY2Vwb2ludCB1cGRhdGVzIOKAkyBwcm9iYWJseSBub3QgdGhlIHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcuIEFuZCB0aGUgYHNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlgIGNoYW5nZXMgYXJlIGp1c3QgZm9yIEdEQiBzY3JpcHRpbmcuCgpNeSBndXQgc2F5cyB0aGlzIGlzIHdvcnRoIGEgZnV6emluZyBlZmZvcnQuIFRoZSBjb21taXQgbWVzc2FnZSBsaWtlbHkgaGlnaGxpZ2h0cyBhIGJ1ZyBmaXgg4oCTIHBvdGVudGlhbGx5IGEgZml4IGZvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBpc3N1ZXMgd2l0aCBpbnZhbGlkIFBGTnMgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCBwYWdlcyBpbiBgcGFnZV9vd25lcmAgYW5kIGBwYWdldHlwZWluZm9gLiBUaGUgYHNraXBfYnVkZHlfcGFnZXNgIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY3J1eCBvZiB0aGUgZml4LCBhaW1pbmcgdG8gYWRkcmVzcyBhIHNpdHVhdGlvbiB3aGVyZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBtaWdodCByZXR1cm4gYSBnYXJiYWdlIG9yZGVyLCBsZWFkaW5nIHRvIHVudmFsaWRhdGVkIG1lbW9yeSBhY2Nlc3MuCgpXZSBzaG91bGQgdGFyZ2V0IGZ1enppbmcgYnkgcmVhZGluZyBmcm9tIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYCBhbmQgYC9wcm9jL3BhZ2V0eXBlaW5mb2AuIFRoZSBgUEFHRV9PV05FUmAgY29uZmlnIG9wdGlvbiBpcyBlc3NlbnRpYWwsIG9mIGNvdXJzZS4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBvZiBmb2N1c2luZyBvbiBgcmVhZF9wYWdlX293bmVyYCwgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAsIGFuZCBgc2tpcF9idWRkeV9wYWdlc2AuIEJ1dCB3YWl0LCBgc2tpcF9idWRkeV9wYWdlc2AgaXMgKmlubGluZSohIFRoYXQgY29tcGxpY2F0ZXMgdGhpbmdzLCBzbyB3ZSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIGByZWFkX3BhZ2Vfb3duZXJgIGFuZCBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCBpbnN0ZWFkLgoKSSBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzIEkmIzM5O20gbWlzc2luZy4gQWgsIGBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbmAgaXMganVzdCBhIHR5cGUgY2hhbmdlLiBUaGVuLCBgcHJpbnRfcGFnZV9vd25lcl9tZW1jZ2AgaXMgY2hhbmdpbmcgYFBhZ2VNZW1jZ0ttZW0ocGFnZSlgIHRvIGAobWVtY2dfZGF0YSAmYW1wOyBNRU1DR19EQVRBX0tNRU0pYC4gSG1tbSwgSSBuZWVkIHRvIGxvb2sgaW50byB0aGF0IGBQYWdlTWVtY2dLbWVtYCBiaXQuLi4gZGlkIGl0IGdldCByZW1vdmVkIG9yIHJlbmFtZWQ/IExldCYjMzk7cyBjaGVjayB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQYWdlTWVtY2dLbWVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTUwNj1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTUxMi1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjUxMzpzdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTUxNC17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTA1OT1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwNjMtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDY0OnN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA2NS17XG4tLVxubW0vcGFnZV9hbGxvYy5jPTEzMTQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xMzMwLVxubW0vcGFnZV9hbGxvYy5jOjEzMzE6XHRpZiAobWVtY2dfa21lbV9vbmxpbmUoKSBcdTAwMjZcdTAwMjYgUGFnZU1lbWNnS21lbShwYWdlKSlcbm1tL3BhZ2VfYWxsb2MuYy0xMzMyLVx0XHRfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7XG4tLVxubW0vc2x1Yi5jPTI1MDg9Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxuLS1cbm1tL3NsdWIuYy0yNTIxLVxubW0vc2x1Yi5jOjI1MjI6XHRcdGlmIChQYWdlTWVtY2dLbWVtKHBhZ2UpKVxubW0vc2x1Yi5jLTI1MjMtXHRcdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NDcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNwb3QgYSBmYW1pbGlhciBmYWNlOiBgUGFnZU1lbWNnS21lbWAuIEFoLCByaWdodCwgdGhleSYjMzk7dmUgdXBkYXRlZCBob3cgaXQmIzM5O3MgaGFuZGxlZCwgbm93IGl0JiMzOTtzIHR1Y2tlZCBhd2F5IGluIGBtbS9wYWdlX293bmVyLmNgIGFuZCByZXByZXNlbnRlZCBhcyBgKG1lbWNnX2RhdGEgJmFtcDsgTUVNQ0dfREFUQV9LTUVNKWAuIE1ha2VzIHNlbnNlLiBOb3csIGxldCBtZSBzZWUuLi4gSSBzZWUgdGhleSYjMzk7cmUgcmVhZGluZyBgbWVtY2dfZGF0YWAgbG9ja2xlc3NseToKCmBgYGMKCW1lbWNnX2RhdGEgPSBSRUFEX09OQ0UocGFnZS0mZ3Q7bWVtY2dfZGF0YSk7CglpZiAoIW1lbWNnX2RhdGEpCgkJZ290byBvdXRfdW5sb2NrOwoKCW1lbWNnID0gcGFnZV9tZW1jZ19jaGVjayhwYWdlKTsKYGBgCgpUaGVuIHRoZXkmIzM5O3JlIGNoZWNraW5nIGl0IHdpdGggYSBiaXR3aXNlIEFORCBvcGVyYXRpb24gLSBgKG1lbWNnX2RhdGEgJmFtcDsgTUVNQ0dfREFUQV9LTUVNKWAuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQsIG1pbm9yIGFkanVzdG1lbnQuCgpCdXQgdGhlIG1lYXQgb2YgdGhpcyBzZWVtcyB0byBiZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBza2lwX2J1ZGR5X3BhZ2VzYC4gSW50ZXJlc3RpbmcuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0JiMzOTtzIHNlZS4uLiBZZXAsIHRoaXMgYWRkcmVzc2VzIGEgYnVnIGluIHBhZ2UgaXRlcmF0aW9uLCB3aGljaCBJIHNlZSBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIGJ5IHJlYWRpbmcgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIG9yIGAvcHJvYy9wYWdldHlwZWluZm9gLiBHaXZlbiBpdCYjMzk7cyB1c2VyLWFjY2Vzc2libGUgYW5kIGZpeGVzIGEgYnVnLCBhYnNvbHV0ZWx5LCBmdXp6aW5nIHRoaXMgaXMgdGhlIHJpZ2h0IGNhbGwuIFRoZSByaXNrL3Jld2FyZCByYXRpbyBpcyBkZWZpbml0ZWx5IHRoZXJlLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGBDT05GSUdfUEFHRV9PV05FUmAgaXMgZW5hYmxlZCwganVzdCB0byBiZSBzdXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX09XTkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xMDQtXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxubW0vS2NvbmZpZy5kZWJ1Zy0xMDYtXHRib29sIFwmIzM0O1RyYWNrIHBhZ2Ugb3duZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIFBhZ2UgT3duZXIgQ29uZmlndXJhdGlvbiBhbmQgUnVudGltZSBSZWFjaGFiaWxpdHkqKgoKUmlnaHQsIHNvIGBQQUdFX09XTkVSYC4uLiB0aGF0JiMzOTtzIG91ciBrZXkgY29uZmlndXJhdGlvbiBwb2ludC4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBhZmZlY3RzIHRoZSBzeXN0ZW0sIGFuZCByaWdodCBub3csIHRoZSBwcmltYXJ5IHN5bWJvbHMgZHJhd2luZyBteSBhdHRlbnRpb24gYXJlIGByZWFkX3BhZ2Vfb3duZXJgIGFuZCBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YC4gVGhlc2UgYXJlIGxpa2VseSBjcnVjaWFsIGZvciBhY2Nlc3NpbmcgYW5kIGRpc3BsYXlpbmcgcGFnZSBvd25lcnNoaXAgaW5mb3JtYXRpb24sIHdoaWNoLCBnaXZlbiB0aGUgY29udGV4dCwgcHJvYmFibHkgbWVhbnMgdHJhY2tpbmcgbWVtb3J5IGFsbG9jYXRpb24uCgpOb3csIGhvbGQgb24uLi4gSSBzZWUgdGhhdCBgaW5pdF9wYWdlc19pbl96b25lYCBnZXRzIG1vZGlmaWVkIHRvby4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSB0aGF0JiMzOTtzIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGlzbiYjMzk7dCB1c3VhbGx5IHNvbWV0aGluZyBJJiMzOTtkIGltbWVkaWF0ZWx5IGFzc29jaWF0ZSB3aXRoIHJ1bnRpbWUgYmVoYXZpb3IuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGlzIGBpbml0X3BhZ2VzX2luX3pvbmVgIGFjdHVhbGx5ICpyZWFjaGFibGUqIGR1cmluZyBydW50aW1lPyBFdmVuIHRob3VnaCBpdCYjMzk7cyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgY291bGQgc29tZXRoaW5nIGxhdGVyIG9uIGNhdXNlIGl0IHRvIGJlIGV4ZWN1dGVkIGFnYWluLCBvciBpbnRlcmFjdCB3aXRoIGl0cyByZXN1bHRzPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgcGF0aCBhbmQgc2VlIGlmIGl0JiMzOTtzIHBvdGVudGlhbGx5IGNhbGxlZCBhdCBzb21lIHBvaW50LCBvciBpdHMgaW5pdGlhbCBzdGF0ZSB1c2VkIGF0IHJ1bnRpbWUgaW4gYW4gdW5leHBlY3RlZCB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luaXRfcGFnZXNfaW5fem9uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX293bmVyLmM9Mjk4PXZvaWQgX19yZXNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcilcbi0tXG5tbS9wYWdlX293bmVyLmMtMzI2LVx0XHQgKiBlYXJseV9oYW5kbGUgaXMgYmVpbmcgc2V0IGFzIGEgaGFuZGxlIGZvciBhbGwgdGhvc2Vcbm1tL3BhZ2Vfb3duZXIuYzozMjc6XHRcdCAqIGVhcmx5IGFsbG9jYXRlZCBwYWdlcy4gU2VlIGluaXRfcGFnZXNfaW5fem9uZSgpLlxubW0vcGFnZV9vd25lci5jLTMyOC1cdFx0ICogU2luY2UgdGhlaXIgcmVmY291bnQgaXMgbm90IGJlaW5nIGluY3JlbWVudGVkIGJlY2F1c2Vcbi0tXG5tbS9wYWdlX293bmVyLmM9Nzg2PXN0YXRpYyBsb2ZmX3QgbHNlZWtfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpXG4tLVxubW0vcGFnZV9vd25lci5jLTgwMC1cbm1tL3BhZ2Vfb3duZXIuYzo4MDE6c3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxubW0vcGFnZV9vd25lci5jLTgwMi17XG4tLVxubW0vcGFnZV9vd25lci5jPTg1OT1zdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxuLS1cbm1tL3BhZ2Vfb3duZXIuYy04NjMtXHRmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKVxubW0vcGFnZV9vd25lci5jOjg2NDpcdFx0aW5pdF9wYWdlc19pbl96b25lKHpvbmUpO1xubW0vcGFnZV9vd25lci5jLTg2NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTc4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQYWdlIE93bmVyIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gYGluaXRfcGFnZXNfaW5fem9uZWAgaXMgZGVmaW5pdGVseSBhIGtlcm5lbC1sZXZlbCBmdW5jdGlvbiwgY2FsbGVkIHdheSBlYXJseSBkdXJpbmcgdGhlIGJvb3QgcHJvY2VzcyB2aWEgYGluaXRfZWFybHlfYWxsb2NhdGVkX3BhZ2VzYC4gTm8gdXNlciBzcGFjZSBpbnRlcmFjdGlvbiB0aGVyZS4gQnV0IGByZWFkX3BhZ2Vfb3duZXJgIGFuZCBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCwgdGhvc2UgYXJlIGFjY2Vzc2libGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB3b3JrLgoKSSBzaG91bGQgY2hlY2sgdGhlIHNvdXJjZSBmb3IgYHJlYWRfcGFnZV9vd25lcmAsIHRoYXQmIzM5O3MgaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIEZyb20gd2hhdCBJIGtub3csIGl0IGFwcGVhcnMgdGhhdCB0aGlzIGlzIHRoZSBgLnJlYWRgIG9wZXJhdGlvbiBmb3IgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgLiBUaGF0IG1ha2VzIHNlbnNlLiBBbmQgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAgc2hvd3MgdXAgaW4gYC9wcm9jL3BhZ2V0eXBlaW5mb2AuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcsIGFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXM/IEkga25vdyB0aGF0IGBQQUdFX09XTkVSYCBkZXBlbmRzIG9uIGBERUJVR19LRVJORUxgIGFuZCBgU1RBQ0tUUkFDRV9TVVBQT1JUYCwgc28gbGV0IG1lIHRha2UgYSBsb29rIGF0IGBtbS9LY29uZmlnLmRlYnVnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9wZXIgY29uZmlnIG9wdGlvbnMgYXJlIGVuYWJsZWQgdG8gdXNlIHRoZXNlIGZlYXR1cmVzIHByb3Blcmx5IGFuZCB0aGF0IEkgdW5kZXJzdGFuZCBhbnkgcmVsYXRlZCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQUdFX09XTkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnPTczPWNvbmZpZyBTTFVCX1JDVV9ERUJVR1xuLS1cbm1tL0tjb25maWcuZGVidWctMTA0LVxubW0vS2NvbmZpZy5kZWJ1ZzoxMDU6Y29uZmlnIFBBR0VfT1dORVJcbm1tL0tjb25maWcuZGVidWctMTA2LVx0Ym9vbCBcJiMzNDtUcmFjayBwYWdlIG93bmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBEZWJ1ZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGRpZyBpbnRvIHRoZXNlIGRlYnVnIG9wdGlvbnM/IE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEwNS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIGdyYW51bGFyIGRlYnVnIGZlYXR1cmVzIGFyZSBkZWZpbmVkLCByaWdodD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBkZXRlcm1pbmUgaG93IHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWdnaW5nIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgc2luY2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhpbmdzIHRoYXQgYXJlIHR5cGljYWxseSBlbmFibGVkIGR1cmluZyBkZXZlbG9wbWVudCBvciBmb3IgdmVyeSBzcGVjaWZpYyB0cm91Ymxlc2hvb3RpbmcuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZmlsZSB3aWxsIG9mZmVyIGEgY2xlYXIgb3ZlcnZpZXcgb2YgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBkZXNjcmlwdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRlYnVnIGZlYXR1cmVzIGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0XHQgIFRoaXMgaXMgZGVzaWduZWQgYXMgYSBkZWJ1Z2dpbmcgZmVhdHVyZSwgbm90IGEgc2VjdXJpdHkgZmVhdHVyZS5cbiAxMDE6XHRcdCAgT2JqZWN0cyBhcmUgc29tZXRpbWVzIHJlY3ljbGVkIHdpdGhvdXQgUkNVIGRlbGF5IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiAxMDI6XHRcbiAxMDM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxMDQ6XHRcbiAxMDU6XHRjb25maWcgUEFHRV9PV05FUlxuIDEwNjpcdFx0Ym9vbCBcJiMzNDtUcmFjayBwYWdlIG93bmVyXCYjMzQ7XG4gMTA3Olx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcdTAwMjZcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUXG4gMTA4Olx0XHRzZWxlY3QgREVCVUdfRlNcbiAxMDk6XHRcdHNlbGVjdCBTVEFDS1RSQUNFXG4gMTEwOlx0XHRzZWxlY3QgU1RBQ0tERVBPVFxuIDExMTpcdFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXG4gMTEyOlx0XHRoZWxwXG4gMTEzOlx0XHQgIFRoaXMga2VlcHMgdHJhY2sgb2Ygd2hhdCBjYWxsIGNoYWluIGlzIHRoZSBvd25lciBvZiBhIHBhZ2UsIG1heVxuIDExNDpcdFx0ICBoZWxwIHRvIGZpbmQgYmFyZSBhbGxvY19wYWdlKHMpIGxlYWtzLiBFdmVuIGlmIHlvdSBpbmNsdWRlIHRoaXNcbiAxMTU6XHRcdCAgZmVhdHVyZSBvbiB5b3VyIGJ1aWxkLCBpdCBpcyBkaXNhYmxlZCBpbiBkZWZhdWx0LiBZb3Ugc2hvdWxkIHBhc3NcbiAxMTY6XHRcdCAgXCYjMzQ7cGFnZV9vd25lcj1vblwmIzM0OyB0byBib290IHBhcmFtZXRlciBpbiBvcmRlciB0byBlbmFibGUgaXQuIEVhdHNcbiAxMTc6XHRcdCAgYSBmYWlyIGFtb3VudCBvZiBtZW1vcnkgaWYgZW5hYmxlZC4gU2VlIHRvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jXG4gMTE4Olx0XHQgIGZvciB1c2VyLXNwYWNlIGhlbHBlci5cbiAxMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgYSBDb25maWd1cmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UsIGFuZCB0aGUgaW5pdGlhbCBub3RlIHNheXMsICYjMzQ7WW91IHNob3VsZCBwYXNzICYjMzk7cGFnZV9vd25lcj1vbiYjMzk7IHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC4mIzM0OyBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gSSBrbm93IHN5emthbGxlciAqdXN1YWxseSogaGFuZGxlcyB0aGF0IGF1dG9tYXRpY2FsbHkgaWYgYENPTkZJR19QQUdFX09XTkVSYCBpcyBzZXQuIEhvd2V2ZXIsIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCBvbmx5ICptaWdodCogZG8gdGhhdC4gU28sIHRvIGJlIHNhZmUsIHdlIGNhbiBqdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSBgUEFHRV9PV05FUmAgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IHNob3VsZCBiZSB0aGUgY2xlYW5lc3Qgd2F5IHRvIGRvIHRoaXMuIFdhaXQsIHN5emthbGxlciBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHBhc3MgYm9vdCBwYXJhbWV0ZXJzIGJhc2VkIG9uIGNvbmZpZ3MgdW5sZXNzIGNvbmZpZ3VyZWQgaW4gdGhlIHN5emthbGxlciBtYW5hZ2VyLCByaWdodD8gVGhhdCYjMzk7cyByaWdodCwgYW5kIHdlIHdlcmUgYXNrZWQgdG8gcHJvdmlkZSBgRW5hYmxlQ29uZmlnc2AuIEZpbmUsIHNvIHRoYXQmIzM5O3MgaGFuZGxlZC4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gTm8sIGp1c3QgYFBBR0VfT1dORVJgIGlzIG1lbnRpb25lZC4KCkJ1dCB3YWl0LCB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBtbS9taWdyYXRlLmNgIGFuZCBgbW0vaHVnZXRsYi5jYC4gT2gsIHRob3NlIGFyZSBqdXN0IG1pbm9yLCBwdXJlbHkgZGVjb3JhdGl2ZSwgcmVmYWN0b3JpbmcgY2hhbmdlcy4gVGhleSYjMzk7cmUgY2hhbmdpbmcgYGludCByZWFzb25gIHRvIGBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbmAuIERvZXNuJiMzOTt0IGFmZmVjdCBhbnl0aGluZyBmdW5jdGlvbmFsbHkuIFRoZSAqcmVhbCogZnVuY3Rpb25hbCBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGBza2lwX2J1ZGR5X3BhZ2VzYCBpbiBgbW0vcGFnZV9vd25lci5jYC4gTm93LCBgc2tpcF9idWRkeV9wYWdlc2AgaXMgaW50ZXJlc3RpbmcuIEl0ICpwcmV2ZW50cyogcmVhZGluZyBhIGdhcmJhZ2Ugb3JkZXIgYW5kIHNraXBwaW5nIGludG8gYW4gdW52YWxpZGF0ZWQgbWVtb3J5IHNlY3Rpb24uIFRoYXQgc291bmRzIGxpa2UgYSBsZWdpdGltYXRlIGJ1ZyBmaXguIEEgdmVyeSBpbXBvcnRhbnQgb25lLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayBpZiBgc2tpcF9idWRkeV9wYWdlc2AgaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBrZXJuZWwgYmVzaWRlcyBgbW0vcGFnZV9vd25lci5jYC4gTm9wZSwgb25seSB0aGVyZS4gSXQmIzM5O3MgbG9jYWxpemVkIHRvIHRoYXQgbW9kdWxlLCB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gcmVhc29uIGFib3V0LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUgY2hlY2sgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAsIGp1c3QgdG8gbWFrZSBzdXJlIG5vIHN1YnRsZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXN0YXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXN0YXQuYz0xNjg0PXN0YXRpYyB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zdGF0LmMtMTY5OS1cdHdhbGtfem9uZXNfaW5fbm9kZShtLCBwZ2RhdCwgdHJ1ZSwgdHJ1ZSxcbm1tL3Ztc3RhdC5jOjE3MDA6XHRcdHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludCk7XG5tbS92bXN0YXQuYy0xNzAxLSNlbmRpZiAvKiBDT05GSUdfUEFHRV9PV05FUiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkwOQoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiA5MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIHBhZ2Vfb3duZXIgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhZmZlY3RzIGBtbS92bXN0YXQuY2AgdW5kZXIgYENPTkZJR19QQUdFX09XTkVSYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlcmUgYXJlIHR3byBwcmltYXJ5IGZ1bmN0aW9uYWwgY2hhbmdlczoKCjEuICBUaGUgYHNraXBfYnVkZHlfcGFnZXNgIGxvZ2ljIGlzIG1vZGlmaWVkIHdpdGhpbiBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAuCjIuICBgcHJpbnRfcGFnZV9vd25lcl9tZW1jZ2Agbm93IHVzZXMgYG1lbWNnX2RhdGEgJmFtcDsgTUVNQ0dfREFUQV9LTUVNYCBpbnN0ZWFkIG9mIHRoZSBgUGFnZU1lbWNnS21lbShwYWdlKWAgbWFjcm8uCgpCb3RoIG9mIHRoZXNlIGNoYW5nZXMgYXJlIGxvY2F0ZWQgd2l0aGluIGBtbS9wYWdlX293bmVyLmNgIGFuZCBhcmUgZ3VhcmRlZCBieSBgQ09ORklHX1BBR0VfT1dORVJgLgoKTXkgZm9jdXMgc3ltYm9scyBhcmUgYHJlYWRfcGFnZV9vd25lcmAgYW5kIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgLiBMZXQmIzM5O3MgY29uZmlybSBpZiBlaXRoZXIgb2YgdGhlc2UgYXJlIGluIGEgaG90IHBhdGguIEl0IGxvb2tzIGxpa2UgYHJlYWRfcGFnZV9vd25lcmAgaXMgcGFydCBvZiBhIGRlYnVnZnMgcmVhZCBvcGVyYXRpb24sIGFuZCBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCBpcyBhIHByb2NmcyByZWFkIG9wZXJhdGlvbi4gVGhhdCBtZWFucyBuZWl0aGVyIGFyZSBwZXJmb3JtYW5jZSBjcml0aWNhbCwgc28gdGhlIGNoYW5nZSBpc24mIzM5O3QgYWJvdXQgcGVyZm9ybWFuY2UsIGJ1dCBzYWZldHkuCgpJIHNob3VsZCBjaGVjayBpZiBgUEFHRV9PV05FUmAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIHN5emJvdC4gSXQgdXN1YWxseSBlbmFibGVzIGEgbG90IG9mIGRlYnVnIGNvbmZpZ3MsIHNvIGl0JiMzOTtzIGxpa2VseSBhbHJlYWR5IG9uLCBidXQgaXQmIzM5O3Mgc3RpbGwgZ29vZCBwcmFjdGljZSB0byBleHBsaWNpdGx5IGxpc3QgaXQgaW4gYEVuYWJsZUNvbmZpZ3NgLgoKTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBgc2tpcF9idWRkeV9wYWdlc2AgY2hhbmdlLiBJIHNlZSB0aGUgY29kZSBwcmV2ZW50cyBgcGZuYCBmcm9tIGFkdmFuY2luZyB0b28gZmFyIGlmIGBidWRkeV9vcmRlcl91bnNhZmVgIHJldHVybnMgYSBwb3RlbnRpYWxseSBiYWQgdmFsdWUuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByb3RlY3RzIGFnYWluc3Qgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb3IgaW5maW5pdGUgbG9vcHMuIFRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIGJlY2F1c2UgaXQgY2FuIGxlYWQgdG8gdmVyeSBpbnRlcmVzdGluZyBiZWhhdmlvcnMgd2l0aCBidWRkeSBhbGxvY2F0b3IgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LgoKTm93IGxldCYjMzk7cyByZXZpZXcgdGhlIGBwcmludF9wYWdlX293bmVyX21lbWNnYCBjaGFuZ2UuIFRoaXMgc2VlbXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgaW1wYWN0cyBob3cgdGhlICYjMzQ7dmlhIG9iamNnJiMzNDsgc3RyaW5nIGlzIHByaW50ZWQuIEl0IGF2b2lkcyBjYWxsaW5nIGBQYWdlTWVtY2dLbWVtKHBhZ2UpYCwgd2hpY2ggY291bGQgYmUgdW5zYWZlIG9yIGluYWNjdXJhdGUgaW4gdGhlIG5ldyBjb250ZXh0LgoKT3ZlcmFsbCwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgcGF0Y2ggSSBzaG91bGQgcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4gSXQgaW50cm9kdWNlcyBjaGFuZ2VzIHRvIHByb3RlY3QgdGhlIGJ1ZGR5IGFsbG9jYXRvciBhbmQgcG90ZW50aWFsbHkgYWx0ZXJzIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBpbiBkZWJ1Z2dpbmcgdG9vbHMuCgpTbywgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gZ29pbmcgdG8gcHJlcGFyZSBmb3IgdGhlIHJlc3VsdHM6CgoqICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgCiogICAqKkZvY3VzU3ltYm9scyoqOiBgWyYjMzQ7cmVhZF9wYWdlX293bmVyJiMzNDssICYjMzQ7cGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50JiMzNDtdYAoqICAgKipFbmFibGVDb25maWdzKio6IGBbJiMzNDtQQUdFX09XTkVSJiMzNDtdYAoqICAgKipSZWFzb25pbmcqKjogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBtbS9wYWdlX293bmVyLmNgIHRvIHNhZmVseSBza2lwIGJ1ZGR5IHBhZ2VzIGR1cmluZyBpdGVyYXRpb24sIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgUEZOIGFjY2Vzc2VzIHdoZW4gcmVhZGluZyBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgb3IgYC9wcm9jL3BhZ2V0eXBlaW5mb2AuIEl0IGFsc28gZml4ZXMgbWVtY2cgZGF0YSByZWFkaW5nIGluIHBhZ2Ugb3duZXIuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWFkX3BhZ2Vfb3duZXImIzM0OywKICAgICYjMzQ7cGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtbS9wYWdlX293bmVyLmMgdG8gc2FmZWx5IHNraXAgYnVkZHkgcGFnZXMgZHVyaW5nIGl0ZXJhdGlvbiwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBQRk4gYWNjZXNzZXMgd2hlbiByZWFkaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgb3IgL3Byb2MvcGFnZXR5cGVpbmZvLiBJdCBhbHNvIGZpeGVzIG1lbWNnIGRhdGEgcmVhZGluZyBpbiBwYWdlIG93bmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX09XTkVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVhZF9wYWdlX293bmVyJiMzNDssCiAgICAmIzM0O3BhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbW0vcGFnZV9vd25lci5jIHRvIHNhZmVseSBza2lwIGJ1ZGR5IHBhZ2VzIGR1cmluZyBpdGVyYXRpb24sIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgUEZOIGFjY2Vzc2VzIHdoZW4gcmVhZGluZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIG9yIC9wcm9jL3BhZ2V0eXBlaW5mby4gSXQgYWxzbyBmaXhlcyBtZW1jZyBkYXRhIHJlYWRpbmcgaW4gcGFnZSBvd25lci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEyOjM3Ljk2NTM5NDU4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODIzODQ2ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfT1dORVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWFkX3BhZ2Vfb3duZXJcIixcbiAgICBcInBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtbS9wYWdlX293bmVyLmMgdG8gc2FmZWx5IHNraXAgYnVkZHkgcGFnZXMgZHVyaW5nIGl0ZXJhdGlvbiwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBQRk4gYWNjZXNzZXMgd2hlbiByZWFkaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgb3IgL3Byb2MvcGFnZXR5cGVpbmZvLiBJdCBhbHNvIGZpeGVzIG1lbWNnIGRhdGEgcmVhZGluZyBpbiBwYWdlIG93bmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMjozNy45NjU1MDU0MDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzA3MTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNkNDM2YmY2OTBlYTBlNjBjMzZhNmNlZTliMzIzNWZjMmJiZThjOTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAxMToxMjozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLmZhODI4MjMyZGZjYzE4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5AQCAtMTU0LDcgKzE1NCw4IEBAIGxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXFxuIGJvb2wgZm9saW9faXNvbGF0ZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xcbiBpbnQgZ2V0X2h3cG9pc29uX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCAqaHVnZXRsYiwgYm9vbCB1bnBvaXNvbik7XFxuIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pO1xcbit2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXFxuK1xcdFxcdFxcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTtcXG4gdm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIHN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZTtcXG4gdTMyIGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpZHgpO1xcbkBAIC00MjQsNyArNDI1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIH1cXG4gXFxuQEAgLTk1Niw3ICs5NTcsNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXFxuIFxcdHJldHVybiBtb2RpZmllZF9tYXNrO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiBcXHRib29sIGFsbG93ZWRfZmFsbGJhY2sgPSBmYWxzZTtcXG4gXFxuQEAgLTEyMzgsNyArMTIzOSw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGludCByZWFzb24pXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXFxuaW5kZXggZDVhZjJiN2Y1NzdiMzMuLjFmODM5MjQ2MTVkNmQzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcXG5AQCAtNTcsNyArNTcsOCBAQCB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKTtcXG4gaW50IG1pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKnNyYywgZW51bSBtaWdyYXRlX21vZGUgbW9kZSk7XFxuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldywgZnJlZV9mb2xpb190IGZyZWUsXFxuLVxcdFxcdCAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxcbitcXHRcXHQgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSxcXG4rXFx0XFx0ICBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4gXFx0XFx0ICB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpO1xcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSk7XFxuIGJvb2wgaXNvbGF0ZV9tb3ZhYmxlX29wc19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpc29sYXRlX21vZGVfdCBtb2RlKTtcXG5AQCAtNzcsNyArNzgsOCBAQCBpbnQgc2V0X21vdmFibGVfb3BzKGNvbnN0IHN0cnVjdCBtb3ZhYmxlX29wZXJhdGlvbnMgKm9wcywgZW51bSBwYWdldHlwZSB0eXBlKTtcXG4gc3RhdGljIGlubGluZSB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKSB7fVxcbiBzdGF0aWMgaW5saW5lIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldyxcXG4gXFx0XFx0ZnJlZV9mb2xpb190IGZyZWUsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxcbitcXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4rXFx0XFx0dW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxcbiBcXHR7IHJldHVybiAtRU5PU1lTOyB9XFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHByaXZhdGUpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXFxuaW5kZXggMjY1YzQzMjhiMzZhZDUuLjA1MTAyZDRkMjQ5MGU2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXFxuQEAgLTI1LDYgKzI1LDcgQEAgZW51bSBtaWdyYXRlX3JlYXNvbiB7XFxuIFxcdE1SX0xPTkdURVJNX1BJTixcXG4gXFx0TVJfREVNT1RJT04sXFxuIFxcdE1SX0RBTU9OLFxcbitcXHRNUl9ORVZFUixcXHRcXHQvKiBwYWdlIGhhcyBuZXZlciBiZWVuIG1pZ3JhdGVkICovXFxuIFxcdE1SX1RZUEVTXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXFxuaW5kZXggMzMyODM1N2Y2ZGJhNzIuLjlmZTUxZGZjY2YyNjg1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcXG5AQCAtMyw2ICszLDcgQEBcXG4gI2RlZmluZSBfX0xJTlVYX1BBR0VfT1dORVJfSFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2p1bXBfbGFiZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pZ3JhdGVfbW9kZS5oXFx1MDAzZVxcbiBcXG4gI2lmZGVmIENPTkZJR19QQUdFX09XTkVSXFxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBwYWdlX293bmVyX2luaXRlZDtcXG5AQCAtMTQsNyArMTUsNyBAQCBleHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBleHRlcm4gdm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXFxuIFxcdFxcdFxcdGludCBuZXdfb3JkZXIpO1xcbiBleHRlcm4gdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpO1xcbi1leHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKTtcXG4rZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pO1xcbiBleHRlcm4gdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIGV4dGVybiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuIFxcdFxcdFxcdFxcdFxcdHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKTtcXG5AQCAtNDMsNyArNDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4gXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG4gXFx0XFx0X19mb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBvbGQpO1xcbiB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiBcXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxcbiBcXHRcXHRfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihmb2xpbywgcmVhc29uKTtcXG5AQCAtNjgsNyArNjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcXG4gc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiB9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxcbmluZGV4IGNkMDFkZDdiMzY0MGRjLi4xNWVlMmVmMjAxYjVmOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcXG5AQCAtMjMsNyArMjMsOCBAQFxcbiBcXHRFTSggTVJfQ09OVElHX1JBTkdFLFxcdFxcXCJjb250aWdfcmFuZ2VcXFwiKVxcdFxcdFxcdFxcXFxcXG4gXFx0RU0oIE1SX0xPTkdURVJNX1BJTixcXHRcXFwibG9uZ3Rlcm1fcGluXFxcIilcXHRcXHRcXHRcXFxcXFxuIFxcdEVNKCBNUl9ERU1PVElPTixcXHRcXFwiZGVtb3Rpb25cXFwiKVxcdFxcdFxcdFxcXFxcXG4tXFx0RU1lKE1SX0RBTU9OLFxcdFxcdFxcXCJkYW1vblxcXCIpXFxuK1xcdEVNKCBNUl9EQU1PTixcXHRcXHRcXFwiZGFtb25cXFwiKVxcdFxcdFxcdFxcXFxcXG4rXFx0RU1lKE1SX05FVkVSLFxcdFxcdFxcXCJuZXZlcl9taWdyYXRlZFxcXCIpXFxuIFxcbiAvKlxcbiAgKiBGaXJzdCBkZWZpbmUgdGhlIGVudW1zIGluIHRoZSBhYm92ZSBtYWNyb3MgdG8gYmUgZXhwb3J0ZWQgdG8gdXNlcnNwYWNlXFxuQEAgLTUxLDcgKzUyLDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcXG4gXFx0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBzdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgZmFpbGVkLFxcbiBcXHRcXHQgdW5zaWduZWQgbG9uZyB0aHBfc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIHRocF9mYWlsZWQsXFxuIFxcdFxcdCB1bnNpZ25lZCBsb25nIHRocF9zcGxpdCwgdW5zaWduZWQgbG9uZyBsYXJnZV9mb2xpb19zcGxpdCxcXG4tXFx0XFx0IGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24pLFxcbitcXHRcXHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLFxcbiBcXG4gXFx0VFBfQVJHUyhzdWNjZWVkZWQsIGZhaWxlZCwgdGhwX3N1Y2NlZWRlZCwgdGhwX2ZhaWxlZCxcXG4gXFx0XFx0dGhwX3NwbGl0LCBsYXJnZV9mb2xpb19zcGxpdCwgbW9kZSwgcmVhc29uKSxcXG5AQCAtNjQsNyArNjUsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxcbiBcXHRcXHRfX2ZpZWxkKFxcdHVuc2lnbmVkIGxvbmcsXFx0XFx0dGhwX3NwbGl0KVxcbiBcXHRcXHRfX2ZpZWxkKFxcdHVuc2lnbmVkIGxvbmcsXFx0XFx0bGFyZ2VfZm9saW9fc3BsaXQpXFxuIFxcdFxcdF9fZmllbGQoXFx0ZW51bSBtaWdyYXRlX21vZGUsXFx0bW9kZSlcXG4tXFx0XFx0X19maWVsZChcXHRpbnQsXFx0XFx0XFx0cmVhc29uKVxcbitcXHRcXHRfX2ZpZWxkKFxcdGVudW0gbWlncmF0ZV9yZWFzb24sXFx0cmVhc29uKVxcbiBcXHQpLFxcbiBcXG4gXFx0VFBfZmFzdF9hc3NpZ24oXFxuQEAgLTkxLDEzICs5MiwxMyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxcbiBcXG4gVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlc19zdGFydCxcXG4gXFxuLVxcdFRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24pLFxcbitcXHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXFxuIFxcbiBcXHRUUF9BUkdTKG1vZGUsIHJlYXNvbiksXFxuIFxcbiBcXHRUUF9TVFJVQ1RfX2VudHJ5KFxcbiBcXHRcXHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9tb2RlLCBtb2RlKVxcbi1cXHRcXHRfX2ZpZWxkKGludCwgcmVhc29uKVxcbitcXHRcXHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9yZWFzb24sIHJlYXNvbilcXG4gXFx0KSxcXG4gXFxuIFxcdFRQX2Zhc3RfYXNzaWduKFxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uMTc3MzJkMWZkYzVlZmQgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTcxODIsNyArNzE4Miw4IEBAIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIH1cXG4gXFxuLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcXG4rdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLFxcbitcXHRcXHRcXHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgaHN0YXRlICpoID0gZm9saW9faHN0YXRlKG9sZF9mb2xpbyk7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcXG5pbmRleCBkOWIyMzkwOWQ3MTZjNi4uNDllMTBmZWViMDk0ZjAgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZS5jXFxuKysrIGIvbW0vbWlncmF0ZS5jXFxuQEAgLTE0NjksNyArMTQ2OSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuIFxcdFxcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuIFxcdFxcdHN0cnVjdCBmb2xpbyAqc3JjLCBpbnQgZm9yY2UsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXFxuLVxcdFxcdGludCByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcXG4rXFx0XFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcXG4ge1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmRzdDtcXG4gXFx0aW50IHJjID0gLUVBR0FJTjtcXG5AQCAtMTYyNiw3ICsxNjI2LDcgQEAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMge1xcbiAgKi9cXG4gc3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuIFxcdFxcdFxcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi1cXHRcXHRcXHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcXG4rXFx0XFx0XFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcylcXG4ge1xcbkBAIC0xNzE2LDcgKzE3MTYsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfbW92ZShzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpkc3RfZm9saW9zLFxcbiBcXHRcXHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi1cXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxcbitcXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4gXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcyxcXG4gXFx0XFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxcbiBcXHRcXHRpbnQgKnJldHJ5LCBpbnQgKnRocF9yZXRyeSwgaW50ICpucl9mYWlsZWQsXFxuQEAgLTE3OTksNyArMTc5OSw3IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcXG4gICovXFxuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxcbiBcXHRcXHRuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLCBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbyxcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXFxuIFxcdFxcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywgaW50IG5yX3Bhc3MpXFxuIHtcXG5AQCAtMjAxMSw3ICsyMDExLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXFxuIFxcbiBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbiBcXHRcXHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi1cXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxcbitcXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4gXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxcbiBcXHRcXHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMpXFxuIHtcXG5AQCAtMjA4OCw3ICsyMDg4LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gICovXFxuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuIFxcdFxcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuLVxcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcXG4rXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcXG4ge1xcbiBcXHRpbnQgcmMsIHJjX2dhdGhlcjtcXG4gXFx0aW50IG5yX3BhZ2VzO1xcbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcXG5pbmRleCAyZGRkY2I2NTEwYWExZS4uZWZiZjY3ZDU0ZWUyNjYgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9vd25lci5jXFxuKysrIGIvbW0vcGFnZV9vd25lci5jXFxuQEAgLTMzOSwxMyArMzM5LDEzIEBAIG5vaW5saW5lIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIsXFxuIFxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcXG4gXFxuIFxcdGhhbmRsZSA9IHNhdmVfc3RhY2soZ2ZwX21hc2spO1xcbi1cXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsXFxuK1xcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNUl9ORVZFUixcXG4gXFx0XFx0XFx0XFx0ICAgdHNfbnNlYywgY3VycmVudC1cXHUwMDNlcGlkLCBjdXJyZW50LVxcdTAwM2V0Z2lkLFxcbiBcXHRcXHRcXHRcXHQgICBjdXJyZW50LVxcdTAwM2Vjb21tKTtcXG4gXFx0aW5jX3N0YWNrX3JlY29yZF9jb3VudChoYW5kbGUsIGdmcF9tYXNrLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4gfVxcbiBcXG4tdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxcbit2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4gXFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XFxuQEAgLTQyMiw2ICs0MjIsMzkgQEAgdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLlxcbisgKiBUaGlzIHNhZmVseSByZWFkcyB0aGUgYnVkZHkgb3JkZXIgd2l0aG91dCB0aGUgem9uZSBsb2NrLCB3aGljaCBtYXkgY2F1c2UgdXNcXG4rICogdG8gc2tpcCBsZXNzIHRoYW4gdGhlIGZ1bGwgYnVkZHkgYmxvY2ssIGJ1dCB0aGF0IGlzIGFjY2VwdGFibGUgZm9yIHBhZ2Ugb3duZXJcXG4rICogaXRlcmF0aW9uIHB1cnBvc2VzLlxcbisgKlxcbisgKiBUaGUgbG9ja2xlc3MgcmVhZCBvZiBidWRkeV9vcmRlcl91bnNhZmUoKSBjYW4gYWxzbyByZXR1cm4gYSBnYXJiYWdlIG9yZGVyIGlmXFxuKyAqIHRoZSBwYWdlIGlzIGNvbmN1cnJlbnRseSBhbGxvY2F0ZWQgYW5kIFBhZ2VCdWRkeSBpcyBjbGVhcmVkIGJldHdlZW4gdGhlIGNoZWNrXFxuKyAqIGFuZCB0aGUgcmVhZC4gQ2xhbXAgdGhlIGFkdmFuY2UgYXQgdGhlIG5leHQgTUFYX09SREVSX05SX1BBR0VTIGJvdW5kYXJ5IHNvXFxuKyAqIHRoYXQgYSBib2d1cyBvcmRlciBjYW5ub3QgY2FycnkgQHBmbiBpbnRvIGFuIHVudmFsaWRhdGVkIG1lbW9yeSBzZWN0aW9uLFxcbisgKiB3aGljaCB3b3VsZCBicmVhayBjYWxsZXJzIHRoYXQgcmVseSBvbiBib3VuZGFyeS1hbGlnbmVkIHBmbl92YWxpZCgpIGNoZWNrcy5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSxcXG4rICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIG9yZGVyO1xcbitcXG4rXFx0aWYgKCFQYWdlQnVkZHkocGFnZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbitcXHRpZiAob3JkZXIgXFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBuZXdfcGZuID0gKnBmbiArICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGJvdW5kYXJ5ID0gQUxJR04oKnBmbiArIDEsIE1BWF9PUkRFUl9OUl9QQUdFUyk7XFxuK1xcbitcXHRcXHQqcGZuID0gbWluKG5ld19wZm4sIGJvdW5kYXJ5KSAtIDE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4ge1xcbkBAIC00NjEsMTQgKzQ5NCw4IEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0XFx0XFx0aWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjtcXG4tXFxuLVxcdFxcdFxcdFxcdGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbi1cXHRcXHRcXHRcXHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXFxuLVxcdFxcdFxcdFxcdFxcdHBmbiArPSAoMVVMIFxcdTAwM2NcXHUwMDNjIGZyZWVwYWdlX29yZGVyKSAtIDE7XFxuK1xcdFxcdFxcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFxcdTAwMjZwZm4sIHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTUwNSwxMyArNTMyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0c2VxX3B1dGMobSwgJ1xcXFxuJyk7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gLypcXG4gICogTG9va2luZyBmb3IgbWVtY2cgaW5mb3JtYXRpb24gYW5kIHByaW50IGl0IG91dFxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi0jaWZkZWYgQ09ORklHX01FTUNHXFxuIFxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXHRib29sIG9ubGluZTtcXG5AQCAtNTM0LDE1ICs1NjEsMjEgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXFxuIFxcdGNncm91cF9uYW1lKG1lbWNnLVxcdTAwM2Vjc3MuY2dyb3VwLCBuYW1lLCBzaXplb2YobmFtZSkpO1xcbiBcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LFxcbiBcXHRcXHRcXHRcXFwiQ2hhcmdlZCAlc3RvICVzbWVtY2cgJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFBhZ2VNZW1jZ0ttZW0ocGFnZSkgPyBcXFwiKHZpYSBvYmpjZykgXFxcIiA6IFxcXCJcXFwiLFxcbitcXHRcXHRcXHQobWVtY2dfZGF0YSBcXHUwMDI2IE1FTUNHX0RBVEFfS01FTSkgPyBcXFwiKHZpYSBvYmpjZykgXFxcIiA6IFxcXCJcXFwiLFxcbiBcXHRcXHRcXHRvbmxpbmUgPyBcXFwiXFxcIiA6IFxcXCJvZmZsaW5lIFxcXCIsXFxuIFxcdFxcdFxcdG5hbWUpO1xcbiBvdXRfdW5sb2NrOlxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rI2VuZGlmXFxuIFxcbiBzdGF0aWMgc3NpemVfdFxcbiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuQEAgLTU3OSw3ICs2MTIsNyBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdGlmIChyZXQgXFx1MDAzZT0gY291bnQpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4tXFx0aWYgKHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHtcXG4rXFx0aWYgKHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpIHtcXG4gXFx0XFx0cmV0ICs9IHNjbnByaW50ZihrYnVmICsgcmV0LCBjb3VudCAtIHJldCxcXG4gXFx0XFx0XFx0XFxcIlBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XFxuQEAgLTYzMCwxMCArNjYzLDEwIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdGVsc2VcXG4gXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXFxcXG5cXFwiKTtcXG4gXFxuLVxcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUsIGZyZWVfdHMgJWxsdVxcXFxuXFxcIixcXG4rXFx0cHJfYWxlcnQoXFxcInBhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdVxcXFxuXFxcIixcXG4gXFx0XFx0IHBhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBtaWdyYXRldHlwZV9uYW1lc1ttdF0sIGdmcF9tYXNrLCBcXHUwMDI2Z2ZwX21hc2ssXFxuIFxcdFxcdCBwYWdlX293bmVyLVxcdTAwM2VwaWQsIHBhZ2Vfb3duZXItXFx1MDAzZXRnaWQsIHBhZ2Vfb3duZXItXFx1MDAzZWNvbW0sXFxuLVxcdFxcdCBwYWdlX293bmVyLVxcdTAwM2V0c19uc2VjLCBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RzX25zZWMpO1xcbitcXHRcXHQgcGFnZV9vd25lci1cXHUwMDNldHNfbnNlYyk7XFxuIFxcbiBcXHRoYW5kbGUgPSBSRUFEX09OQ0UocGFnZV9vd25lci1cXHUwMDNlaGFuZGxlKTtcXG4gXFx0aWYgKCFoYW5kbGUpXFxuQEAgLTY0NSwxMiArNjc4LDEzIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdGlmICghaGFuZGxlKSB7XFxuIFxcdFxcdHByX2FsZXJ0KFxcXCJwYWdlX293bmVyIGZyZWUgc3RhY2sgdHJhY2UgbWlzc2luZ1xcXFxuXFxcIik7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgcGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdGdpZCk7XFxuK1xcdFxcdHByX2FsZXJ0KFxcXCJwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCB0cyAlbGx1IHN0YWNrIHRyYWNlOlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cXHUwMDNlZnJlZV90Z2lkLFxcbitcXHRcXHRcXHQgIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdHNfbnNlYyk7XFxuIFxcdFxcdHN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChwYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKVxcbitcXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUilcXG4gXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XFxuIFxcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XFxuQEAgLTY5NywxMyArNzMxLDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHBmbik7XFxuLVxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcXG4tXFxuLVxcdFxcdFxcdGlmIChmcmVlcGFnZV9vcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcXG4rXFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuIFxcbiBcXHRcXHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXFxuQEAgLTc5OCwyMCArODI3LDggQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxcbiBcXHRcXHRcXHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVG8gYXZvaWQgaGF2aW5nIHRvIGdyYWIgem9uZS1cXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcXG4tXFx0XFx0XFx0ICogY2FyZWZ1bCB3aGVuIHJlYWRpbmcgYnVkZHkgcGFnZSBvcmRlci4gVGhlIG9ubHlcXG4tXFx0XFx0XFx0ICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzc1xcbi1cXHRcXHRcXHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cXG4tXFx0XFx0XFx0ICogaGVhdnkgbG9jayBjb250ZW50aW9uLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbi1cXG4tXFx0XFx0XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBvcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpIC0gMTtcXG4rXFx0XFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtODI2LDcgKzg0Myw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gXFxuIFxcdFxcdFxcdC8qIEZvdW5kIGVhcmx5IGFsbG9jYXRlZCBwYWdlICovXFxuIFxcdFxcdFxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgLTEsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXFx1MDAzZXBpZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXFx1MDAzZXBpZCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgY3VycmVudC1cXHUwMDNldGdpZCwgY3VycmVudC1cXHUwMDNlY29tbSk7XFxuIFxcdFxcdFxcdGNvdW50Kys7XFxuIGV4dF9wdXRfY29udGludWU6XFxuQEAgLTg4Nyw3ICs5MDQsNyBAQCBzdGF0aWMgdm9pZCAqc3RhY2tfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcHBvcylcXG4gXFx0cmV0dXJuIHN0YWNrO1xcbiB9XFxuIFxcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZXNfdGhyZXNob2xkO1xcbiBcXG4gc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIHtcXG5AQCAtOTA0LDcgKzkyMSw3IEBAIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiBcXHRucl9iYXNlX3BhZ2VzID0gcmVmY291bnRfcmVhZChcXHUwMDI2c3RhY2tfcmVjb3JkLVxcdTAwM2Vjb3VudCkgLSAxO1xcbiBcXG4gXFx0aWYgKGN0eC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1BBR0VTIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAobnJfYmFzZV9wYWdlcyBcXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcXHUwMDNjIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSlcXG4rXFx0ICAgIChucl9iYXNlX3BhZ2VzIFxcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFxcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0spIHtcXG5AQCAtOTI2LDE2ICs5NDMsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIHtcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX29wID0ge1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0ge1xcbiBcXHQuc3RhcnRcXHQ9IHN0YWNrX3N0YXJ0LFxcbiBcXHQubmV4dFxcdD0gc3RhY2tfbmV4dCxcXG4gXFx0LnN0b3BcXHQ9IHN0YWNrX3N0b3AsXFxuIFxcdC5zaG93XFx0PSBzdGFja19wcmludFxcbiB9O1xcbiBcXG4tc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbi1cXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcXHUwMDI2cGFnZV9vd25lcl9zdGFja19vcCxcXG4rXFx0aW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXFx1MDAyNnN0YWNrX29wLFxcbiBcXHRcXHRcXHRcXHQgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpO1xcbiBcXG4gXFx0aWYgKCFyZXQpIHtcXG5AQCAtOTQ4LDI4ICs5NjUsMjYgQEAgc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHtcXG4tXFx0Lm9wZW5cXHRcXHQ9IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbixcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhY2tfZm9wcyA9IHtcXG4rXFx0Lm9wZW5cXHRcXHQ9IHN0YWNrX29wZW4sXFxuIFxcdC5yZWFkXFx0XFx0PSBzZXFfcmVhZCxcXG4gXFx0Lmxsc2Vla1xcdFxcdD0gc2VxX2xzZWVrLFxcbiBcXHQucmVsZWFzZVxcdD0gc2VxX3JlbGVhc2VfcHJpdmF0ZSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxcbitzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxuIHtcXG4tXFx0KnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7XFxuK1xcdCp2YWwgPSBSRUFEX09OQ0UocGFnZXNfdGhyZXNob2xkKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXFxuK3N0YXRpYyBpbnQgdGhyZXNob2xkX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxcbiB7XFxuLVxcdFdSSVRFX09OQ0UocGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQsIHZhbCk7XFxuK1xcdFdSSVRFX09OQ0UocGFnZXNfdGhyZXNob2xkLCB2YWwpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgXFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCxcXG4tXFx0XFx0XFx0XFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgXFxcIiVsbHVcXFwiKTtcXG4tXFxuK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCBcXHUwMDI2dGhyZXNob2xkX2dldCwgXFx1MDAyNnRocmVzaG9sZF9zZXQsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXFxuIHtcXG5AQCAtOTg1LDE3ICsxMDAwLDE3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNob3dfc3RhY2tzXFxcIiwgMDQwMCwgZGlyLFxcbiBcXHRcXHRcXHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXFxuLVxcdFxcdFxcdCAgICAgXFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnN0YWNrX2ZvcHMpO1xcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzaG93X2hhbmRsZXNcXFwiLCAwNDAwLCBkaXIsXFxuIFxcdFxcdFxcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX0hBTkRMRSB8XFxuIFxcdFxcdFxcdFxcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXFxuLVxcdFxcdFxcdCAgICBcXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZzdGFja19mb3BzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic2hvd19zdGFja3NfaGFuZGxlc1xcXCIsIDA0MDAsIGRpcixcXG4gXFx0XFx0XFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxcbiBcXHRcXHRcXHRcXHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFKSxcXG4tXFx0XFx0XFx0ICAgIFxcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xcbitcXHRcXHRcXHQgICAgXFx1MDAyNnN0YWNrX2ZvcHMpO1xcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJjb3VudF90aHJlc2hvbGRcXFwiLCAwNjAwLCBkaXIsIE5VTEwsXFxuLVxcdFxcdFxcdCAgICBcXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcyk7XFxuK1xcdFxcdFxcdCAgICBcXHUwMDI2dGhyZXNob2xkX2ZvcHMpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KVxcbmRpZmYgLS1naXQgYS9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5IGIvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weVxcbmluZGV4IDhlNzEzYTA5Y2ZlNzhmLi5lZWFiYWVlZDQzOGIyYSAxMDA2NDRcXG4tLS0gYS9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5XFxuKysrIGIvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weVxcbkBAIC0zNCw2ICszNCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOlxcbiAgICAgbWF4X3BmbiA9IE5vbmVcXG4gICAgIHBfb3BzID0gTm9uZVxcbiAgICAgbWlncmF0ZV9yZWFzb25fbmFtZXMgPSBOb25lXFxuKyAgICBtcl9uZXZlciA9IE5vbmVcXG4gXFxuICAgICBkZWYgX19pbml0X18oc2VsZik6XFxuICAgICAgICAgc3VwZXIoRHVtcFBhZ2VPd25lciwgc2VsZikuX19pbml0X18oXFxcImx4LWR1bXAtcGFnZS1vd25lclxcXCIsIGdkYi5DT01NQU5EX1NVUFBPUlQpXFxuQEAgLTY1LDYgKzY2LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XFxuICAgICAgICAgc2VsZi5tYXhfcGZuID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbChcXFwibWF4X3BmblxcXCIpKVxcbiAgICAgICAgIHNlbGYucGFnZV9leHRfc2l6ZSA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoXFxcInBhZ2VfZXh0X3NpemVcXFwiKSlcXG4gICAgICAgICBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzID0gZ2RiLnBhcnNlX2FuZF9ldmFsKCdtaWdyYXRlX3JlYXNvbl9uYW1lcycpXFxuKyAgICAgICAgc2VsZi5tcl9uZXZlciA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoJ01SX05FVkVSJykpXFxuIFxcbiAgICAgZGVmIHBhZ2VfZXh0X2ludmFsaWQoc2VsZiwgcGFnZV9leHQpOlxcbiAgICAgICAgIGlmIHBhZ2VfZXh0ID09IGdkYi5WYWx1ZSgwKTpcXG5AQCAtMTM4LDcgKzE0MCw3IEBAIGNsYXNzIER1bXBQYWdlT3duZXIoZ2RiLkNvbW1hbmQpOlxcbiAgICAgICAgIGVsc2U6XFxuICAgICAgICAgICAgIGdkYi53cml0ZSgncGFnZSBsYXN0IGZyZWUgc3RhY2sgdHJhY2U6XFxcXG4nKVxcbiAgICAgICAgICAgICBzdGFja2RlcG90LnN0YWNrX2RlcG90X3ByaW50KHBhZ2Vfb3duZXJbXFxcImZyZWVfaGFuZGxlXFxcIl0pXFxuLSAgICAgICAgaWYgcGFnZV9vd25lclsnbGFzdF9taWdyYXRlX3JlYXNvbiddICE9IC0xOlxcbisgICAgICAgIGlmIHBhZ2Vfb3duZXJbJ2xhc3RfbWlncmF0ZV9yZWFzb24nXSAhPSBzZWxmLm1yX25ldmVyOlxcbiAgICAgICAgICAgICBnZGIud3JpdGUoJ3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxcXG4nICUgc2VsZi5taWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyWydsYXN0X21pZ3JhdGVfcmVhc29uJ11dKVxcbiBcXG4gICAgIGRlZiByZWFkX3BhZ2Vfb3duZXIoc2VsZik6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEyOjM4LjY4MzY3ODA2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTEwNTU1MDA3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVhZF9wYWdlX293bmVyXCIsXG4gICAgXCJwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbW0vcGFnZV9vd25lci5jIHRvIHNhZmVseSBza2lwIGJ1ZGR5IHBhZ2VzIGR1cmluZyBpdGVyYXRpb24sIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgUEZOIGFjY2Vzc2VzIHdoZW4gcmVhZGluZyAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyIG9yIC9wcm9jL3BhZ2V0eXBlaW5mby4gSXQgYWxzbyBmaXhlcyBtZW1jZyBkYXRhIHJlYWRpbmcgaW4gcGFnZSBvd25lci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZDQzNmJmNjkwZWEwZTYwYzM2YTZjZWU5YjMyMzVmYzJiYmU4Yzk5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxMToxMjozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDJhYmFmOTkzMjFlOTBkLi5mYTgyODIzMmRmY2MxOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTE1NCw3ICsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuIGJvb2wgZm9saW9faXNvbGF0ZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuIGludCBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sICpodWdldGxiLCBib29sIHVucG9pc29uKTtcbiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pO1xuK3ZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcbitcdFx0XHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7XG4gdm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gc3RydWN0IG11dGV4ICpodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlO1xuIHUzMiBodWdldGxiX2ZhdWx0X211dGV4X2hhc2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaWR4KTtcbkBAIC00MjQsNyArNDI1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbitcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gXG5AQCAtOTU2LDcgKzk1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcbiBcdHJldHVybiBtb2RpZmllZF9tYXNrO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdGJvb2wgYWxsb3dlZF9mYWxsYmFjayA9IGZhbHNlO1xuIFxuQEAgLTEyMzgsNyArMTIzOSw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxuaW5kZXggZDVhZjJiN2Y1NzdiMzMuLjFmODM5MjQ2MTVkNmQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXG5AQCAtNTcsNyArNTcsOCBAQCB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKTtcbiBpbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXG4gXHRcdHN0cnVjdCBmb2xpbyAqc3JjLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKTtcbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLFxuLVx0XHQgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbitcdFx0ICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXG4rXHRcdCAgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdCAgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKTtcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSk7XG4gYm9vbCBpc29sYXRlX21vdmFibGVfb3BzX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGlzb2xhdGVfbW9kZV90IG1vZGUpO1xuQEAgLTc3LDcgKzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7XG4gc3RhdGljIGlubGluZSB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LFxuIFx0XHRmcmVlX2ZvbGlvX3QgZnJlZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4rXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuK1x0XHR1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4gXHR7IHJldHVybiAtRU5PU1lTOyB9XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsXG4gXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxuaW5kZXggMjY1YzQzMjhiMzZhZDUuLjA1MTAyZDRkMjQ5MGU2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxuQEAgLTI1LDYgKzI1LDcgQEAgZW51bSBtaWdyYXRlX3JlYXNvbiB7XG4gXHRNUl9MT05HVEVSTV9QSU4sXG4gXHRNUl9ERU1PVElPTixcbiBcdE1SX0RBTU9OLFxuK1x0TVJfTkVWRVIsXHRcdC8qIHBhZ2UgaGFzIG5ldmVyIGJlZW4gbWlncmF0ZWQgKi9cbiBcdE1SX1RZUEVTXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXG5pbmRleCAzMzI4MzU3ZjZkYmE3Mi4uOWZlNTFkZmNjZjI2ODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcbkBAIC0zLDYgKzMsNyBAQFxuICNkZWZpbmUgX19MSU5VWF9QQUdFX09XTkVSX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9qdW1wX2xhYmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlX21vZGUuaFx1MDAzZVxuIFxuICNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBwYWdlX293bmVyX2luaXRlZDtcbkBAIC0xNCw3ICsxNSw3IEBAIGV4dGVybiB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuIFx0XHRcdGludCBuZXdfb3JkZXIpO1xuIGV4dGVybiB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZCk7XG4tZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbik7XG4rZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pO1xuIGV4dGVybiB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbiBleHRlcm4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSk7XG5AQCAtNDMsNyArNDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbiBcdFx0X19mb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBvbGQpO1xuIH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG4gXHRcdF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKGZvbGlvLCByZWFzb24pO1xuQEAgLTY4LDcgKzY5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXG4gc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcbmluZGV4IGNkMDFkZDdiMzY0MGRjLi4xNWVlMmVmMjAxYjVmOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXG5AQCAtMjMsNyArMjMsOCBAQFxuIFx0RU0oIE1SX0NPTlRJR19SQU5HRSxcdFwiY29udGlnX3JhbmdlXCIpXHRcdFx0XFxcbiBcdEVNKCBNUl9MT05HVEVSTV9QSU4sXHRcImxvbmd0ZXJtX3BpblwiKVx0XHRcdFxcXG4gXHRFTSggTVJfREVNT1RJT04sXHRcImRlbW90aW9uXCIpXHRcdFx0XFxcbi1cdEVNZShNUl9EQU1PTixcdFx0XCJkYW1vblwiKVxuK1x0RU0oIE1SX0RBTU9OLFx0XHRcImRhbW9uXCIpXHRcdFx0XFxcbitcdEVNZShNUl9ORVZFUixcdFx0XCJuZXZlcl9taWdyYXRlZFwiKVxuIFxuIC8qXG4gICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZVxuQEAgLTUxLDcgKzUyLDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcbiBcdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIGZhaWxlZCxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3N1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyB0aHBfZmFpbGVkLFxuIFx0XHQgdW5zaWduZWQgbG9uZyB0aHBfc3BsaXQsIHVuc2lnbmVkIGxvbmcgbGFyZ2VfZm9saW9fc3BsaXQsXG4tXHRcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcbitcdFx0IGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSxcbiBcbiBcdFRQX0FSR1Moc3VjY2VlZGVkLCBmYWlsZWQsIHRocF9zdWNjZWVkZWQsIHRocF9mYWlsZWQsXG4gXHRcdHRocF9zcGxpdCwgbGFyZ2VfZm9saW9fc3BsaXQsIG1vZGUsIHJlYXNvbiksXG5AQCAtNjQsNyArNjUsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0dGhwX3NwbGl0KVxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0bGFyZ2VfZm9saW9fc3BsaXQpXG4gXHRcdF9fZmllbGQoXHRlbnVtIG1pZ3JhdGVfbW9kZSxcdG1vZGUpXG4tXHRcdF9fZmllbGQoXHRpbnQsXHRcdFx0cmVhc29uKVxuK1x0XHRfX2ZpZWxkKFx0ZW51bSBtaWdyYXRlX3JlYXNvbixcdHJlYXNvbilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbkBAIC05MSwxMyArOTIsMTMgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcbiBcbiBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzX3N0YXJ0LFxuIFxuLVx0VFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXG4rXHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXG4gXG4gXHRUUF9BUkdTKG1vZGUsIHJlYXNvbiksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9tb2RlLCBtb2RlKVxuLVx0XHRfX2ZpZWxkKGludCwgcmVhc29uKVxuK1x0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9yZWFzb24sIHJlYXNvbilcbiBcdCksXG4gXG4gXHRUUF9mYXN0X2Fzc2lnbihcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi4xNzczMmQxZmRjNWVmZCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtNzE4Miw3ICs3MTgyLDggQEAgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGZvbGlvX3B1dChmb2xpbyk7XG4gfVxuIFxuLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbit2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4rXHRcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pO1xuIFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggZDliMjM5MDlkNzE2YzYuLjQ5ZTEwZmVlYjA5NGYwIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC0xNDY5LDcgKzE0NjksNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fbW92ZShmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4gXHRcdHN0cnVjdCBmb2xpbyAqc3JjLCBpbnQgZm9yY2UsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXG4tXHRcdGludCByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbitcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmRzdDtcbiBcdGludCByYyA9IC1FQUdBSU47XG5AQCAtMTYyNiw3ICsxNjI2LDcgQEAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMge1xuICAqL1xuIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuK1x0XHRcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0XHQgICAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zKVxuIHtcbkBAIC0xNzE2LDcgKzE3MTYsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc19tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmRzdF9mb2xpb3MsXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4rXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXG4gXHRcdGludCAqcmV0cnksIGludCAqdGhwX3JldHJ5LCBpbnQgKm5yX2ZhaWxlZCxcbkBAIC0xNzk5LDcgKzE3OTksNyBAQCBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc191bmRvKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4gICovXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG4gXHRcdG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLFxuLVx0XHR1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4rXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcbiB7XG5AQCAtMjAxMSw3ICsyMDExLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sXG4gXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbitcdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzKVxuIHtcbkBAIC0yMDg4LDcgKzIwODgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuICAqL1xuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbitcdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiB7XG4gXHRpbnQgcmMsIHJjX2dhdGhlcjtcbiBcdGludCBucl9wYWdlcztcbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDJkZGRjYjY1MTBhYTFlLi5lZmJmNjdkNTRlZTI2NiAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xuKysrIGIvbW0vcGFnZV9vd25lci5jXG5AQCAtMzM5LDEzICszMzksMTMgQEAgbm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcixcbiBcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbiBcbiBcdGhhbmRsZSA9IHNhdmVfc3RhY2soZ2ZwX21hc2spO1xuLVx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIC0xLFxuK1x0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1SX05FVkVSLFxuIFx0XHRcdFx0ICAgdHNfbnNlYywgY3VycmVudC1cdTAwM2VwaWQsIGN1cnJlbnQtXHUwMDNldGdpZCxcbiBcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNlY29tbSk7XG4gXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbiB9XG4gXG4tdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuK3ZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbiBcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuQEAgLTQyMiw2ICs0MjIsMzkgQEAgdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4rLypcbisgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLlxuKyAqIFRoaXMgc2FmZWx5IHJlYWRzIHRoZSBidWRkeSBvcmRlciB3aXRob3V0IHRoZSB6b25lIGxvY2ssIHdoaWNoIG1heSBjYXVzZSB1c1xuKyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyXG4rICogaXRlcmF0aW9uIHB1cnBvc2VzLlxuKyAqXG4rICogVGhlIGxvY2tsZXNzIHJlYWQgb2YgYnVkZHlfb3JkZXJfdW5zYWZlKCkgY2FuIGFsc28gcmV0dXJuIGEgZ2FyYmFnZSBvcmRlciBpZlxuKyAqIHRoZSBwYWdlIGlzIGNvbmN1cnJlbnRseSBhbGxvY2F0ZWQgYW5kIFBhZ2VCdWRkeSBpcyBjbGVhcmVkIGJldHdlZW4gdGhlIGNoZWNrXG4rICogYW5kIHRoZSByZWFkLiBDbGFtcCB0aGUgYWR2YW5jZSBhdCB0aGUgbmV4dCBNQVhfT1JERVJfTlJfUEFHRVMgYm91bmRhcnkgc29cbisgKiB0aGF0IGEgYm9ndXMgb3JkZXIgY2Fubm90IGNhcnJ5IEBwZm4gaW50byBhbiB1bnZhbGlkYXRlZCBtZW1vcnkgc2VjdGlvbixcbisgKiB3aGljaCB3b3VsZCBicmVhayBjYWxsZXJzIHRoYXQgcmVseSBvbiBib3VuZGFyeS1hbGlnbmVkIHBmbl92YWxpZCgpIGNoZWNrcy5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcGFnZSB3YXMgc2tpcHBlZCAoY2FsbGVyIHNob3VsZCBjb250aW51ZSBpdHMgbG9vcCksXG4rICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBvcmRlcjtcbitcbitcdGlmICghUGFnZUJ1ZGR5KHBhZ2UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbitcdGlmIChvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgbmV3X3BmbiA9ICpwZm4gKyAoMVVMIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4rXHRcdHVuc2lnbmVkIGxvbmcgYm91bmRhcnkgPSBBTElHTigqcGZuICsgMSwgTUFYX09SREVSX05SX1BBR0VTKTtcbitcbitcdFx0KnBmbiA9IG1pbihuZXdfcGZuLCBib3VuZGFyeSkgLSAxO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRcdCAgICAgICBwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiB7XG5AQCAtNDYxLDE0ICs0OTQsOCBAQCB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0aWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjtcbi1cbi1cdFx0XHRcdGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuLVx0XHRcdFx0aWYgKGZyZWVwYWdlX29yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXG4tXHRcdFx0XHRcdHBmbiArPSAoMVVMIFx1MDAzY1x1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xuK1x0XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4gXG4gXHRcdFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTUwNSwxMyArNTMyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdHNlcV9wdXRjKG0sICdcXG4nKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19NRU1DR1xuIC8qXG4gICogTG9va2luZyBmb3IgbWVtY2cgaW5mb3JtYXRpb24gYW5kIHByaW50IGl0IG91dFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIFx0XHRcdFx0XHQgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLSNpZmRlZiBDT05GSUdfTUVNQ0dcbiBcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZGF0YTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdGJvb2wgb25saW5lO1xuQEAgLTUzNCwxNSArNTYxLDIxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxuIFx0Y2dyb3VwX25hbWUobWVtY2ctXHUwMDNlY3NzLmNncm91cCwgbmFtZSwgc2l6ZW9mKG5hbWUpKTtcbiBcdHJldCArPSBzY25wcmludGYoa2J1ZiArIHJldCwgY291bnQgLSByZXQsXG4gXHRcdFx0XCJDaGFyZ2VkICVzdG8gJXNtZW1jZyAlc1xcblwiLFxuLVx0XHRcdFBhZ2VNZW1jZ0ttZW0ocGFnZSkgPyBcIih2aWEgb2JqY2cpIFwiIDogXCJcIixcbitcdFx0XHQobWVtY2dfZGF0YSBcdTAwMjYgTUVNQ0dfREFUQV9LTUVNKSA/IFwiKHZpYSBvYmpjZykgXCIgOiBcIlwiLFxuIFx0XHRcdG9ubGluZSA/IFwiXCIgOiBcIm9mZmxpbmUgXCIsXG4gXHRcdFx0bmFtZSk7XG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuLSNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRyZXR1cm4gcmV0O1xuK31cbisjZW5kaWZcbiBcbiBzdGF0aWMgc3NpemVfdFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbkBAIC01NzksNyArNjEyLDcgQEAgcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuIFx0XHRnb3RvIGVycjtcbiBcbi1cdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHtcbitcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpIHtcbiBcdFx0cmV0ICs9IHNjbnByaW50ZihrYnVmICsgcmV0LCBjb3VudCAtIHJldCxcbiBcdFx0XHRcIlBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuXCIsXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG5AQCAtNjMwLDEwICs2NjMsMTAgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGVsc2VcbiBcdFx0cHJfYWxlcnQoXCJwYWdlX293bmVyIHRyYWNrcyB0aGUgcGFnZSBhcyBmcmVlZFxcblwiKTtcbiBcbi1cdHByX2FsZXJ0KFwicGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1LCBmcmVlX3RzICVsbHVcXG5cIixcbitcdHByX2FsZXJ0KFwicGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1XFxuXCIsXG4gXHRcdCBwYWdlX293bmVyLVx1MDAzZW9yZGVyLCBtaWdyYXRldHlwZV9uYW1lc1ttdF0sIGdmcF9tYXNrLCBcdTAwMjZnZnBfbWFzayxcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlcGlkLCBwYWdlX293bmVyLVx1MDAzZXRnaWQsIHBhZ2Vfb3duZXItXHUwMDNlY29tbSxcbi1cdFx0IHBhZ2Vfb3duZXItXHUwMDNldHNfbnNlYywgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMpO1xuK1x0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjKTtcbiBcbiBcdGhhbmRsZSA9IFJFQURfT05DRShwYWdlX293bmVyLVx1MDAzZWhhbmRsZSk7XG4gXHRpZiAoIWhhbmRsZSlcbkBAIC02NDUsMTIgKzY3OCwxMyBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0aWYgKCFoYW5kbGUpIHtcbiBcdFx0cHJfYWxlcnQoXCJwYWdlX293bmVyIGZyZWUgc3RhY2sgdHJhY2UgbWlzc2luZ1xcblwiKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHByX2FsZXJ0KFwicGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgc3RhY2sgdHJhY2U6XFxuXCIsXG4tXHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCk7XG4rXHRcdHByX2FsZXJ0KFwicGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgdHMgJWxsdSBzdGFjayB0cmFjZTpcXG5cIixcbitcdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkLFxuK1x0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMpO1xuIFx0XHRzdGFja19kZXBvdF9wcmludChoYW5kbGUpO1xuIFx0fVxuIFxuLVx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSlcbitcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpXG4gXHRcdHByX2FsZXJ0KFwicGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cIixcbiBcdFx0XHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcbiBcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XG5AQCAtNjk3LDEzICs3MzEsOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0XHR9XG4gXG4gXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuLVx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdHBmbiArPSAoMVVMIFx1MDAzY1x1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xuK1x0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4gXG4gXHRcdHBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpO1xuIFx0XHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcbkBAIC03OTgsMjAgKzgyNyw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcbi1cdFx0XHQgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seVxuLVx0XHRcdCAqIGRhbmdlciBpcyB0aGF0IHdlIHNraXAgdG9vIG11Y2ggYW5kIHBvdGVudGlhbGx5IG1pc3Ncbi1cdFx0XHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cbi1cdFx0XHQgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRcdGlmIChvcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4rXHRcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtODI2LDcgKzg0Myw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcbiBcdFx0XHQvKiBGb3VuZCBlYXJseSBhbGxvY2F0ZWQgcGFnZSAqL1xuIFx0XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcbi1cdFx0XHRcdFx0XHQgICAtMSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cdTAwM2VwaWQsXG4rXHRcdFx0XHRcdFx0ICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuIFx0XHRcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNldGdpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdFx0XHRjb3VudCsrO1xuIGV4dF9wdXRfY29udGludWU6XG5AQCAtODg3LDcgKzkwNCw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxuIFx0cmV0dXJuIHN0YWNrO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7XG4gXG4gc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuQEAgLTkwNCw3ICs5MjEsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdG5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKFx1MDAyNnN0YWNrX3JlY29yZC1cdTAwM2Vjb3VudCkgLSAxO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyBcdTAwMjZcdTAwMjZcbi1cdCAgICAobnJfYmFzZV9wYWdlcyBcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFx1MDAzYyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCkpXG4rXHQgICAgKG5yX2Jhc2VfcGFnZXMgXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7XG5AQCAtOTI2LDE2ICs5NDMsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuIH1cbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfb3AgPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzdGFja19vcCA9IHtcbiBcdC5zdGFydFx0PSBzdGFja19zdGFydCxcbiBcdC5uZXh0XHQ9IHN0YWNrX25leHQsXG4gXHQuc3RvcFx0PSBzdGFja19zdG9wLFxuIFx0LnNob3dcdD0gc3RhY2tfcHJpbnRcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxuK1x0aW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXHUwMDI2c3RhY2tfb3AsXG4gXHRcdFx0XHQgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpO1xuIFxuIFx0aWYgKCFyZXQpIHtcbkBAIC05NDgsMjggKzk2NSwyNiBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHtcbi1cdC5vcGVuXHRcdD0gcGFnZV9vd25lcl9zdGFja19vcGVuLFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7XG4rXHQub3Blblx0XHQ9IHN0YWNrX29wZW4sXG4gXHQucmVhZFx0XHQ9IHNlcV9yZWFkLFxuIFx0Lmxsc2Vla1x0XHQ9IHNlcV9sc2VlayxcbiBcdC5yZWxlYXNlXHQ9IHNlcV9yZWxlYXNlX3ByaXZhdGUsXG4gfTtcbiBcbi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbitzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4ge1xuLVx0KnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7XG4rXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbitzdGF0aWMgaW50IHRocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiB7XG4tXHRXUklURV9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkLCB2YWwpO1xuK1x0V1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LFxuLVx0XHRcdFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgXCIlbGx1XCIpO1xuLVxuK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCBcdTAwMjZ0aHJlc2hvbGRfZ2V0LCBcdTAwMjZ0aHJlc2hvbGRfc2V0LCBcIiVsbHVcXG5cIik7XG4gXG4gc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcbiB7XG5AQCAtOTg1LDE3ICsxMDAwLDE3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpXG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwic2hvd19zdGFja3NcIiwgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuK1x0XHRcdCAgICAgXHUwMDI2c3RhY2tfZm9wcyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwic2hvd19oYW5kbGVzXCIsIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX1BBR0VTKSxcbi1cdFx0XHQgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2c3RhY2tfZm9wcyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwic2hvd19zdGFja3NfaGFuZGxlc1wiLCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX0hBTkRMRSksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4rXHRcdFx0ICAgIFx1MDAyNnN0YWNrX2ZvcHMpO1xuIFx0ZGVidWdmc19jcmVhdGVfZmlsZShcImNvdW50X3RocmVzaG9sZFwiLCAwNjAwLCBkaXIsIE5VTEwsXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMpO1xuK1x0XHRcdCAgICBcdTAwMjZ0aHJlc2hvbGRfZm9wcyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gbGF0ZV9pbml0Y2FsbChwYWdlb3duZXJfaW5pdClcbmRpZmYgLS1naXQgYS9zY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5IGIvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weVxuaW5kZXggOGU3MTNhMDljZmU3OGYuLmVlYWJhZWVkNDM4YjJhIDEwMDY0NFxuLS0tIGEvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weVxuKysrIGIvc2NyaXB0cy9nZGIvbGludXgvcGFnZV9vd25lci5weVxuQEAgLTM0LDYgKzM0LDcgQEAgY2xhc3MgRHVtcFBhZ2VPd25lcihnZGIuQ29tbWFuZCk6XG4gICAgIG1heF9wZm4gPSBOb25lXG4gICAgIHBfb3BzID0gTm9uZVxuICAgICBtaWdyYXRlX3JlYXNvbl9uYW1lcyA9IE5vbmVcbisgICAgbXJfbmV2ZXIgPSBOb25lXG4gXG4gICAgIGRlZiBfX2luaXRfXyhzZWxmKTpcbiAgICAgICAgIHN1cGVyKER1bXBQYWdlT3duZXIsIHNlbGYpLl9faW5pdF9fKFwibHgtZHVtcC1wYWdlLW93bmVyXCIsIGdkYi5DT01NQU5EX1NVUFBPUlQpXG5AQCAtNjUsNiArNjYsNyBAQCBjbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcbiAgICAgICAgIHNlbGYubWF4X3BmbiA9IGludChnZGIucGFyc2VfYW5kX2V2YWwoXCJtYXhfcGZuXCIpKVxuICAgICAgICAgc2VsZi5wYWdlX2V4dF9zaXplID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbChcInBhZ2VfZXh0X3NpemVcIikpXG4gICAgICAgICBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzID0gZ2RiLnBhcnNlX2FuZF9ldmFsKCdtaWdyYXRlX3JlYXNvbl9uYW1lcycpXG4rICAgICAgICBzZWxmLm1yX25ldmVyID0gaW50KGdkYi5wYXJzZV9hbmRfZXZhbCgnTVJfTkVWRVInKSlcbiBcbiAgICAgZGVmIHBhZ2VfZXh0X2ludmFsaWQoc2VsZiwgcGFnZV9leHQpOlxuICAgICAgICAgaWYgcGFnZV9leHQgPT0gZ2RiLlZhbHVlKDApOlxuQEAgLTEzOCw3ICsxNDAsNyBAQCBjbGFzcyBEdW1wUGFnZU93bmVyKGdkYi5Db21tYW5kKTpcbiAgICAgICAgIGVsc2U6XG4gICAgICAgICAgICAgZ2RiLndyaXRlKCdwYWdlIGxhc3QgZnJlZSBzdGFjayB0cmFjZTpcXG4nKVxuICAgICAgICAgICAgIHN0YWNrZGVwb3Quc3RhY2tfZGVwb3RfcHJpbnQocGFnZV9vd25lcltcImZyZWVfaGFuZGxlXCJdKVxuLSAgICAgICAgaWYgcGFnZV9vd25lclsnbGFzdF9taWdyYXRlX3JlYXNvbiddICE9IC0xOlxuKyAgICAgICAgaWYgcGFnZV9vd25lclsnbGFzdF9taWdyYXRlX3JlYXNvbiddICE9IHNlbGYubXJfbmV2ZXI6XG4gICAgICAgICAgICAgZ2RiLndyaXRlKCdwYWdlIGhhcyBiZWVuIG1pZ3JhdGVkLCBsYXN0IG1pZ3JhdGUgcmVhc29uOiAlc1xcbicgJSBzZWxmLm1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXJbJ2xhc3RfbWlncmF0ZV9yZWFzb24nXV0pXG4gXG4gICAgIGRlZiByZWFkX3BhZ2Vfb3duZXIoc2VsZik6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMjozOC42ODM2Nzk4M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0Mjk4OTQ1ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYXJlIHN1aXRhYmxlIGZvciBmdXp6aW5nLiBUaGUgYWZmZWN0ZWQgZmlsZXMgYXJlOiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBgaW5jbHVkZS9saW51eC9taWdyYXRlLmhgLCBgaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaGAsIGBpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaGAsIGB0cmFjZS9ldmVudHMvbWlncmF0ZS5oYCwgYG1tL2h1Z2V0bGIuY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vcGFnZV9vd25lci5jYCwgYW5kIGBzY3JpcHRzL2dkYi9saW51eC9wYWdlX293bmVyLnB5YC4gVGhhdCdzIGEgZGVjZW50IHNwcmVhZC5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgdGhlcmUncyBhIGdvb2QgYW1vdW50IG9mIHJlZmFjdG9yaW5nLiBQYXJhbWV0ZXIgc2lnbmF0dXJlcyBmb3IgZnVuY3Rpb25zIGxpa2UgYG1vdmVfaHVnZXRsYl9zdGF0ZWAsIGBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrYCwgYG1pZ3JhdGVfcGFnZXNgLCBhbmQgYF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uYCBhcmUgY2hhbmdpbmcgZnJvbSBgaW50IHJlYXNvbmAgdG8gYGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uYC4gVGhlIGBNUl9ORVZFUmAgdmFsdWUgaXMgYmVpbmcgYWRkZWQgdG8gdGhhdCBlbnVtLiBUcmFjZXBvaW50cyBhcmUgYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBlbnVtIGFzIHdlbGwuIFRoYXQncyBnb29kIHByYWN0aWNlLiBDbGVhbiB1cC5cblxuRGl2aW5nIGRlZXBlciBpbnRvIGBtbS9wYWdlX293bmVyLmNgLCB0aGVyZSBhcmUgc2V2ZXJhbCBjaGFuZ2VzOiByZXBsYWNpbmcgYC0xYCB3aXRoIGBNUl9ORVZFUmAsIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgc2tpcF9idWRkeV9wYWdlc2AsIGFuZCB1cGRhdGVzIHRvIGZ1bmN0aW9ucyBsaWtlIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgLCBgcmVhZF9wYWdlX293bmVyYCwgYGluaXRfcGFnZXNfaW5fem9uZWAsIGBwcmludF9wYWdlX293bmVyX21lbWNnYCwgYHByaW50X3BhZ2Vfb3duZXJgLCBhbmQgYF9fZHVtcF9wYWdlX293bmVyYC4gUGx1cywgc29tZSByZW5hbWluZyBvZiB2YXJpYWJsZXMuIFRoZSB1c2Ugb2YgYE1FTUNHX0RBVEFfS01FTWAgaW5zdGVhZCBvZiBgUGFnZU1lbWNnS21lbWAgaW4gYHByaW50X3BhZ2Vfb3duZXJfbWVtY2dgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIHRoYXQncyBsaWtlbHkgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBiZWluZyBoYW5kbGVkLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCBgUGFnZU1lbWNnS21lbWAgd2Fzbid0IGp1c3QgcmVtb3ZlZCBhbmQgcmVwbGFjZWQuXG5cblRoZSBrZXkgdGhpbmcgaXMgdGhpcyBgc2tpcF9idWRkeV9wYWdlc2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGZ1enppbmcgcmVsZXZhbmNlIGNvbWVzIGluLiBOb3csIGlzIGl0IHJlYWNoYWJsZSBhbmQgZnV6ei13b3J0aHk/XG5cbmBtbS9wYWdlX293bmVyLmNgIGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19QQUdFX09XTkVSYC4gT2theSwgc28gaXQncyBhIGRlYnVnIGZlYXR1cmUuIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgIGlzIHVzZWQgaW4gYC9wcm9jL3BhZ2V0eXBlaW5mb2AsIGFuZCBgcmVhZF9wYWdlX293bmVyYCBpcyB1c2VkIGZvciBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAsIGFuZCBgaW5pdF9wYWdlc19pbl96b25lYCBpcyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuXG5TbywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBNb3N0bHksIHRoZXNlIGNoYW5nZXMgc2VlbSBsaWtlIHJlZmFjdG9yaW5nIGFuZCBmaXhpbmcgc29tZSBkZWJ1Z2ZzIGFuZCBwcm9jZnMgb3V0cHV0LCBhbG9uZyB3aXRoIGFuIG9wdGltaXphdGlvbi9maXggZm9yIGJ1ZGR5IHBhZ2Ugc2tpcHBpbmcgaW4gcGFnZV9vd25lci4gVGhpcyBkZWJ1Z2dpbmcgY29kZSBpcyBleHBvc2VkIGluIHByb2MgYW5kIGRlYnVnZnMsIHNvIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gaXMgcG9zc2libGUuXG5cblRoYXQgYHNraXBfYnVkZHlfcGFnZXNgIGZ1bmN0aW9uIGxvZ2ljOlxuXG5gYGBjXG5zdGF0aWMgaW5saW5lIGJvb2wgc2tpcF9idWRkeV9wYWdlcyh1bnNpZ25lZCBsb25nICpwZm4sIHN0cnVjdCBwYWdlICpwYWdlKVxue1xuXHR1bnNpZ25lZCBsb25nIG9yZGVyO1xuXG5cdGlmICghUGFnZUJ1ZGR5KHBhZ2UpKVxuXHRcdHJldHVybiBmYWxzZTtcblxuXHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcblx0aWYgKG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpIHtcblx0XHR1bnNpZ25lZCBsb25nIG5ld19wZm4gPSAqcGZuICsgKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuXHRcdHVuc2lnbmVkIGxvbmcgYm91bmRhcnkgPSBBTElHTigqcGZuICsgMSwgTUFYX09SREVSX05SX1BBR0VTKTtcblxuXHRcdCpwZm4gPSBtaW4obmV3X3BmbiwgYm91bmRhcnkpIC0gMTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufVxuYGBgXG5cblRoaXMgKmNvdWxkKiBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb3IgZXZlbiBhbiBpbmZpbml0ZSBsb29wIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgb3IgYC9wcm9jL3BhZ2V0eXBlaW5mb2AuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlIHdpdGhpbiBhIGRlYnVnIGZlYXR1cmUuIEl0J3MgYW4gaW1wb3J0YW50IGZpeC5cblxuT2gsIGFuZCBgc2tpcF9idWRkeV9wYWdlc2AgaXMgYWN0dWFsbHkgdXNlZCBpbiBgcmVhZF9wYWdlX293bmVyYCwgYSAqZmlsZSByZWFkKiBvcGVyYXRpb24uIFllcywgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEyOjUyLjk4MjYyODIwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc5ODk1NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9wYWdlX293bmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2Vfb3duZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX293bmVyLmM9NjkzPXN0YXRpYyBzc2l6ZV90XFxubW0vcGFnZV9vd25lci5jOjY5NDpyZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbm1tL3BhZ2Vfb3duZXIuYy02OTUte1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTg2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdlX293bmVyX2ZvcHMgPSB7XFxubW0vcGFnZV9vd25lci5jOjg2ODpcXHQucmVhZFxcdFxcdD0gcmVhZF9wYWdlX293bmVyLFxcbm1tL3BhZ2Vfb3duZXIuYy04NjktXFx0Lmxsc2Vla1xcdFxcdD0gbHNlZWtfcGFnZV9vd25lcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MTI6NTMuNDMwNjI0MDY5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzNjU5MjY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gUGFnZSBPd25lciBcdTAwMjYgUGFnZXR5cGVpbmZvKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhpcyBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgdHJpZ2dlciBzb21ldGhpbmcuIEludGVyZXN0aW5nLiBBbmQgaXQgbG9va3MgbGlrZSBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCBwbGF5cyBhIHJvbGUgaW4gYC9wcm9jL3BhZ2V0eXBlaW5mb2AuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBjb25uZWN0aW9uIGlzIHByZXR0eSBjbGVhci4gVGhlc2UgYXJlIGxpa2VseSByZWxhdGVkIHRvIHRyYWNraW5nIGFuZCByZXBvcnRpbmcgb24gbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBhZ2UgdHlwZXMsIHBhcnRpY3VsYXJseSBtaXhlZCBwYWdlcy4gTm93IEkgbmVlZCB0byBkaXZlIGludG8gYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAgc3BlY2lmaWNhbGx5LiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgZm9yIGRpc3BsYXlpbmcgdGhlIGNvdW50cyBvZiBtaXhlZCBwYWdlIHR5cGVzLCB3aGljaCBpcyBlc3NlbnRpYWwgaW5mb3JtYXRpb24gd2hlbiB5b3UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBmcmFnbWVudGF0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBpcyB1c2luZyBkaWZmZXJlbnQgcGFnZSBzaXplcy4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nIGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzE2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MTI6NTYuODY3MjE5MjczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDU5MzU5MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaD0xOT1leHRlcm4gdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmg6MjA6ZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG5pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaC0yMS1cXHRcXHRcXHRcXHRcXHRwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9NDQwPXN0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtNDU3LVxcbm1tL3BhZ2Vfb3duZXIuYzo0NTg6dm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbm1tL3BhZ2Vfb3duZXIuYy00NTktXFx0XFx0XFx0XFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxcbi0tXFxubW0vdm1zdGF0LmM9MTY4ND1zdGF0aWMgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnQoc3RydWN0IHNlcV9maWxlICptLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zdGF0LmMtMTY5OS1cXHR3YWxrX3pvbmVzX2luX25vZGUobSwgcGdkYXQsIHRydWUsIHRydWUsXFxubW0vdm1zdGF0LmM6MTcwMDpcXHRcXHRwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQpO1xcbm1tL3Ztc3RhdC5jLTE3MDEtI2VuZGlmIC8qIENPTkZJR19QQUdFX09XTkVSICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEyOjU5LjUxMzE2MjQ5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMDExNjc2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBgbW0vcGFnZV9vd25lci5jYCBDaGFuZ2VzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzLCBpdCBzZWVtcyBsaWtlIHRoZSBtb3N0IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYWx0ZXJhdGlvbnMgYXJlIGhhcHBlbmluZyBpbiBgbW0vcGFnZV9vd25lci5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IGJ1ZGR5IHBhZ2VzIGFyZSBza2lwcGVkLiBUaGUgbW9kaWZpY2F0aW9ucyBpbiBgbW0vbWlncmF0ZS5jYCwgYG1tL2h1Z2V0bGIuY2AsIGFuZCBgaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oYCBhcmUgbW9zdGx5IHR5cGUgY2hhbmdlcyBhbmQgdHJhY2Vwb2ludCB1cGRhdGVzIOKAkyBwcm9iYWJseSBub3QgdGhlIHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcuIEFuZCB0aGUgYHNjcmlwdHMvZ2RiL2xpbnV4L3BhZ2Vfb3duZXIucHlgIGNoYW5nZXMgYXJlIGp1c3QgZm9yIEdEQiBzY3JpcHRpbmcuXG5cbk15IGd1dCBzYXlzIHRoaXMgaXMgd29ydGggYSBmdXp6aW5nIGVmZm9ydC4gVGhlIGNvbW1pdCBtZXNzYWdlIGxpa2VseSBoaWdobGlnaHRzIGEgYnVnIGZpeCDigJMgcG90ZW50aWFsbHkgYSBmaXggZm9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGlzc3VlcyB3aXRoIGludmFsaWQgUEZOcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHBhZ2VzIGluIGBwYWdlX293bmVyYCBhbmQgYHBhZ2V0eXBlaW5mb2AuIFRoZSBgc2tpcF9idWRkeV9wYWdlc2AgZnVuY3Rpb24gaXMgbGlrZWx5IHRoZSBjcnV4IG9mIHRoZSBmaXgsIGFpbWluZyB0byBhZGRyZXNzIGEgc2l0dWF0aW9uIHdoZXJlIGBidWRkeV9vcmRlcl91bnNhZmVgIG1pZ2h0IHJldHVybiBhIGdhcmJhZ2Ugb3JkZXIsIGxlYWRpbmcgdG8gdW52YWxpZGF0ZWQgbWVtb3J5IGFjY2Vzcy5cblxuV2Ugc2hvdWxkIHRhcmdldCBmdXp6aW5nIGJ5IHJlYWRpbmcgZnJvbSBgL3N5cy9rZXJuZWwvZGVidWcvcGFnZV9vd25lcmAgYW5kIGAvcHJvYy9wYWdldHlwZWluZm9gLiBUaGUgYFBBR0VfT1dORVJgIGNvbmZpZyBvcHRpb24gaXMgZXNzZW50aWFsLCBvZiBjb3Vyc2UuIEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgb2YgZm9jdXNpbmcgb24gYHJlYWRfcGFnZV9vd25lcmAsIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgLCBhbmQgYHNraXBfYnVkZHlfcGFnZXNgLiBCdXQgd2FpdCwgYHNraXBfYnVkZHlfcGFnZXNgIGlzICppbmxpbmUqISBUaGF0IGNvbXBsaWNhdGVzIHRoaW5ncywgc28gd2UgbmVlZCB0byBjb25jZW50cmF0ZSBvbiBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAgaW5zdGVhZC5cblxuSSBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbmFsIGNoYW5nZXMgSSdtIG1pc3NpbmcuIEFoLCBgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb25gIGlzIGp1c3QgYSB0eXBlIGNoYW5nZS4gVGhlbiwgYHByaW50X3BhZ2Vfb3duZXJfbWVtY2dgIGlzIGNoYW5naW5nIGBQYWdlTWVtY2dLbWVtKHBhZ2UpYCB0byBgKG1lbWNnX2RhdGEgXHUwMDI2IE1FTUNHX0RBVEFfS01FTSlgLiBIbW1tLCBJIG5lZWQgdG8gbG9vayBpbnRvIHRoYXQgYFBhZ2VNZW1jZ0ttZW1gIGJpdC4uLiBkaWQgaXQgZ2V0IHJlbW92ZWQgb3IgcmVuYW1lZD8gTGV0J3MgY2hlY2sgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzE5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEzOjA2LjgxNDMzMjIxMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI5MjIyNjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBhZ2VNZW1jZ0ttZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTUwNj1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNTEyLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjUxMzpzdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC01MTQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTA1OT1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTA2My1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMDY0OnN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKHN0cnVjdCBwYWdlICpwYWdlKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEwNjUte1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTEzMTQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIF9fZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTEzMzAtXFxubW0vcGFnZV9hbGxvYy5jOjEzMzE6XFx0aWYgKG1lbWNnX2ttZW1fb25saW5lKCkgXFx1MDAyNlxcdTAwMjYgUGFnZU1lbWNnS21lbShwYWdlKSlcXG5tbS9wYWdlX2FsbG9jLmMtMTMzMi1cXHRcXHRfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShwYWdlLCBvcmRlcik7XFxuLS1cXG5tbS9zbHViLmM9MjUwOD1ib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmMtMjUyMS1cXG5tbS9zbHViLmM6MjUyMjpcXHRcXHRpZiAoUGFnZU1lbWNnS21lbShwYWdlKSlcXG5tbS9zbHViLmMtMjUyMy1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MTM6MDkuNTQzNTY0NTY0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY0MzIwNDUzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNwb3QgYSBmYW1pbGlhciBmYWNlOiBgUGFnZU1lbWNnS21lbWAuIEFoLCByaWdodCwgdGhleSd2ZSB1cGRhdGVkIGhvdyBpdCdzIGhhbmRsZWQsIG5vdyBpdCdzIHR1Y2tlZCBhd2F5IGluIGBtbS9wYWdlX293bmVyLmNgIGFuZCByZXByZXNlbnRlZCBhcyBgKG1lbWNnX2RhdGEgXHUwMDI2IE1FTUNHX0RBVEFfS01FTSlgLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQgbWUgc2VlLi4uIEkgc2VlIHRoZXkncmUgcmVhZGluZyBgbWVtY2dfZGF0YWAgbG9ja2xlc3NseTpcblxuYGBgY1xuXHRtZW1jZ19kYXRhID0gUkVBRF9PTkNFKHBhZ2UtXHUwMDNlbWVtY2dfZGF0YSk7XG5cdGlmICghbWVtY2dfZGF0YSlcblx0XHRnb3RvIG91dF91bmxvY2s7XG5cblx0bWVtY2cgPSBwYWdlX21lbWNnX2NoZWNrKHBhZ2UpO1xuYGBgXG5cblRoZW4gdGhleSdyZSBjaGVja2luZyBpdCB3aXRoIGEgYml0d2lzZSBBTkQgb3BlcmF0aW9uIC0gYChtZW1jZ19kYXRhIFx1MDAyNiBNRU1DR19EQVRBX0tNRU0pYC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCwgbWlub3IgYWRqdXN0bWVudC5cblxuQnV0IHRoZSBtZWF0IG9mIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGludHJvZHVjdGlvbiBvZiBgc2tpcF9idWRkeV9wYWdlc2AuIEludGVyZXN0aW5nLiBUaGUgcXVlc3Rpb24gbm93IGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCdzIHNlZS4uLiBZZXAsIHRoaXMgYWRkcmVzc2VzIGEgYnVnIGluIHBhZ2UgaXRlcmF0aW9uLCB3aGljaCBJIHNlZSBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIGJ5IHJlYWRpbmcgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIG9yIGAvcHJvYy9wYWdldHlwZWluZm9gLiBHaXZlbiBpdCdzIHVzZXItYWNjZXNzaWJsZSBhbmQgZml4ZXMgYSBidWcsIGFic29sdXRlbHksIGZ1enppbmcgdGhpcyBpcyB0aGUgcmlnaHQgY2FsbC4gVGhlIHJpc2svcmV3YXJkIHJhdGlvIGlzIGRlZmluaXRlbHkgdGhlcmUuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBgQ09ORklHX1BBR0VfT1dORVJgIGlzIGVuYWJsZWQsIGp1c3QgdG8gYmUgc3VyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzY0NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMzoxNy4xODY3NzIxNzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTY2MTk4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfT1dORVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxcbm1tL0tjb25maWcuZGVidWctMTA2LVxcdGJvb2wgXFxcIlRyYWNrIHBhZ2Ugb3duZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEzOjE5LjgwMzQwMTg5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ4NTE0ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIFBhZ2UgT3duZXIgQ29uZmlndXJhdGlvbiBhbmQgUnVudGltZSBSZWFjaGFiaWxpdHkqKlxuXG5SaWdodCwgc28gYFBBR0VfT1dORVJgLi4uIHRoYXQncyBvdXIga2V5IGNvbmZpZ3VyYXRpb24gcG9pbnQuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgYWZmZWN0cyB0aGUgc3lzdGVtLCBhbmQgcmlnaHQgbm93LCB0aGUgcHJpbWFyeSBzeW1ib2xzIGRyYXdpbmcgbXkgYXR0ZW50aW9uIGFyZSBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAuIFRoZXNlIGFyZSBsaWtlbHkgY3J1Y2lhbCBmb3IgYWNjZXNzaW5nIGFuZCBkaXNwbGF5aW5nIHBhZ2Ugb3duZXJzaGlwIGluZm9ybWF0aW9uLCB3aGljaCwgZ2l2ZW4gdGhlIGNvbnRleHQsIHByb2JhYmx5IG1lYW5zIHRyYWNraW5nIG1lbW9yeSBhbGxvY2F0aW9uLlxuXG5Ob3csIGhvbGQgb24uLi4gSSBzZWUgdGhhdCBgaW5pdF9wYWdlc19pbl96b25lYCBnZXRzIG1vZGlmaWVkIHRvby4gVGhhdCdzIGludGVyZXN0aW5nLCBiZWNhdXNlIHRoYXQncyBjYWxsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBpc24ndCB1c3VhbGx5IHNvbWV0aGluZyBJJ2QgaW1tZWRpYXRlbHkgYXNzb2NpYXRlIHdpdGggcnVudGltZSBiZWhhdmlvci4gVGhlIHF1ZXN0aW9uIG5vdyBpczogaXMgYGluaXRfcGFnZXNfaW5fem9uZWAgYWN0dWFsbHkgKnJlYWNoYWJsZSogZHVyaW5nIHJ1bnRpbWU/IEV2ZW4gdGhvdWdoIGl0J3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGNvdWxkIHNvbWV0aGluZyBsYXRlciBvbiBjYXVzZSBpdCB0byBiZSBleGVjdXRlZCBhZ2Fpbiwgb3IgaW50ZXJhY3Qgd2l0aCBpdHMgcmVzdWx0cz8gVGhhdCdzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgcGF0aCBhbmQgc2VlIGlmIGl0J3MgcG90ZW50aWFsbHkgY2FsbGVkIGF0IHNvbWUgcG9pbnQsIG9yIGl0cyBpbml0aWFsIHN0YXRlIHVzZWQgYXQgcnVudGltZSBpbiBhbiB1bmV4cGVjdGVkIHdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMzoyNC4wNTE5MTk0MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTY4MzA0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5pdF9wYWdlc19pbl96b25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX293bmVyLmM9Mjk4PXZvaWQgX19yZXNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcilcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zMjYtXFx0XFx0ICogZWFybHlfaGFuZGxlIGlzIGJlaW5nIHNldCBhcyBhIGhhbmRsZSBmb3IgYWxsIHRob3NlXFxubW0vcGFnZV9vd25lci5jOjMyNzpcXHRcXHQgKiBlYXJseSBhbGxvY2F0ZWQgcGFnZXMuIFNlZSBpbml0X3BhZ2VzX2luX3pvbmUoKS5cXG5tbS9wYWdlX293bmVyLmMtMzI4LVxcdFxcdCAqIFNpbmNlIHRoZWlyIHJlZmNvdW50IGlzIG5vdCBiZWluZyBpbmNyZW1lbnRlZCBiZWNhdXNlXFxuLS1cXG5tbS9wYWdlX293bmVyLmM9Nzg2PXN0YXRpYyBsb2ZmX3QgbHNlZWtfcGFnZV9vd25lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtODAwLVxcbm1tL3BhZ2Vfb3duZXIuYzo4MDE6c3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxcbm1tL3BhZ2Vfb3duZXIuYy04MDIte1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTg1OT1zdGF0aWMgdm9pZCBpbml0X2Vhcmx5X2FsbG9jYXRlZF9wYWdlcyh2b2lkKVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTg2My1cXHRmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKVxcbm1tL3BhZ2Vfb3duZXIuYzo4NjQ6XFx0XFx0aW5pdF9wYWdlc19pbl96b25lKHpvbmUpO1xcbm1tL3BhZ2Vfb3duZXIuYy04NjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMzoyNi42MDg3NTQzODdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzNTk0NTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFnZSBPd25lciBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gYGluaXRfcGFnZXNfaW5fem9uZWAgaXMgZGVmaW5pdGVseSBhIGtlcm5lbC1sZXZlbCBmdW5jdGlvbiwgY2FsbGVkIHdheSBlYXJseSBkdXJpbmcgdGhlIGJvb3QgcHJvY2VzcyB2aWEgYGluaXRfZWFybHlfYWxsb2NhdGVkX3BhZ2VzYC4gTm8gdXNlciBzcGFjZSBpbnRlcmFjdGlvbiB0aGVyZS4gQnV0IGByZWFkX3BhZ2Vfb3duZXJgIGFuZCBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YCwgdGhvc2UgYXJlIGFjY2Vzc2libGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB3b3JrLlxuXG5JIHNob3VsZCBjaGVjayB0aGUgc291cmNlIGZvciBgcmVhZF9wYWdlX293bmVyYCwgdGhhdCdzIGluIGBtbS9wYWdlX293bmVyLmNgLiBGcm9tIHdoYXQgSSBrbm93LCBpdCBhcHBlYXJzIHRoYXQgdGhpcyBpcyB0aGUgYC5yZWFkYCBvcGVyYXRpb24gZm9yIGAvc3lzL2tlcm5lbC9kZWJ1Zy9wYWdlX293bmVyYC4gVGhhdCBtYWtlcyBzZW5zZS4gQW5kIGBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRgIHNob3dzIHVwIGluIGAvcHJvYy9wYWdldHlwZWluZm9gLlxuXG5Ob3csIEknbSB0aGlua2luZywgYXJlIHRoZXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcz8gSSBrbm93IHRoYXQgYFBBR0VfT1dORVJgIGRlcGVuZHMgb24gYERFQlVHX0tFUk5FTGAgYW5kIGBTVEFDS1RSQUNFX1NVUFBPUlRgLCBzbyBsZXQgbWUgdGFrZSBhIGxvb2sgYXQgYG1tL0tjb25maWcuZGVidWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlciBjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZCB0byB1c2UgdGhlc2UgZmVhdHVyZXMgcHJvcGVybHkgYW5kIHRoYXQgSSB1bmRlcnN0YW5kIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MTM6MzAuOTQ0NzAzNTAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcxNjgxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBBR0VfT1dORVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTczPWNvbmZpZyBTTFVCX1JDVV9ERUJVR1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0xMDQtXFxubW0vS2NvbmZpZy5kZWJ1ZzoxMDU6Y29uZmlnIFBBR0VfT1dORVJcXG5tbS9LY29uZmlnLmRlYnVnLTEwNi1cXHRib29sIFxcXCJUcmFjayBwYWdlIG93bmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMzozMS4wOTE4Nzc3MDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNjkzNTYxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBEZWJ1ZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIGRpZyBpbnRvIHRoZXNlIGRlYnVnIG9wdGlvbnM/IE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEwNS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgZ3JhbnVsYXIgZGVidWcgZmVhdHVyZXMgYXJlIGRlZmluZWQsIHJpZ2h0PyBJJ20gYW50aWNpcGF0aW5nIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGRldGVybWluZSBob3cgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGRlYnVnZ2luZyBpcyBoYW5kbGVkLCBlc3BlY2lhbGx5IHNpbmNlIHdlJ3JlIGxvb2tpbmcgYXQgdGhpbmdzIHRoYXQgYXJlIHR5cGljYWxseSBlbmFibGVkIGR1cmluZyBkZXZlbG9wbWVudCBvciBmb3IgdmVyeSBzcGVjaWZpYyB0cm91Ymxlc2hvb3RpbmcuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZmlsZSB3aWxsIG9mZmVyIGEgY2xlYXIgb3ZlcnZpZXcgb2YgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBkZXNjcmlwdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRlYnVnIGZlYXR1cmVzIGluIHRoaXMgcGFydCBvZiB0aGUga2VybmVsIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDk4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MTM6MzQuMjk4ODE0OTA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdCAgVGhpcyBpcyBkZXNpZ25lZCBhcyBhIGRlYnVnZ2luZyBmZWF0dXJlLCBub3QgYSBzZWN1cml0eSBmZWF0dXJlLlxcbiAxMDE6XFx0XFx0ICBPYmplY3RzIGFyZSBzb21ldGltZXMgcmVjeWNsZWQgd2l0aG91dCBSQ1UgZGVsYXkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEwNDpcXHRcXG4gMTA1OlxcdGNvbmZpZyBQQUdFX09XTkVSXFxuIDEwNjpcXHRcXHRib29sIFxcXCJUcmFjayBwYWdlIG93bmVyXFxcIlxcbiAxMDc6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuIDEwODpcXHRcXHRzZWxlY3QgREVCVUdfRlNcXG4gMTA5OlxcdFxcdHNlbGVjdCBTVEFDS1RSQUNFXFxuIDExMDpcXHRcXHRzZWxlY3QgU1RBQ0tERVBPVFxcbiAxMTE6XFx0XFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXFxuIDExMjpcXHRcXHRoZWxwXFxuIDExMzpcXHRcXHQgIFRoaXMga2VlcHMgdHJhY2sgb2Ygd2hhdCBjYWxsIGNoYWluIGlzIHRoZSBvd25lciBvZiBhIHBhZ2UsIG1heVxcbiAxMTQ6XFx0XFx0ICBoZWxwIHRvIGZpbmQgYmFyZSBhbGxvY19wYWdlKHMpIGxlYWtzLiBFdmVuIGlmIHlvdSBpbmNsdWRlIHRoaXNcXG4gMTE1OlxcdFxcdCAgZmVhdHVyZSBvbiB5b3VyIGJ1aWxkLCBpdCBpcyBkaXNhYmxlZCBpbiBkZWZhdWx0LiBZb3Ugc2hvdWxkIHBhc3NcXG4gMTE2OlxcdFxcdCAgXFxcInBhZ2Vfb3duZXI9b25cXFwiIHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC4gRWF0c1xcbiAxMTc6XFx0XFx0ICBhIGZhaXIgYW1vdW50IG9mIG1lbW9yeSBpZiBlbmFibGVkLiBTZWUgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcXG4gMTE4OlxcdFxcdCAgZm9yIHVzZXItc3BhY2UgaGVscGVyLlxcbiAxMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEzOjM0LjI5ODg3NjYzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ3MzM3MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIGEgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSwgYW5kIHRoZSBpbml0aWFsIG5vdGUgc2F5cywgXCJZb3Ugc2hvdWxkIHBhc3MgJ3BhZ2Vfb3duZXI9b24nIHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC5cIiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gSSBrbm93IHN5emthbGxlciAqdXN1YWxseSogaGFuZGxlcyB0aGF0IGF1dG9tYXRpY2FsbHkgaWYgYENPTkZJR19QQUdFX09XTkVSYCBpcyBzZXQuIEhvd2V2ZXIsIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCBvbmx5ICptaWdodCogZG8gdGhhdC4gU28sIHRvIGJlIHNhZmUsIHdlIGNhbiBqdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSBgUEFHRV9PV05FUmAgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IHNob3VsZCBiZSB0aGUgY2xlYW5lc3Qgd2F5IHRvIGRvIHRoaXMuIFdhaXQsIHN5emthbGxlciBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgcGFzcyBib290IHBhcmFtZXRlcnMgYmFzZWQgb24gY29uZmlncyB1bmxlc3MgY29uZmlndXJlZCBpbiB0aGUgc3l6a2FsbGVyIG1hbmFnZXIsIHJpZ2h0PyBUaGF0J3MgcmlnaHQsIGFuZCB3ZSB3ZXJlIGFza2VkIHRvIHByb3ZpZGUgYEVuYWJsZUNvbmZpZ3NgLiBGaW5lLCBzbyB0aGF0J3MgaGFuZGxlZC4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gTm8sIGp1c3QgYFBBR0VfT1dORVJgIGlzIG1lbnRpb25lZC5cblxuQnV0IHdhaXQsIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYG1tL21pZ3JhdGUuY2AgYW5kIGBtbS9odWdldGxiLmNgLiBPaCwgdGhvc2UgYXJlIGp1c3QgbWlub3IsIHB1cmVseSBkZWNvcmF0aXZlLCByZWZhY3RvcmluZyBjaGFuZ2VzLiBUaGV5J3JlIGNoYW5naW5nIGBpbnQgcmVhc29uYCB0byBgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb25gLiBEb2Vzbid0IGFmZmVjdCBhbnl0aGluZyBmdW5jdGlvbmFsbHkuIFRoZSAqcmVhbCogZnVuY3Rpb25hbCBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGBza2lwX2J1ZGR5X3BhZ2VzYCBpbiBgbW0vcGFnZV9vd25lci5jYC4gTm93LCBgc2tpcF9idWRkeV9wYWdlc2AgaXMgaW50ZXJlc3RpbmcuIEl0ICpwcmV2ZW50cyogcmVhZGluZyBhIGdhcmJhZ2Ugb3JkZXIgYW5kIHNraXBwaW5nIGludG8gYW4gdW52YWxpZGF0ZWQgbWVtb3J5IHNlY3Rpb24uIFRoYXQgc291bmRzIGxpa2UgYSBsZWdpdGltYXRlIGJ1ZyBmaXguIEEgdmVyeSBpbXBvcnRhbnQgb25lLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGlmIGBza2lwX2J1ZGR5X3BhZ2VzYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGtlcm5lbCBiZXNpZGVzIGBtbS9wYWdlX293bmVyLmNgLiBOb3BlLCBvbmx5IHRoZXJlLiBJdCdzIGxvY2FsaXplZCB0byB0aGF0IG1vZHVsZSwgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkb3VibGUgY2hlY2sgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAsIGp1c3QgdG8gbWFrZSBzdXJlIG5vIHN1YnRsZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjEzOjQxLjM0NjIxNjgyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3OTMxNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXN0YXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXN0YXQuYz0xNjg0PXN0YXRpYyB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXN0YXQuYy0xNjk5LVxcdHdhbGtfem9uZXNfaW5fbm9kZShtLCBwZ2RhdCwgdHJ1ZSwgdHJ1ZSxcXG5tbS92bXN0YXQuYzoxNzAwOlxcdFxcdHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludCk7XFxubW0vdm1zdGF0LmMtMTcwMS0jZW5kaWYgLyogQ09ORklHX1BBR0VfT1dORVIgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MTM6NDEuNTA0MTU0MjgxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDk2NjcyNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBwYWdlX293bmVyIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBhZmZlY3RzIGBtbS92bXN0YXQuY2AgdW5kZXIgYENPTkZJR19QQUdFX09XTkVSYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlcmUgYXJlIHR3byBwcmltYXJ5IGZ1bmN0aW9uYWwgY2hhbmdlczpcblxuMS4gIFRoZSBgc2tpcF9idWRkeV9wYWdlc2AgbG9naWMgaXMgbW9kaWZpZWQgd2l0aGluIGByZWFkX3BhZ2Vfb3duZXJgIGFuZCBgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50YC5cbjIuICBgcHJpbnRfcGFnZV9vd25lcl9tZW1jZ2Agbm93IHVzZXMgYG1lbWNnX2RhdGEgXHUwMDI2IE1FTUNHX0RBVEFfS01FTWAgaW5zdGVhZCBvZiB0aGUgYFBhZ2VNZW1jZ0ttZW0ocGFnZSlgIG1hY3JvLlxuXG5Cb3RoIG9mIHRoZXNlIGNoYW5nZXMgYXJlIGxvY2F0ZWQgd2l0aGluIGBtbS9wYWdlX293bmVyLmNgIGFuZCBhcmUgZ3VhcmRlZCBieSBgQ09ORklHX1BBR0VfT1dORVJgLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZSBgcmVhZF9wYWdlX293bmVyYCBhbmQgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAuIExldCdzIGNvbmZpcm0gaWYgZWl0aGVyIG9mIHRoZXNlIGFyZSBpbiBhIGhvdCBwYXRoLiBJdCBsb29rcyBsaWtlIGByZWFkX3BhZ2Vfb3duZXJgIGlzIHBhcnQgb2YgYSBkZWJ1Z2ZzIHJlYWQgb3BlcmF0aW9uLCBhbmQgYHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludGAgaXMgYSBwcm9jZnMgcmVhZCBvcGVyYXRpb24uIFRoYXQgbWVhbnMgbmVpdGhlciBhcmUgcGVyZm9ybWFuY2UgY3JpdGljYWwsIHNvIHRoZSBjaGFuZ2UgaXNuJ3QgYWJvdXQgcGVyZm9ybWFuY2UsIGJ1dCBzYWZldHkuXG5cbkkgc2hvdWxkIGNoZWNrIGlmIGBQQUdFX09XTkVSYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gc3l6Ym90LiBJdCB1c3VhbGx5IGVuYWJsZXMgYSBsb3Qgb2YgZGVidWcgY29uZmlncywgc28gaXQncyBsaWtlbHkgYWxyZWFkeSBvbiwgYnV0IGl0J3Mgc3RpbGwgZ29vZCBwcmFjdGljZSB0byBleHBsaWNpdGx5IGxpc3QgaXQgaW4gYEVuYWJsZUNvbmZpZ3NgLlxuXG5MZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBza2lwX2J1ZGR5X3BhZ2VzYCBjaGFuZ2UuIEkgc2VlIHRoZSBjb2RlIHByZXZlbnRzIGBwZm5gIGZyb20gYWR2YW5jaW5nIHRvbyBmYXIgaWYgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgcmV0dXJucyBhIHBvdGVudGlhbGx5IGJhZCB2YWx1ZS4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJvdGVjdHMgYWdhaW5zdCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyBvciBpbmZpbml0ZSBsb29wcy4gVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCBjYW4gbGVhZCB0byB2ZXJ5IGludGVyZXN0aW5nIGJlaGF2aW9ycyB3aXRoIGJ1ZGR5IGFsbG9jYXRvciBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuXG5cbk5vdyBsZXQncyByZXZpZXcgdGhlIGBwcmludF9wYWdlX293bmVyX21lbWNnYCBjaGFuZ2UuIFRoaXMgc2VlbXMgdG8gYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgaW1wYWN0cyBob3cgdGhlIFwidmlhIG9iamNnXCIgc3RyaW5nIGlzIHByaW50ZWQuIEl0IGF2b2lkcyBjYWxsaW5nIGBQYWdlTWVtY2dLbWVtKHBhZ2UpYCwgd2hpY2ggY291bGQgYmUgdW5zYWZlIG9yIGluYWNjdXJhdGUgaW4gdGhlIG5ldyBjb250ZXh0LlxuXG5PdmVyYWxsLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBwYXRjaCBJIHNob3VsZCBwcmlvcml0aXplIGZvciBmdXp6aW5nLiBJdCBpbnRyb2R1Y2VzIGNoYW5nZXMgdG8gcHJvdGVjdCB0aGUgYnVkZHkgYWxsb2NhdG9yIGFuZCBwb3RlbnRpYWxseSBhbHRlcnMgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIGRlYnVnZ2luZyB0b29scy5cblxuU28sIGhlcmUncyB3aGF0IEknbSBnb2luZyB0byBwcmVwYXJlIGZvciB0aGUgcmVzdWx0czpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6IGB0cnVlYFxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJyZWFkX3BhZ2Vfb3duZXJcIiwgXCJwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnRcIl1gXG4qICAgKipFbmFibGVDb25maWdzKio6IGBbXCJQQUdFX09XTkVSXCJdYFxuKiAgICoqUmVhc29uaW5nKio6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgbW0vcGFnZV9vd25lci5jYCB0byBzYWZlbHkgc2tpcCBidWRkeSBwYWdlcyBkdXJpbmcgaXRlcmF0aW9uLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIFBGTiBhY2Nlc3NlcyB3aGVuIHJlYWRpbmcgYC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXJgIG9yIGAvcHJvYy9wYWdldHlwZWluZm9gLiBJdCBhbHNvIGZpeGVzIG1lbWNnIGRhdGEgcmVhZGluZyBpbiBwYWdlIG93bmVyLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTA5LCJPdXRwdXRUb2tlbnMiOjExOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMToxMzo1My42MDA4Mjk5NTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgzOTAyMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfT1dORVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWFkX3BhZ2Vfb3duZXJcIixcbiAgICBcInBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtbS9wYWdlX293bmVyLmMgdG8gc2FmZWx5IHNraXAgYnVkZHkgcGFnZXMgZHVyaW5nIGl0ZXJhdGlvbiwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBQRk4gYWNjZXNzZXMgd2hlbiByZWFkaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgb3IgL3Byb2MvcGFnZXR5cGVpbmZvLiBJdCBhbHNvIGZpeGVzIG1lbWNnIGRhdGEgcmVhZGluZyBpbiBwYWdlIG93bmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VfT1dORVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWFkX3BhZ2Vfb3duZXJcIixcbiAgICBcInBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtbS9wYWdlX293bmVyLmMgdG8gc2FmZWx5IHNraXAgYnVkZHkgcGFnZXMgZHVyaW5nIGl0ZXJhdGlvbiwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBQRk4gYWNjZXNzZXMgd2hlbiByZWFkaW5nIC9zeXMva2VybmVsL2RlYnVnL3BhZ2Vfb3duZXIgb3IgL3Byb2MvcGFnZXR5cGVpbmZvLiBJdCBhbHNvIGZpeGVzIG1lbWNnIGRhdGEgcmVhZGluZyBpbiBwYWdlIG93bmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowtzd66[1] Phase: Succeeded StartedAt: 2026-07-01 11:15:00 +0000 UTC FinishedAt: 2026-07-01 11:15:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 11:15:00 +0000 UTC FinishedAt: 2026-07-01 11:15:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2] Phase: Succeeded StartedAt: 2026-07-01 11:15:00 +0000 UTC FinishedAt: 2026-07-01 15:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-01 11:15:00 +0000 UTC FinishedAt: 2026-07-01 15:38:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-01 11:15:00 +0000 UTC FinishedAt: 2026-07-01 11:15:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-01 11:15:00 +0000 UTC FinishedAt: 2026-07-01 11:15:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtzd66/series-workflowtzd66-convert-artifact-2803095281/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-01 11:15:37 +0000 UTC FinishedAt: 2026-07-01 11:54:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-01 11:15:37 +0000 UTC FinishedAt: 2026-07-01 11:54:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1b7eadad-c814-40bd-ab30-77446ba77e40,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-workflowtzd66/series-workflowtzd66-convert-artifact-2803095281/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": "d236d14f-4902-4e9b-89b0-b9a11742f734", "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-workflowtzd66/series-workflowtzd66-build-action-3548287263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-01 11:15:37 +0000 UTC FinishedAt: 2026-07-01 11:53:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1b7eadad-c814-40bd-ab30-77446ba77e40,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-workflowtzd66/series-workflowtzd66-convert-artifact-2803095281/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": "d236d14f-4902-4e9b-89b0-b9a11742f734", "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-workflowtzd66/series-workflowtzd66-build-action-3548287263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-01 11:54:04 +0000 UTC FinishedAt: 2026-07-01 11:54:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-01 11:54:04 +0000 UTC FinishedAt: 2026-07-01 11:54:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-01 11:54:04 +0000 UTC FinishedAt: 2026-07-01 11:54:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-01 11:54:04 +0000 UTC FinishedAt: 2026-07-01 11:54:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtzd66/series-workflowtzd66-convert-artifact-1287137604/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-01 11:54:30 +0000 UTC FinishedAt: 2026-07-01 11:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-01 11:54:30 +0000 UTC FinishedAt: 2026-07-01 11:56:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d236d14f-4902-4e9b-89b0-b9a11742f734,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-workflowtzd66/series-workflowtzd66-build-action-3548287263/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-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-01 11:56:34 +0000 UTC FinishedAt: 2026-07-01 11:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-01 11:56:34 +0000 UTC FinishedAt: 2026-07-01 11:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-01 11:56:34 +0000 UTC FinishedAt: 2026-07-01 12:32:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-01 11:56:34 +0000 UTC FinishedAt: 2026-07-01 12:32:53 +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:*1b7eadad-c814-40bd-ab30-77446ba77e40,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-workflowtzd66/series-workflowtzd66-convert-artifact-1287137604/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": "ed6dc02f-87f2-479f-aac1-ff4daef91476", "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-workflowtzd66/series-workflowtzd66-build-action-3157152080/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-01 11:56:34 +0000 UTC FinishedAt: 2026-07-01 12:32:42 +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:*1b7eadad-c814-40bd-ab30-77446ba77e40,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-workflowtzd66/series-workflowtzd66-convert-artifact-1287137604/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": "ed6dc02f-87f2-479f-aac1-ff4daef91476", "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-workflowtzd66/series-workflowtzd66-build-action-3157152080/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-01 12:32:53 +0000 UTC FinishedAt: 2026-07-01 12:32:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-01 12:32:53 +0000 UTC FinishedAt: 2026-07-01 12:32:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-01 12:32:53 +0000 UTC FinishedAt: 2026-07-01 12:34:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-01 12:32:53 +0000 UTC FinishedAt: 2026-07-01 12:34:32 +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:*ed6dc02f-87f2-479f-aac1-ff4daef91476,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-workflowtzd66/series-workflowtzd66-build-action-3157152080/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-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-01 12:34:43 +0000 UTC FinishedAt: 2026-07-01 15:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-01 12:34:43 +0000 UTC FinishedAt: 2026-07-01 15:38:14 +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":["read_page_owner","pagetypeinfo_showmixedcount_print"],"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:*d236d14f-4902-4e9b-89b0-b9a11742f734,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ed6dc02f-87f2-479f-aac1-ff4daef91476,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-workflowtzd66/series-workflowtzd66-build-action-3548287263/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-workflowtzd66/series-workflowtzd66-build-action-3157152080/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-01 12:34:43 +0000 UTC FinishedAt: 2026-07-01 12:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-01 12:34:43 +0000 UTC FinishedAt: 2026-07-01 12:34:52 +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":["read_page_owner","pagetypeinfo_showmixedcount_print"],"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-workflowtzd66/series-workflowtzd66-convert-artifact-1022527053/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-01 12:34:43 +0000 UTC FinishedAt: 2026-07-01 12:34:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-01 12:34:43 +0000 UTC FinishedAt: 2026-07-01 12:34:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-01 12:34:43 +0000 UTC FinishedAt: 2026-07-01 12:34:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-01 12:35:04 +0000 UTC FinishedAt: 2026-07-01 15:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtzd66[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["read_page_owner","pagetypeinfo_showmixedcount_print"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"13105b584a18fa6f52f0f89e55feba52eb0e6a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER"],"series_id":"5b5bdd35-3df7-441b-9ef0-a37ef2e4ca9b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-01 12:35:04 +0000 UTC FinishedAt: 2026-07-01 15:38:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d236d14f-4902-4e9b-89b0-b9a11742f734,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ed6dc02f-87f2-479f-aac1-ff4daef91476,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-workflowtzd66/series-workflowtzd66-build-action-3548287263/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-workflowtzd66/series-workflowtzd66-build-action-3157152080/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-workflowtzd66/series-workflowtzd66-convert-artifact-1022527053/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,}