Name: series-workflowkbtks Phase: Succeeded StartedAt: 2026-07-15 03:49:34 +0000 UTC FinishedAt: 2026-07-15 08:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[0] Phase: Succeeded StartedAt: 2026-07-15 03:49:34 +0000 UTC FinishedAt: 2026-07-15 04:05:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[0].run-triage Phase: Succeeded StartedAt: 2026-07-15 03:49:34 +0000 UTC FinishedAt: 2026-07-15 04:05:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE" ], "series_id": "1ea7e79d-5597-441f-9992-9436608be7df" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "adjust_range_hwpoison", "hugetlb_page_hwpoison", "hugetlb_update_hwpoison", "__folio_free_hwp", "hugetlbfs_init_regular_inode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": { "findings": [ "7a0cb565-4340-4daf-8de2-06f5b1d2af93" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA0OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkanVzdF9yYW5nZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl91cGRhdGVfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7X19mb2xpb19mcmVlX2h3cCYjMzQ7LAogICAgJiMzNDtodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdldGxiZnMgcmVhZCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgdGhlIGdlbmVyaWMgZmlsZW1hcCByZWFkIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIGZvciBodWdldGxiIHBhZ2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgaHdwb2lzb25lZCBwYWdlcyBkdXJpbmcgZmlsZW1hcCByZWFkcyBhbmQgY2hhbmdlcyBob3cgaHdwb2lzb25lZCBodWdldGxiIHBhZ2VzIGFyZSB0cmFja2VkICh1c2luZyBhIGhhc2ggdGFibGUgaW5zdGVhZCBvZiBhIGxpbmtlZCBsaXN0KS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMjI2YjM3Y2YzNDMzM2ViODQ2YzNiYjIxMDk4MjQ4ZWRhZjIxYzU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMDQ6MDQ6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWdcbmluZGV4IGNmNmFlNjQ3NzZlNjJjLi40OTIyYWRmNWJjODUxMiAxMDA2NDRcbi0tLSBhL2ZzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL0tjb25maWdcbkBAIC0yNzIsNiAmIzQzOzI3Miw3IEBAIGVuZGlmICMgSFVHRVRMQkZTXG4gXG4gY29uZmlnIEhVR0VUTEJfUEFHRVxuIFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4mIzQzO1x0c2VsZWN0IEZJTEVNQVBfTEFSR0VfRk9MSU9cbiBcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uYTZmMDQ1OWQ3OWRlYjggMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xODcsMTEzICYjNDM7MTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcbiB9XG4gXG4tLypcbi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXG4tICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcbi0gKiBIV1BPSVNPTiBwYWdlLlxuLSAqL1xuLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4tXHRcdHNpemVfdCBieXRlcylcbi17XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4tXHRzaXplX3Qgc2FmZV9ieXRlcztcbi1cbi1cdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcbi1cdFx0cmV0dXJuIDA7XG4tXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4tXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4tXHRwYWdlJiM0MzsmIzQzOztcbi1cbi1cdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuLVx0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KVxuLVx0XHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbi19XG4tXG4tLypcbi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXG4tICovXG4tc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4te1xuLVx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4tXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XG4tXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0dW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzc2l6ZV90IHJldHZhbCA9IDA7XG4tXG4tXHR3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHNpemVfdCBuciwgY29waWVkLCB3YW50O1xuLVxuLVx0XHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xuLVx0XHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cdFx0aWYgKCFpc2l6ZSlcbi1cdFx0XHRicmVhaztcbi1cdFx0ZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0aWYgKGluZGV4IFx1MDAzZSBlbmRfaW5kZXgpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHtcbi1cdFx0XHRuciA9ICgoaXNpemUgLSAxKSBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKSAmIzQzOyAxO1xuLVx0XHRcdGlmIChuciBcdTAwM2M9IG9mZnNldClcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG5yID0gbnIgLSBvZmZzZXQ7XG4tXG4tXHRcdC8qIEZpbmQgdGhlIGZvbGlvICovXG4tXHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpO1xuLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2UgaGF2ZSBhIEhPTEUsIHplcm8gb3V0IHRoZSB1c2VyLWJ1ZmZlciBmb3IgdGhlXG4tXHRcdFx0ICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuXG4tXHRcdFx0ICovXG4tXHRcdFx0Y29waWVkID0gaW92X2l0ZXJfemVybyhuciwgdG8pO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRcdFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbi1cdFx0XHRcdHdhbnQgPSBucjtcbi1cdFx0XHRlbHNlIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXRcbi1cdFx0XHRcdCAqIHRvdWNoaW5nIHRoZSAxc3QgcmF3IEhXUE9JU09OIHBhZ2UgYWZ0ZXJcbi1cdFx0XHRcdCAqIG9mZnNldC5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0d2FudCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBucik7XG4tXHRcdFx0XHRpZiAod2FudCA9PSAwKSB7XG4tXHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRcdHJldHZhbCA9IC1FSU87XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7XG4tXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0fVxuLVx0XHRvZmZzZXQgJiM0Mzs9IGNvcGllZDtcbi1cdFx0cmV0dmFsICYjNDM7PSBjb3BpZWQ7XG4tXHRcdGlmIChjb3BpZWQgIT0gbnIgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRcdGlmICghcmV0dmFsKVxuLVx0XHRcdFx0cmV0dmFsID0gLUVGQVVMVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpbmRleCAmIzQzOz0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHRcdG9mZnNldCBcdTAwMjY9IH5odWdlX3BhZ2VfbWFzayhoKTtcbi1cdH1cbi1cdGlvY2ItXHUwMDNla2lfcG9zID0gKChsb2ZmX3QpaW5kZXggXHUwMDNjXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSkgJiM0Mzsgb2Zmc2V0O1xuLVx0cmV0dXJuIHJldHZhbDtcbi19XG4tXG4gc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbkBAIC04ODMsNiAmIzQzOzc3NiwxNiBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHJldHVybiBpbm9kZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9yZGVyID0gaHVnZV9wYWdlX29yZGVyKGhzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG4mIzQzO1x0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogSHVnZXRsYmZzIGlzIG5vdCByZWNsYWltYWJsZTsgdGhlcmVmb3JlIGl0cyBpX21tYXBfcndzZW0gd2lsbCBuZXZlclxuICAqIGJlIHRha2VuIGZyb20gcmVjbGFpbSAtLSB1bmxpa2UgcmVndWxhciBmaWxlc3lzdGVtcy4gVGhpcyBuZWVkcyBhblxuQEAgLTkyNiw4ICYjNDM7ODI5LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgbW9kZSwgZGV2KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBTX0lGUkVHOlxuLVx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG4mIzQzO1x0XHRcdGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFNfSUZESVI6XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcbkBAIC0xMjA2LDcgJiM0MzsxMTA4LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi1cdC5yZWFkX2l0ZXJcdFx0PSBodWdldGxiZnNfcmVhZF9pdGVyLFxuJiM0MztcdC5yZWFkX2l0ZXJcdFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuIFx0Lm1tYXBcdFx0XHQ9IGh1Z2V0bGJmc19maWxlX21tYXAsXG4gXHQuZnN5bmNcdFx0XHQ9IG5vb3BfZnN5bmMsXG4gXHQuZ2V0X3VubWFwcGVkX2FyZWFcdD0gaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uMTg3ODY0MmU3NWVjNTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xNjUsNyAmIzQzOzE2NSw3IEBAIGJvb2wgaHVnZXRsYmZzX3BhZ2VjYWNoZV9wcmVzZW50KHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcbiBcbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiBleHRlcm4gaW50IG1vdmFibGVfZ2lnYW50aWNfcGFnZXMgX19yZWFkX21vc3RseTtcbiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5O1xuQEAgLTI5Miw4ICYjNDM7MjkyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShcbi1cdFx0XHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTU5NSw4ICYjNDM7NTk0LDggQEAgZW51bSBodWdldGxiX3BhZ2VfZmxhZ3Mge1xuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHRcXFxuLWJvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4tXHR7XHR2b2lkICpwcml2YXRlID0gXHUwMDI2Zm9saW8tXHUwMDNlcHJpdmF0ZTtcdFx0XFxcbiYjNDM7Ym9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG4mIzQzO1x0e1x0Y29uc3Qgdm9pZCAqcHJpdmF0ZSA9IFx1MDAyNmZvbGlvLVx1MDAzZXByaXZhdGU7XHRcdFxcXG4gXHRcdHJldHVybiB0ZXN0X2JpdChIUEdfIyNmbG5hbWUsIHByaXZhdGUpO1x0XHRcXFxuIFx0fVxuIFxuQEAgLTYxNiw3ICYjNDM7NjE1LDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4gI2Vsc2VcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG4gc3RhdGljIGlubGluZSBib29sXHRcdFx0XHRcdFx0XFxcbi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiYjNDM7Zm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4gXHR7IHJldHVybiAwOyB9XG4gXG4gI2RlZmluZSBTRVRIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG5AQCAtNzI3LDcgJiM0Mzs3MjYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzdWJwb29sX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gSFVHRVRMQkZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNwb29sO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGZvbGlvLVx1MDAzZV9odWdldGxiX3N1YnBvb2w7XG4gfVxuQEAgLTg1Nyw3ICYjNDM7ODU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2h1Z2VfYm9vdG1lbV9hbGxvYyh2b2lkKVxuIH1cbiAjZW5kaWZcbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xuIFx0cmV0dXJuIHNpemVfdG9faHN0YXRlKGZvbGlvX3NpemUoZm9saW8pKTtcbkBAIC0xMDcwLDExICYjNDM7MTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbiB2b2lkIGh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbiAjZW5kaWZcbiBcbi0vKlxuLSAqIENoZWNrIGlmIGEgZ2l2ZW4gcmF3IEBwYWdlIGluIGEgaHVnZXBhZ2UgaXMgSFdQT0lTT04uXG4tICovXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHJldHVybiBQQUdFX01BU0sgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoc3RhdGVfZmlsZShmaWxlKSk7XG5AQCAtMTA4OCw3ICYjNDM7MTA4Miw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTExNTcsNyAmIzQzOzExNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5pbmRleCBiMThjMmIyZTdkMmM2NS4uZWQ1YzA4MjlmZjU2OWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuQEAgLTM4Nyw3ICYjNDM7Mzg3LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xuICAqIEBfaHVnZXRsYl9zdWJwb29sOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYi5oLlxuICAqIEBfaHVnZXRsYl9jZ3JvdXA6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiX2Nncm91cC5oLlxuICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXG4tICogQF9odWdldGxiX2h3cG9pc29uOiBEbyBub3QgdXNlIGRpcmVjdGx5LCBjYWxsIHJhd19od3BfbGlzdF9oZWFkKCkuXG4gICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxuICAqXG5AQCAtNDk5LDcgJiM0Mzs0OTgsNiBAQCBzdHJ1Y3QgZm9saW8ge1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX3N1YnBvb2w7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkO1xuLVx0XHRcdHZvaWQgKl9odWdldGxiX2h3cG9pc29uO1xuIFx0LyogcHJpdmF0ZTogdGhlIHVuaW9uIHdpdGggc3RydWN0IHBhZ2UgaXMgdHJhbnNpdGlvbmFsICovXG4gXHRcdH07XG4gXHRcdHN0cnVjdCBwYWdlIF9fcGFnZV8zO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbmluZGV4IDcyMjNmNmY0ZTJiNDAzLi44ZTU3YzEyYTczMDFiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTEwNjgsNiAmIzQzOzEwNjgsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxuJiM0Mztib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4mIzQzO1xuIC8qXG4gICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gTm90ZSB0aGF0IHRoaXMgY2hlY2sgaXNcbiAgKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXG5AQCAtMTA3NSwxOCAmIzQzOzEwNzgsMjkgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4mIzQzO1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuJiM0MztcdFx0cmV0dXJuIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSk7XG4mIzQzO1x0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuIFxuLVx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4tXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4mIzQzOyNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSB8fFxuLVx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuJiM0MztcdCAgICAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbiB9XG4gXG4gYm9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDJjMzcxOGQ1OTJkNmRkLi5iZDZhNjI3NWE0ZTkxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHtcbiBcdEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSA9IDksXG4gXHRBU19LRVJORUxfRklMRSA9IDEwLFx0LyogbWFwcGluZyBmb3IgYSBmYWtlIGtlcm5lbCBmaWxlIHRoYXQgc2hvdWxkbiYjMzk7dFxuIFx0XHRcdFx0ICAgYWNjb3VudCB1c2FnZSB0byB1c2VyIGNncm91cHMgKi9cbiYjNDM7XHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXHQvKiBJZiB3ZSBtaXNzIGluIHRoZSBwYWdlIGNhY2hlLCBpdCYjMzk7cyBhIGhvbGUgKi9cbiBcdC8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovXG4gXHRBU19GT0xJT19PUkRFUl9CSVRTID0gNSxcbiBcdEFTX0ZPTElPX09SREVSX01JTiA9IDE2LFxuQEAgLTM0NSw2ICYjNDM7MzQ2LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3dyaXRlYmFja19tYXlfZGVhZGxvY2tfb25fcmVjbGFpbShjb25zdCBzdHJ1Y3QgYWRkcmVzXG4gXHRyZXR1cm4gdGVzdF9iaXQoQVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuJiM0Mzt7XG4mIzQzO1x0c2V0X2JpdChBU19BVVRIT1JJVEFUSVZFLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0ZXN0X2JpdChBU19BVVRIT1JJVEFUSVZFLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGdmcF90IG1hcHBpbmdfZ2ZwX21hc2soY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlZ2ZwX21hc2s7XG5AQCAtMzczLDcgJiM0MzszODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4gICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlXG4gICogYSBnb29kIG9yZGVyICh0aGF0JiMzOTtzIDFNQiBpZiB5b3UmIzM5O3JlIHVzaW5nIDRrQiBwYWdlcylcbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzOyNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4ge1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAxVSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgJiM0MzsgTUFYX1BBR0VDQUNIRV9PUkRFUik7XG4gXHRyZXR1cm4gUEFHRV9TSVpFO1xuIH1cbkBAIC00MDUsMjkgJiM0Mzs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiAgKiBAbWluOiBNaW5pbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIDAtTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqIEBtYXg6IE1heGltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gQG1pbi1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXG4gICpcbi0gKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvciB0b1xuLSAqIGluZGljYXRlIHdoaWNoIGJhc2Ugc2l6ZSAobWluKSBhbmQgbWF4aW11bSBzaXplIChtYXgpIG9mIGZvbGlvIHRoZSBWRlNcbi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZFxuLSAqIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzXG4tICogc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbiYjNDM7ICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3JcbiYjNDM7ICogdG8gaW5kaWNhdGUgd2hpY2ggc2l6ZSBmb2xpb3MgY2FuIGJlIHVzZWQgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mXG4mIzQzOyAqIHRoZSBpbm9kZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsXG4mIzQzOyAqIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcyBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxuICAqIERvIG5vdCB0dW5lIGl0IGJhc2VkIG9uLCBlZywgaV9zaXplLlxuICAqXG4mIzQzOyAqIGh1Z2V0bGIgY2FsbHMgdGhpcyB3aXRoIG9yZGVycyBsYXJnZXIgdGhhbiBNQVhfUEFHRUNBQ0hFX09SREVSLlxuJiM0MzsgKiBOb3JtYWwgZmlsZXN5c3RlbXMgc2hvdWxkIG5vdCBkbyB0aGlzLlxuJiM0MzsgKlxuICAqIENvbnRleHQ6IFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlIGlub2RlIGlzIGFjdGl2ZSBhcyBpdFxuICAqIGlzIG5vbi1hdG9taWMuXG4gICovXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbWluLFxuLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbWF4KVxuJiM0MztcdFx0dW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heClcbiB7XG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybjtcbi1cbi1cdGlmIChtaW4gXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXG4tXHRcdG1pbiA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XG4tXG4tXHRpZiAobWF4IFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxuLVx0XHRtYXggPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xuLVxuIFx0aWYgKG1heCBcdTAwM2MgbWluKVxuIFx0XHRtYXggPSBtaW47XG4gXG5AQCAtNDYwLDcgJiM0Mzs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gKG1hcHBpbmctXHUwMDNlZmxhZ3MgXHUwMDI2IEFTX0ZPTElPX09SREVSX01BWF9NQVNLKSBcdTAwM2VcdTAwM2UgQVNfRk9MSU9fT1JERVJfTUFYO1xuIH1cbkBAIC00NjgsNyAmIzQzOzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gKG1hcHBpbmctXHUwMDNlZmxhZ3MgXHUwMDI2IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSBcdTAwM2VcdTAwM2UgQVNfRk9MSU9fT1JERVJfTUlOO1xuIH1cbkBAIC01MjQsNyAmIzQzOzUyOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2xhcmdlX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpXG4gICpcbiAgKiBSZXR1cm46IFRydWUgaWYgUE1ELXNpemVkIGZvbGlvcyBhcmUgc3VwcG9ydGVkLCBvdGhlcndpc2UgZmFsc2UuXG4gICovXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MzsjaWZkZWYgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9cbiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4gXHQvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi9cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggOWUwY2E0ODI0OTA1NGYuLjk5MmU3YWUwYjJiZjI5IDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZ1xuQEAgLTg0MywxMSAmIzQzOzg0MywxNSBAQCBjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbiBjb25maWcgTU1fSURcbiBcdGRlZl9ib29sIG5cbiBcbiYjNDM7Y29uZmlnIEZJTEVNQVBfTEFSR0VfRk9MSU9cbiYjNDM7XHRkZWZfYm9vbCBuXG4mIzQzO1xuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gXHRzZWxlY3QgQ09NUEFDVElPTlxuIFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuJiM0MztcdHNlbGVjdCBGSUxFTUFQX0xBUkdFX0ZPTElPXG4gXHRzZWxlY3QgTU1fSURcbiBcdGhlbHBcbiBcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNThlYjlkMjQwNjQzNDguLmY2NjJjZGE4MWRjNzRjIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC0yNDgzLDYgJiM0MzsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcbiBcdFx0aWYgKCFmb2xpb19iYXRjaF9hZGQoZmJhdGNoLCBmb2xpbykpXG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKVxuQEAgLTI2OTUsNiAmIzQzOzI2OTcsOCBAQCBzdGF0aWMgaW50IGZpbGVtYXBfZ2V0X3BhZ2VzKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGNvdW50LFxuIFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChmYmF0Y2gpKSB7XG4gXHRcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbHAsIFx1MDAyNmZpbHAtXHUwMDNlZl9yYSwgbWFwcGluZywgaW5kZXgpO1xuIFxuJiM0MztcdFx0aWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PSU8pXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVClcbkBAIC0yNzQ5LDYgJiM0MzsyNzUzLDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwb3Nfc2FtZV9mb2xpbyhsb2ZmX3QgcG9zMSwgbG9mZl90IHBvczIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKHBvczEgXHUwMDNlXHUwMDNlIHNoaWZ0ID09IHBvczIgXHUwMDNlXHUwMDNlIHNoaWZ0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4mIzQzO1x0XHRzaXplX3QgYnl0ZXMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4mIzQzO1x0c2l6ZV90IHNhZmVfYnl0ZXM7XG4mIzQzO1xuJiM0MztcdGlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gYnl0ZXM7XG4mIzQzO1x0aWYgKGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xuJiM0MztcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcbiYjNDM7XHRwYWdlJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXG4mIzQzO1x0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5AQCAtMjgyOCw2ICYjNDM7Mjg1NSwyMiBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRnb3RvIHB1dF9mb2xpb3M7XG4gXHRcdGVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBpdGVyLVx1MDAzZWNvdW50KTtcbiBcbiYjNDM7XHRcdGlmICghZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKSkge1xuJiM0MztcdFx0XHRzaXplX3QgZnNpemUgPSBtYXBwaW5nX21pbl9mb2xpb19ucmJ5dGVzKG1hcHBpbmcpO1xuJiM0MztcdFx0XHRzaXplX3Qgb2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDI2IChmc2l6ZSAtIDEpO1xuJiM0MztcdFx0XHRzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLVx1MDAzZWtpX3BvcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgZnNpemUgLSBvZmZzZXQpO1xuJiM0MztcdFx0XHRzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7XG4mIzQzO1xuJiM0MztcdFx0XHRhbHJlYWR5X3JlYWQgJiM0Mzs9IGNvcGllZDtcbiYjNDM7XHRcdFx0aW9jYi1cdTAwM2VraV9wb3MgJiM0Mzs9IGNvcGllZDtcbiYjNDM7XHRcdFx0bGFzdF9wb3MgPSBpb2NiLVx1MDAzZWtpX3BvcztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuJiM0MztcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBPbmNlIHdlIHN0YXJ0IGNvcHlpbmcgZGF0YSwgd2UgZG9uJiMzOTt0IHdhbnQgdG8gYmUgdG91Y2hpbmcgYW55XG4gXHRcdCAqIGNhY2hlbGluZXMgdGhhdCBtaWdodCBiZSBjb250ZW5kZWQ6XG5AQCAtMjg2MiwxNCAmIzQzOzI5MDUsMTggQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0aWYgKHdyaXRhYmx5X21hcHBlZClcbiBcdFx0XHRcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4gXG4tXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTtcbiYjNDM7XHRcdFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcbiYjNDM7XHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpXG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSAtRUlPO1xuJiM0MztcdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgY29waWVkLCBpdGVyKTtcbiBcbiBcdFx0XHRhbHJlYWR5X3JlYWQgJiM0Mzs9IGNvcGllZDtcbiBcdFx0XHRpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOz0gY29waWVkO1xuIFx0XHRcdGxhc3RfcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4gXG4gXHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpIHtcbi1cdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0XHRpZiAoIWVycm9yKVxuJiM0MztcdFx0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi4zNTMzNDAzMDkxMDc0YyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00NDEzLDcgJiM0Mzs0NDEzLDcgQEAgc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9PSBIUEFHRV9QTURfTlIgLSAxKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuJiM0MztcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpJiM0MzsmIzQzOykge1xuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNTcxMjEyYjgwODM1ZWMuLmNjOGQ5ODM5OTkxM2UzIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmNcbkBAIC0xNzc1LDcgJiM0MzsxNzc1LDcgQEAgdm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gICogc3RhYmxlLiAgRHVlIHRvIGxvY2tpbmcgb3JkZXIsIHdlIGNhbiBvbmx5IHRyeWxvY2tfd3JpdGUuICBJZiB3ZSBjYW5cbiAgKiBub3QgZ2V0IHRoZSBsb2NrLCBzaW1wbHkgcmV0dXJuIE5VTEwgdG8gY2FsbGVyLlxuICAqL1xuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCA1MTUwOGE1NWM0MDU1ZS4uOWU0ZWU1ZDkzOTA1MDYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2h0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3NtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ybWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTE4MDgsMzMgJiM0MzsxODA5LDI2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1mX2RheF9raWxsX3Byb2NzKTtcbiBcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFxuLS8qXG4tICogU3RydWN0IHJhd19od3BfcGFnZSByZXByZXNlbnRzIGluZm9ybWF0aW9uIGFib3V0IFwmIzM0O3JhdyBlcnJvciBwYWdlXCYjMzQ7LFxuLSAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSAtXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uXG4tICovXG4tc3RydWN0IHJhd19od3BfcGFnZSB7XG4tXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBub2RlO1xuJiM0MzsvKiBQcm90ZWN0cyBodWdldGxiX2h3cG9pc29uIGxpc3QgKi9cbiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhodGxiX2h3cG9pc29uX2xvY2spO1xuJiM0MztzdGF0aWMgREVGSU5FX0hBU0hUQUJMRShodGxiX2h3cG9pc29uLCA1KTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBod3BfcGFnZSB7XG4mIzQzO1x0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIH07XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHRyZXR1cm4gKHN0cnVjdCBsbGlzdF9oZWFkICopXHUwMDI2Zm9saW8tXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb247XG4tfVxuLVxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzOy8qXG4mIzQzOyAqIENoZWNrIGlmIGEgZ2l2ZW4gQHBhZ2UgaW4gYSBodWdldGxiIGZvbGlvIGlzIEhXUE9JU09OLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaHdwX3BhZ2UgKnA7XG4gXHRib29sIHJldCA9IGZhbHNlO1xuIFxuIFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuLVx0XHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuLVxuIFx0LypcbiBcdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHN1YnBhZ2VzXG4gXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuXG5AQCAtMTg0MiwzNiAmIzQzOzE4MzYsMzkgQEAgYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1mX211dGV4KTtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbiBcbi1cdHJhd19od3BfaGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuJiM0MztcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUoaHRsYl9od3BvaXNvbiwgcCwgbm9kZSwgKHVuc2lnbmVkIGxvbmcpcGFnZSkge1xuIFx0XHRpZiAocGFnZSA9PSBwLVx1MDAzZXBhZ2UpIHtcbiBcdFx0XHRyZXQgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWZfbXV0ZXgpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiB7XG4tXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnAsICpuZXh0O1xuJiM0MztcdGludCBiO1xuJiM0MztcdHN0cnVjdCBod3BfcGFnZSAqcDtcbiYjNDM7XHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wO1xuIFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XG4gXG4tXHRoZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBoZWFkLCBub2RlKSB7XG4mIzQzO1x0aGFzaF9mb3JfZWFjaF9zYWZlKGh0bGJfaHdwb2lzb24sIGIsIHRtcCwgcCwgbm9kZSkge1xuJiM0MztcdFx0aWYgKHBhZ2VfZm9saW8ocC1cdTAwM2VwYWdlKSAhPSBmb2xpbylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChtb3ZlX2ZsYWcpXG4gXHRcdFx0U2V0UGFnZUhXUG9pc29uKHAtXHUwMDNlcGFnZSk7XG4gXHRcdGVsc2VcbiBcdFx0XHRudW1fcG9pc29uZWRfcGFnZXNfc3ViKHBhZ2VfdG9fcGZuKHAtXHUwMDNlcGFnZSksIDEpO1xuJiM0MztcdFx0aGFzaF9kZWwoXHUwMDI2cC1cdTAwM2Vub2RlKTtcbiBcdFx0a2ZyZWUocCk7XG4gXHRcdGNvdW50JiM0MzsmIzQzOztcbiBcdH1cbiYjNDM7XG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuQEAgLTE4ODcsOSAmIzQzOzE4ODQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiAgKi9cbiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcmF3X2h3cDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4mIzQzO1x0c3RydWN0IGh3cF9wYWdlICpwO1xuIFx0aW50IHJldCA9IGZvbGlvX3Rlc3Rfc2V0X2h3cG9pc29uKGZvbGlvKSA/IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEIDogMDtcbiBcbiBcdC8qXG5AQCAtMTg5OSwxNiAmIzQzOzE4OTQsMTggQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdCAqL1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XG4tXHRoZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuLVx0XHRpZiAocC1cdTAwM2VwYWdlID09IHBhZ2UpXG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XG4mIzQzO1x0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZShodGxiX2h3cG9pc29uLCBwLCBub2RlLCAodW5zaWduZWQgbG9uZylwYWdlKSB7XG4mIzQzO1x0XHRpZiAocC1cdTAwM2VwYWdlID09IHBhZ2UpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbiBcdFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbi1cdHJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTtcbi1cdGlmIChyYXdfaHdwKSB7XG4tXHRcdHJhd19od3AtXHUwMDNlcGFnZSA9IHBhZ2U7XG4tXHRcdGxsaXN0X2FkZChcdTAwMjZyYXdfaHdwLVx1MDAzZW5vZGUsIGhlYWQpO1xuJiM0MztcdHAgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xuJiM0MztcdGlmIChwKSB7XG4mIzQzO1x0XHRwLVx1MDAzZXBhZ2UgPSBwYWdlO1xuJiM0MztcdFx0aGFzaF9hZGQoaHRsYl9od3BvaXNvbiwgXHUwMDI2cC1cdTAwM2Vub2RlLCAodW5zaWduZWQgbG9uZylwYWdlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbFxuQEAgLTE5MjAsMTMgJiM0MzsxOTE3LDE1IEBAIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRcdCAqIE9uY2UgaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUgaXMgc2V0LCByYXdfaHdwX3BhZ2UgaXMgbm90XG4gXHRcdCAqIHVzZWQgYW55IG1vcmUsIHNvIGZyZWUgaXQuXG4gXHRcdCAqL1xuLVx0XHRfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpO1xuJiM0MztcdFx0X19mb2xpb19mcmVlX2h3cChmb2xpbywgZmFsc2UpO1xuIFx0fVxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY291bnQ7XG4gXHQvKlxuIFx0ICogaHVnZXRsYl92bWVtbWFwX29wdGltaXplZCBodWdlcGFnZXMgY2FuJiMzOTt0IGJlIGZyZWVkIGJlY2F1c2Ugc3RydWN0XG4gXHQgKiBwYWdlcyBmb3IgdGFpbCBwYWdlcyBhcmUgcmVxdWlyZWQgYnV0IHRoZXkgZG9uJiMzOTt0IGV4aXN0LlxuQEAgLTE5NDEsNyAmIzQzOzE5NDAsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbiYjNDM7XHRjb3VudCA9IF9fZm9saW9fZnJlZV9od3AoZm9saW8sIG1vdmVfZmxhZyk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5pbmRleCA3YWMxOWZhYjIyNjMyNC4uMzMwMDdlOGU1NDZhMDkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5AQCAtMTgxMyw3ICYjNDM7MTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdHBmbiA9IGZvbGlvX3Bmbihmb2xpbykgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcbiBcbi1cdFx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuJiM0MztcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbm5vdCBoYW5kbGUgbGFyZ2UgZm9saW9zXG4gXHRcdFx0ICogaW4gYWxsIGNhc2VzIHlldC5cbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggYjUxZjgzYzk3MGJiMzcuLjQ5MmM5YmVmMzYyMDc0IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTMyNDAsNyAmIzQzOzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiYjNDM7XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjcwZTU0YWNlMGU3NDFjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTA4Niw3ICYjNDM7MTA4Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbiBcdFx0XHRnb3RvIGtlZXA7XG4gXG4tXHRcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiYjNDM7XHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW4mIzM5O3QgaGFuZGxlIGxhcmdlXG4gXHRcdFx0ICogZm9saW8sIGp1c3Qgc2tpcCBpdC4gbWVtb3J5X2ZhaWx1cmUoKSB3aWxsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWRqdXN0X3JhbmdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VwZGF0ZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtfX2ZvbGlvX2ZyZWVfaHdwJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGh1Z2V0bGJmcyByZWFkIGltcGxlbWVudGF0aW9uIHRvIHVzZSB0aGUgZ2VuZXJpYyBmaWxlbWFwIHJlYWQgaXRlcmF0b3IgYW5kIHVwZGF0ZXMgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcgZm9yIGh1Z2V0bGIgcGFnZXMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGhhbmRsZSBod3BvaXNvbmVkIHBhZ2VzIGR1cmluZyBmaWxlbWFwIHJlYWRzIGFuZCBjaGFuZ2VzIGhvdyBod3BvaXNvbmVkIGh1Z2V0bGIgcGFnZXMgYXJlIHRyYWNrZWQgKHVzaW5nIGEgaGFzaCB0YWJsZSBpbnN0ZWFkIG9mIGEgbGlua2VkIGxpc3QpLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGh1Z2V0bGJmcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjIyNmIzN2NmMzQzMzNlYjg0NmMzYmIyMTA5ODI0OGVkYWYyMWM1OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDE1IDA0OjA0OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggY2Y2YWU2NDc3NmU2MmMuLjQ5MjJhZGY1YmM4NTEyIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL0tjb25maWcKQEAgLTI3Miw2ICYjNDM7MjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlMKIAogY29uZmlnIEhVR0VUTEJfUEFHRQogCWRlZl9ib29sIEhVR0VUTEJGUwomIzQzOwlzZWxlY3QgRklMRU1BUF9MQVJHRV9GT0xJTwogCXNlbGVjdCBYQVJSQVlfTVVMVEkKIAogY29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQCmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCmluZGV4IDIxNmUxYTBkZDBiMjM3Li5hNmYwNDU5ZDc5ZGViOCAxMDA2NDQKLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKQEAgLTE4NywxMTMgJiM0MzsxODcsNiBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJcmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTsKIH0KIAotLyoKLSAqIFNvbWVvbmUgd2FudHMgdG8gcmVhZCBAYnl0ZXMgZnJvbSBhIEhXUE9JU09OIGh1Z2V0bGIgQGZvbGlvIGZyb20gQG9mZnNldC4KLSAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9uZSBjYW4gcmVhZCB3aXRob3V0IHRvdWNoaW5nIHRoZSAxc3QgcmF3Ci0gKiBIV1BPSVNPTiBwYWdlLgotICovCi1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LAotCQlzaXplX3QgYnl0ZXMpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpOwotCXNpemVfdCBzYWZlX2J5dGVzOwotCi0JaWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKQotCQlyZXR1cm4gMDsKLQkvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovCi0Jc2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpOwotCXBhZ2UmIzQzOyYjNDM7OwotCi0JLyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovCi0JZm9yICg7IHNhZmVfYnl0ZXMgJmx0OyBieXRlczsgc2FmZV9ieXRlcyAmIzQzOz0gUEFHRV9TSVpFLCBwYWdlJiM0MzsmIzQzOykKLQkJaWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKQotCQkJYnJlYWs7Ci0KLQlyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTsKLX0KLQotLyoKLSAqIFN1cHBvcnQgZm9yIHJlYWQoKSAtIEZpbmQgdGhlIHBhZ2UgYXR0YWNoZWQgdG8gZl9tYXBwaW5nIGFuZCBjb3B5IG91dCB0aGUKLSAqIGRhdGEuIFRoaXMgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIGZpbGVtYXBfcmVhZCgpLgotICovCi1zdGF0aWMgc3NpemVfdCBodWdldGxiZnNfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bykKLXsKLQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItJmd0O2tpX2ZpbHA7Ci0Jc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0OwotCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLSZndDtraV9wb3MgJmd0OyZndDsgaHVnZV9wYWdlX3NoaWZ0KGgpOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gaW9jYi0mZ3Q7a2lfcG9zICZhbXA7IH5odWdlX3BhZ2VfbWFzayhoKTsKLQl1bnNpZ25lZCBsb25nIGVuZF9pbmRleDsKLQlsb2ZmX3QgaXNpemU7Ci0Jc3NpemVfdCByZXR2YWwgPSAwOwotCi0Jd2hpbGUgKGlvdl9pdGVyX2NvdW50KHRvKSkgewotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCQlzaXplX3QgbnIsIGNvcGllZCwgd2FudDsKLQotCQkvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqLwotCQluciA9IGh1Z2VfcGFnZV9zaXplKGgpOwotCQlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKLQkJaWYgKCFpc2l6ZSkKLQkJCWJyZWFrOwotCQllbmRfaW5kZXggPSAoaXNpemUgLSAxKSAmZ3Q7Jmd0OyBodWdlX3BhZ2Vfc2hpZnQoaCk7Ci0JCWlmIChpbmRleCAmZ3Q7IGVuZF9pbmRleCkKLQkJCWJyZWFrOwotCQlpZiAoaW5kZXggPT0gZW5kX2luZGV4KSB7Ci0JCQluciA9ICgoaXNpemUgLSAxKSAmYW1wOyB+aHVnZV9wYWdlX21hc2soaCkpICYjNDM7IDE7Ci0JCQlpZiAobnIgJmx0Oz0gb2Zmc2V0KQotCQkJCWJyZWFrOwotCQl9Ci0JCW5yID0gbnIgLSBvZmZzZXQ7Ci0KLQkJLyogRmluZCB0aGUgZm9saW8gKi8KLQkJZm9saW8gPSBmaWxlbWFwX2xvY2tfaHVnZXRsYl9mb2xpbyhoLCBtYXBwaW5nLCBpbmRleCk7Ci0JCWlmIChJU19FUlIoZm9saW8pKSB7Ci0JCQkvKgotCQkJICogV2UgaGF2ZSBhIEhPTEUsIHplcm8gb3V0IHRoZSB1c2VyLWJ1ZmZlciBmb3IgdGhlCi0JCQkgKiBsZW5ndGggb2YgdGhlIGhvbGUgb3IgcmVxdWVzdC4KLQkJCSAqLwotCQkJY29waWVkID0gaW92X2l0ZXJfemVybyhuciwgdG8pOwotCQl9IGVsc2UgewotCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQotCQkJaWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKLQkJCQl3YW50ID0gbnI7Ci0JCQllbHNlIHsKLQkJCQkvKgotCQkJCSAqIEFkanVzdCBob3cgbWFueSBieXRlcyBzYWZlIHRvIHJlYWQgd2l0aG91dAotCQkJCSAqIHRvdWNoaW5nIHRoZSAxc3QgcmF3IEhXUE9JU09OIHBhZ2UgYWZ0ZXIKLQkJCQkgKiBvZmZzZXQuCi0JCQkJICovCi0JCQkJd2FudCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBucik7Ci0JCQkJaWYgKHdhbnQgPT0gMCkgewotCQkJCQlmb2xpb19wdXQoZm9saW8pOwotCQkJCQlyZXR2YWwgPSAtRUlPOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBXZSBoYXZlIHRoZSBmb2xpbywgY29weSBpdCB0byB1c2VyIHNwYWNlIGJ1ZmZlci4KLQkJCSAqLwotCQkJY29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIHdhbnQsIHRvKTsKLQkJCWZvbGlvX3B1dChmb2xpbyk7Ci0JCX0KLQkJb2Zmc2V0ICYjNDM7PSBjb3BpZWQ7Ci0JCXJldHZhbCAmIzQzOz0gY29waWVkOwotCQlpZiAoY29waWVkICE9IG5yICZhbXA7JmFtcDsgaW92X2l0ZXJfY291bnQodG8pKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQlyZXR2YWwgPSAtRUZBVUxUOwotCQkJYnJlYWs7Ci0JCX0KLQkJaW5kZXggJiM0Mzs9IG9mZnNldCAmZ3Q7Jmd0OyBodWdlX3BhZ2Vfc2hpZnQoaCk7Ci0JCW9mZnNldCAmYW1wOz0gfmh1Z2VfcGFnZV9tYXNrKGgpOwotCX0KLQlpb2NiLSZndDtraV9wb3MgPSAoKGxvZmZfdClpbmRleCAmbHQ7Jmx0OyBodWdlX3BhZ2Vfc2hpZnQoaCkpICYjNDM7IG9mZnNldDsKLQlyZXR1cm4gcmV0dmFsOwotfQotCiBzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwKQEAgLTg4Myw2ICYjNDM7Nzc2LDE2IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCXJldHVybiBpbm9kZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7CiYjNDM7CXVuc2lnbmVkIGludCBvcmRlciA9IGh1Z2VfcGFnZV9vcmRlcihoc3RhdGUpOwomIzQzOwomIzQzOwlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7CiYjNDM7CWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9uczsKJiM0MzsJbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgb3JkZXIsIG9yZGVyKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogSHVnZXRsYmZzIGlzIG5vdCByZWNsYWltYWJsZTsgdGhlcmVmb3JlIGl0cyBpX21tYXBfcndzZW0gd2lsbCBuZXZlcgogICogYmUgdGFrZW4gZnJvbSByZWNsYWltIC0tIHVubGlrZSByZWd1bGFyIGZpbGVzeXN0ZW1zLiBUaGlzIG5lZWRzIGFuCkBAIC05MjYsOCAmIzQzOzgyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgbW9kZSwgZGV2KTsKIAkJCWJyZWFrOwogCQljYXNlIFNfSUZSRUc6Ci0JCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7Ci0JCQlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO2h1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7CiYjNDM7CQkJaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShpbm9kZSk7CiAJCQlicmVhazsKIAkJY2FzZSBTX0lGRElSOgogCQkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2h1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKQEAgLTEyMDYsNyAmIzQzOzExMDgsNyBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0gewotCS5yZWFkX2l0ZXIJCT0gaHVnZXRsYmZzX3JlYWRfaXRlciwKJiM0MzsJLnJlYWRfaXRlcgkJPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLAogCS5tbWFwCQkJPSBodWdldGxiZnNfZmlsZV9tbWFwLAogCS5mc3luYwkJCT0gbm9vcF9mc3luYywKIAkuZ2V0X3VubWFwcGVkX2FyZWEJPSBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAyYWJhZjk5MzIxZTkwZC4uMTg3ODY0MmU3NWVjNTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0xNjUsNyAmIzQzOzE2NSw3IEBAIGJvb2wgaHVnZXRsYmZzX3BhZ2VjYWNoZV9wcmVzZW50KHN0cnVjdCBoc3RhdGUgKmgsCiAJCQkJIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7c3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiBleHRlcm4gaW50IG1vdmFibGVfZ2lnYW50aWNfcGFnZXMgX19yZWFkX21vc3RseTsKIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7CkBAIC0yOTIsOCAmIzQzOzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKAotCQkJCQkJCXN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTU5NSw4ICYjNDM7NTk0LDggQEAgZW51bSBodWdldGxiX3BhZ2VfZmxhZ3MgewogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKQkJCQlcCiBzdGF0aWMgX19hbHdheXNfaW5saW5lCQkJCQkJXAotYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbykJCVwKLQl7CXZvaWQgKnByaXZhdGUgPSAmYW1wO2ZvbGlvLSZndDtwcml2YXRlOwkJXAomIzQzO2Jvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCVwKJiM0MzsJewljb25zdCB2b2lkICpwcml2YXRlID0gJmFtcDtmb2xpby0mZ3Q7cHJpdmF0ZTsJCVwKIAkJcmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7CQlcCiAJfQogCkBAIC02MTYsNyAmIzQzOzYxNSw3IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQkJXAogI2Vsc2UKICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKQkJCQlcCiBzdGF0aWMgaW5saW5lIGJvb2wJCQkJCQlcCi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbykJCVwKJiM0Mztmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykJCVwKIAl7IHJldHVybiAwOyB9CiAKICNkZWZpbmUgU0VUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpCQkJCVwKQEAgLTcyNyw3ICYjNDM7NzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCXJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzcG9vbDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIGZvbGlvLSZndDtfaHVnZXRsYl9zdWJwb29sOwogfQpAQCAtODU3LDcgJiM0Mzs4NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfaHVnZV9ib290bWVtX2FsbG9jKHZvaWQpCiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCVZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pOwogCXJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7CkBAIC0xMDcwLDExICYjNDM7MTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpOwogI2VuZGlmCiAKLS8qCi0gKiBDaGVjayBpZiBhIGdpdmVuIHJhdyBAcGFnZSBpbiBhIGh1Z2VwYWdlIGlzIEhXUE9JU09OLgotICovCi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXJldHVybiBQQUdFX01BU0sgJmFtcDsgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTsKQEAgLTEwODgsNyAmIzQzOzEwODIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBOVUxMOwogfQpAQCAtMTE1Nyw3ICYjNDM7MTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCmluZGV4IGIxOGMyYjJlN2QyYzY1Li5lZDVjMDgyOWZmNTY5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMzg3LDcgJiM0MzszODcsNiBAQCB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1tX2lkX3Q7CiAgKiBAX2h1Z2V0bGJfc3VicG9vbDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGIuaC4KICAqIEBfaHVnZXRsYl9jZ3JvdXA6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiX2Nncm91cC5oLgogICogQF9odWdldGxiX2Nncm91cF9yc3ZkOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC4KLSAqIEBfaHVnZXRsYl9od3BvaXNvbjogRG8gbm90IHVzZSBkaXJlY3RseSwgY2FsbCByYXdfaHdwX2xpc3RfaGVhZCgpLgogICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogICogQF91bnVzZWRfc2xhYl9vYmpfZXh0czogUGxhY2Vob2xkZXIgdG8gbWF0Y2ggb2JqX2V4dHMgaW4gc3RydWN0IHNsYWIuCiAgKgpAQCAtNDk5LDcgJiM0Mzs0OTgsNiBAQCBzdHJ1Y3QgZm9saW8gewogCQkJdm9pZCAqX2h1Z2V0bGJfc3VicG9vbDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkOwotCQkJdm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247CiAJLyogcHJpdmF0ZTogdGhlIHVuaW9uIHdpdGggc3RydWN0IHBhZ2UgaXMgdHJhbnNpdGlvbmFsICovCiAJCX07CiAJCXN0cnVjdCBwYWdlIF9fcGFnZV8zOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA3MjIzZjZmNGUyYjQwMy4uOGU1N2MxMmE3MzAxYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC0xMDY4LDYgJiM0MzsxMDY4LDkgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogCXJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFCiYjNDM7Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwomIzQzOwogLyoKICAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzCiAgKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoCkBAIC0xMDc1LDE4ICYjNDM7MTA3OCwyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewotCWNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CWNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwomIzQzOwomIzQzOwlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKJiM0MzsJCXJldHVybiBodWdldGxiX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpOwomIzQzOwlyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KIAotCWlmIChQYWdlSFdQb2lzb24ocGFnZSkpCi0JCXJldHVybiB0cnVlOwotCWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKLQlyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSAmYW1wOyZhbXA7IFBhZ2VIV1BvaXNvbigmYW1wO2ZvbGlvLSZndDtwYWdlKTsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KJiM0MzsjZW5kaWYKIAotc3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHwKLQkgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpOwomIzQzOwkgICAgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpOwogfQogCiBib29sIGlzX2ZyZWVfYnVkZHlfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCmluZGV4IDJjMzcxOGQ1OTJkNmRkLi5iZDZhNjI3NWE0ZTkxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHsKIAlBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0gPSA5LAogCUFTX0tFUk5FTF9GSUxFID0gMTAsCS8qIG1hcHBpbmcgZm9yIGEgZmFrZSBrZXJuZWwgZmlsZSB0aGF0IHNob3VsZG4mIzM5O3QKIAkJCQkgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqLwomIzQzOwlBU19BVVRIT1JJVEFUSVZFID0gMTEsCS8qIElmIHdlIG1pc3MgaW4gdGhlIHBhZ2UgY2FjaGUsIGl0JiMzOTtzIGEgaG9sZSAqLwogCS8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovCiAJQVNfRk9MSU9fT1JERVJfQklUUyA9IDUsCiAJQVNfRk9MSU9fT1JERVJfTUlOID0gMTYsCkBAIC0zNDUsNiAmIzQzOzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlcwogCXJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiYjNDM7ewomIzQzOwlzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19pc19hdXRob3JpdGF0aXZlKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWFwcGluZ19nZnBfbWFzayhjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAlyZXR1cm4gbWFwcGluZy0mZ3Q7Z2ZwX21hc2s7CkBAIC0zNzMsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaykKICAqIGFzc3VtcHRpb25zIGFib3V0IG1heGltdW0gb3JkZXIgaWYgVEhQIGFyZSBkaXNhYmxlZCwgYnV0IDggc2VlbXMgbGlrZQogICogYSBnb29kIG9yZGVyICh0aGF0JiMzOTtzIDFNQiBpZiB5b3UmIzM5O3JlIHVzaW5nIDRrQiBwYWdlcykKICAqLwotI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOyNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTwogI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUglIUEFHRV9QTURfT1JERVIKICNlbHNlCiAjZGVmaW5lIFBSRUZFUlJFRF9NQVhfUEFHRUNBQ0hFX09SREVSCTgKQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKQogICovCiBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuIDFVICZsdDsmbHQ7IChQQUdFX1NISUZUICYjNDM7IE1BWF9QQUdFQ0FDSEVfT1JERVIpOwogCXJldHVybiBQQUdFX1NJWkU7CiB9CkBAIC00MDUsMjkgJiM0Mzs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZCkKICAqIEBtaW46IE1pbmltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gMC1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuCiAgKiBAbWF4OiBNYXhpbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIEBtaW4tTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLgogICoKLSAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yIHRvCi0gKiBpbmRpY2F0ZSB3aGljaCBiYXNlIHNpemUgKG1pbikgYW5kIG1heGltdW0gc2l6ZSAobWF4KSBvZiBmb2xpbyB0aGUgVkZTCi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZAotICogaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbCBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMKLSAqIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuCiYjNDM7ICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IKJiM0MzsgKiB0byBpbmRpY2F0ZSB3aGljaCBzaXplIGZvbGlvcyBjYW4gYmUgdXNlZCB0byBjYWNoZSB0aGUgY29udGVudHMgb2YKJiM0MzsgKiB0aGUgaW5vZGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbAomIzQzOyAqIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcyBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLgogICogRG8gbm90IHR1bmUgaXQgYmFzZWQgb24sIGVnLCBpX3NpemUuCiAgKgomIzQzOyAqIGh1Z2V0bGIgY2FsbHMgdGhpcyB3aXRoIG9yZGVycyBsYXJnZXIgdGhhbiBNQVhfUEFHRUNBQ0hFX09SREVSLgomIzQzOyAqIE5vcm1hbCBmaWxlc3lzdGVtcyBzaG91bGQgbm90IGRvIHRoaXMuCiYjNDM7ICoKICAqIENvbnRleHQ6IFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlIGlub2RlIGlzIGFjdGl2ZSBhcyBpdAogICogaXMgbm9uLWF0b21pYy4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQkJIHVuc2lnbmVkIGludCBtaW4sCi0JCQkJCQkgdW5zaWduZWQgaW50IG1heCkKJiM0MzsJCXVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpCiB7Ci0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuOwotCi0JaWYgKG1pbiAmZ3Q7IE1BWF9QQUdFQ0FDSEVfT1JERVIpCi0JCW1pbiA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7Ci0KLQlpZiAobWF4ICZndDsgTUFYX1BBR0VDQUNIRV9PUkRFUikKLQkJbWF4ID0gTUFYX1BBR0VDQUNIRV9PUkRFUjsKLQogCWlmIChtYXggJmx0OyBtaW4pCiAJCW1heCA9IG1pbjsKIApAQCAtNDYwLDcgJiM0Mzs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewotCWlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKQomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gKG1hcHBpbmctJmd0O2ZsYWdzICZhbXA7IEFTX0ZPTElPX09SREVSX01BWF9NQVNLKSAmZ3Q7Jmd0OyBBU19GT0xJT19PUkRFUl9NQVg7CiB9CkBAIC00NjgsNyAmIzQzOzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewotCWlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKQomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gKG1hcHBpbmctJmd0O2ZsYWdzICZhbXA7IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSAmZ3Q7Jmd0OyBBU19GT0xJT19PUkRFUl9NSU47CiB9CkBAIC01MjQsNyAmIzQzOzUyOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2xhcmdlX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpCiAgKgogICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLgogICovCi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7I2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPCiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAkvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi8KZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDllMGNhNDgyNDkwNTRmLi45OTJlN2FlMGIyYmYyOSAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnCkBAIC04NDMsMTEgJiM0Mzs4NDMsMTUgQEAgY29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPCiBjb25maWcgTU1fSUQKIAlkZWZfYm9vbCBuCiAKJiM0Mztjb25maWcgRklMRU1BUF9MQVJHRV9GT0xJTwomIzQzOwlkZWZfYm9vbCBuCiYjNDM7CiBtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFCiAJYm9vbCAmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQmIzM0OwogCWRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFICZhbXA7JmFtcDsgIVBSRUVNUFRfUlQKIAlzZWxlY3QgQ09NUEFDVElPTgogCXNlbGVjdCBYQVJSQVlfTVVMVEkKJiM0MzsJc2VsZWN0IEZJTEVNQVBfTEFSR0VfRk9MSU8KIAlzZWxlY3QgTU1fSUQKIAloZWxwCiAJICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNThlYjlkMjQwNjQzNDguLmY2NjJjZGE4MWRjNzRjIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC0yNDgzLDYgJiM0MzsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAogCQlpZiAoIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSkKIAkJCWJyZWFrOwomIzQzOwkJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKQomIzQzOwkJCWJyZWFrOwogCQlpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKQogCQkJYnJlYWs7CiAJCWlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpCkBAIC0yNjk1LDYgJiM0MzsyNjk3LDggQEAgc3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCwKIAlpZiAoIWZvbGlvX2JhdGNoX2NvdW50KGZiYXRjaCkpIHsKIAkJREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlscCwgJmFtcDtmaWxwLSZndDtmX3JhLCBtYXBwaW5nLCBpbmRleCk7CiAKJiM0MzsJCWlmIChtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUobWFwcGluZykpCiYjNDM7CQkJcmV0dXJuIDA7CiAJCWlmIChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX05PSU8pCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKQpAQCAtMjc0OSw2ICYjNDM7Mjc1MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAocG9zMSAmZ3Q7Jmd0OyBzaGlmdCA9PSBwb3MyICZndDsmZ3Q7IHNoaWZ0KTsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsCiYjNDM7CQlzaXplX3QgYnl0ZXMpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7CiYjNDM7CXNpemVfdCBzYWZlX2J5dGVzOwomIzQzOwomIzQzOwlpZiAoIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKQomIzQzOwkJcmV0dXJuIGJ5dGVzOwomIzQzOwlpZiAoaXNfcGFnZV9od3BvaXNvbihwYWdlKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovCiYjNDM7CXNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTsKJiM0MzsJcGFnZSYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CS8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqLwomIzQzOwlmb3IgKDsgc2FmZV9ieXRlcyAmbHQ7IGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KQomIzQzOwkJaWYgKGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CXJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkKQEAgLTI4MjgsNiAmIzQzOzI4NTUsMjIgQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCQlnb3RvIHB1dF9mb2xpb3M7CiAJCWVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLSZndDtraV9wb3MgJiM0MzsgaXRlci0mZ3Q7Y291bnQpOwogCiYjNDM7CQlpZiAoIWZvbGlvX2JhdGNoX2NvdW50KCZhbXA7ZmJhdGNoKSkgewomIzQzOwkJCXNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7CiYjNDM7CQkJc2l6ZV90IG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcyAmYW1wOyAoZnNpemUgLSAxKTsKJiM0MzsJCQlzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLSZndDtraV9wb3MsCiYjNDM7CQkJCQkgICAgIGZzaXplIC0gb2Zmc2V0KTsKJiM0MzsJCQlzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7CiYjNDM7CiYjNDM7CQkJYWxyZWFkeV9yZWFkICYjNDM7PSBjb3BpZWQ7CiYjNDM7CQkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSBjb3BpZWQ7CiYjNDM7CQkJbGFzdF9wb3MgPSBpb2NiLSZndDtraV9wb3M7CiYjNDM7CiYjNDM7CQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKQomIzQzOwkJCQllcnJvciA9IC1FRkFVTFQ7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qCiAJCSAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24mIzM5O3Qgd2FudCB0byBiZSB0b3VjaGluZyBhbnkKIAkJICogY2FjaGVsaW5lcyB0aGF0IG1pZ2h0IGJlIGNvbnRlbmRlZDoKQEAgLTI4NjIsMTQgJiM0MzsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQkJaWYgKHdyaXRhYmx5X21hcHBlZCkKIAkJCQlmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pOwogCi0JCQljb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgYnl0ZXMsIGl0ZXIpOwomIzQzOwkJCWNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7CiYjNDM7CQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKQomIzQzOwkJCQllcnJvciA9IC1FSU87CiYjNDM7CQkJY29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGNvcGllZCwgaXRlcik7CiAKIAkJCWFscmVhZHlfcmVhZCAmIzQzOz0gY29waWVkOwogCQkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSBjb3BpZWQ7CiAJCQlsYXN0X3BvcyA9IGlvY2ItJmd0O2tpX3BvczsKIAogCQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKSB7Ci0JCQkJZXJyb3IgPSAtRUZBVUxUOwomIzQzOwkJCQlpZiAoIWVycm9yKQomIzQzOwkJCQkJZXJyb3IgPSAtRUZBVUxUOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDQxMyw3ICYjNDM7NDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlYy4uY2M4ZDk4Mzk5OTEzZTMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTE3NzUsNyAmIzQzOzE3NzUsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKICAqIHN0YWJsZS4gIER1ZSB0byBsb2NraW5nIG9yZGVyLCB3ZSBjYW4gb25seSB0cnlsb2NrX3dyaXRlLiAgSWYgd2UgY2FuCiAgKiBub3QgZ2V0IHRoZSBsb2NrLCBzaW1wbHkgcmV0dXJuIE5VTEwgdG8gY2FsbGVyLgogICovCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pOwogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA1MTUwOGE1NWM0MDU1ZS4uOWU0ZWU1ZDkzOTA1MDYgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtNDMsNiAmIzQzOzQzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC90YXNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2hhc2h0YWJsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tzbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKQEAgLTE4MDgsMzMgJiM0MzsxODA5LDI2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1mX2RheF9raWxsX3Byb2NzKTsKIAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIAotLyoKLSAqIFN0cnVjdCByYXdfaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCAmIzM0O3JhdyBlcnJvciBwYWdlJiMzNDssCi0gKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gLSZndDtfaHVnZXRsYl9od3BvaXNvbiBmaWVsZCBvZiBmb2xpby4KLSAqLwotc3RydWN0IHJhd19od3BfcGFnZSB7Ci0Jc3RydWN0IGxsaXN0X25vZGUgbm9kZTsKJiM0MzsvKiBQcm90ZWN0cyBodWdldGxiX2h3cG9pc29uIGxpc3QgKi8KJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGh0bGJfaHdwb2lzb25fbG9jayk7CiYjNDM7c3RhdGljIERFRklORV9IQVNIVEFCTEUoaHRsYl9od3BvaXNvbiwgNSk7CiYjNDM7CiYjNDM7c3RydWN0IGh3cF9wYWdlIHsKJiM0MzsJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfbGlzdF9oZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pCi17Ci0JcmV0dXJuIChzdHJ1Y3QgbGxpc3RfaGVhZCAqKSZhbXA7Zm9saW8tJmd0O19odWdldGxiX2h3cG9pc29uOwotfQotCi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQomIzQzOy8qCiYjNDM7ICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uCiYjNDM7ICovCiYjNDM7Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDsKLQlzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwOwotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwomIzQzOwljb25zdCBzdHJ1Y3QgaHdwX3BhZ2UgKnA7CiAJYm9vbCByZXQgPSBmYWxzZTsKIAogCWlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKLQkJcmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTsKLQogCS8qCiAJICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggc3VicGFnZXMKIAkgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuCkBAIC0xODQyLDM2ICYjNDM7MTgzNiwzOSBAQCBib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkKIAkJcmV0dXJuIHRydWU7CiAKLQltdXRleF9sb2NrKCZhbXA7bWZfbXV0ZXgpOwomIzQzOwlzcGluX2xvY2soJmFtcDtodGxiX2h3cG9pc29uX2xvY2spOwogCi0JcmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pOwotCWxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC0mZ3Q7Zmlyc3QsIG5vZGUpIHsKJiM0MzsJaGFzaF9mb3JfZWFjaF9wb3NzaWJsZShodGxiX2h3cG9pc29uLCBwLCBub2RlLCAodW5zaWduZWQgbG9uZylwYWdlKSB7CiAJCWlmIChwYWdlID09IHAtJmd0O3BhZ2UpIHsKIAkJCXJldCA9IHRydWU7CiAJCQlicmVhazsKIAkJfQogCX0KIAotCW11dGV4X3VubG9jaygmYW1wO21mX211dGV4KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtodGxiX2h3cG9pc29uX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZykKIHsKLQlzdHJ1Y3QgbGxpc3Rfbm9kZSAqaGVhZDsKLQlzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDsKJiM0MzsJaW50IGI7CiYjNDM7CXN0cnVjdCBod3BfcGFnZSAqcDsKJiM0MzsJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKIAl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKIAotCWhlYWQgPSBsbGlzdF9kZWxfYWxsKHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKSk7Ci0JbGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBoZWFkLCBub2RlKSB7CiYjNDM7CWhhc2hfZm9yX2VhY2hfc2FmZShodGxiX2h3cG9pc29uLCBiLCB0bXAsIHAsIG5vZGUpIHsKJiM0MzsJCWlmIChwYWdlX2ZvbGlvKHAtJmd0O3BhZ2UpICE9IGZvbGlvKQomIzQzOwkJCWNvbnRpbnVlOwogCQlpZiAobW92ZV9mbGFnKQogCQkJU2V0UGFnZUhXUG9pc29uKHAtJmd0O3BhZ2UpOwogCQllbHNlCiAJCQludW1fcG9pc29uZWRfcGFnZXNfc3ViKHBhZ2VfdG9fcGZuKHAtJmd0O3BhZ2UpLCAxKTsKJiM0MzsJCWhhc2hfZGVsKCZhbXA7cC0mZ3Q7bm9kZSk7CiAJCWtmcmVlKHApOwogCQljb3VudCYjNDM7JiM0Mzs7CiAJfQomIzQzOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTg4Nyw5ICYjNDM7MTg4NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKQogICovCiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKQogewotCXN0cnVjdCBsbGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCByYXdfaHdwX3BhZ2UgKnJhd19od3A7Ci0Jc3RydWN0IHJhd19od3BfcGFnZSAqcDsKJiM0MzsJc3RydWN0IGh3cF9wYWdlICpwOwogCWludCByZXQgPSBmb2xpb190ZXN0X3NldF9od3BvaXNvbihmb2xpbykgPyBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRCA6IDA7CiAKIAkvKgpAQCAtMTg5OSwxNiAmIzQzOzE4OTQsMTggQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAkgKi8KIAlpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpCiAJCXJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDsKLQloZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pOwotCWxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIGhlYWQtJmd0O2ZpcnN0LCBub2RlKSB7Ci0JCWlmIChwLSZndDtwYWdlID09IHBhZ2UpCiYjNDM7CXNwaW5fbG9jaygmYW1wO2h0bGJfaHdwb2lzb25fbG9jayk7CiYjNDM7CWhhc2hfZm9yX2VhY2hfcG9zc2libGUoaHRsYl9od3BvaXNvbiwgcCwgbm9kZSwgKHVuc2lnbmVkIGxvbmcpcGFnZSkgewomIzQzOwkJaWYgKHAtJmd0O3BhZ2UgPT0gcGFnZSkgewomIzQzOwkJCXNwaW5fdW5sb2NrKCZhbXA7aHRsYl9od3BvaXNvbl9sb2NrKTsKIAkJCXJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEOwomIzQzOwkJfQogCX0KIAotCXJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTsKLQlpZiAocmF3X2h3cCkgewotCQlyYXdfaHdwLSZndDtwYWdlID0gcGFnZTsKLQkJbGxpc3RfYWRkKCZhbXA7cmF3X2h3cC0mZ3Q7bm9kZSwgaGVhZCk7CiYjNDM7CXAgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHdwX3BhZ2UsIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAocCkgewomIzQzOwkJcC0mZ3Q7cGFnZSA9IHBhZ2U7CiYjNDM7CQloYXNoX2FkZChodGxiX2h3cG9pc29uLCAmYW1wO3AtJmd0O25vZGUsICh1bnNpZ25lZCBsb25nKXBhZ2UpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbApAQCAtMTkyMCwxMyAmIzQzOzE5MTcsMTUgQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAkJICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIHJhd19od3BfcGFnZSBpcyBub3QKIAkJICogdXNlZCBhbnkgbW9yZSwgc28gZnJlZSBpdC4KIAkJICovCi0JCV9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7CiYjNDM7CQlfX2ZvbGlvX2ZyZWVfaHdwKGZvbGlvLCBmYWxzZSk7CiAJfQomIzQzOwlzcGluX3VubG9jaygmYW1wO2h0bGJfaHdwb2lzb25fbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKQogewomIzQzOwl1bnNpZ25lZCBsb25nIGNvdW50OwogCS8qCiAJICogaHVnZXRsYl92bWVtbWFwX29wdGltaXplZCBodWdlcGFnZXMgY2FuJiMzOTt0IGJlIGZyZWVkIGJlY2F1c2Ugc3RydWN0CiAJICogcGFnZXMgZm9yIHRhaWwgcGFnZXMgYXJlIHJlcXVpcmVkIGJ1dCB0aGV5IGRvbiYjMzk7dCBleGlzdC4KQEAgLTE5NDEsNyAmIzQzOzE5NDAsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKQogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gX19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIG1vdmVfZmxhZyk7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2h0bGJfaHdwb2lzb25fbG9jayk7CiYjNDM7CWNvdW50ID0gX19mb2xpb19mcmVlX2h3cChmb2xpbywgbW92ZV9mbGFnKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtodGxiX2h3cG9pc29uX2xvY2spOwomIzQzOwlyZXR1cm4gY291bnQ7CiB9CiAKIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTE4MTMsNyAmIzQzOzE4MTMsNyBAQCBzdGF0aWMgdm9pZCBkb19taWdyYXRlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiAJCWlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkKIAkJCXBmbiA9IGZvbGlvX3Bmbihmb2xpbykgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTsKIAotCQlpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiYjNDM7CQlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKIAkJCS8qCiAJCQkgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbm5vdCBoYW5kbGUgbGFyZ2UgZm9saW9zCiAJCQkgKiBpbiBhbGwgY2FzZXMgeWV0LgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggYjUxZjgzYzk3MGJiMzcuLjQ5MmM5YmVmMzYyMDc0IDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTMyNDAsNyAmIzQzOzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiYjNDM7CWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewogCQlmb2xpb191bmxvY2soZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCQlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMzVjM2JiMTVhZTk2YTMuLjcwZTU0YWNlMGU3NDFjIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTA4Niw3ICYjNDM7MTA4Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJaWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSkKIAkJCWdvdG8ga2VlcDsKIAotCQlpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiYjNDM7CQlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKIAkJCS8qCiAJCQkgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbiYjMzk7dCBoYW5kbGUgbGFyZ2UKIAkJCSAqIGZvbGlvLCBqdXN0IHNraXAgaXQuIG1lbW9yeV9mYWlsdXJlKCkgd2lsbAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk1OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgaHVnZXRsYmZzIFJlYWQgSW1wbGVtZW50YXRpb24gYW5kIE1lbW9yeS1GYWlsdXJlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2lnbmlmaWNhbnRseSBpbXBhY3RzIGhvdyBodWdldGxiZnMgcmVhZHMgYXJlIGhhbmRsZWQsIGFsb25nIHdpdGggaG93IG1lbW9yeSBmYWlsdXJlcyBhcmUgbWFuYWdlZC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgcmVtb3ZpbmcgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIGFsdG9nZXRoZXIsIHJlcGxhY2luZyBpdCB3aXRoIHRoZSBtb3JlIGdlbmVyYWwgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLiBUaGF0JiMzOTtzIGEgcHJldHR5IHN1YnN0YW50aWFsIGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBJIGFsc28gc2VlIHRoYXQgaXQgaW50cm9kdWNlcyBhIGBGSUxFTUFQX0xBUkdFX0ZPTElPYCBjb25maWcgb3B0aW9uLCB3aGljaCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBgSFVHRVRMQl9QQUdFYCBvciBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFyZSBzZXQuIEludGVyZXN0aW5nLiBBbmQgaXQgYWxzbyBzZWVtcyB0byBiZSBtb2RpZnlpbmcgYGZpbGVtYXBfcmVhZGAgdG8gc3BlY2lmaWNhbGx5IGFjY291bnQgZm9yIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIHVzaW5nIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLCBhbG9uZyB3aXRoIGNoYW5naW5nIGBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZWAgdG8gYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAgYW5kIHVzaW5nIGEgaGFzaCB0YWJsZS4KCkZpcnN0IHRoaW5ncyBmaXJzdDogZG9lcyB0aGlzIGV2ZW4gKndvcmsqPyBZZXMsIHRoaXMgZGVmaW5pdGVseSB0b3VjaGVzIG9uIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGh1Z2V0bGJmcyByZWFkIHBhdGhzLiBBbmQgSSBjYW4gdGVsbCB0aGlzIHBhdGNoIGlzIGNlcnRhaW5seSB3b3J0aCBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgc29tZSBjcnVjaWFsIHN5bWJvbHMgdG8gZm9jdXMgb24uIGBmaWxlbWFwX3JlYWRgIGxvb2tzIGxpa2UgYSBob3QgcGF0aCwgYnV0IGl0JiMzOTtzIGJlZW4gY2hhbmdlZCBoZXJlLCBzbyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBnb29kIG9uZS4gYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAgc2VlbXMgbGlrZSBhbm90aGVyIHN0cm9uZyBjYW5kaWRhdGUuIEFuZCBzaW5jZSBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBgbW0vZmlsZW1hcC5jYCwgaXQmIzM5O3Mgd29ydGggdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBvdGhlciBmdW5jdGlvbnMgaXQgaW50ZXJhY3RzIHdpdGguIEFkZGl0aW9uYWxseSwgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgIGFuZCBgZm9saW9fZnJlZV9yYXdfaHdwYCBhcmUgYWxzbyBzdGF0aWMsIHNvIEkgd2lsbCBpbnZlc3RpZ2F0ZSB0aGVzZSB0b28uCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGBtbS9maWxlbWFwLmNgIHRvIHNlZSBob3cgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgaXMgdXNlZC4gSSBzZWUgdGhhdCBpdCBpcyBjYWxsZWQgYnkgYGZpbGVtYXBfcmVhZGAsIHdoaWNoIGlzIGV4cGVjdGVkLiBJcyBpdCB1c2VkIGJ5IGFueSBvdGhlciBmdW5jdGlvbnM/IEFsc28gaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBJIG5vdGljZSBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gIGFuZCBgX19mb2xpb19mcmVlX2h3cGAuIEFsbCBvZiB0aGVzZSBjb3VsZCBiZSB0YXJnZXRzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBDT05GSUdfSFVHRVRMQl9QQUdFYCwgYENPTkZJR19NRU1PUllfRkFJTFVSRWAsIGFuZCBgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9gICh3aGljaCBpcyBlbmFibGVkIGJ5IHRoZSBmaXJzdCB0d28pLgoKQWxyaWdodCwgSSYjMzk7bGwgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBnZXQgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWVzIGFuZCBnZXQgYSBjbGVhcmVyIHZpZXcgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Nj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MS0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDcyOmJvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNzMtXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA3OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDgzLVx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDg0Olx0XHRyZXR1cm4gaHVnZXRsYl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwODUtXHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwODctI2Vsc2VcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwODg6c3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA4OS1cdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODE2PXN0cnVjdCBod3BfcGFnZSB7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODIzLSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxODI0OmJvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODI1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQzMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTWVtb3J5IENvcnJ1cHRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUtaW5kdWNlZCBtZW1vcnkgY29ycnVwdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHRoaXMgYXQgdGhlIGZpbGVtYXAgbGV2ZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG1tL2ZpbGVtYXAuY2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBiZWNhdXNlIGZpbGVtYXBzIGFyZSBmdW5kYW1lbnRhbGx5IGxpbmtlZCB0byBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHBhZ2UtYmFja2VkIGZpbGVzIGFuZCwgY3JpdGljYWxseSwgaG93IGl0IGhhbmRsZXMgSS9PLiBHaXZlbiB0aGUga2V5d29yZCAmIzM0O2FkanVzdF9yYW5nZV9od3BvaXNvbiYjMzQ7LCBteSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiwgb3Igb25lIGNsb3NlbHkgcmVsYXRlZCB0byBpdCwgd2lsbCBiZSBjcml0aWNhbCBpbiBtYXJraW5nIGEgcmVnaW9uIG9mIGEgZmlsZW1hcCBhcyBjb3JydXB0ZWQgYW5kIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgZnVydGhlciBhY2Nlc3Mgb3IgcHJvcGFnYXRpbmcgdGhlIGVycm9yIHNpZ25hbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGVyZSB0aGUga2VybmVsJiMzOTtzIHRha2luZyBhY3Rpb24gaGVyZS4gSSYjMzk7bSBob3BpbmcgSSBjYW4gcGllY2UgdG9nZXRoZXIgdGhlIGNhbGxpbmcgY29udGV4dCBhbmQgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gZ2V0IGEgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGUgc3lzdGVtIHJlc3BvbmRzIHRvIHRoaXMgc3BlY2lmaWMgdHlwZSBvZiBmYXVsdC4gTGV0JiMzOTtzIGdldCBjcmFja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGp1c3RfcmFuZ2VfaHdwb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jPTI3NDk9c3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMjc1NS1cbm1tL2ZpbGVtYXAuYzoyNzU2OnN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG5tbS9maWxlbWFwLmMtMjc1Ny1cdFx0c2l6ZV90IGJ5dGVzKVxuLS1cbm1tL2ZpbGVtYXAuYz0yODA0PXNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0yOTA3LVxubW0vZmlsZW1hcC5jOjI5MDg6XHRcdFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcbm1tL2ZpbGVtYXAuYy0yOTA5LVx0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTA3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIEh1Z2VUTEIgSGFyZHdhcmUgUG9pc29uaW5nICZhbXA7IEZvbGlvIEZyZWVpbmcqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGhhcmR3YXJlIHBvaXNvbmluZyB3aXRoaW4gdGhlIEh1Z2VUTEIgc3lzdGVtLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB3ZSByZWFjdCB0byBoYXJkd2FyZS1pbmR1Y2VkIGVycm9ycy4gU28sIEkgbmVlZCB0byBjaGVjayBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgYW5kLCB2ZXJ5IGltcG9ydGFudGx5LCBob3cgdGhhdCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBgX19mb2xpb19mcmVlX2h3cGAuIFRoaXMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byBob3cgd2UgZGV0ZWN0IHRoZSBjb3JydXB0aW9uIGFuZCwgY3J1Y2lhbGx5LCBob3cgd2UgaGFuZGxlIGZyZWVpbmcgdGhlIGZvbGlvIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycnVwdGVkIHBhZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nIGFuZCBpbnRlcmFjdGlvbnMgaGVyZSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGZ1cnRoZXIgY29ycnVwdGlvbiBhZnRlciBhIGhhcmR3YXJlIGZhdWx0LiBNeSBtYWluIG9iamVjdGl2ZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBlcnJvciBoYW5kbGluZyB3b3JrZmxvdyB3aGVuIGRlYWxpbmcgd2l0aCBwb2lzb25lZCBIdWdlVExCIHBhZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfdXBkYXRlX2h3cG9pc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MTg1Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg4NC0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg4NTpzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODg2LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE5NTk9c3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTk4OS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTk5MDpcdHJjID0gaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oZm9saW8sIHBhZ2UpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTkxLVx0aWYgKHJjIFx1MDAzZT0gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQwOQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gYSBQb3RlbnRpYWwgTWVtb3J5IElzc3VlKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBzdXNwZWN0ZWQgbWVtb3J5IGZhaWx1cmUgb24gb3VyIGhhbmRzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBkaXJlY3RseSBpbnRvIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgdGhlIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgYF9fZm9saW9fZnJlZV9od3BgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggaGFyZHdhcmUgcGFnZSB0YWJsZSBlbnRyaWVzLCBhbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZXJyb3IsIGl0IHNlZW1zIGxpa2UgYSBsaWtlbHkgcG9pbnQgd2hlcmUgdGhlIHByb2JsZW0gbWlnaHQgYmUgb3JpZ2luYXRpbmcgb3IgYmVpbmcgcHJvcGFnYXRlZC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8gZGF0YSBzdHJ1Y3R1cmUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHBvdGVudGlhbCBoYXJkd2FyZSBlcnJvcnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19mb2xpb19mcmVlX2h3cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTE4MjQ9Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODUyLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxODUzOnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NTQte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTg4NT1zdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkxOS1cdFx0ICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5MjA6XHRcdF9fZm9saW9fZnJlZV9od3AoZm9saW8sIGZhbHNlKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkyMS1cdH1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE5MjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTk0My1cdHNwaW5fbG9jayhcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxOTQ0Olx0Y291bnQgPSBfX2ZvbGlvX2ZyZWVfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTQ1LVx0c3Bpbl91bmxvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NTMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBodWdldGxiZnMgaW5vZGUgaW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgIGFuZCBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgZG9lcyBleGFjdGx5LiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHdoZXJlIEkmIzM5O2QgZ28gaW1tZWRpYXRlbHksIGlzIHRvIGNoZWNrIGBmcy9odWdldGxiZnMvaW5vZGUuY2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyByZWd1bGFyIGlub2RlcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBodWdldGxiZnMgZmlsZXN5c3RlbS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhpbmdzIGxpa2U6CgoqICAgSG93IGFyZSB0aGUgaW5vZGUmIzM5O3MgZGF0YSBzdHJ1Y3R1cmVzIHBvcHVsYXRlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgdmZzX2lub2RlIGRhdGEsIG9yIGlzIHRoZXJlIGh1Z2V0bGJmcy1zcGVjaWZpYyBtZXRhZGF0YSB0b28/CiogICBXaGF0IGhhcHBlbnMgdG8gYmxvY2sgYWxsb2NhdGlvbiwgb3IgaXMgaXQgcGFnZS1iYXNlZCBnaXZlbiB0aGUgbmF0dXJlIG9mIGh1Z2UgcGFnZXM/CiogICBBbnkgaG9va3MgZm9yIHNlY3VyaXR5IGF0dHJpYnV0ZXMsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIG9yIG90aGVyIHJlbGV2YW50IGZlYXR1cmVzPwoKSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGltcGxlbWVudGF0aW9uIGRldGFpbHMgdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0sIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBpbml0aWFsaXphdGlvbiBmbG93IGlzIGNydWNpYWwgdG8gdGhlIG92ZXJhbGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz03NTc9c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzc4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Nzc5OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc4MC17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzk3PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MzEtXHRcdGNhc2UgU19JRlJFRzpcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgzMjpcdFx0XHRodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKGlub2RlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMy1cdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0ODEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiZnMgUmVhZC9NZW1vcnkgRmFpbHVyZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBpbXByb3ZpbmcgaG93IHdlIGhhbmRsZSByZWFkIGFuZCBtZW1vcnkgZmFpbHVyZXMgd2l0aGluIGh1Z2V0bGIgcGFnZXMuIE15IGluaXRpYWwgc2NhbiBmb2N1c2VzIG9uIGEgZmV3IGtleSBzeW1ib2xzOiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAsIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAsIGBfX2ZvbGlvX2ZyZWVfaHdwYCwgYW5kIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYC4gVGhlc2Ugc2VlbSBjZW50cmFsIHRvIHRoZSBjb3JlIGxvZ2ljLCBzbyBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvbiBob3cgdGhlIGNoYW5nZXMgaW1wYWN0IHRoZW0gc3BlY2lmaWNhbGx5LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGUgdGV4dCBsaXN0cyBgSFVHRVRMQkZTYCwgYEhVR0VUTEJfUEFHRWAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBBaCwgYnV0IHdhaXQgYSBtaW51dGXigKYgSSBzZWUgYEZJTEVNQVBfTEFSR0VfRk9MSU9gIGlzIGEgKnNpbGVudCogY29uZmlnLCBzZWxlY3RlZCBieSBgSFVHRVRMQl9QQUdFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gSXQgbWVhbnMgd2Ugb25seSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGBIVUdFVExCRlNgLCBgSFVHRVRMQl9QQUdFYCwgYW5kIGBNRU1PUllfRkFJTFVSRWAuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhpcywgYnV0IGl0IHNlZW1zIGNvcnJlY3QuIFdlIGNhbiB2ZXJpZnkgaWYgdGhvc2UgYXJlIHRoZSBhcHByb3ByaWF0ZSBjb25maWdzIGZvciB0aGlzIG5ldyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2Vcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDs2NGtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXHRib29sIFwmIzM0OzI1NmtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7MU1CXCYjMzQ7XG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDs0TUJcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cdGJvb2wgXCYjMzQ7NjRNQlwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNzctXG5mcy9LY29uZmlnOjI3ODpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc5LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4tLVxuZnMvS2NvbmZpZy0yODMtXG5mcy9LY29uZmlnOjI4NDpjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG5mcy9LY29uZmlnLTI4NS1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy03MDgtXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNzEwLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcwNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBhbmQgQ29ubmVjdGluZyBIV1BvaXNvbiBGdW5jdGlvbnMgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZXNlIGhhcmR3YXJlIHBvaXNvbiBmdW5jdGlvbnMgYXJlIHdpcmVkIHRvZ2V0aGVyLCBzcGVjaWZpY2FsbHkgd2l0aCBgSFVHRVRMQkZTYCBhbmQgYE1FTU9SWV9GQUlMVVJFYCBlbmFibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbnMuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5IG9mIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgZmlsZW1hcF9yZWFkYCwgd2hpY2ggaXMgdGhlIGdlbmVyaWMgcmVhZCBpdGVyYXRvci4gYGZpbGVtYXBfcmVhZGAgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIExvb2tpbmcgYXQgdGhlIGBodWdldGxiZnNgIGZpbGUgb3BlcmF0aW9ucywgdGhlIGByZWFkX2l0ZXJgIGZ1bmN0aW9uIGlzLCByaWdodCBub3csIGp1c3QgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLiBTbywgdGhhdCBjb25maXJtcyB0aGUgZmlyc3QgcGFydC4gYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOZXh0LCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYC4gVGhpcyBvbmUgaXMgY2FsbGVkIGJ5IGBpc19wYWdlX2h3cG9pc29uYCBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGZyb20gYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEdvb2QsIHRoZSBjb25uZWN0aW9uIGlzIHRoZXJlLgoKTm93IGZvciBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgZnJvbSBgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb25gIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgZnJvbSBgbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYmAuCgpBbmQgZmluYWxseSwgYF9fZm9saW9fZnJlZV9od3BgLiBUaGlzIG9uZSBnZXRzIGNhbGxlZCBmcm9tIGJvdGggYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCBhbmQgYGZvbGlvX2ZyZWVfcmF3X2h3cGAuIGBmb2xpb19mcmVlX3Jhd19od3BgIGlzIGNhbGxlZCBmcm9tIGBmcmVlX2h1Z2VfZm9saW9gIGluIGBtbS9odWdldGxiLmNgLgoKT2theSwgYWxsIHRob3NlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGFuZCBzZWVtIHRvIGJlIGNvbm5lY3RlZCBhcyBleHBlY3RlZC4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTttIGNsZWFyIG9uIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMsIEkgbmVlZCB0byBrZWVwIGEgZmV3IGluIG1pbmQ6IGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgYW5kIGBfX2ZvbGlvX2ZyZWVfaHdwYCwgYXMgd2VsbCBhcyBgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZWAuCgpBaCwgcmlnaHQsIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIHN0YXRpYyB3aXRoaW4gYG1tL2ZpbGVtYXAuY2AuIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGlzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCBpcyBzdGF0aWMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFzIHdlbGwsIGFzIGlzIGBfX2ZvbGlvX2ZyZWVfaHdwYC4gRmluYWxseSwgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgIGlzIHN0YXRpYyBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLgoKTGV0IG1lIGFkZCBvbmUgbW9yZSB0aGluZyB0byB0aGUgbGlzdCB0byBjb25maXJtIC0gSSBzaG91bGQgY2hlY2sgaWYgYEZJTEVNQVBfTEFSR0VfRk9MSU9gIGlzIGEgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZJTEVNQVBfTEFSR0VfRk9MSU8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04NDUtXG5tbS9LY29uZmlnOjg0Njpjb25maWcgRklMRU1BUF9MQVJHRV9GT0xJT1xubW0vS2NvbmZpZy04NDctXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTE5CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIGBGSUxFTUFQX0xBUkdFX0ZPTElPYCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgRklMRU1BUF9MQVJHRV9GT0xJT2AgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYnV0IGl0JiMzOTtzIG5vdCBkaXJlY3RseSBzZWxlY3RhYmxlIGJ5IHRoZSB1c2VyLCByaWdodD8gSXQmIzM5O3MgbW9yZSBvZiBhbiAqaW1wbGljaXQqIGNob2ljZSBiYXNlZCBvbiBvdGhlciBzZXR0aW5ncy4gSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHRoZSBlbmFibGluZyBvZiBgSFVHRVRMQl9QQUdFYCBhbmQsIGluIHR1cm4sIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2VlLiBTbyBpdCYjMzk7cyBhIHNvcnQgb2YgZGVwZW5kZW5jeS4gVGhlIHdheSBpdCB3b3JrcyBpcywgaWYgZWl0aGVyIG9uZSBvZiB0aG9zZSBpcyBzZXQsIHRoZW4gdGhlIG90aGVyIG9uZSBpcyBhc3N1bWVkLiBDb25zZXF1ZW50bHksIHNldHRpbmcgYEhVR0VUTEJGU2AsIHdoaWNoIGJyaW5ncyBgSFVHRVRMQl9QQUdFYCBhbG9uZyBmb3IgdGhlIHJpZGUsIGlzIHRoZSBuZWNlc3NhcnkgbGV2ZXIgdG8gcHVsbCBoZXJlLiBGaW5lLCBJJiMzOTt2ZSBnb3QgaXQuIEkmIzM5O2xsIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkanVzdF9yYW5nZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl91cGRhdGVfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7X19mb2xpb19mcmVlX2h3cCYjMzQ7LAogICAgJiMzNDtodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdldGxiZnMgcmVhZCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgdGhlIGdlbmVyaWMgZmlsZW1hcCByZWFkIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIGZvciBodWdldGxiIHBhZ2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgaHdwb2lzb25lZCBwYWdlcyBkdXJpbmcgZmlsZW1hcCByZWFkcyBhbmQgY2hhbmdlcyBob3cgaHdwb2lzb25lZCBodWdldGxiIHBhZ2VzIGFyZSB0cmFja2VkICh1c2luZyBhIGhhc2ggdGFibGUgaW5zdGVhZCBvZiBhIGxpbmtlZCBsaXN0KS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkanVzdF9yYW5nZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl91cGRhdGVfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7X19mb2xpb19mcmVlX2h3cCYjMzQ7LAogICAgJiMzNDtodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdldGxiZnMgcmVhZCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgdGhlIGdlbmVyaWMgZmlsZW1hcCByZWFkIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIGZvciBodWdldGxiIHBhZ2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgaHdwb2lzb25lZCBwYWdlcyBkdXJpbmcgZmlsZW1hcCByZWFkcyBhbmQgY2hhbmdlcyBob3cgaHdwb2lzb25lZCBodWdldGxiIHBhZ2VzIGFyZSB0cmFja2VkICh1c2luZyBhIGhhc2ggdGFibGUgaW5zdGVhZCBvZiBhIGxpbmtlZCBsaXN0KS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNDoxOC42NTE1NDMwNjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjA1OTkzODU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRqdXN0X3JhbmdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcImh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uXCIsXG4gICAgXCJfX2ZvbGlvX2ZyZWVfaHdwXCIsXG4gICAgXCJodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGh1Z2V0bGJmcyByZWFkIGltcGxlbWVudGF0aW9uIHRvIHVzZSB0aGUgZ2VuZXJpYyBmaWxlbWFwIHJlYWQgaXRlcmF0b3IgYW5kIHVwZGF0ZXMgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcgZm9yIGh1Z2V0bGIgcGFnZXMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGhhbmRsZSBod3BvaXNvbmVkIHBhZ2VzIGR1cmluZyBmaWxlbWFwIHJlYWRzIGFuZCBjaGFuZ2VzIGhvdyBod3BvaXNvbmVkIGh1Z2V0bGIgcGFnZXMgYXJlIHRyYWNrZWQgKHVzaW5nIGEgaGFzaCB0YWJsZSBpbnN0ZWFkIG9mIGEgbGlua2VkIGxpc3QpLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGh1Z2V0bGJmcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDQ6MDQ6MTguNjUxNTUwMDU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQ2OTMzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMjI2YjM3Y2YzNDMzM2ViODQ2YzNiYjIxMDk4MjQ4ZWRhZjIxYzU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDE1IDA0OjA0OjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXFxuaW5kZXggY2Y2YWU2NDc3NmU2MmMuLjQ5MjJhZGY1YmM4NTEyIDEwMDY0NFxcbi0tLSBhL2ZzL0tjb25maWdcXG4rKysgYi9mcy9LY29uZmlnXFxuQEAgLTI3Miw2ICsyNzIsNyBAQCBlbmRpZiAjIEhVR0VUTEJGU1xcbiBcXG4gY29uZmlnIEhVR0VUTEJfUEFHRVxcbiBcXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4rXFx0c2VsZWN0IEZJTEVNQVBfTEFSR0VfRk9MSU9cXG4gXFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiBcXG4gY29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uYTZmMDQ1OWQ3OWRlYjggMTAwNjQ0XFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG4rKysgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbkBAIC0xODcsMTEzICsxODcsNiBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFNvbWVvbmUgd2FudHMgdG8gcmVhZCBAYnl0ZXMgZnJvbSBhIEhXUE9JU09OIGh1Z2V0bGIgQGZvbGlvIGZyb20gQG9mZnNldC5cXG4tICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcXG4tICogSFdQT0lTT04gcGFnZS5cXG4tICovXFxuLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxuLVxcdFxcdHNpemVfdCBieXRlcylcXG4te1xcbi1cXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XFxuLVxcdHNpemVfdCBzYWZlX2J5dGVzO1xcbi1cXG4tXFx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xcbi1cXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XFxuLVxcdHBhZ2UrKztcXG4tXFxuLVxcdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xcbi1cXHRmb3IgKDsgc2FmZV9ieXRlcyBcXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICs9IFBBR0VfU0laRSwgcGFnZSsrKVxcbi1cXHRcXHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIFN1cHBvcnQgZm9yIHJlYWQoKSAtIEZpbmQgdGhlIHBhZ2UgYXR0YWNoZWQgdG8gZl9tYXBwaW5nIGFuZCBjb3B5IG91dCB0aGVcXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXFxuLSAqL1xcbi1zdGF0aWMgc3NpemVfdCBodWdldGxiZnNfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4te1xcbi1cXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHA7XFxuLVxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTtcXG4tXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwM2VcXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcXG4tXFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZW5kX2luZGV4O1xcbi1cXHRsb2ZmX3QgaXNpemU7XFxuLVxcdHNzaXplX3QgcmV0dmFsID0gMDtcXG4tXFxuLVxcdHdoaWxlIChpb3ZfaXRlcl9jb3VudCh0bykpIHtcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4tXFx0XFx0c2l6ZV90IG5yLCBjb3BpZWQsIHdhbnQ7XFxuLVxcbi1cXHRcXHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xcbi1cXHRcXHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xcbi1cXHRcXHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4tXFx0XFx0aWYgKCFpc2l6ZSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGVuZF9pbmRleCA9IChpc2l6ZSAtIDEpIFxcdTAwM2VcXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcXG4tXFx0XFx0aWYgKGluZGV4IFxcdTAwM2UgZW5kX2luZGV4KVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0aWYgKGluZGV4ID09IGVuZF9pbmRleCkge1xcbi1cXHRcXHRcXHRuciA9ICgoaXNpemUgLSAxKSBcXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSkgKyAxO1xcbi1cXHRcXHRcXHRpZiAobnIgXFx1MDAzYz0gb2Zmc2V0KVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRuciA9IG5yIC0gb2Zmc2V0O1xcbi1cXG4tXFx0XFx0LyogRmluZCB0aGUgZm9saW8gKi9cXG4tXFx0XFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfaHVnZXRsYl9mb2xpbyhoLCBtYXBwaW5nLCBpbmRleCk7XFxuLVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFdlIGhhdmUgYSBIT0xFLCB6ZXJvIG91dCB0aGUgdXNlci1idWZmZXIgZm9yIHRoZVxcbi1cXHRcXHRcXHQgKiBsZW5ndGggb2YgdGhlIGhvbGUgb3IgcmVxdWVzdC5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGNvcGllZCA9IGlvdl9pdGVyX3plcm8obnIsIHRvKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFxuLVxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxuLVxcdFxcdFxcdFxcdHdhbnQgPSBucjtcXG4tXFx0XFx0XFx0ZWxzZSB7XFxuLVxcdFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdFxcdCAqIEFkanVzdCBob3cgbWFueSBieXRlcyBzYWZlIHRvIHJlYWQgd2l0aG91dFxcbi1cXHRcXHRcXHRcXHQgKiB0b3VjaGluZyB0aGUgMXN0IHJhdyBIV1BPSVNPTiBwYWdlIGFmdGVyXFxuLVxcdFxcdFxcdFxcdCAqIG9mZnNldC5cXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHdhbnQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgbnIpO1xcbi1cXHRcXHRcXHRcXHRpZiAod2FudCA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHZhbCA9IC1FSU87XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIHdhbnQsIHRvKTtcXG4tXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRvZmZzZXQgKz0gY29waWVkO1xcbi1cXHRcXHRyZXR2YWwgKz0gY29waWVkO1xcbi1cXHRcXHRpZiAoY29waWVkICE9IG5yIFxcdTAwMjZcXHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xcbi1cXHRcXHRcXHRpZiAoIXJldHZhbClcXG4tXFx0XFx0XFx0XFx0cmV0dmFsID0gLUVGQVVMVDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aW5kZXggKz0gb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcXG4tXFx0XFx0b2Zmc2V0IFxcdTAwMjY9IH5odWdlX3BhZ2VfbWFzayhoKTtcXG4tXFx0fVxcbi1cXHRpb2NiLVxcdTAwM2VraV9wb3MgPSAoKGxvZmZfdClpbmRleCBcXHUwMDNjXFx1MDAzYyBodWdlX3BhZ2Vfc2hpZnQoaCkpICsgb2Zmc2V0O1xcbi1cXHRyZXR1cm4gcmV0dmFsO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuIFxcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHRsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXFxuQEAgLTg4Myw2ICs3NzYsMTYgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdHJldHVybiBpbm9kZTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XFxuK1xcdHVuc2lnbmVkIGludCBvcmRlciA9IGh1Z2VfcGFnZV9vcmRlcihoc3RhdGUpO1xcbitcXG4rXFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XFxuK1xcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbitcXHRtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBIdWdldGxiZnMgaXMgbm90IHJlY2xhaW1hYmxlOyB0aGVyZWZvcmUgaXRzIGlfbW1hcF9yd3NlbSB3aWxsIG5ldmVyXFxuICAqIGJlIHRha2VuIGZyb20gcmVjbGFpbSAtLSB1bmxpa2UgcmVndWxhciBmaWxlc3lzdGVtcy4gVGhpcyBuZWVkcyBhblxcbkBAIC05MjYsOCArODI5LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFNfSUZSRUc6XFxuLVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xcbi1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcXG4rXFx0XFx0XFx0aHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShpbm9kZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFNfSUZESVI6XFxuIFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG5AQCAtMTIwNiw3ICsxMTA4LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tXFx0LnJlYWRfaXRlclxcdFxcdD0gaHVnZXRsYmZzX3JlYWRfaXRlcixcXG4rXFx0LnJlYWRfaXRlclxcdFxcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcXG4gXFx0Lm1tYXBcXHRcXHRcXHQ9IGh1Z2V0bGJmc19maWxlX21tYXAsXFxuIFxcdC5mc3luY1xcdFxcdFxcdD0gbm9vcF9mc3luYyxcXG4gXFx0LmdldF91bm1hcHBlZF9hcmVhXFx0PSBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjE4Nzg2NDJlNzVlYzUxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5AQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wgaHVnZXRsYmZzX3BhZ2VjYWNoZV9wcmVzZW50KHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XFxuIFxcbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuIGV4dGVybiBpbnQgbW92YWJsZV9naWdhbnRpY19wYWdlcyBfX3JlYWRfbW9zdGx5O1xcbiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5O1xcbkBAIC0yOTIsOCArMjkyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTU5NSw4ICs1OTQsOCBAQCBlbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuLVxcdHtcXHR2b2lkICpwcml2YXRlID0gXFx1MDAyNmZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcdFxcdFxcXFxcXG4rYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXFxcXFxuK1xcdHtcXHRjb25zdCB2b2lkICpwcml2YXRlID0gXFx1MDAyNmZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcdFxcdFxcXFxcXG4gXFx0XFx0cmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7XFx0XFx0XFxcXFxcbiBcXHR9XFxuIFxcbkBAIC02MTYsNyArNjE1LDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbiAjZWxzZVxcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuIHN0YXRpYyBpbmxpbmUgYm9vbFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbitmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuIFxcdHsgcmV0dXJuIDA7IH1cXG4gXFxuICNkZWZpbmUgU0VUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbkBAIC03MjcsNyArNzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRyZXR1cm4gSFVHRVRMQkZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc3Bvb2w7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gZm9saW8tXFx1MDAzZV9odWdldGxiX3N1YnBvb2w7XFxuIH1cXG5AQCAtODU3LDcgKzg1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2hhc19odWdlX2Jvb3RtZW1fYWxsb2Modm9pZClcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxuIFxcdHJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7XFxuQEAgLTEwNzAsMTEgKzEwNjksNiBAQCB2b2lkIGh1Z2V0bGJfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XFxuIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xcbiAjZW5kaWZcXG4gXFxuLS8qXFxuLSAqIENoZWNrIGlmIGEgZ2l2ZW4gcmF3IEBwYWdlIGluIGEgaHVnZXBhZ2UgaXMgSFdQT0lTT04uXFxuLSAqL1xcbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcXG4tXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbiBcXHRyZXR1cm4gUEFHRV9NQVNLIFxcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTtcXG5AQCAtMTA4OCw3ICsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTExNTcsNyArMTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXFxuaW5kZXggYjE4YzJiMmU3ZDJjNjUuLmVkNWMwODI5ZmY1NjlhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbkBAIC0zODcsNyArMzg3LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xcbiAgKiBAX2h1Z2V0bGJfc3VicG9vbDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGIuaC5cXG4gICogQF9odWdldGxiX2Nncm91cDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXFxuICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXFxuLSAqIEBfaHVnZXRsYl9od3BvaXNvbjogRG8gbm90IHVzZSBkaXJlY3RseSwgY2FsbCByYXdfaHdwX2xpc3RfaGVhZCgpLlxcbiAgKiBAX2RlZmVycmVkX2xpc3Q6IEZvbGlvcyB0byBiZSBzcGxpdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxcbiAgKlxcbkBAIC00OTksNyArNDk4LDYgQEAgc3RydWN0IGZvbGlvIHtcXG4gXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfc3VicG9vbDtcXG4gXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xcbiBcXHRcXHRcXHR2b2lkICpfaHVnZXRsYl9jZ3JvdXBfcnN2ZDtcXG4tXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247XFxuIFxcdC8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqL1xcbiBcXHRcXHR9O1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSBfX3BhZ2VfMztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbmluZGV4IDcyMjNmNmY0ZTJiNDAzLi44ZTU3YzEyYTczMDFiNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuQEAgLTEwNjgsNiArMTA2OCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbitib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuK1xcbiAvKlxcbiAgKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiBOb3RlIHRoYXQgdGhpcyBjaGVjayBpc1xcbiAgKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXFxuQEAgLTEwNzUsMTggKzEwNzgsMjkgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4tXFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuK1xcbitcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSk7XFxuK1xcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4gXFxuLVxcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuLVxcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIFxcdTAwMjZcXHUwMDI2IFBhZ2VIV1BvaXNvbihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpO1xcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4rI2VuZGlmXFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcXG4tXFx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XFxuK1xcdCAgICAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xcbiB9XFxuIFxcbiBib29sIGlzX2ZyZWVfYnVkZHlfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcXG5pbmRleCAyYzM3MThkNTkyZDZkZC4uYmQ2YTYyNzVhNGU5MTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbkBAIC0yMTAsNiArMjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHtcXG4gXFx0QVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNID0gOSxcXG4gXFx0QVNfS0VSTkVMX0ZJTEUgPSAxMCxcXHQvKiBtYXBwaW5nIGZvciBhIGZha2Uga2VybmVsIGZpbGUgdGhhdCBzaG91bGRuJ3RcXG4gXFx0XFx0XFx0XFx0ICAgYWNjb3VudCB1c2FnZSB0byB1c2VyIGNncm91cHMgKi9cXG4rXFx0QVNfQVVUSE9SSVRBVElWRSA9IDExLFxcdC8qIElmIHdlIG1pc3MgaW4gdGhlIHBhZ2UgY2FjaGUsIGl0J3MgYSBob2xlICovXFxuIFxcdC8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovXFxuIFxcdEFTX0ZPTElPX09SREVSX0JJVFMgPSA1LFxcbiBcXHRBU19GT0xJT19PUkRFUl9NSU4gPSAxNixcXG5AQCAtMzQ1LDYgKzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlc1xcbiBcXHRyZXR1cm4gdGVzdF9iaXQoQVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNLCBcXHUwMDI2bWFwcGluZy1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4re1xcbitcXHRzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VmbGFncyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuK3tcXG4rXFx0cmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VmbGFncyk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWFwcGluZ19nZnBfbWFzayhjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4ge1xcbiBcXHRyZXR1cm4gbWFwcGluZy1cXHUwMDNlZ2ZwX21hc2s7XFxuQEAgLTM3Myw3ICszODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXFxuICAqIGFzc3VtcHRpb25zIGFib3V0IG1heGltdW0gb3JkZXIgaWYgVEhQIGFyZSBkaXNhYmxlZCwgYnV0IDggc2VlbXMgbGlrZVxcbiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQncyAxTUIgaWYgeW91J3JlIHVzaW5nIDRrQiBwYWdlcylcXG4gICovXFxuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rI2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXFxuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcXHRIUEFHRV9QTURfT1JERVJcXG4gI2Vsc2VcXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlxcdDhcXG5AQCAtMzk0LDcgKzQwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXFxuIHtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxcbiBcXHRcXHRyZXR1cm4gMVUgXFx1MDAzY1xcdTAwM2MgKFBBR0VfU0hJRlQgKyBNQVhfUEFHRUNBQ0hFX09SREVSKTtcXG4gXFx0cmV0dXJuIFBBR0VfU0laRTtcXG4gfVxcbkBAIC00MDUsMjkgKzQxNiwyMyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKVxcbiAgKiBAbWluOiBNaW5pbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIDAtTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxcbiAgKiBAbWF4OiBNYXhpbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIEBtaW4tTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxcbiAgKlxcbi0gKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvciB0b1xcbi0gKiBpbmRpY2F0ZSB3aGljaCBiYXNlIHNpemUgKG1pbikgYW5kIG1heGltdW0gc2l6ZSAobWF4KSBvZiBmb2xpbyB0aGUgVkZTXFxuLSAqIGNhbiB1c2UgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkXFxuLSAqIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzXFxuLSAqIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXFxuKyAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yXFxuKyAqIHRvIGluZGljYXRlIHdoaWNoIHNpemUgZm9saW9zIGNhbiBiZSB1c2VkIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZlxcbisgKiB0aGUgaW5vZGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbFxcbisgKiBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMgc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cXG4gICogRG8gbm90IHR1bmUgaXQgYmFzZWQgb24sIGVnLCBpX3NpemUuXFxuICAqXFxuKyAqIGh1Z2V0bGIgY2FsbHMgdGhpcyB3aXRoIG9yZGVycyBsYXJnZXIgdGhhbiBNQVhfUEFHRUNBQ0hFX09SREVSLlxcbisgKiBOb3JtYWwgZmlsZXN5c3RlbXMgc2hvdWxkIG5vdCBkbyB0aGlzLlxcbisgKlxcbiAgKiBDb250ZXh0OiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZSBpbm9kZSBpcyBhY3RpdmUgYXMgaXRcXG4gICogaXMgbm9uLWF0b21pYy5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBtaW4sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbWF4KVxcbitcXHRcXHR1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KVxcbiB7XFxuLVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGlmIChtaW4gXFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxcbi1cXHRcXHRtaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xcbi1cXG4tXFx0aWYgKG1heCBcXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXFxuLVxcdFxcdG1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XFxuLVxcbiBcXHRpZiAobWF4IFxcdTAwM2MgbWluKVxcbiBcXHRcXHRtYXggPSBtaW47XFxuIFxcbkBAIC00NjAsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcXG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIHtcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRyZXR1cm4gKG1hcHBpbmctXFx1MDAzZWZsYWdzIFxcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUFYX01BU0spIFxcdTAwM2VcXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcXG4gfVxcbkBAIC00NjgsNyArNDczLDcgQEAgbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XFxuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuLVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0cmV0dXJuIChtYXBwaW5nLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBBU19GT0xJT19PUkRFUl9NSU47XFxuIH1cXG5AQCAtNTI0LDcgKzUyOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2xhcmdlX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpXFxuICAqXFxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cXG4gICovXFxuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rI2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xcbmluZGV4IDllMGNhNDgyNDkwNTRmLi45OTJlN2FlMGIyYmYyOSAxMDA2NDRcXG4tLS0gYS9tbS9LY29uZmlnXFxuKysrIGIvbW0vS2NvbmZpZ1xcbkBAIC04NDMsMTEgKzg0MywxNSBAQCBjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG4gY29uZmlnIE1NX0lEXFxuIFxcdGRlZl9ib29sIG5cXG4gXFxuK2NvbmZpZyBGSUxFTUFQX0xBUkdFX0ZPTElPXFxuK1xcdGRlZl9ib29sIG5cXG4rXFxuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gXFx0c2VsZWN0IENPTVBBQ1RJT05cXG4gXFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbitcXHRzZWxlY3QgRklMRU1BUF9MQVJHRV9GT0xJT1xcbiBcXHRzZWxlY3QgTU1fSURcXG4gXFx0aGVscFxcbiBcXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXFxuaW5kZXggNThlYjlkMjQwNjQzNDguLmY2NjJjZGE4MWRjNzRjIDEwMDY0NFxcbi0tLSBhL21tL2ZpbGVtYXAuY1xcbisrKyBiL21tL2ZpbGVtYXAuY1xcbkBAIC0yNDgzLDYgKzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXG4gXFx0XFx0aWYgKCFmb2xpb19iYXRjaF9hZGQoZmJhdGNoLCBmb2xpbykpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKGZvbGlvX3Rlc3RfcmVhZGFoZWFkKGZvbGlvKSlcXG5AQCAtMjY5NSw2ICsyNjk3LDggQEAgc3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCxcXG4gXFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChmYmF0Y2gpKSB7XFxuIFxcdFxcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbHAsIFxcdTAwMjZmaWxwLVxcdTAwM2VmX3JhLCBtYXBwaW5nLCBpbmRleCk7XFxuIFxcbitcXHRcXHRpZiAobWFwcGluZ19pc19hdXRob3JpdGF0aXZlKG1hcHBpbmcpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT0lPKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpXFxuQEAgLTI3NDksNiArMjc1MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gKHBvczEgXFx1MDAzZVxcdTAwM2Ugc2hpZnQgPT0gcG9zMiBcXHUwMDNlXFx1MDAzZSBzaGlmdCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxuK1xcdFxcdHNpemVfdCBieXRlcylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XFxuK1xcdHNpemVfdCBzYWZlX2J5dGVzO1xcbitcXG4rXFx0aWYgKCFmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGJ5dGVzO1xcbitcXHRpZiAoaXNfcGFnZV9od3BvaXNvbihwYWdlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXFxuK1xcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcXG4rXFx0cGFnZSsrO1xcbitcXG4rXFx0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXFxuK1xcdGZvciAoOyBzYWZlX2J5dGVzIFxcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgKz0gUEFHRV9TSVpFLCBwYWdlKyspXFxuK1xcdFxcdGlmIChpc19wYWdlX2h3cG9pc29uKHBhZ2UpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdHJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxuQEAgLTI4MjgsNiArMjg1NSwyMiBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0XFx0Z290byBwdXRfZm9saW9zO1xcbiBcXHRcXHRlbmRfb2Zmc2V0ID0gbWluX3QobG9mZl90LCBpc2l6ZSwgaW9jYi1cXHUwMDNla2lfcG9zICsgaXRlci1cXHUwMDNlY291bnQpO1xcbiBcXG4rXFx0XFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChcXHUwMDI2ZmJhdGNoKSkge1xcbitcXHRcXHRcXHRzaXplX3QgZnNpemUgPSBtYXBwaW5nX21pbl9mb2xpb19ucmJ5dGVzKG1hcHBpbmcpO1xcbitcXHRcXHRcXHRzaXplX3Qgb2Zmc2V0ID0gaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwMjYgKGZzaXplIC0gMSk7XFxuK1xcdFxcdFxcdHNpemVfdCBieXRlcyA9IG1pbl90KGxvZmZfdCwgZW5kX29mZnNldCAtIGlvY2ItXFx1MDAzZWtpX3BvcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBmc2l6ZSAtIG9mZnNldCk7XFxuK1xcdFxcdFxcdHNpemVfdCBjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKGJ5dGVzLCBpdGVyKTtcXG4rXFxuK1xcdFxcdFxcdGFscmVhZHlfcmVhZCArPSBjb3BpZWQ7XFxuK1xcdFxcdFxcdGlvY2ItXFx1MDAzZWtpX3BvcyArPSBjb3BpZWQ7XFxuK1xcdFxcdFxcdGxhc3RfcG9zID0gaW9jYi1cXHUwMDNla2lfcG9zO1xcbitcXG4rXFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNjIGJ5dGVzKVxcbitcXHRcXHRcXHRcXHRlcnJvciA9IC1FRkFVTFQ7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBPbmNlIHdlIHN0YXJ0IGNvcHlpbmcgZGF0YSwgd2UgZG9uJ3Qgd2FudCB0byBiZSB0b3VjaGluZyBhbnlcXG4gXFx0XFx0ICogY2FjaGVsaW5lcyB0aGF0IG1pZ2h0IGJlIGNvbnRlbmRlZDpcXG5AQCAtMjg2MiwxNCArMjkwNSwxOCBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0XFx0aWYgKHdyaXRhYmx5X21hcHBlZClcXG4gXFx0XFx0XFx0XFx0Zmx1c2hfZGNhY2hlX2ZvbGlvKGZvbGlvKTtcXG4gXFxuLVxcdFxcdFxcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBieXRlcywgaXRlcik7XFxuK1xcdFxcdFxcdGNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7XFxuK1xcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzYyBieXRlcylcXG4rXFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUlPO1xcbitcXHRcXHRcXHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgY29waWVkLCBpdGVyKTtcXG4gXFxuIFxcdFxcdFxcdGFscmVhZHlfcmVhZCArPSBjb3BpZWQ7XFxuIFxcdFxcdFxcdGlvY2ItXFx1MDAzZWtpX3BvcyArPSBjb3BpZWQ7XFxuIFxcdFxcdFxcdGxhc3RfcG9zID0gaW9jYi1cXHUwMDNla2lfcG9zO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNjIGJ5dGVzKSB7XFxuLVxcdFxcdFxcdFxcdGVycm9yID0gLUVGQVVMVDtcXG4rXFx0XFx0XFx0XFx0aWYgKCFlcnJvcilcXG4rXFx0XFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUZBVUxUO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXFxuaW5kZXggMmJjY2IwYTUzYTBhNjAuLjM1MzM0MDMwOTEwNzRjIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTQ0MTMsNyArNDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aWYgKGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9PSBIUEFHRV9QTURfTlIgLSAxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbitcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkrKykge1xcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uY2M4ZDk4Mzk5OTEzZTMgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTE3NzUsNyArMTc3NSw3IEBAIHZvaWQgaW5pdF9uZXdfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhblxcbiAgKiBub3QgZ2V0IHRoZSBsb2NrLCBzaW1wbHkgcmV0dXJuIE5VTEwgdG8gY2FsbGVyLlxcbiAgKi9cXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhmb2xpbyk7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IDUxNTA4YTU1YzQwNTVlLi45ZTRlZTVkOTM5MDUwNiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC00Myw2ICs0Myw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RheC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaGFzaHRhYmxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbkBAIC0xODA4LDMzICsxODA5LDI2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1mX2RheF9raWxsX3Byb2NzKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuIFxcbi0vKlxcbi0gKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgXFxcInJhdyBlcnJvciBwYWdlXFxcIixcXG4tICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIC1cXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uXFxuLSAqL1xcbi1zdHJ1Y3QgcmF3X2h3cF9wYWdlIHtcXG4tXFx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcXG4rLyogUHJvdGVjdHMgaHVnZXRsYl9od3BvaXNvbiBsaXN0ICovXFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaHRsYl9od3BvaXNvbl9sb2NrKTtcXG4rc3RhdGljIERFRklORV9IQVNIVEFCTEUoaHRsYl9od3BvaXNvbiwgNSk7XFxuK1xcbitzdHJ1Y3QgaHdwX3BhZ2Uge1xcbitcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfbGlzdF9oZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLXtcXG4tXFx0cmV0dXJuIChzdHJ1Y3QgbGxpc3RfaGVhZCAqKVxcdTAwMjZmb2xpby1cXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb247XFxuLX1cXG4tXFxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuKy8qXFxuKyAqIENoZWNrIGlmIGEgZ2l2ZW4gQHBhZ2UgaW4gYSBodWdldGxiIGZvbGlvIGlzIEhXUE9JU09OLlxcbisgKi9cXG4rYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4tXFx0c3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcXG4tXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuK1xcdGNvbnN0IHN0cnVjdCBod3BfcGFnZSAqcDtcXG4gXFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4tXFx0XFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHN1YnBhZ2VzXFxuIFxcdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBzdWJwYWdlcyBhcmUgSFdQT0lTT05lZC5cXG5AQCAtMTg0MiwzNiArMTgzNiwzOSBAQCBib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWZfbXV0ZXgpO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XFxuIFxcbi1cXHRyYXdfaHdwX2hlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XFxuLVxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC1cXHUwMDNlZmlyc3QsIG5vZGUpIHtcXG4rXFx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZShodGxiX2h3cG9pc29uLCBwLCBub2RlLCAodW5zaWduZWQgbG9uZylwYWdlKSB7XFxuIFxcdFxcdGlmIChwYWdlID09IHAtXFx1MDAzZXBhZ2UpIHtcXG4gXFx0XFx0XFx0cmV0ID0gdHJ1ZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZl9tdXRleCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuIHtcXG4tXFx0c3RydWN0IGxsaXN0X25vZGUgKmhlYWQ7XFxuLVxcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnAsICpuZXh0O1xcbitcXHRpbnQgYjtcXG4rXFx0c3RydWN0IGh3cF9wYWdlICpwO1xcbitcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wO1xcbiBcXHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcXG4gXFxuLVxcdGhlYWQgPSBsbGlzdF9kZWxfYWxsKHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKSk7XFxuLVxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkge1xcbitcXHRoYXNoX2Zvcl9lYWNoX3NhZmUoaHRsYl9od3BvaXNvbiwgYiwgdG1wLCBwLCBub2RlKSB7XFxuK1xcdFxcdGlmIChwYWdlX2ZvbGlvKHAtXFx1MDAzZXBhZ2UpICE9IGZvbGlvKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKG1vdmVfZmxhZylcXG4gXFx0XFx0XFx0U2V0UGFnZUhXUG9pc29uKHAtXFx1MDAzZXBhZ2UpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdG51bV9wb2lzb25lZF9wYWdlc19zdWIocGFnZV90b19wZm4ocC1cXHUwMDNlcGFnZSksIDEpO1xcbitcXHRcXHRoYXNoX2RlbChcXHUwMDI2cC1cXHUwMDNlbm9kZSk7XFxuIFxcdFxcdGtmcmVlKHApO1xcbiBcXHRcXHRjb3VudCsrO1xcbiBcXHR9XFxuK1xcbiBcXHRyZXR1cm4gY291bnQ7XFxuIH1cXG4gXFxuQEAgLTE4ODcsOSArMTg4NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiAgKi9cXG4gc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcmF3X2h3cDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcXG4rXFx0c3RydWN0IGh3cF9wYWdlICpwO1xcbiBcXHRpbnQgcmV0ID0gZm9saW9fdGVzdF9zZXRfaHdwb2lzb24oZm9saW8pID8gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQgOiAwO1xcbiBcXG4gXFx0LypcXG5AQCAtMTg5OSwxNiArMTg5NCwxOCBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHQgKi9cXG4gXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XFxuLVxcdGhlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XFxuLVxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIGhlYWQtXFx1MDAzZWZpcnN0LCBub2RlKSB7XFxuLVxcdFxcdGlmIChwLVxcdTAwM2VwYWdlID09IHBhZ2UpXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcXG4rXFx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZShodGxiX2h3cG9pc29uLCBwLCBub2RlLCAodW5zaWduZWQgbG9uZylwYWdlKSB7XFxuK1xcdFxcdGlmIChwLVxcdTAwM2VwYWdlID09IHBhZ2UpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XFxuIFxcdFxcdFxcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdHJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTtcXG4tXFx0aWYgKHJhd19od3ApIHtcXG4tXFx0XFx0cmF3X2h3cC1cXHUwMDNlcGFnZSA9IHBhZ2U7XFxuLVxcdFxcdGxsaXN0X2FkZChcXHUwMDI2cmF3X2h3cC1cXHUwMDNlbm9kZSwgaGVhZCk7XFxuK1xcdHAgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xcbitcXHRpZiAocCkge1xcbitcXHRcXHRwLVxcdTAwM2VwYWdlID0gcGFnZTtcXG4rXFx0XFx0aGFzaF9hZGQoaHRsYl9od3BvaXNvbiwgXFx1MDAyNnAtXFx1MDAzZW5vZGUsICh1bnNpZ25lZCBsb25nKXBhZ2UpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBGYWlsZWQgdG8gc2F2ZSByYXcgZXJyb3IgaW5mby4gIFdlIG5vIGxvbmdlciB0cmFjZSBhbGxcXG5AQCAtMTkyMCwxMyArMTkxNywxNSBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRcXHQgKiBPbmNlIGh1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlIGlzIHNldCwgcmF3X2h3cF9wYWdlIGlzIG5vdFxcbiBcXHRcXHQgKiB1c2VkIGFueSBtb3JlLCBzbyBmcmVlIGl0LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0X19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcXG4rXFx0XFx0X19mb2xpb19mcmVlX2h3cChmb2xpbywgZmFsc2UpO1xcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBjb3VudDtcXG4gXFx0LypcXG4gXFx0ICogaHVnZXRsYl92bWVtbWFwX29wdGltaXplZCBodWdlcGFnZXMgY2FuJ3QgYmUgZnJlZWQgYmVjYXVzZSBzdHJ1Y3RcXG4gXFx0ICogcGFnZXMgZm9yIHRhaWwgcGFnZXMgYXJlIHJlcXVpcmVkIGJ1dCB0aGV5IGRvbid0IGV4aXN0LlxcbkBAIC0xOTQxLDcgKzE5NDAsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0dXJuIF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XFxuK1xcdGNvdW50ID0gX19mb2xpb19mcmVlX2h3cChmb2xpbywgbW92ZV9mbGFnKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XFxuK1xcdHJldHVybiBjb3VudDtcXG4gfVxcbiBcXG4gdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcXG4rKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4gXFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiBcXHRcXHRcXHRwZm4gPSBmb2xpb19wZm4oZm9saW8pICsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcXG4gXFx0XFx0XFx0ICogaW4gYWxsIGNhc2VzIHlldC5cXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcXG5pbmRleCBiNTFmODNjOTcwYmIzNy4uNDkyYzliZWYzNjIwNzQgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMzI0MCw3ICszMjQwLDcgQEAgc2htZW1fd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjcwZTU0YWNlMGU3NDFjIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTA4Niw3ICsxMDg2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbiBcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbiBcXHRcXHRcXHRnb3RvIGtlZXA7XFxuIFxcbi1cXHRcXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuK1xcdFxcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbid0IGhhbmRsZSBsYXJnZVxcbiBcXHRcXHRcXHQgKiBmb2xpbywganVzdCBza2lwIGl0LiBtZW1vcnlfZmFpbHVyZSgpIHdpbGxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDQ6MDQ6MTkuNTk3MDg5NTk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTExNDM4MzA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRqdXN0X3JhbmdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcImh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uXCIsXG4gICAgXCJfX2ZvbGlvX2ZyZWVfaHdwXCIsXG4gICAgXCJodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGh1Z2V0bGJmcyByZWFkIGltcGxlbWVudGF0aW9uIHRvIHVzZSB0aGUgZ2VuZXJpYyBmaWxlbWFwIHJlYWQgaXRlcmF0b3IgYW5kIHVwZGF0ZXMgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcgZm9yIGh1Z2V0bGIgcGFnZXMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGhhbmRsZSBod3BvaXNvbmVkIHBhZ2VzIGR1cmluZyBmaWxlbWFwIHJlYWRzIGFuZCBjaGFuZ2VzIGhvdyBod3BvaXNvbmVkIGh1Z2V0bGIgcGFnZXMgYXJlIHRyYWNrZWQgKHVzaW5nIGEgaGFzaCB0YWJsZSBpbnN0ZWFkIG9mIGEgbGlua2VkIGxpc3QpLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGh1Z2V0bGJmcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMjI2YjM3Y2YzNDMzM2ViODQ2YzNiYjIxMDk4MjQ4ZWRhZjIxYzU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMDQ6MDQ6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZ1xuaW5kZXggY2Y2YWU2NDc3NmU2MmMuLjQ5MjJhZGY1YmM4NTEyIDEwMDY0NFxuLS0tIGEvZnMvS2NvbmZpZ1xuKysrIGIvZnMvS2NvbmZpZ1xuQEAgLTI3Miw2ICsyNzIsNyBAQCBlbmRpZiAjIEhVR0VUTEJGU1xuIFxuIGNvbmZpZyBIVUdFVExCX1BBR0VcbiBcdGRlZl9ib29sIEhVR0VUTEJGU1xuK1x0c2VsZWN0IEZJTEVNQVBfTEFSR0VfRk9MSU9cbiBcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uYTZmMDQ1OWQ3OWRlYjggMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xODcsMTEzICsxODcsNiBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApO1xuIH1cbiBcbi0vKlxuLSAqIFNvbWVvbmUgd2FudHMgdG8gcmVhZCBAYnl0ZXMgZnJvbSBhIEhXUE9JU09OIGh1Z2V0bGIgQGZvbGlvIGZyb20gQG9mZnNldC5cbi0gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvbmUgY2FuIHJlYWQgd2l0aG91dCB0b3VjaGluZyB0aGUgMXN0IHJhd1xuLSAqIEhXUE9JU09OIHBhZ2UuXG4tICovXG4tc3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbi1cdFx0c2l6ZV90IGJ5dGVzKVxuLXtcbi1cdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTtcbi1cdHNpemVfdCBzYWZlX2J5dGVzO1xuLVxuLVx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxuLVx0XHRyZXR1cm4gMDtcbi1cdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cbi1cdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcbi1cdHBhZ2UrKztcbi1cbi1cdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuLVx0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICs9IFBBR0VfU0laRSwgcGFnZSsrKVxuLVx0XHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbi19XG4tXG4tLypcbi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXG4tICovXG4tc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4te1xuLVx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4tXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XG4tXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0dW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzc2l6ZV90IHJldHZhbCA9IDA7XG4tXG4tXHR3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHNpemVfdCBuciwgY29waWVkLCB3YW50O1xuLVxuLVx0XHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xuLVx0XHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cdFx0aWYgKCFpc2l6ZSlcbi1cdFx0XHRicmVhaztcbi1cdFx0ZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0aWYgKGluZGV4IFx1MDAzZSBlbmRfaW5kZXgpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHtcbi1cdFx0XHRuciA9ICgoaXNpemUgLSAxKSBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKSArIDE7XG4tXHRcdFx0aWYgKG5yIFx1MDAzYz0gb2Zmc2V0KVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0bnIgPSBuciAtIG9mZnNldDtcbi1cbi1cdFx0LyogRmluZCB0aGUgZm9saW8gKi9cbi1cdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfaHVnZXRsYl9mb2xpbyhoLCBtYXBwaW5nLCBpbmRleCk7XG4tXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBXZSBoYXZlIGEgSE9MRSwgemVybyBvdXQgdGhlIHVzZXItYnVmZmVyIGZvciB0aGVcbi1cdFx0XHQgKiBsZW5ndGggb2YgdGhlIGhvbGUgb3IgcmVxdWVzdC5cbi1cdFx0XHQgKi9cbi1cdFx0XHRjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKG5yLCB0byk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cbi1cdFx0XHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuLVx0XHRcdFx0d2FudCA9IG5yO1xuLVx0XHRcdGVsc2Uge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIEFkanVzdCBob3cgbWFueSBieXRlcyBzYWZlIHRvIHJlYWQgd2l0aG91dFxuLVx0XHRcdFx0ICogdG91Y2hpbmcgdGhlIDFzdCByYXcgSFdQT0lTT04gcGFnZSBhZnRlclxuLVx0XHRcdFx0ICogb2Zmc2V0LlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHR3YW50ID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIG5yKTtcbi1cdFx0XHRcdGlmICh3YW50ID09IDApIHtcbi1cdFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRcdFx0cmV0dmFsID0gLUVJTztcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2UgaGF2ZSB0aGUgZm9saW8sIGNvcHkgaXQgdG8gdXNlciBzcGFjZSBidWZmZXIuXG4tXHRcdFx0ICovXG4tXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIHdhbnQsIHRvKTtcbi1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHR9XG4tXHRcdG9mZnNldCArPSBjb3BpZWQ7XG4tXHRcdHJldHZhbCArPSBjb3BpZWQ7XG4tXHRcdGlmIChjb3BpZWQgIT0gbnIgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRcdGlmICghcmV0dmFsKVxuLVx0XHRcdFx0cmV0dmFsID0gLUVGQVVMVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpbmRleCArPSBvZmZzZXQgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0b2Zmc2V0IFx1MDAyNj0gfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0fVxuLVx0aW9jYi1cdTAwM2VraV9wb3MgPSAoKGxvZmZfdClpbmRleCBcdTAwM2NcdTAwM2MgaHVnZV9wYWdlX3NoaWZ0KGgpKSArIG9mZnNldDtcbi1cdHJldHVybiByZXR2YWw7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXG5AQCAtODgzLDYgKzc3NiwxNiBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHJldHVybiBpbm9kZTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4rXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBodWdlX3BhZ2Vfb3JkZXIoaHN0YXRlKTtcbitcbitcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbitcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbitcdG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgb3JkZXIsIG9yZGVyKTtcbit9XG4rXG4gLypcbiAgKiBIdWdldGxiZnMgaXMgbm90IHJlY2xhaW1hYmxlOyB0aGVyZWZvcmUgaXRzIGlfbW1hcF9yd3NlbSB3aWxsIG5ldmVyXG4gICogYmUgdGFrZW4gZnJvbSByZWNsYWltIC0tIHVubGlrZSByZWd1bGFyIGZpbGVzeXN0ZW1zLiBUaGlzIG5lZWRzIGFuXG5AQCAtOTI2LDggKzgyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgU19JRlJFRzpcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xuK1x0XHRcdGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFNfSUZESVI6XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcbkBAIC0xMjA2LDcgKzExMDgsNyBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0LnJlYWRfaXRlclx0XHQ9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsXG4rXHQucmVhZF9pdGVyXHRcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC5tbWFwXHRcdFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxuIFx0LmZzeW5jXHRcdFx0PSBub29wX2ZzeW5jLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhXHQ9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjE4Nzg2NDJlNzVlYzUxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wgaHVnZXRsYmZzX3BhZ2VjYWNoZV9wcmVzZW50KHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcbiBcbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuIGV4dGVybiBpbnQgbW92YWJsZV9naWdhbnRpY19wYWdlcyBfX3JlYWRfbW9zdGx5O1xuIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7XG5AQCAtMjkyLDggKzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoXG4tXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTU5NSw4ICs1OTQsOCBAQCBlbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdFxcXG4tYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbi1cdHtcdHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuK2Jvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuK1x0e1x0Y29uc3Qgdm9pZCAqcHJpdmF0ZSA9IFx1MDAyNmZvbGlvLVx1MDAzZXByaXZhdGU7XHRcdFxcXG4gXHRcdHJldHVybiB0ZXN0X2JpdChIUEdfIyNmbG5hbWUsIHByaXZhdGUpO1x0XHRcXFxuIFx0fVxuIFxuQEAgLTYxNiw3ICs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiAjZWxzZVxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbiBzdGF0aWMgaW5saW5lIGJvb2xcdFx0XHRcdFx0XHRcXFxuLWZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuK2ZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuIFx0eyByZXR1cm4gMDsgfVxuIFxuICNkZWZpbmUgU0VUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuQEAgLTcyNyw3ICs3MjYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzdWJwb29sX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gSFVHRVRMQkZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNwb29sO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZm9saW8tXHUwMDNlX2h1Z2V0bGJfc3VicG9vbDtcbiB9XG5AQCAtODU3LDcgKzg1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2hhc19odWdlX2Jvb3RtZW1fYWxsb2Modm9pZClcbiB9XG4gI2VuZGlmXG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xuIFx0cmV0dXJuIHNpemVfdG9faHN0YXRlKGZvbGlvX3NpemUoZm9saW8pKTtcbkBAIC0xMDcwLDExICsxMDY5LDYgQEAgdm9pZCBodWdldGxiX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuICNlbmRpZlxuIFxuLS8qXG4tICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi5cbi0gKi9cbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcbi1cbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0cmV0dXJuIFBBR0VfTUFTSyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTtcbkBAIC0xMDg4LDcgKzEwODIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTExNTcsNyArMTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuaW5kZXggYjE4YzJiMmU3ZDJjNjUuLmVkNWMwODI5ZmY1NjlhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbkBAIC0zODcsNyArMzg3LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xuICAqIEBfaHVnZXRsYl9zdWJwb29sOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYi5oLlxuICAqIEBfaHVnZXRsYl9jZ3JvdXA6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiX2Nncm91cC5oLlxuICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXG4tICogQF9odWdldGxiX2h3cG9pc29uOiBEbyBub3QgdXNlIGRpcmVjdGx5LCBjYWxsIHJhd19od3BfbGlzdF9oZWFkKCkuXG4gICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxuICAqXG5AQCAtNDk5LDcgKzQ5OCw2IEBAIHN0cnVjdCBmb2xpbyB7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfc3VicG9vbDtcbiBcdFx0XHR2b2lkICpfaHVnZXRsYl9jZ3JvdXA7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwX3JzdmQ7XG4tXHRcdFx0dm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247XG4gXHQvKiBwcml2YXRlOiB0aGUgdW5pb24gd2l0aCBzdHJ1Y3QgcGFnZSBpcyB0cmFuc2l0aW9uYWwgKi9cbiBcdFx0fTtcbiBcdFx0c3RydWN0IHBhZ2UgX19wYWdlXzM7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggNzIyM2Y2ZjRlMmI0MDMuLjhlNTdjMTJhNzMwMWI0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtMTA2OCw2ICsxMDY4LDkgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxuK2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbitcbiAvKlxuICAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzXG4gICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxuQEAgLTEwNzUsMTggKzEwNzgsMjkgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbitcbitcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRyZXR1cm4gaHVnZXRsYl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcbitcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuIFxuLVx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4tXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbiB9XG4rI2VuZGlmXG4gXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcbi1cdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbitcdCAgICAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbiB9XG4gXG4gYm9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDJjMzcxOGQ1OTJkNmRkLi5iZDZhNjI3NWE0ZTkxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xuIFx0QVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNID0gOSxcbiBcdEFTX0tFUk5FTF9GSUxFID0gMTAsXHQvKiBtYXBwaW5nIGZvciBhIGZha2Uga2VybmVsIGZpbGUgdGhhdCBzaG91bGRuJ3RcbiBcdFx0XHRcdCAgIGFjY291bnQgdXNhZ2UgdG8gdXNlciBjZ3JvdXBzICovXG4rXHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXHQvKiBJZiB3ZSBtaXNzIGluIHRoZSBwYWdlIGNhY2hlLCBpdCdzIGEgaG9sZSAqL1xuIFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cbiBcdEFTX0ZPTElPX09SREVSX0JJVFMgPSA1LFxuIFx0QVNfRk9MSU9fT1JERVJfTUlOID0gMTYsXG5AQCAtMzQ1LDYgKzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlc1xuIFx0cmV0dXJuIHRlc3RfYml0KEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSwgXHUwMDI2bWFwcGluZy1cdTAwM2VmbGFncyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuK3tcbitcdHNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXHUwMDI2bWFwcGluZy1cdTAwM2VmbGFncyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4re1xuK1x0cmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGdmcF90IG1hcHBpbmdfZ2ZwX21hc2soY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlZ2ZwX21hc2s7XG5AQCAtMzczLDcgKzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcbiAgKiBhc3N1bXB0aW9ucyBhYm91dCBtYXhpbXVtIG9yZGVyIGlmIFRIUCBhcmUgZGlzYWJsZWQsIGJ1dCA4IHNlZW1zIGxpa2VcbiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQncyAxTUIgaWYgeW91J3JlIHVzaW5nIDRrQiBwYWdlcylcbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0SFBBR0VfUE1EX09SREVSXG4gI2Vsc2VcbiAjZGVmaW5lIFBSRUZFUlJFRF9NQVhfUEFHRUNBQ0hFX09SREVSXHQ4XG5AQCAtMzk0LDcgKzQwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcbiAgKi9cbiBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKVxuIHtcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAxVSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgKyBNQVhfUEFHRUNBQ0hFX09SREVSKTtcbiBcdHJldHVybiBQQUdFX1NJWkU7XG4gfVxuQEAgLTQwNSwyOSArNDE2LDIzIEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4gICogQG1pbjogTWluaW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiAwLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cbiAgKiBAbWF4OiBNYXhpbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIEBtaW4tTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqXG4tICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IgdG9cbi0gKiBpbmRpY2F0ZSB3aGljaCBiYXNlIHNpemUgKG1pbikgYW5kIG1heGltdW0gc2l6ZSAobWF4KSBvZiBmb2xpbyB0aGUgVkZTXG4tICogY2FuIHVzZSB0byBjYWNoZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWRcbi0gKiBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpc1xuLSAqIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXG4rICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3JcbisgKiB0byBpbmRpY2F0ZSB3aGljaCBzaXplIGZvbGlvcyBjYW4gYmUgdXNlZCB0byBjYWNoZSB0aGUgY29udGVudHMgb2ZcbisgKiB0aGUgaW5vZGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbFxuKyAqIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcyBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxuICAqIERvIG5vdCB0dW5lIGl0IGJhc2VkIG9uLCBlZywgaV9zaXplLlxuICAqXG4rICogaHVnZXRsYiBjYWxscyB0aGlzIHdpdGggb3JkZXJzIGxhcmdlciB0aGFuIE1BWF9QQUdFQ0FDSEVfT1JERVIuXG4rICogTm9ybWFsIGZpbGVzeXN0ZW1zIHNob3VsZCBub3QgZG8gdGhpcy5cbisgKlxuICAqIENvbnRleHQ6IFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlIGlub2RlIGlzIGFjdGl2ZSBhcyBpdFxuICAqIGlzIG5vbi1hdG9taWMuXG4gICovXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbWluLFxuLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbWF4KVxuK1x0XHR1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm47XG4tXG4tXHRpZiAobWluIFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxuLVx0XHRtaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xuLVxuLVx0aWYgKG1heCBcdTAwM2UgTUFYX1BBR0VDQUNIRV9PUkRFUilcbi1cdFx0bWF4ID0gTUFYX1BBR0VDQUNIRV9PUkRFUjtcbi1cbiBcdGlmIChtYXggXHUwMDNjIG1pbilcbiBcdFx0bWF4ID0gbWluO1xuIFxuQEAgLTQ2MCw3ICs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldHVybiAobWFwcGluZy1cdTAwM2VmbGFncyBcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUFYX01BU0spIFx1MDAzZVx1MDAzZSBBU19GT0xJT19PUkRFUl9NQVg7XG4gfVxuQEAgLTQ2OCw3ICs0NzMsNyBAQCBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gKG1hcHBpbmctXHUwMDNlZmxhZ3MgXHUwMDI2IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSBcdTAwM2VcdTAwM2UgQVNfRk9MSU9fT1JERVJfTUlOO1xuIH1cbkBAIC01MjQsNyArNTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcbiAgKlxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXG4gc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0LyogQVNfRk9MSU9fT1JERVIgaXMgb25seSByZWFzb25hYmxlIGZvciBwYWdlY2FjaGUgZm9saW9zICovXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcbmluZGV4IDllMGNhNDgyNDkwNTRmLi45OTJlN2FlMGIyYmYyOSAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbisrKyBiL21tL0tjb25maWdcbkBAIC04NDMsMTEgKzg0MywxNSBAQCBjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbiBjb25maWcgTU1fSURcbiBcdGRlZl9ib29sIG5cbiBcbitjb25maWcgRklMRU1BUF9MQVJHRV9GT0xJT1xuK1x0ZGVmX2Jvb2wgblxuK1xuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdGJvb2wgXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCJcbiBcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIFx0c2VsZWN0IENPTVBBQ1RJT05cbiBcdHNlbGVjdCBYQVJSQVlfTVVMVElcbitcdHNlbGVjdCBGSUxFTUFQX0xBUkdFX0ZPTElPXG4gXHRzZWxlY3QgTU1fSURcbiBcdGhlbHBcbiBcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNThlYjlkMjQwNjQzNDguLmY2NjJjZGE4MWRjNzRjIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0yNDgzLDYgKzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFxuIFx0XHRpZiAoIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSlcbiBcdFx0XHRicmVhaztcbitcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuK1x0XHRcdGJyZWFrO1xuIFx0XHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKVxuQEAgLTI2OTUsNiArMjY5Nyw4IEBAIHN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXG4gXHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KGZiYXRjaCkpIHtcbiBcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlscCwgXHUwMDI2ZmlscC1cdTAwM2VmX3JhLCBtYXBwaW5nLCBpbmRleCk7XG4gXG4rXHRcdGlmIChtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUobWFwcGluZykpXG4rXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PSU8pXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVClcbkBAIC0yNzQ5LDYgKzI3NTMsMjkgQEAgc3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAocG9zMSBcdTAwM2VcdTAwM2Ugc2hpZnQgPT0gcG9zMiBcdTAwM2VcdTAwM2Ugc2hpZnQpO1xuIH1cbiBcbitzdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuK1x0XHRzaXplX3QgYnl0ZXMpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xuK1x0c2l6ZV90IHNhZmVfYnl0ZXM7XG4rXG4rXHRpZiAoIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuK1x0XHRyZXR1cm4gYnl0ZXM7XG4rXHRpZiAoaXNfcGFnZV9od3BvaXNvbihwYWdlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4rXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4rXHRwYWdlKys7XG4rXG4rXHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cbitcdGZvciAoOyBzYWZlX2J5dGVzIFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyArPSBQQUdFX1NJWkUsIHBhZ2UrKylcbitcdFx0aWYgKGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuQEAgLTI4MjgsNiArMjg1NSwyMiBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRnb3RvIHB1dF9mb2xpb3M7XG4gXHRcdGVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLVx1MDAzZWtpX3BvcyArIGl0ZXItXHUwMDNlY291bnQpO1xuIFxuK1x0XHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KFx1MDAyNmZiYXRjaCkpIHtcbitcdFx0XHRzaXplX3QgZnNpemUgPSBtYXBwaW5nX21pbl9mb2xpb19ucmJ5dGVzKG1hcHBpbmcpO1xuK1x0XHRcdHNpemVfdCBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgKGZzaXplIC0gMSk7XG4rXHRcdFx0c2l6ZV90IGJ5dGVzID0gbWluX3QobG9mZl90LCBlbmRfb2Zmc2V0IC0gaW9jYi1cdTAwM2VraV9wb3MsXG4rXHRcdFx0XHRcdCAgICAgZnNpemUgLSBvZmZzZXQpO1xuK1x0XHRcdHNpemVfdCBjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKGJ5dGVzLCBpdGVyKTtcbitcbitcdFx0XHRhbHJlYWR5X3JlYWQgKz0gY29waWVkO1xuK1x0XHRcdGlvY2ItXHUwMDNla2lfcG9zICs9IGNvcGllZDtcbitcdFx0XHRsYXN0X3BvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuK1xuK1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuK1x0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdC8qXG4gXHRcdCAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24ndCB3YW50IHRvIGJlIHRvdWNoaW5nIGFueVxuIFx0XHQgKiBjYWNoZWxpbmVzIHRoYXQgbWlnaHQgYmUgY29udGVuZGVkOlxuQEAgLTI4NjIsMTQgKzI5MDUsMTggQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0aWYgKHdyaXRhYmx5X21hcHBlZClcbiBcdFx0XHRcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4gXG4tXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTtcbitcdFx0XHRjb3BpZWQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xuK1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuK1x0XHRcdFx0ZXJyb3IgPSAtRUlPO1xuK1x0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBjb3BpZWQsIGl0ZXIpO1xuIFxuIFx0XHRcdGFscmVhZHlfcmVhZCArPSBjb3BpZWQ7XG4gXHRcdFx0aW9jYi1cdTAwM2VraV9wb3MgKz0gY29waWVkO1xuIFx0XHRcdGxhc3RfcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4gXG4gXHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpIHtcbi1cdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbitcdFx0XHRcdGlmICghZXJyb3IpXG4rXHRcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQxMyw3ICs0NDEzLDcgQEAgc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9PSBIUEFHRV9QTURfTlIgLSAxKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuK1x0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkrKykge1xuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNTcxMjEyYjgwODM1ZWMuLmNjOGQ5ODM5OTkxM2UzIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0xNzc1LDcgKzE3NzUsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhblxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXG4gICovXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NWUuLjllNGVlNWQ5MzkwNTA2IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTQzLDYgKzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaGFzaHRhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5AQCAtMTgwOCwzMyArMTgwOSwyNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtZl9kYXhfa2lsbF9wcm9jcyk7XG4gXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcbi0vKlxuLSAqIFN0cnVjdCByYXdfaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcInJhdyBlcnJvciBwYWdlXCIsXG4tICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIC1cdTAwM2VfaHVnZXRsYl9od3BvaXNvbiBmaWVsZCBvZiBmb2xpby5cbi0gKi9cbi1zdHJ1Y3QgcmF3X2h3cF9wYWdlIHtcbi1cdHN0cnVjdCBsbGlzdF9ub2RlIG5vZGU7XG4rLyogUHJvdGVjdHMgaHVnZXRsYl9od3BvaXNvbiBsaXN0ICovXG4rc3RhdGljIERFRklORV9TUElOTE9DSyhodGxiX2h3cG9pc29uX2xvY2spO1xuK3N0YXRpYyBERUZJTkVfSEFTSFRBQkxFKGh0bGJfaHdwb2lzb24sIDUpO1xuK1xuK3N0cnVjdCBod3BfcGFnZSB7XG4rXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2xpc3RfaGVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKilcdTAwMjZmb2xpby1cdTAwM2VfaHVnZXRsYl9od3BvaXNvbjtcbi19XG4tXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbisvKlxuKyAqIENoZWNrIGlmIGEgZ2l2ZW4gQHBhZ2UgaW4gYSBodWdldGxiIGZvbGlvIGlzIEhXUE9JU09OLlxuKyAqL1xuK2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2hlYWQ7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4rXHRjb25zdCBzdHJ1Y3QgaHdwX3BhZ2UgKnA7XG4gXHRib29sIHJldCA9IGZhbHNlO1xuIFxuIFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuLVx0XHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuLVxuIFx0LypcbiBcdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHN1YnBhZ2VzXG4gXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuXG5AQCAtMTg0MiwzNiArMTgzNiwzOSBAQCBib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bWZfbXV0ZXgpO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XG4gXG4tXHRyYXdfaHdwX2hlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XG4tXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCByYXdfaHdwX2hlYWQtXHUwMDNlZmlyc3QsIG5vZGUpIHtcbitcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUoaHRsYl9od3BvaXNvbiwgcCwgbm9kZSwgKHVuc2lnbmVkIGxvbmcpcGFnZSkge1xuIFx0XHRpZiAocGFnZSA9PSBwLVx1MDAzZXBhZ2UpIHtcbiBcdFx0XHRyZXQgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWZfbXV0ZXgpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4ge1xuLVx0c3RydWN0IGxsaXN0X25vZGUgKmhlYWQ7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDtcbitcdGludCBiO1xuK1x0c3RydWN0IGh3cF9wYWdlICpwO1xuK1x0c3RydWN0IGhsaXN0X25vZGUgKnRtcDtcbiBcdHVuc2lnbmVkIGxvbmcgY291bnQgPSAwO1xuIFxuLVx0aGVhZCA9IGxsaXN0X2RlbF9hbGwocmF3X2h3cF9saXN0X2hlYWQoZm9saW8pKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkge1xuK1x0aGFzaF9mb3JfZWFjaF9zYWZlKGh0bGJfaHdwb2lzb24sIGIsIHRtcCwgcCwgbm9kZSkge1xuK1x0XHRpZiAocGFnZV9mb2xpbyhwLVx1MDAzZXBhZ2UpICE9IGZvbGlvKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAobW92ZV9mbGFnKVxuIFx0XHRcdFNldFBhZ2VIV1BvaXNvbihwLVx1MDAzZXBhZ2UpO1xuIFx0XHRlbHNlXG4gXHRcdFx0bnVtX3BvaXNvbmVkX3BhZ2VzX3N1YihwYWdlX3RvX3BmbihwLVx1MDAzZXBhZ2UpLCAxKTtcbitcdFx0aGFzaF9kZWwoXHUwMDI2cC1cdTAwM2Vub2RlKTtcbiBcdFx0a2ZyZWUocCk7XG4gXHRcdGNvdW50Kys7XG4gXHR9XG4rXG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuQEAgLTE4ODcsOSArMTg4NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuICAqL1xuIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgKmhlYWQ7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpyYXdfaHdwO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcbitcdHN0cnVjdCBod3BfcGFnZSAqcDtcbiBcdGludCByZXQgPSBmb2xpb190ZXN0X3NldF9od3BvaXNvbihmb2xpbykgPyBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRCA6IDA7XG4gXG4gXHQvKlxuQEAgLTE4OTksMTYgKzE4OTQsMTggQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdCAqL1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XG4tXHRoZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuLVx0XHRpZiAocC1cdTAwM2VwYWdlID09IHBhZ2UpXG4rXHRzcGluX2xvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbitcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUoaHRsYl9od3BvaXNvbiwgcCwgbm9kZSwgKHVuc2lnbmVkIGxvbmcpcGFnZSkge1xuK1x0XHRpZiAocC1cdTAwM2VwYWdlID09IHBhZ2UpIHtcbitcdFx0XHRzcGluX3VubG9jayhcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xuIFx0XHRcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xuK1x0XHR9XG4gXHR9XG4gXG4tXHRyYXdfaHdwID0ga21hbGxvY19vYmooc3RydWN0IHJhd19od3BfcGFnZSwgR0ZQX0FUT01JQyk7XG4tXHRpZiAocmF3X2h3cCkge1xuLVx0XHRyYXdfaHdwLVx1MDAzZXBhZ2UgPSBwYWdlO1xuLVx0XHRsbGlzdF9hZGQoXHUwMDI2cmF3X2h3cC1cdTAwM2Vub2RlLCBoZWFkKTtcbitcdHAgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xuK1x0aWYgKHApIHtcbitcdFx0cC1cdTAwM2VwYWdlID0gcGFnZTtcbitcdFx0aGFzaF9hZGQoaHRsYl9od3BvaXNvbiwgXHUwMDI2cC1cdTAwM2Vub2RlLCAodW5zaWduZWQgbG9uZylwYWdlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbFxuQEAgLTE5MjAsMTMgKzE5MTcsMTUgQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIHJhd19od3BfcGFnZSBpcyBub3RcbiBcdFx0ICogdXNlZCBhbnkgbW9yZSwgc28gZnJlZSBpdC5cbiBcdFx0ICovXG4tXHRcdF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4rXHRcdF9fZm9saW9fZnJlZV9od3AoZm9saW8sIGZhbHNlKTtcbiBcdH1cbitcdHNwaW5fdW5sb2NrKFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBjb3VudDtcbiBcdC8qXG4gXHQgKiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkIGh1Z2VwYWdlcyBjYW4ndCBiZSBmcmVlZCBiZWNhdXNlIHN0cnVjdFxuIFx0ICogcGFnZXMgZm9yIHRhaWwgcGFnZXMgYXJlIHJlcXVpcmVkIGJ1dCB0aGV5IGRvbid0IGV4aXN0LlxuQEAgLTE5NDEsNyArMTk0MCwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XG4rXHRjb3VudCA9IF9fZm9saW9fZnJlZV9od3AoZm9saW8sIG1vdmVfZmxhZyk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xuK1x0cmV0dXJuIGNvdW50O1xuIH1cbiBcbiB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdHBmbiA9IGZvbGlvX3Bmbihmb2xpbykgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW5ub3QgaGFuZGxlIGxhcmdlIGZvbGlvc1xuIFx0XHRcdCAqIGluIGFsbCBjYXNlcyB5ZXQuXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IGI1MWY4M2M5NzBiYjM3Li40OTJjOWJlZjM2MjA3NCAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0zMjQwLDcgKzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbitcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRyZXR1cm4gLUVJTztcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uNzBlNTRhY2UwZTc0MWMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xMDg2LDcgKzEwODYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG4gXHRcdFx0Z290byBrZWVwO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW4ndCBoYW5kbGUgbGFyZ2VcbiBcdFx0XHQgKiBmb2xpbywganVzdCBza2lwIGl0LiBtZW1vcnlfZmFpbHVyZSgpIHdpbGxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA0OjA0OjE5LjU5NzA5NjIyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MjQyOTQ0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIGh1Z2V0bGJmcyBSZWFkIEltcGxlbWVudGF0aW9uIGFuZCBNZW1vcnktRmFpbHVyZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzaWduaWZpY2FudGx5IGltcGFjdHMgaG93IGh1Z2V0bGJmcyByZWFkcyBhcmUgaGFuZGxlZCwgYWxvbmcgd2l0aCBob3cgbWVtb3J5IGZhaWx1cmVzIGFyZSBtYW5hZ2VkLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgYWx0b2dldGhlciwgcmVwbGFjaW5nIGl0IHdpdGggdGhlIG1vcmUgZ2VuZXJhbCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIFRoYXQncyBhIHByZXR0eSBzdWJzdGFudGlhbCBhcmNoaXRlY3R1cmFsIGNoYW5nZS4gSSBhbHNvIHNlZSB0aGF0IGl0IGludHJvZHVjZXMgYSBgRklMRU1BUF9MQVJHRV9GT0xJT2AgY29uZmlnIG9wdGlvbiwgd2hpY2ggaXMgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYEhVR0VUTEJfUEFHRWAgb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcmUgc2V0LiBJbnRlcmVzdGluZy4gQW5kIGl0IGFsc28gc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGBmaWxlbWFwX3JlYWRgIHRvIHNwZWNpZmljYWxseSBhY2NvdW50IGZvciBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyB1c2luZyBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCwgYWxvbmcgd2l0aCBjaGFuZ2luZyBgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2VgIHRvIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGFuZCB1c2luZyBhIGhhc2ggdGFibGUuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdDogZG9lcyB0aGlzIGV2ZW4gKndvcmsqPyBZZXMsIHRoaXMgZGVmaW5pdGVseSB0b3VjaGVzIG9uIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGh1Z2V0bGJmcyByZWFkIHBhdGhzLiBBbmQgSSBjYW4gdGVsbCB0aGlzIHBhdGNoIGlzIGNlcnRhaW5seSB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHNvbWUgY3J1Y2lhbCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBgZmlsZW1hcF9yZWFkYCBsb29rcyBsaWtlIGEgaG90IHBhdGgsIGJ1dCBpdCdzIGJlZW4gY2hhbmdlZCBoZXJlLCBzbyB0aGF0J3MgZGVmaW5pdGVseSBhIGdvb2Qgb25lLiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCBzZWVtcyBsaWtlIGFub3RoZXIgc3Ryb25nIGNhbmRpZGF0ZS4gQW5kIHNpbmNlIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBtbS9maWxlbWFwLmNgLCBpdCdzIHdvcnRoIHRha2luZyBhIGNsb3NlciBsb29rIGF0IHdoYXQgb3RoZXIgZnVuY3Rpb25zIGl0IGludGVyYWN0cyB3aXRoLiBBZGRpdGlvbmFsbHksIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYCBhbmQgYGZvbGlvX2ZyZWVfcmF3X2h3cGAgYXJlIGFsc28gc3RhdGljLCBzbyBJIHdpbGwgaW52ZXN0aWdhdGUgdGhlc2UgdG9vLlxuXG5MZXQncyBkaXZlIGludG8gYG1tL2ZpbGVtYXAuY2AgdG8gc2VlIGhvdyBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyB1c2VkLiBJIHNlZSB0aGF0IGl0IGlzIGNhbGxlZCBieSBgZmlsZW1hcF9yZWFkYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIElzIGl0IHVzZWQgYnkgYW55IG90aGVyIGZ1bmN0aW9ucz8gQWxzbyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIEkgbm90aWNlIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgYW5kIGBfX2ZvbGlvX2ZyZWVfaHdwYC4gQWxsIG9mIHRoZXNlIGNvdWxkIGJlIHRhcmdldHMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucy4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQ09ORklHX0hVR0VUTEJfUEFHRWAsIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLCBhbmQgYENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPYCAod2hpY2ggaXMgZW5hYmxlZCBieSB0aGUgZmlyc3QgdHdvKS5cblxuQWxyaWdodCwgSSdsbCB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGdldCB0aGUgZXhhY3QgZnVuY3Rpb24gbmFtZXMgYW5kIGdldCBhIGNsZWFyZXIgdmlldyBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk1OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA0OjA0OjI3LjUyMTM5Mjc0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTA2NTU1ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfcGFnZV9od3BvaXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDY2PXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNzEtI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNzI6Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNzMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDc5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA4My1cXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDg0OlxcdFxcdHJldHVybiBodWdldGxiX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwODUtXFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwODctI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDg4OnN0YXRpYyBpbmxpbmUgYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDg5LVxcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODE2PXN0cnVjdCBod3BfcGFnZSB7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4MjMtICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxODI0OmJvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTgyNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA0OjA0OjMyLjQyNzk1NTc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4MDA5NzgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBNZW1vcnkgQ29ycnVwdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUtaW5kdWNlZCBtZW1vcnkgY29ycnVwdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHRoaXMgYXQgdGhlIGZpbGVtYXAgbGV2ZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG1tL2ZpbGVtYXAuY2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGJlY2F1c2UgZmlsZW1hcHMgYXJlIGZ1bmRhbWVudGFsbHkgbGlua2VkIHRvIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgcGFnZS1iYWNrZWQgZmlsZXMgYW5kLCBjcml0aWNhbGx5LCBob3cgaXQgaGFuZGxlcyBJL08uIEdpdmVuIHRoZSBrZXl3b3JkIFwiYWRqdXN0X3JhbmdlX2h3cG9pc29uXCIsIG15IGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBvciBvbmUgY2xvc2VseSByZWxhdGVkIHRvIGl0LCB3aWxsIGJlIGNyaXRpY2FsIGluIG1hcmtpbmcgYSByZWdpb24gb2YgYSBmaWxlbWFwIGFzIGNvcnJ1cHRlZCBhbmQgcG90ZW50aWFsbHkgcHJldmVudGluZyBmdXJ0aGVyIGFjY2VzcyBvciBwcm9wYWdhdGluZyB0aGUgZXJyb3Igc2lnbmFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoZXJlIHRoZSBrZXJuZWwncyB0YWtpbmcgYWN0aW9uIGhlcmUuIEknbSBob3BpbmcgSSBjYW4gcGllY2UgdG9nZXRoZXIgdGhlIGNhbGxpbmcgY29udGV4dCBhbmQgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gZ2V0IGEgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGUgc3lzdGVtIHJlc3BvbmRzIHRvIHRoaXMgc3BlY2lmaWMgdHlwZSBvZiBmYXVsdC4gTGV0J3MgZ2V0IGNyYWNraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQzMSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA0OjA0OjM1LjkwODA1NjUxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgwNjk2MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkanVzdF9yYW5nZV9od3BvaXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9Mjc0OT1zdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTI3NTUtXFxubW0vZmlsZW1hcC5jOjI3NTY6c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcXG5tbS9maWxlbWFwLmMtMjc1Ny1cXHRcXHRzaXplX3QgYnl0ZXMpXFxuLS1cXG5tbS9maWxlbWFwLmM9MjgwND1zc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yOTA3LVxcbm1tL2ZpbGVtYXAuYzoyOTA4OlxcdFxcdFxcdGNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7XFxubW0vZmlsZW1hcC5jLTI5MDktXFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNjIGJ5dGVzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNDozNy43ODg3NTgwMDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQwOTU2NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gSHVnZVRMQiBIYXJkd2FyZSBQb2lzb25pbmcgXHUwMDI2IEZvbGlvIEZyZWVpbmcqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGhvdyB3ZSdyZSBoYW5kbGluZyBoYXJkd2FyZSBwb2lzb25pbmcgd2l0aGluIHRoZSBIdWdlVExCIHN5c3RlbS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaW52b2x2ZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgd2UgcmVhY3QgdG8gaGFyZHdhcmUtaW5kdWNlZCBlcnJvcnMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgYW5kLCB2ZXJ5IGltcG9ydGFudGx5LCBob3cgdGhhdCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBgX19mb2xpb19mcmVlX2h3cGAuIFRoaXMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byBob3cgd2UgZGV0ZWN0IHRoZSBjb3JydXB0aW9uIGFuZCwgY3J1Y2lhbGx5LCBob3cgd2UgaGFuZGxlIGZyZWVpbmcgdGhlIGZvbGlvIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycnVwdGVkIHBhZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nIGFuZCBpbnRlcmFjdGlvbnMgaGVyZSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGZ1cnRoZXIgY29ycnVwdGlvbiBhZnRlciBhIGhhcmR3YXJlIGZhdWx0LiBNeSBtYWluIG9iamVjdGl2ZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBlcnJvciBoYW5kbGluZyB3b3JrZmxvdyB3aGVuIGRlYWxpbmcgd2l0aCBwb2lzb25lZCBIdWdlVExCIHBhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwNywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA0OjA0OjQxLjYyOTcxNzIxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1NTg0MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MTg1Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODg0LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg4NTpzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg4Ni17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE5NTk9c3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTg5LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTk5MDpcXHRyYyA9IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5OTEtXFx0aWYgKHJjIFxcdTAwM2U9IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA0OjA0OjQzLjMwNTMwNzA4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTc0NDg2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gYSBQb3RlbnRpYWwgTWVtb3J5IElzc3VlKipcblxuT2theSwgc28gd2UndmUgZ290IGEgc3VzcGVjdGVkIG1lbW9yeSBmYWlsdXJlIG9uIG91ciBoYW5kcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgZGlyZWN0bHkgaW50byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRoZSBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGBfX2ZvbGlvX2ZyZWVfaHdwYCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGhhcmR3YXJlIHBhZ2UgdGFibGUgZW50cmllcywgYW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yLCBpdCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBvaW50IHdoZXJlIHRoZSBwcm9ibGVtIG1pZ2h0IGJlIG9yaWdpbmF0aW5nIG9yIGJlaW5nIHByb3BhZ2F0ZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8gZGF0YSBzdHJ1Y3R1cmUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHBvdGVudGlhbCBoYXJkd2FyZSBlcnJvcnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNDo0Ni43MjI3NTc3MjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzIxMTMyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19mb2xpb19mcmVlX2h3cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTE4MjQ9Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NTItXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxODUzOnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODU0LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTg4NT1zdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTE5LVxcdFxcdCAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTkyMDpcXHRcXHRfX2ZvbGlvX2ZyZWVfaHdwKGZvbGlvLCBmYWxzZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTIxLVxcdH1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTkyNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NDMtXFx0c3Bpbl9sb2NrKFxcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTk0NDpcXHRjb3VudCA9IF9fZm9saW9fZnJlZV9od3AoZm9saW8sIG1vdmVfZmxhZyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTQ1LVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNDo0OC40NTQ4NzY5NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzEzMTc5MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBodWdldGxiZnMgaW5vZGUgaW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYCBhbmQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IGRvZXMgZXhhY3RseS4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB3aGVyZSBJJ2QgZ28gaW1tZWRpYXRlbHksIGlzIHRvIGNoZWNrIGBmcy9odWdldGxiZnMvaW5vZGUuY2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMgb2YgaG93IHJlZ3VsYXIgaW5vZGVzIGFyZSBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGh1Z2V0bGJmcyBmaWxlc3lzdGVtLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlOlxuXG4qICAgSG93IGFyZSB0aGUgaW5vZGUncyBkYXRhIHN0cnVjdHVyZXMgcG9wdWxhdGVkPyBBcmUgd2UgdGFsa2luZyBhYm91dCB2ZnNfaW5vZGUgZGF0YSwgb3IgaXMgdGhlcmUgaHVnZXRsYmZzLXNwZWNpZmljIG1ldGFkYXRhIHRvbz9cbiogICBXaGF0IGhhcHBlbnMgdG8gYmxvY2sgYWxsb2NhdGlvbiwgb3IgaXMgaXQgcGFnZS1iYXNlZCBnaXZlbiB0aGUgbmF0dXJlIG9mIGh1Z2UgcGFnZXM/XG4qICAgQW55IGhvb2tzIGZvciBzZWN1cml0eSBhdHRyaWJ1dGVzLCBleHRlbmRlZCBhdHRyaWJ1dGVzLCBvciBvdGhlciByZWxldmFudCBmZWF0dXJlcz9cblxuSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGVyZS4gVGltZSB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0sIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBpbml0aWFsaXphdGlvbiBmbG93IGlzIGNydWNpYWwgdG8gdGhlIG92ZXJhbGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NTMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNDo1Mi4xNjgwNjA1ODVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDMwNTQ5ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9odWdldGxiZnMvaW5vZGUuYz03NTc9c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03NzgtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Nzc5OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYy03ODAte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzk3PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMS1cXHRcXHRjYXNlIFNfSUZSRUc6XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODMyOlxcdFxcdFxcdGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMy1cXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDQ6MDQ6NTQuMTcxMTIyNzkyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MzU0OTIxMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdldGxiZnMgUmVhZC9NZW1vcnkgRmFpbHVyZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGltcHJvdmluZyBob3cgd2UgaGFuZGxlIHJlYWQgYW5kIG1lbW9yeSBmYWlsdXJlcyB3aXRoaW4gaHVnZXRsYiBwYWdlcy4gTXkgaW5pdGlhbCBzY2FuIGZvY3VzZXMgb24gYSBmZXcga2V5IHN5bWJvbHM6IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgYF9fZm9saW9fZnJlZV9od3BgLCBhbmQgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgLiBUaGVzZSBzZWVtIGNlbnRyYWwgdG8gdGhlIGNvcmUgbG9naWMsIHNvIEknbGwga2VlcCBhbiBleWUgb24gaG93IHRoZSBjaGFuZ2VzIGltcGFjdCB0aGVtIHNwZWNpZmljYWxseS5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byB0aGUgY29uZmlndXJhdGlvbnMuIFRoZSB0ZXh0IGxpc3RzIGBIVUdFVExCRlNgLCBgSFVHRVRMQl9QQUdFYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEFoLCBidXQgd2FpdCBhIG1pbnV0ZeKApiBJIHNlZSBgRklMRU1BUF9MQVJHRV9GT0xJT2AgaXMgYSAqc2lsZW50KiBjb25maWcsIHNlbGVjdGVkIGJ5IGBIVUdFVExCX1BBR0VgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBJdCBtZWFucyB3ZSBvbmx5IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgYEhVR0VUTEJGU2AsIGBIVUdFVExCX1BBR0VgLCBhbmQgYE1FTU9SWV9GQUlMVVJFYC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzLCBidXQgaXQgc2VlbXMgY29ycmVjdC4gV2UgY2FuIHZlcmlmeSBpZiB0aG9zZSBhcmUgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3MgZm9yIHRoaXMgbmV3IHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ4MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNDo1OC44MDY2MTg3MjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDYxNDY3MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2VcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cXHRib29sIFxcXCI2NGtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cXHRib29sIFxcXCIyNTZrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cXHRib29sIFxcXCIxTUJcXFwiXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIjRNQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXFx0Ym9vbCBcXFwiNjRNQlxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc3LVxcbmZzL0tjb25maWc6Mjc4OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc5LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxuZnMvS2NvbmZpZy0yODMtXFxuZnMvS2NvbmZpZzoyODQ6Y29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xcbmZzL0tjb25maWctMjg1LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNzA4LVxcbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNzEwLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDQ6MDU6MDAuNTUyNzcxOTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NjIwNzE2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYW5kIENvbm5lY3RpbmcgSFdQb2lzb24gRnVuY3Rpb25zIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlc2UgaGFyZHdhcmUgcG9pc29uIGZ1bmN0aW9ucyBhcmUgd2lyZWQgdG9nZXRoZXIsIHNwZWNpZmljYWxseSB3aXRoIGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQuIExldCdzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW5zLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5IG9mIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBmaWxlbWFwX3JlYWRgLCB3aGljaCBpcyB0aGUgZ2VuZXJpYyByZWFkIGl0ZXJhdG9yLiBgZmlsZW1hcF9yZWFkYCBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYC4gTG9va2luZyBhdCB0aGUgYGh1Z2V0bGJmc2AgZmlsZSBvcGVyYXRpb25zLCB0aGUgYHJlYWRfaXRlcmAgZnVuY3Rpb24gaXMsIHJpZ2h0IG5vdywganVzdCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIFNvLCB0aGF0IGNvbmZpcm1zIHRoZSBmaXJzdCBwYXJ0LiBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuTmV4dCwgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAuIFRoaXMgb25lIGlzIGNhbGxlZCBieSBgaXNfcGFnZV9od3BvaXNvbmAgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgd2hpY2ggaXMgaXRzZWxmIGNhbGxlZCBmcm9tIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLiBHb29kLCB0aGUgY29ubmVjdGlvbiBpcyB0aGVyZS5cblxuTm93IGZvciBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgZnJvbSBgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb25gIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgZnJvbSBgbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYmAuXG5cbkFuZCBmaW5hbGx5LCBgX19mb2xpb19mcmVlX2h3cGAuIFRoaXMgb25lIGdldHMgY2FsbGVkIGZyb20gYm90aCBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gIGFuZCBgZm9saW9fZnJlZV9yYXdfaHdwYC4gYGZvbGlvX2ZyZWVfcmF3X2h3cGAgaXMgY2FsbGVkIGZyb20gYGZyZWVfaHVnZV9mb2xpb2AgaW4gYG1tL2h1Z2V0bGIuY2AuXG5cbk9rYXksIGFsbCB0aG9zZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBhbmQgc2VlbSB0byBiZSBjb25uZWN0ZWQgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJ20gY2xlYXIgb24gdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucywgSSBuZWVkIHRvIGtlZXAgYSBmZXcgaW4gbWluZDogYGFkanVzdF9yYW5nZV9od3BvaXNvbmAsIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLCBhbmQgYF9fZm9saW9fZnJlZV9od3BgLCBhcyB3ZWxsIGFzIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYC5cblxuQWgsIHJpZ2h0LCBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyBzdGF0aWMgd2l0aGluIGBtbS9maWxlbWFwLmNgLiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCBpcyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgaXMgc3RhdGljIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBhcyB3ZWxsLCBhcyBpcyBgX19mb2xpb19mcmVlX2h3cGAuIEZpbmFsbHksIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYCBpcyBzdGF0aWMgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC5cblxuTGV0IG1lIGFkZCBvbmUgbW9yZSB0aGluZyB0byB0aGUgbGlzdCB0byBjb25maXJtIC0gSSBzaG91bGQgY2hlY2sgaWYgYEZJTEVNQVBfTEFSR0VfRk9MSU9gIGlzIGEgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MDcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDQ6MDU6MDguMDE0ODQ1ODdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzk2MDMyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZJTEVNQVBfTEFSR0VfRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTg0NS1cXG5tbS9LY29uZmlnOjg0Njpjb25maWcgRklMRU1BUF9MQVJHRV9GT0xJT1xcbm1tL0tjb25maWctODQ3LVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDQ6MDU6MDkuNjk0NDUzODEyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzgzNDI3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIGBGSUxFTUFQX0xBUkdFX0ZPTElPYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBGSUxFTUFQX0xBUkdFX0ZPTElPYCBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBidXQgaXQncyBub3QgZGlyZWN0bHkgc2VsZWN0YWJsZSBieSB0aGUgdXNlciwgcmlnaHQ/IEl0J3MgbW9yZSBvZiBhbiAqaW1wbGljaXQqIGNob2ljZSBiYXNlZCBvbiBvdGhlciBzZXR0aW5ncy4gSXQncyB0cmlnZ2VyZWQgYnkgdGhlIGVuYWJsaW5nIG9mIGBIVUdFVExCX1BBR0VgIGFuZCwgaW4gdHVybiwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBzZWUuIFNvIGl0J3MgYSBzb3J0IG9mIGRlcGVuZGVuY3kuIFRoZSB3YXkgaXQgd29ya3MgaXMsIGlmIGVpdGhlciBvbmUgb2YgdGhvc2UgaXMgc2V0LCB0aGVuIHRoZSBvdGhlciBvbmUgaXMgYXNzdW1lZC4gQ29uc2VxdWVudGx5LCBzZXR0aW5nIGBIVUdFVExCRlNgLCB3aGljaCBicmluZ3MgYEhVR0VUTEJfUEFHRWAgYWxvbmcgZm9yIHRoZSByaWRlLCBpcyB0aGUgbmVjZXNzYXJ5IGxldmVyIHRvIHB1bGwgaGVyZS4gRmluZSwgSSd2ZSBnb3QgaXQuIEknbGwgc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkxOSwiT3V0cHV0VG9rZW5zIjoxODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNToxNC42MzI3OTg1NTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODY3MDI4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFkanVzdF9yYW5nZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3VwZGF0ZV9od3BvaXNvblwiLFxuICAgIFwiX19mb2xpb19mcmVlX2h3cFwiLFxuICAgIFwiaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdldGxiZnMgcmVhZCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgdGhlIGdlbmVyaWMgZmlsZW1hcCByZWFkIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIGZvciBodWdldGxiIHBhZ2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgaHdwb2lzb25lZCBwYWdlcyBkdXJpbmcgZmlsZW1hcCByZWFkcyBhbmQgY2hhbmdlcyBob3cgaHdwb2lzb25lZCBodWdldGxiIHBhZ2VzIGFyZSB0cmFja2VkICh1c2luZyBhIGhhc2ggdGFibGUgaW5zdGVhZCBvZiBhIGxpbmtlZCBsaXN0KS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFkanVzdF9yYW5nZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3VwZGF0ZV9od3BvaXNvblwiLFxuICAgIFwiX19mb2xpb19mcmVlX2h3cFwiLFxuICAgIFwiaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdldGxiZnMgcmVhZCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgdGhlIGdlbmVyaWMgZmlsZW1hcCByZWFkIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIGZvciBodWdldGxiIHBhZ2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgaHdwb2lzb25lZCBwYWdlcyBkdXJpbmcgZmlsZW1hcCByZWFkcyBhbmQgY2hhbmdlcyBob3cgaHdwb2lzb25lZCBodWdldGxiIHBhZ2VzIGFyZSB0cmFja2VkICh1c2luZyBhIGhhc2ggdGFibGUgaW5zdGVhZCBvZiBhIGxpbmtlZCBsaXN0KS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkbtks[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-15 03:49:34 +0000 UTC FinishedAt: 2026-07-15 04:05:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMORY_FAILURE" ], "series_id": "1ea7e79d-5597-441f-9992-9436608be7df" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "adjust_range_hwpoison", "hugetlb_page_hwpoison", "hugetlb_update_hwpoison", "__folio_free_hwp", "hugetlbfs_init_regular_inode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": { "findings": [ "7a0cb565-4340-4daf-8de2-06f5b1d2af93" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA0OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkanVzdF9yYW5nZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl91cGRhdGVfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7X19mb2xpb19mcmVlX2h3cCYjMzQ7LAogICAgJiMzNDtodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdldGxiZnMgcmVhZCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgdGhlIGdlbmVyaWMgZmlsZW1hcCByZWFkIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIGZvciBodWdldGxiIHBhZ2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgaHdwb2lzb25lZCBwYWdlcyBkdXJpbmcgZmlsZW1hcCByZWFkcyBhbmQgY2hhbmdlcyBob3cgaHdwb2lzb25lZCBodWdldGxiIHBhZ2VzIGFyZSB0cmFja2VkICh1c2luZyBhIGhhc2ggdGFibGUgaW5zdGVhZCBvZiBhIGxpbmtlZCBsaXN0KS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmMjI2YjM3Y2YzNDMzM2ViODQ2YzNiYjIxMDk4MjQ4ZWRhZjIxYzU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMDQ6MDQ6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWdcbmluZGV4IGNmNmFlNjQ3NzZlNjJjLi40OTIyYWRmNWJjODUxMiAxMDA2NDRcbi0tLSBhL2ZzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL0tjb25maWdcbkBAIC0yNzIsNiAmIzQzOzI3Miw3IEBAIGVuZGlmICMgSFVHRVRMQkZTXG4gXG4gY29uZmlnIEhVR0VUTEJfUEFHRVxuIFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4mIzQzO1x0c2VsZWN0IEZJTEVNQVBfTEFSR0VfRk9MSU9cbiBcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uYTZmMDQ1OWQ3OWRlYjggMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xODcsMTEzICYjNDM7MTg3LDYgQEAgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcbiB9XG4gXG4tLypcbi0gKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXG4tICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcbi0gKiBIV1BPSVNPTiBwYWdlLlxuLSAqL1xuLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4tXHRcdHNpemVfdCBieXRlcylcbi17XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4tXHRzaXplX3Qgc2FmZV9ieXRlcztcbi1cbi1cdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcbi1cdFx0cmV0dXJuIDA7XG4tXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4tXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4tXHRwYWdlJiM0MzsmIzQzOztcbi1cbi1cdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuLVx0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KVxuLVx0XHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbi19XG4tXG4tLypcbi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXG4tICovXG4tc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4te1xuLVx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4tXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XG4tXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0dW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzc2l6ZV90IHJldHZhbCA9IDA7XG4tXG4tXHR3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHNpemVfdCBuciwgY29waWVkLCB3YW50O1xuLVxuLVx0XHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xuLVx0XHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cdFx0aWYgKCFpc2l6ZSlcbi1cdFx0XHRicmVhaztcbi1cdFx0ZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0aWYgKGluZGV4IFx1MDAzZSBlbmRfaW5kZXgpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHtcbi1cdFx0XHRuciA9ICgoaXNpemUgLSAxKSBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKSAmIzQzOyAxO1xuLVx0XHRcdGlmIChuciBcdTAwM2M9IG9mZnNldClcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdG5yID0gbnIgLSBvZmZzZXQ7XG4tXG4tXHRcdC8qIEZpbmQgdGhlIGZvbGlvICovXG4tXHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2h1Z2V0bGJfZm9saW8oaCwgbWFwcGluZywgaW5kZXgpO1xuLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2UgaGF2ZSBhIEhPTEUsIHplcm8gb3V0IHRoZSB1c2VyLWJ1ZmZlciBmb3IgdGhlXG4tXHRcdFx0ICogbGVuZ3RoIG9mIHRoZSBob2xlIG9yIHJlcXVlc3QuXG4tXHRcdFx0ICovXG4tXHRcdFx0Y29waWVkID0gaW92X2l0ZXJfemVybyhuciwgdG8pO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXG4tXHRcdFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbi1cdFx0XHRcdHdhbnQgPSBucjtcbi1cdFx0XHRlbHNlIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBBZGp1c3QgaG93IG1hbnkgYnl0ZXMgc2FmZSB0byByZWFkIHdpdGhvdXRcbi1cdFx0XHRcdCAqIHRvdWNoaW5nIHRoZSAxc3QgcmF3IEhXUE9JU09OIHBhZ2UgYWZ0ZXJcbi1cdFx0XHRcdCAqIG9mZnNldC5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0d2FudCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBucik7XG4tXHRcdFx0XHRpZiAod2FudCA9PSAwKSB7XG4tXHRcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXHRcdFx0XHRcdHJldHZhbCA9IC1FSU87XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCB3YW50LCB0byk7XG4tXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0fVxuLVx0XHRvZmZzZXQgJiM0Mzs9IGNvcGllZDtcbi1cdFx0cmV0dmFsICYjNDM7PSBjb3BpZWQ7XG4tXHRcdGlmIChjb3BpZWQgIT0gbnIgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRcdGlmICghcmV0dmFsKVxuLVx0XHRcdFx0cmV0dmFsID0gLUVGQVVMVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpbmRleCAmIzQzOz0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaCk7XG4tXHRcdG9mZnNldCBcdTAwMjY9IH5odWdlX3BhZ2VfbWFzayhoKTtcbi1cdH1cbi1cdGlvY2ItXHUwMDNla2lfcG9zID0gKChsb2ZmX3QpaW5kZXggXHUwMDNjXHUwMDNjIGh1Z2VfcGFnZV9zaGlmdChoKSkgJiM0Mzsgb2Zmc2V0O1xuLVx0cmV0dXJuIHJldHZhbDtcbi19XG4tXG4gc3RhdGljIGludCBodWdldGxiZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuIFx0XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbkBAIC04ODMsNiAmIzQzOzc3NiwxNiBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHJldHVybiBpbm9kZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9yZGVyID0gaHVnZV9wYWdlX29yZGVyKGhzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG4mIzQzO1x0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogSHVnZXRsYmZzIGlzIG5vdCByZWNsYWltYWJsZTsgdGhlcmVmb3JlIGl0cyBpX21tYXBfcndzZW0gd2lsbCBuZXZlclxuICAqIGJlIHRha2VuIGZyb20gcmVjbGFpbSAtLSB1bmxpa2UgcmVndWxhciBmaWxlc3lzdGVtcy4gVGhpcyBuZWVkcyBhblxuQEAgLTkyNiw4ICYjNDM7ODI5LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdGluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgbW9kZSwgZGV2KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBTX0lGUkVHOlxuLVx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG4mIzQzO1x0XHRcdGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFNfSUZESVI6XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcbkBAIC0xMjA2LDcgJiM0MzsxMTA4LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi1cdC5yZWFkX2l0ZXJcdFx0PSBodWdldGxiZnNfcmVhZF9pdGVyLFxuJiM0MztcdC5yZWFkX2l0ZXJcdFx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuIFx0Lm1tYXBcdFx0XHQ9IGh1Z2V0bGJmc19maWxlX21tYXAsXG4gXHQuZnN5bmNcdFx0XHQ9IG5vb3BfZnN5bmMsXG4gXHQuZ2V0X3VubWFwcGVkX2FyZWFcdD0gaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uMTg3ODY0MmU3NWVjNTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xNjUsNyAmIzQzOzE2NSw3IEBAIGJvb2wgaHVnZXRsYmZzX3BhZ2VjYWNoZV9wcmVzZW50KHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcbiBcbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbiBleHRlcm4gaW50IG1vdmFibGVfZ2lnYW50aWNfcGFnZXMgX19yZWFkX21vc3RseTtcbiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5O1xuQEAgLTI5Miw4ICYjNDM7MjkyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShcbi1cdFx0XHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTU5NSw4ICYjNDM7NTk0LDggQEAgZW51bSBodWdldGxiX3BhZ2VfZmxhZ3Mge1xuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gI2RlZmluZSBURVNUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcdFx0XHRcdFx0XHRcXFxuLWJvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4tXHR7XHR2b2lkICpwcml2YXRlID0gXHUwMDI2Zm9saW8tXHUwMDNlcHJpdmF0ZTtcdFx0XFxcbiYjNDM7Ym9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG4mIzQzO1x0e1x0Y29uc3Qgdm9pZCAqcHJpdmF0ZSA9IFx1MDAyNmZvbGlvLVx1MDAzZXByaXZhdGU7XHRcdFxcXG4gXHRcdHJldHVybiB0ZXN0X2JpdChIUEdfIyNmbG5hbWUsIHByaXZhdGUpO1x0XHRcXFxuIFx0fVxuIFxuQEAgLTYxNiw3ICYjNDM7NjE1LDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4gI2Vsc2VcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG4gc3RhdGljIGlubGluZSBib29sXHRcdFx0XHRcdFx0XFxcbi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiYjNDM7Zm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4gXHR7IHJldHVybiAwOyB9XG4gXG4gI2RlZmluZSBTRVRIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG5AQCAtNzI3LDcgJiM0Mzs3MjYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzdWJwb29sX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gSFVHRVRMQkZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNwb29sO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGZvbGlvLVx1MDAzZV9odWdldGxiX3N1YnBvb2w7XG4gfVxuQEAgLTg1Nyw3ICYjNDM7ODU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX2h1Z2VfYm9vdG1lbV9hbGxvYyh2b2lkKVxuIH1cbiAjZW5kaWZcbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xuIFx0cmV0dXJuIHNpemVfdG9faHN0YXRlKGZvbGlvX3NpemUoZm9saW8pKTtcbkBAIC0xMDcwLDExICYjNDM7MTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbiB2b2lkIGh1Z2V0bGJfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbiAjZW5kaWZcbiBcbi0vKlxuLSAqIENoZWNrIGlmIGEgZ2l2ZW4gcmF3IEBwYWdlIGluIGEgaHVnZXBhZ2UgaXMgSFdQT0lTT04uXG4tICovXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxuIHtcbiBcdHJldHVybiBQQUdFX01BU0sgXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoc3RhdGVfZmlsZShmaWxlKSk7XG5AQCAtMTA4OCw3ICYjNDM7MTA4Miw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTExNTcsNyAmIzQzOzExNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmhzdGF0ZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5pbmRleCBiMThjMmIyZTdkMmM2NS4uZWQ1YzA4MjlmZjU2OWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuQEAgLTM4Nyw3ICYjNDM7Mzg3LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xuICAqIEBfaHVnZXRsYl9zdWJwb29sOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYi5oLlxuICAqIEBfaHVnZXRsYl9jZ3JvdXA6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiX2Nncm91cC5oLlxuICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXG4tICogQF9odWdldGxiX2h3cG9pc29uOiBEbyBub3QgdXNlIGRpcmVjdGx5LCBjYWxsIHJhd19od3BfbGlzdF9oZWFkKCkuXG4gICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxuICAqXG5AQCAtNDk5LDcgJiM0Mzs0OTgsNiBAQCBzdHJ1Y3QgZm9saW8ge1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX3N1YnBvb2w7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xuIFx0XHRcdHZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkO1xuLVx0XHRcdHZvaWQgKl9odWdldGxiX2h3cG9pc29uO1xuIFx0LyogcHJpdmF0ZTogdGhlIHVuaW9uIHdpdGggc3RydWN0IHBhZ2UgaXMgdHJhbnNpdGlvbmFsICovXG4gXHRcdH07XG4gXHRcdHN0cnVjdCBwYWdlIF9fcGFnZV8zO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbmluZGV4IDcyMjNmNmY0ZTJiNDAzLi44ZTU3YzEyYTczMDFiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTEwNjgsNiAmIzQzOzEwNjgsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxuJiM0Mztib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4mIzQzO1xuIC8qXG4gICogQ2hlY2sgaWYgYSBwYWdlIGlzIGN1cnJlbnRseSBtYXJrZWQgSFdQb2lzb25lZC4gTm90ZSB0aGF0IHRoaXMgY2hlY2sgaXNcbiAgKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXG5AQCAtMTA3NSwxOCAmIzQzOzEwNzgsMjkgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4mIzQzO1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuJiM0MztcdFx0cmV0dXJuIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSk7XG4mIzQzO1x0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuIFxuLVx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4tXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4mIzQzOyNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSB8fFxuLVx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuJiM0MztcdCAgICAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbiB9XG4gXG4gYm9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDJjMzcxOGQ1OTJkNmRkLi5iZDZhNjI3NWE0ZTkxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHtcbiBcdEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSA9IDksXG4gXHRBU19LRVJORUxfRklMRSA9IDEwLFx0LyogbWFwcGluZyBmb3IgYSBmYWtlIGtlcm5lbCBmaWxlIHRoYXQgc2hvdWxkbiYjMzk7dFxuIFx0XHRcdFx0ICAgYWNjb3VudCB1c2FnZSB0byB1c2VyIGNncm91cHMgKi9cbiYjNDM7XHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXHQvKiBJZiB3ZSBtaXNzIGluIHRoZSBwYWdlIGNhY2hlLCBpdCYjMzk7cyBhIGhvbGUgKi9cbiBcdC8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovXG4gXHRBU19GT0xJT19PUkRFUl9CSVRTID0gNSxcbiBcdEFTX0ZPTElPX09SREVSX01JTiA9IDE2LFxuQEAgLTM0NSw2ICYjNDM7MzQ2LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3dyaXRlYmFja19tYXlfZGVhZGxvY2tfb25fcmVjbGFpbShjb25zdCBzdHJ1Y3QgYWRkcmVzXG4gXHRyZXR1cm4gdGVzdF9iaXQoQVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuJiM0Mzt7XG4mIzQzO1x0c2V0X2JpdChBU19BVVRIT1JJVEFUSVZFLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0ZXN0X2JpdChBU19BVVRIT1JJVEFUSVZFLCBcdTAwMjZtYXBwaW5nLVx1MDAzZWZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGdmcF90IG1hcHBpbmdfZ2ZwX21hc2soY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlZ2ZwX21hc2s7XG5AQCAtMzczLDcgJiM0MzszODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXG4gICogYXNzdW1wdGlvbnMgYWJvdXQgbWF4aW11bSBvcmRlciBpZiBUSFAgYXJlIGRpc2FibGVkLCBidXQgOCBzZWVtcyBsaWtlXG4gICogYSBnb29kIG9yZGVyICh0aGF0JiMzOTtzIDFNQiBpZiB5b3UmIzM5O3JlIHVzaW5nIDRrQiBwYWdlcylcbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzOyNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJT1xuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcdEhQQUdFX1BNRF9PUkRFUlxuICNlbHNlXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0OFxuQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4ge1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAxVSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgJiM0MzsgTUFYX1BBR0VDQUNIRV9PUkRFUik7XG4gXHRyZXR1cm4gUEFHRV9TSVpFO1xuIH1cbkBAIC00MDUsMjkgJiM0Mzs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZClcbiAgKiBAbWluOiBNaW5pbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIDAtTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqIEBtYXg6IE1heGltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gQG1pbi1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuXG4gICpcbi0gKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvciB0b1xuLSAqIGluZGljYXRlIHdoaWNoIGJhc2Ugc2l6ZSAobWluKSBhbmQgbWF4aW11bSBzaXplIChtYXgpIG9mIGZvbGlvIHRoZSBWRlNcbi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZFxuLSAqIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzXG4tICogc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cbiYjNDM7ICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3JcbiYjNDM7ICogdG8gaW5kaWNhdGUgd2hpY2ggc2l6ZSBmb2xpb3MgY2FuIGJlIHVzZWQgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mXG4mIzQzOyAqIHRoZSBpbm9kZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsXG4mIzQzOyAqIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcyBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxuICAqIERvIG5vdCB0dW5lIGl0IGJhc2VkIG9uLCBlZywgaV9zaXplLlxuICAqXG4mIzQzOyAqIGh1Z2V0bGIgY2FsbHMgdGhpcyB3aXRoIG9yZGVycyBsYXJnZXIgdGhhbiBNQVhfUEFHRUNBQ0hFX09SREVSLlxuJiM0MzsgKiBOb3JtYWwgZmlsZXN5c3RlbXMgc2hvdWxkIG5vdCBkbyB0aGlzLlxuJiM0MzsgKlxuICAqIENvbnRleHQ6IFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlIGlub2RlIGlzIGFjdGl2ZSBhcyBpdFxuICAqIGlzIG5vbi1hdG9taWMuXG4gICovXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbWluLFxuLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbWF4KVxuJiM0MztcdFx0dW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heClcbiB7XG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybjtcbi1cbi1cdGlmIChtaW4gXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXG4tXHRcdG1pbiA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XG4tXG4tXHRpZiAobWF4IFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxuLVx0XHRtYXggPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xuLVxuIFx0aWYgKG1heCBcdTAwM2MgbWluKVxuIFx0XHRtYXggPSBtaW47XG4gXG5AQCAtNDYwLDcgJiM0Mzs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gKG1hcHBpbmctXHUwMDNlZmxhZ3MgXHUwMDI2IEFTX0ZPTElPX09SREVSX01BWF9NQVNLKSBcdTAwM2VcdTAwM2UgQVNfRk9MSU9fT1JERVJfTUFYO1xuIH1cbkBAIC00NjgsNyAmIzQzOzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19taW5fZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gKG1hcHBpbmctXHUwMDNlZmxhZ3MgXHUwMDI2IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSBcdTAwM2VcdTAwM2UgQVNfRk9MSU9fT1JERVJfTUlOO1xuIH1cbkBAIC01MjQsNyAmIzQzOzUyOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2xhcmdlX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpXG4gICpcbiAgKiBSZXR1cm46IFRydWUgaWYgUE1ELXNpemVkIGZvbGlvcyBhcmUgc3VwcG9ydGVkLCBvdGhlcndpc2UgZmFsc2UuXG4gICovXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MzsjaWZkZWYgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9cbiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiB7XG4gXHQvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi9cbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggOWUwY2E0ODI0OTA1NGYuLjk5MmU3YWUwYjJiZjI5IDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZ1xuQEAgLTg0MywxMSAmIzQzOzg0MywxNSBAQCBjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbiBjb25maWcgTU1fSURcbiBcdGRlZl9ib29sIG5cbiBcbiYjNDM7Y29uZmlnIEZJTEVNQVBfTEFSR0VfRk9MSU9cbiYjNDM7XHRkZWZfYm9vbCBuXG4mIzQzO1xuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gXHRzZWxlY3QgQ09NUEFDVElPTlxuIFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuJiM0MztcdHNlbGVjdCBGSUxFTUFQX0xBUkdFX0ZPTElPXG4gXHRzZWxlY3QgTU1fSURcbiBcdGhlbHBcbiBcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNThlYjlkMjQwNjQzNDguLmY2NjJjZGE4MWRjNzRjIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC0yNDgzLDYgJiM0MzsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcbiBcdFx0aWYgKCFmb2xpb19iYXRjaF9hZGQoZmJhdGNoLCBmb2xpbykpXG4gXHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKVxuQEAgLTI2OTUsNiAmIzQzOzI2OTcsOCBAQCBzdGF0aWMgaW50IGZpbGVtYXBfZ2V0X3BhZ2VzKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGNvdW50LFxuIFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChmYmF0Y2gpKSB7XG4gXHRcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbHAsIFx1MDAyNmZpbHAtXHUwMDNlZl9yYSwgbWFwcGluZywgaW5kZXgpO1xuIFxuJiM0MztcdFx0aWYgKG1hcHBpbmdfaXNfYXV0aG9yaXRhdGl2ZShtYXBwaW5nKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PSU8pXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVClcbkBAIC0yNzQ5LDYgJiM0MzsyNzUzLDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwb3Nfc2FtZV9mb2xpbyhsb2ZmX3QgcG9zMSwgbG9mZl90IHBvczIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKHBvczEgXHUwMDNlXHUwMDNlIHNoaWZ0ID09IHBvczIgXHUwMDNlXHUwMDNlIHNoaWZ0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4mIzQzO1x0XHRzaXplX3QgYnl0ZXMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4mIzQzO1x0c2l6ZV90IHNhZmVfYnl0ZXM7XG4mIzQzO1xuJiM0MztcdGlmICghZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXG4mIzQzO1x0XHRyZXR1cm4gYnl0ZXM7XG4mIzQzO1x0aWYgKGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xuJiM0MztcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcbiYjNDM7XHRwYWdlJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXG4mIzQzO1x0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KVxuJiM0MztcdFx0aWYgKGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5AQCAtMjgyOCw2ICYjNDM7Mjg1NSwyMiBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRnb3RvIHB1dF9mb2xpb3M7XG4gXHRcdGVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBpdGVyLVx1MDAzZWNvdW50KTtcbiBcbiYjNDM7XHRcdGlmICghZm9saW9fYmF0Y2hfY291bnQoXHUwMDI2ZmJhdGNoKSkge1xuJiM0MztcdFx0XHRzaXplX3QgZnNpemUgPSBtYXBwaW5nX21pbl9mb2xpb19ucmJ5dGVzKG1hcHBpbmcpO1xuJiM0MztcdFx0XHRzaXplX3Qgb2Zmc2V0ID0gaW9jYi1cdTAwM2VraV9wb3MgXHUwMDI2IChmc2l6ZSAtIDEpO1xuJiM0MztcdFx0XHRzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLVx1MDAzZWtpX3BvcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgZnNpemUgLSBvZmZzZXQpO1xuJiM0MztcdFx0XHRzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7XG4mIzQzO1xuJiM0MztcdFx0XHRhbHJlYWR5X3JlYWQgJiM0Mzs9IGNvcGllZDtcbiYjNDM7XHRcdFx0aW9jYi1cdTAwM2VraV9wb3MgJiM0Mzs9IGNvcGllZDtcbiYjNDM7XHRcdFx0bGFzdF9wb3MgPSBpb2NiLVx1MDAzZWtpX3BvcztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuJiM0MztcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBPbmNlIHdlIHN0YXJ0IGNvcHlpbmcgZGF0YSwgd2UgZG9uJiMzOTt0IHdhbnQgdG8gYmUgdG91Y2hpbmcgYW55XG4gXHRcdCAqIGNhY2hlbGluZXMgdGhhdCBtaWdodCBiZSBjb250ZW5kZWQ6XG5AQCAtMjg2MiwxNCAmIzQzOzI5MDUsMTggQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0aWYgKHdyaXRhYmx5X21hcHBlZClcbiBcdFx0XHRcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4gXG4tXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTtcbiYjNDM7XHRcdFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcbiYjNDM7XHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpXG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSAtRUlPO1xuJiM0MztcdFx0XHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgY29waWVkLCBpdGVyKTtcbiBcbiBcdFx0XHRhbHJlYWR5X3JlYWQgJiM0Mzs9IGNvcGllZDtcbiBcdFx0XHRpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOz0gY29waWVkO1xuIFx0XHRcdGxhc3RfcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4gXG4gXHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpIHtcbi1cdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0XHRpZiAoIWVycm9yKVxuJiM0MztcdFx0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi4zNTMzNDAzMDkxMDc0YyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00NDEzLDcgJiM0Mzs0NDEzLDcgQEAgc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9PSBIUEFHRV9QTURfTlIgLSAxKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuJiM0MztcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpJiM0MzsmIzQzOykge1xuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNTcxMjEyYjgwODM1ZWMuLmNjOGQ5ODM5OTkxM2UzIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmNcbkBAIC0xNzc1LDcgJiM0MzsxNzc1LDcgQEAgdm9pZCBpbml0X25ld19odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gICogc3RhYmxlLiAgRHVlIHRvIGxvY2tpbmcgb3JkZXIsIHdlIGNhbiBvbmx5IHRyeWxvY2tfd3JpdGUuICBJZiB3ZSBjYW5cbiAgKiBub3QgZ2V0IHRoZSBsb2NrLCBzaW1wbHkgcmV0dXJuIE5VTEwgdG8gY2FsbGVyLlxuICAqL1xuLXN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCA1MTUwOGE1NWM0MDU1ZS4uOWU0ZWU1ZDkzOTA1MDYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2h0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3NtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ybWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTE4MDgsMzMgJiM0MzsxODA5LDI2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1mX2RheF9raWxsX3Byb2NzKTtcbiBcbiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuIFxuLS8qXG4tICogU3RydWN0IHJhd19od3BfcGFnZSByZXByZXNlbnRzIGluZm9ybWF0aW9uIGFib3V0IFwmIzM0O3JhdyBlcnJvciBwYWdlXCYjMzQ7LFxuLSAqIGNvbnN0cnVjdGluZyBzaW5nbHkgbGlua2VkIGxpc3QgZnJvbSAtXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uXG4tICovXG4tc3RydWN0IHJhd19od3BfcGFnZSB7XG4tXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBub2RlO1xuJiM0MzsvKiBQcm90ZWN0cyBodWdldGxiX2h3cG9pc29uIGxpc3QgKi9cbiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhodGxiX2h3cG9pc29uX2xvY2spO1xuJiM0MztzdGF0aWMgREVGSU5FX0hBU0hUQUJMRShodGxiX2h3cG9pc29uLCA1KTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBod3BfcGFnZSB7XG4mIzQzO1x0c3RydWN0IGhsaXN0X25vZGUgbm9kZTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIH07XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaGVhZCAqcmF3X2h3cF9saXN0X2hlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHRyZXR1cm4gKHN0cnVjdCBsbGlzdF9oZWFkICopXHUwMDI2Zm9saW8tXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb247XG4tfVxuLVxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzOy8qXG4mIzQzOyAqIENoZWNrIGlmIGEgZ2l2ZW4gQHBhZ2UgaW4gYSBodWdldGxiIGZvbGlvIGlzIEhXUE9JU09OLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaHdwX3BhZ2UgKnA7XG4gXHRib29sIHJldCA9IGZhbHNlO1xuIFxuIFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuLVx0XHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuLVxuIFx0LypcbiBcdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHN1YnBhZ2VzXG4gXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuXG5AQCAtMTg0MiwzNiAmIzQzOzE4MzYsMzkgQEAgYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm1mX211dGV4KTtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbiBcbi1cdHJhd19od3BfaGVhZCA9IHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuJiM0MztcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUoaHRsYl9od3BvaXNvbiwgcCwgbm9kZSwgKHVuc2lnbmVkIGxvbmcpcGFnZSkge1xuIFx0XHRpZiAocGFnZSA9PSBwLVx1MDAzZXBhZ2UpIHtcbiBcdFx0XHRyZXQgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWZfbXV0ZXgpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiB7XG4tXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqaGVhZDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnAsICpuZXh0O1xuJiM0MztcdGludCBiO1xuJiM0MztcdHN0cnVjdCBod3BfcGFnZSAqcDtcbiYjNDM7XHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wO1xuIFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XG4gXG4tXHRoZWFkID0gbGxpc3RfZGVsX2FsbChyYXdfaHdwX2xpc3RfaGVhZChmb2xpbykpO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBoZWFkLCBub2RlKSB7XG4mIzQzO1x0aGFzaF9mb3JfZWFjaF9zYWZlKGh0bGJfaHdwb2lzb24sIGIsIHRtcCwgcCwgbm9kZSkge1xuJiM0MztcdFx0aWYgKHBhZ2VfZm9saW8ocC1cdTAwM2VwYWdlKSAhPSBmb2xpbylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdGlmIChtb3ZlX2ZsYWcpXG4gXHRcdFx0U2V0UGFnZUhXUG9pc29uKHAtXHUwMDNlcGFnZSk7XG4gXHRcdGVsc2VcbiBcdFx0XHRudW1fcG9pc29uZWRfcGFnZXNfc3ViKHBhZ2VfdG9fcGZuKHAtXHUwMDNlcGFnZSksIDEpO1xuJiM0MztcdFx0aGFzaF9kZWwoXHUwMDI2cC1cdTAwM2Vub2RlKTtcbiBcdFx0a2ZyZWUocCk7XG4gXHRcdGNvdW50JiM0MzsmIzQzOztcbiBcdH1cbiYjNDM7XG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuQEAgLTE4ODcsOSAmIzQzOzE4ODQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZylcbiAgKi9cbiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpoZWFkO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcmF3X2h3cDtcbi1cdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnA7XG4mIzQzO1x0c3RydWN0IGh3cF9wYWdlICpwO1xuIFx0aW50IHJldCA9IGZvbGlvX3Rlc3Rfc2V0X2h3cG9pc29uKGZvbGlvKSA/IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEIDogMDtcbiBcbiBcdC8qXG5AQCAtMTg5OSwxNiAmIzQzOzE4OTQsMTggQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdCAqL1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XG4tXHRoZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuLVx0XHRpZiAocC1cdTAwM2VwYWdlID09IHBhZ2UpXG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XG4mIzQzO1x0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZShodGxiX2h3cG9pc29uLCBwLCBub2RlLCAodW5zaWduZWQgbG9uZylwYWdlKSB7XG4mIzQzO1x0XHRpZiAocC1cdTAwM2VwYWdlID09IHBhZ2UpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbiBcdFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRDtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbi1cdHJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTtcbi1cdGlmIChyYXdfaHdwKSB7XG4tXHRcdHJhd19od3AtXHUwMDNlcGFnZSA9IHBhZ2U7XG4tXHRcdGxsaXN0X2FkZChcdTAwMjZyYXdfaHdwLVx1MDAzZW5vZGUsIGhlYWQpO1xuJiM0MztcdHAgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xuJiM0MztcdGlmIChwKSB7XG4mIzQzO1x0XHRwLVx1MDAzZXBhZ2UgPSBwYWdlO1xuJiM0MztcdFx0aGFzaF9hZGQoaHRsYl9od3BvaXNvbiwgXHUwMDI2cC1cdTAwM2Vub2RlLCAodW5zaWduZWQgbG9uZylwYWdlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbFxuQEAgLTE5MjAsMTMgJiM0MzsxOTE3LDE1IEBAIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRcdCAqIE9uY2UgaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUgaXMgc2V0LCByYXdfaHdwX3BhZ2UgaXMgbm90XG4gXHRcdCAqIHVzZWQgYW55IG1vcmUsIHNvIGZyZWUgaXQuXG4gXHRcdCAqL1xuLVx0XHRfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgZmFsc2UpO1xuJiM0MztcdFx0X19mb2xpb19mcmVlX2h3cChmb2xpbywgZmFsc2UpO1xuIFx0fVxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY291bnQ7XG4gXHQvKlxuIFx0ICogaHVnZXRsYl92bWVtbWFwX29wdGltaXplZCBodWdlcGFnZXMgY2FuJiMzOTt0IGJlIGZyZWVkIGJlY2F1c2Ugc3RydWN0XG4gXHQgKiBwYWdlcyBmb3IgdGFpbCBwYWdlcyBhcmUgcmVxdWlyZWQgYnV0IHRoZXkgZG9uJiMzOTt0IGV4aXN0LlxuQEAgLTE5NDEsNyAmIzQzOzE5NDAsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBfX2ZvbGlvX2ZyZWVfcmF3X2h3cChmb2xpbywgbW92ZV9mbGFnKTtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbiYjNDM7XHRjb3VudCA9IF9fZm9saW9fZnJlZV9od3AoZm9saW8sIG1vdmVfZmxhZyk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5pbmRleCA3YWMxOWZhYjIyNjMyNC4uMzMwMDdlOGU1NDZhMDkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5AQCAtMTgxMyw3ICYjNDM7MTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdHBmbiA9IGZvbGlvX3Bmbihmb2xpbykgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcbiBcbi1cdFx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuJiM0MztcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbm5vdCBoYW5kbGUgbGFyZ2UgZm9saW9zXG4gXHRcdFx0ICogaW4gYWxsIGNhc2VzIHlldC5cbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggYjUxZjgzYzk3MGJiMzcuLjQ5MmM5YmVmMzYyMDc0IDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTMyNDAsNyAmIzQzOzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiYjNDM7XHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0cmV0dXJuIC1FSU87XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjcwZTU0YWNlMGU3NDFjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTA4Niw3ICYjNDM7MTA4Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbiBcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbiBcdFx0XHRnb3RvIGtlZXA7XG4gXG4tXHRcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbiYjNDM7XHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW4mIzM5O3QgaGFuZGxlIGxhcmdlXG4gXHRcdFx0ICogZm9saW8sIGp1c3Qgc2tpcCBpdC4gbWVtb3J5X2ZhaWx1cmUoKSB3aWxsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWRqdXN0X3JhbmdlX2h3cG9pc29uJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfcGFnZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3VwZGF0ZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtfX2ZvbGlvX2ZyZWVfaHdwJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGh1Z2V0bGJmcyByZWFkIGltcGxlbWVudGF0aW9uIHRvIHVzZSB0aGUgZ2VuZXJpYyBmaWxlbWFwIHJlYWQgaXRlcmF0b3IgYW5kIHVwZGF0ZXMgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcgZm9yIGh1Z2V0bGIgcGFnZXMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGhhbmRsZSBod3BvaXNvbmVkIHBhZ2VzIGR1cmluZyBmaWxlbWFwIHJlYWRzIGFuZCBjaGFuZ2VzIGhvdyBod3BvaXNvbmVkIGh1Z2V0bGIgcGFnZXMgYXJlIHRyYWNrZWQgKHVzaW5nIGEgaGFzaCB0YWJsZSBpbnN0ZWFkIG9mIGEgbGlua2VkIGxpc3QpLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGh1Z2V0bGJmcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjIyNmIzN2NmMzQzMzNlYjg0NmMzYmIyMTA5ODI0OGVkYWYyMWM1OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDE1IDA0OjA0OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggY2Y2YWU2NDc3NmU2MmMuLjQ5MjJhZGY1YmM4NTEyIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL0tjb25maWcKQEAgLTI3Miw2ICYjNDM7MjcyLDcgQEAgZW5kaWYgIyBIVUdFVExCRlMKIAogY29uZmlnIEhVR0VUTEJfUEFHRQogCWRlZl9ib29sIEhVR0VUTEJGUwomIzQzOwlzZWxlY3QgRklMRU1BUF9MQVJHRV9GT0xJTwogCXNlbGVjdCBYQVJSQVlfTVVMVEkKIAogY29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQCmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCmluZGV4IDIxNmUxYTBkZDBiMjM3Li5hNmYwNDU5ZDc5ZGViOCAxMDA2NDQKLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKQEAgLTE4NywxMTMgJiM0MzsxODcsNiBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJcmV0dXJuIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtZmxhZ3MoZmlsZSwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTsKIH0KIAotLyoKLSAqIFNvbWVvbmUgd2FudHMgdG8gcmVhZCBAYnl0ZXMgZnJvbSBhIEhXUE9JU09OIGh1Z2V0bGIgQGZvbGlvIGZyb20gQG9mZnNldC4KLSAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9uZSBjYW4gcmVhZCB3aXRob3V0IHRvdWNoaW5nIHRoZSAxc3QgcmF3Ci0gKiBIV1BPSVNPTiBwYWdlLgotICovCi1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LAotCQlzaXplX3QgYnl0ZXMpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpOwotCXNpemVfdCBzYWZlX2J5dGVzOwotCi0JaWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKQotCQlyZXR1cm4gMDsKLQkvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovCi0Jc2FmZV9ieXRlcyA9IFBBR0VfU0laRSAtIChvZmZzZXQgJSBQQUdFX1NJWkUpOwotCXBhZ2UmIzQzOyYjNDM7OwotCi0JLyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovCi0JZm9yICg7IHNhZmVfYnl0ZXMgJmx0OyBieXRlczsgc2FmZV9ieXRlcyAmIzQzOz0gUEFHRV9TSVpFLCBwYWdlJiM0MzsmIzQzOykKLQkJaWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKQotCQkJYnJlYWs7Ci0KLQlyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTsKLX0KLQotLyoKLSAqIFN1cHBvcnQgZm9yIHJlYWQoKSAtIEZpbmQgdGhlIHBhZ2UgYXR0YWNoZWQgdG8gZl9tYXBwaW5nIGFuZCBjb3B5IG91dCB0aGUKLSAqIGRhdGEuIFRoaXMgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIGZpbGVtYXBfcmVhZCgpLgotICovCi1zdGF0aWMgc3NpemVfdCBodWdldGxiZnNfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bykKLXsKLQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItJmd0O2tpX2ZpbHA7Ci0Jc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0OwotCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLSZndDtraV9wb3MgJmd0OyZndDsgaHVnZV9wYWdlX3NoaWZ0KGgpOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gaW9jYi0mZ3Q7a2lfcG9zICZhbXA7IH5odWdlX3BhZ2VfbWFzayhoKTsKLQl1bnNpZ25lZCBsb25nIGVuZF9pbmRleDsKLQlsb2ZmX3QgaXNpemU7Ci0Jc3NpemVfdCByZXR2YWwgPSAwOwotCi0Jd2hpbGUgKGlvdl9pdGVyX2NvdW50KHRvKSkgewotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCQlzaXplX3QgbnIsIGNvcGllZCwgd2FudDsKLQotCQkvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqLwotCQluciA9IGh1Z2VfcGFnZV9zaXplKGgpOwotCQlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKLQkJaWYgKCFpc2l6ZSkKLQkJCWJyZWFrOwotCQllbmRfaW5kZXggPSAoaXNpemUgLSAxKSAmZ3Q7Jmd0OyBodWdlX3BhZ2Vfc2hpZnQoaCk7Ci0JCWlmIChpbmRleCAmZ3Q7IGVuZF9pbmRleCkKLQkJCWJyZWFrOwotCQlpZiAoaW5kZXggPT0gZW5kX2luZGV4KSB7Ci0JCQluciA9ICgoaXNpemUgLSAxKSAmYW1wOyB+aHVnZV9wYWdlX21hc2soaCkpICYjNDM7IDE7Ci0JCQlpZiAobnIgJmx0Oz0gb2Zmc2V0KQotCQkJCWJyZWFrOwotCQl9Ci0JCW5yID0gbnIgLSBvZmZzZXQ7Ci0KLQkJLyogRmluZCB0aGUgZm9saW8gKi8KLQkJZm9saW8gPSBmaWxlbWFwX2xvY2tfaHVnZXRsYl9mb2xpbyhoLCBtYXBwaW5nLCBpbmRleCk7Ci0JCWlmIChJU19FUlIoZm9saW8pKSB7Ci0JCQkvKgotCQkJICogV2UgaGF2ZSBhIEhPTEUsIHplcm8gb3V0IHRoZSB1c2VyLWJ1ZmZlciBmb3IgdGhlCi0JCQkgKiBsZW5ndGggb2YgdGhlIGhvbGUgb3IgcmVxdWVzdC4KLQkJCSAqLwotCQkJY29waWVkID0gaW92X2l0ZXJfemVybyhuciwgdG8pOwotCQl9IGVsc2UgewotCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKLQotCQkJaWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSkKLQkJCQl3YW50ID0gbnI7Ci0JCQllbHNlIHsKLQkJCQkvKgotCQkJCSAqIEFkanVzdCBob3cgbWFueSBieXRlcyBzYWZlIHRvIHJlYWQgd2l0aG91dAotCQkJCSAqIHRvdWNoaW5nIHRoZSAxc3QgcmF3IEhXUE9JU09OIHBhZ2UgYWZ0ZXIKLQkJCQkgKiBvZmZzZXQuCi0JCQkJICovCi0JCQkJd2FudCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBucik7Ci0JCQkJaWYgKHdhbnQgPT0gMCkgewotCQkJCQlmb2xpb19wdXQoZm9saW8pOwotCQkJCQlyZXR2YWwgPSAtRUlPOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBXZSBoYXZlIHRoZSBmb2xpbywgY29weSBpdCB0byB1c2VyIHNwYWNlIGJ1ZmZlci4KLQkJCSAqLwotCQkJY29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIHdhbnQsIHRvKTsKLQkJCWZvbGlvX3B1dChmb2xpbyk7Ci0JCX0KLQkJb2Zmc2V0ICYjNDM7PSBjb3BpZWQ7Ci0JCXJldHZhbCAmIzQzOz0gY29waWVkOwotCQlpZiAoY29waWVkICE9IG5yICZhbXA7JmFtcDsgaW92X2l0ZXJfY291bnQodG8pKSB7Ci0JCQlpZiAoIXJldHZhbCkKLQkJCQlyZXR2YWwgPSAtRUZBVUxUOwotCQkJYnJlYWs7Ci0JCX0KLQkJaW5kZXggJiM0Mzs9IG9mZnNldCAmZ3Q7Jmd0OyBodWdlX3BhZ2Vfc2hpZnQoaCk7Ci0JCW9mZnNldCAmYW1wOz0gfmh1Z2VfcGFnZV9tYXNrKGgpOwotCX0KLQlpb2NiLSZndDtraV9wb3MgPSAoKGxvZmZfdClpbmRleCAmbHQ7Jmx0OyBodWdlX3BhZ2Vfc2hpZnQoaCkpICYjNDM7IG9mZnNldDsKLQlyZXR1cm4gcmV0dmFsOwotfQotCiBzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwKQEAgLTg4Myw2ICYjNDM7Nzc2LDE2IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCXJldHVybiBpbm9kZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7CiYjNDM7CXVuc2lnbmVkIGludCBvcmRlciA9IGh1Z2VfcGFnZV9vcmRlcihoc3RhdGUpOwomIzQzOwomIzQzOwlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7CiYjNDM7CWlub2RlLSZndDtpX2ZvcCA9ICZhbXA7aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9uczsKJiM0MzsJbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgb3JkZXIsIG9yZGVyKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogSHVnZXRsYmZzIGlzIG5vdCByZWNsYWltYWJsZTsgdGhlcmVmb3JlIGl0cyBpX21tYXBfcndzZW0gd2lsbCBuZXZlcgogICogYmUgdGFrZW4gZnJvbSByZWNsYWltIC0tIHVubGlrZSByZWd1bGFyIGZpbGVzeXN0ZW1zLiBUaGlzIG5lZWRzIGFuCkBAIC05MjYsOCAmIzQzOzgyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgbW9kZSwgZGV2KTsKIAkJCWJyZWFrOwogCQljYXNlIFNfSUZSRUc6Ci0JCQlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7Ci0JCQlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO2h1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7CiYjNDM7CQkJaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShpbm9kZSk7CiAJCQlicmVhazsKIAkJY2FzZSBTX0lGRElSOgogCQkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2h1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKQEAgLTEyMDYsNyAmIzQzOzExMDgsNyBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0gewotCS5yZWFkX2l0ZXIJCT0gaHVnZXRsYmZzX3JlYWRfaXRlciwKJiM0MzsJLnJlYWRfaXRlcgkJPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLAogCS5tbWFwCQkJPSBodWdldGxiZnNfZmlsZV9tbWFwLAogCS5mc3luYwkJCT0gbm9vcF9mc3luYywKIAkuZ2V0X3VubWFwcGVkX2FyZWEJPSBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAyYWJhZjk5MzIxZTkwZC4uMTg3ODY0MmU3NWVjNTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0xNjUsNyAmIzQzOzE2NSw3IEBAIGJvb2wgaHVnZXRsYmZzX3BhZ2VjYWNoZV9wcmVzZW50KHN0cnVjdCBoc3RhdGUgKmgsCiAJCQkJIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7c3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiBleHRlcm4gaW50IG1vdmFibGVfZ2lnYW50aWNfcGFnZXMgX19yZWFkX21vc3RseTsKIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7CkBAIC0yOTIsOCAmIzQzOzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKAotCQkJCQkJCXN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTU5NSw4ICYjNDM7NTk0LDggQEAgZW51bSBodWdldGxiX3BhZ2VfZmxhZ3MgewogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKQkJCQlcCiBzdGF0aWMgX19hbHdheXNfaW5saW5lCQkJCQkJXAotYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbykJCVwKLQl7CXZvaWQgKnByaXZhdGUgPSAmYW1wO2ZvbGlvLSZndDtwcml2YXRlOwkJXAomIzQzO2Jvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCVwKJiM0MzsJewljb25zdCB2b2lkICpwcml2YXRlID0gJmFtcDtmb2xpby0mZ3Q7cHJpdmF0ZTsJCVwKIAkJcmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7CQlcCiAJfQogCkBAIC02MTYsNyAmIzQzOzYxNSw3IEBAIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKQkJXAogI2Vsc2UKICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKQkJCQlcCiBzdGF0aWMgaW5saW5lIGJvb2wJCQkJCQlcCi1mb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbykJCVwKJiM0Mztmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykJCVwKIAl7IHJldHVybiAwOyB9CiAKICNkZWZpbmUgU0VUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpCQkJCVwKQEAgLTcyNyw3ICYjNDM7NzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCXJldHVybiBIVUdFVExCRlNfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzcG9vbDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIGZvbGlvLSZndDtfaHVnZXRsYl9zdWJwb29sOwogfQpAQCAtODU3LDcgJiM0Mzs4NTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNfaHVnZV9ib290bWVtX2FsbG9jKHZvaWQpCiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCVZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pOwogCXJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7CkBAIC0xMDcwLDExICYjNDM7MTA2OSw2IEBAIHZvaWQgaHVnZXRsYl9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTsKIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpOwogI2VuZGlmCiAKLS8qCi0gKiBDaGVjayBpZiBhIGdpdmVuIHJhdyBAcGFnZSBpbiBhIGh1Z2VwYWdlIGlzIEhXUE9JU09OLgotICovCi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXJldHVybiBQQUdFX01BU0sgJmFtcDsgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTsKQEAgLTEwODgsNyAmIzQzOzEwODIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBOVUxMOwogfQpAQCAtMTE1Nyw3ICYjNDM7MTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCmluZGV4IGIxOGMyYjJlN2QyYzY1Li5lZDVjMDgyOWZmNTY5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMzg3LDcgJiM0MzszODcsNiBAQCB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1tX2lkX3Q7CiAgKiBAX2h1Z2V0bGJfc3VicG9vbDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGIuaC4KICAqIEBfaHVnZXRsYl9jZ3JvdXA6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiX2Nncm91cC5oLgogICogQF9odWdldGxiX2Nncm91cF9yc3ZkOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYl9jZ3JvdXAuaC4KLSAqIEBfaHVnZXRsYl9od3BvaXNvbjogRG8gbm90IHVzZSBkaXJlY3RseSwgY2FsbCByYXdfaHdwX2xpc3RfaGVhZCgpLgogICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogICogQF91bnVzZWRfc2xhYl9vYmpfZXh0czogUGxhY2Vob2xkZXIgdG8gbWF0Y2ggb2JqX2V4dHMgaW4gc3RydWN0IHNsYWIuCiAgKgpAQCAtNDk5LDcgJiM0Mzs0OTgsNiBAQCBzdHJ1Y3QgZm9saW8gewogCQkJdm9pZCAqX2h1Z2V0bGJfc3VicG9vbDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cDsKIAkJCXZvaWQgKl9odWdldGxiX2Nncm91cF9yc3ZkOwotCQkJdm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247CiAJLyogcHJpdmF0ZTogdGhlIHVuaW9uIHdpdGggc3RydWN0IHBhZ2UgaXMgdHJhbnNpdGlvbmFsICovCiAJCX07CiAJCXN0cnVjdCBwYWdlIF9fcGFnZV8zOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA3MjIzZjZmNGUyYjQwMy4uOGU1N2MxMmE3MzAxYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC0xMDY4LDYgJiM0MzsxMDY4LDkgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogCXJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFCiYjNDM7Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwomIzQzOwogLyoKICAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzCiAgKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoCkBAIC0xMDc1LDE4ICYjNDM7MTA3OCwyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewotCWNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CWNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwomIzQzOwomIzQzOwlpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKJiM0MzsJCXJldHVybiBodWdldGxiX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpOwomIzQzOwlyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KIAotCWlmIChQYWdlSFdQb2lzb24ocGFnZSkpCi0JCXJldHVybiB0cnVlOwotCWZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKLQlyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSAmYW1wOyZhbXA7IFBhZ2VIV1BvaXNvbigmYW1wO2ZvbGlvLSZndDtwYWdlKTsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KJiM0MzsjZW5kaWYKIAotc3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHwKLQkgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpOwomIzQzOwkgICAgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpOwogfQogCiBib29sIGlzX2ZyZWVfYnVkZHlfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCmluZGV4IDJjMzcxOGQ1OTJkNmRkLi5iZDZhNjI3NWE0ZTkxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHsKIAlBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0gPSA5LAogCUFTX0tFUk5FTF9GSUxFID0gMTAsCS8qIG1hcHBpbmcgZm9yIGEgZmFrZSBrZXJuZWwgZmlsZSB0aGF0IHNob3VsZG4mIzM5O3QKIAkJCQkgICBhY2NvdW50IHVzYWdlIHRvIHVzZXIgY2dyb3VwcyAqLwomIzQzOwlBU19BVVRIT1JJVEFUSVZFID0gMTEsCS8qIElmIHdlIG1pc3MgaW4gdGhlIHBhZ2UgY2FjaGUsIGl0JiMzOTtzIGEgaG9sZSAqLwogCS8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovCiAJQVNfRk9MSU9fT1JERVJfQklUUyA9IDUsCiAJQVNfRk9MSU9fT1JERVJfTUlOID0gMTYsCkBAIC0zNDUsNiAmIzQzOzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlcwogCXJldHVybiB0ZXN0X2JpdChBU19XUklURUJBQ0tfTUFZX0RFQURMT0NLX09OX1JFQ0xBSU0sICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2F1dGhvcml0YXRpdmUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiYjNDM7ewomIzQzOwlzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19pc19hdXRob3JpdGF0aXZlKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsICZhbXA7bWFwcGluZy0mZ3Q7ZmxhZ3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWFwcGluZ19nZnBfbWFzayhjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAlyZXR1cm4gbWFwcGluZy0mZ3Q7Z2ZwX21hc2s7CkBAIC0zNzMsNyAmIzQzOzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaykKICAqIGFzc3VtcHRpb25zIGFib3V0IG1heGltdW0gb3JkZXIgaWYgVEhQIGFyZSBkaXNhYmxlZCwgYnV0IDggc2VlbXMgbGlrZQogICogYSBnb29kIG9yZGVyICh0aGF0JiMzOTtzIDFNQiBpZiB5b3UmIzM5O3JlIHVzaW5nIDRrQiBwYWdlcykKICAqLwotI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOyNpZmRlZiBDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTwogI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUglIUEFHRV9QTURfT1JERVIKICNlbHNlCiAjZGVmaW5lIFBSRUZFUlJFRF9NQVhfUEFHRUNBQ0hFX09SREVSCTgKQEAgLTM5NCw3ICYjNDM7NDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2dmcF9tYXNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptLCBnZnBfdCBtYXNrKQogICovCiBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuIDFVICZsdDsmbHQ7IChQQUdFX1NISUZUICYjNDM7IE1BWF9QQUdFQ0FDSEVfT1JERVIpOwogCXJldHVybiBQQUdFX1NJWkU7CiB9CkBAIC00MDUsMjkgJiM0Mzs0MTYsMjMgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbWFwcGluZ19tYXhfZm9saW9fc2l6ZV9zdXBwb3J0ZWQodm9pZCkKICAqIEBtaW46IE1pbmltdW0gZm9saW8gb3JkZXIgKGJldHdlZW4gMC1NQVhfUEFHRUNBQ0hFX09SREVSIGluY2x1c2l2ZSkuCiAgKiBAbWF4OiBNYXhpbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIEBtaW4tTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLgogICoKLSAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yIHRvCi0gKiBpbmRpY2F0ZSB3aGljaCBiYXNlIHNpemUgKG1pbikgYW5kIG1heGltdW0gc2l6ZSAobWF4KSBvZiBmb2xpbyB0aGUgVkZTCi0gKiBjYW4gdXNlIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZAotICogaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbCBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMKLSAqIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuCiYjNDM7ICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IKJiM0MzsgKiB0byBpbmRpY2F0ZSB3aGljaCBzaXplIGZvbGlvcyBjYW4gYmUgdXNlZCB0byBjYWNoZSB0aGUgY29udGVudHMgb2YKJiM0MzsgKiB0aGUgaW5vZGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbAomIzQzOyAqIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcyBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLgogICogRG8gbm90IHR1bmUgaXQgYmFzZWQgb24sIGVnLCBpX3NpemUuCiAgKgomIzQzOyAqIGh1Z2V0bGIgY2FsbHMgdGhpcyB3aXRoIG9yZGVycyBsYXJnZXIgdGhhbiBNQVhfUEFHRUNBQ0hFX09SREVSLgomIzQzOyAqIE5vcm1hbCBmaWxlc3lzdGVtcyBzaG91bGQgbm90IGRvIHRoaXMuCiYjNDM7ICoKICAqIENvbnRleHQ6IFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlIGlub2RlIGlzIGFjdGl2ZSBhcyBpdAogICogaXMgbm9uLWF0b21pYy4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCQkJIHVuc2lnbmVkIGludCBtaW4sCi0JCQkJCQkgdW5zaWduZWQgaW50IG1heCkKJiM0MzsJCXVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgpCiB7Ci0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSkKIAkJcmV0dXJuOwotCi0JaWYgKG1pbiAmZ3Q7IE1BWF9QQUdFQ0FDSEVfT1JERVIpCi0JCW1pbiA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7Ci0KLQlpZiAobWF4ICZndDsgTUFYX1BBR0VDQUNIRV9PUkRFUikKLQkJbWF4ID0gTUFYX1BBR0VDQUNIRV9PUkRFUjsKLQogCWlmIChtYXggJmx0OyBtaW4pCiAJCW1heCA9IG1pbjsKIApAQCAtNDYwLDcgJiM0Mzs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewotCWlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKQomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gKG1hcHBpbmctJmd0O2ZsYWdzICZhbXA7IEFTX0ZPTElPX09SREVSX01BWF9NQVNLKSAmZ3Q7Jmd0OyBBU19GT0xJT19PUkRFUl9NQVg7CiB9CkBAIC00NjgsNyAmIzQzOzQ3Myw3IEBAIG1hcHBpbmdfbWF4X2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewotCWlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKQomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gKG1hcHBpbmctJmd0O2ZsYWdzICZhbXA7IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSAmZ3Q7Jmd0OyBBU19GT0xJT19PUkRFUl9NSU47CiB9CkBAIC01MjQsNyAmIzQzOzUyOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2xhcmdlX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpCiAgKgogICogUmV0dXJuOiBUcnVlIGlmIFBNRC1zaXplZCBmb2xpb3MgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGZhbHNlLgogICovCi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7I2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPCiBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ19wbWRfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAkvKiBBU19GT0xJT19PUkRFUiBpcyBvbmx5IHJlYXNvbmFibGUgZm9yIHBhZ2VjYWNoZSBmb2xpb3MgKi8KZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDllMGNhNDgyNDkwNTRmLi45OTJlN2FlMGIyYmYyOSAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnCkBAIC04NDMsMTEgJiM0Mzs4NDMsMTUgQEAgY29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPCiBjb25maWcgTU1fSUQKIAlkZWZfYm9vbCBuCiAKJiM0Mztjb25maWcgRklMRU1BUF9MQVJHRV9GT0xJTwomIzQzOwlkZWZfYm9vbCBuCiYjNDM7CiBtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFCiAJYm9vbCAmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQmIzM0OwogCWRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFICZhbXA7JmFtcDsgIVBSRUVNUFRfUlQKIAlzZWxlY3QgQ09NUEFDVElPTgogCXNlbGVjdCBYQVJSQVlfTVVMVEkKJiM0MzsJc2VsZWN0IEZJTEVNQVBfTEFSR0VfRk9MSU8KIAlzZWxlY3QgTU1fSUQKIAloZWxwCiAJICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNThlYjlkMjQwNjQzNDguLmY2NjJjZGE4MWRjNzRjIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC0yNDgzLDYgJiM0MzsyNDgzLDggQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9nZXRfcmVhZF9iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAogCQlpZiAoIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSkKIAkJCWJyZWFrOwomIzQzOwkJaWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKQomIzQzOwkJCWJyZWFrOwogCQlpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKQogCQkJYnJlYWs7CiAJCWlmIChmb2xpb190ZXN0X3JlYWRhaGVhZChmb2xpbykpCkBAIC0yNjk1LDYgJiM0MzsyNjk3LDggQEAgc3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCwKIAlpZiAoIWZvbGlvX2JhdGNoX2NvdW50KGZiYXRjaCkpIHsKIAkJREVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlscCwgJmFtcDtmaWxwLSZndDtmX3JhLCBtYXBwaW5nLCBpbmRleCk7CiAKJiM0MzsJCWlmIChtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUobWFwcGluZykpCiYjNDM7CQkJcmV0dXJuIDA7CiAJCWlmIChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX05PSU8pCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfTk9XQUlUKQpAQCAtMjc0OSw2ICYjNDM7Mjc1MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAocG9zMSAmZ3Q7Jmd0OyBzaGlmdCA9PSBwb3MyICZndDsmZ3Q7IHNoaWZ0KTsKIH0KIAomIzQzO3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsCiYjNDM7CQlzaXplX3QgYnl0ZXMpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7CiYjNDM7CXNpemVfdCBzYWZlX2J5dGVzOwomIzQzOwomIzQzOwlpZiAoIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKQomIzQzOwkJcmV0dXJuIGJ5dGVzOwomIzQzOwlpZiAoaXNfcGFnZV9od3BvaXNvbihwYWdlKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovCiYjNDM7CXNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTsKJiM0MzsJcGFnZSYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CS8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqLwomIzQzOwlmb3IgKDsgc2FmZV9ieXRlcyAmbHQ7IGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KQomIzQzOwkJaWYgKGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CXJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkKQEAgLTI4MjgsNiAmIzQzOzI4NTUsMjIgQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCQlnb3RvIHB1dF9mb2xpb3M7CiAJCWVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLSZndDtraV9wb3MgJiM0MzsgaXRlci0mZ3Q7Y291bnQpOwogCiYjNDM7CQlpZiAoIWZvbGlvX2JhdGNoX2NvdW50KCZhbXA7ZmJhdGNoKSkgewomIzQzOwkJCXNpemVfdCBmc2l6ZSA9IG1hcHBpbmdfbWluX2ZvbGlvX25yYnl0ZXMobWFwcGluZyk7CiYjNDM7CQkJc2l6ZV90IG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcyAmYW1wOyAoZnNpemUgLSAxKTsKJiM0MzsJCQlzaXplX3QgYnl0ZXMgPSBtaW5fdChsb2ZmX3QsIGVuZF9vZmZzZXQgLSBpb2NiLSZndDtraV9wb3MsCiYjNDM7CQkJCQkgICAgIGZzaXplIC0gb2Zmc2V0KTsKJiM0MzsJCQlzaXplX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhieXRlcywgaXRlcik7CiYjNDM7CiYjNDM7CQkJYWxyZWFkeV9yZWFkICYjNDM7PSBjb3BpZWQ7CiYjNDM7CQkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSBjb3BpZWQ7CiYjNDM7CQkJbGFzdF9wb3MgPSBpb2NiLSZndDtraV9wb3M7CiYjNDM7CiYjNDM7CQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKQomIzQzOwkJCQllcnJvciA9IC1FRkFVTFQ7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qCiAJCSAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24mIzM5O3Qgd2FudCB0byBiZSB0b3VjaGluZyBhbnkKIAkJICogY2FjaGVsaW5lcyB0aGF0IG1pZ2h0IGJlIGNvbnRlbmRlZDoKQEAgLTI4NjIsMTQgJiM0MzsyOTA1LDE4IEBAIHNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCQkJaWYgKHdyaXRhYmx5X21hcHBlZCkKIAkJCQlmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pOwogCi0JCQljb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgYnl0ZXMsIGl0ZXIpOwomIzQzOwkJCWNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7CiYjNDM7CQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKQomIzQzOwkJCQllcnJvciA9IC1FSU87CiYjNDM7CQkJY29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGNvcGllZCwgaXRlcik7CiAKIAkJCWFscmVhZHlfcmVhZCAmIzQzOz0gY29waWVkOwogCQkJaW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSBjb3BpZWQ7CiAJCQlsYXN0X3BvcyA9IGlvY2ItJmd0O2tpX3BvczsKIAogCQkJaWYgKGNvcGllZCAmbHQ7IGJ5dGVzKSB7Ci0JCQkJZXJyb3IgPSAtRUZBVUxUOwomIzQzOwkJCQlpZiAoIWVycm9yKQomIzQzOwkJCQkJZXJyb3IgPSAtRUZBVUxUOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDQxMyw3ICYjNDM7NDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpCiYjNDM7CWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlYy4uY2M4ZDk4Mzk5OTEzZTMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTE3NzUsNyAmIzQzOzE3NzUsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKICAqIHN0YWJsZS4gIER1ZSB0byBsb2NraW5nIG9yZGVyLCB3ZSBjYW4gb25seSB0cnlsb2NrX3dyaXRlLiAgSWYgd2UgY2FuCiAgKiBub3QgZ2V0IHRoZSBsb2NrLCBzaW1wbHkgcmV0dXJuIE5VTEwgdG8gY2FsbGVyLgogICovCi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pOwogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA1MTUwOGE1NWM0MDU1ZS4uOWU0ZWU1ZDkzOTA1MDYgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtNDMsNiAmIzQzOzQzLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9zaWduYWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC90YXNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2hhc2h0YWJsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tzbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JtYXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKQEAgLTE4MDgsMzMgJiM0MzsxODA5LDI2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1mX2RheF9raWxsX3Byb2NzKTsKIAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIAotLyoKLSAqIFN0cnVjdCByYXdfaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCAmIzM0O3JhdyBlcnJvciBwYWdlJiMzNDssCi0gKiBjb25zdHJ1Y3Rpbmcgc2luZ2x5IGxpbmtlZCBsaXN0IGZyb20gLSZndDtfaHVnZXRsYl9od3BvaXNvbiBmaWVsZCBvZiBmb2xpby4KLSAqLwotc3RydWN0IHJhd19od3BfcGFnZSB7Ci0Jc3RydWN0IGxsaXN0X25vZGUgbm9kZTsKJiM0MzsvKiBQcm90ZWN0cyBodWdldGxiX2h3cG9pc29uIGxpc3QgKi8KJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGh0bGJfaHdwb2lzb25fbG9jayk7CiYjNDM7c3RhdGljIERFRklORV9IQVNIVEFCTEUoaHRsYl9od3BvaXNvbiwgNSk7CiYjNDM7CiYjNDM7c3RydWN0IGh3cF9wYWdlIHsKJiM0MzsJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfbGlzdF9oZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pCi17Ci0JcmV0dXJuIChzdHJ1Y3QgbGxpc3RfaGVhZCAqKSZhbXA7Zm9saW8tJmd0O19odWdldGxiX2h3cG9pc29uOwotfQotCi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQomIzQzOy8qCiYjNDM7ICogQ2hlY2sgaWYgYSBnaXZlbiBAcGFnZSBpbiBhIGh1Z2V0bGIgZm9saW8gaXMgSFdQT0lTT04uCiYjNDM7ICovCiYjNDM7Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDsKLQlzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwOwotCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwomIzQzOwljb25zdCBzdHJ1Y3QgaHdwX3BhZ2UgKnA7CiAJYm9vbCByZXQgPSBmYWxzZTsKIAogCWlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkKLQkJcmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTsKLQogCS8qCiAJICogV2hlbiBSYXdId3BVbnJlbGlhYmxlIGlzIHNldCwga2VybmVsIGxvc3QgdHJhY2sgb2Ygd2hpY2ggc3VicGFnZXMKIAkgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuCkBAIC0xODQyLDM2ICYjNDM7MTgzNiwzOSBAQCBib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkKIAkJcmV0dXJuIHRydWU7CiAKLQltdXRleF9sb2NrKCZhbXA7bWZfbXV0ZXgpOwomIzQzOwlzcGluX2xvY2soJmFtcDtodGxiX2h3cG9pc29uX2xvY2spOwogCi0JcmF3X2h3cF9oZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pOwotCWxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC0mZ3Q7Zmlyc3QsIG5vZGUpIHsKJiM0MzsJaGFzaF9mb3JfZWFjaF9wb3NzaWJsZShodGxiX2h3cG9pc29uLCBwLCBub2RlLCAodW5zaWduZWQgbG9uZylwYWdlKSB7CiAJCWlmIChwYWdlID09IHAtJmd0O3BhZ2UpIHsKIAkJCXJldCA9IHRydWU7CiAJCQlicmVhazsKIAkJfQogCX0KIAotCW11dGV4X3VubG9jaygmYW1wO21mX211dGV4KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtodGxiX2h3cG9pc29uX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX2h3cChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIG1vdmVfZmxhZykKIHsKLQlzdHJ1Y3QgbGxpc3Rfbm9kZSAqaGVhZDsKLQlzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDsKJiM0MzsJaW50IGI7CiYjNDM7CXN0cnVjdCBod3BfcGFnZSAqcDsKJiM0MzsJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKIAl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKIAotCWhlYWQgPSBsbGlzdF9kZWxfYWxsKHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKSk7Ci0JbGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuZXh0LCBoZWFkLCBub2RlKSB7CiYjNDM7CWhhc2hfZm9yX2VhY2hfc2FmZShodGxiX2h3cG9pc29uLCBiLCB0bXAsIHAsIG5vZGUpIHsKJiM0MzsJCWlmIChwYWdlX2ZvbGlvKHAtJmd0O3BhZ2UpICE9IGZvbGlvKQomIzQzOwkJCWNvbnRpbnVlOwogCQlpZiAobW92ZV9mbGFnKQogCQkJU2V0UGFnZUhXUG9pc29uKHAtJmd0O3BhZ2UpOwogCQllbHNlCiAJCQludW1fcG9pc29uZWRfcGFnZXNfc3ViKHBhZ2VfdG9fcGZuKHAtJmd0O3BhZ2UpLCAxKTsKJiM0MzsJCWhhc2hfZGVsKCZhbXA7cC0mZ3Q7bm9kZSk7CiAJCWtmcmVlKHApOwogCQljb3VudCYjNDM7JiM0Mzs7CiAJfQomIzQzOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTg4Nyw5ICYjNDM7MTg4NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKQogICovCiBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKQogewotCXN0cnVjdCBsbGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCByYXdfaHdwX3BhZ2UgKnJhd19od3A7Ci0Jc3RydWN0IHJhd19od3BfcGFnZSAqcDsKJiM0MzsJc3RydWN0IGh3cF9wYWdlICpwOwogCWludCByZXQgPSBmb2xpb190ZXN0X3NldF9od3BvaXNvbihmb2xpbykgPyBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRCA6IDA7CiAKIAkvKgpAQCAtMTg5OSwxNiAmIzQzOzE4OTQsMTggQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAkgKi8KIAlpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpCiAJCXJldHVybiBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRDsKLQloZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pOwotCWxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIGhlYWQtJmd0O2ZpcnN0LCBub2RlKSB7Ci0JCWlmIChwLSZndDtwYWdlID09IHBhZ2UpCiYjNDM7CXNwaW5fbG9jaygmYW1wO2h0bGJfaHdwb2lzb25fbG9jayk7CiYjNDM7CWhhc2hfZm9yX2VhY2hfcG9zc2libGUoaHRsYl9od3BvaXNvbiwgcCwgbm9kZSwgKHVuc2lnbmVkIGxvbmcpcGFnZSkgewomIzQzOwkJaWYgKHAtJmd0O3BhZ2UgPT0gcGFnZSkgewomIzQzOwkJCXNwaW5fdW5sb2NrKCZhbXA7aHRsYl9od3BvaXNvbl9sb2NrKTsKIAkJCXJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEOwomIzQzOwkJfQogCX0KIAotCXJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTsKLQlpZiAocmF3X2h3cCkgewotCQlyYXdfaHdwLSZndDtwYWdlID0gcGFnZTsKLQkJbGxpc3RfYWRkKCZhbXA7cmF3X2h3cC0mZ3Q7bm9kZSwgaGVhZCk7CiYjNDM7CXAgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHdwX3BhZ2UsIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAocCkgewomIzQzOwkJcC0mZ3Q7cGFnZSA9IHBhZ2U7CiYjNDM7CQloYXNoX2FkZChodGxiX2h3cG9pc29uLCAmYW1wO3AtJmd0O25vZGUsICh1bnNpZ25lZCBsb25nKXBhZ2UpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbApAQCAtMTkyMCwxMyAmIzQzOzE5MTcsMTUgQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAkJICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIHJhd19od3BfcGFnZSBpcyBub3QKIAkJICogdXNlZCBhbnkgbW9yZSwgc28gZnJlZSBpdC4KIAkJICovCi0JCV9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7CiYjNDM7CQlfX2ZvbGlvX2ZyZWVfaHdwKGZvbGlvLCBmYWxzZSk7CiAJfQomIzQzOwlzcGluX3VubG9jaygmYW1wO2h0bGJfaHdwb2lzb25fbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKQogewomIzQzOwl1bnNpZ25lZCBsb25nIGNvdW50OwogCS8qCiAJICogaHVnZXRsYl92bWVtbWFwX29wdGltaXplZCBodWdlcGFnZXMgY2FuJiMzOTt0IGJlIGZyZWVkIGJlY2F1c2Ugc3RydWN0CiAJICogcGFnZXMgZm9yIHRhaWwgcGFnZXMgYXJlIHJlcXVpcmVkIGJ1dCB0aGV5IGRvbiYjMzk7dCBleGlzdC4KQEAgLTE5NDEsNyAmIzQzOzE5NDAsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKQogCWlmIChmb2xpb190ZXN0X2h1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlKGZvbGlvKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gX19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIG1vdmVfZmxhZyk7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2h0bGJfaHdwb2lzb25fbG9jayk7CiYjNDM7CWNvdW50ID0gX19mb2xpb19mcmVlX2h3cChmb2xpbywgbW92ZV9mbGFnKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtodGxiX2h3cG9pc29uX2xvY2spOwomIzQzOwlyZXR1cm4gY291bnQ7CiB9CiAKIHZvaWQgZm9saW9fY2xlYXJfaHVnZXRsYl9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTE4MTMsNyAmIzQzOzE4MTMsNyBAQCBzdGF0aWMgdm9pZCBkb19taWdyYXRlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiAJCWlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSkKIAkJCXBmbiA9IGZvbGlvX3Bmbihmb2xpbykgJiM0MzsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTsKIAotCQlpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiYjNDM7CQlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKIAkJCS8qCiAJCQkgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbm5vdCBoYW5kbGUgbGFyZ2UgZm9saW9zCiAJCQkgKiBpbiBhbGwgY2FzZXMgeWV0LgpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggYjUxZjgzYzk3MGJiMzcuLjQ5MmM5YmVmMzYyMDc0IDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTMyNDAsNyAmIzQzOzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiYjNDM7CWlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkgewogCQlmb2xpb191bmxvY2soZm9saW8pOwogCQlmb2xpb19wdXQoZm9saW8pOwogCQlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMzVjM2JiMTVhZTk2YTMuLjcwZTU0YWNlMGU3NDFjIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTA4Niw3ICYjNDM7MTA4Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCwKIAkJaWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSkKIAkJCWdvdG8ga2VlcDsKIAotCQlpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7CiYjNDM7CQlpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHsKIAkJCS8qCiAJCQkgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbiYjMzk7dCBoYW5kbGUgbGFyZ2UKIAkJCSAqIGZvbGlvLCBqdXN0IHNraXAgaXQuIG1lbW9yeV9mYWlsdXJlKCkgd2lsbAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk1OAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgaHVnZXRsYmZzIFJlYWQgSW1wbGVtZW50YXRpb24gYW5kIE1lbW9yeS1GYWlsdXJlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2lnbmlmaWNhbnRseSBpbXBhY3RzIGhvdyBodWdldGxiZnMgcmVhZHMgYXJlIGhhbmRsZWQsIGFsb25nIHdpdGggaG93IG1lbW9yeSBmYWlsdXJlcyBhcmUgbWFuYWdlZC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgcmVtb3ZpbmcgYGh1Z2V0bGJmc19yZWFkX2l0ZXJgIGFsdG9nZXRoZXIsIHJlcGxhY2luZyBpdCB3aXRoIHRoZSBtb3JlIGdlbmVyYWwgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLiBUaGF0JiMzOTtzIGEgcHJldHR5IHN1YnN0YW50aWFsIGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBJIGFsc28gc2VlIHRoYXQgaXQgaW50cm9kdWNlcyBhIGBGSUxFTUFQX0xBUkdFX0ZPTElPYCBjb25maWcgb3B0aW9uLCB3aGljaCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBgSFVHRVRMQl9QQUdFYCBvciBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFyZSBzZXQuIEludGVyZXN0aW5nLiBBbmQgaXQgYWxzbyBzZWVtcyB0byBiZSBtb2RpZnlpbmcgYGZpbGVtYXBfcmVhZGAgdG8gc3BlY2lmaWNhbGx5IGFjY291bnQgZm9yIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2VzIHVzaW5nIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLCBhbG9uZyB3aXRoIGNoYW5naW5nIGBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZWAgdG8gYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAgYW5kIHVzaW5nIGEgaGFzaCB0YWJsZS4KCkZpcnN0IHRoaW5ncyBmaXJzdDogZG9lcyB0aGlzIGV2ZW4gKndvcmsqPyBZZXMsIHRoaXMgZGVmaW5pdGVseSB0b3VjaGVzIG9uIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGh1Z2V0bGJmcyByZWFkIHBhdGhzLiBBbmQgSSBjYW4gdGVsbCB0aGlzIHBhdGNoIGlzIGNlcnRhaW5seSB3b3J0aCBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgc29tZSBjcnVjaWFsIHN5bWJvbHMgdG8gZm9jdXMgb24uIGBmaWxlbWFwX3JlYWRgIGxvb2tzIGxpa2UgYSBob3QgcGF0aCwgYnV0IGl0JiMzOTtzIGJlZW4gY2hhbmdlZCBoZXJlLCBzbyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBnb29kIG9uZS4gYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAgc2VlbXMgbGlrZSBhbm90aGVyIHN0cm9uZyBjYW5kaWRhdGUuIEFuZCBzaW5jZSBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBpbiBgbW0vZmlsZW1hcC5jYCwgaXQmIzM5O3Mgd29ydGggdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBvdGhlciBmdW5jdGlvbnMgaXQgaW50ZXJhY3RzIHdpdGguIEFkZGl0aW9uYWxseSwgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgIGFuZCBgZm9saW9fZnJlZV9yYXdfaHdwYCBhcmUgYWxzbyBzdGF0aWMsIHNvIEkgd2lsbCBpbnZlc3RpZ2F0ZSB0aGVzZSB0b28uCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGBtbS9maWxlbWFwLmNgIHRvIHNlZSBob3cgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgaXMgdXNlZC4gSSBzZWUgdGhhdCBpdCBpcyBjYWxsZWQgYnkgYGZpbGVtYXBfcmVhZGAsIHdoaWNoIGlzIGV4cGVjdGVkLiBJcyBpdCB1c2VkIGJ5IGFueSBvdGhlciBmdW5jdGlvbnM/IEFsc28gaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBJIG5vdGljZSBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gIGFuZCBgX19mb2xpb19mcmVlX2h3cGAuIEFsbCBvZiB0aGVzZSBjb3VsZCBiZSB0YXJnZXRzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBDT05GSUdfSFVHRVRMQl9QQUdFYCwgYENPTkZJR19NRU1PUllfRkFJTFVSRWAsIGFuZCBgQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU9gICh3aGljaCBpcyBlbmFibGVkIGJ5IHRoZSBmaXJzdCB0d28pLgoKQWxyaWdodCwgSSYjMzk7bGwgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBnZXQgdGhlIGV4YWN0IGZ1bmN0aW9uIG5hbWVzIGFuZCBnZXQgYSBjbGVhcmVyIHZpZXcgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Nj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MS0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDcyOmJvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNzMtXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA3OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDgzLVx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDg0Olx0XHRyZXR1cm4gaHVnZXRsYl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwODUtXHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwODctI2Vsc2VcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwODg6c3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA4OS1cdFx0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODE2PXN0cnVjdCBod3BfcGFnZSB7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODIzLSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxODI0OmJvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODI1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQzMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTWVtb3J5IENvcnJ1cHRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUtaW5kdWNlZCBtZW1vcnkgY29ycnVwdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHRoaXMgYXQgdGhlIGZpbGVtYXAgbGV2ZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG1tL2ZpbGVtYXAuY2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBiZWNhdXNlIGZpbGVtYXBzIGFyZSBmdW5kYW1lbnRhbGx5IGxpbmtlZCB0byBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHBhZ2UtYmFja2VkIGZpbGVzIGFuZCwgY3JpdGljYWxseSwgaG93IGl0IGhhbmRsZXMgSS9PLiBHaXZlbiB0aGUga2V5d29yZCAmIzM0O2FkanVzdF9yYW5nZV9od3BvaXNvbiYjMzQ7LCBteSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiwgb3Igb25lIGNsb3NlbHkgcmVsYXRlZCB0byBpdCwgd2lsbCBiZSBjcml0aWNhbCBpbiBtYXJraW5nIGEgcmVnaW9uIG9mIGEgZmlsZW1hcCBhcyBjb3JydXB0ZWQgYW5kIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgZnVydGhlciBhY2Nlc3Mgb3IgcHJvcGFnYXRpbmcgdGhlIGVycm9yIHNpZ25hbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGVyZSB0aGUga2VybmVsJiMzOTtzIHRha2luZyBhY3Rpb24gaGVyZS4gSSYjMzk7bSBob3BpbmcgSSBjYW4gcGllY2UgdG9nZXRoZXIgdGhlIGNhbGxpbmcgY29udGV4dCBhbmQgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gZ2V0IGEgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGUgc3lzdGVtIHJlc3BvbmRzIHRvIHRoaXMgc3BlY2lmaWMgdHlwZSBvZiBmYXVsdC4gTGV0JiMzOTtzIGdldCBjcmFja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZGp1c3RfcmFuZ2VfaHdwb2lzb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jPTI3NDk9c3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMjc1NS1cbm1tL2ZpbGVtYXAuYzoyNzU2OnN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG5tbS9maWxlbWFwLmMtMjc1Ny1cdFx0c2l6ZV90IGJ5dGVzKVxuLS1cbm1tL2ZpbGVtYXAuYz0yODA0PXNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0yOTA3LVxubW0vZmlsZW1hcC5jOjI5MDg6XHRcdFx0Y29waWVkID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIGJ5dGVzKTtcbm1tL2ZpbGVtYXAuYy0yOTA5LVx0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTA3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIEh1Z2VUTEIgSGFyZHdhcmUgUG9pc29uaW5nICZhbXA7IEZvbGlvIEZyZWVpbmcqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGhhcmR3YXJlIHBvaXNvbmluZyB3aXRoaW4gdGhlIEh1Z2VUTEIgc3lzdGVtLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB3ZSByZWFjdCB0byBoYXJkd2FyZS1pbmR1Y2VkIGVycm9ycy4gU28sIEkgbmVlZCB0byBjaGVjayBgbW0vbWVtb3J5LWZhaWx1cmUuY2AuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgYW5kLCB2ZXJ5IGltcG9ydGFudGx5LCBob3cgdGhhdCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBgX19mb2xpb19mcmVlX2h3cGAuIFRoaXMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byBob3cgd2UgZGV0ZWN0IHRoZSBjb3JydXB0aW9uIGFuZCwgY3J1Y2lhbGx5LCBob3cgd2UgaGFuZGxlIGZyZWVpbmcgdGhlIGZvbGlvIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycnVwdGVkIHBhZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nIGFuZCBpbnRlcmFjdGlvbnMgaGVyZSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGZ1cnRoZXIgY29ycnVwdGlvbiBhZnRlciBhIGhhcmR3YXJlIGZhdWx0LiBNeSBtYWluIG9iamVjdGl2ZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBlcnJvciBoYW5kbGluZyB3b3JrZmxvdyB3aGVuIGRlYWxpbmcgd2l0aCBwb2lzb25lZCBIdWdlVExCIHBhZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfdXBkYXRlX2h3cG9pc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MTg1Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg4NC0gKi9cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg4NTpzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODg2LXtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE5NTk9c3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTk4OS1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTk5MDpcdHJjID0gaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oZm9saW8sIHBhZ2UpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTkxLVx0aWYgKHJjIFx1MDAzZT0gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQwOQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gYSBQb3RlbnRpYWwgTWVtb3J5IElzc3VlKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBzdXNwZWN0ZWQgbWVtb3J5IGZhaWx1cmUgb24gb3VyIGhhbmRzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBkaXJlY3RseSBpbnRvIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGFuZCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgdGhlIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgYF9fZm9saW9fZnJlZV9od3BgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggaGFyZHdhcmUgcGFnZSB0YWJsZSBlbnRyaWVzLCBhbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZXJyb3IsIGl0IHNlZW1zIGxpa2UgYSBsaWtlbHkgcG9pbnQgd2hlcmUgdGhlIHByb2JsZW0gbWlnaHQgYmUgb3JpZ2luYXRpbmcgb3IgYmVpbmcgcHJvcGFnYXRlZC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8gZGF0YSBzdHJ1Y3R1cmUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHBvdGVudGlhbCBoYXJkd2FyZSBlcnJvcnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19mb2xpb19mcmVlX2h3cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jPTE4MjQ9Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODUyLVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxODUzOnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NTQte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTg4NT1zdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkxOS1cdFx0ICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE5MjA6XHRcdF9fZm9saW9fZnJlZV9od3AoZm9saW8sIGZhbHNlKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTkyMS1cdH1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE5MjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTk0My1cdHNwaW5fbG9jayhcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxOTQ0Olx0Y291bnQgPSBfX2ZvbGlvX2ZyZWVfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTQ1LVx0c3Bpbl91bmxvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NTMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBodWdldGxiZnMgaW5vZGUgaW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgIGFuZCBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgZG9lcyBleGFjdGx5LiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHdoZXJlIEkmIzM5O2QgZ28gaW1tZWRpYXRlbHksIGlzIHRvIGNoZWNrIGBmcy9odWdldGxiZnMvaW5vZGUuY2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyByZWd1bGFyIGlub2RlcyBhcmUgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBodWdldGxiZnMgZmlsZXN5c3RlbS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhpbmdzIGxpa2U6CgoqICAgSG93IGFyZSB0aGUgaW5vZGUmIzM5O3MgZGF0YSBzdHJ1Y3R1cmVzIHBvcHVsYXRlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgdmZzX2lub2RlIGRhdGEsIG9yIGlzIHRoZXJlIGh1Z2V0bGJmcy1zcGVjaWZpYyBtZXRhZGF0YSB0b28/CiogICBXaGF0IGhhcHBlbnMgdG8gYmxvY2sgYWxsb2NhdGlvbiwgb3IgaXMgaXQgcGFnZS1iYXNlZCBnaXZlbiB0aGUgbmF0dXJlIG9mIGh1Z2UgcGFnZXM/CiogICBBbnkgaG9va3MgZm9yIHNlY3VyaXR5IGF0dHJpYnV0ZXMsIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIG9yIG90aGVyIHJlbGV2YW50IGZlYXR1cmVzPwoKSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGltcGxlbWVudGF0aW9uIGRldGFpbHMgdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0sIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBpbml0aWFsaXphdGlvbiBmbG93IGlzIGNydWNpYWwgdG8gdGhlIG92ZXJhbGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz03NTc9c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzc4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Nzc5OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc4MC17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzk3PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MzEtXHRcdGNhc2UgU19JRlJFRzpcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgzMjpcdFx0XHRodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlKGlub2RlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMy1cdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0ODEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdldGxiZnMgUmVhZC9NZW1vcnkgRmFpbHVyZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBpbXByb3ZpbmcgaG93IHdlIGhhbmRsZSByZWFkIGFuZCBtZW1vcnkgZmFpbHVyZXMgd2l0aGluIGh1Z2V0bGIgcGFnZXMuIE15IGluaXRpYWwgc2NhbiBmb2N1c2VzIG9uIGEgZmV3IGtleSBzeW1ib2xzOiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGFkanVzdF9yYW5nZV9od3BvaXNvbmAsIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAsIGBfX2ZvbGlvX2ZyZWVfaHdwYCwgYW5kIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYC4gVGhlc2Ugc2VlbSBjZW50cmFsIHRvIHRoZSBjb3JlIGxvZ2ljLCBzbyBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvbiBob3cgdGhlIGNoYW5nZXMgaW1wYWN0IHRoZW0gc3BlY2lmaWNhbGx5LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGUgdGV4dCBsaXN0cyBgSFVHRVRMQkZTYCwgYEhVR0VUTEJfUEFHRWAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBBaCwgYnV0IHdhaXQgYSBtaW51dGXigKYgSSBzZWUgYEZJTEVNQVBfTEFSR0VfRk9MSU9gIGlzIGEgKnNpbGVudCogY29uZmlnLCBzZWxlY3RlZCBieSBgSFVHRVRMQl9QQUdFYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gSXQgbWVhbnMgd2Ugb25seSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGBIVUdFVExCRlNgLCBgSFVHRVRMQl9QQUdFYCwgYW5kIGBNRU1PUllfRkFJTFVSRWAuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhpcywgYnV0IGl0IHNlZW1zIGNvcnJlY3QuIFdlIGNhbiB2ZXJpZnkgaWYgdGhvc2UgYXJlIHRoZSBhcHByb3ByaWF0ZSBjb25maWdzIGZvciB0aGlzIG5ldyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2Vcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTYzLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDs2NGtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjktXHRib29sIFwmIzM0OzI1NmtCXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzFNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cdGJvb2wgXCYjMzQ7MU1CXCYjMzQ7XG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3NTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNE1CXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVx0Ym9vbCBcJiMzNDs0TUJcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTc4LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cdGJvb2wgXCYjMzQ7NjRNQlwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNzctXG5mcy9LY29uZmlnOjI3ODpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc5LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4tLVxuZnMvS2NvbmZpZy0yODMtXG5mcy9LY29uZmlnOjI4NDpjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXG5mcy9LY29uZmlnLTI4NS1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy03MDgtXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNzEwLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcwNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBhbmQgQ29ubmVjdGluZyBIV1BvaXNvbiBGdW5jdGlvbnMgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZXNlIGhhcmR3YXJlIHBvaXNvbiBmdW5jdGlvbnMgYXJlIHdpcmVkIHRvZ2V0aGVyLCBzcGVjaWZpY2FsbHkgd2l0aCBgSFVHRVRMQkZTYCBhbmQgYE1FTU9SWV9GQUlMVVJFYCBlbmFibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbnMuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5IG9mIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgZmlsZW1hcF9yZWFkYCwgd2hpY2ggaXMgdGhlIGdlbmVyaWMgcmVhZCBpdGVyYXRvci4gYGZpbGVtYXBfcmVhZGAgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIExvb2tpbmcgYXQgdGhlIGBodWdldGxiZnNgIGZpbGUgb3BlcmF0aW9ucywgdGhlIGByZWFkX2l0ZXJgIGZ1bmN0aW9uIGlzLCByaWdodCBub3csIGp1c3QgYGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXJgLiBTbywgdGhhdCBjb25maXJtcyB0aGUgZmlyc3QgcGFydC4gYGFkanVzdF9yYW5nZV9od3BvaXNvbmAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOZXh0LCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYC4gVGhpcyBvbmUgaXMgY2FsbGVkIGJ5IGBpc19wYWdlX2h3cG9pc29uYCBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVkIGZyb20gYGFkanVzdF9yYW5nZV9od3BvaXNvbmAuIEdvb2QsIHRoZSBjb25uZWN0aW9uIGlzIHRoZXJlLgoKTm93IGZvciBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgZnJvbSBgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb25gIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgZnJvbSBgbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYmAuCgpBbmQgZmluYWxseSwgYF9fZm9saW9fZnJlZV9od3BgLiBUaGlzIG9uZSBnZXRzIGNhbGxlZCBmcm9tIGJvdGggYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCBhbmQgYGZvbGlvX2ZyZWVfcmF3X2h3cGAuIGBmb2xpb19mcmVlX3Jhd19od3BgIGlzIGNhbGxlZCBmcm9tIGBmcmVlX2h1Z2VfZm9saW9gIGluIGBtbS9odWdldGxiLmNgLgoKT2theSwgYWxsIHRob3NlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGFuZCBzZWVtIHRvIGJlIGNvbm5lY3RlZCBhcyBleHBlY3RlZC4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTttIGNsZWFyIG9uIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMsIEkgbmVlZCB0byBrZWVwIGEgZmV3IGluIG1pbmQ6IGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgYW5kIGBfX2ZvbGlvX2ZyZWVfaHdwYCwgYXMgd2VsbCBhcyBgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZWAuCgpBaCwgcmlnaHQsIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIHN0YXRpYyB3aXRoaW4gYG1tL2ZpbGVtYXAuY2AuIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGlzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCBpcyBzdGF0aWMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGFzIHdlbGwsIGFzIGlzIGBfX2ZvbGlvX2ZyZWVfaHdwYC4gRmluYWxseSwgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgIGlzIHN0YXRpYyBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLgoKTGV0IG1lIGFkZCBvbmUgbW9yZSB0aGluZyB0byB0aGUgbGlzdCB0byBjb25maXJtIC0gSSBzaG91bGQgY2hlY2sgaWYgYEZJTEVNQVBfTEFSR0VfRk9MSU9gIGlzIGEgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZJTEVNQVBfTEFSR0VfRk9MSU8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04NDUtXG5tbS9LY29uZmlnOjg0Njpjb25maWcgRklMRU1BUF9MQVJHRV9GT0xJT1xubW0vS2NvbmZpZy04NDctXHRkZWZfYm9vbCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTE5CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBhcyBteSBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIGBGSUxFTUFQX0xBUkdFX0ZPTElPYCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgRklMRU1BUF9MQVJHRV9GT0xJT2AgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYnV0IGl0JiMzOTtzIG5vdCBkaXJlY3RseSBzZWxlY3RhYmxlIGJ5IHRoZSB1c2VyLCByaWdodD8gSXQmIzM5O3MgbW9yZSBvZiBhbiAqaW1wbGljaXQqIGNob2ljZSBiYXNlZCBvbiBvdGhlciBzZXR0aW5ncy4gSXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IHRoZSBlbmFibGluZyBvZiBgSFVHRVRMQl9QQUdFYCBhbmQsIGluIHR1cm4sIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2VlLiBTbyBpdCYjMzk7cyBhIHNvcnQgb2YgZGVwZW5kZW5jeS4gVGhlIHdheSBpdCB3b3JrcyBpcywgaWYgZWl0aGVyIG9uZSBvZiB0aG9zZSBpcyBzZXQsIHRoZW4gdGhlIG90aGVyIG9uZSBpcyBhc3N1bWVkLiBDb25zZXF1ZW50bHksIHNldHRpbmcgYEhVR0VUTEJGU2AsIHdoaWNoIGJyaW5ncyBgSFVHRVRMQl9QQUdFYCBhbG9uZyBmb3IgdGhlIHJpZGUsIGlzIHRoZSBuZWNlc3NhcnkgbGV2ZXIgdG8gcHVsbCBoZXJlLiBGaW5lLCBJJiMzOTt2ZSBnb3QgaXQuIEkmIzM5O2xsIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkanVzdF9yYW5nZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl91cGRhdGVfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7X19mb2xpb19mcmVlX2h3cCYjMzQ7LAogICAgJiMzNDtodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdldGxiZnMgcmVhZCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgdGhlIGdlbmVyaWMgZmlsZW1hcCByZWFkIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIGZvciBodWdldGxiIHBhZ2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgaHdwb2lzb25lZCBwYWdlcyBkdXJpbmcgZmlsZW1hcCByZWFkcyBhbmQgY2hhbmdlcyBob3cgaHdwb2lzb25lZCBodWdldGxiIHBhZ2VzIGFyZSB0cmFja2VkICh1c2luZyBhIGhhc2ggdGFibGUgaW5zdGVhZCBvZiBhIGxpbmtlZCBsaXN0KS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkanVzdF9yYW5nZV9od3BvaXNvbiYjMzQ7LAogICAgJiMzNDtodWdldGxiX3BhZ2VfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl91cGRhdGVfaHdwb2lzb24mIzM0OywKICAgICYjMzQ7X19mb2xpb19mcmVlX2h3cCYjMzQ7LAogICAgJiMzNDtodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdldGxiZnMgcmVhZCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgdGhlIGdlbmVyaWMgZmlsZW1hcCByZWFkIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIGZvciBodWdldGxiIHBhZ2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgaHdwb2lzb25lZCBwYWdlcyBkdXJpbmcgZmlsZW1hcCByZWFkcyBhbmQgY2hhbmdlcyBob3cgaHdwb2lzb25lZCBodWdldGxiIHBhZ2VzIGFyZSB0cmFja2VkICh1c2luZyBhIGhhc2ggdGFibGUgaW5zdGVhZCBvZiBhIGxpbmtlZCBsaXN0KS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNDoxOC42NTE1NDMwNjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjA1OTkzODU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRqdXN0X3JhbmdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcImh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uXCIsXG4gICAgXCJfX2ZvbGlvX2ZyZWVfaHdwXCIsXG4gICAgXCJodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGh1Z2V0bGJmcyByZWFkIGltcGxlbWVudGF0aW9uIHRvIHVzZSB0aGUgZ2VuZXJpYyBmaWxlbWFwIHJlYWQgaXRlcmF0b3IgYW5kIHVwZGF0ZXMgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcgZm9yIGh1Z2V0bGIgcGFnZXMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGhhbmRsZSBod3BvaXNvbmVkIHBhZ2VzIGR1cmluZyBmaWxlbWFwIHJlYWRzIGFuZCBjaGFuZ2VzIGhvdyBod3BvaXNvbmVkIGh1Z2V0bGIgcGFnZXMgYXJlIHRyYWNrZWQgKHVzaW5nIGEgaGFzaCB0YWJsZSBpbnN0ZWFkIG9mIGEgbGlua2VkIGxpc3QpLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGh1Z2V0bGJmcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDQ6MDQ6MTguNjUxNTUwMDU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQ2OTMzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMjI2YjM3Y2YzNDMzM2ViODQ2YzNiYjIxMDk4MjQ4ZWRhZjIxYzU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDE1IDA0OjA0OjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnXFxuaW5kZXggY2Y2YWU2NDc3NmU2MmMuLjQ5MjJhZGY1YmM4NTEyIDEwMDY0NFxcbi0tLSBhL2ZzL0tjb25maWdcXG4rKysgYi9mcy9LY29uZmlnXFxuQEAgLTI3Miw2ICsyNzIsNyBAQCBlbmRpZiAjIEhVR0VUTEJGU1xcbiBcXG4gY29uZmlnIEhVR0VUTEJfUEFHRVxcbiBcXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4rXFx0c2VsZWN0IEZJTEVNQVBfTEFSR0VfRk9MSU9cXG4gXFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiBcXG4gY29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uYTZmMDQ1OWQ3OWRlYjggMTAwNjQ0XFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG4rKysgYi9mcy9odWdldGxiZnMvaW5vZGUuY1xcbkBAIC0xODcsMTEzICsxODcsNiBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWZsYWdzKGZpbGUsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywgMCk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFNvbWVvbmUgd2FudHMgdG8gcmVhZCBAYnl0ZXMgZnJvbSBhIEhXUE9JU09OIGh1Z2V0bGIgQGZvbGlvIGZyb20gQG9mZnNldC5cXG4tICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcXG4tICogSFdQT0lTT04gcGFnZS5cXG4tICovXFxuLXN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxuLVxcdFxcdHNpemVfdCBieXRlcylcXG4te1xcbi1cXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XFxuLVxcdHNpemVfdCBzYWZlX2J5dGVzO1xcbi1cXG4tXFx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0LyogU2FmZSB0byByZWFkIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhpcyBwYWdlLiAqL1xcbi1cXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XFxuLVxcdHBhZ2UrKztcXG4tXFxuLVxcdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xcbi1cXHRmb3IgKDsgc2FmZV9ieXRlcyBcXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICs9IFBBR0VfU0laRSwgcGFnZSsrKVxcbi1cXHRcXHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0cmV0dXJuIG1pbihzYWZlX2J5dGVzLCBieXRlcyk7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIFN1cHBvcnQgZm9yIHJlYWQoKSAtIEZpbmQgdGhlIHBhZ2UgYXR0YWNoZWQgdG8gZl9tYXBwaW5nIGFuZCBjb3B5IG91dCB0aGVcXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXFxuLSAqL1xcbi1zdGF0aWMgc3NpemVfdCBodWdldGxiZnNfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG4te1xcbi1cXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHA7XFxuLVxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTtcXG4tXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbi1cXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwM2VcXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcXG4tXFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZW5kX2luZGV4O1xcbi1cXHRsb2ZmX3QgaXNpemU7XFxuLVxcdHNzaXplX3QgcmV0dmFsID0gMDtcXG4tXFxuLVxcdHdoaWxlIChpb3ZfaXRlcl9jb3VudCh0bykpIHtcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4tXFx0XFx0c2l6ZV90IG5yLCBjb3BpZWQsIHdhbnQ7XFxuLVxcbi1cXHRcXHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xcbi1cXHRcXHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xcbi1cXHRcXHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4tXFx0XFx0aWYgKCFpc2l6ZSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGVuZF9pbmRleCA9IChpc2l6ZSAtIDEpIFxcdTAwM2VcXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcXG4tXFx0XFx0aWYgKGluZGV4IFxcdTAwM2UgZW5kX2luZGV4KVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0aWYgKGluZGV4ID09IGVuZF9pbmRleCkge1xcbi1cXHRcXHRcXHRuciA9ICgoaXNpemUgLSAxKSBcXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSkgKyAxO1xcbi1cXHRcXHRcXHRpZiAobnIgXFx1MDAzYz0gb2Zmc2V0KVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRuciA9IG5yIC0gb2Zmc2V0O1xcbi1cXG4tXFx0XFx0LyogRmluZCB0aGUgZm9saW8gKi9cXG4tXFx0XFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfaHVnZXRsYl9mb2xpbyhoLCBtYXBwaW5nLCBpbmRleCk7XFxuLVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFdlIGhhdmUgYSBIT0xFLCB6ZXJvIG91dCB0aGUgdXNlci1idWZmZXIgZm9yIHRoZVxcbi1cXHRcXHRcXHQgKiBsZW5ndGggb2YgdGhlIGhvbGUgb3IgcmVxdWVzdC5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGNvcGllZCA9IGlvdl9pdGVyX3plcm8obnIsIHRvKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tXFxuLVxcdFxcdFxcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxuLVxcdFxcdFxcdFxcdHdhbnQgPSBucjtcXG4tXFx0XFx0XFx0ZWxzZSB7XFxuLVxcdFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdFxcdCAqIEFkanVzdCBob3cgbWFueSBieXRlcyBzYWZlIHRvIHJlYWQgd2l0aG91dFxcbi1cXHRcXHRcXHRcXHQgKiB0b3VjaGluZyB0aGUgMXN0IHJhdyBIV1BPSVNPTiBwYWdlIGFmdGVyXFxuLVxcdFxcdFxcdFxcdCAqIG9mZnNldC5cXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHdhbnQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgbnIpO1xcbi1cXHRcXHRcXHRcXHRpZiAod2FudCA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHZhbCA9IC1FSU87XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFdlIGhhdmUgdGhlIGZvbGlvLCBjb3B5IGl0IHRvIHVzZXIgc3BhY2UgYnVmZmVyLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIHdhbnQsIHRvKTtcXG4tXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRvZmZzZXQgKz0gY29waWVkO1xcbi1cXHRcXHRyZXR2YWwgKz0gY29waWVkO1xcbi1cXHRcXHRpZiAoY29waWVkICE9IG5yIFxcdTAwMjZcXHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xcbi1cXHRcXHRcXHRpZiAoIXJldHZhbClcXG4tXFx0XFx0XFx0XFx0cmV0dmFsID0gLUVGQVVMVDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aW5kZXggKz0gb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcXG4tXFx0XFx0b2Zmc2V0IFxcdTAwMjY9IH5odWdlX3BhZ2VfbWFzayhoKTtcXG4tXFx0fVxcbi1cXHRpb2NiLVxcdTAwM2VraV9wb3MgPSAoKGxvZmZfdClpbmRleCBcXHUwMDNjXFx1MDAzYyBodWdlX3BhZ2Vfc2hpZnQoaCkpICsgb2Zmc2V0O1xcbi1cXHRyZXR1cm4gcmV0dmFsO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuIFxcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHRsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXFxuQEAgLTg4Myw2ICs3NzYsMTYgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdHJldHVybiBpbm9kZTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XFxuK1xcdHVuc2lnbmVkIGludCBvcmRlciA9IGh1Z2VfcGFnZV9vcmRlcihoc3RhdGUpO1xcbitcXG4rXFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XFxuK1xcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbitcXHRtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBvcmRlciwgb3JkZXIpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBIdWdldGxiZnMgaXMgbm90IHJlY2xhaW1hYmxlOyB0aGVyZWZvcmUgaXRzIGlfbW1hcF9yd3NlbSB3aWxsIG5ldmVyXFxuICAqIGJlIHRha2VuIGZyb20gcmVjbGFpbSAtLSB1bmxpa2UgcmVndWxhciBmaWxlc3lzdGVtcy4gVGhpcyBuZWVkcyBhblxcbkBAIC05MjYsOCArODI5LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRcXHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFNfSUZSRUc6XFxuLVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xcbi1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcXG4rXFx0XFx0XFx0aHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShpbm9kZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFNfSUZESVI6XFxuIFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcXG5AQCAtMTIwNiw3ICsxMTA4LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tXFx0LnJlYWRfaXRlclxcdFxcdD0gaHVnZXRsYmZzX3JlYWRfaXRlcixcXG4rXFx0LnJlYWRfaXRlclxcdFxcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcXG4gXFx0Lm1tYXBcXHRcXHRcXHQ9IGh1Z2V0bGJmc19maWxlX21tYXAsXFxuIFxcdC5mc3luY1xcdFxcdFxcdD0gbm9vcF9mc3luYyxcXG4gXFx0LmdldF91bm1hcHBlZF9hcmVhXFx0PSBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjE4Nzg2NDJlNzVlYzUxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5AQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wgaHVnZXRsYmZzX3BhZ2VjYWNoZV9wcmVzZW50KHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XFxuIFxcbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuIGV4dGVybiBpbnQgbW92YWJsZV9naWdhbnRpY19wYWdlcyBfX3JlYWRfbW9zdGx5O1xcbiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cCBfX3JlYWRfbW9zdGx5O1xcbkBAIC0yOTIsOCArMjkyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfdG90YWxfcGFnZXModm9pZClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTU5NSw4ICs1OTQsOCBAQCBlbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuLVxcdHtcXHR2b2lkICpwcml2YXRlID0gXFx1MDAyNmZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcdFxcdFxcXFxcXG4rYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXFxcXFxuK1xcdHtcXHRjb25zdCB2b2lkICpwcml2YXRlID0gXFx1MDAyNmZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcdFxcdFxcXFxcXG4gXFx0XFx0cmV0dXJuIHRlc3RfYml0KEhQR18jI2ZsbmFtZSwgcHJpdmF0ZSk7XFx0XFx0XFxcXFxcbiBcXHR9XFxuIFxcbkBAIC02MTYsNyArNjE1LDcgQEAgdm9pZCBmb2xpb19jbGVhcl9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbiAjZWxzZVxcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuIHN0YXRpYyBpbmxpbmUgYm9vbFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFx0XFxcXFxcbitmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuIFxcdHsgcmV0dXJuIDA7IH1cXG4gXFxuICNkZWZpbmUgU0VUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbkBAIC03MjcsNyArNzI2LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3VicG9vbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRyZXR1cm4gSFVHRVRMQkZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc3Bvb2w7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gZm9saW8tXFx1MDAzZV9odWdldGxiX3N1YnBvb2w7XFxuIH1cXG5AQCAtODU3LDcgKzg1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2hhc19odWdlX2Jvb3RtZW1fYWxsb2Modm9pZClcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxuIFxcdHJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7XFxuQEAgLTEwNzAsMTEgKzEwNjksNiBAQCB2b2lkIGh1Z2V0bGJfcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XFxuIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xcbiAjZW5kaWZcXG4gXFxuLS8qXFxuLSAqIENoZWNrIGlmIGEgZ2l2ZW4gcmF3IEBwYWdlIGluIGEgaHVnZXBhZ2UgaXMgSFdQT0lTT04uXFxuLSAqL1xcbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcXG4tXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdlX3BhZ2VfbWFza19hbGlnbihzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4ge1xcbiBcXHRyZXR1cm4gUEFHRV9NQVNLIFxcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTtcXG5AQCAtMTA4OCw3ICsxMDgyLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGh1Z2VfcGFnZV9tYXNrX2FsaWduKHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2V0bGJfZm9saW9fc3VicG9vbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTExNTcsNyArMTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXFxuaW5kZXggYjE4YzJiMmU3ZDJjNjUuLmVkNWMwODI5ZmY1NjlhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbkBAIC0zODcsNyArMzg3LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xcbiAgKiBAX2h1Z2V0bGJfc3VicG9vbDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGIuaC5cXG4gICogQF9odWdldGxiX2Nncm91cDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXFxuICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXFxuLSAqIEBfaHVnZXRsYl9od3BvaXNvbjogRG8gbm90IHVzZSBkaXJlY3RseSwgY2FsbCByYXdfaHdwX2xpc3RfaGVhZCgpLlxcbiAgKiBAX2RlZmVycmVkX2xpc3Q6IEZvbGlvcyB0byBiZSBzcGxpdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxcbiAgKlxcbkBAIC00OTksNyArNDk4LDYgQEAgc3RydWN0IGZvbGlvIHtcXG4gXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfc3VicG9vbDtcXG4gXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwO1xcbiBcXHRcXHRcXHR2b2lkICpfaHVnZXRsYl9jZ3JvdXBfcnN2ZDtcXG4tXFx0XFx0XFx0dm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247XFxuIFxcdC8qIHByaXZhdGU6IHRoZSB1bmlvbiB3aXRoIHN0cnVjdCBwYWdlIGlzIHRyYW5zaXRpb25hbCAqL1xcbiBcXHRcXHR9O1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSBfX3BhZ2VfMztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbmluZGV4IDcyMjNmNmY0ZTJiNDAzLi44ZTU3YzEyYTczMDFiNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuQEAgLTEwNjgsNiArMTA2OCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbitib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuK1xcbiAvKlxcbiAgKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiBOb3RlIHRoYXQgdGhpcyBjaGVjayBpc1xcbiAgKiBiZXN0IGVmZm9ydCBvbmx5IGFuZCBpbmhlcmVudGx5IHJhY3k6IHRoZXJlIGlzIG5vIHdheSB0byBzeW5jaHJvbml6ZSB3aXRoXFxuQEAgLTEwNzUsMTggKzEwNzgsMjkgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4tXFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuK1xcbitcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihmb2xpbywgcGFnZSk7XFxuK1xcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4gXFxuLVxcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuLVxcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIFxcdTAwMjZcXHUwMDI2IFBhZ2VIV1BvaXNvbihcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpO1xcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4rI2VuZGlmXFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcXG4tXFx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XFxuK1xcdCAgICAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xcbiB9XFxuIFxcbiBib29sIGlzX2ZyZWVfYnVkZHlfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcXG5pbmRleCAyYzM3MThkNTkyZDZkZC4uYmQ2YTYyNzVhNGU5MTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxcbkBAIC0yMTAsNiArMjEwLDcgQEAgZW51bSBtYXBwaW5nX2ZsYWdzIHtcXG4gXFx0QVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNID0gOSxcXG4gXFx0QVNfS0VSTkVMX0ZJTEUgPSAxMCxcXHQvKiBtYXBwaW5nIGZvciBhIGZha2Uga2VybmVsIGZpbGUgdGhhdCBzaG91bGRuJ3RcXG4gXFx0XFx0XFx0XFx0ICAgYWNjb3VudCB1c2FnZSB0byB1c2VyIGNncm91cHMgKi9cXG4rXFx0QVNfQVVUSE9SSVRBVElWRSA9IDExLFxcdC8qIElmIHdlIG1pc3MgaW4gdGhlIHBhZ2UgY2FjaGUsIGl0J3MgYSBob2xlICovXFxuIFxcdC8qIEJpdHMgMTYtMjUgYXJlIHVzZWQgZm9yIEZPTElPX09SREVSICovXFxuIFxcdEFTX0ZPTElPX09SREVSX0JJVFMgPSA1LFxcbiBcXHRBU19GT0xJT19PUkRFUl9NSU4gPSAxNixcXG5AQCAtMzQ1LDYgKzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlc1xcbiBcXHRyZXR1cm4gdGVzdF9iaXQoQVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNLCBcXHUwMDI2bWFwcGluZy1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfYXV0aG9yaXRhdGl2ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4re1xcbitcXHRzZXRfYml0KEFTX0FVVEhPUklUQVRJVkUsIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VmbGFncyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuK3tcXG4rXFx0cmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VmbGFncyk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWFwcGluZ19nZnBfbWFzayhjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4ge1xcbiBcXHRyZXR1cm4gbWFwcGluZy1cXHUwMDNlZ2ZwX21hc2s7XFxuQEAgLTM3Myw3ICszODQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfZ2ZwX21hc2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm0sIGdmcF90IG1hc2spXFxuICAqIGFzc3VtcHRpb25zIGFib3V0IG1heGltdW0gb3JkZXIgaWYgVEhQIGFyZSBkaXNhYmxlZCwgYnV0IDggc2VlbXMgbGlrZVxcbiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQncyAxTUIgaWYgeW91J3JlIHVzaW5nIDRrQiBwYWdlcylcXG4gICovXFxuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rI2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXFxuICNkZWZpbmUgUFJFRkVSUkVEX01BWF9QQUdFQ0FDSEVfT1JERVJcXHRIUEFHRV9QTURfT1JERVJcXG4gI2Vsc2VcXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlxcdDhcXG5AQCAtMzk0LDcgKzQwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXFxuIHtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxcbiBcXHRcXHRyZXR1cm4gMVUgXFx1MDAzY1xcdTAwM2MgKFBBR0VfU0hJRlQgKyBNQVhfUEFHRUNBQ0hFX09SREVSKTtcXG4gXFx0cmV0dXJuIFBBR0VfU0laRTtcXG4gfVxcbkBAIC00MDUsMjkgKzQxNiwyMyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKVxcbiAgKiBAbWluOiBNaW5pbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIDAtTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxcbiAgKiBAbWF4OiBNYXhpbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIEBtaW4tTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxcbiAgKlxcbi0gKiBUaGUgZmlsZXN5c3RlbSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIGl0cyBpbm9kZSBjb25zdHJ1Y3RvciB0b1xcbi0gKiBpbmRpY2F0ZSB3aGljaCBiYXNlIHNpemUgKG1pbikgYW5kIG1heGltdW0gc2l6ZSAobWF4KSBvZiBmb2xpbyB0aGUgVkZTXFxuLSAqIGNhbiB1c2UgdG8gY2FjaGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLiAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkXFxuLSAqIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgb2YgZm9saW8gc2l6ZXMgKGllIHRoZXJlIGlzXFxuLSAqIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXFxuKyAqIFRoZSBmaWxlc3lzdGVtIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gaXRzIGlub2RlIGNvbnN0cnVjdG9yXFxuKyAqIHRvIGluZGljYXRlIHdoaWNoIHNpemUgZm9saW9zIGNhbiBiZSB1c2VkIHRvIGNhY2hlIHRoZSBjb250ZW50cyBvZlxcbisgKiB0aGUgaW5vZGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbFxcbisgKiBoYW5kbGluZyBvZiBmb2xpbyBzaXplcyAoaWUgdGhlcmUgaXMgc29tZXRoaW5nIHRoZSBjb3JlIGNhbm5vdCBrbm93KS5cXG4gICogRG8gbm90IHR1bmUgaXQgYmFzZWQgb24sIGVnLCBpX3NpemUuXFxuICAqXFxuKyAqIGh1Z2V0bGIgY2FsbHMgdGhpcyB3aXRoIG9yZGVycyBsYXJnZXIgdGhhbiBNQVhfUEFHRUNBQ0hFX09SREVSLlxcbisgKiBOb3JtYWwgZmlsZXN5c3RlbXMgc2hvdWxkIG5vdCBkbyB0aGlzLlxcbisgKlxcbiAgKiBDb250ZXh0OiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoaWxlIHRoZSBpbm9kZSBpcyBhY3RpdmUgYXMgaXRcXG4gICogaXMgbm9uLWF0b21pYy5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBtaW4sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbWF4KVxcbitcXHRcXHR1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KVxcbiB7XFxuLVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGlmIChtaW4gXFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxcbi1cXHRcXHRtaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xcbi1cXG4tXFx0aWYgKG1heCBcXHUwMDNlIE1BWF9QQUdFQ0FDSEVfT1JERVIpXFxuLVxcdFxcdG1heCA9IE1BWF9QQUdFQ0FDSEVfT1JERVI7XFxuLVxcbiBcXHRpZiAobWF4IFxcdTAwM2MgbWluKVxcbiBcXHRcXHRtYXggPSBtaW47XFxuIFxcbkBAIC00NjAsNyArNDY1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2xhcmdlX2ZvbGlvcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnRcXG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIHtcXG4tXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHRyZXR1cm4gKG1hcHBpbmctXFx1MDAzZWZsYWdzIFxcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUFYX01BU0spIFxcdTAwM2VcXHUwMDNlIEFTX0ZPTElPX09SREVSX01BWDtcXG4gfVxcbkBAIC00NjgsNyArNDczLDcgQEAgbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XFxuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuLVxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0cmV0dXJuIChtYXBwaW5nLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBBU19GT0xJT19PUkRFUl9NSU47XFxuIH1cXG5AQCAtNTI0LDcgKzUyOSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2xhcmdlX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpXFxuICAqXFxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cXG4gICovXFxuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rI2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX3BtZF9mb2xpb19zdXBwb3J0KGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxcbiB7XFxuIFxcdC8qIEFTX0ZPTElPX09SREVSIGlzIG9ubHkgcmVhc29uYWJsZSBmb3IgcGFnZWNhY2hlIGZvbGlvcyAqL1xcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xcbmluZGV4IDllMGNhNDgyNDkwNTRmLi45OTJlN2FlMGIyYmYyOSAxMDA2NDRcXG4tLS0gYS9tbS9LY29uZmlnXFxuKysrIGIvbW0vS2NvbmZpZ1xcbkBAIC04NDMsMTEgKzg0MywxNSBAQCBjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG4gY29uZmlnIE1NX0lEXFxuIFxcdGRlZl9ib29sIG5cXG4gXFxuK2NvbmZpZyBGSUxFTUFQX0xBUkdFX0ZPTElPXFxuK1xcdGRlZl9ib29sIG5cXG4rXFxuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gXFx0c2VsZWN0IENPTVBBQ1RJT05cXG4gXFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbitcXHRzZWxlY3QgRklMRU1BUF9MQVJHRV9GT0xJT1xcbiBcXHRzZWxlY3QgTU1fSURcXG4gXFx0aGVscFxcbiBcXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXFxuaW5kZXggNThlYjlkMjQwNjQzNDguLmY2NjJjZGE4MWRjNzRjIDEwMDY0NFxcbi0tLSBhL21tL2ZpbGVtYXAuY1xcbisrKyBiL21tL2ZpbGVtYXAuY1xcbkBAIC0yNDgzLDYgKzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXG4gXFx0XFx0aWYgKCFmb2xpb19iYXRjaF9hZGQoZmJhdGNoLCBmb2xpbykpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKGZvbGlvX3Rlc3RfcmVhZGFoZWFkKGZvbGlvKSlcXG5AQCAtMjY5NSw2ICsyNjk3LDggQEAgc3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCxcXG4gXFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChmYmF0Y2gpKSB7XFxuIFxcdFxcdERFRklORV9SRUFEQUhFQUQocmFjdGwsIGZpbHAsIFxcdTAwMjZmaWxwLVxcdTAwM2VmX3JhLCBtYXBwaW5nLCBpbmRleCk7XFxuIFxcbitcXHRcXHRpZiAobWFwcGluZ19pc19hdXRob3JpdGF0aXZlKG1hcHBpbmcpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT0lPKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpXFxuQEAgLTI3NDksNiArMjc1MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gKHBvczEgXFx1MDAzZVxcdTAwM2Ugc2hpZnQgPT0gcG9zMiBcXHUwMDNlXFx1MDAzZSBzaGlmdCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxuK1xcdFxcdHNpemVfdCBieXRlcylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XFxuK1xcdHNpemVfdCBzYWZlX2J5dGVzO1xcbitcXG4rXFx0aWYgKCFmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGJ5dGVzO1xcbitcXHRpZiAoaXNfcGFnZV9od3BvaXNvbihwYWdlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXFxuK1xcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcXG4rXFx0cGFnZSsrO1xcbitcXG4rXFx0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXFxuK1xcdGZvciAoOyBzYWZlX2J5dGVzIFxcdTAwM2MgYnl0ZXM7IHNhZmVfYnl0ZXMgKz0gUEFHRV9TSVpFLCBwYWdlKyspXFxuK1xcdFxcdGlmIChpc19wYWdlX2h3cG9pc29uKHBhZ2UpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdHJldHVybiBtaW4oc2FmZV9ieXRlcywgYnl0ZXMpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxuQEAgLTI4MjgsNiArMjg1NSwyMiBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0XFx0Z290byBwdXRfZm9saW9zO1xcbiBcXHRcXHRlbmRfb2Zmc2V0ID0gbWluX3QobG9mZl90LCBpc2l6ZSwgaW9jYi1cXHUwMDNla2lfcG9zICsgaXRlci1cXHUwMDNlY291bnQpO1xcbiBcXG4rXFx0XFx0aWYgKCFmb2xpb19iYXRjaF9jb3VudChcXHUwMDI2ZmJhdGNoKSkge1xcbitcXHRcXHRcXHRzaXplX3QgZnNpemUgPSBtYXBwaW5nX21pbl9mb2xpb19ucmJ5dGVzKG1hcHBpbmcpO1xcbitcXHRcXHRcXHRzaXplX3Qgb2Zmc2V0ID0gaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwMjYgKGZzaXplIC0gMSk7XFxuK1xcdFxcdFxcdHNpemVfdCBieXRlcyA9IG1pbl90KGxvZmZfdCwgZW5kX29mZnNldCAtIGlvY2ItXFx1MDAzZWtpX3BvcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBmc2l6ZSAtIG9mZnNldCk7XFxuK1xcdFxcdFxcdHNpemVfdCBjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKGJ5dGVzLCBpdGVyKTtcXG4rXFxuK1xcdFxcdFxcdGFscmVhZHlfcmVhZCArPSBjb3BpZWQ7XFxuK1xcdFxcdFxcdGlvY2ItXFx1MDAzZWtpX3BvcyArPSBjb3BpZWQ7XFxuK1xcdFxcdFxcdGxhc3RfcG9zID0gaW9jYi1cXHUwMDNla2lfcG9zO1xcbitcXG4rXFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNjIGJ5dGVzKVxcbitcXHRcXHRcXHRcXHRlcnJvciA9IC1FRkFVTFQ7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBPbmNlIHdlIHN0YXJ0IGNvcHlpbmcgZGF0YSwgd2UgZG9uJ3Qgd2FudCB0byBiZSB0b3VjaGluZyBhbnlcXG4gXFx0XFx0ICogY2FjaGVsaW5lcyB0aGF0IG1pZ2h0IGJlIGNvbnRlbmRlZDpcXG5AQCAtMjg2MiwxNCArMjkwNSwxOCBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0XFx0aWYgKHdyaXRhYmx5X21hcHBlZClcXG4gXFx0XFx0XFx0XFx0Zmx1c2hfZGNhY2hlX2ZvbGlvKGZvbGlvKTtcXG4gXFxuLVxcdFxcdFxcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBieXRlcywgaXRlcik7XFxuK1xcdFxcdFxcdGNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7XFxuK1xcdFxcdFxcdGlmIChjb3BpZWQgXFx1MDAzYyBieXRlcylcXG4rXFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUlPO1xcbitcXHRcXHRcXHRjb3BpZWQgPSBjb3B5X2ZvbGlvX3RvX2l0ZXIoZm9saW8sIG9mZnNldCwgY29waWVkLCBpdGVyKTtcXG4gXFxuIFxcdFxcdFxcdGFscmVhZHlfcmVhZCArPSBjb3BpZWQ7XFxuIFxcdFxcdFxcdGlvY2ItXFx1MDAzZWtpX3BvcyArPSBjb3BpZWQ7XFxuIFxcdFxcdFxcdGxhc3RfcG9zID0gaW9jYi1cXHUwMDNla2lfcG9zO1xcbiBcXG4gXFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNjIGJ5dGVzKSB7XFxuLVxcdFxcdFxcdFxcdGVycm9yID0gLUVGQVVMVDtcXG4rXFx0XFx0XFx0XFx0aWYgKCFlcnJvcilcXG4rXFx0XFx0XFx0XFx0XFx0ZXJyb3IgPSAtRUZBVUxUO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXFxuaW5kZXggMmJjY2IwYTUzYTBhNjAuLjM1MzM0MDMwOTEwNzRjIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTQ0MTMsNyArNDQxMyw3IEBAIHN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aWYgKGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9PSBIUEFHRV9QTURfTlIgLSAxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbitcXHRpZiAoZm9saW9faGFzX2h3cG9pc29uZWRfcGFnZShmb2xpbykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkrKykge1xcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uY2M4ZDk4Mzk5OTEzZTMgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTE3NzUsNyArMTc3NSw3IEBAIHZvaWQgaW5pdF9uZXdfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhblxcbiAgKiBub3QgZ2V0IHRoZSBsb2NrLCBzaW1wbHkgcmV0dXJuIE5VTEwgdG8gY2FsbGVyLlxcbiAgKi9cXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0cnVjdCBhZGRyZXNzX3NwYWNlICpodWdldGxiX2ZvbGlvX21hcHBpbmdfbG9ja193cml0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW9fbWFwcGluZyhmb2xpbyk7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IDUxNTA4YTU1YzQwNTVlLi45ZTRlZTVkOTM5MDUwNiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC00Myw2ICs0Myw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RheC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaGFzaHRhYmxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rc20uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbkBAIC0xODA4LDMzICsxODA5LDI2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1mX2RheF9raWxsX3Byb2NzKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxuIFxcbi0vKlxcbi0gKiBTdHJ1Y3QgcmF3X2h3cF9wYWdlIHJlcHJlc2VudHMgaW5mb3JtYXRpb24gYWJvdXQgXFxcInJhdyBlcnJvciBwYWdlXFxcIixcXG4tICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIC1cXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb24gZmllbGQgb2YgZm9saW8uXFxuLSAqL1xcbi1zdHJ1Y3QgcmF3X2h3cF9wYWdlIHtcXG4tXFx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcXG4rLyogUHJvdGVjdHMgaHVnZXRsYl9od3BvaXNvbiBsaXN0ICovXFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaHRsYl9od3BvaXNvbl9sb2NrKTtcXG4rc3RhdGljIERFRklORV9IQVNIVEFCTEUoaHRsYl9od3BvaXNvbiwgNSk7XFxuK1xcbitzdHJ1Y3QgaHdwX3BhZ2Uge1xcbitcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfbGlzdF9oZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLXtcXG4tXFx0cmV0dXJuIChzdHJ1Y3QgbGxpc3RfaGVhZCAqKVxcdTAwMjZmb2xpby1cXHUwMDNlX2h1Z2V0bGJfaHdwb2lzb247XFxuLX1cXG4tXFxuLWJvb2wgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuKy8qXFxuKyAqIENoZWNrIGlmIGEgZ2l2ZW4gQHBhZ2UgaW4gYSBodWdldGxiIGZvbGlvIGlzIEhXUE9JU09OLlxcbisgKi9cXG4rYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4tXFx0c3RydWN0IGxsaXN0X2hlYWQgKnJhd19od3BfaGVhZDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcXG4tXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuK1xcdGNvbnN0IHN0cnVjdCBod3BfcGFnZSAqcDtcXG4gXFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmICghZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGlmICghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4tXFx0XFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4tXFxuIFxcdC8qXFxuIFxcdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHN1YnBhZ2VzXFxuIFxcdCAqIGFyZSBIV1BPSVNPTi4gU28gcmV0dXJuIGFzIGlmIEFMTCBzdWJwYWdlcyBhcmUgSFdQT0lTT05lZC5cXG5AQCAtMTg0MiwzNiArMTgzNiwzOSBAQCBib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWZfbXV0ZXgpO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XFxuIFxcbi1cXHRyYXdfaHdwX2hlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XFxuLVxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIHJhd19od3BfaGVhZC1cXHUwMDNlZmlyc3QsIG5vZGUpIHtcXG4rXFx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZShodGxiX2h3cG9pc29uLCBwLCBub2RlLCAodW5zaWduZWQgbG9uZylwYWdlKSB7XFxuIFxcdFxcdGlmIChwYWdlID09IHAtXFx1MDAzZXBhZ2UpIHtcXG4gXFx0XFx0XFx0cmV0ID0gdHJ1ZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZl9tdXRleCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgX19mb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuIHtcXG4tXFx0c3RydWN0IGxsaXN0X25vZGUgKmhlYWQ7XFxuLVxcdHN0cnVjdCByYXdfaHdwX3BhZ2UgKnAsICpuZXh0O1xcbitcXHRpbnQgYjtcXG4rXFx0c3RydWN0IGh3cF9wYWdlICpwO1xcbitcXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wO1xcbiBcXHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcXG4gXFxuLVxcdGhlYWQgPSBsbGlzdF9kZWxfYWxsKHJhd19od3BfbGlzdF9oZWFkKGZvbGlvKSk7XFxuLVxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkge1xcbitcXHRoYXNoX2Zvcl9lYWNoX3NhZmUoaHRsYl9od3BvaXNvbiwgYiwgdG1wLCBwLCBub2RlKSB7XFxuK1xcdFxcdGlmIChwYWdlX2ZvbGlvKHAtXFx1MDAzZXBhZ2UpICE9IGZvbGlvKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aWYgKG1vdmVfZmxhZylcXG4gXFx0XFx0XFx0U2V0UGFnZUhXUG9pc29uKHAtXFx1MDAzZXBhZ2UpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdG51bV9wb2lzb25lZF9wYWdlc19zdWIocGFnZV90b19wZm4ocC1cXHUwMDNlcGFnZSksIDEpO1xcbitcXHRcXHRoYXNoX2RlbChcXHUwMDI2cC1cXHUwMDNlbm9kZSk7XFxuIFxcdFxcdGtmcmVlKHApO1xcbiBcXHRcXHRjb3VudCsrO1xcbiBcXHR9XFxuK1xcbiBcXHRyZXR1cm4gY291bnQ7XFxuIH1cXG4gXFxuQEAgLTE4ODcsOSArMTg4NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiAgKi9cXG4gc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqaGVhZDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcmF3X2h3cDtcXG4tXFx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcXG4rXFx0c3RydWN0IGh3cF9wYWdlICpwO1xcbiBcXHRpbnQgcmV0ID0gZm9saW9fdGVzdF9zZXRfaHdwb2lzb24oZm9saW8pID8gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQgOiAwO1xcbiBcXG4gXFx0LypcXG5AQCAtMTg5OSwxNiArMTg5NCwxOCBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHQgKi9cXG4gXFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XFxuLVxcdGhlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XFxuLVxcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIGhlYWQtXFx1MDAzZWZpcnN0LCBub2RlKSB7XFxuLVxcdFxcdGlmIChwLVxcdTAwM2VwYWdlID09IHBhZ2UpXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcXG4rXFx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZShodGxiX2h3cG9pc29uLCBwLCBub2RlLCAodW5zaWduZWQgbG9uZylwYWdlKSB7XFxuK1xcdFxcdGlmIChwLVxcdTAwM2VwYWdlID09IHBhZ2UpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XFxuIFxcdFxcdFxcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdHJhd19od3AgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcmF3X2h3cF9wYWdlLCBHRlBfQVRPTUlDKTtcXG4tXFx0aWYgKHJhd19od3ApIHtcXG4tXFx0XFx0cmF3X2h3cC1cXHUwMDNlcGFnZSA9IHBhZ2U7XFxuLVxcdFxcdGxsaXN0X2FkZChcXHUwMDI2cmF3X2h3cC1cXHUwMDNlbm9kZSwgaGVhZCk7XFxuK1xcdHAgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xcbitcXHRpZiAocCkge1xcbitcXHRcXHRwLVxcdTAwM2VwYWdlID0gcGFnZTtcXG4rXFx0XFx0aGFzaF9hZGQoaHRsYl9od3BvaXNvbiwgXFx1MDAyNnAtXFx1MDAzZW5vZGUsICh1bnNpZ25lZCBsb25nKXBhZ2UpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBGYWlsZWQgdG8gc2F2ZSByYXcgZXJyb3IgaW5mby4gIFdlIG5vIGxvbmdlciB0cmFjZSBhbGxcXG5AQCAtMTkyMCwxMyArMTkxNywxNSBAQCBzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXHRcXHQgKiBPbmNlIGh1Z2V0bGJfcmF3X2h3cF91bnJlbGlhYmxlIGlzIHNldCwgcmF3X2h3cF9wYWdlIGlzIG5vdFxcbiBcXHRcXHQgKiB1c2VkIGFueSBtb3JlLCBzbyBmcmVlIGl0LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0X19mb2xpb19mcmVlX3Jhd19od3AoZm9saW8sIGZhbHNlKTtcXG4rXFx0XFx0X19mb2xpb19mcmVlX2h3cChmb2xpbywgZmFsc2UpO1xcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBjb3VudDtcXG4gXFx0LypcXG4gXFx0ICogaHVnZXRsYl92bWVtbWFwX29wdGltaXplZCBodWdlcGFnZXMgY2FuJ3QgYmUgZnJlZWQgYmVjYXVzZSBzdHJ1Y3RcXG4gXFx0ICogcGFnZXMgZm9yIHRhaWwgcGFnZXMgYXJlIHJlcXVpcmVkIGJ1dCB0aGV5IGRvbid0IGV4aXN0LlxcbkBAIC0xOTQxLDcgKzE5NDAsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbiBcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0dXJuIF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XFxuK1xcdGNvdW50ID0gX19mb2xpb19mcmVlX2h3cChmb2xpbywgbW92ZV9mbGFnKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XFxuK1xcdHJldHVybiBjb3VudDtcXG4gfVxcbiBcXG4gdm9pZCBmb2xpb19jbGVhcl9odWdldGxiX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcXG4rKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXFxuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4gXFx0XFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiBcXHRcXHRcXHRwZm4gPSBmb2xpb19wZm4oZm9saW8pICsgZm9saW9fbnJfcGFnZXMoZm9saW8pIC0gMTtcXG4gXFxuLVxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0XFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIHVubWFwX3BvaXNvbmVkX2ZvbGlvKCkgY2Fubm90IGhhbmRsZSBsYXJnZSBmb2xpb3NcXG4gXFx0XFx0XFx0ICogaW4gYWxsIGNhc2VzIHlldC5cXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcXG5pbmRleCBiNTFmODNjOTcwYmIzNy4uNDkyYzliZWYzNjIwNzQgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMzI0MCw3ICszMjQwLDcgQEAgc2htZW1fd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG4rXFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuIFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjcwZTU0YWNlMGU3NDFjIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTA4Niw3ICsxMDg2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbiBcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbiBcXHRcXHRcXHRnb3RvIGtlZXA7XFxuIFxcbi1cXHRcXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxuK1xcdFxcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiB1bm1hcF9wb2lzb25lZF9mb2xpbygpIGNhbid0IGhhbmRsZSBsYXJnZVxcbiBcXHRcXHRcXHQgKiBmb2xpbywganVzdCBza2lwIGl0LiBtZW1vcnlfZmFpbHVyZSgpIHdpbGxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDQ6MDQ6MTkuNTk3MDg5NTk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTExNDM4MzA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRqdXN0X3JhbmdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3BhZ2VfaHdwb2lzb25cIixcbiAgICBcImh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uXCIsXG4gICAgXCJfX2ZvbGlvX2ZyZWVfaHdwXCIsXG4gICAgXCJodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGh1Z2V0bGJmcyByZWFkIGltcGxlbWVudGF0aW9uIHRvIHVzZSB0aGUgZ2VuZXJpYyBmaWxlbWFwIHJlYWQgaXRlcmF0b3IgYW5kIHVwZGF0ZXMgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcgZm9yIGh1Z2V0bGIgcGFnZXMuIEl0IGludHJvZHVjZXMgbmV3IGxvZ2ljIHRvIGhhbmRsZSBod3BvaXNvbmVkIHBhZ2VzIGR1cmluZyBmaWxlbWFwIHJlYWRzIGFuZCBjaGFuZ2VzIGhvdyBod3BvaXNvbmVkIGh1Z2V0bGIgcGFnZXMgYXJlIHRyYWNrZWQgKHVzaW5nIGEgaGFzaCB0YWJsZSBpbnN0ZWFkIG9mIGEgbGlua2VkIGxpc3QpLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGh1Z2V0bGJmcywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMjI2YjM3Y2YzNDMzM2ViODQ2YzNiYjIxMDk4MjQ4ZWRhZjIxYzU4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMDQ6MDQ6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZ1xuaW5kZXggY2Y2YWU2NDc3NmU2MmMuLjQ5MjJhZGY1YmM4NTEyIDEwMDY0NFxuLS0tIGEvZnMvS2NvbmZpZ1xuKysrIGIvZnMvS2NvbmZpZ1xuQEAgLTI3Miw2ICsyNzIsNyBAQCBlbmRpZiAjIEhVR0VUTEJGU1xuIFxuIGNvbmZpZyBIVUdFVExCX1BBR0VcbiBcdGRlZl9ib29sIEhVR0VUTEJGU1xuK1x0c2VsZWN0IEZJTEVNQVBfTEFSR0VfRk9MSU9cbiBcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCAyMTZlMWEwZGQwYjIzNy4uYTZmMDQ1OWQ3OWRlYjggMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xODcsMTEzICsxODcsNiBAQCBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXR1cm4gbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1mbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApO1xuIH1cbiBcbi0vKlxuLSAqIFNvbWVvbmUgd2FudHMgdG8gcmVhZCBAYnl0ZXMgZnJvbSBhIEhXUE9JU09OIGh1Z2V0bGIgQGZvbGlvIGZyb20gQG9mZnNldC5cbi0gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvbmUgY2FuIHJlYWQgd2l0aG91dCB0b3VjaGluZyB0aGUgMXN0IHJhd1xuLSAqIEhXUE9JU09OIHBhZ2UuXG4tICovXG4tc3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbi1cdFx0c2l6ZV90IGJ5dGVzKVxuLXtcbi1cdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTtcbi1cdHNpemVfdCBzYWZlX2J5dGVzO1xuLVxuLVx0aWYgKGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHBhZ2UpKVxuLVx0XHRyZXR1cm4gMDtcbi1cdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cbi1cdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcbi1cdHBhZ2UrKztcbi1cbi1cdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuLVx0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICs9IFBBR0VfU0laRSwgcGFnZSsrKVxuLVx0XHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbi19XG4tXG4tLypcbi0gKiBTdXBwb3J0IGZvciByZWFkKCkgLSBGaW5kIHRoZSBwYWdlIGF0dGFjaGVkIHRvIGZfbWFwcGluZyBhbmQgY29weSBvdXQgdGhlXG4tICogZGF0YS4gVGhpcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gZmlsZW1hcF9yZWFkKCkuXG4tICovXG4tc3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4te1xuLVx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4tXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XG4tXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXHUwMDNlZl9tYXBwaW5nO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2VcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGgpO1xuLVx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0dW5zaWduZWQgbG9uZyBlbmRfaW5kZXg7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzc2l6ZV90IHJldHZhbCA9IDA7XG4tXG4tXHR3aGlsZSAoaW92X2l0ZXJfY291bnQodG8pKSB7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHNpemVfdCBuciwgY29waWVkLCB3YW50O1xuLVxuLVx0XHQvKiBuciBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBmcm9tIHRoaXMgcGFnZSAqL1xuLVx0XHRuciA9IGh1Z2VfcGFnZV9zaXplKGgpO1xuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cdFx0aWYgKCFpc2l6ZSlcbi1cdFx0XHRicmVhaztcbi1cdFx0ZW5kX2luZGV4ID0gKGlzaXplIC0gMSkgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0aWYgKGluZGV4IFx1MDAzZSBlbmRfaW5kZXgpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChpbmRleCA9PSBlbmRfaW5kZXgpIHtcbi1cdFx0XHRuciA9ICgoaXNpemUgLSAxKSBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKSArIDE7XG4tXHRcdFx0aWYgKG5yIFx1MDAzYz0gb2Zmc2V0KVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0bnIgPSBuciAtIG9mZnNldDtcbi1cbi1cdFx0LyogRmluZCB0aGUgZm9saW8gKi9cbi1cdFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfaHVnZXRsYl9mb2xpbyhoLCBtYXBwaW5nLCBpbmRleCk7XG4tXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBXZSBoYXZlIGEgSE9MRSwgemVybyBvdXQgdGhlIHVzZXItYnVmZmVyIGZvciB0aGVcbi1cdFx0XHQgKiBsZW5ndGggb2YgdGhlIGhvbGUgb3IgcmVxdWVzdC5cbi1cdFx0XHQgKi9cbi1cdFx0XHRjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKG5yLCB0byk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi1cbi1cdFx0XHRpZiAoIWZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pKVxuLVx0XHRcdFx0d2FudCA9IG5yO1xuLVx0XHRcdGVsc2Uge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIEFkanVzdCBob3cgbWFueSBieXRlcyBzYWZlIHRvIHJlYWQgd2l0aG91dFxuLVx0XHRcdFx0ICogdG91Y2hpbmcgdGhlIDFzdCByYXcgSFdQT0lTT04gcGFnZSBhZnRlclxuLVx0XHRcdFx0ICogb2Zmc2V0LlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHR3YW50ID0gYWRqdXN0X3JhbmdlX2h3cG9pc29uKGZvbGlvLCBvZmZzZXQsIG5yKTtcbi1cdFx0XHRcdGlmICh3YW50ID09IDApIHtcbi1cdFx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRcdFx0cmV0dmFsID0gLUVJTztcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2UgaGF2ZSB0aGUgZm9saW8sIGNvcHkgaXQgdG8gdXNlciBzcGFjZSBidWZmZXIuXG4tXHRcdFx0ICovXG4tXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIHdhbnQsIHRvKTtcbi1cdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuLVx0XHR9XG4tXHRcdG9mZnNldCArPSBjb3BpZWQ7XG4tXHRcdHJldHZhbCArPSBjb3BpZWQ7XG4tXHRcdGlmIChjb3BpZWQgIT0gbnIgXHUwMDI2XHUwMDI2IGlvdl9pdGVyX2NvdW50KHRvKSkge1xuLVx0XHRcdGlmICghcmV0dmFsKVxuLVx0XHRcdFx0cmV0dmFsID0gLUVGQVVMVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRpbmRleCArPSBvZmZzZXQgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9zaGlmdChoKTtcbi1cdFx0b2Zmc2V0IFx1MDAyNj0gfmh1Z2VfcGFnZV9tYXNrKGgpO1xuLVx0fVxuLVx0aW9jYi1cdTAwM2VraV9wb3MgPSAoKGxvZmZfdClpbmRleCBcdTAwM2NcdTAwM2MgaHVnZV9wYWdlX3NoaWZ0KGgpKSArIG9mZnNldDtcbi1cdHJldHVybiByZXR2YWw7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbiBcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHRsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sXG5AQCAtODgzLDYgKzc3NiwxNiBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHJldHVybiBpbm9kZTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4rXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBodWdlX3BhZ2Vfb3JkZXIoaHN0YXRlKTtcbitcbitcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucztcbitcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbitcdG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgb3JkZXIsIG9yZGVyKTtcbit9XG4rXG4gLypcbiAgKiBIdWdldGxiZnMgaXMgbm90IHJlY2xhaW1hYmxlOyB0aGVyZWZvcmUgaXRzIGlfbW1hcF9yd3NlbSB3aWxsIG5ldmVyXG4gICogYmUgdGFrZW4gZnJvbSByZWNsYWltIC0tIHVubGlrZSByZWd1bGFyIGZpbGVzeXN0ZW1zLiBUaGlzIG5lZWRzIGFuXG5AQCAtOTI2LDggKzgyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgU19JRlJFRzpcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xuK1x0XHRcdGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFNfSUZESVI6XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucztcbkBAIC0xMjA2LDcgKzExMDgsNyBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0LnJlYWRfaXRlclx0XHQ9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsXG4rXHQucmVhZF9pdGVyXHRcdD0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcixcbiBcdC5tbWFwXHRcdFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxuIFx0LmZzeW5jXHRcdFx0PSBub29wX2ZzeW5jLFxuIFx0LmdldF91bm1hcHBlZF9hcmVhXHQ9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjE4Nzg2NDJlNzVlYzUxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTY1LDcgKzE2NSw3IEBAIGJvb2wgaHVnZXRsYmZzX3BhZ2VjYWNoZV9wcmVzZW50KHN0cnVjdCBoc3RhdGUgKmgsXG4gXHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcbiBcbi1zdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuIGV4dGVybiBpbnQgbW92YWJsZV9naWdhbnRpY19wYWdlcyBfX3JlYWRfbW9zdGx5O1xuIGV4dGVybiBpbnQgc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwIF9fcmVhZF9tb3N0bHk7XG5AQCAtMjkyLDggKzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaHVnZXRsYl9mb2xpb19tYXBwaW5nX2xvY2tfd3JpdGUoXG4tXHRcdFx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTU5NSw4ICs1OTQsOCBAQCBlbnVtIGh1Z2V0bGJfcGFnZV9mbGFncyB7XG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiAjZGVmaW5lIFRFU1RIUEFHRUZMQUcodW5hbWUsIGZsbmFtZSlcdFx0XHRcdFxcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdFxcXG4tYm9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbi1cdHtcdHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuK2Jvb2wgZm9saW9fdGVzdF9odWdldGxiXyMjZmxuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuK1x0e1x0Y29uc3Qgdm9pZCAqcHJpdmF0ZSA9IFx1MDAyNmZvbGlvLVx1MDAzZXByaXZhdGU7XHRcdFxcXG4gXHRcdHJldHVybiB0ZXN0X2JpdChIUEdfIyNmbG5hbWUsIHByaXZhdGUpO1x0XHRcXFxuIFx0fVxuIFxuQEAgLTYxNiw3ICs2MTUsNyBAQCB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiAjZWxzZVxuICNkZWZpbmUgVEVTVEhQQUdFRkxBRyh1bmFtZSwgZmxuYW1lKVx0XHRcdFx0XFxcbiBzdGF0aWMgaW5saW5lIGJvb2xcdFx0XHRcdFx0XHRcXFxuLWZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuK2ZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuIFx0eyByZXR1cm4gMDsgfVxuIFxuICNkZWZpbmUgU0VUSFBBR0VGTEFHKHVuYW1lLCBmbG5hbWUpXHRcdFx0XHRcXFxuQEAgLTcyNyw3ICs3MjYsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzdWJwb29sX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gSFVHRVRMQkZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNwb29sO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdldGxiX2ZvbGlvX3N1YnBvb2woY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZm9saW8tXHUwMDNlX2h1Z2V0bGJfc3VicG9vbDtcbiB9XG5AQCAtODU3LDcgKzg1Niw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2hhc19odWdlX2Jvb3RtZW1fYWxsb2Modm9pZClcbiB9XG4gI2VuZGlmXG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpmb2xpb19oc3RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xuIFx0cmV0dXJuIHNpemVfdG9faHN0YXRlKGZvbGlvX3NpemUoZm9saW8pKTtcbkBAIC0xMDcwLDExICsxMDY5LDYgQEAgdm9pZCBodWdldGxiX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuIHZvaWQgaHVnZXRsYl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuICNlbmRpZlxuIFxuLS8qXG4tICogQ2hlY2sgaWYgYSBnaXZlbiByYXcgQHBhZ2UgaW4gYSBodWdlcGFnZSBpcyBIV1BPSVNPTi5cbi0gKi9cbi1ib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcbi1cbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0cmV0dXJuIFBBR0VfTUFTSyBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV9maWxlKGZpbGUpKTtcbkBAIC0xMDg4LDcgKzEwODIsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHVnZV9wYWdlX21hc2tfYWxpZ24oc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqaHVnZXRsYl9mb2xpb19zdWJwb29sKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTExNTcsNyArMTE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxuaW5kZXggYjE4YzJiMmU3ZDJjNjUuLmVkNWMwODI5ZmY1NjlhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbkBAIC0zODcsNyArMzg3LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtbV9pZF90O1xuICAqIEBfaHVnZXRsYl9zdWJwb29sOiBEbyBub3QgdXNlIGRpcmVjdGx5LCB1c2UgYWNjZXNzb3IgaW4gaHVnZXRsYi5oLlxuICAqIEBfaHVnZXRsYl9jZ3JvdXA6IERvIG5vdCB1c2UgZGlyZWN0bHksIHVzZSBhY2Nlc3NvciBpbiBodWdldGxiX2Nncm91cC5oLlxuICAqIEBfaHVnZXRsYl9jZ3JvdXBfcnN2ZDogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGFjY2Vzc29yIGluIGh1Z2V0bGJfY2dyb3VwLmguXG4tICogQF9odWdldGxiX2h3cG9pc29uOiBEbyBub3QgdXNlIGRpcmVjdGx5LCBjYWxsIHJhd19od3BfbGlzdF9oZWFkKCkuXG4gICogQF9kZWZlcnJlZF9saXN0OiBGb2xpb3MgdG8gYmUgc3BsaXQgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuICAqIEBfdW51c2VkX3NsYWJfb2JqX2V4dHM6IFBsYWNlaG9sZGVyIHRvIG1hdGNoIG9ial9leHRzIGluIHN0cnVjdCBzbGFiLlxuICAqXG5AQCAtNDk5LDcgKzQ5OCw2IEBAIHN0cnVjdCBmb2xpbyB7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfc3VicG9vbDtcbiBcdFx0XHR2b2lkICpfaHVnZXRsYl9jZ3JvdXA7XG4gXHRcdFx0dm9pZCAqX2h1Z2V0bGJfY2dyb3VwX3JzdmQ7XG4tXHRcdFx0dm9pZCAqX2h1Z2V0bGJfaHdwb2lzb247XG4gXHQvKiBwcml2YXRlOiB0aGUgdW5pb24gd2l0aCBzdHJ1Y3QgcGFnZSBpcyB0cmFuc2l0aW9uYWwgKi9cbiBcdFx0fTtcbiBcdFx0c3RydWN0IHBhZ2UgX19wYWdlXzM7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggNzIyM2Y2ZjRlMmI0MDMuLjhlNTdjMTJhNzMwMWI0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtMTA2OCw2ICsxMDY4LDkgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxuK2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbitcbiAvKlxuICAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzXG4gICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxuQEAgLTEwNzUsMTggKzEwNzgsMjkgQEAgc3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbitcbitcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuK1x0XHRyZXR1cm4gaHVnZXRsYl9wYWdlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcbitcdHJldHVybiBQYWdlSFdQb2lzb24ocGFnZSk7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBib29sIGh1Z2V0bGJfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuIFxuLVx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4tXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbiB9XG4rI2VuZGlmXG4gXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcbi1cdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbitcdCAgICAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcbiB9XG4gXG4gYm9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmhcbmluZGV4IDJjMzcxOGQ1OTJkNmRkLi5iZDZhNjI3NWE0ZTkxOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBlbnVtIG1hcHBpbmdfZmxhZ3Mge1xuIFx0QVNfV1JJVEVCQUNLX01BWV9ERUFETE9DS19PTl9SRUNMQUlNID0gOSxcbiBcdEFTX0tFUk5FTF9GSUxFID0gMTAsXHQvKiBtYXBwaW5nIGZvciBhIGZha2Uga2VybmVsIGZpbGUgdGhhdCBzaG91bGRuJ3RcbiBcdFx0XHRcdCAgIGFjY291bnQgdXNhZ2UgdG8gdXNlciBjZ3JvdXBzICovXG4rXHRBU19BVVRIT1JJVEFUSVZFID0gMTEsXHQvKiBJZiB3ZSBtaXNzIGluIHRoZSBwYWdlIGNhY2hlLCBpdCdzIGEgaG9sZSAqL1xuIFx0LyogQml0cyAxNi0yNSBhcmUgdXNlZCBmb3IgRk9MSU9fT1JERVIgKi9cbiBcdEFTX0ZPTElPX09SREVSX0JJVFMgPSA1LFxuIFx0QVNfRk9MSU9fT1JERVJfTUlOID0gMTYsXG5AQCAtMzQ1LDYgKzM0NiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFwcGluZ193cml0ZWJhY2tfbWF5X2RlYWRsb2NrX29uX3JlY2xhaW0oY29uc3Qgc3RydWN0IGFkZHJlc1xuIFx0cmV0dXJuIHRlc3RfYml0KEFTX1dSSVRFQkFDS19NQVlfREVBRExPQ0tfT05fUkVDTEFJTSwgXHUwMDI2bWFwcGluZy1cdTAwM2VmbGFncyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9hdXRob3JpdGF0aXZlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuK3tcbitcdHNldF9iaXQoQVNfQVVUSE9SSVRBVElWRSwgXHUwMDI2bWFwcGluZy1cdTAwM2VmbGFncyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4re1xuK1x0cmV0dXJuIHRlc3RfYml0KEFTX0FVVEhPUklUQVRJVkUsIFx1MDAyNm1hcHBpbmctXHUwMDNlZmxhZ3MpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGdmcF90IG1hcHBpbmdfZ2ZwX21hc2soY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0cmV0dXJuIG1hcHBpbmctXHUwMDNlZ2ZwX21hc2s7XG5AQCAtMzczLDcgKzM4NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcbiAgKiBhc3N1bXB0aW9ucyBhYm91dCBtYXhpbXVtIG9yZGVyIGlmIFRIUCBhcmUgZGlzYWJsZWQsIGJ1dCA4IHNlZW1zIGxpa2VcbiAgKiBhIGdvb2Qgb3JkZXIgKHRoYXQncyAxTUIgaWYgeW91J3JlIHVzaW5nIDRrQiBwYWdlcylcbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXG4gI2RlZmluZSBQUkVGRVJSRURfTUFYX1BBR0VDQUNIRV9PUkRFUlx0SFBBR0VfUE1EX09SREVSXG4gI2Vsc2VcbiAjZGVmaW5lIFBSRUZFUlJFRF9NQVhfUEFHRUNBQ0hFX09SREVSXHQ4XG5AQCAtMzk0LDcgKzQwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9nZnBfbWFzayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbSwgZ2ZwX3QgbWFzaylcbiAgKi9cbiBzdGF0aWMgaW5saW5lIHNpemVfdCBtYXBwaW5nX21heF9mb2xpb19zaXplX3N1cHBvcnRlZCh2b2lkKVxuIHtcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRklMRU1BUF9MQVJHRV9GT0xJTykpXG4gXHRcdHJldHVybiAxVSBcdTAwM2NcdTAwM2MgKFBBR0VfU0hJRlQgKyBNQVhfUEFHRUNBQ0hFX09SREVSKTtcbiBcdHJldHVybiBQQUdFX1NJWkU7XG4gfVxuQEAgLTQwNSwyOSArNDE2LDIzIEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG1hcHBpbmdfbWF4X2ZvbGlvX3NpemVfc3VwcG9ydGVkKHZvaWQpXG4gICogQG1pbjogTWluaW11bSBmb2xpbyBvcmRlciAoYmV0d2VlbiAwLU1BWF9QQUdFQ0FDSEVfT1JERVIgaW5jbHVzaXZlKS5cbiAgKiBAbWF4OiBNYXhpbXVtIGZvbGlvIG9yZGVyIChiZXR3ZWVuIEBtaW4tTUFYX1BBR0VDQUNIRV9PUkRFUiBpbmNsdXNpdmUpLlxuICAqXG4tICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3IgdG9cbi0gKiBpbmRpY2F0ZSB3aGljaCBiYXNlIHNpemUgKG1pbikgYW5kIG1heGltdW0gc2l6ZSAobWF4KSBvZiBmb2xpbyB0aGUgVkZTXG4tICogY2FuIHVzZSB0byBjYWNoZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWRcbi0gKiBpZiB0aGUgZmlsZXN5c3RlbSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpc1xuLSAqIHNvbWV0aGluZyB0aGUgY29yZSBjYW5ub3Qga25vdykuXG4rICogVGhlIGZpbGVzeXN0ZW0gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBpdHMgaW5vZGUgY29uc3RydWN0b3JcbisgKiB0byBpbmRpY2F0ZSB3aGljaCBzaXplIGZvbGlvcyBjYW4gYmUgdXNlZCB0byBjYWNoZSB0aGUgY29udGVudHMgb2ZcbisgKiB0aGUgaW5vZGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGZpbGVzeXN0ZW0gbmVlZHMgc3BlY2lhbFxuKyAqIGhhbmRsaW5nIG9mIGZvbGlvIHNpemVzIChpZSB0aGVyZSBpcyBzb21ldGhpbmcgdGhlIGNvcmUgY2Fubm90IGtub3cpLlxuICAqIERvIG5vdCB0dW5lIGl0IGJhc2VkIG9uLCBlZywgaV9zaXplLlxuICAqXG4rICogaHVnZXRsYiBjYWxscyB0aGlzIHdpdGggb3JkZXJzIGxhcmdlciB0aGFuIE1BWF9QQUdFQ0FDSEVfT1JERVIuXG4rICogTm9ybWFsIGZpbGVzeXN0ZW1zIHNob3VsZCBub3QgZG8gdGhpcy5cbisgKlxuICAqIENvbnRleHQ6IFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2hpbGUgdGhlIGlub2RlIGlzIGFjdGl2ZSBhcyBpdFxuICAqIGlzIG5vbi1hdG9taWMuXG4gICovXG4gc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2ZvbGlvX29yZGVyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbWluLFxuLVx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbWF4KVxuK1x0XHR1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm47XG4tXG4tXHRpZiAobWluIFx1MDAzZSBNQVhfUEFHRUNBQ0hFX09SREVSKVxuLVx0XHRtaW4gPSBNQVhfUEFHRUNBQ0hFX09SREVSO1xuLVxuLVx0aWYgKG1heCBcdTAwM2UgTUFYX1BBR0VDQUNIRV9PUkRFUilcbi1cdFx0bWF4ID0gTUFYX1BBR0VDQUNIRV9PUkRFUjtcbi1cbiBcdGlmIChtYXggXHUwMDNjIG1pbilcbiBcdFx0bWF4ID0gbWluO1xuIFxuQEAgLTQ2MCw3ICs0NjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFwcGluZ19zZXRfbGFyZ2VfZm9saW9zKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50XG4gbWFwcGluZ19tYXhfZm9saW9fb3JkZXIoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0ZJTEVNQVBfTEFSR0VfRk9MSU8pKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldHVybiAobWFwcGluZy1cdTAwM2VmbGFncyBcdTAwMjYgQVNfRk9MSU9fT1JERVJfTUFYX01BU0spIFx1MDAzZVx1MDAzZSBBU19GT0xJT19PUkRFUl9NQVg7XG4gfVxuQEAgLTQ2OCw3ICs0NzMsNyBAQCBtYXBwaW5nX21heF9mb2xpb19vcmRlcihjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZylcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludFxuIG1hcHBpbmdfbWluX2ZvbGlvX29yZGVyKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKVxuIHtcbi1cdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gKG1hcHBpbmctXHUwMDNlZmxhZ3MgXHUwMDI2IEFTX0ZPTElPX09SREVSX01JTl9NQVNLKSBcdTAwM2VcdTAwM2UgQVNfRk9MSU9fT1JERVJfTUlOO1xuIH1cbkBAIC01MjQsNyArNTI5LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfbGFyZ2VfZm9saW9fc3VwcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGlcbiAgKlxuICAqIFJldHVybjogVHJ1ZSBpZiBQTUQtc2l6ZWQgZm9saW9zIGFyZSBzdXBwb3J0ZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgKi9cbi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rI2lmZGVmIENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPXG4gc3RhdGljIGlubGluZSBib29sIG1hcHBpbmdfcG1kX2ZvbGlvX3N1cHBvcnQoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpXG4ge1xuIFx0LyogQVNfRk9MSU9fT1JERVIgaXMgb25seSByZWFzb25hYmxlIGZvciBwYWdlY2FjaGUgZm9saW9zICovXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcbmluZGV4IDllMGNhNDgyNDkwNTRmLi45OTJlN2FlMGIyYmYyOSAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbisrKyBiL21tL0tjb25maWdcbkBAIC04NDMsMTEgKzg0MywxNSBAQCBjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbiBjb25maWcgTU1fSURcbiBcdGRlZl9ib29sIG5cbiBcbitjb25maWcgRklMRU1BUF9MQVJHRV9GT0xJT1xuK1x0ZGVmX2Jvb2wgblxuK1xuIG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdGJvb2wgXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCJcbiBcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIFx0c2VsZWN0IENPTVBBQ1RJT05cbiBcdHNlbGVjdCBYQVJSQVlfTVVMVElcbitcdHNlbGVjdCBGSUxFTUFQX0xBUkdFX0ZPTElPXG4gXHRzZWxlY3QgTU1fSURcbiBcdGhlbHBcbiBcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNThlYjlkMjQwNjQzNDguLmY2NjJjZGE4MWRjNzRjIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0yNDgzLDYgKzI0ODMsOCBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2dldF9yZWFkX2JhdGNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFxuIFx0XHRpZiAoIWZvbGlvX2JhdGNoX2FkZChmYmF0Y2gsIGZvbGlvKSlcbiBcdFx0XHRicmVhaztcbitcdFx0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuK1x0XHRcdGJyZWFrO1xuIFx0XHRpZiAoIWZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoZm9saW9fdGVzdF9yZWFkYWhlYWQoZm9saW8pKVxuQEAgLTI2OTUsNiArMjY5Nyw4IEBAIHN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXG4gXHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KGZiYXRjaCkpIHtcbiBcdFx0REVGSU5FX1JFQURBSEVBRChyYWN0bCwgZmlscCwgXHUwMDI2ZmlscC1cdTAwM2VmX3JhLCBtYXBwaW5nLCBpbmRleCk7XG4gXG4rXHRcdGlmIChtYXBwaW5nX2lzX2F1dGhvcml0YXRpdmUobWFwcGluZykpXG4rXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PSU8pXG4gXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVClcbkBAIC0yNzQ5LDYgKzI3NTMsMjkgQEAgc3RhdGljIGlubGluZSBib29sIHBvc19zYW1lX2ZvbGlvKGxvZmZfdCBwb3MxLCBsb2ZmX3QgcG9zMiwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAocG9zMSBcdTAwM2VcdTAwM2Ugc2hpZnQgPT0gcG9zMiBcdTAwM2VcdTAwM2Ugc2hpZnQpO1xuIH1cbiBcbitzdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxuK1x0XHRzaXplX3QgYnl0ZXMpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBvZmZzZXQgLyBQQUdFX1NJWkUpO1xuK1x0c2l6ZV90IHNhZmVfYnl0ZXM7XG4rXG4rXHRpZiAoIWZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuK1x0XHRyZXR1cm4gYnl0ZXM7XG4rXHRpZiAoaXNfcGFnZV9od3BvaXNvbihwYWdlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4rXHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4rXHRwYWdlKys7XG4rXG4rXHQvKiBDaGVjayBlYWNoIHJlbWFpbmluZyBwYWdlIGFzIGxvbmcgYXMgd2UgYXJlIG5vdCBkb25lIHlldC4gKi9cbitcdGZvciAoOyBzYWZlX2J5dGVzIFx1MDAzYyBieXRlczsgc2FmZV9ieXRlcyArPSBQQUdFX1NJWkUsIHBhZ2UrKylcbitcdFx0aWYgKGlzX3BhZ2VfaHdwb2lzb24ocGFnZSkpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRyZXR1cm4gbWluKHNhZmVfYnl0ZXMsIGJ5dGVzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuQEAgLTI4MjgsNiArMjg1NSwyMiBAQCBzc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0XHRnb3RvIHB1dF9mb2xpb3M7XG4gXHRcdGVuZF9vZmZzZXQgPSBtaW5fdChsb2ZmX3QsIGlzaXplLCBpb2NiLVx1MDAzZWtpX3BvcyArIGl0ZXItXHUwMDNlY291bnQpO1xuIFxuK1x0XHRpZiAoIWZvbGlvX2JhdGNoX2NvdW50KFx1MDAyNmZiYXRjaCkpIHtcbitcdFx0XHRzaXplX3QgZnNpemUgPSBtYXBwaW5nX21pbl9mb2xpb19ucmJ5dGVzKG1hcHBpbmcpO1xuK1x0XHRcdHNpemVfdCBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwMjYgKGZzaXplIC0gMSk7XG4rXHRcdFx0c2l6ZV90IGJ5dGVzID0gbWluX3QobG9mZl90LCBlbmRfb2Zmc2V0IC0gaW9jYi1cdTAwM2VraV9wb3MsXG4rXHRcdFx0XHRcdCAgICAgZnNpemUgLSBvZmZzZXQpO1xuK1x0XHRcdHNpemVfdCBjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKGJ5dGVzLCBpdGVyKTtcbitcbitcdFx0XHRhbHJlYWR5X3JlYWQgKz0gY29waWVkO1xuK1x0XHRcdGlvY2ItXHUwMDNla2lfcG9zICs9IGNvcGllZDtcbitcdFx0XHRsYXN0X3BvcyA9IGlvY2ItXHUwMDNla2lfcG9zO1xuK1xuK1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuK1x0XHRcdFx0ZXJyb3IgPSAtRUZBVUxUO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdC8qXG4gXHRcdCAqIE9uY2Ugd2Ugc3RhcnQgY29weWluZyBkYXRhLCB3ZSBkb24ndCB3YW50IHRvIGJlIHRvdWNoaW5nIGFueVxuIFx0XHQgKiBjYWNoZWxpbmVzIHRoYXQgbWlnaHQgYmUgY29udGVuZGVkOlxuQEAgLTI4NjIsMTQgKzI5MDUsMTggQEAgc3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdFx0aWYgKHdyaXRhYmx5X21hcHBlZClcbiBcdFx0XHRcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4gXG4tXHRcdFx0Y29waWVkID0gY29weV9mb2xpb190b19pdGVyKGZvbGlvLCBvZmZzZXQsIGJ5dGVzLCBpdGVyKTtcbitcdFx0XHRjb3BpZWQgPSBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xuK1x0XHRcdGlmIChjb3BpZWQgXHUwMDNjIGJ5dGVzKVxuK1x0XHRcdFx0ZXJyb3IgPSAtRUlPO1xuK1x0XHRcdGNvcGllZCA9IGNvcHlfZm9saW9fdG9faXRlcihmb2xpbywgb2Zmc2V0LCBjb3BpZWQsIGl0ZXIpO1xuIFxuIFx0XHRcdGFscmVhZHlfcmVhZCArPSBjb3BpZWQ7XG4gXHRcdFx0aW9jYi1cdTAwM2VraV9wb3MgKz0gY29waWVkO1xuIFx0XHRcdGxhc3RfcG9zID0gaW9jYi1cdTAwM2VraV9wb3M7XG4gXG4gXHRcdFx0aWYgKGNvcGllZCBcdTAwM2MgYnl0ZXMpIHtcbi1cdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbitcdFx0XHRcdGlmICghZXJyb3IpXG4rXHRcdFx0XHRcdGVycm9yID0gLUVGQVVMVDtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uMzUzMzQwMzA5MTA3NGMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDQxMyw3ICs0NDEzLDcgQEAgc3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSA9PSBIUEFHRV9QTURfTlIgLSAxKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuK1x0aWYgKGZvbGlvX2hhc19od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkrKykge1xuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNTcxMjEyYjgwODM1ZWMuLmNjOGQ5ODM5OTkxM2UzIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0xNzc1LDcgKzE3NzUsNyBAQCB2b2lkIGluaXRfbmV3X2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBzdGFibGUuICBEdWUgdG8gbG9ja2luZyBvcmRlciwgd2UgY2FuIG9ubHkgdHJ5bG9ja193cml0ZS4gIElmIHdlIGNhblxuICAqIG5vdCBnZXQgdGhlIGxvY2ssIHNpbXBseSByZXR1cm4gTlVMTCB0byBjYWxsZXIuXG4gICovXG4tc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmh1Z2V0bGJfZm9saW9fbWFwcGluZ19sb2NrX3dyaXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NWUuLjllNGVlNWQ5MzkwNTA2IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTQzLDYgKzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaGFzaHRhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5AQCAtMTgwOCwzMyArMTgwOSwyNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtZl9kYXhfa2lsbF9wcm9jcyk7XG4gXG4gI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBcbi0vKlxuLSAqIFN0cnVjdCByYXdfaHdwX3BhZ2UgcmVwcmVzZW50cyBpbmZvcm1hdGlvbiBhYm91dCBcInJhdyBlcnJvciBwYWdlXCIsXG4tICogY29uc3RydWN0aW5nIHNpbmdseSBsaW5rZWQgbGlzdCBmcm9tIC1cdTAwM2VfaHVnZXRsYl9od3BvaXNvbiBmaWVsZCBvZiBmb2xpby5cbi0gKi9cbi1zdHJ1Y3QgcmF3X2h3cF9wYWdlIHtcbi1cdHN0cnVjdCBsbGlzdF9ub2RlIG5vZGU7XG4rLyogUHJvdGVjdHMgaHVnZXRsYl9od3BvaXNvbiBsaXN0ICovXG4rc3RhdGljIERFRklORV9TUElOTE9DSyhodGxiX2h3cG9pc29uX2xvY2spO1xuK3N0YXRpYyBERUZJTkVfSEFTSFRBQkxFKGh0bGJfaHdwb2lzb24sIDUpO1xuK1xuK3N0cnVjdCBod3BfcGFnZSB7XG4rXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2xpc3RfaGVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHJldHVybiAoc3RydWN0IGxsaXN0X2hlYWQgKilcdTAwMjZmb2xpby1cdTAwM2VfaHVnZXRsYl9od3BvaXNvbjtcbi19XG4tXG4tYm9vbCBpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbisvKlxuKyAqIENoZWNrIGlmIGEgZ2l2ZW4gQHBhZ2UgaW4gYSBodWdldGxiIGZvbGlvIGlzIEhXUE9JU09OLlxuKyAqL1xuK2Jvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHN0cnVjdCBsbGlzdF9oZWFkICpyYXdfaHdwX2hlYWQ7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwO1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4rXHRjb25zdCBzdHJ1Y3QgaHdwX3BhZ2UgKnA7XG4gXHRib29sIHJldCA9IGZhbHNlO1xuIFxuIFx0aWYgKCFmb2xpb190ZXN0X2h3cG9pc29uKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxuLVx0XHRyZXR1cm4gUGFnZUhXUG9pc29uKHBhZ2UpO1xuLVxuIFx0LypcbiBcdCAqIFdoZW4gUmF3SHdwVW5yZWxpYWJsZSBpcyBzZXQsIGtlcm5lbCBsb3N0IHRyYWNrIG9mIHdoaWNoIHN1YnBhZ2VzXG4gXHQgKiBhcmUgSFdQT0lTT04uIFNvIHJldHVybiBhcyBpZiBBTEwgc3VicGFnZXMgYXJlIEhXUE9JU09OZWQuXG5AQCAtMTg0MiwzNiArMTgzNiwzOSBAQCBib29sIGlzX3Jhd19od3BvaXNvbl9wYWdlX2luX2h1Z2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bWZfbXV0ZXgpO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XG4gXG4tXHRyYXdfaHdwX2hlYWQgPSByYXdfaHdwX2xpc3RfaGVhZChmb2xpbyk7XG4tXHRsbGlzdF9mb3JfZWFjaF9lbnRyeShwLCByYXdfaHdwX2hlYWQtXHUwMDNlZmlyc3QsIG5vZGUpIHtcbitcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUoaHRsYl9od3BvaXNvbiwgcCwgbm9kZSwgKHVuc2lnbmVkIGxvbmcpcGFnZSkge1xuIFx0XHRpZiAocGFnZSA9PSBwLVx1MDAzZXBhZ2UpIHtcbiBcdFx0XHRyZXQgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2bWZfbXV0ZXgpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4ge1xuLVx0c3RydWN0IGxsaXN0X25vZGUgKmhlYWQ7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpwLCAqbmV4dDtcbitcdGludCBiO1xuK1x0c3RydWN0IGh3cF9wYWdlICpwO1xuK1x0c3RydWN0IGhsaXN0X25vZGUgKnRtcDtcbiBcdHVuc2lnbmVkIGxvbmcgY291bnQgPSAwO1xuIFxuLVx0aGVhZCA9IGxsaXN0X2RlbF9hbGwocmF3X2h3cF9saXN0X2hlYWQoZm9saW8pKTtcbi1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbmV4dCwgaGVhZCwgbm9kZSkge1xuK1x0aGFzaF9mb3JfZWFjaF9zYWZlKGh0bGJfaHdwb2lzb24sIGIsIHRtcCwgcCwgbm9kZSkge1xuK1x0XHRpZiAocGFnZV9mb2xpbyhwLVx1MDAzZXBhZ2UpICE9IGZvbGlvKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAobW92ZV9mbGFnKVxuIFx0XHRcdFNldFBhZ2VIV1BvaXNvbihwLVx1MDAzZXBhZ2UpO1xuIFx0XHRlbHNlXG4gXHRcdFx0bnVtX3BvaXNvbmVkX3BhZ2VzX3N1YihwYWdlX3RvX3BmbihwLVx1MDAzZXBhZ2UpLCAxKTtcbitcdFx0aGFzaF9kZWwoXHUwMDI2cC1cdTAwM2Vub2RlKTtcbiBcdFx0a2ZyZWUocCk7XG4gXHRcdGNvdW50Kys7XG4gXHR9XG4rXG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuQEAgLTE4ODcsOSArMTg4NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9yYXdfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxuICAqL1xuIHN0YXRpYyBpbnQgaHVnZXRsYl91cGRhdGVfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0c3RydWN0IGxsaXN0X2hlYWQgKmhlYWQ7XG4tXHRzdHJ1Y3QgcmF3X2h3cF9wYWdlICpyYXdfaHdwO1xuLVx0c3RydWN0IHJhd19od3BfcGFnZSAqcDtcbitcdHN0cnVjdCBod3BfcGFnZSAqcDtcbiBcdGludCByZXQgPSBmb2xpb190ZXN0X3NldF9od3BvaXNvbihmb2xpbykgPyBNRl9IVUdFVExCX0ZPTElPX1BSRV9QT0lTT05FRCA6IDA7XG4gXG4gXHQvKlxuQEAgLTE4OTksMTYgKzE4OTQsMTggQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdCAqL1xuIFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYl9yYXdfaHdwX3VucmVsaWFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm4gTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ7XG4tXHRoZWFkID0gcmF3X2h3cF9saXN0X2hlYWQoZm9saW8pO1xuLVx0bGxpc3RfZm9yX2VhY2hfZW50cnkocCwgaGVhZC1cdTAwM2VmaXJzdCwgbm9kZSkge1xuLVx0XHRpZiAocC1cdTAwM2VwYWdlID09IHBhZ2UpXG4rXHRzcGluX2xvY2soXHUwMDI2aHRsYl9od3BvaXNvbl9sb2NrKTtcbitcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUoaHRsYl9od3BvaXNvbiwgcCwgbm9kZSwgKHVuc2lnbmVkIGxvbmcpcGFnZSkge1xuK1x0XHRpZiAocC1cdTAwM2VwYWdlID09IHBhZ2UpIHtcbitcdFx0XHRzcGluX3VubG9jayhcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xuIFx0XHRcdHJldHVybiBNRl9IVUdFVExCX1BBR0VfUFJFX1BPSVNPTkVEO1xuK1x0XHR9XG4gXHR9XG4gXG4tXHRyYXdfaHdwID0ga21hbGxvY19vYmooc3RydWN0IHJhd19od3BfcGFnZSwgR0ZQX0FUT01JQyk7XG4tXHRpZiAocmF3X2h3cCkge1xuLVx0XHRyYXdfaHdwLVx1MDAzZXBhZ2UgPSBwYWdlO1xuLVx0XHRsbGlzdF9hZGQoXHUwMDI2cmF3X2h3cC1cdTAwM2Vub2RlLCBoZWFkKTtcbitcdHAgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHdwX3BhZ2UsIEdGUF9BVE9NSUMpO1xuK1x0aWYgKHApIHtcbitcdFx0cC1cdTAwM2VwYWdlID0gcGFnZTtcbitcdFx0aGFzaF9hZGQoaHRsYl9od3BvaXNvbiwgXHUwMDI2cC1cdTAwM2Vub2RlLCAodW5zaWduZWQgbG9uZylwYWdlKTtcbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIEZhaWxlZCB0byBzYXZlIHJhdyBlcnJvciBpbmZvLiAgV2Ugbm8gbG9uZ2VyIHRyYWNlIGFsbFxuQEAgLTE5MjAsMTMgKzE5MTcsMTUgQEAgc3RhdGljIGludCBodWdldGxiX3VwZGF0ZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdFx0ICogT25jZSBodWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZSBpcyBzZXQsIHJhd19od3BfcGFnZSBpcyBub3RcbiBcdFx0ICogdXNlZCBhbnkgbW9yZSwgc28gZnJlZSBpdC5cbiBcdFx0ICovXG4tXHRcdF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBmYWxzZSk7XG4rXHRcdF9fZm9saW9fZnJlZV9od3AoZm9saW8sIGZhbHNlKTtcbiBcdH1cbitcdHNwaW5fdW5sb2NrKFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBjb3VudDtcbiBcdC8qXG4gXHQgKiBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVkIGh1Z2VwYWdlcyBjYW4ndCBiZSBmcmVlZCBiZWNhdXNlIHN0cnVjdFxuIFx0ICogcGFnZXMgZm9yIHRhaWwgcGFnZXMgYXJlIHJlcXVpcmVkIGJ1dCB0aGV5IGRvbid0IGV4aXN0LlxuQEAgLTE5NDEsNyArMTk0MCwxMCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXG4gXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3Jhd19od3BfdW5yZWxpYWJsZShmb2xpbykpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIF9fZm9saW9fZnJlZV9yYXdfaHdwKGZvbGlvLCBtb3ZlX2ZsYWcpO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmh0bGJfaHdwb2lzb25fbG9jayk7XG4rXHRjb3VudCA9IF9fZm9saW9fZnJlZV9od3AoZm9saW8sIG1vdmVfZmxhZyk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xuK1x0cmV0dXJuIGNvdW50O1xuIH1cbiBcbiB2b2lkIGZvbGlvX2NsZWFyX2h1Z2V0bGJfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbylcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMjQuLjMzMDA3ZThlNTQ2YTA5IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTE4MTMsNyArMTgxMyw3IEBAIHN0YXRpYyB2b2lkIGRvX21pZ3JhdGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiBcdFx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxuIFx0XHRcdHBmbiA9IGZvbGlvX3Bmbihmb2xpbykgKyBmb2xpb19ucl9wYWdlcyhmb2xpbykgLSAxO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW5ub3QgaGFuZGxlIGxhcmdlIGZvbGlvc1xuIFx0XHRcdCAqIGluIGFsbCBjYXNlcyB5ZXQuXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcbmluZGV4IGI1MWY4M2M5NzBiYjM3Li40OTJjOWJlZjM2MjA3NCAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0zMjQwLDcgKzMyNDAsNyBAQCBzaG1lbV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcbitcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFx0XHRyZXR1cm4gLUVJTztcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAzNWMzYmIxNWFlOTZhMy4uNzBlNTRhY2UwZTc0MWMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xMDg2LDcgKzEwODYsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4gXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG4gXHRcdFx0Z290byBrZWVwO1xuIFxuLVx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG4rXHRcdGlmIChmb2xpb19oYXNfaHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogdW5tYXBfcG9pc29uZWRfZm9saW8oKSBjYW4ndCBoYW5kbGUgbGFyZ2VcbiBcdFx0XHQgKiBmb2xpbywganVzdCBza2lwIGl0LiBtZW1vcnlfZmFpbHVyZSgpIHdpbGxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA0OjA0OjE5LjU5NzA5NjIyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MjQyOTQ0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIGh1Z2V0bGJmcyBSZWFkIEltcGxlbWVudGF0aW9uIGFuZCBNZW1vcnktRmFpbHVyZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBzaWduaWZpY2FudGx5IGltcGFjdHMgaG93IGh1Z2V0bGJmcyByZWFkcyBhcmUgaGFuZGxlZCwgYWxvbmcgd2l0aCBob3cgbWVtb3J5IGZhaWx1cmVzIGFyZSBtYW5hZ2VkLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgaHVnZXRsYmZzX3JlYWRfaXRlcmAgYWx0b2dldGhlciwgcmVwbGFjaW5nIGl0IHdpdGggdGhlIG1vcmUgZ2VuZXJhbCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIFRoYXQncyBhIHByZXR0eSBzdWJzdGFudGlhbCBhcmNoaXRlY3R1cmFsIGNoYW5nZS4gSSBhbHNvIHNlZSB0aGF0IGl0IGludHJvZHVjZXMgYSBgRklMRU1BUF9MQVJHRV9GT0xJT2AgY29uZmlnIG9wdGlvbiwgd2hpY2ggaXMgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYEhVR0VUTEJfUEFHRWAgb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhcmUgc2V0LiBJbnRlcmVzdGluZy4gQW5kIGl0IGFsc28gc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGBmaWxlbWFwX3JlYWRgIHRvIHNwZWNpZmljYWxseSBhY2NvdW50IGZvciBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcyB1c2luZyBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCwgYWxvbmcgd2l0aCBjaGFuZ2luZyBgaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2VgIHRvIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gIGFuZCB1c2luZyBhIGhhc2ggdGFibGUuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdDogZG9lcyB0aGlzIGV2ZW4gKndvcmsqPyBZZXMsIHRoaXMgZGVmaW5pdGVseSB0b3VjaGVzIG9uIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGh1Z2V0bGJmcyByZWFkIHBhdGhzLiBBbmQgSSBjYW4gdGVsbCB0aGlzIHBhdGNoIGlzIGNlcnRhaW5seSB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHNvbWUgY3J1Y2lhbCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBgZmlsZW1hcF9yZWFkYCBsb29rcyBsaWtlIGEgaG90IHBhdGgsIGJ1dCBpdCdzIGJlZW4gY2hhbmdlZCBoZXJlLCBzbyB0aGF0J3MgZGVmaW5pdGVseSBhIGdvb2Qgb25lLiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCBzZWVtcyBsaWtlIGFub3RoZXIgc3Ryb25nIGNhbmRpZGF0ZS4gQW5kIHNpbmNlIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGBtbS9maWxlbWFwLmNgLCBpdCdzIHdvcnRoIHRha2luZyBhIGNsb3NlciBsb29rIGF0IHdoYXQgb3RoZXIgZnVuY3Rpb25zIGl0IGludGVyYWN0cyB3aXRoLiBBZGRpdGlvbmFsbHksIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYCBhbmQgYGZvbGlvX2ZyZWVfcmF3X2h3cGAgYXJlIGFsc28gc3RhdGljLCBzbyBJIHdpbGwgaW52ZXN0aWdhdGUgdGhlc2UgdG9vLlxuXG5MZXQncyBkaXZlIGludG8gYG1tL2ZpbGVtYXAuY2AgdG8gc2VlIGhvdyBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyB1c2VkLiBJIHNlZSB0aGF0IGl0IGlzIGNhbGxlZCBieSBgZmlsZW1hcF9yZWFkYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIElzIGl0IHVzZWQgYnkgYW55IG90aGVyIGZ1bmN0aW9ucz8gQWxzbyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIEkgbm90aWNlIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgYW5kIGBfX2ZvbGlvX2ZyZWVfaHdwYC4gQWxsIG9mIHRoZXNlIGNvdWxkIGJlIHRhcmdldHMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucy4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQ09ORklHX0hVR0VUTEJfUEFHRWAsIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLCBhbmQgYENPTkZJR19GSUxFTUFQX0xBUkdFX0ZPTElPYCAod2hpY2ggaXMgZW5hYmxlZCBieSB0aGUgZmlyc3QgdHdvKS5cblxuQWxyaWdodCwgSSdsbCB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGdldCB0aGUgZXhhY3QgZnVuY3Rpb24gbmFtZXMgYW5kIGdldCBhIGNsZWFyZXIgdmlldyBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk1OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA0OjA0OjI3LjUyMTM5Mjc0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTA2NTU1ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfcGFnZV9od3BvaXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDY2PXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNzEtI2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNzI6Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNzMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDc5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA4My1cXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDg0OlxcdFxcdHJldHVybiBodWdldGxiX3BhZ2VfaHdwb2lzb24oZm9saW8sIHBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwODUtXFx0cmV0dXJuIFBhZ2VIV1BvaXNvbihwYWdlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwODctI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDg4OnN0YXRpYyBpbmxpbmUgYm9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDg5LVxcdFxcdGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xODE2PXN0cnVjdCBod3BfcGFnZSB7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4MjMtICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxODI0OmJvb2wgaHVnZXRsYl9wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTgyNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA0OjA0OjMyLjQyNzk1NTc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4MDA5NzgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBNZW1vcnkgQ29ycnVwdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUtaW5kdWNlZCBtZW1vcnkgY29ycnVwdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHRoaXMgYXQgdGhlIGZpbGVtYXAgbGV2ZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG1tL2ZpbGVtYXAuY2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGJlY2F1c2UgZmlsZW1hcHMgYXJlIGZ1bmRhbWVudGFsbHkgbGlua2VkIHRvIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgcGFnZS1iYWNrZWQgZmlsZXMgYW5kLCBjcml0aWNhbGx5LCBob3cgaXQgaGFuZGxlcyBJL08uIEdpdmVuIHRoZSBrZXl3b3JkIFwiYWRqdXN0X3JhbmdlX2h3cG9pc29uXCIsIG15IGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBvciBvbmUgY2xvc2VseSByZWxhdGVkIHRvIGl0LCB3aWxsIGJlIGNyaXRpY2FsIGluIG1hcmtpbmcgYSByZWdpb24gb2YgYSBmaWxlbWFwIGFzIGNvcnJ1cHRlZCBhbmQgcG90ZW50aWFsbHkgcHJldmVudGluZyBmdXJ0aGVyIGFjY2VzcyBvciBwcm9wYWdhdGluZyB0aGUgZXJyb3Igc2lnbmFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoZXJlIHRoZSBrZXJuZWwncyB0YWtpbmcgYWN0aW9uIGhlcmUuIEknbSBob3BpbmcgSSBjYW4gcGllY2UgdG9nZXRoZXIgdGhlIGNhbGxpbmcgY29udGV4dCBhbmQgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gZ2V0IGEgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGUgc3lzdGVtIHJlc3BvbmRzIHRvIHRoaXMgc3BlY2lmaWMgdHlwZSBvZiBmYXVsdC4gTGV0J3MgZ2V0IGNyYWNraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQzMSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA0OjA0OjM1LjkwODA1NjUxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODgwNjk2MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkanVzdF9yYW5nZV9od3BvaXNvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9Mjc0OT1zdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTI3NTUtXFxubW0vZmlsZW1hcC5jOjI3NTY6c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcXG5tbS9maWxlbWFwLmMtMjc1Ny1cXHRcXHRzaXplX3QgYnl0ZXMpXFxuLS1cXG5tbS9maWxlbWFwLmM9MjgwND1zc2l6ZV90IGZpbGVtYXBfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yOTA3LVxcbm1tL2ZpbGVtYXAuYzoyOTA4OlxcdFxcdFxcdGNvcGllZCA9IGFkanVzdF9yYW5nZV9od3BvaXNvbihmb2xpbywgb2Zmc2V0LCBieXRlcyk7XFxubW0vZmlsZW1hcC5jLTI5MDktXFx0XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNjIGJ5dGVzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNDozNy43ODg3NTgwMDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQwOTU2NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gSHVnZVRMQiBIYXJkd2FyZSBQb2lzb25pbmcgXHUwMDI2IEZvbGlvIEZyZWVpbmcqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGhvdyB3ZSdyZSBoYW5kbGluZyBoYXJkd2FyZSBwb2lzb25pbmcgd2l0aGluIHRoZSBIdWdlVExCIHN5c3RlbS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaW52b2x2ZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgd2UgcmVhY3QgdG8gaGFyZHdhcmUtaW5kdWNlZCBlcnJvcnMuIFNvLCBJIG5lZWQgdG8gY2hlY2sgYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgYW5kLCB2ZXJ5IGltcG9ydGFudGx5LCBob3cgdGhhdCBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBgX19mb2xpb19mcmVlX2h3cGAuIFRoaXMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byBob3cgd2UgZGV0ZWN0IHRoZSBjb3JydXB0aW9uIGFuZCwgY3J1Y2lhbGx5LCBob3cgd2UgaGFuZGxlIGZyZWVpbmcgdGhlIGZvbGlvIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycnVwdGVkIHBhZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nIGFuZCBpbnRlcmFjdGlvbnMgaGVyZSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGZ1cnRoZXIgY29ycnVwdGlvbiBhZnRlciBhIGhhcmR3YXJlIGZhdWx0LiBNeSBtYWluIG9iamVjdGl2ZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBlcnJvciBoYW5kbGluZyB3b3JrZmxvdyB3aGVuIGRlYWxpbmcgd2l0aCBwb2lzb25lZCBIdWdlVExCIHBhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwNywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA0OjA0OjQxLjYyOTcxNzIxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1NTg0MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmM9MTg1Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZvbGlvX2ZyZWVfaHdwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgbW92ZV9mbGFnKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODg0LSAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTg4NTpzdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTg4Ni17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE5NTk9c3RhdGljIGludCBnZXRfaHVnZV9wYWdlX2Zvcl9od3BvaXNvbih1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTg5LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTk5MDpcXHRyYyA9IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKGZvbGlvLCBwYWdlKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5OTEtXFx0aWYgKHJjIFxcdTAwM2U9IE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA0OjA0OjQzLjMwNTMwNzA4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTc0NDg2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gYSBQb3RlbnRpYWwgTWVtb3J5IElzc3VlKipcblxuT2theSwgc28gd2UndmUgZ290IGEgc3VzcGVjdGVkIG1lbW9yeSBmYWlsdXJlIG9uIG91ciBoYW5kcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgZGlyZWN0bHkgaW50byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRoZSBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGBfX2ZvbGlvX2ZyZWVfaHdwYCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGhhcmR3YXJlIHBhZ2UgdGFibGUgZW50cmllcywgYW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yLCBpdCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBvaW50IHdoZXJlIHRoZSBwcm9ibGVtIG1pZ2h0IGJlIG9yaWdpbmF0aW5nIG9yIGJlaW5nIHByb3BhZ2F0ZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8gZGF0YSBzdHJ1Y3R1cmUgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHBvdGVudGlhbCBoYXJkd2FyZSBlcnJvcnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNDo0Ni43MjI3NTc3MjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzIxMTMyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19mb2xpb19mcmVlX2h3cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTE4MjQ9Ym9vbCBodWdldGxiX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE4NTItXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxODUzOnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fZm9saW9fZnJlZV9od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xODU0LXtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTg4NT1zdGF0aWMgaW50IGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTE5LVxcdFxcdCAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTkyMDpcXHRcXHRfX2ZvbGlvX2ZyZWVfaHdwKGZvbGlvLCBmYWxzZSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTIxLVxcdH1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTkyNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBmb2xpb19mcmVlX3Jhd19od3Aoc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBtb3ZlX2ZsYWcpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE5NDMtXFx0c3Bpbl9sb2NrKFxcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTk0NDpcXHRjb3VudCA9IF9fZm9saW9fZnJlZV9od3AoZm9saW8sIG1vdmVfZmxhZyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xOTQ1LVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZodGxiX2h3cG9pc29uX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNDo0OC40NTQ4NzY5NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzEzMTc5MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBodWdldGxiZnMgaW5vZGUgaW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYCBhbmQgSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGF0IGRvZXMgZXhhY3RseS4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB3aGVyZSBJJ2QgZ28gaW1tZWRpYXRlbHksIGlzIHRvIGNoZWNrIGBmcy9odWdldGxiZnMvaW5vZGUuY2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMgb2YgaG93IHJlZ3VsYXIgaW5vZGVzIGFyZSBpbml0aWFsaXplZCB3aXRoaW4gdGhlIGh1Z2V0bGJmcyBmaWxlc3lzdGVtLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlOlxuXG4qICAgSG93IGFyZSB0aGUgaW5vZGUncyBkYXRhIHN0cnVjdHVyZXMgcG9wdWxhdGVkPyBBcmUgd2UgdGFsa2luZyBhYm91dCB2ZnNfaW5vZGUgZGF0YSwgb3IgaXMgdGhlcmUgaHVnZXRsYmZzLXNwZWNpZmljIG1ldGFkYXRhIHRvbz9cbiogICBXaGF0IGhhcHBlbnMgdG8gYmxvY2sgYWxsb2NhdGlvbiwgb3IgaXMgaXQgcGFnZS1iYXNlZCBnaXZlbiB0aGUgbmF0dXJlIG9mIGh1Z2UgcGFnZXM/XG4qICAgQW55IGhvb2tzIGZvciBzZWN1cml0eSBhdHRyaWJ1dGVzLCBleHRlbmRlZCBhdHRyaWJ1dGVzLCBvciBvdGhlciByZWxldmFudCBmZWF0dXJlcz9cblxuSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGVyZS4gVGltZSB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0sIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBpbml0aWFsaXphdGlvbiBmbG93IGlzIGNydWNpYWwgdG8gdGhlIG92ZXJhbGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NTMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNDo1Mi4xNjgwNjA1ODVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDMwNTQ5ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9odWdldGxiZnMvaW5vZGUuYz03NTc9c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03NzgtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Nzc5OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYy03ODAte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzk3PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMS1cXHRcXHRjYXNlIFNfSUZSRUc6XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODMyOlxcdFxcdFxcdGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGUoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMy1cXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDQ6MDQ6NTQuMTcxMTIyNzkyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MzU0OTIxMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdldGxiZnMgUmVhZC9NZW1vcnkgRmFpbHVyZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGltcHJvdmluZyBob3cgd2UgaGFuZGxlIHJlYWQgYW5kIG1lbW9yeSBmYWlsdXJlcyB3aXRoaW4gaHVnZXRsYiBwYWdlcy4gTXkgaW5pdGlhbCBzY2FuIGZvY3VzZXMgb24gYSBmZXcga2V5IHN5bWJvbHM6IGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCwgYGh1Z2V0bGJfdXBkYXRlX2h3cG9pc29uYCwgYF9fZm9saW9fZnJlZV9od3BgLCBhbmQgYGh1Z2V0bGJmc19pbml0X3JlZ3VsYXJfaW5vZGVgLiBUaGVzZSBzZWVtIGNlbnRyYWwgdG8gdGhlIGNvcmUgbG9naWMsIHNvIEknbGwga2VlcCBhbiBleWUgb24gaG93IHRoZSBjaGFuZ2VzIGltcGFjdCB0aGVtIHNwZWNpZmljYWxseS5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byB0aGUgY29uZmlndXJhdGlvbnMuIFRoZSB0ZXh0IGxpc3RzIGBIVUdFVExCRlNgLCBgSFVHRVRMQl9QQUdFYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEFoLCBidXQgd2FpdCBhIG1pbnV0ZeKApiBJIHNlZSBgRklMRU1BUF9MQVJHRV9GT0xJT2AgaXMgYSAqc2lsZW50KiBjb25maWcsIHNlbGVjdGVkIGJ5IGBIVUdFVExCX1BBR0VgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBJdCBtZWFucyB3ZSBvbmx5IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgYEhVR0VUTEJGU2AsIGBIVUdFVExCX1BBR0VgLCBhbmQgYE1FTU9SWV9GQUlMVVJFYC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGlzLCBidXQgaXQgc2VlbXMgY29ycmVjdC4gV2UgY2FuIHZlcmlmeSBpZiB0aG9zZSBhcmUgdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3MgZm9yIHRoaXMgbmV3IHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ4MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNDo1OC44MDY2MTg3MjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDYxNDY3MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2VcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cXHRib29sIFxcXCI2NGtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cXHRib29sIFxcXCIyNTZrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cXHRib29sIFxcXCIxTUJcXFwiXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIjRNQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXFx0Ym9vbCBcXFwiNjRNQlxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuLS1cXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjcyLVxcbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcXG5mcy9LY29uZmlnLTI3NC1cXHRkZWZfYm9vbCBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjc3LVxcbmZzL0tjb25maWc6Mjc4OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjc5LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxuZnMvS2NvbmZpZy0yODMtXFxuZnMvS2NvbmZpZzoyODQ6Y29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xcbmZzL0tjb25maWctMjg1LVxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbi0tXFxubW0vS2NvbmZpZz03MDY9Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNzA4LVxcbm1tL0tjb25maWc6NzA5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNzEwLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDQ6MDU6MDAuNTUyNzcxOTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NjIwNzE2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYW5kIENvbm5lY3RpbmcgSFdQb2lzb24gRnVuY3Rpb25zIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlc2UgaGFyZHdhcmUgcG9pc29uIGZ1bmN0aW9ucyBhcmUgd2lyZWQgdG9nZXRoZXIsIHNwZWNpZmljYWxseSB3aXRoIGBIVUdFVExCRlNgIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQuIExldCdzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW5zLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5IG9mIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBmaWxlbWFwX3JlYWRgLCB3aGljaCBpcyB0aGUgZ2VuZXJpYyByZWFkIGl0ZXJhdG9yLiBgZmlsZW1hcF9yZWFkYCBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyYC4gTG9va2luZyBhdCB0aGUgYGh1Z2V0bGJmc2AgZmlsZSBvcGVyYXRpb25zLCB0aGUgYHJlYWRfaXRlcmAgZnVuY3Rpb24gaXMsIHJpZ2h0IG5vdywganVzdCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAuIFNvLCB0aGF0IGNvbmZpcm1zIHRoZSBmaXJzdCBwYXJ0LiBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuTmV4dCwgYGh1Z2V0bGJfcGFnZV9od3BvaXNvbmAuIFRoaXMgb25lIGlzIGNhbGxlZCBieSBgaXNfcGFnZV9od3BvaXNvbmAgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgd2hpY2ggaXMgaXRzZWxmIGNhbGxlZCBmcm9tIGBhZGp1c3RfcmFuZ2VfaHdwb2lzb25gLiBHb29kLCB0aGUgY29ubmVjdGlvbiBpcyB0aGVyZS5cblxuTm93IGZvciBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgZnJvbSBgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb25gIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgZnJvbSBgbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYmAuXG5cbkFuZCBmaW5hbGx5LCBgX19mb2xpb19mcmVlX2h3cGAuIFRoaXMgb25lIGdldHMgY2FsbGVkIGZyb20gYm90aCBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gIGFuZCBgZm9saW9fZnJlZV9yYXdfaHdwYC4gYGZvbGlvX2ZyZWVfcmF3X2h3cGAgaXMgY2FsbGVkIGZyb20gYGZyZWVfaHVnZV9mb2xpb2AgaW4gYG1tL2h1Z2V0bGIuY2AuXG5cbk9rYXksIGFsbCB0aG9zZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBhbmQgc2VlbSB0byBiZSBjb25uZWN0ZWQgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJ20gY2xlYXIgb24gdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucywgSSBuZWVkIHRvIGtlZXAgYSBmZXcgaW4gbWluZDogYGFkanVzdF9yYW5nZV9od3BvaXNvbmAsIGBodWdldGxiX3BhZ2VfaHdwb2lzb25gLCBgaHVnZXRsYl91cGRhdGVfaHdwb2lzb25gLCBhbmQgYF9fZm9saW9fZnJlZV9od3BgLCBhcyB3ZWxsIGFzIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYC5cblxuQWgsIHJpZ2h0LCBgYWRqdXN0X3JhbmdlX2h3cG9pc29uYCBpcyBzdGF0aWMgd2l0aGluIGBtbS9maWxlbWFwLmNgLiBgaHVnZXRsYl9wYWdlX2h3cG9pc29uYCBpcyBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGBodWdldGxiX3VwZGF0ZV9od3BvaXNvbmAgaXMgc3RhdGljIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBhcyB3ZWxsLCBhcyBpcyBgX19mb2xpb19mcmVlX2h3cGAuIEZpbmFsbHksIGBodWdldGxiZnNfaW5pdF9yZWd1bGFyX2lub2RlYCBpcyBzdGF0aWMgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC5cblxuTGV0IG1lIGFkZCBvbmUgbW9yZSB0aGluZyB0byB0aGUgbGlzdCB0byBjb25maXJtIC0gSSBzaG91bGQgY2hlY2sgaWYgYEZJTEVNQVBfTEFSR0VfRk9MSU9gIGlzIGEgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MDcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDQ6MDU6MDguMDE0ODQ1ODdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzk2MDMyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZJTEVNQVBfTEFSR0VfRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04NDM9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTg0NS1cXG5tbS9LY29uZmlnOjg0Njpjb25maWcgRklMRU1BUF9MQVJHRV9GT0xJT1xcbm1tL0tjb25maWctODQ3LVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDQ6MDU6MDkuNjk0NDUzODEyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzgzNDI3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIGBGSUxFTUFQX0xBUkdFX0ZPTElPYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBGSUxFTUFQX0xBUkdFX0ZPTElPYCBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBidXQgaXQncyBub3QgZGlyZWN0bHkgc2VsZWN0YWJsZSBieSB0aGUgdXNlciwgcmlnaHQ/IEl0J3MgbW9yZSBvZiBhbiAqaW1wbGljaXQqIGNob2ljZSBiYXNlZCBvbiBvdGhlciBzZXR0aW5ncy4gSXQncyB0cmlnZ2VyZWQgYnkgdGhlIGVuYWJsaW5nIG9mIGBIVUdFVExCX1BBR0VgIGFuZCwgaW4gdHVybiwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBzZWUuIFNvIGl0J3MgYSBzb3J0IG9mIGRlcGVuZGVuY3kuIFRoZSB3YXkgaXQgd29ya3MgaXMsIGlmIGVpdGhlciBvbmUgb2YgdGhvc2UgaXMgc2V0LCB0aGVuIHRoZSBvdGhlciBvbmUgaXMgYXNzdW1lZC4gQ29uc2VxdWVudGx5LCBzZXR0aW5nIGBIVUdFVExCRlNgLCB3aGljaCBicmluZ3MgYEhVR0VUTEJfUEFHRWAgYWxvbmcgZm9yIHRoZSByaWRlLCBpcyB0aGUgbmVjZXNzYXJ5IGxldmVyIHRvIHB1bGwgaGVyZS4gRmluZSwgSSd2ZSBnb3QgaXQuIEknbGwgc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkxOSwiT3V0cHV0VG9rZW5zIjoxODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNDowNToxNC42MzI3OTg1NTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODY3MDI4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFkanVzdF9yYW5nZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3VwZGF0ZV9od3BvaXNvblwiLFxuICAgIFwiX19mb2xpb19mcmVlX2h3cFwiLFxuICAgIFwiaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdldGxiZnMgcmVhZCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgdGhlIGdlbmVyaWMgZmlsZW1hcCByZWFkIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIGZvciBodWdldGxiIHBhZ2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgaHdwb2lzb25lZCBwYWdlcyBkdXJpbmcgZmlsZW1hcCByZWFkcyBhbmQgY2hhbmdlcyBob3cgaHdwb2lzb25lZCBodWdldGxiIHBhZ2VzIGFyZSB0cmFja2VkICh1c2luZyBhIGhhc2ggdGFibGUgaW5zdGVhZCBvZiBhIGxpbmtlZCBsaXN0KS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFkanVzdF9yYW5nZV9od3BvaXNvblwiLFxuICAgIFwiaHVnZXRsYl9wYWdlX2h3cG9pc29uXCIsXG4gICAgXCJodWdldGxiX3VwZGF0ZV9od3BvaXNvblwiLFxuICAgIFwiX19mb2xpb19mcmVlX2h3cFwiLFxuICAgIFwiaHVnZXRsYmZzX2luaXRfcmVndWxhcl9pbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBodWdldGxiZnMgcmVhZCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgdGhlIGdlbmVyaWMgZmlsZW1hcCByZWFkIGl0ZXJhdG9yIGFuZCB1cGRhdGVzIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIGZvciBodWdldGxiIHBhZ2VzLiBJdCBpbnRyb2R1Y2VzIG5ldyBsb2dpYyB0byBoYW5kbGUgaHdwb2lzb25lZCBwYWdlcyBkdXJpbmcgZmlsZW1hcCByZWFkcyBhbmQgY2hhbmdlcyBob3cgaHdwb2lzb25lZCBodWdldGxiIHBhZ2VzIGFyZSB0cmFja2VkICh1c2luZyBhIGhhc2ggdGFibGUgaW5zdGVhZCBvZiBhIGxpbmtlZCBsaXN0KS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBodWdldGxiZnMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkbtks[1] Phase: Succeeded StartedAt: 2026-07-15 04:05:26 +0000 UTC FinishedAt: 2026-07-15 04:05:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-15 04:05:26 +0000 UTC FinishedAt: 2026-07-15 04:05:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2] Phase: Succeeded StartedAt: 2026-07-15 04:05:26 +0000 UTC FinishedAt: 2026-07-15 08:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN) Phase: Failed StartedAt: 2026-07-15 04:05:26 +0000 UTC FinishedAt: 2026-07-15 08:23:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-15 04:05:26 +0000 UTC FinishedAt: 2026-07-15 04:06:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-15 04:05:26 +0000 UTC FinishedAt: 2026-07-15 04:06:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkbtks/series-workflowkbtks-convert-artifact-4288552732/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-15 04:06:43 +0000 UTC FinishedAt: 2026-07-15 04:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-15 04:06:43 +0000 UTC FinishedAt: 2026-07-15 04:39:49 +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:*05bb34f9-a0f9-4684-bb47-20888a8cebd6,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-workflowkbtks/series-workflowkbtks-convert-artifact-4288552732/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": "f87098c4-542d-4cf7-8849-08e5b23e0327", "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-workflowkbtks/series-workflowkbtks-build-action-2118698314/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-15 04:06:43 +0000 UTC FinishedAt: 2026-07-15 04:39:39 +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:*05bb34f9-a0f9-4684-bb47-20888a8cebd6,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-workflowkbtks/series-workflowkbtks-convert-artifact-4288552732/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": "f87098c4-542d-4cf7-8849-08e5b23e0327", "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-workflowkbtks/series-workflowkbtks-build-action-2118698314/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-15 04:39:49 +0000 UTC FinishedAt: 2026-07-15 04:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-15 04:39:49 +0000 UTC FinishedAt: 2026-07-15 04:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-15 04:39:49 +0000 UTC FinishedAt: 2026-07-15 04:39:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-15 04:39:49 +0000 UTC FinishedAt: 2026-07-15 04:39:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","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-workflowkbtks/series-workflowkbtks-convert-artifact-888646747/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-15 04:39:59 +0000 UTC FinishedAt: 2026-07-15 04:42:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-15 04:39:59 +0000 UTC FinishedAt: 2026-07-15 04:42:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f87098c4-542d-4cf7-8849-08e5b23e0327,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-workflowkbtks/series-workflowkbtks-build-action-2118698314/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-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-15 04:42:15 +0000 UTC FinishedAt: 2026-07-15 04:42:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-15 04:42:15 +0000 UTC FinishedAt: 2026-07-15 04:42:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-15 04:42:15 +0000 UTC FinishedAt: 2026-07-15 05:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-15 04:42:15 +0000 UTC FinishedAt: 2026-07-15 05:17:09 +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:*05bb34f9-a0f9-4684-bb47-20888a8cebd6,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-workflowkbtks/series-workflowkbtks-convert-artifact-888646747/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": "75e70bfb-8622-4cc5-b17f-aece199fcf0c", "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-workflowkbtks/series-workflowkbtks-build-action-925586175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-15 04:42:15 +0000 UTC FinishedAt: 2026-07-15 05:16:59 +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:*05bb34f9-a0f9-4684-bb47-20888a8cebd6,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-workflowkbtks/series-workflowkbtks-convert-artifact-888646747/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": "75e70bfb-8622-4cc5-b17f-aece199fcf0c", "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-workflowkbtks/series-workflowkbtks-build-action-925586175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-15 05:17:09 +0000 UTC FinishedAt: 2026-07-15 05:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-15 05:17:09 +0000 UTC FinishedAt: 2026-07-15 05:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-15 05:17:09 +0000 UTC FinishedAt: 2026-07-15 05:19:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-15 05:17:09 +0000 UTC FinishedAt: 2026-07-15 05:19:15 +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:*75e70bfb-8622-4cc5-b17f-aece199fcf0c,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-workflowkbtks/series-workflowkbtks-build-action-925586175/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-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[10] Phase: Failed StartedAt: 2026-07-15 05:19:24 +0000 UTC FinishedAt: 2026-07-15 08:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-15 05:19:24 +0000 UTC FinishedAt: 2026-07-15 08:23:11 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"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:*f87098c4-542d-4cf7-8849-08e5b23e0327,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*75e70bfb-8622-4cc5-b17f-aece199fcf0c,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-workflowkbtks/series-workflowkbtks-build-action-2118698314/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-workflowkbtks/series-workflowkbtks-build-action-925586175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-15 05:19:24 +0000 UTC FinishedAt: 2026-07-15 05:19:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-15 05:19:24 +0000 UTC FinishedAt: 2026-07-15 05:19:29 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"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-workflowkbtks/series-workflowkbtks-convert-artifact-1553416020/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[10].run-retest Phase: Failed StartedAt: 2026-07-15 05:19:24 +0000 UTC FinishedAt: 2026-07-15 05:20:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*{{=steps['base-build'].outputs.parameters.result ? jsonpath(steps['base-build'].outputs.parameters.result, '$.build_id') : ''}},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*75e70bfb-8622-4cc5-b17f-aece199fcf0c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,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-workflowkbtks/series-workflowkbtks-build-action-2118698314/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-workflowkbtks/series-workflowkbtks-build-action-925586175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-07-15 05:19:24 +0000 UTC FinishedAt: 2026-07-15 05:19:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-07-15 05:19:24 +0000 UTC FinishedAt: 2026-07-15 05:19:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},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-workflowkbtks/series-workflowkbtks-convert-artifact-1125122135/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-15 05:19:24 +0000 UTC FinishedAt: 2026-07-15 05:19:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-15 05:19:24 +0000 UTC FinishedAt: 2026-07-15 05:19:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-15 05:19:34 +0000 UTC FinishedAt: 2026-07-15 08:23:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-15 05:19:34 +0000 UTC FinishedAt: 2026-07-15 08:23:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f87098c4-542d-4cf7-8849-08e5b23e0327,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*75e70bfb-8622-4cc5-b17f-aece199fcf0c,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-workflowkbtks/series-workflowkbtks-build-action-2118698314/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-workflowkbtks/series-workflowkbtks-build-action-925586175/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-workflowkbtks/series-workflowkbtks-convert-artifact-1553416020/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,} --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[10].run-retest[1] Phase: Failed StartedAt: 2026-07-15 05:19:34 +0000 UTC FinishedAt: 2026-07-15 05:20:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkbtks[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["adjust_range_hwpoison","hugetlb_page_hwpoison","hugetlb_update_hwpoison","__folio_free_hwp","hugetlbfs_init_regular_inode"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMORY_FAILURE"],"series_id":"1ea7e79d-5597-441f-9992-9436608be7df","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:{"findings":["7a0cb565-4340-4daf-8de2-06f5b1d2af93"]},track:KASAN)[10].run-retest[1].retest Phase: Failed StartedAt: 2026-07-15 05:19:34 +0000 UTC FinishedAt: 2026-07-15 05:20:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*{{=steps['base-build'].outputs.parameters.result ? jsonpath(steps['base-build'].outputs.parameters.result, '$.build_id') : ''}},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*75e70bfb-8622-4cc5-b17f-aece199fcf0c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,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-workflowkbtks/series-workflowkbtks-build-action-2118698314/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-workflowkbtks/series-workflowkbtks-build-action-925586175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.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-workflowkbtks/series-workflowkbtks-convert-artifact-1125122135/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:*1,}