Name: series-workflowfbbhl Phase: Succeeded StartedAt: 2026-07-15 22:21:47 +0000 UTC FinishedAt: 2026-07-16 02:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[0] Phase: Succeeded StartedAt: 2026-07-15 22:21:47 +0000 UTC FinishedAt: 2026-07-15 22:41:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[0].run-triage Phase: Succeeded StartedAt: 2026-07-15 22:21:47 +0000 UTC FinishedAt: 2026-07-15 22:41:39 +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": "32bfe6d6b85e3c11a710eb40b9771f715e3c612f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HAVE_LOCAL_PER_CPU_MAP", "ARCH_HAS_PMD_POPULATE_SYNC", "ARCH_HAS_PUD_POPULATE_SYNC", "NEED_PER_CPU_PAGE_FIRST_CHUNK" ], "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": "32bfe6d6b85e3c11a710eb40b9771f715e3c612f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HAVE_LOCAL_PER_CPU_MAP", "ARCH_HAS_PMD_POPULATE_SYNC", "ARCH_HAS_PUD_POPULATE_SYNC", "NEED_PER_CPU_PAGE_FIRST_CHUNK" ], "series_id": "8eceab8c-9d59-4750-8e5c-2e43f68d1776" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "pcpu_get_local_vm_area", "map_local_percpu_first_chunk", "setup_percpu_pgd", "arch_sync_kernel_mappings" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIyOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAmIzM0OywKICAgICYjMzQ7QVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkMmIzM0OywKICAgICYjMzQ7QVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkMmIzM0OywKICAgICYjMzQ7TkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwY3B1X2dldF9sb2NhbF92bV9hcmVhJiMzNDssCiAgICAmIzM0O21hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsmIzM0OywKICAgICYjMzQ7c2V0dXBfcGVyY3B1X3BnZCYjMzQ7LAogICAgJiMzNDthcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGxvY2FsIHBlci1jcHUgbWFwcGluZyBzdXBwb3J0IGZvciBBUk02NCwgbW9kaWZ5aW5nIGNvcmUga2VybmVsIGxvZ2ljIGZvciBwZXJjcHUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIyOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmJhY2NiMzUxMWZjYWRkMGZhMTJiNTJjNzc5M2Y4Y2YwMTgwMDA2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDE1IDIyOjQwOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjNhZmUwNjg4OTE5YmQuLjk1ZmZkMTUxMTg3ZjI0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC00MSw5ICYjNDM7NDEsMTEgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTXG4gXHRzZWxlY3QgQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0VcbiBcdHNlbGVjdCBBUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORyBpZiBBUk02NF9IQUZUXG4mIzQzO1x0c2VsZWN0IEFSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DXG4gXHRzZWxlY3QgQVJDSF9IQVNfUFJFRU1QVF9MQVpZXG4gXHRzZWxlY3QgQVJDSF9IQVNfUFREVU1QXG4gXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcbiYjNDM7XHRzZWxlY3QgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNcbiBcdHNlbGVjdCBBUkNIX0hBU19IV19QVEVfWU9VTkdcbiBcdHNlbGVjdCBBUkNIX0hBU19TRVRVUF9ETUFfT1BTXG4gXHRzZWxlY3QgQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVBcbkBAIC0yMjQsNiAmIzQzOzIyNiw3IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBIQVZFX1JTRVFcbiBcdHNlbGVjdCBIQVZFX1JVU1QgaWYgUlVTVENfU1VQUE9SVFNfQVJNNjRcbiYjNDM7XHRzZWxlY3QgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcbiBcdHNlbGVjdCBIQVZFX1NUQUNLUFJPVEVDVE9SXG4gXHRzZWxlY3QgSEFWRV9TVEFUSUNfQ0FMTCBpZiBDRklcbiBcdHNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFNcbkBAIC0yMzksNiAmIzQzOzI0Miw3IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEFcbiBcdHNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEVcbiYjNDM7XHRzZWxlY3QgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbiBcdHNlbGVjdCBORUVEX1NHX0RNQV9MRU5HVEhcbiBcdHNlbGVjdCBPRlxuIFx0c2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFXG5AQCAtNDExLDYgJiM0Mzs0MTUsMTEgQEAgY29uZmlnIEtBU0FOX1NIQURPV19PRkZTRVRcbiBjb25maWcgVU5XSU5EX1RBQkxFU1xuIFx0Ym9vbFxuIFxuJiM0Mztjb25maWcgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztcdGRlZl9ib29sIHlcbiYjNDM7XHRkZXBlbmRzIG9uIChBUk02NF9WQV9CSVRTXzQ4IFx1MDAyNlx1MDAyNiAoQVJNNjRfNEtfUEFHRVMgfHwgQVJNNjRfNjRLX1BBR0VTKSkgfHwgXFxcbiYjNDM7XHRcdCAgIChBUk02NF9WQV9CSVRTXzQ3IFx1MDAyNlx1MDAyNiBBUk02NF8xNktfUEFHRVMpXG4mIzQzO1xuIHNvdXJjZSBcJiMzNDthcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zXCYjMzQ7XG4gXG4gbWVudSBcJiMzNDtLZXJuZWwgRmVhdHVyZXNcJiMzNDtcbkBAIC0xNTgxLDkgJiM0MzsxNTkwLDYgQEAgY29uZmlnIE5VTUFcbiBcdGJvb2wgXCYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcJiMzNDtcbiBcdHNlbGVjdCBHRU5FUklDX0FSQ0hfTlVNQVxuIFx0c2VsZWN0IE9GX05VTUFcbi1cdHNlbGVjdCBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxuLVx0c2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOS1xuLVx0c2VsZWN0IE5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXG4gXHRzZWxlY3QgVVNFX1BFUkNQVV9OVU1BX05PREVfSURcbiBcdGhlbHBcbiBcdCAgRW5hYmxlIE5VTUEgKE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MpIHN1cHBvcnQuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmhcbmluZGV4IDVlMTIxMWM1NDBhYjIzLi5hYTA4MThmN2VjNThjNSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmhcbkBAIC02Myw2ICYjNDM7NjMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJtNjRfa2VybmVsX3VubWFwcGVkX2F0X2VsMCh2b2lkKVxuIGV4dGVybiB2b2lkIGFybTY0X21lbWJsb2NrX2luaXQodm9pZCk7XG4gZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7XG4gZXh0ZXJuIHZvaWQgYm9vdG1lbV9pbml0KHZvaWQpO1xuJiM0MztleHRlcm4gdm9pZCBzZXR1cF9wZXJjcHVfcGdkKHZvaWQpO1xuIGV4dGVybiB2b2lkIGNyZWF0ZV9tYXBwaW5nX25vYWxsb2MocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyB2aXJ0LFxuIFx0XHRcdFx0ICAgcGh5c19hZGRyX3Qgc2l6ZSwgcGdwcm90X3QgcHJvdCk7XG4gZXh0ZXJuIHZvaWQgY3JlYXRlX3BnZF9tYXBwaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwaHlzX2FkZHJfdCBwaHlzLFxuQEAgLTcyLDYgJiM0Mzs3MywxMCBAQCBleHRlcm4gdm9pZCAqZml4bWFwX3JlbWFwX2ZkdChwaHlzX2FkZHJfdCBkdF9waHlzLCBpbnQgKnNpemUsIHBncHJvdF90IHByb3QpO1xuIGV4dGVybiB2b2lkIG1hcmtfbGluZWFyX3RleHRfYWxpYXNfcm8odm9pZCk7XG4gZXh0ZXJuIGludCBzcGxpdF9rZXJuZWxfbGVhZl9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbiBleHRlcm4gdm9pZCBsaW5lYXJfbWFwX21heWJlX3NwbGl0X3RvX3B0ZXModm9pZCk7XG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztleHRlcm4gdm9pZCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpO1xuJiM0MzsjZW5kaWZcbiBcbiAvKlxuICAqIFRoaXMgY2hlY2sgaXMgdHJpZ2dlcmVkIGR1cmluZyB0aGUgZWFybHkgYm9vdCBiZWZvcmUgdGhlIGNwdWZlYXR1cmVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcbmluZGV4IDgwM2I2ODc1ODE1Mjc1Li4wZTk5MWI5OGVkOWVhZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXG5AQCAtMjcsNiAmIzQzOzI3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuIFxuIGV4dGVybiBib29sIHJvZGF0YV9mdWxsO1xuJiM0MztleHRlcm4gcGdkX3QgKnBlcmNwdV9wZ2RbTlJfQ1BVU107XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGNvbnRleHRpZHJfdGhyZWFkX3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpXG4ge1xuQEAgLTEzOCw3ICYjNDM7MTM5LDEzIEBAIHZvaWQgX19jcHVfcmVwbGFjZV90dGJyMShwZ2RfdCAqcGdkcCwgYm9vbCBjbnApO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfZW5hYmxlX3N3YXBwZXJfY25wKHZvaWQpXG4ge1xuLVx0X19jcHVfcmVwbGFjZV90dGJyMShsbV9hbGlhcyhzd2FwcGVyX3BnX2RpciksIHRydWUpO1xuJiM0MztcdHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4mIzQzO1x0cGdkX3QgKnR0YnIxID0gcGVyY3B1X3BnZFtjcHVdO1xuJiM0MztcbiYjNDM7XHRpZiAoY3B1ID09IDApXG4mIzQzO1x0XHR0dGJyMSA9IGxtX2FsaWFzKHN3YXBwZXJfcGdfZGlyKTtcbiYjNDM7XG4mIzQzO1x0X19jcHVfcmVwbGFjZV90dGJyMSh0dGJyMSwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlcGxhY2VfdHRicjEocGdkX3QgKnBnZHApXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZXJjcHUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcbmluZGV4IGI1N2IyYmIwMDk2Nzc0Li4wM2QxNDlmOTE3N2MwZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcbkBAIC0xNDIsNiAmIzQzOzE0MiwyNyBAQCBQRVJDUFVfUkVUX09QKGFkZCwgYWRkLCBsZGFkZClcbiAjdW5kZWYgUEVSQ1BVX09QXG4gI3VuZGVmIFBFUkNQVV9SRVRfT1BcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4mIzQzO2V4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9sb2NhbF9vZmY7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIGxvY2FsX2NwdV9wdHIocHRyKVx0XHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX3ZlcmlmeV9wY3B1X3B0cihwdHIpO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0U0hJRlRfUEVSQ1BVX1BUUihwdHIsIF9fcGVyX2NwdV9sb2NhbF9vZmYpO1x0XHRcdFxcXG4mIzQzO30pXG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9wY3BfcHJvdGVjdChvcCwgcGNwLCAuLi4pXHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRvcChsb2NhbF9jcHVfcHRyKFx1MDAyNihwY3ApKSwgX19WQV9BUkdTX18pO1x0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgX3BjcF9wcm90ZWN0X3JldHVybihvcCwgcGNwLCBhcmdzLi4uKVx0XHRcdFx0XFxcbiYjNDM7KHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHR5cGVvZihwY3ApIF9fcmV0dmFsO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0X19yZXR2YWwgPSAodHlwZW9mKHBjcCkpb3AobG9jYWxfY3B1X3B0cihcdTAwMjYocGNwKSksICMjYXJncyk7XHRcXFxuJiM0MztcdF9fcmV0dmFsO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7I2Vsc2VcbiAvKlxuICAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gYXZvaWQgdGhlIGNvbmRpdGlvbmFsIGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIHdoZW5cbiAgKiByZS1lbmFibGluZyBwcmVlbXB0aW9uIGZvciBwcmVlbXB0aWJsZSBrZXJuZWxzLCBidXQgZG9pbmcgdGhhdCBpbiBhIHdheVxuQEAgLTE1Miw3ICYjNDM7MTczLDYgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXG4gICogcHJlZW1wdGlvbiBwb2ludCB3aGVuIFRJRl9ORUVEX1JFU0NIRUQgZ2V0cyBzZXQgd2hpbGUgcHJlZW1wdGlvbiBpc1xuICAqIGRpc2FibGVkLlxuICAqL1xuLVxuICNkZWZpbmUgX3BjcF9wcm90ZWN0KG9wLCBwY3AsIC4uLilcdFx0XHRcdFx0XFxcbiAoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuQEAgLTE2OCw2ICYjNDM7MTg4LDcgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXG4gXHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XHRcdFx0XHRcdFxcXG4gXHRfX3JldHZhbDtcdFx0XHRcdFx0XHRcdFxcXG4gfSlcbiYjNDM7I2VuZGlmXG4gXG4gI2RlZmluZSB0aGlzX2NwdV9yZWFkXzEocGNwKVx0XHRcXFxuIFx0X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9yZWFkXzgsIHBjcClcbkBAIC0yNDMsNiAmIzQzOzI2NCwxOSBAQCBQRVJDUFVfUkVUX09QKGFkZCwgYWRkLCBsZGFkZClcbiBcbiAjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGc2NChwY3AsIG8sIG4pXHR0aGlzX2NwdV9jbXB4Y2hnXzgocGNwLCBvLCBuKVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnMTI4KHBjcCwgbywgbilcdFx0XHRcdFx0XFxcbiYjNDM7KHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHR5cGVkZWYgdHlwZW9mKHBjcCkgcGNwX29wX1RfXztcdFx0XHRcdFx0XFxcbiYjNDM7XHR1MTI4IG9sZF9fLCBuZXdfXywgcmV0X187XHRcdFx0XHRcdFxcXG4mIzQzO1x0cGNwX29wX1RfXyAqcHRyX187XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRvbGRfXyA9IG87XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdG5ld19fID0gbjtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cHRyX18gPSBsb2NhbF9jcHVfcHRyKFx1MDAyNihwY3ApKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyZXRfXyA9IGNtcHhjaGcxMjhfbG9jYWwoKHZvaWQgKilwdHJfXywgb2xkX18sIG5ld19fKTtcdFx0XFxcbiYjNDM7XHRyZXRfXztcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7I2Vsc2VcbiAjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGcxMjgocGNwLCBvLCBuKVx0XHRcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdHR5cGVkZWYgdHlwZW9mKHBjcCkgcGNwX29wX1RfXztcdFx0XHRcdFx0XFxcbkBAIC0yNTYsNiAmIzQzOzI5MCw3IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKVxuIFx0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuIFx0cmV0X187XHRcdFx0XHRcdFx0XHRcdFxcXG4gfSlcbiYjNDM7I2VuZGlmXG4gXG4gI2lmZGVmIF9fS1ZNX05WSEVfSFlQRVJWSVNPUl9fXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19oeXBfcGVyX2NwdV9vZmZzZXQodW5zaWduZWQgaW50IGNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuaW5kZXggMWI0NTA5ZDMzODJjNjMuLmRkMWFjODRhMTE2MDVlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtMzMsMTEgJiM0MzszMywyNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApXG4gXHRwdWR2YWwgfD0gKG1tID09IFx1MDAyNmluaXRfbW0pID8gUFVEX1RBQkxFX1VYTiA6IFBVRF9UQUJMRV9QWE47XG4gXHRfX3B1ZF9wb3B1bGF0ZShwdWRwLCBfX3BhKHBtZHApLCBwdWR2YWwpO1xuIH1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxuJiM0Mzt7XG4mIzQzO1x0cHVkX3BvcHVsYXRlKFx1MDAyNmluaXRfbW0sIHB1ZHAsIHBtZHApO1xuJiM0MztcdGlmIChBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLIFx1MDAyNiBQR1RCTF9QVURfTU9ESUZJRUQpXG4mIzQzO1x0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcHVkX3BvcHVsYXRlKHB1ZF90ICpwdWRwLCBwaHlzX2FkZHJfdCBwbWRwLCBwdWR2YWxfdCBwcm90KVxuIHtcbiBcdEJVSUxEX0JVRygpO1xuIH1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxuJiM0Mzt7XG4mIzQzO1x0QlVJTERfQlVHKCk7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4gI2VuZGlmXHQvKiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDIgKi9cbiBcbiAjaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTIFx1MDAzZSAzXG5AQCAtMTIxLDQgJiM0MzsxMzcsMTIgQEAgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCwgcGd0YWJsZV90IHB0ZXApXG4gXHRcdCAgICAgICBQTURfVFlQRV9UQUJMRSB8IFBNRF9UQUJMRV9BRiB8IFBNRF9UQUJMRV9QWE4pO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQ1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX3N5bmModW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcCwgcHRlX3QgKnB0ZXApXG4mIzQzO3tcbiYjNDM7XHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZHAsIHB0ZXApO1xuJiM0MztcdGlmIChBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLIFx1MDAyNiBQR1RCTF9QTURfTU9ESUZJRUQpXG4mIzQzO1x0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDI3Njg5YzYyYmQyNWRkLi44M2NkNjU2MTBkN2Y3ZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTE4LDE0ICYjNDM7MTgsMzUgQEBcbiAgKiBWTUFMTE9DIHJhbmdlLlxuICAqXG4gICogVk1BTExPQ19TVEFSVDogYmVnaW5uaW5nIG9mIHRoZSBrZXJuZWwgdm1hbGxvYyBzcGFjZVxuLSAqIFZNQUxMT0NfRU5EOiBleHRlbmRzIHRvIHRoZSBhdmFpbGFibGUgc3BhY2UgYmVsb3cgdm1lbW1hcFxuJiM0MzsgKiBWTUFMTE9DX0VORDogZXh0ZW5kcyB0byB0aGUgc3BhY2UgYmVsb3cgZ2xvYmFsIHBlcmNwdSBhcmVhXG4gICovXG4gI2RlZmluZSBWTUFMTE9DX1NUQVJUXHRcdChNT0RVTEVTX0VORClcbiYjNDM7I2RlZmluZSBWTUFMTE9DX0VORFx0XHQoUEVSQ1BVX1NUQVJUIC0gU1pfOE0pXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQRVJDUFUgcmFuZ2VcbiYjNDM7ICpcbiYjNDM7ICogUEVSQ1BVX1NUQVJUOiBiZWdpbm5pbmcgb2YgZ2xvYmFsIHBlcmNwdSBhcmVhXG4mIzQzOyAqIFBFUkNQVV9FTkQ6IGVuZCBvZiBnbG9iYWwgcGVyY3B1IGFyZWFcbiYjNDM7ICogTE9DQUxfUEVSQ1BVX1NUQVJUOiBiZWdpbm5pbmcgb2YgbG9jYWwgcGVyY3B1IGFyZWFcbiYjNDM7ICogTE9DQUxfUEVSQ1BVX0VORDogZW5kIG9mIGxvY2FsIHBlcmNwdSBhcmVhLCBleHRlbmQgdG8gdGhlIGF2YWlsYWJsZVxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICBzcGFjZSBiZWxvdyB2bWVtbWFwXG4mIzQzOyAqL1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNEtfUEFHRVMpXG4mIzQzOyNkZWZpbmUgUEVSQ1BVX1NJWkVcdFx0KDIgKiBQR0RJUl9TSVpFKVxuJiM0MzsjZWxpZiBkZWZpbmVkKENPTkZJR19BUk02NF8xNktfUEFHRVMpXG4mIzQzOyNkZWZpbmUgUEVSQ1BVX1NJWkUgICAgICAgICAgICAoMTYgKiBQVURfU0laRSlcbiYjNDM7I2VsaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNjRLX1BBR0VTKVxuJiM0MzsjZGVmaW5lIFBFUkNQVV9TSVpFICAgICAgICAgICAgKFBHRElSX1NJWkUpXG4mIzQzOyNlbmRpZlxuJiM0MzsjZGVmaW5lIFBFUkNQVV9TVEFSVFx0XHQoUEVSQ1BVX0VORCAtIFBFUkNQVV9TSVpFKVxuJiM0MzsjZGVmaW5lIFBFUkNQVV9FTkRcdFx0KExPQ0FMX1BFUkNQVV9TVEFSVClcbiYjNDM7I2RlZmluZSBMT0NBTF9QRVJDUFVfU1RBUlRcdChMT0NBTF9QRVJDUFVfRU5EIC0gUEVSQ1BVX1NJWkUpXG4gI2lmIFZBX0JJVFMgPT0gVkFfQklUU19NSU5cbi0jZGVmaW5lIFZNQUxMT0NfRU5EXHRcdChWTUVNTUFQX1NUQVJUIC0gU1pfOE0pXG4mIzQzOyNkZWZpbmUgTE9DQUxfUEVSQ1BVX0VORFx0KEFMSUdOX0RPV04oVk1FTU1BUF9TVEFSVCwgUEVSQ1BVX1NJWkUpKVxuICNlbHNlXG4gI2RlZmluZSBWTUVNTUFQX1VOVVNFRF9OUEFHRVNcdCgoX1BBR0VfT0ZGU0VUKHZhYml0c19hY3R1YWwpIC0gUEFHRV9PRkZTRVQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKVxuLSNkZWZpbmUgVk1BTExPQ19FTkRcdFx0KFZNRU1NQVBfU1RBUlQgJiM0MzsgVk1FTU1BUF9VTlVTRURfTlBBR0VTICogc2l6ZW9mKHN0cnVjdCBwYWdlKSAtIFNaXzhNKVxuJiM0MzsjZGVmaW5lIExPQ0FMX1BFUkNQVV9FTkRcdChBTElHTl9ET1dOKChWTUVNTUFQX1NUQVJUICYjNDM7IFZNRU1NQVBfVU5VU0VEX05QQUdFUyAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpLCBQRVJDUFVfU0laRSkpXG4gI2VuZGlmXG4gXG4gI2RlZmluZSB2bWVtbWFwXHRcdFx0KChzdHJ1Y3QgcGFnZSAqKVZNRU1NQVBfU1RBUlQgLSAobWVtc3RhcnRfYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkpXG5AQCAtMTIxNiw2ICYjNDM7MTIzNywxNiBAQCBwNGRfdCAqcDRkX29mZnNldF9sb2NrbGVzc19mb2xkZWQocGdkX3QgKnBnZHAsIHBnZF90IHBnZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIFxuICNlbmRpZiAgLyogQ09ORklHX1BHVEFCTEVfTEVWRUxTIFx1MDAzZSA0ICovXG4gXG4mIzQzOyNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMlxuJiM0MzsjZGVmaW5lIEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgICAgICBQR1RCTF9QTURfTU9ESUZJRURcbiYjNDM7I2VsaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTID09IDNcbiYjNDM7I2RlZmluZSBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLICAgICAgUEdUQkxfUFVEX01PRElGSUVEXG4mIzQzOyNlbGlmIENPTkZJR19QR1RBQkxFX0xFVkVMUyA9PSA0XG4mIzQzOyNkZWZpbmUgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyAgICAgIFBHVEJMX1A0RF9NT0RJRklFRFxuJiM0MzsjZWxpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNVxuJiM0MzsjZGVmaW5lIEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgICAgICBQR1RCTF9QR0RfTU9ESUZJRURcbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNkZWZpbmUgcGdkX0VSUk9SKGUpXHRcXFxuIFx0cHJfZXJyKFwmIzM0OyVzOiVkOiBiYWQgcGdkICUwMTZsbHguXFxuXCYjMzQ7LCBfX0ZJTEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmNcbmluZGV4IDIzYzA1ZGM3YThmMmFjLi42ZDQyMGFkNTlhZjQ5MiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmNcbkBAIC0zNjAsNiAmIzQzOzM2MCw5IEBAIHZvaWQgX19pbml0IF9fbm9fc2FuaXRpemVfYWRkcmVzcyBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4gXHRzbXBfaW5pdF9jcHVzKCk7XG4gXHRzbXBfYnVpbGRfbXBpZHJfaGFzaCgpO1xuIFxuJiM0MztcdC8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIHNtcF9pbml0X2NwdXMgKi9cbiYjNDM7XHRzZXR1cF9wZXJjcHVfcGdkKCk7XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfQVJNNjRfU1dfVFRCUjBfUEFOXG4gXHQvKlxuIFx0ICogTWFrZSBzdXJlIGluaXRfdGhyZWFkX2luZm8udHRicjAgYWx3YXlzIGdlbmVyYXRlcyB0cmFuc2xhdGlvblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wLmNcbmluZGV4IGQ0NjAyMmY3MjA3NTQwLi40YTgxMTM3OWMxOTE2MiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9zbXAuY1xuQEAgLTU1LDYgJiM0Mzs1NSw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2lwaS5oXHUwMDNlXG4gXG4mIzQzO2V4dGVybiB2b2lkIGlkbWFwX2NwdV9yZXBsYWNlX3R0YnIxKHBoeXNfYWRkcl90IHBnZGlyKTtcbiYjNDM7XG4gLypcbiAgKiBhcyBmcm9tIDIuNSwga2VybmVscyBubyBsb25nZXIgaGF2ZSBhbiBpbml0X3Rhc2tzIHN0cnVjdHVyZVxuICAqIHNvIHdlIG5lZWQgc29tZSBvdGhlciB3YXkgb2YgdGVsbGluZyBhIG5ldyBzZWNvbmRhcnkgY29yZVxuQEAgLTE5OCw2ICYjNDM7MjAwLDEyIEBAIGFzbWxpbmthZ2Ugbm90cmFjZSB2b2lkIHNlY29uZGFyeV9zdGFydF9rZXJuZWwodm9pZClcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gXHUwMDI2aW5pdF9tbTtcbiBcdGNvbnN0IHN0cnVjdCBjcHVfb3BlcmF0aW9ucyAqb3BzO1xuIFx0dW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcbiYjNDM7XHR0eXBlZGVmIHZvaWQgKHR0YnJfcmVwbGFjZV9mdW5jKShwaHlzX2FkZHJfdCk7XG4mIzQzO1x0dHRicl9yZXBsYWNlX2Z1bmMgKnJlcGxhY2VfdHRicjtcbiYjNDM7XG4mIzQzO1x0cGh5c19hZGRyX3QgdHRicjEgPSBwaHlzX3RvX3R0YnIodmlydF90b19waHlzKHBlcmNwdV9wZ2RbY3B1XSkpO1xuJiM0MztcdHJlcGxhY2VfdHRiciA9ICh2b2lkICopX19wYV9zeW1ib2woaWRtYXBfY3B1X3JlcGxhY2VfdHRicjEpO1xuJiM0MztcdHJlcGxhY2VfdHRicih0dGJyMSk7XG4gXG4gXHQvKlxuIFx0ICogQWxsIGtlcm5lbCB0aHJlYWRzIHNoYXJlIHRoZSBzYW1lIG1tIGNvbnRleHQ7IGdyYWIgYVxuQEAgLTgxOSw2ICYjNDM7ODI3LDQyIEBAIHZvaWQgX19pbml0IHNtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKVxuIFx0fVxuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19OVU1BXG4mIzQzO2V4dGVybiBpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdO1xuJiM0MztcbiYjNDM7aW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY3B1X3RvX25vZGVfbWFwW2NwdV07XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4mIzQzO3Vuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5O1xuJiM0MztFWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9vZmZzZXQpO1xuJiM0MzsvKiBVc2VkIHRvIGNhbGN1bGF0ZSBwY3B1IGxvY2FsIGFkZHJlc3MsIHRoZSBvZmZzZXQgaXMgc2FtZSBmb3IgYWxsIENQVXMgKi9cbiYjNDM7dW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfbG9jYWxfb2ZmIF9fcm9fYWZ0ZXJfaW5pdDtcbiYjNDM7RVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfbG9jYWxfb2ZmKTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZGVsdGE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGNwdTtcbiYjNDM7XHRpbnQgcmMgPSAtRUlOVkFMO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuJiM0MztcdC8qIFBDUFUgcGFnZSB0YWJsZSBqdXN0IGNhbiBzdXBwb3J0IFBDUFVfRkNfUEFHRSAqL1xuJiM0MztcdHJjID0gcGNwdV9wYWdlX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwgZWFybHlfY3B1X3RvX25vZGUpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRwYW5pYyhcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwZXJjcHUgYXJlYXMgKGVycj0lZCkuXCYjMzQ7LCByYyk7XG4mIzQzO1xuJiM0MztcdGRlbHRhID0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7XG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiYjNDM7XHRcdF9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IGRlbHRhICYjNDM7IHBjcHVfdW5pdF9vZmZzZXRzW2NwdV07XG4mIzQzO1x0X19wZXJfY3B1X2xvY2FsX29mZiA9ICh1bnNpZ25lZCBsb25nKXBjcHVfbG9jYWxfYmFzZSAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIGNvbnN0IGNoYXIgKmlwaV90eXBlc1tNQVhfSVBJXSBfX3RyYWNlcG9pbnRfc3RyaW5nID0ge1xuIFx0W0lQSV9SRVNDSEVEVUxFXVx0PSBcJiMzNDtSZXNjaGVkdWxpbmcgaW50ZXJydXB0c1wmIzM0OyxcbiBcdFtJUElfQ0FMTF9GVU5DXVx0XHQ9IFwmIzM0O0Z1bmN0aW9uIGNhbGwgaW50ZXJydXB0c1wmIzM0OyxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYyBiL2FyY2gvYXJtNjQvbW0va2FzYW5faW5pdC5jXG5pbmRleCAzZmNhZDk1NmZkZjdjYi4uYThlMjcyYmZlZmUxYTEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmNcbkBAIC02MCwxMyAmIzQzOzYwLDE0IEBAIHN0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQga2FzYW5fYWxsb2NfcmF3X3BhZ2UoaW50IG5vZGUpXG4gfVxuIFxuIHN0YXRpYyBwdGVfdCAqX19pbml0IGthc2FuX3B0ZV9vZmZzZXQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUsXG4tXHRcdFx0XHQgICAgICBib29sIGVhcmx5KVxuJiM0MztcdFx0XHRcdCAgICAgIGJvb2wgZWFybHksIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdGlmIChwbWRfbm9uZShSRUFEX09OQ0UoKnBtZHApKSkge1xuIFx0XHRwaHlzX2FkZHJfdCBwdGVfcGh5cyA9IGVhcmx5ID9cbiBcdFx0XHRcdF9fcGFfc3ltYm9sKGthc2FuX2Vhcmx5X3NoYWRvd19wdGUpXG4gXHRcdFx0XHRcdDoga2FzYW5fYWxsb2NfemVyb2VkX3BhZ2Uobm9kZSk7XG4gXHRcdF9fcG1kX3BvcHVsYXRlKHBtZHAsIHB0ZV9waHlzLCBQTURfVFlQRV9UQUJMRSk7XG4mIzQzO1x0XHQqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZWFybHkgPyBwdGVfb2Zmc2V0X2tpbWcocG1kcCwgYWRkcilcbkBAIC03NCw0OSAmIzQzOzc1LDUzIEBAIHN0YXRpYyBwdGVfdCAqX19pbml0IGthc2FuX3B0ZV9vZmZzZXQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUsXG4gfVxuIFxuIHN0YXRpYyBwbWRfdCAqX19pbml0IGthc2FuX3BtZF9vZmZzZXQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUsXG4tXHRcdFx0XHQgICAgICBib29sIGVhcmx5KVxuJiM0MztcdFx0XHRcdCAgICAgIGJvb2wgZWFybHksIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdGlmIChwdWRfbm9uZShSRUFEX09OQ0UoKnB1ZHApKSkge1xuIFx0XHRwaHlzX2FkZHJfdCBwbWRfcGh5cyA9IGVhcmx5ID9cbiBcdFx0XHRcdF9fcGFfc3ltYm9sKGthc2FuX2Vhcmx5X3NoYWRvd19wbWQpXG4gXHRcdFx0XHRcdDoga2FzYW5fYWxsb2NfemVyb2VkX3BhZ2Uobm9kZSk7XG4gXHRcdF9fcHVkX3BvcHVsYXRlKHB1ZHAsIHBtZF9waHlzLCBQVURfVFlQRV9UQUJMRSk7XG4mIzQzO1x0XHQqbWFzayB8PSBQR1RCTF9QVURfTU9ESUZJRUQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZWFybHkgPyBwbWRfb2Zmc2V0X2tpbWcocHVkcCwgYWRkcikgOiBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuIH1cbiBcbiBzdGF0aWMgcHVkX3QgKl9faW5pdCBrYXNhbl9wdWRfb2Zmc2V0KHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlLFxuLVx0XHRcdFx0ICAgICAgYm9vbCBlYXJseSlcbiYjNDM7XHRcdFx0XHQgICAgICBib29sIGVhcmx5LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpZiAocDRkX25vbmUoUkVBRF9PTkNFKCpwNGRwKSkpIHtcbiBcdFx0cGh5c19hZGRyX3QgcHVkX3BoeXMgPSBlYXJseSA/XG4gXHRcdFx0XHRfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcHVkKVxuIFx0XHRcdFx0XHQ6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpO1xuIFx0XHRfX3A0ZF9wb3B1bGF0ZShwNGRwLCBwdWRfcGh5cywgUDREX1RZUEVfVEFCTEUpO1xuJiM0MztcdFx0Km1hc2sgfD0gUEdUQkxfUDREX01PRElGSUVEO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVhcmx5ID8gcHVkX29mZnNldF9raW1nKHA0ZHAsIGFkZHIpIDogcHVkX29mZnNldChwNGRwLCBhZGRyKTtcbiB9XG4gXG4gc3RhdGljIHA0ZF90ICpfX2luaXQga2FzYW5fcDRkX29mZnNldChwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcbi1cdFx0XHRcdCAgICAgIGJvb2wgZWFybHkpXG4mIzQzO1x0XHRcdFx0ICAgICAgYm9vbCBlYXJseSwgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0aWYgKHBnZF9ub25lKFJFQURfT05DRSgqcGdkcCkpKSB7XG4gXHRcdHBoeXNfYWRkcl90IHA0ZF9waHlzID0gZWFybHkgP1xuIFx0XHRcdFx0X19wYV9zeW1ib2woa2FzYW5fZWFybHlfc2hhZG93X3A0ZClcbiBcdFx0XHRcdFx0OiBrYXNhbl9hbGxvY196ZXJvZWRfcGFnZShub2RlKTtcbiBcdFx0X19wZ2RfcG9wdWxhdGUocGdkcCwgcDRkX3BoeXMsIFBHRF9UWVBFX1RBQkxFKTtcbiYjNDM7XHRcdCptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcbiBcdH1cbiBcbiBcdHJldHVybiBlYXJseSA/IHA0ZF9vZmZzZXRfa2ltZyhwZ2RwLCBhZGRyKSA6IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wdGVfcG9wdWxhdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSlcbiYjNDM7XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHksXG4mIzQzO1x0XHRcdFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuLVx0cHRlX3QgKnB0ZXAgPSBrYXNhbl9wdGVfb2Zmc2V0KHBtZHAsIGFkZHIsIG5vZGUsIGVhcmx5KTtcbiYjNDM7XHRwdGVfdCAqcHRlcCA9IGthc2FuX3B0ZV9vZmZzZXQocG1kcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xuIFxuIFx0ZG8ge1xuIFx0XHRwaHlzX2FkZHJfdCBwYWdlX3BoeXMgPSBlYXJseSA/XG5AQCAtMTMwLDM4ICYjNDM7MTM1LDQxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wdGVfcG9wdWxhdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BtZF9wb3B1bGF0ZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5KVxuJiM0MztcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSxcbiYjNDM7XHRcdFx0XHQgICAgICBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4tXHRwbWRfdCAqcG1kcCA9IGthc2FuX3BtZF9vZmZzZXQocHVkcCwgYWRkciwgbm9kZSwgZWFybHkpO1xuJiM0MztcdHBtZF90ICpwbWRwID0ga2FzYW5fcG1kX29mZnNldChwdWRwLCBhZGRyLCBub2RlLCBlYXJseSwgbWFzayk7XG4gXG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0a2FzYW5fcHRlX3BvcHVsYXRlKHBtZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5KTtcbiYjNDM7XHRcdGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgbWFzayk7XG4gXHR9IHdoaWxlIChwbWRwJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kIFx1MDAyNlx1MDAyNiBwbWRfbm9uZShSRUFEX09OQ0UoKnBtZHApKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wdWRfcG9wdWxhdGUocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSlcbiYjNDM7XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHksXG4mIzQzO1x0XHRcdFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuLVx0cHVkX3QgKnB1ZHAgPSBrYXNhbl9wdWRfb2Zmc2V0KHA0ZHAsIGFkZHIsIG5vZGUsIGVhcmx5KTtcbiYjNDM7XHRwdWRfdCAqcHVkcCA9IGthc2FuX3B1ZF9vZmZzZXQocDRkcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xuIFxuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGthc2FuX3BtZF9wb3B1bGF0ZShwdWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7XG4mIzQzO1x0XHRrYXNhbl9wbWRfcG9wdWxhdGUocHVkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHksIG1hc2spO1xuIFx0fSB3aGlsZSAocHVkcCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCBcdTAwMjZcdTAwMjYgcHVkX25vbmUoUkVBRF9PTkNFKCpwdWRwKSkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcDRkX3BvcHVsYXRlKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5LFxuJiM0MztcdFx0XHRcdCAgICAgIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbi1cdHA0ZF90ICpwNGRwID0ga2FzYW5fcDRkX29mZnNldChwZ2RwLCBhZGRyLCBub2RlLCBlYXJseSk7XG4mIzQzO1x0cDRkX3QgKnA0ZHAgPSBrYXNhbl9wNGRfb2Zmc2V0KHBnZHAsIGFkZHIsIG5vZGUsIGVhcmx5LCBtYXNrKTtcbiBcbiBcdGRvIHtcbiBcdFx0bmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuLVx0XHRrYXNhbl9wdWRfcG9wdWxhdGUocDRkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHkpO1xuJiM0MztcdFx0a2FzYW5fcHVkX3BvcHVsYXRlKHA0ZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5LCBtYXNrKTtcbiBcdH0gd2hpbGUgKHA0ZHAmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQgXHUwMDI2XHUwMDI2IHA0ZF9ub25lKFJFQURfT05DRSgqcDRkcCkpKTtcbiB9XG4gXG5AQCAtMTcwLDEyICYjNDM7MTc4LDE3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wZ2RfcG9wdWxhdGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4gXHRwZ2RfdCAqcGdkcDtcbiYjNDM7XHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcbiBcbiBcdHBnZHAgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0a2FzYW5fcDRkX3BvcHVsYXRlKHBnZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5KTtcbiYjNDM7XHRcdGthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgXHUwMDI2bWFzayk7XG4gXHR9IHdoaWxlIChwZ2RwJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1hc2sgXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXG4mIzQzO1x0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xuIH1cbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNjRLX1BBR0VTKSB8fCBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDRcbkBAIC0zMTEsNyAmIzQzOzMyNCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9pbml0X3NoYWRvdyh2b2lkKVxuIFxuIFx0bW9kX3NoYWRvd19zdGFydCA9ICh1NjQpa2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKU1PRFVMRVNfVkFERFIpO1xuIFxuLVx0dm1hbGxvY19zaGFkb3dfZW5kID0gKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopVk1BTExPQ19FTkQpO1xuJiM0MztcdHZtYWxsb2Nfc2hhZG93X2VuZCA9ICh1NjQpa2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKUxPQ0FMX1BFUkNQVV9FTkQpO1xuIFxuIFx0LypcbiBcdCAqIFdlIGFyZSBnb2luZyB0byBwZXJmb3JtIHByb3BlciBzZXR1cCBvZiBzaGFkb3cgbWVtb3J5LlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vbW11LmMgYi9hcmNoL2FybTY0L21tL21tdS5jXG5pbmRleCBmMmJlNTAxNDY4Y2U1YS4uZWU0YWIwMzFlYmY4ZDcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL21tdS5jXG5AQCAtNjcsNiAmIzQzOzY3LDYzIEBAIGxvbmcgX19zZWN0aW9uKFwmIzM0Oy5tbXVvZmYuZGF0YS53cml0ZVwmIzM0OykgX19lYXJseV9jcHVfYm9vdF9zdGF0dXM7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhzd2FwcGVyX3BnZGlyX2xvY2spO1xuIHN0YXRpYyBERUZJTkVfTVVURVgoZml4bWFwX2xvY2spO1xuIFxuJiM0MztwZ2RfdCAqcGVyY3B1X3BnZFtOUl9DUFVTXSBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO2Jvb2wgcGVyY3B1X3BnZF9zZXR1cF9kb25lIF9fcm9fYWZ0ZXJfaW5pdCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7dm9pZCBfX2luaXQgc2V0dXBfcGVyY3B1X3BnZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuJiM0MztcdFx0dm9pZCAqYWRkcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY3B1ID09IDApIHtcbiYjNDM7XHRcdFx0cGVyY3B1X3BnZFtjcHVdID0gc3dhcHBlcl9wZ19kaXI7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGFkZHIgPSBtZW1ibG9ja19hbGxvYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XG4mIzQzO1x0XHRpZiAoIWFkZHIpXG4mIzQzO1x0XHRcdHBhbmljKFwmIzM0O0NhbiYjMzk7dCBhbGxvYyBwZXJjcHUgcGdkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1jcHkoYWRkciwgKHZvaWQgKilzd2FwcGVyX3BnX2RpciwgUEFHRV9TSVpFKTtcbiYjNDM7XHRcdHBlcmNwdV9wZ2RbY3B1XSA9IChwZ2RfdCAqKWFkZHI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkc2IoaXNoc3QpO1xuJiM0MztcbiYjNDM7XHRwZXJjcHVfcGdkX3NldHVwX2RvbmUgPSB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHIsIG5leHQ7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XHRwZ2RfdCAqcGdkcCA9IHBnZF9vZmZzZXRfayhzdGFydCk7XG4mIzQzO1x0cGdkX3QgcGdkO1xuJiM0MztcdHVuc2lnbmVkIGludCBpbmRleCA9IHBnZF9pbmRleChzdGFydCk7XG4mIzQzO1xuJiM0MztcdEJVR19PTihzdGFydCBcdTAwM2UgZW5kKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZXJjcHVfcGdkX3NldHVwX2RvbmUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIERvbiYjMzk7dCBzeW5jIGxvY2FsIHBlcmNwdSBhcmVhIHBhZ2UgdGFibGUgKi9cbiYjNDM7XHRpZiAoc3RhcnQgXHUwMDNlPSBMT0NBTF9QRVJDUFVfU1RBUlQgXHUwMDI2XHUwMDI2IGVuZCBcdTAwM2MgTE9DQUxfUEVSQ1BVX0VORClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IHN0YXJ0O1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHBnZCA9IFJFQURfT05DRSgqcGdkcCk7XG4mIzQzO1x0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4mIzQzO1x0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRcdGlmIChjcHUgPT0gMClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0c2V0X3BnZChwZXJjcHVfcGdkW2NwdV0gJiM0MzsgaW5kZXgsIHBnZCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSB3aGlsZSAocGdkcCYjNDM7JiM0MzssIGluZGV4JiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIG5vaW5zdHIgc2V0X3N3YXBwZXJfcGdkKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QpXG4ge1xuIFx0cGdkX3QgKmZpeG1hcF9wZ2RwO1xuQEAgLTE2MSw3ICYjNDM7MjE4LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9jbGVhcl9wZ3RhYmxlKHZvaWQgKnRhYmxlKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBpbml0X3B0ZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi1cdFx0ICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90KVxuJiM0MztcdFx0ICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRkbyB7XG4gXHRcdHB0ZV90IG9sZF9wdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuQEAgLTE3MSw2ICYjNDM7MjI4LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wdGUocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdCAqIGFyZSBkZWZlcnJlZCB0byB0aGUgZW5kIG9mIGFsbG9jX2luaXRfY29udF9wdGUoKS5cbiBcdFx0ICovXG4gXHRcdF9fc2V0X3B0ZV9ub3N5bmMocHRlcCwgcGZuX3B0ZShfX3BoeXNfdG9fcGZuKHBoeXMpLCBwcm90KSk7XG4mIzQzO1x0XHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEFmdGVyIHRoZSBQVEUgZW50cnkgaGFzIGJlZW4gcG9wdWxhdGVkIG9uY2UsIHdlXG5AQCAtMTk4LDcgJiM0MzsyNTYsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXMsXG4gXHRcdFx0ICAgICAgIHBncHJvdF90IHByb3QsXG4gXHRcdFx0ICAgICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSxcbi1cdFx0XHQgICAgICAgaW50IGZsYWdzKVxuJiM0MztcdFx0XHQgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4gXHRwbWRfdCBwbWQgPSBSRUFEX09OQ0UoKnBtZHApO1xuQEAgLTIxOSw2ICYjNDM7Mjc3LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcHRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGluaXRfY2xlYXJfcGd0YWJsZShwdGVwKTtcbiBcdFx0cHRlcCAmIzQzOz0gcHRlX2luZGV4KGFkZHIpO1xuIFx0XHRfX3BtZF9wb3B1bGF0ZShwbWRwLCBwdGVfcGh5cywgcG1kdmFsKTtcbiYjNDM7XHRcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcbiBcdH0gZWxzZSB7XG4gXHRcdEJVR19PTihwbWRfYmFkKHBtZCkpO1xuIFx0XHRwdGVwID0gcHRlX3NldF9maXhtYXBfb2Zmc2V0KHBtZHAsIGFkZHIpO1xuQEAgLTIzNSw3ICYjNDM7Mjk0LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcHRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdCAgICAhcHRlX3JhbmdlX2hhc192YWxpZF9ub25jb250KHB0ZXApKVxuIFx0XHRcdF9fcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7XG4gXG4tXHRcdGluaXRfcHRlKHB0ZXAsIGFkZHIsIG5leHQsIHBoeXMsIF9fcHJvdCk7XG4mIzQzO1x0XHRpbml0X3B0ZShwdGVwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsIG1hc2spO1xuIFxuIFx0XHRwdGVwICYjNDM7PSBwdGVfaW5kZXgobmV4dCkgLSBwdGVfaW5kZXgoYWRkcik7XG4gXHRcdHBoeXMgJiM0Mzs9IG5leHQgLSBhZGRyO1xuQEAgLTI1Myw3ICYjNDM7MzEyLDggQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcHRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXG4gc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0ICAgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QsXG4tXHRcdCAgICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksIGludCBmbGFncylcbiYjNDM7XHRcdCAgICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksIGludCBmbGFncyxcbiYjNDM7XHRcdCAgICBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4gXG5AQCAtMjY2LDcgJiM0MzszMjYsMTAgQEAgc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0aWYgKCgoYWRkciB8IG5leHQgfCBwaHlzKSBcdTAwMjYgflBNRF9NQVNLKSA9PSAwIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKGZsYWdzIFx1MDAyNiBOT19CTE9DS19NQVBQSU5HUykgPT0gMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFwbWRfdGFibGUob2xkX3BtZCkpIHtcbi1cdFx0XHRXQVJOX09OKCFwbWRfc2V0X2h1Z2UocG1kcCwgcGh5cywgcHJvdCkpO1xuJiM0MztcdFx0XHRpZiAocG1kX3NldF9odWdlKHBtZHAsIHBoeXMsIHByb3QpKVxuJiM0MztcdFx0XHRcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdFdBUk5fT04oMSk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBBZnRlciB0aGUgUE1EIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZVxuQEAgLTI3OCw3ICYjNDM7MzQxLDcgQEAgc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRcdHJldCA9IGFsbG9jX2luaXRfY29udF9wdGUocG1kcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCxcbi1cdFx0XHRcdFx0XHQgIHBndGFibGVfYWxsb2MsIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMzA2LDcgJiM0MzszNjksNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wbWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXMsXG4gXHRcdFx0ICAgICAgIHBncHJvdF90IHByb3QsXG4gXHRcdFx0ICAgICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSxcbi1cdFx0XHQgICAgICAgaW50IGZsYWdzKVxuJiM0MztcdFx0XHQgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpbnQgcmV0O1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuQEAgLTMzMSw2ICYjNDM7Mzk0LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGluaXRfY2xlYXJfcGd0YWJsZShwbWRwKTtcbiBcdFx0cG1kcCAmIzQzOz0gcG1kX2luZGV4KGFkZHIpO1xuIFx0XHRfX3B1ZF9wb3B1bGF0ZShwdWRwLCBwbWRfcGh5cywgcHVkdmFsKTtcbiYjNDM7XHRcdCptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDtcbiBcdH0gZWxzZSB7XG4gXHRcdEJVR19PTihwdWRfYmFkKHB1ZCkpO1xuIFx0XHRwbWRwID0gcG1kX3NldF9maXhtYXBfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuQEAgLTM0Nyw3ICYjNDM7NDExLDggQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdCAgICAhcG1kX3JhbmdlX2hhc192YWxpZF9ub25jb250KHBtZHApKVxuIFx0XHRcdF9fcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7XG4gXG4tXHRcdHJldCA9IGluaXRfcG1kKHBtZHAsIGFkZHIsIG5leHQsIHBoeXMsIF9fcHJvdCwgcGd0YWJsZV9hbGxvYywgZmxhZ3MpO1xuJiM0MztcdFx0cmV0ID0gaW5pdF9wbWQocG1kcCwgYWRkciwgbmV4dCwgcGh5cywgX19wcm90LCBwZ3RhYmxlX2FsbG9jLCBmbGFncyxcbiYjNDM7XHRcdFx0ICAgICAgIG1hc2spO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuQEAgLTM2NCw3ICYjNDM7NDI5LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gc3RhdGljIGludCBhbGxvY19pbml0X3B1ZChwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHQgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QsXG4gXHRcdFx0ICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksXG4tXHRcdFx0ICBpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdCAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbkBAIC0zODUsNiAmIzQzOzQ1MCw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wdWQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdGluaXRfY2xlYXJfcGd0YWJsZShwdWRwKTtcbiBcdFx0cHVkcCAmIzQzOz0gcHVkX2luZGV4KGFkZHIpO1xuIFx0XHRfX3A0ZF9wb3B1bGF0ZShwNGRwLCBwdWRfcGh5cywgcDRkdmFsKTtcbiYjNDM7XHRcdCptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDtcbiBcdH0gZWxzZSB7XG4gXHRcdEJVR19PTihwNGRfYmFkKHA0ZCkpO1xuIFx0XHRwdWRwID0gcHVkX3NldF9maXhtYXBfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xuQEAgLTQwMiw3ICYjNDM7NDY4LDEwIEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wdWQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdCAgICgoYWRkciB8IG5leHQgfCBwaHlzKSBcdTAwMjYgflBVRF9NQVNLKSA9PSAwIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKGZsYWdzIFx1MDAyNiBOT19CTE9DS19NQVBQSU5HUykgPT0gMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFwdWRfdGFibGUob2xkX3B1ZCkpIHtcbi1cdFx0XHRXQVJOX09OKCFwdWRfc2V0X2h1Z2UocHVkcCwgcGh5cywgcHJvdCkpO1xuJiM0MztcdFx0XHRpZiAocHVkX3NldF9odWdlKHB1ZHAsIHBoeXMsIHByb3QpKVxuJiM0MztcdFx0XHRcdCptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdFdBUk5fT04oMSk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBBZnRlciB0aGUgUFVEIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZVxuQEAgLTQxMiw3ICYjNDM7NDgxLDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X3B1ZChwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRcdFx0XHQgICAgICBSRUFEX09OQ0UocHVkX3ZhbCgqcHVkcCkpKSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cmV0ID0gYWxsb2NfaW5pdF9jb250X3BtZChwdWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBwcm90LFxuLVx0XHRcdFx0XHRcdCAgcGd0YWJsZV9hbGxvYywgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdFx0XHQgIHBndGFibGVfYWxsb2MsIGZsYWdzLCBtYXNrKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0Z290byBvdXQ7XG4gXG5AQCAtNDMxLDcgJiM0Mzs1MDAsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wNGQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0ICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LFxuIFx0XHRcdCAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxuLVx0XHRcdCAgaW50IGZsYWdzKVxuJiM0MztcdFx0XHQgIGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0aW50IHJldDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbkBAIC00NTIsNiAmIzQzOzUyMSw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wNGQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdGluaXRfY2xlYXJfcGd0YWJsZShwNGRwKTtcbiBcdFx0cDRkcCAmIzQzOz0gcDRkX2luZGV4KGFkZHIpO1xuIFx0XHRfX3BnZF9wb3B1bGF0ZShwZ2RwLCBwNGRfcGh5cywgcGdkdmFsKTtcbiYjNDM7XHRcdCptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcbiBcdH0gZWxzZSB7XG4gXHRcdEJVR19PTihwZ2RfYmFkKHBnZCkpO1xuIFx0XHRwNGRwID0gcDRkX3NldF9maXhtYXBfb2Zmc2V0KHBnZHAsIGFkZHIpO1xuQEAgLTQ2Myw3ICYjNDM7NTMzLDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X3A0ZChwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0bmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuIFxuIFx0XHRyZXQgPSBhbGxvY19pbml0X3B1ZChwNGRwLCBhZGRyLCBuZXh0LCBwaHlzLCBwcm90LFxuLVx0XHRcdFx0ICAgICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XG4mIzQzO1x0XHRcdFx0ICAgICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG5AQCAtNDgzLDcgJiM0Mzs1NTMsNyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nX2xvY2tlZChwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyB2aXJ0LCBwaHlzX2FkZHJfdCBzaXplLFxuIFx0XHRcdFx0ICAgICAgIHBncHJvdF90IHByb3QsXG4gXHRcdFx0XHQgICAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxuLVx0XHRcdFx0ICAgICAgIGludCBmbGFncylcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpbnQgcmV0O1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyLCBlbmQsIG5leHQ7XG5AQCAtNTAzLDcgJiM0Mzs1NzMsNyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nX2xvY2tlZChwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsXG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0cmV0ID0gYWxsb2NfaW5pdF9wNGQocGdkcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCwgcGd0YWJsZV9hbGxvYyxcbi1cdFx0XHRcdCAgICAgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdCAgICAgZmxhZ3MsIG1hc2spO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdHBoeXMgJiM0Mzs9IG5leHQgLSBhZGRyO1xuQEAgLTUxNiwxMyAmIzQzOzU4NiwxMyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHBnZF90ICpwZ2RpciwgcGh5c19hZGRyX3QgcGh5cyxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgdmlydCwgcGh5c19hZGRyX3Qgc2l6ZSxcbiBcdFx0XHRcdHBncHJvdF90IHByb3QsXG4gXHRcdFx0XHRwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksXG4tXHRcdFx0XHRpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdFx0aW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpbnQgcmV0O1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZmaXhtYXBfbG9jayk7XG4gXHRyZXQgPSBfX2NyZWF0ZV9wZ2RfbWFwcGluZ19sb2NrZWQocGdkaXIsIHBoeXMsIHZpcnQsIHNpemUsIHByb3QsXG4tXHRcdFx0XHRcdCAgcGd0YWJsZV9hbGxvYywgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2Zml4bWFwX2xvY2spO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC01MzUsOSAmIzQzOzYwNSwxMCBAQCBzdGF0aWMgdm9pZCBlYXJseV9jcmVhdGVfcGdkX21hcHBpbmcocGdkX3QgKnBnZGlyLCBwaHlzX2FkZHJfdCBwaHlzLFxuIFx0XHRcdFx0ICAgICBpbnQgZmxhZ3MpXG4ge1xuIFx0aW50IHJldDtcbiYjNDM7XHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiBcbiBcdHJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHBnZGlyLCBwaHlzLCB2aXJ0LCBzaXplLCBwcm90LCBwZ3RhYmxlX2FsbG9jLFxuLVx0XHRcdFx0ICAgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdCAgIGZsYWdzLCBcdTAwMjZtYXNrKTtcbiBcdGlmIChyZXQpXG4gXHRcdHBhbmljKFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgcGFnZSB0YWJsZXNcXG5cJiMzNDspO1xuIH1cbkBAIC0xMDA5LDYgJiM0MzsxMDgwLDI5IEBAIHZvaWQgX19pbml0IGxpbmVhcl9tYXBfbWF5YmVfc3BsaXRfdG9fcHRlcyh2b2lkKVxuIFx0fVxuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4mIzQzO3ZvaWQgX19pbml0IG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxuJiM0MztcdFx0XHQgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiYjNDM7XG4mIzQzO1x0YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cGh5c19hZGRyX3QgcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSk7XG4mIzQzO1x0XHRyZXQgPSBfX2NyZWF0ZV9wZ2RfbWFwcGluZyhwZXJjcHVfcGdkW2NwdV0sIHBoeXMsIHZpcnQsIFBBR0VfU0laRSwgUEFHRV9LRVJORUwsXG4mIzQzO1x0XHRcdFx0XHQgICBlYXJseV9wZ3RhYmxlX2FsbG9jLCBOT19FWEVDX01BUFBJTkdTLCBcdTAwMjZtYXNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHBhbmljKFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgbG9jYWwgcGVyY3B1IGZpcnN0IGNodW5rXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHR2aXJ0ICYjNDM7PSBQQUdFX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLypcbiAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgdG8gbW9kaWZ5IGV4aXN0aW5nIHRhYmxlIGVudHJpZXMsXG4gICogd2l0aG91dCBhbGxvY2F0aW5nIG5ldyBsZXZlbHMgb2YgdGFibGUuIE5vdGUgdGhhdCB0aGlzIHBlcm1pdHMgdGhlXG5AQCAtMTI3OSw2ICYjNDM7MTM3Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fa3B0aV9pbnN0YWxsX25nX21hcHBpbmdzKHZvaWQgKl9fdW51c2VkKVxuIFxuIFx0aWYgKCFjcHUpIHtcbiBcdFx0aW50IHJldDtcbiYjNDM7XHRcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xuIFxuIFx0XHRhbGxvYyA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQyB8IF9fR0ZQX1pFUk8sIG9yZGVyKTtcbiBcdFx0a3B0aV9uZ190ZW1wX3BnZCA9IChwZ2RfdCAqKShhbGxvYyAmIzQzOyAobGV2ZWxzIC0gMSkgKiBQQUdFX1NJWkUpO1xuQEAgLTEzMDIsNyAmIzQzOzEzOTcsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX2twdGlfaW5zdGFsbF9uZ19tYXBwaW5ncyh2b2lkICpfX3VudXNlZClcbiBcdFx0Ly9cbiBcdFx0cmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmdfbG9ja2VkKGtwdGlfbmdfdGVtcF9wZ2QsIF9fcGEoYWxsb2MpLFxuIFx0XHRcdFx0XHRcdCAgS1BUSV9OR19URU1QX1ZBLCBQQUdFX1NJWkUsIFBBR0VfS0VSTkVMLFxuLVx0XHRcdFx0XHRcdCAga3B0aV9uZ19wZ2RfYWxsb2MsIDApO1xuJiM0MztcdFx0XHRcdFx0XHQgIGtwdGlfbmdfcGdkX2FsbG9jLCAwLCBcdTAwMjZtYXNrKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRwYW5pYyhcJiMzNDtGYWlsZWQgdG8gY3JlYXRlIHBhZ2UgdGFibGVzXFxuXCYjMzQ7KTtcbiBcdH1cbkBAIC0xNjA4LDcgJiM0MzsxNzAzLDcgQEAgc3RhdGljIHZvaWQgdW5tYXBfaG90cGx1Z19yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFxuIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHRlX3RhYmxlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgZmxvb3IsXG4tXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBjZWlsaW5nKVxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcsIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdHB0ZV90ICpwdGVwLCBwdGU7XG4gXHR1bnNpZ25lZCBsb25nIGksIHN0YXJ0ID0gYWRkcjtcbkBAIC0xNjI0LDYgJiM0MzsxNzE5LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0V0FSTl9PTighcHRlX25vbmUocHRlKSk7XG4gXHR9IHdoaWxlIChhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGFkZHIgXHUwMDNjIGVuZCk7XG4gXG4mIzQzO1x0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xuIFx0aWYgKCFwZ3RhYmxlX3JhbmdlX2FsaWduZWQoc3RhcnQsIGVuZCwgZmxvb3IsIGNlaWxpbmcsIFBNRF9NQVNLKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTE2MzksMTMgJiM0MzsxNzM1LDE0IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHRlX3RhYmxlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHR9XG4gXG4gXHRwbWRfY2xlYXIocG1kcCk7XG4mIzQzO1x0Km1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEO1xuIFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoc3RhcnQpO1xuIFx0ZnJlZV9ob3RwbHVnX3BndGFibGVfcGFnZSh2aXJ0X3RvX3BhZ2UocHRlcCkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGZsb29yLFxuLVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZylcbiYjNDM7XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBjZWlsaW5nLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRwbWRfdCAqcG1kcCwgcG1kO1xuIFx0dW5zaWduZWQgbG9uZyBpLCBuZXh0LCBzdGFydCA9IGFkZHI7XG5AQCAtMTY1OCw3ICYjNDM7MTc1NSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFdBUk5fT04oIXBtZF9wcmVzZW50KHBtZCkgfHwgIXBtZF90YWJsZShwbWQpKTtcbi1cdFx0ZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcpO1xuJiM0MztcdFx0ZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIG1hc2spO1xuIFx0fSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgXHUwMDNjIGVuZCk7XG4gXG4gXHRpZiAoQ09ORklHX1BHVEFCTEVfTEVWRUxTIFx1MDAzYz0gMilcbkBAIC0xNjc5LDEzICYjNDM7MTc3NiwxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0fVxuIFxuIFx0cHVkX2NsZWFyKHB1ZHApO1xuJiM0MztcdCptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKHN0YXJ0KTtcbiBcdGZyZWVfaG90cGx1Z19wZ3RhYmxlX3BhZ2UodmlydF90b19wYWdlKHBtZHApKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcbi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcpXG4mIzQzO1x0XHRcdFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0cHVkX3QgKnB1ZHAsIHB1ZDtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgbmV4dCwgc3RhcnQgPSBhZGRyO1xuQEAgLTE2OTgsNyAmIzQzOzE3OTYsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B1ZF90YWJsZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRXQVJOX09OKCFwdWRfcHJlc2VudChwdWQpIHx8ICFwdWRfdGFibGUocHVkKSk7XG4tXHRcdGZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTtcbiYjNDM7XHRcdGZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nLCBtYXNrKTtcbiBcdH0gd2hpbGUgKGFkZHIgPSBuZXh0LCBhZGRyIFx1MDAzYyBlbmQpO1xuIFxuIFx0aWYgKCFwZ3RhYmxlX2w0X2VuYWJsZWQoKSlcbkBAIC0xNzE5LDEzICYjNDM7MTgxNywxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B1ZF90YWJsZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0fVxuIFxuIFx0cDRkX2NsZWFyKHA0ZHApO1xuJiM0MztcdCptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKHN0YXJ0KTtcbiBcdGZyZWVfaG90cGx1Z19wZ3RhYmxlX3BhZ2UodmlydF90b19wYWdlKHB1ZHApKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wNGRfdGFibGUocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcbi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcpXG4mIzQzO1x0XHRcdFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0cDRkX3QgKnA0ZHAsIHA0ZDtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgbmV4dCwgc3RhcnQgPSBhZGRyO1xuQEAgLTE3MzgsNyAmIzQzOzE4MzcsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3A0ZF90YWJsZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRXQVJOX09OKCFwNGRfcHJlc2VudChwNGQpKTtcbi1cdFx0ZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcpO1xuJiM0MztcdFx0ZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIG1hc2spO1xuIFx0fSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgXHUwMDNjIGVuZCk7XG4gXG4gXHRpZiAoIXBndGFibGVfbDVfZW5hYmxlZCgpKVxuQEAgLTE3NTksNiAmIzQzOzE4NTgsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3A0ZF90YWJsZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0fVxuIFxuIFx0cGdkX2NsZWFyKHBnZHApO1xuJiM0MztcdCptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKHN0YXJ0KTtcbiBcdGZyZWVfaG90cGx1Z19wZ3RhYmxlX3BhZ2UodmlydF90b19wYWdlKHA0ZHApKTtcbiB9XG5AQCAtMTc2OCw2ICYjNDM7MTg2OCw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfdGFibGVzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuIFx0cGdkX3QgKnBnZHAsIHBnZDtcbiYjNDM7XHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcbiBcbiBcdGRvIHtcbiBcdFx0bmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuQEAgLTE3NzcsOCAmIzQzOzE4NzksMTEgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV90YWJsZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0V0FSTl9PTighcGdkX3ByZXNlbnQocGdkKSk7XG4tXHRcdGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTtcbiYjNDM7XHRcdGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nLCBcdTAwMjZtYXNrKTtcbiBcdH0gd2hpbGUgKGFkZHIgPSBuZXh0LCBhZGRyIFx1MDAzYyBlbmQpO1xuJiM0MztcbiYjNDM7XHRpZiAobWFzayBcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcbiYjNDM7XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIGVuZCk7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTE5ODYsNiAmIzQzOzIwOTEsNyBAQCBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdCAgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxuIHtcbiBcdGludCByZXQsIGZsYWdzID0gTk9fRVhFQ19NQVBQSU5HUztcbiYjNDM7XHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiBcbiBcdFZNX0JVR19PTighbWhwX3JhbmdlX2FsbG93ZWQoc3RhcnQsIHNpemUsIHRydWUpKTtcbiBcbkBAIC0xOTk0LDEwICYjNDM7MjEwMCwxMyBAQCBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXG4gXHRyZXQgPSBfX2NyZWF0ZV9wZ2RfbWFwcGluZyhzd2FwcGVyX3BnX2Rpciwgc3RhcnQsIF9fcGh5c190b192aXJ0KHN0YXJ0KSxcbiBcdFx0XHRcdCAgIHNpemUsIHBhcmFtcy1cdTAwM2VwZ3Byb3QsIHBnZF9wZ3RhYmxlX2FsbG9jX2luaXRfbW0sXG4tXHRcdFx0XHQgICBmbGFncyk7XG4mIzQzO1x0XHRcdFx0ICAgZmxhZ3MsIFx1MDAyNm1hc2spO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnI7XG4gXG4mIzQzO1x0aWYgKG1hc2sgXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXG4mIzQzO1x0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBzdGFydCAmIzQzOyBzaXplKTtcbiYjNDM7XG4gXHRtZW1ibG9ja19jbGVhcl9ub21hcChzdGFydCwgc2l6ZSk7XG4gXG4gXHRyZXQgPSBfX2FkZF9wYWdlcyhuaWQsIHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uZGQyOTMzMTk4MjNlM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMzg5LDYgJiM0MzszODksMTAgQEAgc3RhdGljIGludCBfX2luaXQgcHRkdW1wX2luaXQodm9pZClcbiBcdFx0eyBNT0RVTEVTX0VORCxcdFx0XCYjMzQ7TW9kdWxlcyBlbmRcJiMzNDsgfSxcbiBcdFx0eyBWTUFMTE9DX1NUQVJULFx0XCYjMzQ7dm1hbGxvYygpIGFyZWFcJiMzNDsgfSxcbiBcdFx0eyBWTUFMTE9DX0VORCxcdFx0XCYjMzQ7dm1hbGxvYygpIGVuZFwmIzM0OyB9LFxuJiM0MztcdFx0eyBQRVJDUFVfU1RBUlQsXHRcdFwmIzM0O0dsb2JhbCBwZXJjcHUgc3RhcnRcJiMzNDsgfSxcbiYjNDM7XHRcdHsgUEVSQ1BVX0VORCxcdFx0XCYjMzQ7R2xvYmFsIHBlcmNwdSBlbmRcJiMzNDsgfSxcbiYjNDM7XHRcdHsgTE9DQUxfUEVSQ1BVX1NUQVJULFx0XCYjMzQ7TG9jYWwgcGVyY3B1IHN0YXJ0XCYjMzQ7IH0sXG4mIzQzO1x0XHR7IExPQ0FMX1BFUkNQVV9FTkQsXHRcJiMzNDtMb2NhbCBwZXJjcHUgZW5kXCYjMzQ7IH0sXG4gXHRcdHsgdm1lbW1hcF9zdGFydCxcdFwmIzM0O3ZtZW1tYXAgc3RhcnRcJiMzNDsgfSxcbiBcdFx0eyBWTUVNTUFQX0VORCxcdFx0XCYjMzQ7dm1lbW1hcCBlbmRcJiMzNDsgfSxcbiBcdFx0eyBQQ0lfSU9fU1RBUlQsXHRcdFwmIzM0O1BDSSBJL08gc3RhcnRcJiMzNDsgfSxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuYyBiL2FyY2gvcmlzY3Yva2VybmVsL3NtcC5jXG5pbmRleCBmYTY2ZjljOTdkNzQ4ZC4uZDQyMGZmOWRjZjRmYzggMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rZXJuZWwvc21wLmNcbkBAIC0zNjQsMyAmIzQzOzM2NCw1NCBAQCB2b2lkIGtnZGJfcm91bmR1cF9jcHVzKHZvaWQpXG4gXHR9XG4gfVxuICNlbmRpZlxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxuJiM0MztleHRlcm4gaW50IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXTtcbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5O1xuJiM0MztFWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9vZmZzZXQpO1xuJiM0MztcbiYjNDM7aW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY3B1X3RvX25vZGVfbWFwW2NwdV07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHBjcHVfY3B1X2Rpc3RhbmNlKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbm9kZV9kaXN0YW5jZShlYXJseV9jcHVfdG9fbm9kZShmcm9tKSwgZWFybHlfY3B1X3RvX25vZGUodG8pKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkZWx0YTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3B1O1xuJiM0MztcdGludCByYyA9IC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChwY3B1X2Nob3Nlbl9mYyAhPSBQQ1BVX0ZDX1BBR0UpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBbHdheXMgcmVzZXJ2ZSBhcmVhIGZvciBtb2R1bGUgcGVyY3B1IHZhcmlhYmxlcy4gIFRoYXQmIzM5O3NcbiYjNDM7XHRcdCAqIHdoYXQgdGhlIGxlZ2FjeSBhbGxvY2F0b3IgZGlkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyYyA9IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLFxuJiM0MztcdFx0XHRcdFx0ICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUsIFBBR0VfU0laRSxcbiYjNDM7XHRcdFx0XHRcdCAgICBwY3B1X2NwdV9kaXN0YW5jZSxcbiYjNDM7XHRcdFx0XHRcdCAgICBlYXJseV9jcHVfdG9fbm9kZSk7XG4mIzQzOyNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbiYjNDM7XHRcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBwY3B1X2ZjX25hbWVzW3BjcHVfY2hvc2VuX2ZjXSwgcmMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKVxuJiM0MztcdFx0cmMgPSBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLCBlYXJseV9jcHVfdG9fbm9kZSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdHBhbmljKFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHBlcmNwdSBhcmVhcyAoZXJyPSVkKS5cJiMzNDssIHJjKTtcbiYjNDM7XG4mIzQzO1x0ZGVsdGEgPSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkciAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDtcbiYjNDM7XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxuJiM0MztcdFx0X19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgJiM0MzsgcGNwdV91bml0X29mZnNldHNbY3B1XTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMgYi9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmNcbmluZGV4IGM5OWYyYWIxMDVlNWI3Li5iM2I5MWNlZWQ2YTkwZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jXG5AQCAtMTYsNyAmIzQzOzE2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2VjdGlvbnMuaFx1MDAzZVxuIFxuLXN0YXRpYyBpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IE5VTUFfTk9fTk9ERSB9O1xuJiM0MztpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IE5VTUFfTk9fTk9ERSB9O1xuIFxuIGJvb2wgbnVtYV9vZmY7XG4gXG5AQCAtMTQwLDU1ICYjNDM7MTQwLDYgQEAgdm9pZCBfX2luaXQgZWFybHlfbWFwX2NwdV90b19ub2RlKHVuc2lnbmVkIGludCBjcHUsIGludCBuaWQpXG4gXHRcdHNldF9jcHVfbnVtYV9ub2RlKGNwdSwgbmlkKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxuLXVuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5O1xuLUVYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7XG4tXG4taW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpXG4te1xuLVx0cmV0dXJuIGNwdV90b19ub2RlX21hcFtjcHVdO1xuLX1cbi1cbi1zdGF0aWMgaW50IF9faW5pdCBwY3B1X2NwdV9kaXN0YW5jZSh1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvKVxuLXtcbi1cdHJldHVybiBub2RlX2Rpc3RhbmNlKGVhcmx5X2NwdV90b19ub2RlKGZyb20pLCBlYXJseV9jcHVfdG9fbm9kZSh0bykpO1xuLX1cbi1cbi12b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBkZWx0YTtcbi1cdHVuc2lnbmVkIGludCBjcHU7XG4tXHRpbnQgcmMgPSAtRUlOVkFMO1xuLVxuLVx0aWYgKHBjcHVfY2hvc2VuX2ZjICE9IFBDUFVfRkNfUEFHRSkge1xuLVx0XHQvKlxuLVx0XHQgKiBBbHdheXMgcmVzZXJ2ZSBhcmVhIGZvciBtb2R1bGUgcGVyY3B1IHZhcmlhYmxlcy4gIFRoYXQmIzM5O3Ncbi1cdFx0ICogd2hhdCB0aGUgbGVnYWN5IGFsbG9jYXRvciBkaWQuXG4tXHRcdCAqL1xuLVx0XHRyYyA9IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLFxuLVx0XHRcdFx0XHQgICAgUEVSQ1BVX0RZTkFNSUNfUkVTRVJWRSwgUEFHRV9TSVpFLFxuLVx0XHRcdFx0XHQgICAgcGNwdV9jcHVfZGlzdGFuY2UsXG4tXHRcdFx0XHRcdCAgICBlYXJseV9jcHVfdG9fbm9kZSk7XG4tI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuLVx0XHRpZiAocmMgXHUwMDNjIDApXG4tXHRcdFx0cHJfd2FybihcJiMzNDtQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgIHBjcHVfZmNfbmFtZXNbcGNwdV9jaG9zZW5fZmNdLCByYyk7XG4tI2VuZGlmXG4tXHR9XG4tXG4tI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuLVx0aWYgKHJjIFx1MDAzYyAwKVxuLVx0XHRyYyA9IHBjcHVfcGFnZV9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsIGVhcmx5X2NwdV90b19ub2RlKTtcbi0jZW5kaWZcbi1cdGlmIChyYyBcdTAwM2MgMClcbi1cdFx0cGFuaWMoXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgcGVyY3B1IGFyZWFzIChlcnI9JWQpLlwmIzM0OywgcmMpO1xuLVxuLVx0ZGVsdGEgPSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkciAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDtcbi1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXG4tXHRcdF9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IGRlbHRhICYjNDM7IHBjcHVfdW5pdF9vZmZzZXRzW2NwdV07XG4tfVxuLSNlbmRpZlxuLVxuIC8qXG4gICogSW5pdGlhbGl6ZSBOT0RFX0RBVEEgZm9yIGEgbm9kZSBvbiB0aGUgbG9jYWwgbWVtb3J5XG4gICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uYzhjMzgwMGZiZDlmYTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTE4NTgsNiAmIzQzOzE4NTgsMTcgQEAgdW5zaWduZWQgbG9uZyB2bWFsbG9jX3RvX3Bmbihjb25zdCB2b2lkICphZGRyKTtcbiAjaWZkZWYgQ09ORklHX01NVVxuIGV4dGVybiBib29sIGlzX3ZtYWxsb2NfYWRkcihjb25zdCB2b2lkICp4KTtcbiBleHRlcm4gaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCk7XG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGVyY3B1X2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGFkZHIgXHUwMDNlPSBQRVJDUFVfU1RBUlQgXHUwMDI2XHUwMDI2IGFkZHIgXHUwMDNjIExPQ0FMX1BFUkNQVV9FTkQ7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3BlcmNwdV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc192bWFsbG9jX2FkZHIoY29uc3Qgdm9pZCAqeClcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmhcbmluZGV4IDRmMzZiODU4NTk5NWM1Li41YTI3MDMxZGZmMWE1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmhcbkBAIC03NSw2ICYjNDM7NzUsOCBAQFxuIFxuIGV4dGVybiB2b2lkICpwY3B1X2Jhc2VfYWRkcjtcbiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyAqcGNwdV91bml0X29mZnNldHM7XG4mIzQzOy8qIHBlcmNwdSBsb2NhbCBtYXBwaW5nIGJhc2UgKi9cbiYjNDM7ZXh0ZXJuIHZvaWQgKnBjcHVfbG9jYWxfYmFzZTtcbiBcbiBzdHJ1Y3QgcGNwdV9ncm91cF9pbmZvIHtcbiBcdGludFx0XHRcdG5yX3VuaXRzO1x0LyogYWxpZ25lZCAjIG9mIHVuaXRzICovXG5AQCAtMTE0LDcgJiM0MzsxMTYsNyBAQCBleHRlcm4gc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBwY3B1X2FsbG9jX2FsbG9jX2luZm8oaW50IG5yX2dyb3VwcyxcbiBleHRlcm4gdm9pZCBfX2luaXQgcGNwdV9mcmVlX2FsbG9jX2luZm8oc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWkpO1xuIFxuIGV4dGVybiB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLFxuLVx0XHRcdFx0XHQgdm9pZCAqYmFzZV9hZGRyKTtcbiYjNDM7XHRcdFx0XHRcdCB2b2lkICpiYXNlX2FkZHIsIHZvaWQgKmxvY2FsX2Jhc2UpO1xuIFxuIGV4dGVybiBpbnQgX19pbml0IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHNpemVfdCBkeW5fc2l6ZSxcbiBcdFx0XHRcdHNpemVfdCBhdG9tX3NpemUsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxuaW5kZXggOTE3NGZhNTliYmM1NGQuLjA2MmM2NGE1ZDRiZDBjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oXG5AQCAtMjYsNCAmIzQzOzI2LDE3IEBAXG4gXHRcdFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTtcdFx0XFxcbiBcdH0gd2hpbGUgKDApXG4gXG4mIzQzOyNpZm5kZWYgQ09ORklHX0FSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXG4mIzQzOyNkZWZpbmUgcHVkX3BvcHVsYXRlX3N5bmMoYWRkciwgcHVkLCBwbWQpXHRcdFx0XHRcXFxuJiM0MztcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHB1ZF9wb3B1bGF0ZShcdTAwMjZpbml0X21tLCBwdWQsIHBtZCk7XHRcdFx0XFxcbiYjNDM7XHR9IHdoaWxlICgwKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZm5kZWYgQ09ORklHX0FSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DXG4mIzQzOyNkZWZpbmUgcG1kX3BvcHVsYXRlX3N5bmMoYWRkciwgcG1kLCBwdGUpXHRcdFx0XHRcXFxuJiM0MztcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcG1kLCBwdGUpO1x0XHRcXFxuJiM0MztcdH0gd2hpbGUgKDApXG4mIzQzOyNlbmRpZlxuICNlbmRpZiAvKiBfTElOVVhfUEdBTExPQ19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaFxuaW5kZXggZDg3ZGM3Zjc3ZjRlOGEuLmRhZjk5NjVhMTExZDFmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oXG5AQCAtMzEzLDYgJiM0MzszMTMsOSBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbiBcdFx0XHRcdCAgICAgc2l6ZV90IGFsaWduKTtcbiBcbiB2b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKTtcbiYjNDM7c3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgdW5pdF9zaXplLCBzaXplX3QgYWxpZ24pO1xuJiM0MztcbiAjIGVsc2VcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2bV9zdHJ1Y3QgKipcbiBwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLFxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uZTE5MTBjMzMyNjM4NTEgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnXG5AQCAtMTA2MSw2ICYjNDM7MTA2MSw5IEBAIGNvbmZpZyBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuIGNvbmZpZyBVU0VfUEVSQ1BVX05VTUFfTk9ERV9JRFxuIFx0Ym9vbFxuIFxuJiM0Mztjb25maWcgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztcdGJvb2xcbiYjNDM7XG4gY29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4gXHRib29sXG4gXG5AQCAtMTUwOSw2ICYjNDM7MTUxMiwxMiBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXG4gXG4gXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gXG4mIzQzO2NvbmZpZyBBUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQ1xuJiM0MztcdGJvb2xcbiYjNDM7XG4mIzQzO2NvbmZpZyBBUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQ1xuJiM0MztcdGJvb2xcbiYjNDM7XG4gc291cmNlIFwmIzM0O21tL2RhbW9uL0tjb25maWdcJiMzNDtcbiBcbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li45ZDlmMDhjYjI2YTExNCAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0xNTUyLDEwICYjNDM7MTU1MiwxMyBAQCB2b2lkIGNsZWFyX3ZtX3VuaW5pdGlhbGl6ZWRfZmxhZyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSk7XG4gaW50IF9fbXVzdF9jaGVjayBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9zaGlmdCk7XG4mIzQzO2ludCBfX211c3RfY2hlY2sgdm1hcF9yYW5nZV9ub2ZsdXNoKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGh5c19hZGRyX3QgcGh5c19hZGRyLFxuJiM0MztcdFx0XHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpO1xuIFxuIHZvaWQgdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuIFxuLXZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG4mIzQzO3ZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX3NpbmdsZV90aHJlYWRlZF9wcml2YXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9rbXNhbi9ob29rcy5jIGIvbW0va21zYW4vaG9va3MuY1xuaW5kZXggOGYyMmQxZjIyOTgxM2YuLmUyYTBmYWYzNDRiOTFiIDEwMDY0NFxuLS0tIGEvbW0va21zYW4vaG9va3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va21zYW4vaG9va3MuY1xuQEAgLTEzNSw4ICYjNDM7MTM1LDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdm1hbGxvY19vcmlnaW4odW5zaWduZWQgbG9uZyBhZGRyKVxuIFxuIHZvaWQga21zYW5fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4ge1xuLVx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh2bWFsbG9jX3NoYWRvdyhzdGFydCksIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xuLVx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh2bWFsbG9jX29yaWdpbihzdGFydCksIHZtYWxsb2Nfb3JpZ2luKGVuZCkpO1xuJiM0MztcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHZtYWxsb2Nfc2hhZG93KHN0YXJ0KSwgdm1hbGxvY19zaGFkb3coZW5kKSk7XG4mIzQzO1x0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgdm1hbGxvY19vcmlnaW4oc3RhcnQpLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcbiBcdGZsdXNoX2NhY2hlX3ZtYXAodm1hbGxvY19zaGFkb3coc3RhcnQpLCB2bWFsbG9jX3NoYWRvdyhlbmQpKTtcbiBcdGZsdXNoX2NhY2hlX3ZtYXAodm1hbGxvY19vcmlnaW4oc3RhcnQpLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcbiB9XG5AQCAtMTgxLDcgJiM0MzsxODEsNyBAQCBpbnQga21zYW5faW9yZW1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdHZtYWxsb2Nfb3JpZ2luKHN0YXJ0ICYjNDM7IG9mZiAmIzQzOyBQQUdFX1NJWkUpLCBwcm90LCBcdTAwMjZvcmlnaW4sXG4gXHRcdFx0UEFHRV9TSElGVCk7XG4gXHRcdGlmIChtYXBwZWQpIHtcbi1cdFx0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKFxuJiM0MztcdFx0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLFxuIFx0XHRcdFx0dm1hbGxvY19zaGFkb3coc3RhcnQgJiM0Mzsgb2ZmKSxcbiBcdFx0XHRcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0ICYjNDM7IG9mZiAmIzQzOyBQQUdFX1NJWkUpKTtcbiBcdFx0XHRlcnIgPSBtYXBwZWQ7XG5AQCAtMjAzLDEwICYjNDM7MjAzLDEwIEBAIGludCBrbXNhbl9pb3JlbWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0X19mcmVlX3BhZ2VzKHNoYWRvdywgMSk7XG4gXHRcdGlmIChvcmlnaW4pXG4gXHRcdFx0X19mcmVlX3BhZ2VzKG9yaWdpbiwgMSk7XG4tXHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goXG4mIzQzO1x0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLFxuIFx0XHRcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0KSxcbiBcdFx0XHR2bWFsbG9jX3NoYWRvdyhzdGFydCAmIzQzOyBjbGVhbiAqIFBBR0VfU0laRSkpO1xuLVx0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKFxuJiM0MztcdFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCxcbiBcdFx0XHR2bWFsbG9jX29yaWdpbihzdGFydCksXG4gXHRcdFx0dm1hbGxvY19vcmlnaW4oc3RhcnQgJiM0MzsgY2xlYW4gKiBQQUdFX1NJWkUpKTtcbiBcdH1cbkBAIC0yMzMsOCAmIzQzOzIzMyw4IEBAIHZvaWQga21zYW5faW91bm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFx0ICAgICBpJiM0MzsmIzQzOywgdl9zaGFkb3cgJiM0Mzs9IFBBR0VfU0laRSwgdl9vcmlnaW4gJiM0Mzs9IFBBR0VfU0laRSkge1xuIFx0XHRzaGFkb3cgPSBrbXNhbl92bWFsbG9jX3RvX3BhZ2Vfb3JfbnVsbCgodm9pZCAqKXZfc2hhZG93KTtcbiBcdFx0b3JpZ2luID0ga21zYW5fdm1hbGxvY190b19wYWdlX29yX251bGwoKHZvaWQgKil2X29yaWdpbik7XG4tXHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2godl9zaGFkb3csIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xuLVx0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHZfb3JpZ2luLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcbiYjNDM7XHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHZfc2hhZG93LCB2bWFsbG9jX3NoYWRvdyhlbmQpKTtcbiYjNDM7XHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHZfb3JpZ2luLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcbiBcdFx0aWYgKHNoYWRvdylcbiBcdFx0XHRfX2ZyZWVfcGFnZXMoc2hhZG93LCAxKTtcbiBcdFx0aWYgKG9yaWdpbilcbmRpZmYgLS1naXQgYS9tbS9wZXJjcHUtaW50ZXJuYWwuaCBiL21tL3BlcmNwdS1pbnRlcm5hbC5oXG5pbmRleCA4Y2JlMDM5YmY4NDdhYy4uNGQ0NjEzMDUyNDNiZjAgMTAwNjQ0XG4tLS0gYS9tbS9wZXJjcHUtaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGVyY3B1LWludGVybmFsLmhcbkBAIC02MywxMSAmIzQzOzYzLDE0IEBAIHN0cnVjdCBwY3B1X2NodW5rIHtcbiBcdCAqIGNodW5rX21kLlxuIFx0ICovXG4gXHR2b2lkXHRcdFx0KmJhc2VfYWRkciBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuJiM0MztcdC8qIHBlcmNwdSBsb2NhbCBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNodW5rICovXG4mIzQzO1x0dm9pZCAgICAgICAgICAgICAgICAgICAgKmxvY2FsX2Jhc2U7XG4gXG4gXHR1bnNpZ25lZCBsb25nXHRcdCphbGxvY19tYXA7XHQvKiBhbGxvY2F0aW9uIG1hcCAqL1xuIFx0c3RydWN0IHBjcHVfYmxvY2tfbWRcdCptZF9ibG9ja3M7XHQvKiBtZXRhZGF0YSBibG9ja3MgKi9cbiBcbiBcdHZvaWRcdFx0XHQqZGF0YTtcdFx0LyogY2h1bmsgZGF0YSAqL1xuJiM0MztcdHZvaWRcdFx0XHQqbG9jYWxfZGF0YTtcdC8qIGNodW5rIGxvY2FsIHZtICovXG4gXHRib29sXHRcdFx0aW1tdXRhYmxlO1x0Lyogbm8gW2RlXXBvcHVsYXRpb24gYWxsb3dlZCAqL1xuIFx0Ym9vbFx0XHRcdGlzb2xhdGVkO1x0LyogaXNvbGF0ZWQgZnJvbSBhY3RpdmUgY2h1bmtcbiBcdFx0XHRcdFx0XHQgICBzbG90cyAqL1xuQEAgLTE2Miw2ICYjNDM7MTY1LDE3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHBjcHVfb2JqX2Z1bGxfc2l6ZShzaXplX3Qgc2l6ZSlcbiBcdHJldHVybiBzaXplICogbnVtX3Bvc3NpYmxlX2NwdXMoKSAmIzQzOyBleHRyYV9zaXplO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4mIzQzO2V4dGVybiB2b2lkIF9faW5pdCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucik7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm47XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNpZmRlZiBDT05GSUdfUEVSQ1BVX1NUQVRTXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuZGlmZiAtLWdpdCBhL21tL3BlcmNwdS12bS5jIGIvbW0vcGVyY3B1LXZtLmNcbmluZGV4IDRmNTkzNzA5MDU5MGQ4Li41ZGVjYWFkNzY0MGZkYyAxMDA2NDRcbi0tLSBhL21tL3BlcmNwdS12bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wZXJjcHUtdm0uY1xuQEAgLTExMiw2ICYjNDM7MTEyLDEwIEBAIHN0YXRpYyBpbnQgcGNwdV9hbGxvY19wYWdlcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXG4gXHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztleHRlcm4gcGdkX3QgKnBlcmNwdV9wZ2RbTlJfQ1BVU107XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKipcbiAgKiBwY3B1X3ByZV91bm1hcF9mbHVzaCAtIGZsdXNoIGNhY2hlIHByaW9yIHRvIHVubWFwcGluZ1xuICAqIEBjaHVuazogY2h1bmsgdGhlIHJlZ2lvbnMgdG8gYmUgZmx1c2hlZCBiZWxvbmdzIHRvXG5AQCAtMTMwLDYgJiM0MzsxMzQsMTEgQEAgc3RhdGljIHZvaWQgcGNwdV9wcmVfdW5tYXBfZmx1c2goc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0Zmx1c2hfY2FjaGVfdnVubWFwKFxuIFx0XHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfbG93X3VuaXRfY3B1LCBwYWdlX3N0YXJ0KSxcbiBcdFx0cGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2hpZ2hfdW5pdF9jcHUsIHBhZ2VfZW5kKSk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbiYjNDM7XHRmbHVzaF9jYWNoZV92dW5tYXAoKHVuc2lnbmVkIGxvbmcpY2h1bmstXHUwMDNlbG9jYWxfYmFzZSAmIzQzOyAocGFnZV9zdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgJiM0MzsgKHBhZ2VfZW5kIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4mIzQzOyNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX3BjcHVfdW5tYXBfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnJfcGFnZXMpXG5AQCAtMTM3LDYgJiM0MzsxNDYsMjAgQEAgc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5yX3BhZ2VzKVxuIFx0dnVubWFwX3JhbmdlX25vZmx1c2goYWRkciwgYWRkciAmIzQzOyAobnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztzdGF0aWMgdm9pZCBfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxuJiM0MztcdFx0XHQgICAgaW50IG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZXJjcHVfcGdkW2NwdV0sIHZpcnQsIHZpcnQgJiM0MzsgKG5yX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzX2xvY2FsKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcbiYjNDM7XHRcdFx0ICAgIGludCBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybjtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyoqXG4gICogcGNwdV91bm1hcF9wYWdlcyAtIHVubWFwIHBhZ2VzIG91dCBvZiBhIHBjcHVfY2h1bmtcbiAgKiBAY2h1bms6IGNodW5rIG9mIGludGVyZXN0XG5AQCAtMTY2LDYgJiM0MzsxODksMTAgQEAgc3RhdGljIHZvaWQgcGNwdV91bm1hcF9wYWdlcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXG4gXHRcdH1cbiBcdFx0X19wY3B1X3VubWFwX3BhZ2VzKHBjcHVfY2h1bmtfYWRkcihjaHVuaywgY3B1LCBwYWdlX3N0YXJ0KSxcbiBcdFx0XHRcdCAgIHBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7XG4mIzQzO1xuJiM0MztcdFx0X19wY3B1X3VubWFwX3BhZ2VzX2xvY2FsKGNwdSxcbiYjNDM7XHRcdFx0XHRcdCh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgJiM0MzsgKHBhZ2Vfc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxuJiM0MztcdFx0XHRcdFx0cGFnZV9lbmQgLSBwYWdlX3N0YXJ0KTtcbiBcdH1cbiB9XG4gXG5AQCAtMTg4LDYgJiM0MzsyMTUsMTIgQEAgc3RhdGljIHZvaWQgcGNwdV9wb3N0X3VubWFwX3RsYl9mbHVzaChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXG4gXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKFxuIFx0XHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfbG93X3VuaXRfY3B1LCBwYWdlX3N0YXJ0KSxcbiBcdFx0cGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2hpZ2hfdW5pdF9jcHUsIHBhZ2VfZW5kKSk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbiYjNDM7XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKFxuJiM0MztcdFx0KHVuc2lnbmVkIGxvbmcpY2h1bmstXHUwMDNlbG9jYWxfYmFzZSAmIzQzOyAocGFnZV9zdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4mIzQzO1x0XHQodW5zaWduZWQgbG9uZyljaHVuay1cdTAwM2Vsb2NhbF9iYXNlICYjNDM7IChwYWdlX2VuZCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuJiM0MzsjZW5kaWZcbiB9XG4gXG4gc3RhdGljIGludCBfX3BjcHVfbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbkBAIC0xOTcsNiAmIzQzOzIzMCwzMiBAQCBzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuIFx0XHRcdFBBR0VfS0VSTkVMLCBwYWdlcywgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbiYjNDM7c3RhdGljIGludCBfX3BjcHVfbWFwX3BhZ2VzX2xvY2FsKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbiYjNDM7XHRcdFx0ICAgIGludCBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChwZXJjcHVfcGdkW2NwdV0sIHZpcnQsIHZpcnQgJiM0MzsgUEFHRV9TSVpFLFxuJiM0MztcdFx0XHRcdHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIFBBR0VfS0VSTkVMLCBQQUdFX1NISUZUKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0dmlydCAmIzQzOz0gUEFHRV9TSVpFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXNfbG9jYWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuJiM0MztcdFx0XHQgICAgaW50IG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qKlxuICAqIHBjcHVfbWFwX3BhZ2VzIC0gbWFwIHBhZ2VzIGludG8gYSBwY3B1X2NodW5rXG4gICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdFxuQEAgLTIyNCw2ICYjNDM7MjgzLDEzIEBAIHN0YXRpYyBpbnQgcGNwdV9tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gZXJyO1xuIFxuJiM0MztcdFx0ZXJyID0gX19wY3B1X21hcF9wYWdlc19sb2NhbChjcHUsXG4mIzQzO1x0XHRcdFx0XHQodW5zaWduZWQgbG9uZyljaHVuay1cdTAwM2Vsb2NhbF9iYXNlICYjNDM7IChwYWdlX3N0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNnBhZ2VzW3BjcHVfcGFnZV9pZHgoY3B1LCBwYWdlX3N0YXJ0KV0sXG4mIzQzO1x0XHRcdFx0XHRwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuIFx0XHRmb3IgKGkgPSBwYWdlX3N0YXJ0OyBpIFx1MDAzYyBwYWdlX2VuZDsgaSYjNDM7JiM0MzspXG4gXHRcdFx0cGNwdV9zZXRfcGFnZV9jaHVuayhwYWdlc1twY3B1X3BhZ2VfaWR4KGNwdSwgaSldLFxuIFx0XHRcdFx0XHQgICAgY2h1bmspO1xuQEAgLTIzMyw2ICYjNDM7Mjk5LDkgQEAgc3RhdGljIGludCBwY3B1X21hcF9wYWdlcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUodGNwdSkge1xuIFx0XHRfX3BjcHVfdW5tYXBfcGFnZXMocGNwdV9jaHVua19hZGRyKGNodW5rLCB0Y3B1LCBwYWdlX3N0YXJ0KSxcbiBcdFx0XHRcdCAgIHBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7XG4mIzQzO1x0XHRfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwodGNwdSxcbiYjNDM7XHRcdFx0XHRcdCh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgJiM0MzsgKHBhZ2Vfc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxuJiM0MztcdFx0XHRcdFx0cGFnZV9lbmQgLSBwYWdlX3N0YXJ0KTtcbiBcdFx0aWYgKHRjcHUgPT0gY3B1KVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTI1OCw2ICYjNDM7MzI3LDExIEBAIHN0YXRpYyB2b2lkIHBjcHVfcG9zdF9tYXBfZmx1c2goc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0Zmx1c2hfY2FjaGVfdm1hcChcbiBcdFx0cGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2xvd191bml0X2NwdSwgcGFnZV9zdGFydCksXG4gXHRcdHBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9oaWdoX3VuaXRfY3B1LCBwYWdlX2VuZCkpO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4mIzQzO1x0Zmx1c2hfY2FjaGVfdm1hcCgodW5zaWduZWQgbG9uZyljaHVuay1cdTAwM2Vsb2NhbF9iYXNlICYjNDM7IChwYWdlX3N0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbiYjNDM7XHRcdFx0ICh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgJiM0MzsgKHBhZ2VfZW5kIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4mIzQzOyNlbmRpZlxuIH1cbiBcbiAvKipcbkBAIC0zNDksNiAmIzQzOzQyMywyNCBAQCBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY3JlYXRlX2NodW5rKGdmcF90IGdmcClcbiBcdGNodW5rLVx1MDAzZWRhdGEgPSB2bXM7XG4gXHRjaHVuay1cdTAwM2ViYXNlX2FkZHIgPSB2bXNbMF0tXHUwMDNlYWRkciAtIHBjcHVfZ3JvdXBfb2Zmc2V0c1swXTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkZWx0YSA9ICh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWJhc2VfYWRkciAtICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaGludCA9IGRlbHRhICYjNDM7ICh1bnNpZ25lZCBsb25nKXBjcHVfbG9jYWxfYmFzZTtcbiYjNDM7XHRzdHJ1Y3Qgdm1fc3RydWN0ICpsb2NhbF92bSA9IHBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEoaGludCxcbiYjNDM7XHRcdFx0XHRcdHBjcHVfdW5pdF9zaXplLCBwY3B1X2F0b21fc2l6ZSk7XG4mIzQzO1x0aWYgKCFsb2NhbF92bSkge1xuJiM0MztcdFx0cGNwdV9mcmVlX3ZtX2FyZWFzKHZtcywgcGNwdV9ucl9ncm91cHMpO1xuJiM0MztcdFx0cGNwdV9mcmVlX2NodW5rKGNodW5rKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2h1bmstXHUwMDNlbG9jYWxfYmFzZSA9IGxvY2FsX3ZtLVx1MDAzZWFkZHI7XG4mIzQzO1x0Y2h1bmstXHUwMDNlbG9jYWxfZGF0YSA9ICh2b2lkICopbG9jYWxfdm07XG4mIzQzOyNlbHNlXG4mIzQzO1x0Y2h1bmstXHUwMDNlbG9jYWxfYmFzZSA9IDA7XG4mIzQzO1x0Y2h1bmstXHUwMDNlbG9jYWxfZGF0YSA9IE5VTEw7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdHBjcHVfc3RhdHNfY2h1bmtfYWxsb2MoKTtcbiBcdHRyYWNlX3BlcmNwdV9jcmVhdGVfY2h1bmsoY2h1bmstXHUwMDNlYmFzZV9hZGRyKTtcbiBcbkBAIC0zNjUsNiAmIzQzOzQ1Nyw4IEBAIHN0YXRpYyB2b2lkIHBjcHVfZGVzdHJveV9jaHVuayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspXG4gXG4gXHRpZiAoY2h1bmstXHUwMDNlZGF0YSlcbiBcdFx0cGNwdV9mcmVlX3ZtX2FyZWFzKGNodW5rLVx1MDAzZWRhdGEsIHBjcHVfbnJfZ3JvdXBzKTtcbiYjNDM7XHRpZiAoY2h1bmstXHUwMDNlbG9jYWxfZGF0YSlcbiYjNDM7XHRcdGZyZWVfdm1fYXJlYSgoc3RydWN0IHZtX3N0cnVjdCAqKWNodW5rLVx1MDAzZWxvY2FsX2RhdGEpO1xuIFx0cGNwdV9mcmVlX2NodW5rKGNodW5rKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuY1xuaW5kZXggYjA2NzZiODA1NGVkMDkuLjhiMjczZWQ4ZTVhOGJiIDEwMDY0NFxuLS0tIGEvbW0vcGVyY3B1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BlcmNwdS5jXG5AQCAtMTQ1LDYgJiM0MzsxNDUsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHBjcHVfaGlnaF91bml0X2NwdSBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGNodW5rIHdoaWNoIHN0YXJ0cyB3aXRoIHRoZSBrZXJuZWwgc3RhdGljIGFyZWEgKi9cbiB2b2lkICpwY3B1X2Jhc2VfYWRkciBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzOy8qIFRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBjaHVuayBsb2NhbCBtYXBwaW5nICovXG4mIzQzO3ZvaWQgKnBjcHVfbG9jYWxfYmFzZSBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gc3RhdGljIGNvbnN0IGludCAqcGNwdV91bml0X21hcCBfX3JvX2FmdGVyX2luaXQ7XHRcdC8qIGNwdSAtXHUwMDNlIHVuaXQgKi9cbiBjb25zdCB1bnNpZ25lZCBsb25nICpwY3B1X3VuaXRfb2Zmc2V0cyBfX3JvX2FmdGVyX2luaXQ7XHQvKiBjcHUgLVx1MDAzZSB1bml0IG9mZnNldCAqL1xuQEAgLTEzMzgsNiAmIzQzOzEzNDAsNyBAQCBzdGF0aWMgdm9pZCBwY3B1X2luaXRfbWRfYmxvY2tzKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcbiAvKipcbiAgKiBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rIC0gY3JlYXRlcyBjaHVua3MgdGhhdCBzZXJ2ZSB0aGUgZmlyc3QgY2h1bmtcbiAgKiBAdG1wX2FkZHI6IHRoZSBzdGFydCBvZiB0aGUgcmVnaW9uIHNlcnZlZFxuJiM0MzsgKiBAbG9jYWxfdG1wOiB0aGUgc3RhcnQgb2YgdGhlIGxvY2FsIHBlcmNwdSByZWdpb24gc2VydmVkXG4gICogQG1hcF9zaXplOiBzaXplIG9mIHRoZSByZWdpb24gc2VydmVkXG4gICpcbiAgKiBUaGlzIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgY2h1bmtzIHRoYXQgc2VydmUgdGhlIGZpcnN0IGNodW5rLiAgVGhlXG5AQCAtMTM0OSwxNSAmIzQzOzEzNTIsMTYgQEAgc3RhdGljIHZvaWQgcGNwdV9pbml0X21kX2Jsb2NrcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspXG4gICogQ2h1bmsgc2VydmluZyB0aGUgcmVnaW9uIGF0IEB0bXBfYWRkciBvZiBAbWFwX3NpemUuXG4gICovXG4gc3RhdGljIHN0cnVjdCBwY3B1X2NodW5rICogX19pbml0IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodW5zaWduZWQgbG9uZyB0bXBfYWRkcixcbi1cdFx0XHRcdFx0XHRcdCBpbnQgbWFwX3NpemUpXG4mIzQzO1x0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbG9jYWxfdG1wLCBpbnQgbWFwX3NpemUpXG4ge1xuIFx0c3RydWN0IHBjcHVfY2h1bmsgKmNodW5rO1xuLVx0dW5zaWduZWQgbG9uZyBhbGlnbmVkX2FkZHI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhbGlnbmVkX2FkZHIsIGFsaWduZWRfbG9jYWw7XG4gXHRpbnQgc3RhcnRfb2Zmc2V0LCBvZmZzZXRfYml0cywgcmVnaW9uX3NpemUsIHJlZ2lvbl9iaXRzO1xuIFx0c2l6ZV90IGFsbG9jX3NpemU7XG4gXG4gXHQvKiByZWdpb24gY2FsY3VsYXRpb25zICovXG4gXHRhbGlnbmVkX2FkZHIgPSB0bXBfYWRkciBcdTAwMjYgUEFHRV9NQVNLO1xuJiM0MztcdGFsaWduZWRfbG9jYWwgPSBsb2NhbF90bXAgXHUwMDI2IFBBR0VfTUFTSztcbiBcbiBcdHN0YXJ0X29mZnNldCA9IHRtcF9hZGRyIC0gYWxpZ25lZF9hZGRyO1xuIFx0cmVnaW9uX3NpemUgPSBBTElHTihzdGFydF9vZmZzZXQgJiM0MzsgbWFwX3NpemUsIFBBR0VfU0laRSk7XG5AQCAtMTM3MCw2ICYjNDM7MTM3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqIF9faW5pdCBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHVuc2lnbmVkIGxvbmcgdG1wX2FkZHIsXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjaHVuay1cdTAwM2VsaXN0KTtcbiBcbiBcdGNodW5rLVx1MDAzZWJhc2VfYWRkciA9ICh2b2lkICopYWxpZ25lZF9hZGRyO1xuJiM0MztcdGNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgPSAodm9pZCAqKWFsaWduZWRfbG9jYWw7XG4gXHRjaHVuay1cdTAwM2VzdGFydF9vZmZzZXQgPSBzdGFydF9vZmZzZXQ7XG4gXHRjaHVuay1cdTAwM2VlbmRfb2Zmc2V0ID0gcmVnaW9uX3NpemUgLSBjaHVuay1cdTAwM2VzdGFydF9vZmZzZXQgLSBtYXBfc2l6ZTtcbiBcbkBAIC0yNTYyLDcgJiM0MzsyNTY3LDcgQEAgc3RhdGljIHZvaWQgcGNwdV9kdW1wX2FsbG9jX2luZm8oY29uc3QgY2hhciAqbHZsLFxuICAqIGFuZCBhdmFpbGFibGUgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBsaWtlIGFueSBvdGhlciBjaHVuay5cbiAgKi9cbiB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLFxuLVx0XHRcdFx0ICAgdm9pZCAqYmFzZV9hZGRyKVxuJiM0MztcdFx0XHRcdCAgIHZvaWQgKmJhc2VfYWRkciwgdm9pZCAqbG9jYWxfYmFzZSlcbiB7XG4gXHRzaXplX3Qgc2l6ZV9zdW0gPSBhaS1cdTAwM2VzdGF0aWNfc2l6ZSAmIzQzOyBhaS1cdTAwM2VyZXNlcnZlZF9zaXplICYjNDM7IGFpLVx1MDAzZWR5bl9zaXplO1xuIFx0c2l6ZV90IHN0YXRpY19zaXplLCBkeW5fc2l6ZTtcbkBAIC0yNTcyLDcgJiM0MzsyNTc3LDcgQEAgdm9pZCBfX2luaXQgcGNwdV9zZXR1cF9maXJzdF9jaHVuayhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSxcbiBcdHVuc2lnbmVkIGludCBjcHU7XG4gXHRpbnQgKnVuaXRfbWFwO1xuIFx0aW50IGdyb3VwLCB1bml0LCBpO1xuLVx0dW5zaWduZWQgbG9uZyB0bXBfYWRkcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRtcF9hZGRyLCBsb2NhbF90bXAgPSAwO1xuIFx0c2l6ZV90IGFsbG9jX3NpemU7XG4gXG4gI2RlZmluZSBQQ1BVX1NFVFVQX0JVR19PTihjb25kKVx0ZG8ge1x0XHRcdFx0XHRcXFxuQEAgLTI3MTMsMTEgJiM0MzsyNzE4LDE1IEBAIHZvaWQgX19pbml0IHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoY29uc3Qgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWksXG4gXHQgKiAgIGNodW5rLlxuIFx0ICovXG4gXHR0bXBfYWRkciA9ICh1bnNpZ25lZCBsb25nKWJhc2VfYWRkciAmIzQzOyBzdGF0aWNfc2l6ZTtcbiYjNDM7XHRpZiAobG9jYWxfYmFzZSlcbiYjNDM7XHRcdGxvY2FsX3RtcCA9ICh1bnNpZ25lZCBsb25nKWxvY2FsX2Jhc2UgJiM0Mzsgc3RhdGljX3NpemU7XG4gXHRpZiAoYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZSlcbi1cdFx0cGNwdV9yZXNlcnZlZF9jaHVuayA9IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodG1wX2FkZHIsXG4mIzQzO1x0XHRwY3B1X3Jlc2VydmVkX2NodW5rID0gcGNwdV9hbGxvY19maXJzdF9jaHVuayh0bXBfYWRkciwgbG9jYWxfdG1wLFxuIFx0XHRcdFx0XHRcdGFpLVx1MDAzZXJlc2VydmVkX3NpemUpO1xuIFx0dG1wX2FkZHIgPSAodW5zaWduZWQgbG9uZyliYXNlX2FkZHIgJiM0Mzsgc3RhdGljX3NpemUgJiM0MzsgYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZTtcbi1cdHBjcHVfZmlyc3RfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLCBkeW5fc2l6ZSk7XG4mIzQzO1x0aWYgKGxvY2FsX2Jhc2UpXG4mIzQzO1x0XHRsb2NhbF90bXAgPSAodW5zaWduZWQgbG9uZylsb2NhbF9iYXNlICYjNDM7IHN0YXRpY19zaXplICYjNDM7IGFpLVx1MDAzZXJlc2VydmVkX3NpemU7XG4mIzQzO1x0cGNwdV9maXJzdF9jaHVuayA9IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodG1wX2FkZHIsIGxvY2FsX3RtcCwgZHluX3NpemUpO1xuIFxuIFx0cGNwdV9ucl9lbXB0eV9wb3BfcGFnZXMgPSBwY3B1X2ZpcnN0X2NodW5rLVx1MDAzZW5yX2VtcHR5X3BvcF9wYWdlcztcbiBcdHBjcHVfY2h1bmtfcmVsb2NhdGUocGNwdV9maXJzdF9jaHVuaywgLTEpO1xuQEAgLTMxMDgsNyAmIzQzOzMxMTcsNyBAQCBpbnQgX19pbml0IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHNpemVfdCBkeW5fc2l6ZSxcbiBcdFx0UEZOX0RPV04oc2l6ZV9zdW0pLCBhaS1cdTAwM2VzdGF0aWNfc2l6ZSwgYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZSxcbiBcdFx0YWktXHUwMDNlZHluX3NpemUsIGFpLVx1MDAzZXVuaXRfc2l6ZSk7XG4gXG4tXHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBiYXNlKTtcbiYjNDM7XHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBiYXNlLCBOVUxMKTtcbiBcdGdvdG8gb3V0X2ZyZWU7XG4gXG4gb3V0X2ZyZWVfYXJlYXM6XG5AQCAtMzE2Myw3ICYjNDM7MzE3Miw3IEBAIHZvaWQgX19pbml0IF9fd2VhayBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHRwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcik7XG4gXHRpZiAocHVkX25vbmUoKnB1ZCkpIHtcbiBcdFx0cG1kID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUE1EX1RBQkxFX1NJWkUsIFBNRF9UQUJMRV9TSVpFKTtcbi1cdFx0cHVkX3BvcHVsYXRlKFx1MDAyNmluaXRfbW0sIHB1ZCwgcG1kKTtcbiYjNDM7XHRcdHB1ZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHB1ZCwgcG1kKTtcbiBcdH1cbiBcbiBcdHBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTtcbkBAIC0zMTcxLDcgJiM0MzszMTgwLDcgQEAgdm9pZCBfX2luaXQgX193ZWFrIHBjcHVfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdFx0cHRlX3QgKm5ldztcbiBcbiBcdFx0bmV3ID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFRFX1RBQkxFX1NJWkUsIFBURV9UQUJMRV9TSVpFKTtcbi1cdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWQsIG5ldyk7XG4mIzQzO1x0XHRwbWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwbWQsIG5ldyk7XG4gXHR9XG4gXG4gXHRyZXR1cm47XG5AQCAtMzE5NCw2ICYjNDM7MzIwMyw3IEBAIHZvaWQgX19pbml0IF9fd2VhayBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpXG4gaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdCBjcHVfdG9fbmRfZm4pXG4ge1xuIFx0c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3Qgdm07XG4mIzQzO1x0c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgcGNwdV92bTtcbiBcdHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpO1xuIFx0Y2hhciBwc2l6ZV9zdHJbMTZdO1xuIFx0aW50IHVuaXRfcGFnZXM7XG5AQCAtMzI0MywxMSAmIzQzOzMyNTMsMjggQEAgaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdFxuIFx0fVxuIFxuIFx0LyogYWxsb2NhdGUgdm0gYXJlYSwgbWFwIHRoZSBwYWdlcyBhbmQgY29weSBzdGF0aWMgZGF0YSAqL1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbiYjNDM7XHR2bS5mbGFncyA9IFZNX0FMTE9DO1xuJiM0MztcdHZtLmFkZHIgPSAodm9pZCAqKUFMSUdOKFBFUkNQVV9TVEFSVCwgUEFHRV9TSVpFKTtcbiYjNDM7XHR2bS5zaXplID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIGFpLVx1MDAzZXVuaXRfc2l6ZTtcbiYjNDM7XHR2bV9hcmVhX2FkZF9lYXJseShcdTAwMjZ2bSk7XG4mIzQzO1x0a2FzYW5fcG9wdWxhdGVfZWFybHlfdm1fYXJlYV9zaGFkb3codm0uYWRkciwgdm0uc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHBjcHVfdm0uZmxhZ3MgPSBWTV9BTExPQztcbiYjNDM7XHRwY3B1X3ZtLmFkZHIgPSAodm9pZCAqKUFMSUdOKExPQ0FMX1BFUkNQVV9TVEFSVCwgUEFHRV9TSVpFKTtcbiYjNDM7XHRwY3B1X3ZtLnNpemUgPSBhaS1cdTAwM2V1bml0X3NpemU7XG4mIzQzO1x0dm1fYXJlYV9hZGRfZWFybHkoXHUwMDI2cGNwdV92bSk7XG4mIzQzO1x0a2FzYW5fcG9wdWxhdGVfZWFybHlfdm1fYXJlYV9zaGFkb3cocGNwdV92bS5hZGRyLCBwY3B1X3ZtLnNpemUpO1xuJiM0MzsjZWxzZVxuIFx0dm0uZmxhZ3MgPSBWTV9BTExPQztcbiBcdHZtLnNpemUgPSBudW1fcG9zc2libGVfY3B1cygpICogYWktXHUwMDNldW5pdF9zaXplO1xuIFx0dm1fYXJlYV9yZWdpc3Rlcl9lYXJseShcdTAwMjZ2bSwgUEFHRV9TSVpFKTtcbiBcbiYjNDM7XHRwY3B1X3ZtLmFkZHIgPSBOVUxMO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRmb3IgKHVuaXQgPSAwOyB1bml0IFx1MDAzYyBudW1fcG9zc2libGVfY3B1cygpOyB1bml0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGNwdSA9IGFpLVx1MDAzZWdyb3Vwc1swXS5jcHVfbWFwW3VuaXRdO1xuIFx0XHR1bnNpZ25lZCBsb25nIHVuaXRfYWRkciA9XG4gXHRcdFx0KHVuc2lnbmVkIGxvbmcpdm0uYWRkciAmIzQzOyB1bml0ICogYWktXHUwMDNldW5pdF9zaXplO1xuIFxuQEAgLTMyNjQsNiAmIzQzOzMyOTEsMTQgQEAgaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdFxuIFxuIFx0XHQvKiBjb3B5IHN0YXRpYyBkYXRhICovXG4gXHRcdG1lbWNweSgodm9pZCAqKXVuaXRfYWRkciwgX19wZXJfY3B1X3N0YXJ0LCBhaS1cdTAwM2VzdGF0aWNfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE1hcCBwZXJjcHUgZGF0YSB0byBQRVJDUFUgbWFwLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIFBDUFVfRkNfRU1CRUQgY2FuJiMzOTt0IHN1cHBvcnQgaXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsoY3B1LCAodW5zaWduZWQgbG9uZylwY3B1X3ZtLmFkZHIsXG4mIzQzO1x0XHRcdFx0XHUwMDI2cGFnZXNbdW5pdCAqIHVuaXRfcGFnZXNdLCB1bml0X3BhZ2VzKTtcbiBcdH1cbiBcbiBcdC8qIHdlJiMzOTtyZSByZWFkeSwgY29tbWl0ICovXG5AQCAtMzI3MSw3ICYjNDM7MzMwNiw4IEBAIGludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3RcbiBcdFx0dW5pdF9wYWdlcywgcHNpemVfc3RyLCBhaS1cdTAwM2VzdGF0aWNfc2l6ZSxcbiBcdFx0YWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZSwgYWktXHUwMDNlZHluX3NpemUpO1xuIFxuLVx0cGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgdm0uYWRkcik7XG4mIzQzO1x0cGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgdm0uYWRkciwgcGNwdV92bS5hZGRyKTtcbiYjNDM7XHRwY3B1X2xvY2FsX2Jhc2UgPSBwY3B1X3ZtLmFkZHI7XG4gXHRnb3RvIG91dF9mcmVlX2FyO1xuIFxuIGVub21lbTpcbkBAIC0zMzUzLDcgJiM0MzszMzg5LDcgQEAgdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKVxuIFx0YWktXHUwMDNlZ3JvdXBzWzBdLm5yX3VuaXRzID0gMTtcbiBcdGFpLVx1MDAzZWdyb3Vwc1swXS5jcHVfbWFwWzBdID0gMDtcbiBcbi1cdHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIGZjKTtcbiYjNDM7XHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBmYywgTlVMTCk7XG4gXHRwY3B1X2ZyZWVfYWxsb2NfaW5mbyhhaSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3NwYXJzZS12bWVtbWFwLmMgYi9tbS9zcGFyc2Utdm1lbW1hcC5jXG5pbmRleCA5OWUyYmUzOTY3MWI2My4uNDYzYzJmOGI2MTFjMDMgMTAwNjQ0XG4tLS0gYS9tbS9zcGFyc2Utdm1lbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zcGFyc2Utdm1lbW1hcC5jXG5AQCAtMTk4LDcgJiM0MzsxOTgsNyBAQCBzdGF0aWMgcG1kX3QgKiBfX21lbWluaXQgdm1lbW1hcF9wbWRfcG9wdWxhdGUocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpblxuIFx0XHRpZiAoIXApXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdGtlcm5lbF9wdGVfaW5pdChwKTtcbi1cdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWQsIHApO1xuJiM0MztcdFx0cG1kX3BvcHVsYXRlX3N5bmMoYWRkciwgcG1kLCBwKTtcbiBcdH1cbiBcdHJldHVybiBwbWQ7XG4gfVxuQEAgLTIxMSw3ICYjNDM7MjExLDcgQEAgc3RhdGljIHB1ZF90ICogX19tZW1pbml0IHZtZW1tYXBfcHVkX3BvcHVsYXRlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW5cbiBcdFx0aWYgKCFwKVxuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHRwbWRfaW5pdChwKTtcbi1cdFx0cHVkX3BvcHVsYXRlKFx1MDAyNmluaXRfbW0sIHB1ZCwgcCk7XG4mIzQzO1x0XHRwdWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwdWQsIHApO1xuIFx0fVxuIFx0cmV0dXJuIHB1ZDtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uM2Q5NGNhNGJiZDE3YjEgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYWxsb2MuY1xuQEAgLTgwLDYgJiM0Mzs4MCw5IEBAIGJvb2wgaXNfdm1hbGxvY19hZGRyKGNvbnN0IHZvaWQgKngpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKHgpO1xuIFxuJiM0MztcdGlmIChpc19wZXJjcHVfYWRkcihhZGRyKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiBcdHJldHVybiBhZGRyIFx1MDAzZT0gVk1BTExPQ19TVEFSVCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2MgVk1BTExPQ19FTkQ7XG4gfVxuIEVYUE9SVF9TWU1CT0woaXNfdm1hbGxvY19hZGRyKTtcbkBAIC0yOTUsOSAmIzQzOzI5OCw5IEBAIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tXHRcdFx0cGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LFxuLVx0XHRcdHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcbiYjNDM7aW50IHZtYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzQzO1x0XHQgICAgICAgcGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LFxuJiM0MztcdFx0ICAgICAgIHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcbiB7XG4gXHRwZ2RfdCAqcGdkO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydDtcbkBAIC0zMTQsNyAmIzQzOzMxNyw3IEBAIHN0YXRpYyBpbnQgdm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRCVUdfT04oYWRkciBcdTAwM2U9IGVuZCk7XG4gXG4gXHRzdGFydCA9IGFkZHI7XG4tXHRwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7XG4mIzQzO1x0cGdkID0gcGdkX29mZnNldF9wZ2QocGdkaXIsIGFkZHIpO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGVyciA9IHZtYXBfcDRkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90LFxuQEAgLTMzNCw4ICYjNDM7MzM3LDggQEAgaW50IHZtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSB2bWFwX3JhbmdlX25vZmx1c2goYWRkciwgZW5kLCBwaHlzX2FkZHIsIHBncHJvdF9ueChwcm90KSxcbi1cdFx0XHRcdCBpb3JlbWFwX21heF9wYWdlX3NoaWZ0KTtcbiYjNDM7XHRlcnIgPSB2bWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIGFkZHIsIGVuZCwgcGh5c19hZGRyLFxuJiM0MztcdFx0XHRcdCBwZ3Byb3RfbngocHJvdCksIGlvcmVtYXBfbWF4X3BhZ2Vfc2hpZnQpO1xuIFx0Zmx1c2hfY2FjaGVfdm1hcChhZGRyLCBlbmQpO1xuIFx0aWYgKCFlcnIpXG4gXHRcdGVyciA9IGttc2FuX2lvcmVtYXBfcGFnZV9yYW5nZShhZGRyLCBlbmQsIHBoeXNfYWRkciwgcHJvdCxcbkBAIC00NzgsNyAmIzQzOzQ4MSw3IEBAIHN0YXRpYyB2b2lkIHZ1bm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiAgKlxuICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gb25seS4gRG8gbm90IHVzZSBvdXRzaWRlIG1tLy5cbiAgKi9cbi12b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4mIzQzO3ZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbiBcdHBnZF90ICpwZ2Q7XG5AQCAtNDg2LDcgJiM0Mzs0ODksNyBAQCB2b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gXHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiBcbiBcdEJVR19PTihhZGRyIFx1MDAzZT0gZW5kKTtcbi1cdHBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTtcbiYjNDM7XHRwZ2QgPSBwZ2Rfb2Zmc2V0X3BnZChwZ2RpciwgYWRkcik7XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0aWYgKHBnZF9iYWQoKnBnZCkpXG5AQCAtNTAzLDcgJiM0Mzs1MDYsNyBAQCB2b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gdm9pZCB2dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiB7XG4gXHRrbXNhbl92dW5tYXBfcmFuZ2Vfbm9mbHVzaChzdGFydCwgZW5kKTtcbi1cdF9fdnVubWFwX3JhbmdlX25vZmx1c2goc3RhcnQsIGVuZCk7XG4mIzQzO1x0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgc3RhcnQsIGVuZCk7XG4gfVxuIFxuIC8qKlxuQEAgLTY3MCw5ICYjNDM7NjczLDEwIEBAIGludCBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnI7IGkgJiM0Mzs9IDFVIFx1MDAzY1x1MDAzYyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpKSB7XG4gXHRcdGludCBlcnI7XG4gXG4tXHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQpLFxuLVx0XHRcdFx0XHRwYWdlX3RvX3BoeXMocGFnZXNbaV0pLCBwcm90LFxuLVx0XHRcdFx0XHRwYWdlX3NoaWZ0KTtcbiYjNDM7XHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgYWRkcixcbiYjNDM7XHRcdFx0XHRcdCBhZGRyICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQpLFxuJiM0MztcdFx0XHRcdFx0IHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIHByb3QsXG4mIzQzO1x0XHRcdFx0XHQgcGFnZV9zaGlmdCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC00OTE5LDE1ICYjNDM7NDkyMywyNSBAQCBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxuICAqICAgaW4gLSB0aGUgVkEgd2Ugc3RhcnQgdGhlIHNlYXJjaChyZXZlcnNlIG9yZGVyKTtcbiAgKiAgIG91dCAtIHRoZSBWQSB3aXRoIHRoZSBoaWdoZXN0IGFsaWduZWQgZW5kIGFkZHJlc3MuXG4gICogQGFsaWduOiBhbGlnbm1lbnQgZm9yIHJlcXVpcmVkIGhpZ2hlc3QgYWRkcmVzc1xuJiM0MzsgKiBAcGNwdTogd2hldGhlciByZXF1ZXN0IGFsbG9jYXRpb24gZnJvbSBsb2NhbCBwZXJjcHUgYXJlYVxuICAqXG4gICogUmV0dXJuczogZGV0ZXJtaW5lZCBlbmQgYWRkcmVzcyB3aXRoaW4gdm1hcF9hcmVhXG4gICovXG4gc3RhdGljIHVuc2lnbmVkIGxvbmdcbi1wdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2Uoc3RydWN0IHZtYXBfYXJlYSAqKnZhLCB1bnNpZ25lZCBsb25nIGFsaWduKVxuJiM0Mztwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2Uoc3RydWN0IHZtYXBfYXJlYSAqKnZhLCB1bnNpZ25lZCBsb25nIGFsaWduLCBib29sIHBjcHUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZCA9IFZNQUxMT0NfRU5EIFx1MDAyNiB+KGFsaWduIC0gMSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZDtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4mIzQzO1x0aWYgKHBjcHUpXG4mIzQzO1x0XHR2bWFsbG9jX2VuZCA9IExPQ0FMX1BFUkNQVV9FTkQgXHUwMDI2IH4oYWxpZ24gLSAxKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2bWFsbG9jX2VuZCA9IFBFUkNQVV9FTkQgXHUwMDI2IH4oYWxpZ24gLSAxKTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHR2bWFsbG9jX2VuZCA9IFZNQUxMT0NfRU5EIFx1MDAyNiB+KGFsaWduIC0gMSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGlmIChsaWtlbHkoKnZhKSkge1xuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb21fcmV2ZXJzZSgoKnZhKSxcbiBcdFx0XHRcdFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xpc3QsIGxpc3QpIHtcbkBAIC00OTY4LDE0ICYjNDM7NDk4MiwyMiBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc2l6ZV90ICpzaXplcywgaW50IG5yX3ZtcyxcbiBcdFx0XHRcdCAgICAgc2l6ZV90IGFsaWduKVxuIHtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgdm1hbGxvY19zdGFydCA9IEFMSUdOKFZNQUxMT0NfU1RBUlQsIGFsaWduKTtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCBcdTAwMjYgfihhbGlnbiAtIDEpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdm1hbGxvY19zdGFydDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kO1xuIFx0c3RydWN0IHZtYXBfYXJlYSAqKnZhcywgKnZhO1xuIFx0c3RydWN0IHZtX3N0cnVjdCAqKnZtcztcbiBcdGludCBhcmVhLCBhcmVhMiwgbGFzdF9hcmVhLCB0ZXJtX2FyZWE7XG4gXHR1bnNpZ25lZCBsb25nIGJhc2UsIHN0YXJ0LCBzaXplLCBlbmQsIGxhc3RfZW5kLCBvcmlnX3N0YXJ0LCBvcmlnX2VuZDtcbiBcdGJvb2wgcHVyZ2VkID0gZmFsc2U7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztcdHZtYWxsb2Nfc3RhcnQgPSBBTElHTihQRVJDUFVfU1RBUlQsIGFsaWduKTtcbiYjNDM7XHR2bWFsbG9jX2VuZCA9IFBFUkNQVV9FTkQgXHUwMDI2IH4oYWxpZ24gLSAxKTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHR2bWFsbG9jX3N0YXJ0ID0gQUxJR04oVk1BTExPQ19TVEFSVCwgYWxpZ24pO1xuJiM0MztcdHZtYWxsb2NfZW5kID0gVk1BTExPQ19FTkQgXHUwMDI2IH4oYWxpZ24gLSAxKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0LyogdmVyaWZ5IHBhcmFtZXRlcnMgYW5kIGFsbG9jYXRlIGRhdGEgc3RydWN0dXJlcyAqL1xuIFx0QlVHX09OKG9mZnNldF9pbl9wYWdlKGFsaWduKSB8fCAhaXNfcG93ZXJfb2ZfMihhbGlnbikpO1xuIFx0Zm9yIChsYXN0X2FyZWEgPSAwLCBhcmVhID0gMDsgYXJlYSBcdTAwM2MgbnJfdm1zOyBhcmVhJiM0MzsmIzQzOykge1xuQEAgLTUwMjQsNyAmIzQzOzUwNDYsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbiBcdGVuZCA9IHN0YXJ0ICYjNDM7IHNpemVzW2FyZWFdO1xuIFxuIFx0dmEgPSBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIodm1hbGxvY19lbmQpO1xuLVx0YmFzZSA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShcdTAwMjZ2YSwgYWxpZ24pIC0gZW5kO1xuJiM0MztcdGJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoXHUwMDI2dmEsIGFsaWduLCBmYWxzZSkgLSBlbmQ7XG4gXG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHQvKlxuQEAgLTUwNDUsNyAmIzQzOzUwNjcsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbiBcdFx0ICogYmFzZSBkb3dud2FyZHMgYW5kIHRoZW4gcmVjaGVjay5cbiBcdFx0ICovXG4gXHRcdGlmIChiYXNlICYjNDM7IGVuZCBcdTAwM2UgdmEtXHUwMDNldmFfZW5kKSB7XG4tXHRcdFx0YmFzZSA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShcdTAwMjZ2YSwgYWxpZ24pIC0gZW5kO1xuJiM0MztcdFx0XHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnZhLCBhbGlnbiwgZmFsc2UpIC0gZW5kO1xuIFx0XHRcdHRlcm1fYXJlYSA9IGFyZWE7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbkBAIC01MDU1LDcgJiM0Mzs1MDc3LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsXG4gXHRcdCAqL1xuIFx0XHRpZiAoYmFzZSAmIzQzOyBzdGFydCBcdTAwM2MgdmEtXHUwMDNldmFfc3RhcnQpIHtcbiBcdFx0XHR2YSA9IG5vZGVfdG9fdmEocmJfcHJldihcdTAwMjZ2YS1cdTAwM2VyYl9ub2RlKSk7XG4tXHRcdFx0YmFzZSA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShcdTAwMjZ2YSwgYWxpZ24pIC0gZW5kO1xuJiM0MztcdFx0XHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnZhLCBhbGlnbiwgZmFsc2UpIC0gZW5kO1xuIFx0XHRcdHRlcm1fYXJlYSA9IGFyZWE7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbkBAIC01MjE4LDYgJiM0Mzs1MjQwLDg0IEBAIHZvaWQgcGNwdV9mcmVlX3ZtX2FyZWFzKHN0cnVjdCB2bV9zdHJ1Y3QgKip2bXMsIGludCBucl92bXMpXG4gXHRcdGZyZWVfdm1fYXJlYSh2bXNbaV0pO1xuIFx0a2ZyZWUodm1zKTtcbiB9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbiYjNDM7LyogRmluZCBmcmVlIHZtIGFyZWEgc3RhcnRzIGZyb20gaGludCAqL1xuJiM0MztzdHJ1Y3Qgdm1fc3RydWN0ICpwY3B1X2dldF9sb2NhbF92bV9hcmVhKHVuc2lnbmVkIGxvbmcgaGludCxcbiYjNDM7XHRcdFx0XHQgICAgIGludCB1bml0X3NpemUsIHNpemVfdCBhbGlnbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2bWFwX2FyZWEgKnRtcF92YSwgKnZhO1xuJiM0MztcdHN0cnVjdCB2bV9zdHJ1Y3QgKnZtO1xuJiM0MztcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZW5kO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHZhID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0dm0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgdm1fc3RydWN0KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCF2YSB8fCAhdm0pXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4mIzQzO1xuJiM0MztcdHRtcF92YSA9IHB2bV9maW5kX3ZhX2VuY2xvc2VfYWRkcihoaW50KTtcbiYjNDM7XHRpZiAoIXRtcF92YSkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZW5kID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnRtcF92YSwgYWxpZ24sIHRydWUpO1xuJiM0MztcbiYjNDM7XHRpZiAoaGludCAmIzQzOyB1bml0X3NpemUgXHUwMDNlIGVuZCkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmFfY2xpcChcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuJiM0MztcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0LCB0bXBfdmEsIGhpbnQsIHVuaXRfc2l6ZSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dmEtXHUwMDNldmFfc3RhcnQgPSBoaW50O1xuJiM0MztcdHZhLVx1MDAzZXZhX2VuZCA9IGhpbnQgJiM0MzsgdW5pdF9zaXplO1xuJiM0MztcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGthc2FuX3BvcHVsYXRlX3ZtYWxsb2ModmEtXHUwMDNldmFfc3RhcnQsIHVuaXRfc2l6ZSwgR0ZQX0tFUk5FTCkpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX3NoYWRvdztcbiYjNDM7XG4mIzQzO1x0dm4gPSBhZGRyX3RvX25vZGUodmEtXHUwMDNldmFfc3RhcnQpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dm4tXHUwMDNlYnVzeS5sb2NrKTtcbiYjNDM7XHRpbnNlcnRfdm1hcF9hcmVhKHZhLCBcdTAwMjZ2bi1cdTAwM2VidXN5LnJvb3QsIFx1MDAyNnZuLVx1MDAzZWJ1c3kuaGVhZCk7XG4mIzQzO1x0c2V0dXBfdm1hbGxvY192bSh2bSwgdmEsIFZNX0FMTE9DLFxuJiM0MztcdFx0XHQgcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2dm4tXHUwMDNlYnVzeS5sb2NrKTtcbiYjNDM7XG4mIzQzO1x0a2FzYW5fdW5wb2lzb25fdm1hcF9hcmVhcyhcdTAwMjZ2bSwgMSwgS0FTQU5fVk1BTExPQ19QUk9UX05PUk1BTCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2bTtcbiYjNDM7XG4mIzQzO2Vycl9mcmVlOlxuJiM0MztcdGttZW1fY2FjaGVfZnJlZSh2bWFwX2FyZWFfY2FjaGVwLCB2YSk7XG4mIzQzO1x0a2ZyZWUodm0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO2Vycl9mcmVlX3NoYWRvdzpcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4mIzQzO1x0dmEgPSBtZXJnZV9vcl9hZGRfdm1hcF9hcmVhX2F1Z21lbnQodmEsIFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsXG4mIzQzO1x0XHRcdFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xpc3QpO1xuJiM0MztcdGlmICh2YSlcbiYjNDM7XHRcdGthc2FuX3JlbGVhc2Vfdm1hbGxvYyh2YS1cdTAwM2V2YV9zdGFydCwgdmEtXHUwMDNldmFfZW5kLCB2YS1cdTAwM2V2YV9zdGFydCwgdmEtXHUwMDNldmFfZW5kLFxuJiM0MztcdFx0XHQgICAgICAgS0FTQU5fVk1BTExPQ19QQUdFX1JBTkdFIHwgS0FTQU5fVk1BTExPQ19UTEJfRkxVU0gpO1xuJiM0MztcdGtmcmVlKHZtKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4gI2VuZGlmXHQvKiBDT05GSUdfU01QICovXG4gXG4gI2lmZGVmIENPTkZJR19QUklOVEtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMjo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIQVZFX0xPQ0FMX1BFUl9DUFVfTUFQJiMzNDssCiAgICAmIzM0O0FSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DJiMzNDssCiAgICAmIzM0O0FSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DJiMzNDssCiAgICAmIzM0O05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGNwdV9nZXRfbG9jYWxfdm1fYXJlYSYjMzQ7LAogICAgJiMzNDttYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rJiMzNDssCiAgICAmIzM0O3NldHVwX3BlcmNwdV9wZ2QmIzM0OywKICAgICYjMzQ7YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBsb2NhbCBwZXItY3B1IG1hcHBpbmcgc3VwcG9ydCBmb3IgQVJNNjQsIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgcGVyY3B1IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmJhY2NiMzUxMWZjYWRkMGZhMTJiNTJjNzc5M2Y4Y2YwMTgwMDA2ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDE1IDIyOjQwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IGIzYWZlMDY4ODkxOWJkLi45NWZmZDE1MTE4N2YyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtNDEsOSAmIzQzOzQxLDExIEBAIGNvbmZpZyBBUk02NAogCXNlbGVjdCBBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMKIAlzZWxlY3QgQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0UKIAlzZWxlY3QgQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcgaWYgQVJNNjRfSEFGVAomIzQzOwlzZWxlY3QgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkMKIAlzZWxlY3QgQVJDSF9IQVNfUFJFRU1QVF9MQVpZCiAJc2VsZWN0IEFSQ0hfSEFTX1BURFVNUAogCXNlbGVjdCBBUkNIX0hBU19QVEVfU1BFQ0lBTAomIzQzOwlzZWxlY3QgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkMKIAlzZWxlY3QgQVJDSF9IQVNfSFdfUFRFX1lPVU5HCiAJc2VsZWN0IEFSQ0hfSEFTX1NFVFVQX0RNQV9PUFMKIAlzZWxlY3QgQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVAKQEAgLTIyNCw2ICYjNDM7MjI2LDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKIAlzZWxlY3QgSEFWRV9SU0VRCiAJc2VsZWN0IEhBVkVfUlVTVCBpZiBSVVNUQ19TVVBQT1JUU19BUk02NAomIzQzOwlzZWxlY3QgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKIAlzZWxlY3QgSEFWRV9TVEFDS1BST1RFQ1RPUgogCXNlbGVjdCBIQVZFX1NUQVRJQ19DQUxMIGlmIENGSQogCXNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKQEAgLTIzOSw2ICYjNDM7MjQyLDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BCiAJc2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBCiAJc2VsZWN0IE5FRURfRE1BX01BUF9TVEFURQomIzQzOwlzZWxlY3QgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksKIAlzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RICiAJc2VsZWN0IE9GCiAJc2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFCkBAIC00MTEsNiAmIzQzOzQxNSwxMSBAQCBjb25maWcgS0FTQU5fU0hBRE9XX09GRlNFVAogY29uZmlnIFVOV0lORF9UQUJMRVMKIAlib29sCiAKJiM0Mztjb25maWcgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUAomIzQzOwlkZWZfYm9vbCB5CiYjNDM7CWRlcGVuZHMgb24gKEFSTTY0X1ZBX0JJVFNfNDggJmFtcDsmYW1wOyAoQVJNNjRfNEtfUEFHRVMgfHwgQVJNNjRfNjRLX1BBR0VTKSkgfHwgXAomIzQzOwkJICAgKEFSTTY0X1ZBX0JJVFNfNDcgJmFtcDsmYW1wOyBBUk02NF8xNktfUEFHRVMpCiYjNDM7CiBzb3VyY2UgJiMzNDthcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zJiMzNDsKIAogbWVudSAmIzM0O0tlcm5lbCBGZWF0dXJlcyYjMzQ7CkBAIC0xNTgxLDkgJiM0MzsxNTkwLDYgQEAgY29uZmlnIE5VTUEKIAlib29sICYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnQmIzM0OwogCXNlbGVjdCBHRU5FUklDX0FSQ0hfTlVNQQogCXNlbGVjdCBPRl9OVU1BCi0Jc2VsZWN0IEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBCi0Jc2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSwotCXNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwogCXNlbGVjdCBVU0VfUEVSQ1BVX05VTUFfTk9ERV9JRAogCWhlbHAKIAkgIEVuYWJsZSBOVU1BIChOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzKSBzdXBwb3J0LgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgKaW5kZXggNWUxMjExYzU0MGFiMjMuLmFhMDgxOGY3ZWM1OGM1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgKQEAgLTYzLDYgJiM0Mzs2Myw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcm02NF9rZXJuZWxfdW5tYXBwZWRfYXRfZWwwKHZvaWQpCiBleHRlcm4gdm9pZCBhcm02NF9tZW1ibG9ja19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBib290bWVtX2luaXQodm9pZCk7CiYjNDM7ZXh0ZXJuIHZvaWQgc2V0dXBfcGVyY3B1X3BnZCh2b2lkKTsKIGV4dGVybiB2b2lkIGNyZWF0ZV9tYXBwaW5nX25vYWxsb2MocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyB2aXJ0LAogCQkJCSAgIHBoeXNfYWRkcl90IHNpemUsIHBncHJvdF90IHByb3QpOwogZXh0ZXJuIHZvaWQgY3JlYXRlX3BnZF9tYXBwaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwaHlzX2FkZHJfdCBwaHlzLApAQCAtNzIsNiAmIzQzOzczLDEwIEBAIGV4dGVybiB2b2lkICpmaXhtYXBfcmVtYXBfZmR0KHBoeXNfYWRkcl90IGR0X3BoeXMsIGludCAqc2l6ZSwgcGdwcm90X3QgcHJvdCk7CiBleHRlcm4gdm9pZCBtYXJrX2xpbmVhcl90ZXh0X2FsaWFzX3JvKHZvaWQpOwogZXh0ZXJuIGludCBzcGxpdF9rZXJuZWxfbGVhZl9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGV4dGVybiB2b2lkIGxpbmVhcl9tYXBfbWF5YmVfc3BsaXRfdG9fcHRlcyh2b2lkKTsKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0MztleHRlcm4gdm9pZCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCwKJiM0MzsJCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKTsKJiM0MzsjZW5kaWYKIAogLyoKICAqIFRoaXMgY2hlY2sgaXMgdHJpZ2dlcmVkIGR1cmluZyB0aGUgZWFybHkgYm9vdCBiZWZvcmUgdGhlIGNwdWZlYXR1cmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCA4MDNiNjg3NTgxNTI3NS4uMGU5OTFiOThlZDllYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTI3LDYgJiM0MzsyNyw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL3RsYmZsdXNoLmgmZ3Q7CiAKIGV4dGVybiBib29sIHJvZGF0YV9mdWxsOwomIzQzO2V4dGVybiBwZ2RfdCAqcGVyY3B1X3BnZFtOUl9DUFVTXTsKIAogc3RhdGljIGlubGluZSB2b2lkIGNvbnRleHRpZHJfdGhyZWFkX3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiB7CkBAIC0xMzgsNyAmIzQzOzEzOSwxMyBAQCB2b2lkIF9fY3B1X3JlcGxhY2VfdHRicjEocGdkX3QgKnBnZHAsIGJvb2wgY25wKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGNwdV9lbmFibGVfc3dhcHBlcl9jbnAodm9pZCkKIHsKLQlfX2NwdV9yZXBsYWNlX3R0YnIxKGxtX2FsaWFzKHN3YXBwZXJfcGdfZGlyKSwgdHJ1ZSk7CiYjNDM7CXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiYjNDM7CXBnZF90ICp0dGJyMSA9IHBlcmNwdV9wZ2RbY3B1XTsKJiM0MzsKJiM0MzsJaWYgKGNwdSA9PSAwKQomIzQzOwkJdHRicjEgPSBsbV9hbGlhcyhzd2FwcGVyX3BnX2Rpcik7CiYjNDM7CiYjNDM7CV9fY3B1X3JlcGxhY2VfdHRicjEodHRicjEsIGZhbHNlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZXBsYWNlX3R0YnIxKHBnZF90ICpwZ2RwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZXJjcHUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmgKaW5kZXggYjU3YjJiYjAwOTY3NzQuLjAzZDE0OWY5MTc3YzBlIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTE0Miw2ICYjNDM7MTQyLDI3IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKQogI3VuZGVmIFBFUkNQVV9PUAogI3VuZGVmIFBFUkNQVV9SRVRfT1AKIAomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUAomIzQzO2V4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9sb2NhbF9vZmY7CiYjNDM7CiYjNDM7I2RlZmluZSBsb2NhbF9jcHVfcHRyKHB0cikJCQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CV9fdmVyaWZ5X3BjcHVfcHRyKHB0cik7CQkJCQkJXAomIzQzOwlTSElGVF9QRVJDUFVfUFRSKHB0ciwgX19wZXJfY3B1X2xvY2FsX29mZik7CQkJXAomIzQzO30pCiYjNDM7CiYjNDM7I2RlZmluZSBfcGNwX3Byb3RlY3Qob3AsIHBjcCwgLi4uKQkJCQkJXAomIzQzOyh7CQkJCQkJCQkJXAomIzQzOwlvcChsb2NhbF9jcHVfcHRyKCZhbXA7KHBjcCkpLCBfX1ZBX0FSR1NfXyk7CQkJCVwKJiM0Mzt9KQomIzQzOwomIzQzOyNkZWZpbmUgX3BjcF9wcm90ZWN0X3JldHVybihvcCwgcGNwLCBhcmdzLi4uKQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CXR5cGVvZihwY3ApIF9fcmV0dmFsOwkJCQkJCVwKJiM0MzsJX19yZXR2YWwgPSAodHlwZW9mKHBjcCkpb3AobG9jYWxfY3B1X3B0cigmYW1wOyhwY3ApKSwgIyNhcmdzKTsJXAomIzQzOwlfX3JldHZhbDsJCQkJCQkJXAomIzQzO30pCiYjNDM7I2Vsc2UKIC8qCiAgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGF2b2lkIHRoZSBjb25kaXRpb25hbCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciB3aGVuCiAgKiByZS1lbmFibGluZyBwcmVlbXB0aW9uIGZvciBwcmVlbXB0aWJsZSBrZXJuZWxzLCBidXQgZG9pbmcgdGhhdCBpbiBhIHdheQpAQCAtMTUyLDcgJiM0MzsxNzMsNiBAQCBQRVJDUFVfUkVUX09QKGFkZCwgYWRkLCBsZGFkZCkKICAqIHByZWVtcHRpb24gcG9pbnQgd2hlbiBUSUZfTkVFRF9SRVNDSEVEIGdldHMgc2V0IHdoaWxlIHByZWVtcHRpb24gaXMKICAqIGRpc2FibGVkLgogICovCi0KICNkZWZpbmUgX3BjcF9wcm90ZWN0KG9wLCBwY3AsIC4uLikJCQkJCVwKICh7CQkJCQkJCQkJXAogCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CQkJCQlcCkBAIC0xNjgsNiAmIzQzOzE4OCw3IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKQogCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsJCQkJCVwKIAlfX3JldHZhbDsJCQkJCQkJXAogfSkKJiM0MzsjZW5kaWYKIAogI2RlZmluZSB0aGlzX2NwdV9yZWFkXzEocGNwKQkJXAogCV9wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfcmVhZF84LCBwY3ApCkBAIC0yNDMsNiAmIzQzOzI2NCwxOSBAQCBQRVJDUFVfUkVUX09QKGFkZCwgYWRkLCBsZGFkZCkKIAogI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnNjQocGNwLCBvLCBuKQl0aGlzX2NwdV9jbXB4Y2hnXzgocGNwLCBvLCBuKQogCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQCiYjNDM7I2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnMTI4KHBjcCwgbywgbikJCQkJCVwKJiM0MzsoewkJCQkJCQkJCVwKJiM0MzsJdHlwZWRlZiB0eXBlb2YocGNwKSBwY3Bfb3BfVF9fOwkJCQkJXAomIzQzOwl1MTI4IG9sZF9fLCBuZXdfXywgcmV0X187CQkJCQlcCiYjNDM7CXBjcF9vcF9UX18gKnB0cl9fOwkJCQkJCVwKJiM0MzsJb2xkX18gPSBvOwkJCQkJCQlcCiYjNDM7CW5ld19fID0gbjsJCQkJCQkJXAomIzQzOwlwdHJfXyA9IGxvY2FsX2NwdV9wdHIoJmFtcDsocGNwKSk7CQkJCQlcCiYjNDM7CXJldF9fID0gY21weGNoZzEyOF9sb2NhbCgodm9pZCAqKXB0cl9fLCBvbGRfXywgbmV3X18pOwkJXAomIzQzOwlyZXRfXzsJCQkJCQkJCVwKJiM0Mzt9KQomIzQzOyNlbHNlCiAjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGcxMjgocGNwLCBvLCBuKQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJdHlwZWRlZiB0eXBlb2YocGNwKSBwY3Bfb3BfVF9fOwkJCQkJXApAQCAtMjU2LDYgJiM0MzsyOTAsNyBAQCBQRVJDUFVfUkVUX09QKGFkZCwgYWRkLCBsZGFkZCkKIAlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CQkJCQlcCiAJcmV0X187CQkJCQkJCQlcCiB9KQomIzQzOyNlbmRpZgogCiAjaWZkZWYgX19LVk1fTlZIRV9IWVBFUlZJU09SX18KIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faHlwX3Blcl9jcHVfb2Zmc2V0KHVuc2lnbmVkIGludCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCAxYjQ1MDlkMzM4MmM2My4uZGQxYWM4NGExMTYwNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0zMywxMSAmIzQzOzMzLDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kcCkKIAlwdWR2YWwgfD0gKG1tID09ICZhbXA7aW5pdF9tbSkgPyBQVURfVEFCTEVfVVhOIDogUFVEX1RBQkxFX1BYTjsKIAlfX3B1ZF9wb3B1bGF0ZShwdWRwLCBfX3BhKHBtZHApLCBwdWR2YWwpOwogfQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkMKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlX3N5bmModW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApCiYjNDM7ewomIzQzOwlwdWRfcG9wdWxhdGUoJmFtcDtpbml0X21tLCBwdWRwLCBwbWRwKTsKJiM0MzsJaWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgJmFtcDsgUEdUQkxfUFVEX01PRElGSUVEKQomIzQzOwkJYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIF9fcHVkX3BvcHVsYXRlKHB1ZF90ICpwdWRwLCBwaHlzX2FkZHJfdCBwbWRwLCBwdWR2YWxfdCBwcm90KQogewogCUJVSUxEX0JVRygpOwogfQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkMKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlX3N5bmModW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApCiYjNDM7ewomIzQzOwlCVUlMRF9CVUcoKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiAjZW5kaWYJLyogQ09ORklHX1BHVEFCTEVfTEVWRUxTICZndDsgMiAqLwogCiAjaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTICZndDsgMwpAQCAtMTIxLDQgJiM0MzsxMzcsMTIgQEAgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCwgcGd0YWJsZV90IHB0ZXApCiAJCSAgICAgICBQTURfVFlQRV9UQUJMRSB8IFBNRF9UQUJMRV9BRiB8IFBNRF9UQUJMRV9QWE4pOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGVfc3luYyh1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmFtcDtpbml0X21tLCBwbWRwLCBwdGVwKTsKJiM0MzsJaWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgJmFtcDsgUEdUQkxfUE1EX01PRElGSUVEKQomIzQzOwkJYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMjc2ODljNjJiZDI1ZGQuLjgzY2Q2NTYxMGQ3ZjdkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTgsMTQgJiM0MzsxOCwzNSBAQAogICogVk1BTExPQyByYW5nZS4KICAqCiAgKiBWTUFMTE9DX1NUQVJUOiBiZWdpbm5pbmcgb2YgdGhlIGtlcm5lbCB2bWFsbG9jIHNwYWNlCi0gKiBWTUFMTE9DX0VORDogZXh0ZW5kcyB0byB0aGUgYXZhaWxhYmxlIHNwYWNlIGJlbG93IHZtZW1tYXAKJiM0MzsgKiBWTUFMTE9DX0VORDogZXh0ZW5kcyB0byB0aGUgc3BhY2UgYmVsb3cgZ2xvYmFsIHBlcmNwdSBhcmVhCiAgKi8KICNkZWZpbmUgVk1BTExPQ19TVEFSVAkJKE1PRFVMRVNfRU5EKQomIzQzOyNkZWZpbmUgVk1BTExPQ19FTkQJCShQRVJDUFVfU1RBUlQgLSBTWl84TSkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBFUkNQVSByYW5nZQomIzQzOyAqCiYjNDM7ICogUEVSQ1BVX1NUQVJUOiBiZWdpbm5pbmcgb2YgZ2xvYmFsIHBlcmNwdSBhcmVhCiYjNDM7ICogUEVSQ1BVX0VORDogZW5kIG9mIGdsb2JhbCBwZXJjcHUgYXJlYQomIzQzOyAqIExPQ0FMX1BFUkNQVV9TVEFSVDogYmVnaW5uaW5nIG9mIGxvY2FsIHBlcmNwdSBhcmVhCiYjNDM7ICogTE9DQUxfUEVSQ1BVX0VORDogZW5kIG9mIGxvY2FsIHBlcmNwdSBhcmVhLCBleHRlbmQgdG8gdGhlIGF2YWlsYWJsZQomIzQzOyAqICAgICAgICAgICAgICAgICAgIHNwYWNlIGJlbG93IHZtZW1tYXAKJiM0MzsgKi8KJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNEtfUEFHRVMpCiYjNDM7I2RlZmluZSBQRVJDUFVfU0laRQkJKDIgKiBQR0RJUl9TSVpFKQomIzQzOyNlbGlmIGRlZmluZWQoQ09ORklHX0FSTTY0XzE2S19QQUdFUykKJiM0MzsjZGVmaW5lIFBFUkNQVV9TSVpFICAgICAgICAgICAgKDE2ICogUFVEX1NJWkUpCiYjNDM7I2VsaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNjRLX1BBR0VTKQomIzQzOyNkZWZpbmUgUEVSQ1BVX1NJWkUgICAgICAgICAgICAoUEdESVJfU0laRSkKJiM0MzsjZW5kaWYKJiM0MzsjZGVmaW5lIFBFUkNQVV9TVEFSVAkJKFBFUkNQVV9FTkQgLSBQRVJDUFVfU0laRSkKJiM0MzsjZGVmaW5lIFBFUkNQVV9FTkQJCShMT0NBTF9QRVJDUFVfU1RBUlQpCiYjNDM7I2RlZmluZSBMT0NBTF9QRVJDUFVfU1RBUlQJKExPQ0FMX1BFUkNQVV9FTkQgLSBQRVJDUFVfU0laRSkKICNpZiBWQV9CSVRTID09IFZBX0JJVFNfTUlOCi0jZGVmaW5lIFZNQUxMT0NfRU5ECQkoVk1FTU1BUF9TVEFSVCAtIFNaXzhNKQomIzQzOyNkZWZpbmUgTE9DQUxfUEVSQ1BVX0VORAkoQUxJR05fRE9XTihWTUVNTUFQX1NUQVJULCBQRVJDUFVfU0laRSkpCiAjZWxzZQogI2RlZmluZSBWTUVNTUFQX1VOVVNFRF9OUEFHRVMJKChfUEFHRV9PRkZTRVQodmFiaXRzX2FjdHVhbCkgLSBQQUdFX09GRlNFVCkgJmd0OyZndDsgUEFHRV9TSElGVCkKLSNkZWZpbmUgVk1BTExPQ19FTkQJCShWTUVNTUFQX1NUQVJUICYjNDM7IFZNRU1NQVBfVU5VU0VEX05QQUdFUyAqIHNpemVvZihzdHJ1Y3QgcGFnZSkgLSBTWl84TSkKJiM0MzsjZGVmaW5lIExPQ0FMX1BFUkNQVV9FTkQJKEFMSUdOX0RPV04oKFZNRU1NQVBfU1RBUlQgJiM0MzsgVk1FTU1BUF9VTlVTRURfTlBBR0VTICogc2l6ZW9mKHN0cnVjdCBwYWdlKSksIFBFUkNQVV9TSVpFKSkKICNlbmRpZgogCiAjZGVmaW5lIHZtZW1tYXAJCQkoKHN0cnVjdCBwYWdlICopVk1FTU1BUF9TVEFSVCAtIChtZW1zdGFydF9hZGRyICZndDsmZ3Q7IFBBR0VfU0hJRlQpKQpAQCAtMTIxNiw2ICYjNDM7MTIzNywxNiBAQCBwNGRfdCAqcDRkX29mZnNldF9sb2NrbGVzc19mb2xkZWQocGdkX3QgKnBnZHAsIHBnZF90IHBnZCwgdW5zaWduZWQgbG9uZyBhZGRyKQogCiAjZW5kaWYgIC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyAmZ3Q7IDQgKi8KIAomIzQzOyNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMgomIzQzOyNkZWZpbmUgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyAgICAgIFBHVEJMX1BNRF9NT0RJRklFRAomIzQzOyNlbGlmIENPTkZJR19QR1RBQkxFX0xFVkVMUyA9PSAzCiYjNDM7I2RlZmluZSBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLICAgICAgUEdUQkxfUFVEX01PRElGSUVECiYjNDM7I2VsaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTID09IDQKJiM0MzsjZGVmaW5lIEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgICAgICBQR1RCTF9QNERfTU9ESUZJRUQKJiM0MzsjZWxpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNQomIzQzOyNkZWZpbmUgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyAgICAgIFBHVEJMX1BHRF9NT0RJRklFRAomIzQzOyNlbmRpZgomIzQzOwogI2RlZmluZSBwZ2RfRVJST1IoZSkJXAogCXByX2VycigmIzM0OyVzOiVkOiBiYWQgcGdkICUwMTZsbHguXG4mIzM0OywgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYwppbmRleCAyM2MwNWRjN2E4ZjJhYy4uNmQ0MjBhZDU5YWY0OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYwpAQCAtMzYwLDYgJiM0MzszNjAsOSBAQCB2b2lkIF9faW5pdCBfX25vX3Nhbml0aXplX2FkZHJlc3Mgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogCXNtcF9pbml0X2NwdXMoKTsKIAlzbXBfYnVpbGRfbXBpZHJfaGFzaCgpOwogCiYjNDM7CS8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIHNtcF9pbml0X2NwdXMgKi8KJiM0MzsJc2V0dXBfcGVyY3B1X3BnZCgpOwomIzQzOwogI2lmZGVmIENPTkZJR19BUk02NF9TV19UVEJSMF9QQU4KIAkvKgogCSAqIE1ha2Ugc3VyZSBpbml0X3RocmVhZF9pbmZvLnR0YnIwIGFsd2F5cyBnZW5lcmF0ZXMgdHJhbnNsYXRpb24KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wLmMKaW5kZXggZDQ2MDIyZjcyMDc1NDAuLjRhODExMzc5YzE5MTYyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9zbXAuYwpAQCAtNTUsNiAmIzQzOzU1LDggQEAKIAogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9pcGkuaCZndDsKIAomIzQzO2V4dGVybiB2b2lkIGlkbWFwX2NwdV9yZXBsYWNlX3R0YnIxKHBoeXNfYWRkcl90IHBnZGlyKTsKJiM0MzsKIC8qCiAgKiBhcyBmcm9tIDIuNSwga2VybmVscyBubyBsb25nZXIgaGF2ZSBhbiBpbml0X3Rhc2tzIHN0cnVjdHVyZQogICogc28gd2UgbmVlZCBzb21lIG90aGVyIHdheSBvZiB0ZWxsaW5nIGEgbmV3IHNlY29uZGFyeSBjb3JlCkBAIC0xOTgsNiAmIzQzOzIwMCwxMiBAQCBhc21saW5rYWdlIG5vdHJhY2Ugdm9pZCBzZWNvbmRhcnlfc3RhcnRfa2VybmVsKHZvaWQpCiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSAmYW1wO2luaXRfbW07CiAJY29uc3Qgc3RydWN0IGNwdV9vcGVyYXRpb25zICpvcHM7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKJiM0MzsJdHlwZWRlZiB2b2lkICh0dGJyX3JlcGxhY2VfZnVuYykocGh5c19hZGRyX3QpOwomIzQzOwl0dGJyX3JlcGxhY2VfZnVuYyAqcmVwbGFjZV90dGJyOwomIzQzOwomIzQzOwlwaHlzX2FkZHJfdCB0dGJyMSA9IHBoeXNfdG9fdHRicih2aXJ0X3RvX3BoeXMocGVyY3B1X3BnZFtjcHVdKSk7CiYjNDM7CXJlcGxhY2VfdHRiciA9ICh2b2lkICopX19wYV9zeW1ib2woaWRtYXBfY3B1X3JlcGxhY2VfdHRicjEpOwomIzQzOwlyZXBsYWNlX3R0YnIodHRicjEpOwogCiAJLyoKIAkgKiBBbGwga2VybmVsIHRocmVhZHMgc2hhcmUgdGhlIHNhbWUgbW0gY29udGV4dDsgZ3JhYiBhCkBAIC04MTksNiAmIzQzOzgyNyw0MiBAQCB2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIAl9CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX05VTUEKJiM0MztleHRlcm4gaW50IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXTsKJiM0MzsKJiM0MztpbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXJldHVybiBjcHVfdG9fbm9kZV9tYXBbY3B1XTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQQomIzQzO3Vuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5OwomIzQzO0VYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7CiYjNDM7LyogVXNlZCB0byBjYWxjdWxhdGUgcGNwdSBsb2NhbCBhZGRyZXNzLCB0aGUgb2Zmc2V0IGlzIHNhbWUgZm9yIGFsbCBDUFVzICovCiYjNDM7dW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfbG9jYWxfb2ZmIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MztFWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9sb2NhbF9vZmYpOwomIzQzOwomIzQzO3ZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVsdGE7CiYjNDM7CXVuc2lnbmVkIGludCBjcHU7CiYjNDM7CWludCByYyA9IC1FSU5WQUw7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwomIzQzOwkvKiBQQ1BVIHBhZ2UgdGFibGUganVzdCBjYW4gc3VwcG9ydCBQQ1BVX0ZDX1BBR0UgKi8KJiM0MzsJcmMgPSBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLCBlYXJseV9jcHVfdG9fbm9kZSk7CiYjNDM7I2VuZGlmCiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlwYW5pYygmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHBlcmNwdSBhcmVhcyAoZXJyPSVkKS4mIzM0OywgcmMpOwomIzQzOwomIzQzOwlkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0OwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQomIzQzOwkJX19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgJiM0MzsgcGNwdV91bml0X29mZnNldHNbY3B1XTsKJiM0MzsJX19wZXJfY3B1X2xvY2FsX29mZiA9ICh1bnNpZ25lZCBsb25nKXBjcHVfbG9jYWxfYmFzZSAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgY29uc3QgY2hhciAqaXBpX3R5cGVzW01BWF9JUEldIF9fdHJhY2Vwb2ludF9zdHJpbmcgPSB7CiAJW0lQSV9SRVNDSEVEVUxFXQk9ICYjMzQ7UmVzY2hlZHVsaW5nIGludGVycnVwdHMmIzM0OywKIAlbSVBJX0NBTExfRlVOQ10JCT0gJiMzNDtGdW5jdGlvbiBjYWxsIGludGVycnVwdHMmIzM0OywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0va2FzYW5faW5pdC5jIGIvYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmMKaW5kZXggM2ZjYWQ5NTZmZGY3Y2IuLmE4ZTI3MmJmZWZlMWExIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYwpAQCAtNjAsMTMgJiM0Mzs2MCwxNCBAQCBzdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IGthc2FuX2FsbG9jX3Jhd19wYWdlKGludCBub2RlKQogfQogCiBzdGF0aWMgcHRlX3QgKl9faW5pdCBrYXNhbl9wdGVfb2Zmc2V0KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlLAotCQkJCSAgICAgIGJvb2wgZWFybHkpCiYjNDM7CQkJCSAgICAgIGJvb2wgZWFybHksIHBndGJsX21vZF9tYXNrICptYXNrKQogewogCWlmIChwbWRfbm9uZShSRUFEX09OQ0UoKnBtZHApKSkgewogCQlwaHlzX2FkZHJfdCBwdGVfcGh5cyA9IGVhcmx5ID8KIAkJCQlfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcHRlKQogCQkJCQk6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpOwogCQlfX3BtZF9wb3B1bGF0ZShwbWRwLCBwdGVfcGh5cywgUE1EX1RZUEVfVEFCTEUpOwomIzQzOwkJKm1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEOwogCX0KIAogCXJldHVybiBlYXJseSA/IHB0ZV9vZmZzZXRfa2ltZyhwbWRwLCBhZGRyKQpAQCAtNzQsNDkgJiM0Mzs3NSw1MyBAQCBzdGF0aWMgcHRlX3QgKl9faW5pdCBrYXNhbl9wdGVfb2Zmc2V0KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlLAogfQogCiBzdGF0aWMgcG1kX3QgKl9faW5pdCBrYXNhbl9wbWRfb2Zmc2V0KHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlLAotCQkJCSAgICAgIGJvb2wgZWFybHkpCiYjNDM7CQkJCSAgICAgIGJvb2wgZWFybHksIHBndGJsX21vZF9tYXNrICptYXNrKQogewogCWlmIChwdWRfbm9uZShSRUFEX09OQ0UoKnB1ZHApKSkgewogCQlwaHlzX2FkZHJfdCBwbWRfcGh5cyA9IGVhcmx5ID8KIAkJCQlfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcG1kKQogCQkJCQk6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpOwogCQlfX3B1ZF9wb3B1bGF0ZShwdWRwLCBwbWRfcGh5cywgUFVEX1RZUEVfVEFCTEUpOwomIzQzOwkJKm1hc2sgfD0gUEdUQkxfUFVEX01PRElGSUVEOwogCX0KIAogCXJldHVybiBlYXJseSA/IHBtZF9vZmZzZXRfa2ltZyhwdWRwLCBhZGRyKSA6IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7CiB9CiAKIHN0YXRpYyBwdWRfdCAqX19pbml0IGthc2FuX3B1ZF9vZmZzZXQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUsCi0JCQkJICAgICAgYm9vbCBlYXJseSkKJiM0MzsJCQkJICAgICAgYm9vbCBlYXJseSwgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJaWYgKHA0ZF9ub25lKFJFQURfT05DRSgqcDRkcCkpKSB7CiAJCXBoeXNfYWRkcl90IHB1ZF9waHlzID0gZWFybHkgPwogCQkJCV9fcGFfc3ltYm9sKGthc2FuX2Vhcmx5X3NoYWRvd19wdWQpCiAJCQkJCToga2FzYW5fYWxsb2NfemVyb2VkX3BhZ2Uobm9kZSk7CiAJCV9fcDRkX3BvcHVsYXRlKHA0ZHAsIHB1ZF9waHlzLCBQNERfVFlQRV9UQUJMRSk7CiYjNDM7CQkqbWFzayB8PSBQR1RCTF9QNERfTU9ESUZJRUQ7CiAJfQogCiAJcmV0dXJuIGVhcmx5ID8gcHVkX29mZnNldF9raW1nKHA0ZHAsIGFkZHIpIDogcHVkX29mZnNldChwNGRwLCBhZGRyKTsKIH0KIAogc3RhdGljIHA0ZF90ICpfX2luaXQga2FzYW5fcDRkX29mZnNldChwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSwKLQkJCQkgICAgICBib29sIGVhcmx5KQomIzQzOwkJCQkgICAgICBib29sIGVhcmx5LCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlpZiAocGdkX25vbmUoUkVBRF9PTkNFKCpwZ2RwKSkpIHsKIAkJcGh5c19hZGRyX3QgcDRkX3BoeXMgPSBlYXJseSA/CiAJCQkJX19wYV9zeW1ib2woa2FzYW5fZWFybHlfc2hhZG93X3A0ZCkKIAkJCQkJOiBrYXNhbl9hbGxvY196ZXJvZWRfcGFnZShub2RlKTsKIAkJX19wZ2RfcG9wdWxhdGUocGdkcCwgcDRkX3BoeXMsIFBHRF9UWVBFX1RBQkxFKTsKJiM0MzsJCSptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDsKIAl9CiAKIAlyZXR1cm4gZWFybHkgPyBwNGRfb2Zmc2V0X2tpbWcocGdkcCwgYWRkcikgOiBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcHRlX3BvcHVsYXRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5KQomIzQzOwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHksCiYjNDM7CQkJCSAgICAgIHBndGJsX21vZF9tYXNrICptYXNrKQogewogCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQlwdGVfdCAqcHRlcCA9IGthc2FuX3B0ZV9vZmZzZXQocG1kcCwgYWRkciwgbm9kZSwgZWFybHkpOwomIzQzOwlwdGVfdCAqcHRlcCA9IGthc2FuX3B0ZV9vZmZzZXQocG1kcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spOwogCiAJZG8gewogCQlwaHlzX2FkZHJfdCBwYWdlX3BoeXMgPSBlYXJseSA/CkBAIC0xMzAsMzggJiM0MzsxMzUsNDEgQEAgc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcG1kX3BvcHVsYXRlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5KQomIzQzOwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHksCiYjNDM7CQkJCSAgICAgIHBndGJsX21vZF9tYXNrICptYXNrKQogewogCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQlwbWRfdCAqcG1kcCA9IGthc2FuX3BtZF9vZmZzZXQocHVkcCwgYWRkciwgbm9kZSwgZWFybHkpOwomIzQzOwlwbWRfdCAqcG1kcCA9IGthc2FuX3BtZF9vZmZzZXQocHVkcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spOwogCiAJZG8gewogCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWthc2FuX3B0ZV9wb3B1bGF0ZShwbWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7CiYjNDM7CQlrYXNhbl9wdGVfcG9wdWxhdGUocG1kcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHksIG1hc2spOwogCX0gd2hpbGUgKHBtZHAmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQgJmFtcDsmYW1wOyBwbWRfbm9uZShSRUFEX09OQ0UoKnBtZHApKSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wdWRfcG9wdWxhdGUocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpCiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSwKJiM0MzsJCQkJICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwotCXB1ZF90ICpwdWRwID0ga2FzYW5fcHVkX29mZnNldChwNGRwLCBhZGRyLCBub2RlLCBlYXJseSk7CiYjNDM7CXB1ZF90ICpwdWRwID0ga2FzYW5fcHVkX29mZnNldChwNGRwLCBhZGRyLCBub2RlLCBlYXJseSwgbWFzayk7CiAKIAlkbyB7CiAJCW5leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJa2FzYW5fcG1kX3BvcHVsYXRlKHB1ZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5KTsKJiM0MzsJCWthc2FuX3BtZF9wb3B1bGF0ZShwdWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgbWFzayk7CiAJfSB3aGlsZSAocHVkcCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCAmYW1wOyZhbXA7IHB1ZF9ub25lKFJFQURfT05DRSgqcHVkcCkpKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSkKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5LAomIzQzOwkJCQkgICAgICBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAl1bnNpZ25lZCBsb25nIG5leHQ7Ci0JcDRkX3QgKnA0ZHAgPSBrYXNhbl9wNGRfb2Zmc2V0KHBnZHAsIGFkZHIsIG5vZGUsIGVhcmx5KTsKJiM0MzsJcDRkX3QgKnA0ZHAgPSBrYXNhbl9wNGRfb2Zmc2V0KHBnZHAsIGFkZHIsIG5vZGUsIGVhcmx5LCBtYXNrKTsKIAogCWRvIHsKIAkJbmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlrYXNhbl9wdWRfcG9wdWxhdGUocDRkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHkpOwomIzQzOwkJa2FzYW5fcHVkX3BvcHVsYXRlKHA0ZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5LCBtYXNrKTsKIAl9IHdoaWxlIChwNGRwJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kICZhbXA7JmFtcDsgcDRkX25vbmUoUkVBRF9PTkNFKCpwNGRwKSkpOwogfQogCkBAIC0xNzAsMTIgJiM0MzsxNzgsMTcgQEAgc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BnZF9wb3B1bGF0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogewogCXVuc2lnbmVkIGxvbmcgbmV4dDsKIAlwZ2RfdCAqcGdkcDsKJiM0MzsJcGd0YmxfbW9kX21hc2sgbWFzayA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBhZGRyOwogCiAJcGdkcCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKIAlkbyB7CiAJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJa2FzYW5fcDRkX3BvcHVsYXRlKHBnZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5KTsKJiM0MzsJCWthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgJmFtcDttYXNrKTsKIAl9IHdoaWxlIChwZ2RwJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKJiM0MzsKJiM0MzsJaWYgKG1hc2sgJmFtcDsgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSykKJiM0MzsJCWFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIGVuZCk7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUk02NF82NEtfUEFHRVMpIHx8IENPTkZJR19QR1RBQkxFX0xFVkVMUyAmZ3Q7IDQKQEAgLTMxMSw3ICYjNDM7MzI0LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGthc2FuX2luaXRfc2hhZG93KHZvaWQpCiAKIAltb2Rfc2hhZG93X3N0YXJ0ID0gKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopTU9EVUxFU19WQUREUik7CiAKLQl2bWFsbG9jX3NoYWRvd19lbmQgPSAodTY0KWthc2FuX21lbV90b19zaGFkb3coKHZvaWQgKilWTUFMTE9DX0VORCk7CiYjNDM7CXZtYWxsb2Nfc2hhZG93X2VuZCA9ICh1NjQpa2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKUxPQ0FMX1BFUkNQVV9FTkQpOwogCiAJLyoKIAkgKiBXZSBhcmUgZ29pbmcgdG8gcGVyZm9ybSBwcm9wZXIgc2V0dXAgb2Ygc2hhZG93IG1lbW9yeS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vbW11LmMgYi9hcmNoL2FybTY0L21tL21tdS5jCmluZGV4IGYyYmU1MDE0NjhjZTVhLi5lZTRhYjAzMWViZjhkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL21tdS5jCkBAIC02Nyw2ICYjNDM7NjcsNjMgQEAgbG9uZyBfX3NlY3Rpb24oJiMzNDsubW11b2ZmLmRhdGEud3JpdGUmIzM0OykgX19lYXJseV9jcHVfYm9vdF9zdGF0dXM7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN3YXBwZXJfcGdkaXJfbG9jayk7CiBzdGF0aWMgREVGSU5FX01VVEVYKGZpeG1hcF9sb2NrKTsKIAomIzQzO3BnZF90ICpwZXJjcHVfcGdkW05SX0NQVVNdIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0Mztib29sIHBlcmNwdV9wZ2Rfc2V0dXBfZG9uZSBfX3JvX2FmdGVyX2luaXQgPSBmYWxzZTsKJiM0MzsKJiM0Mzt2b2lkIF9faW5pdCBzZXR1cF9wZXJjcHVfcGdkKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiYjNDM7CQl2b2lkICphZGRyOwomIzQzOwomIzQzOwkJaWYgKGNwdSA9PSAwKSB7CiYjNDM7CQkJcGVyY3B1X3BnZFtjcHVdID0gc3dhcHBlcl9wZ19kaXI7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlhZGRyID0gbWVtYmxvY2tfYWxsb2MoUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwomIzQzOwkJaWYgKCFhZGRyKQomIzQzOwkJCXBhbmljKCYjMzQ7Q2FuJiMzOTt0IGFsbG9jIHBlcmNwdSBwZ2RcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCW1lbWNweShhZGRyLCAodm9pZCAqKXN3YXBwZXJfcGdfZGlyLCBQQUdFX1NJWkUpOwomIzQzOwkJcGVyY3B1X3BnZFtjcHVdID0gKHBnZF90ICopYWRkcjsKJiM0MzsJfQomIzQzOwomIzQzOwlkc2IoaXNoc3QpOwomIzQzOwomIzQzOwlwZXJjcHVfcGdkX3NldHVwX2RvbmUgPSB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHIsIG5leHQ7CiYjNDM7CWludCBjcHU7CiYjNDM7CXBnZF90ICpwZ2RwID0gcGdkX29mZnNldF9rKHN0YXJ0KTsKJiM0MzsJcGdkX3QgcGdkOwomIzQzOwl1bnNpZ25lZCBpbnQgaW5kZXggPSBwZ2RfaW5kZXgoc3RhcnQpOwomIzQzOwomIzQzOwlCVUdfT04oc3RhcnQgJmd0OyBlbmQpOwomIzQzOwomIzQzOwlpZiAoIXBlcmNwdV9wZ2Rfc2V0dXBfZG9uZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogRG9uJiMzOTt0IHN5bmMgbG9jYWwgcGVyY3B1IGFyZWEgcGFnZSB0YWJsZSAqLwomIzQzOwlpZiAoc3RhcnQgJmd0Oz0gTE9DQUxfUEVSQ1BVX1NUQVJUICZhbXA7JmFtcDsgZW5kICZsdDsgTE9DQUxfUEVSQ1BVX0VORCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJYWRkciA9IHN0YXJ0OwomIzQzOwlkbyB7CiYjNDM7CQlwZ2QgPSBSRUFEX09OQ0UoKnBnZHApOwomIzQzOwkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwomIzQzOwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewomIzQzOwkJCWlmIChjcHUgPT0gMCkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJc2V0X3BnZChwZXJjcHVfcGdkW2NwdV0gJiM0MzsgaW5kZXgsIHBnZCk7CiYjNDM7CQl9CiYjNDM7CX0gd2hpbGUgKHBnZHAmIzQzOyYjNDM7LCBpbmRleCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiYjNDM7fQomIzQzOwogdm9pZCBub2luc3RyIHNldF9zd2FwcGVyX3BnZChwZ2RfdCAqcGdkcCwgcGdkX3QgcGdkKQogewogCXBnZF90ICpmaXhtYXBfcGdkcDsKQEAgLTE2MSw3ICYjNDM7MjE4LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9jbGVhcl9wZ3RhYmxlKHZvaWQgKnRhYmxlKQogfQogCiBzdGF0aWMgdm9pZCBpbml0X3B0ZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKLQkJICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90KQomIzQzOwkJICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlkbyB7CiAJCXB0ZV90IG9sZF9wdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApOwpAQCAtMTcxLDYgJiM0MzsyMjgsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3B0ZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJICogYXJlIGRlZmVycmVkIHRvIHRoZSBlbmQgb2YgYWxsb2NfaW5pdF9jb250X3B0ZSgpLgogCQkgKi8KIAkJX19zZXRfcHRlX25vc3luYyhwdGVwLCBwZm5fcHRlKF9fcGh5c190b19wZm4ocGh5cyksIHByb3QpKTsKJiM0MzsJCSptYXNrIHw9IFBHVEJMX1BURV9NT0RJRklFRDsKIAogCQkvKgogCQkgKiBBZnRlciB0aGUgUFRFIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZQpAQCAtMTk4LDcgJiM0MzsyNTYsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgcGh5c19hZGRyX3QgcGh5cywKIAkJCSAgICAgICBwZ3Byb3RfdCBwcm90LAogCQkJICAgICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSwKLQkJCSAgICAgICBpbnQgZmxhZ3MpCiYjNDM7CQkJICAgICAgIGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwogCXBtZF90IHBtZCA9IFJFQURfT05DRSgqcG1kcCk7CkBAIC0yMTksNiAmIzQzOzI3Nyw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlpbml0X2NsZWFyX3BndGFibGUocHRlcCk7CiAJCXB0ZXAgJiM0Mzs9IHB0ZV9pbmRleChhZGRyKTsKIAkJX19wbWRfcG9wdWxhdGUocG1kcCwgcHRlX3BoeXMsIHBtZHZhbCk7CiYjNDM7CQkqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7CiAJfSBlbHNlIHsKIAkJQlVHX09OKHBtZF9iYWQocG1kKSk7CiAJCXB0ZXAgPSBwdGVfc2V0X2ZpeG1hcF9vZmZzZXQocG1kcCwgYWRkcik7CkBAIC0yMzUsNyAmIzQzOzI5NCw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkgICAgIXB0ZV9yYW5nZV9oYXNfdmFsaWRfbm9uY29udChwdGVwKSkKIAkJCV9fcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7CiAKLQkJaW5pdF9wdGUocHRlcCwgYWRkciwgbmV4dCwgcGh5cywgX19wcm90KTsKJiM0MzsJCWluaXRfcHRlKHB0ZXAsIGFkZHIsIG5leHQsIHBoeXMsIF9fcHJvdCwgbWFzayk7CiAKIAkJcHRlcCAmIzQzOz0gcHRlX2luZGV4KG5leHQpIC0gcHRlX2luZGV4KGFkZHIpOwogCQlwaHlzICYjNDM7PSBuZXh0IC0gYWRkcjsKQEAgLTI1Myw3ICYjNDM7MzEyLDggQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcHRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAKIHN0YXRpYyBpbnQgaW5pdF9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCSAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LAotCQkgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLCBpbnQgZmxhZ3MpCiYjNDM7CQkgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLCBpbnQgZmxhZ3MsCiYjNDM7CQkgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwogCkBAIC0yNjYsNyAmIzQzOzMyNiwxMCBAQCBzdGF0aWMgaW50IGluaXRfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQlpZiAoKChhZGRyIHwgbmV4dCB8IHBoeXMpICZhbXA7IH5QTURfTUFTSykgPT0gMCAmYW1wOyZhbXA7CiAJCSAgICAoZmxhZ3MgJmFtcDsgTk9fQkxPQ0tfTUFQUElOR1MpID09IDAgJmFtcDsmYW1wOwogCQkgICAgIXBtZF90YWJsZShvbGRfcG1kKSkgewotCQkJV0FSTl9PTighcG1kX3NldF9odWdlKHBtZHAsIHBoeXMsIHByb3QpKTsKJiM0MzsJCQlpZiAocG1kX3NldF9odWdlKHBtZHAsIHBoeXMsIHByb3QpKQomIzQzOwkJCQkqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlXQVJOX09OKDEpOwogCiAJCQkvKgogCQkJICogQWZ0ZXIgdGhlIFBNRCBlbnRyeSBoYXMgYmVlbiBwb3B1bGF0ZWQgb25jZSwgd2UKQEAgLTI3OCw3ICYjNDM7MzQxLDcgQEAgc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWludCByZXQ7CiAKIAkJCXJldCA9IGFsbG9jX2luaXRfY29udF9wdGUocG1kcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCwKLQkJCQkJCSAgcGd0YWJsZV9hbGxvYywgZmxhZ3MpOwomIzQzOwkJCQkJCSAgcGd0YWJsZV9hbGxvYywgZmxhZ3MsIG1hc2spOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCkBAIC0zMDYsNyAmIzQzOzM2OSw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3BtZChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzLAogCQkJICAgICAgIHBncHJvdF90IHByb3QsCiAJCQkgICAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLAotCQkJICAgICAgIGludCBmbGFncykKJiM0MzsJCQkgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTMzMSw2ICYjNDM7Mzk0LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCWluaXRfY2xlYXJfcGd0YWJsZShwbWRwKTsKIAkJcG1kcCAmIzQzOz0gcG1kX2luZGV4KGFkZHIpOwogCQlfX3B1ZF9wb3B1bGF0ZShwdWRwLCBwbWRfcGh5cywgcHVkdmFsKTsKJiM0MzsJCSptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDsKIAl9IGVsc2UgewogCQlCVUdfT04ocHVkX2JhZChwdWQpKTsKIAkJcG1kcCA9IHBtZF9zZXRfZml4bWFwX29mZnNldChwdWRwLCBhZGRyKTsKQEAgLTM0Nyw3ICYjNDM7NDExLDggQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCSAgICAhcG1kX3JhbmdlX2hhc192YWxpZF9ub25jb250KHBtZHApKQogCQkJX19wcm90ID0gX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IFBURV9DT05UKTsKIAotCQlyZXQgPSBpbml0X3BtZChwbWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsIHBndGFibGVfYWxsb2MsIGZsYWdzKTsKJiM0MzsJCXJldCA9IGluaXRfcG1kKHBtZHAsIGFkZHIsIG5leHQsIHBoeXMsIF9fcHJvdCwgcGd0YWJsZV9hbGxvYywgZmxhZ3MsCiYjNDM7CQkJICAgICAgIG1hc2spOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAKQEAgLTM2NCw3ICYjNDM7NDI5LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LAogCQkJICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksCi0JCQkgIGludCBmbGFncykKJiM0MzsJCQkgIGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwpAQCAtMzg1LDYgJiM0Mzs0NTAsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQlpbml0X2NsZWFyX3BndGFibGUocHVkcCk7CiAJCXB1ZHAgJiM0Mzs9IHB1ZF9pbmRleChhZGRyKTsKIAkJX19wNGRfcG9wdWxhdGUocDRkcCwgcHVkX3BoeXMsIHA0ZHZhbCk7CiYjNDM7CQkqbWFzayB8PSBQR1RCTF9QNERfTU9ESUZJRUQ7CiAJfSBlbHNlIHsKIAkJQlVHX09OKHA0ZF9iYWQocDRkKSk7CiAJCXB1ZHAgPSBwdWRfc2V0X2ZpeG1hcF9vZmZzZXQocDRkcCwgYWRkcik7CkBAIC00MDIsNyAmIzQzOzQ2OCwxMCBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkgICAoKGFkZHIgfCBuZXh0IHwgcGh5cykgJmFtcDsgflBVRF9NQVNLKSA9PSAwICZhbXA7JmFtcDsKIAkJICAgIChmbGFncyAmYW1wOyBOT19CTE9DS19NQVBQSU5HUykgPT0gMCAmYW1wOyZhbXA7CiAJCSAgICAhcHVkX3RhYmxlKG9sZF9wdWQpKSB7Ci0JCQlXQVJOX09OKCFwdWRfc2V0X2h1Z2UocHVkcCwgcGh5cywgcHJvdCkpOwomIzQzOwkJCWlmIChwdWRfc2V0X2h1Z2UocHVkcCwgcGh5cywgcHJvdCkpCiYjNDM7CQkJCSptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCVdBUk5fT04oMSk7CiAKIAkJCS8qCiAJCQkgKiBBZnRlciB0aGUgUFVEIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZQpAQCAtNDEyLDcgJiM0Mzs0ODEsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCQkJICAgICAgUkVBRF9PTkNFKHB1ZF92YWwoKnB1ZHApKSkpOwogCQl9IGVsc2UgewogCQkJcmV0ID0gYWxsb2NfaW5pdF9jb250X3BtZChwdWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBwcm90LAotCQkJCQkJICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7CiYjNDM7CQkJCQkJICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7CiAJCQlpZiAocmV0KQogCQkJCWdvdG8gb3V0OwogCkBAIC00MzEsNyAmIzQzOzUwMCw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wdWQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiBzdGF0aWMgaW50IGFsbG9jX2luaXRfcDRkKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LAogCQkJICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksCi0JCQkgIGludCBmbGFncykKJiM0MzsJCQkgIGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC00NTIsNiAmIzQzOzUyMSw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wNGQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCWluaXRfY2xlYXJfcGd0YWJsZShwNGRwKTsKIAkJcDRkcCAmIzQzOz0gcDRkX2luZGV4KGFkZHIpOwogCQlfX3BnZF9wb3B1bGF0ZShwZ2RwLCBwNGRfcGh5cywgcGdkdmFsKTsKJiM0MzsJCSptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDsKIAl9IGVsc2UgewogCQlCVUdfT04ocGdkX2JhZChwZ2QpKTsKIAkJcDRkcCA9IHA0ZF9zZXRfZml4bWFwX29mZnNldChwZ2RwLCBhZGRyKTsKQEAgLTQ2Myw3ICYjNDM7NTMzLDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X3A0ZChwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJbmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCiAJCXJldCA9IGFsbG9jX2luaXRfcHVkKHA0ZHAsIGFkZHIsIG5leHQsIHBoeXMsIHByb3QsCi0JCQkJICAgICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7CiYjNDM7CQkJCSAgICAgcGd0YWJsZV9hbGxvYywgZmxhZ3MsIG1hc2spOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAKQEAgLTQ4Myw3ICYjNDM7NTUzLDcgQEAgc3RhdGljIGludCBfX2NyZWF0ZV9wZ2RfbWFwcGluZ19sb2NrZWQocGdkX3QgKnBnZGlyLCBwaHlzX2FkZHJfdCBwaHlzLAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZpcnQsIHBoeXNfYWRkcl90IHNpemUsCiAJCQkJICAgICAgIHBncHJvdF90IHByb3QsCiAJCQkJICAgICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSwKLQkJCQkgICAgICAgaW50IGZsYWdzKQomIzQzOwkJCQkgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgYWRkciwgZW5kLCBuZXh0OwpAQCAtNTAzLDcgJiM0Mzs1NzMsNyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nX2xvY2tlZChwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsCiAJZG8gewogCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CiAJCXJldCA9IGFsbG9jX2luaXRfcDRkKHBnZHAsIGFkZHIsIG5leHQsIHBoeXMsIHByb3QsIHBndGFibGVfYWxsb2MsCi0JCQkJICAgICBmbGFncyk7CiYjNDM7CQkJCSAgICAgZmxhZ3MsIG1hc2spOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAkJcGh5cyAmIzQzOz0gbmV4dCAtIGFkZHI7CkBAIC01MTYsMTMgJiM0Mzs1ODYsMTMgQEAgc3RhdGljIGludCBfX2NyZWF0ZV9wZ2RfbWFwcGluZyhwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsCiAJCQkJdW5zaWduZWQgbG9uZyB2aXJ0LCBwaHlzX2FkZHJfdCBzaXplLAogCQkJCXBncHJvdF90IHByb3QsCiAJCQkJcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLAotCQkJCWludCBmbGFncykKJiM0MzsJCQkJaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmYW1wO2ZpeG1hcF9sb2NrKTsKIAlyZXQgPSBfX2NyZWF0ZV9wZ2RfbWFwcGluZ19sb2NrZWQocGdkaXIsIHBoeXMsIHZpcnQsIHNpemUsIHByb3QsCi0JCQkJCSAgcGd0YWJsZV9hbGxvYywgZmxhZ3MpOwomIzQzOwkJCQkJICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Zml4bWFwX2xvY2spOwogCiAJcmV0dXJuIHJldDsKQEAgLTUzNSw5ICYjNDM7NjA1LDEwIEBAIHN0YXRpYyB2b2lkIGVhcmx5X2NyZWF0ZV9wZ2RfbWFwcGluZyhwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsCiAJCQkJICAgICBpbnQgZmxhZ3MpCiB7CiAJaW50IHJldDsKJiM0MzsJcGd0YmxfbW9kX21hc2sgbWFzayA9IDA7CiAKIAlyZXQgPSBfX2NyZWF0ZV9wZ2RfbWFwcGluZyhwZ2RpciwgcGh5cywgdmlydCwgc2l6ZSwgcHJvdCwgcGd0YWJsZV9hbGxvYywKLQkJCQkgICBmbGFncyk7CiYjNDM7CQkJCSAgIGZsYWdzLCAmYW1wO21hc2spOwogCWlmIChyZXQpCiAJCXBhbmljKCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBwYWdlIHRhYmxlc1xuJiMzNDspOwogfQpAQCAtMTAwOSw2ICYjNDM7MTA4MCwyOSBAQCB2b2lkIF9faW5pdCBsaW5lYXJfbWFwX21heWJlX3NwbGl0X3RvX3B0ZXModm9pZCkKIAl9CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0Mzt2b2lkIF9faW5pdCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCwKJiM0MzsJCQkgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKQomIzQzO3sKJiM0MzsJaW50IGksIHJldDsKJiM0MzsJcGd0YmxfbW9kX21hc2sgbWFzayA9IDA7CiYjNDM7CiYjNDM7CWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnI7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlwaHlzX2FkZHJfdCBwaHlzID0gcGFnZV90b19waHlzKHBhZ2VzW2ldKTsKJiM0MzsJCXJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHBlcmNwdV9wZ2RbY3B1XSwgcGh5cywgdmlydCwgUEFHRV9TSVpFLCBQQUdFX0tFUk5FTCwKJiM0MzsJCQkJCSAgIGVhcmx5X3BndGFibGVfYWxsb2MsIE5PX0VYRUNfTUFQUElOR1MsICZhbXA7bWFzayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXBhbmljKCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBsb2NhbCBwZXJjcHUgZmlyc3QgY2h1bmtcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCXZpcnQgJiM0Mzs9IFBBR0VfU0laRTsKJiM0MzsJfQomIzQzOwomIzQzOwlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKgogICogVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIHRvIG1vZGlmeSBleGlzdGluZyB0YWJsZSBlbnRyaWVzLAogICogd2l0aG91dCBhbGxvY2F0aW5nIG5ldyBsZXZlbHMgb2YgdGFibGUuIE5vdGUgdGhhdCB0aGlzIHBlcm1pdHMgdGhlCkBAIC0xMjc5LDYgJiM0MzsxMzczLDcgQEAgc3RhdGljIGludCBfX2luaXQgX19rcHRpX2luc3RhbGxfbmdfbWFwcGluZ3Modm9pZCAqX191bnVzZWQpCiAKIAlpZiAoIWNwdSkgewogCQlpbnQgcmV0OwomIzQzOwkJcGd0YmxfbW9kX21hc2sgbWFzayA9IDA7CiAKIAkJYWxsb2MgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMgfCBfX0dGUF9aRVJPLCBvcmRlcik7CiAJCWtwdGlfbmdfdGVtcF9wZ2QgPSAocGdkX3QgKikoYWxsb2MgJiM0MzsgKGxldmVscyAtIDEpICogUEFHRV9TSVpFKTsKQEAgLTEzMDIsNyAmIzQzOzEzOTcsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX2twdGlfaW5zdGFsbF9uZ19tYXBwaW5ncyh2b2lkICpfX3VudXNlZCkKIAkJLy8KIAkJcmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmdfbG9ja2VkKGtwdGlfbmdfdGVtcF9wZ2QsIF9fcGEoYWxsb2MpLAogCQkJCQkJICBLUFRJX05HX1RFTVBfVkEsIFBBR0VfU0laRSwgUEFHRV9LRVJORUwsCi0JCQkJCQkgIGtwdGlfbmdfcGdkX2FsbG9jLCAwKTsKJiM0MzsJCQkJCQkgIGtwdGlfbmdfcGdkX2FsbG9jLCAwLCAmYW1wO21hc2spOwogCQlpZiAocmV0KQogCQkJcGFuaWMoJiMzNDtGYWlsZWQgdG8gY3JlYXRlIHBhZ2UgdGFibGVzXG4mIzM0Oyk7CiAJfQpAQCAtMTYwOCw3ICYjNDM7MTcwMyw3IEBAIHN0YXRpYyB2b2lkIHVubWFwX2hvdHBsdWdfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAogc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgZmxvb3IsCi0JCQkJIHVuc2lnbmVkIGxvbmcgY2VpbGluZykKJiM0MzsJCQkJIHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJcHRlX3QgKnB0ZXAsIHB0ZTsKIAl1bnNpZ25lZCBsb25nIGksIHN0YXJ0ID0gYWRkcjsKQEAgLTE2MjQsNiAmIzQzOzE3MTksNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlXQVJOX09OKCFwdGVfbm9uZShwdGUpKTsKIAl9IHdoaWxlIChhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGFkZHIgJmx0OyBlbmQpOwogCiYjNDM7CSptYXNrIHw9IFBHVEJMX1BURV9NT0RJRklFRDsKIAlpZiAoIXBndGFibGVfcmFuZ2VfYWxpZ25lZChzdGFydCwgZW5kLCBmbG9vciwgY2VpbGluZywgUE1EX01BU0spKQogCQlyZXR1cm47CiAKQEAgLTE2MzksMTMgJiM0MzsxNzM1LDE0IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHRlX3RhYmxlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJfQogCiAJcG1kX2NsZWFyKHBtZHApOwomIzQzOwkqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7CiAJX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoc3RhcnQpOwogCWZyZWVfaG90cGx1Z19wZ3RhYmxlX3BhZ2UodmlydF90b19wYWdlKHB0ZXApKTsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wbWRfdGFibGUocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgZmxvb3IsCi0JCQkJIHVuc2lnbmVkIGxvbmcgY2VpbGluZykKJiM0MzsJCQkJIHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJcG1kX3QgKnBtZHAsIHBtZDsKIAl1bnNpZ25lZCBsb25nIGksIG5leHQsIHN0YXJ0ID0gYWRkcjsKQEAgLTE2NTgsNyAmIzQzOzE3NTUsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJY29udGludWU7CiAKIAkJV0FSTl9PTighcG1kX3ByZXNlbnQocG1kKSB8fCAhcG1kX3RhYmxlKHBtZCkpOwotCQlmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRwLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZyk7CiYjNDM7CQlmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRwLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZywgbWFzayk7CiAJfSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgJmx0OyBlbmQpOwogCiAJaWYgKENPTkZJR19QR1RBQkxFX0xFVkVMUyAmbHQ7PSAyKQpAQCAtMTY3OSwxMyAmIzQzOzE3NzYsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wbWRfdGFibGUocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAl9CiAKIAlwdWRfY2xlYXIocHVkcCk7CiYjNDM7CSptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDsKIAlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShzdGFydCk7CiAJZnJlZV9ob3RwbHVnX3BndGFibGVfcGFnZSh2aXJ0X3RvX3BhZ2UocG1kcCkpOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B1ZF90YWJsZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCSB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vciwKLQkJCQkgdW5zaWduZWQgbG9uZyBjZWlsaW5nKQomIzQzOwkJCQkgdW5zaWduZWQgbG9uZyBjZWlsaW5nLCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlwdWRfdCAqcHVkcCwgcHVkOwogCXVuc2lnbmVkIGxvbmcgaSwgbmV4dCwgc3RhcnQgPSBhZGRyOwpAQCAtMTY5OCw3ICYjNDM7MTc5Niw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHVkX3RhYmxlKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQljb250aW51ZTsKIAogCQlXQVJOX09OKCFwdWRfcHJlc2VudChwdWQpIHx8ICFwdWRfdGFibGUocHVkKSk7Ci0JCWZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTsKJiM0MzsJCWZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nLCBtYXNrKTsKIAl9IHdoaWxlIChhZGRyID0gbmV4dCwgYWRkciAmbHQ7IGVuZCk7CiAKIAlpZiAoIXBndGFibGVfbDRfZW5hYmxlZCgpKQpAQCAtMTcxOSwxMyAmIzQzOzE4MTcsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAl9CiAKIAlwNGRfY2xlYXIocDRkcCk7CiYjNDM7CSptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDsKIAlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShzdGFydCk7CiAJZnJlZV9ob3RwbHVnX3BndGFibGVfcGFnZSh2aXJ0X3RvX3BhZ2UocHVkcCkpOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3A0ZF90YWJsZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCSB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vciwKLQkJCQkgdW5zaWduZWQgbG9uZyBjZWlsaW5nKQomIzQzOwkJCQkgdW5zaWduZWQgbG9uZyBjZWlsaW5nLCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlwNGRfdCAqcDRkcCwgcDRkOwogCXVuc2lnbmVkIGxvbmcgaSwgbmV4dCwgc3RhcnQgPSBhZGRyOwpAQCAtMTczOCw3ICYjNDM7MTgzNyw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQljb250aW51ZTsKIAogCQlXQVJOX09OKCFwNGRfcHJlc2VudChwNGQpKTsKLQkJZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcpOwomIzQzOwkJZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIG1hc2spOwogCX0gd2hpbGUgKGFkZHIgPSBuZXh0LCBhZGRyICZsdDsgZW5kKTsKIAogCWlmICghcGd0YWJsZV9sNV9lbmFibGVkKCkpCkBAIC0xNzU5LDYgJiM0MzsxODU4LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wNGRfdGFibGUocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAl9CiAKIAlwZ2RfY2xlYXIocGdkcCk7CiYjNDM7CSptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDsKIAlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShzdGFydCk7CiAJZnJlZV9ob3RwbHVnX3BndGFibGVfcGFnZSh2aXJ0X3RvX3BhZ2UocDRkcCkpOwogfQpAQCAtMTc2OCw2ICYjNDM7MTg2OCw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfdGFibGVzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiB7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwogCXBnZF90ICpwZ2RwLCBwZ2Q7CiYjNDM7CXBndGJsX21vZF9tYXNrIG1hc2sgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjsKIAogCWRvIHsKIAkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwpAQCAtMTc3Nyw4ICYjNDM7MTg3OSwxMSBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3RhYmxlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAKIAkJV0FSTl9PTighcGdkX3ByZXNlbnQocGdkKSk7Ci0JCWZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTsKJiM0MzsJCWZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nLCAmYW1wO21hc2spOwogCX0gd2hpbGUgKGFkZHIgPSBuZXh0LCBhZGRyICZsdDsgZW5kKTsKJiM0MzsKJiM0MzsJaWYgKG1hc2sgJmFtcDsgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSykKJiM0MzsJCWFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIGVuZCk7CiB9CiAjZW5kaWYKIApAQCAtMTk4Niw2ICYjNDM7MjA5MSw3IEBAIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAkJICAgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpCiB7CiAJaW50IHJldCwgZmxhZ3MgPSBOT19FWEVDX01BUFBJTkdTOwomIzQzOwlwZ3RibF9tb2RfbWFzayBtYXNrID0gMDsKIAogCVZNX0JVR19PTighbWhwX3JhbmdlX2FsbG93ZWQoc3RhcnQsIHNpemUsIHRydWUpKTsKIApAQCAtMTk5NCwxMCAmIzQzOzIxMDAsMTMgQEAgaW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLAogCiAJcmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmcoc3dhcHBlcl9wZ19kaXIsIHN0YXJ0LCBfX3BoeXNfdG9fdmlydChzdGFydCksCiAJCQkJICAgc2l6ZSwgcGFyYW1zLSZndDtwZ3Byb3QsIHBnZF9wZ3RhYmxlX2FsbG9jX2luaXRfbW0sCi0JCQkJICAgZmxhZ3MpOwomIzQzOwkJCQkgICBmbGFncywgJmFtcDttYXNrKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAomIzQzOwlpZiAobWFzayAmYW1wOyBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLKQomIzQzOwkJYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgc3RhcnQgJiM0Mzsgc2l6ZSk7CiYjNDM7CiAJbWVtYmxvY2tfY2xlYXJfbm9tYXAoc3RhcnQsIHNpemUpOwogCiAJcmV0ID0gX19hZGRfcGFnZXMobmlkLCBzdGFydCAmZ3Q7Jmd0OyBQQUdFX1NISUZULCBzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwppbmRleCAxYzIwMTQ0NzAwZDdkNy4uZGQyOTMzMTk4MjNlM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwpAQCAtMzg5LDYgJiM0MzszODksMTAgQEAgc3RhdGljIGludCBfX2luaXQgcHRkdW1wX2luaXQodm9pZCkKIAkJeyBNT0RVTEVTX0VORCwJCSYjMzQ7TW9kdWxlcyBlbmQmIzM0OyB9LAogCQl7IFZNQUxMT0NfU1RBUlQsCSYjMzQ7dm1hbGxvYygpIGFyZWEmIzM0OyB9LAogCQl7IFZNQUxMT0NfRU5ELAkJJiMzNDt2bWFsbG9jKCkgZW5kJiMzNDsgfSwKJiM0MzsJCXsgUEVSQ1BVX1NUQVJULAkJJiMzNDtHbG9iYWwgcGVyY3B1IHN0YXJ0JiMzNDsgfSwKJiM0MzsJCXsgUEVSQ1BVX0VORCwJCSYjMzQ7R2xvYmFsIHBlcmNwdSBlbmQmIzM0OyB9LAomIzQzOwkJeyBMT0NBTF9QRVJDUFVfU1RBUlQsCSYjMzQ7TG9jYWwgcGVyY3B1IHN0YXJ0JiMzNDsgfSwKJiM0MzsJCXsgTE9DQUxfUEVSQ1BVX0VORCwJJiMzNDtMb2NhbCBwZXJjcHUgZW5kJiMzNDsgfSwKIAkJeyB2bWVtbWFwX3N0YXJ0LAkmIzM0O3ZtZW1tYXAgc3RhcnQmIzM0OyB9LAogCQl7IFZNRU1NQVBfRU5ELAkJJiMzNDt2bWVtbWFwIGVuZCYjMzQ7IH0sCiAJCXsgUENJX0lPX1NUQVJULAkJJiMzNDtQQ0kgSS9PIHN0YXJ0JiMzNDsgfSwKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcC5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc21wLmMKaW5kZXggZmE2NmY5Yzk3ZDc0OGQuLmQ0MjBmZjlkY2Y0ZmM4IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuYwpAQCAtMzY0LDMgJiM0MzszNjQsNTQgQEAgdm9pZCBrZ2RiX3JvdW5kdXBfY3B1cyh2b2lkKQogCX0KIH0KICNlbmRpZgomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKJiM0MztleHRlcm4gaW50IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXTsKJiM0MzsKJiM0Mzt1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseTsKJiM0MztFWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9vZmZzZXQpOwomIzQzOwomIzQzO2ludCBlYXJseV9jcHVfdG9fbm9kZShpbnQgY3B1KQomIzQzO3sKJiM0MzsJcmV0dXJuIGNwdV90b19ub2RlX21hcFtjcHVdOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBwY3B1X2NwdV9kaXN0YW5jZSh1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvKQomIzQzO3sKJiM0MzsJcmV0dXJuIG5vZGVfZGlzdGFuY2UoZWFybHlfY3B1X3RvX25vZGUoZnJvbSksIGVhcmx5X2NwdV90b19ub2RlKHRvKSk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVsdGE7CiYjNDM7CXVuc2lnbmVkIGludCBjcHU7CiYjNDM7CWludCByYyA9IC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChwY3B1X2Nob3Nlbl9mYyAhPSBQQ1BVX0ZDX1BBR0UpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbHdheXMgcmVzZXJ2ZSBhcmVhIGZvciBtb2R1bGUgcGVyY3B1IHZhcmlhYmxlcy4gIFRoYXQmIzM5O3MKJiM0MzsJCSAqIHdoYXQgdGhlIGxlZ2FjeSBhbGxvY2F0b3IgZGlkLgomIzQzOwkJICovCiYjNDM7CQlyYyA9IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLAomIzQzOwkJCQkJICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUsIFBBR0VfU0laRSwKJiM0MzsJCQkJCSAgICBwY3B1X2NwdV9kaXN0YW5jZSwKJiM0MzsJCQkJCSAgICBlYXJseV9jcHVfdG9fbm9kZSk7CiYjNDM7I2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwomIzQzOwkJaWYgKHJjICZsdDsgMCkKJiM0MzsJCQlwcl93YXJuKCYjMzQ7UEVSQ1BVOiAlcyBhbGxvY2F0b3IgZmFpbGVkICglZCksIGZhbGxpbmcgYmFjayB0byBwYWdlIHNpemVcbiYjMzQ7LAomIzQzOwkJCQkgICBwY3B1X2ZjX25hbWVzW3BjcHVfY2hvc2VuX2ZjXSwgcmMpOwomIzQzOyNlbmRpZgomIzQzOwl9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJcmMgPSBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLCBlYXJseV9jcHVfdG9fbm9kZSk7CiYjNDM7I2VuZGlmCiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlwYW5pYygmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHBlcmNwdSBhcmVhcyAoZXJyPSVkKS4mIzM0OywgcmMpOwomIzQzOwomIzQzOwlkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0OwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQomIzQzOwkJX19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgJiM0MzsgcGNwdV91bml0X29mZnNldHNbY3B1XTsKJiM0Mzt9CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMgYi9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMKaW5kZXggYzk5ZjJhYjEwNWU1YjcuLmIzYjkxY2VlZDZhOTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jCkBAIC0xNiw3ICYjNDM7MTYsNyBAQAogCiAjaW5jbHVkZSAmbHQ7YXNtL3NlY3Rpb25zLmgmZ3Q7CiAKLXN0YXRpYyBpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IE5VTUFfTk9fTk9ERSB9OwomIzQzO2ludCBjcHVfdG9fbm9kZV9tYXBbTlJfQ1BVU10gPSB7IFswIC4uLiBOUl9DUFVTLTFdID0gTlVNQV9OT19OT0RFIH07CiAKIGJvb2wgbnVtYV9vZmY7CiAKQEAgLTE0MCw1NSAmIzQzOzE0MCw2IEBAIHZvaWQgX19pbml0IGVhcmx5X21hcF9jcHVfdG9fbm9kZSh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgbmlkKQogCQlzZXRfY3B1X251bWFfbm9kZShjcHUsIG5pZCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKLXVuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfb2Zmc2V0KTsKLQotaW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpCi17Ci0JcmV0dXJuIGNwdV90b19ub2RlX21hcFtjcHVdOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBwY3B1X2NwdV9kaXN0YW5jZSh1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvKQotewotCXJldHVybiBub2RlX2Rpc3RhbmNlKGVhcmx5X2NwdV90b19ub2RlKGZyb20pLCBlYXJseV9jcHVfdG9fbm9kZSh0bykpOwotfQotCi12b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBkZWx0YTsKLQl1bnNpZ25lZCBpbnQgY3B1OwotCWludCByYyA9IC1FSU5WQUw7Ci0KLQlpZiAocGNwdV9jaG9zZW5fZmMgIT0gUENQVV9GQ19QQUdFKSB7Ci0JCS8qCi0JCSAqIEFsd2F5cyByZXNlcnZlIGFyZWEgZm9yIG1vZHVsZSBwZXJjcHUgdmFyaWFibGVzLiAgVGhhdCYjMzk7cwotCQkgKiB3aGF0IHRoZSBsZWdhY3kgYWxsb2NhdG9yIGRpZC4KLQkJICovCi0JCXJjID0gcGNwdV9lbWJlZF9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsCi0JCQkJCSAgICBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFLCBQQUdFX1NJWkUsCi0JCQkJCSAgICBwY3B1X2NwdV9kaXN0YW5jZSwKLQkJCQkJICAgIGVhcmx5X2NwdV90b19ub2RlKTsKLSNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksKLQkJaWYgKHJjICZsdDsgMCkKLQkJCXByX3dhcm4oJiMzNDtQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxuJiMzNDssCi0JCQkJICAgcGNwdV9mY19uYW1lc1twY3B1X2Nob3Nlbl9mY10sIHJjKTsKLSNlbmRpZgotCX0KLQotI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwotCWlmIChyYyAmbHQ7IDApCi0JCXJjID0gcGNwdV9wYWdlX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwgZWFybHlfY3B1X3RvX25vZGUpOwotI2VuZGlmCi0JaWYgKHJjICZsdDsgMCkKLQkJcGFuaWMoJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwZXJjcHUgYXJlYXMgKGVycj0lZCkuJiMzNDssIHJjKTsKLQotCWRlbHRhID0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7Ci0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKLQkJX19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgJiM0MzsgcGNwdV91bml0X29mZnNldHNbY3B1XTsKLX0KLSNlbmRpZgotCiAvKgogICogSW5pdGlhbGl6ZSBOT0RFX0RBVEEgZm9yIGEgbm9kZSBvbiB0aGUgbG9jYWwgbWVtb3J5CiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA0ODVkZjljMmRiZGRiMy4uYzhjMzgwMGZiZDlmYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTE4NTgsNiAmIzQzOzE4NTgsMTcgQEAgdW5zaWduZWQgbG9uZyB2bWFsbG9jX3RvX3Bmbihjb25zdCB2b2lkICphZGRyKTsKICNpZmRlZiBDT05GSUdfTU1VCiBleHRlcm4gYm9vbCBpc192bWFsbG9jX2FkZHIoY29uc3Qgdm9pZCAqeCk7CiBleHRlcm4gaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCk7CiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQCiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3BlcmNwdV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7CXJldHVybiBhZGRyICZndDs9IFBFUkNQVV9TVEFSVCAmYW1wOyZhbXA7IGFkZHIgJmx0OyBMT0NBTF9QRVJDUFVfRU5EOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc19wZXJjcHVfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc192bWFsbG9jX2FkZHIoY29uc3Qgdm9pZCAqeCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCmluZGV4IDRmMzZiODU4NTk5NWM1Li41YTI3MDMxZGZmMWE1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCkBAIC03NSw2ICYjNDM7NzUsOCBAQAogCiBleHRlcm4gdm9pZCAqcGNwdV9iYXNlX2FkZHI7CiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyAqcGNwdV91bml0X29mZnNldHM7CiYjNDM7LyogcGVyY3B1IGxvY2FsIG1hcHBpbmcgYmFzZSAqLwomIzQzO2V4dGVybiB2b2lkICpwY3B1X2xvY2FsX2Jhc2U7CiAKIHN0cnVjdCBwY3B1X2dyb3VwX2luZm8gewogCWludAkJCW5yX3VuaXRzOwkvKiBhbGlnbmVkICMgb2YgdW5pdHMgKi8KQEAgLTExNCw3ICYjNDM7MTE2LDcgQEAgZXh0ZXJuIHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKiBfX2luaXQgcGNwdV9hbGxvY19hbGxvY19pbmZvKGludCBucl9ncm91cHMsCiBleHRlcm4gdm9pZCBfX2luaXQgcGNwdV9mcmVlX2FsbG9jX2luZm8oc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWkpOwogCiBleHRlcm4gdm9pZCBfX2luaXQgcGNwdV9zZXR1cF9maXJzdF9jaHVuayhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSwKLQkJCQkJIHZvaWQgKmJhc2VfYWRkcik7CiYjNDM7CQkJCQkgdm9pZCAqYmFzZV9hZGRyLCB2b2lkICpsb2NhbF9iYXNlKTsKIAogZXh0ZXJuIGludCBfX2luaXQgcGNwdV9lbWJlZF9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgc2l6ZV90IGR5bl9zaXplLAogCQkJCXNpemVfdCBhdG9tX3NpemUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oCmluZGV4IDkxNzRmYTU5YmJjNTRkLi4wNjJjNjRhNWQ0YmQwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmgKQEAgLTI2LDQgJiM0MzsyNiwxNyBAQAogCQkJYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTsJCVwKIAl9IHdoaWxlICgwKQogCiYjNDM7I2lmbmRlZiBDT05GSUdfQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkMKJiM0MzsjZGVmaW5lIHB1ZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHB1ZCwgcG1kKQkJCQlcCiYjNDM7CWRvIHsJCQkJCQkJCVwKJiM0MzsJCXB1ZF9wb3B1bGF0ZSgmYW1wO2luaXRfbW0sIHB1ZCwgcG1kKTsJCQlcCiYjNDM7CX0gd2hpbGUgKDApCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBDT05GSUdfQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkMKJiM0MzsjZGVmaW5lIHBtZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHBtZCwgcHRlKQkJCQlcCiYjNDM7CWRvIHsJCQkJCQkJCVwKJiM0MzsJCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmFtcDtpbml0X21tLCBwbWQsIHB0ZSk7CQlcCiYjNDM7CX0gd2hpbGUgKDApCiYjNDM7I2VuZGlmCiAjZW5kaWYgLyogX0xJTlVYX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaAppbmRleCBkODdkYzdmNzdmNGU4YS4uZGFmOTk2NWExMTFkMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCkBAIC0zMTMsNiAmIzQzOzMxMyw5IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKipwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLAogCQkJCSAgICAgc2l6ZV90IGFsaWduKTsKIAogdm9pZCBwY3B1X2ZyZWVfdm1fYXJlYXMoc3RydWN0IHZtX3N0cnVjdCAqKnZtcywgaW50IG5yX3Ztcyk7CiYjNDM7c3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsCiYjNDM7CQkJCSAgICAgaW50IHVuaXRfc2l6ZSwgc2l6ZV90IGFsaWduKTsKJiM0MzsKICMgZWxzZQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1fc3RydWN0ICoqCiBwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLApkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggOWUwY2E0ODI0OTA1NGYuLmUxOTEwYzMzMjYzODUxIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWcKQEAgLTEwNjEsNiAmIzQzOzEwNjEsOSBAQCBjb25maWcgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksKIGNvbmZpZyBVU0VfUEVSQ1BVX05VTUFfTk9ERV9JRAogCWJvb2wKIAomIzQzO2NvbmZpZyBIQVZFX0xPQ0FMX1BFUl9DUFVfTUFQCiYjNDM7CWJvb2wKJiM0MzsKIGNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQQogCWJvb2wKIApAQCAtMTUwOSw2ICYjNDM7MTUxMiwxMiBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKJiM0Mztjb25maWcgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkMKJiM0MzsJYm9vbAomIzQzOwomIzQzO2NvbmZpZyBBUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQwomIzQzOwlib29sCiYjNDM7CiBzb3VyY2UgJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMTgxZTc5ZjFkNmEyMDcuLjlkOWYwOGNiMjZhMTE0IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTE1NTIsMTAgJiM0MzsxNTUyLDEzIEBAIHZvaWQgY2xlYXJfdm1fdW5pbml0aWFsaXplZF9mbGFnKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtKTsKIGludCBfX211c3RfY2hlY2sgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LAogCQkJICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0KTsKJiM0MztpbnQgX19tdXN0X2NoZWNrIHZtYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQl1bnNpZ25lZCBsb25nIGVuZCwgcGh5c19hZGRyX3QgcGh5c19hZGRyLAomIzQzOwkJCXBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdCk7CiAKIHZvaWQgdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogCi12b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwomIzQzO3ZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIAogc3RhdGljIGlubGluZSBib29sIHZtYV9pc19zaW5nbGVfdGhyZWFkZWRfcHJpdmF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKZGlmZiAtLWdpdCBhL21tL2ttc2FuL2hvb2tzLmMgYi9tbS9rbXNhbi9ob29rcy5jCmluZGV4IDhmMjJkMWYyMjk4MTNmLi5lMmEwZmFmMzQ0YjkxYiAxMDA2NDQKLS0tIGEvbW0va21zYW4vaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9rbXNhbi9ob29rcy5jCkBAIC0xMzUsOCAmIzQzOzEzNSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZtYWxsb2Nfb3JpZ2luKHVuc2lnbmVkIGxvbmcgYWRkcikKIAogdm9pZCBrbXNhbl92dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHZtYWxsb2Nfc2hhZG93KHN0YXJ0KSwgdm1hbGxvY19zaGFkb3coZW5kKSk7Ci0JX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh2bWFsbG9jX29yaWdpbihzdGFydCksIHZtYWxsb2Nfb3JpZ2luKGVuZCkpOwomIzQzOwlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2bWFsbG9jX3NoYWRvdyhzdGFydCksIHZtYWxsb2Nfc2hhZG93KGVuZCkpOwomIzQzOwlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2bWFsbG9jX29yaWdpbihzdGFydCksIHZtYWxsb2Nfb3JpZ2luKGVuZCkpOwogCWZsdXNoX2NhY2hlX3ZtYXAodm1hbGxvY19zaGFkb3coc3RhcnQpLCB2bWFsbG9jX3NoYWRvdyhlbmQpKTsKIAlmbHVzaF9jYWNoZV92bWFwKHZtYWxsb2Nfb3JpZ2luKHN0YXJ0KSwgdm1hbGxvY19vcmlnaW4oZW5kKSk7CiB9CkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIGludCBrbXNhbl9pb3JlbWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQl2bWFsbG9jX29yaWdpbihzdGFydCAmIzQzOyBvZmYgJiM0MzsgUEFHRV9TSVpFKSwgcHJvdCwgJmFtcDtvcmlnaW4sCiAJCQlQQUdFX1NISUZUKTsKIAkJaWYgKG1hcHBlZCkgewotCQkJX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCgKJiM0MzsJCQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLAogCQkJCXZtYWxsb2Nfc2hhZG93KHN0YXJ0ICYjNDM7IG9mZiksCiAJCQkJdm1hbGxvY19zaGFkb3coc3RhcnQgJiM0Mzsgb2ZmICYjNDM7IFBBR0VfU0laRSkpOwogCQkJZXJyID0gbWFwcGVkOwpAQCAtMjAzLDEwICYjNDM7MjAzLDEwIEBAIGludCBrbXNhbl9pb3JlbWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQlfX2ZyZWVfcGFnZXMoc2hhZG93LCAxKTsKIAkJaWYgKG9yaWdpbikKIAkJCV9fZnJlZV9wYWdlcyhvcmlnaW4sIDEpOwotCQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKAomIzQzOwkJX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwKIAkJCXZtYWxsb2Nfc2hhZG93KHN0YXJ0KSwKIAkJCXZtYWxsb2Nfc2hhZG93KHN0YXJ0ICYjNDM7IGNsZWFuICogUEFHRV9TSVpFKSk7Ci0JCV9fdnVubWFwX3JhbmdlX25vZmx1c2goCiYjNDM7CQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLAogCQkJdm1hbGxvY19vcmlnaW4oc3RhcnQpLAogCQkJdm1hbGxvY19vcmlnaW4oc3RhcnQgJiM0MzsgY2xlYW4gKiBQQUdFX1NJWkUpKTsKIAl9CkBAIC0yMzMsOCAmIzQzOzIzMyw4IEBAIHZvaWQga21zYW5faW91bm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogCSAgICAgaSYjNDM7JiM0MzssIHZfc2hhZG93ICYjNDM7PSBQQUdFX1NJWkUsIHZfb3JpZ2luICYjNDM7PSBQQUdFX1NJWkUpIHsKIAkJc2hhZG93ID0ga21zYW5fdm1hbGxvY190b19wYWdlX29yX251bGwoKHZvaWQgKil2X3NoYWRvdyk7CiAJCW9yaWdpbiA9IGttc2FuX3ZtYWxsb2NfdG9fcGFnZV9vcl9udWxsKCh2b2lkICopdl9vcmlnaW4pOwotCQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHZfc2hhZG93LCB2bWFsbG9jX3NoYWRvdyhlbmQpKTsKLQkJX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh2X29yaWdpbiwgdm1hbGxvY19vcmlnaW4oZW5kKSk7CiYjNDM7CQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2X3NoYWRvdywgdm1hbGxvY19zaGFkb3coZW5kKSk7CiYjNDM7CQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2X29yaWdpbiwgdm1hbGxvY19vcmlnaW4oZW5kKSk7CiAJCWlmIChzaGFkb3cpCiAJCQlfX2ZyZWVfcGFnZXMoc2hhZG93LCAxKTsKIAkJaWYgKG9yaWdpbikKZGlmZiAtLWdpdCBhL21tL3BlcmNwdS1pbnRlcm5hbC5oIGIvbW0vcGVyY3B1LWludGVybmFsLmgKaW5kZXggOGNiZTAzOWJmODQ3YWMuLjRkNDYxMzA1MjQzYmYwIDEwMDY0NAotLS0gYS9tbS9wZXJjcHUtaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9wZXJjcHUtaW50ZXJuYWwuaApAQCAtNjMsMTEgJiM0Mzs2MywxNCBAQCBzdHJ1Y3QgcGNwdV9jaHVuayB7CiAJICogY2h1bmtfbWQuCiAJICovCiAJdm9pZAkJCSpiYXNlX2FkZHIgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKJiM0MzsJLyogcGVyY3B1IGxvY2FsIGJhc2UgYWRkcmVzcyBvZiB0aGUgY2h1bmsgKi8KJiM0MzsJdm9pZCAgICAgICAgICAgICAgICAgICAgKmxvY2FsX2Jhc2U7CiAKIAl1bnNpZ25lZCBsb25nCQkqYWxsb2NfbWFwOwkvKiBhbGxvY2F0aW9uIG1hcCAqLwogCXN0cnVjdCBwY3B1X2Jsb2NrX21kCSptZF9ibG9ja3M7CS8qIG1ldGFkYXRhIGJsb2NrcyAqLwogCiAJdm9pZAkJCSpkYXRhOwkJLyogY2h1bmsgZGF0YSAqLwomIzQzOwl2b2lkCQkJKmxvY2FsX2RhdGE7CS8qIGNodW5rIGxvY2FsIHZtICovCiAJYm9vbAkJCWltbXV0YWJsZTsJLyogbm8gW2RlXXBvcHVsYXRpb24gYWxsb3dlZCAqLwogCWJvb2wJCQlpc29sYXRlZDsJLyogaXNvbGF0ZWQgZnJvbSBhY3RpdmUgY2h1bmsKIAkJCQkJCSAgIHNsb3RzICovCkBAIC0xNjIsNiAmIzQzOzE2NSwxNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBwY3B1X29ial9mdWxsX3NpemUoc2l6ZV90IHNpemUpCiAJcmV0dXJuIHNpemUgKiBudW1fcG9zc2libGVfY3B1cygpICYjNDM7IGV4dHJhX3NpemU7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0MztleHRlcm4gdm9pZCBfX2luaXQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucik7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpCiYjNDM7ewomIzQzOwlyZXR1cm47CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2lmZGVmIENPTkZJR19QRVJDUFVfU1RBVFMKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CmRpZmYgLS1naXQgYS9tbS9wZXJjcHUtdm0uYyBiL21tL3BlcmNwdS12bS5jCmluZGV4IDRmNTkzNzA5MDU5MGQ4Li41ZGVjYWFkNzY0MGZkYyAxMDA2NDQKLS0tIGEvbW0vcGVyY3B1LXZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGVyY3B1LXZtLmMKQEAgLTExMiw2ICYjNDM7MTEyLDEwIEBAIHN0YXRpYyBpbnQgcGNwdV9hbGxvY19wYWdlcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssCiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0MztleHRlcm4gcGdkX3QgKnBlcmNwdV9wZ2RbTlJfQ1BVU107CiYjNDM7I2VuZGlmCiYjNDM7CiAvKioKICAqIHBjcHVfcHJlX3VubWFwX2ZsdXNoIC0gZmx1c2ggY2FjaGUgcHJpb3IgdG8gdW5tYXBwaW5nCiAgKiBAY2h1bms6IGNodW5rIHRoZSByZWdpb25zIHRvIGJlIGZsdXNoZWQgYmVsb25ncyB0bwpAQCAtMTMwLDYgJiM0MzsxMzQsMTEgQEAgc3RhdGljIHZvaWQgcGNwdV9wcmVfdW5tYXBfZmx1c2goc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAogCWZsdXNoX2NhY2hlX3Z1bm1hcCgKIAkJcGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2xvd191bml0X2NwdSwgcGFnZV9zdGFydCksCiAJCXBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9oaWdoX3VuaXRfY3B1LCBwYWdlX2VuZCkpOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUAomIzQzOwlmbHVzaF9jYWNoZV92dW5tYXAoKHVuc2lnbmVkIGxvbmcpY2h1bmstJmd0O2xvY2FsX2Jhc2UgJiM0MzsgKHBhZ2Vfc3RhcnQgJmx0OyZsdDsgUEFHRV9TSElGVCksCiYjNDM7CQkJKHVuc2lnbmVkIGxvbmcpY2h1bmstJmd0O2xvY2FsX2Jhc2UgJiM0MzsgKHBhZ2VfZW5kICZsdDsmbHQ7IFBBR0VfU0hJRlQpKTsKJiM0MzsjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5yX3BhZ2VzKQpAQCAtMTM3LDYgJiM0MzsxNDYsMjAgQEAgc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5yX3BhZ2VzKQogCXZ1bm1hcF9yYW5nZV9ub2ZsdXNoKGFkZHIsIGFkZHIgJiM0MzsgKG5yX3BhZ2VzICZsdDsmbHQ7IFBBR0VfU0hJRlQpKTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUAomIzQzO3N0YXRpYyB2b2lkIF9fcGNwdV91bm1hcF9wYWdlc19sb2NhbCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsCiYjNDM7CQkJICAgIGludCBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CV9fdnVubWFwX3JhbmdlX25vZmx1c2gocGVyY3B1X3BnZFtjcHVdLCB2aXJ0LCB2aXJ0ICYjNDM7IChucl9wYWdlcyAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzX2xvY2FsKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCwKJiM0MzsJCQkgICAgaW50IG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJcmV0dXJuOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIC8qKgogICogcGNwdV91bm1hcF9wYWdlcyAtIHVubWFwIHBhZ2VzIG91dCBvZiBhIHBjcHVfY2h1bmsKICAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKQEAgLTE2Niw2ICYjNDM7MTg5LDEwIEBAIHN0YXRpYyB2b2lkIHBjcHVfdW5tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAogCQl9CiAJCV9fcGNwdV91bm1hcF9wYWdlcyhwY3B1X2NodW5rX2FkZHIoY2h1bmssIGNwdSwgcGFnZV9zdGFydCksCiAJCQkJICAgcGFnZV9lbmQgLSBwYWdlX3N0YXJ0KTsKJiM0MzsKJiM0MzsJCV9fcGNwdV91bm1hcF9wYWdlc19sb2NhbChjcHUsCiYjNDM7CQkJCQkodW5zaWduZWQgbG9uZyljaHVuay0mZ3Q7bG9jYWxfYmFzZSAmIzQzOyAocGFnZV9zdGFydCAmbHQ7Jmx0OyBQQUdFX1NISUZUKSwKJiM0MzsJCQkJCXBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7CiAJfQogfQogCkBAIC0xODgsNiAmIzQzOzIxNSwxMiBAQCBzdGF0aWMgdm9pZCBwY3B1X3Bvc3RfdW5tYXBfdGxiX2ZsdXNoKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywKIAlmbHVzaF90bGJfa2VybmVsX3JhbmdlKAogCQlwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfbG93X3VuaXRfY3B1LCBwYWdlX3N0YXJ0KSwKIAkJcGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2hpZ2hfdW5pdF9jcHUsIHBhZ2VfZW5kKSk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQCiYjNDM7CWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoCiYjNDM7CQkodW5zaWduZWQgbG9uZyljaHVuay0mZ3Q7bG9jYWxfYmFzZSAmIzQzOyAocGFnZV9zdGFydCAmbHQ7Jmx0OyBQQUdFX1NISUZUKSwKJiM0MzsJCSh1bnNpZ25lZCBsb25nKWNodW5rLSZndDtsb2NhbF9iYXNlICYjNDM7IChwYWdlX2VuZCAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiYjNDM7I2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgX19wY3B1X21hcF9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICoqcGFnZXMsCkBAIC0xOTcsNiAmIzQzOzIzMCwzMiBAQCBzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogCQkJUEFHRV9LRVJORUwsIHBhZ2VzLCBQQUdFX1NISUZULCBHRlBfS0VSTkVMKTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUAomIzQzO3N0YXRpYyBpbnQgX19wY3B1X21hcF9wYWdlc19sb2NhbCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsIHN0cnVjdCBwYWdlICoqcGFnZXMsCiYjNDM7CQkJICAgIGludCBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gdm1hcF9yYW5nZV9ub2ZsdXNoKHBlcmNwdV9wZ2RbY3B1XSwgdmlydCwgdmlydCAmIzQzOyBQQUdFX1NJWkUsCiYjNDM7CQkJCXBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIFBBR0VfS0VSTkVMLCBQQUdFX1NISUZUKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJCXZpcnQgJiM0Mzs9IFBBR0VfU0laRTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbnQgX19wY3B1X21hcF9wYWdlc19sb2NhbCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsIHN0cnVjdCBwYWdlICoqcGFnZXMsCiYjNDM7CQkJICAgIGludCBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIC8qKgogICogcGNwdV9tYXBfcGFnZXMgLSBtYXAgcGFnZXMgaW50byBhIHBjcHVfY2h1bmsKICAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKQEAgLTIyNCw2ICYjNDM7MjgzLDEzIEBAIHN0YXRpYyBpbnQgcGNwdV9tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAogCQlpZiAoZXJyICZsdDsgMCkKIAkJCWdvdG8gZXJyOwogCiYjNDM7CQllcnIgPSBfX3BjcHVfbWFwX3BhZ2VzX2xvY2FsKGNwdSwKJiM0MzsJCQkJCSh1bnNpZ25lZCBsb25nKWNodW5rLSZndDtsb2NhbF9iYXNlICYjNDM7IChwYWdlX3N0YXJ0ICZsdDsmbHQ7IFBBR0VfU0hJRlQpLAomIzQzOwkJCQkJJmFtcDtwYWdlc1twY3B1X3BhZ2VfaWR4KGNwdSwgcGFnZV9zdGFydCldLAomIzQzOwkJCQkJcGFnZV9lbmQgLSBwYWdlX3N0YXJ0KTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwogCQlmb3IgKGkgPSBwYWdlX3N0YXJ0OyBpICZsdDsgcGFnZV9lbmQ7IGkmIzQzOyYjNDM7KQogCQkJcGNwdV9zZXRfcGFnZV9jaHVuayhwYWdlc1twY3B1X3BhZ2VfaWR4KGNwdSwgaSldLAogCQkJCQkgICAgY2h1bmspOwpAQCAtMjMzLDYgJiM0MzsyOTksOSBAQCBzdGF0aWMgaW50IHBjcHVfbWFwX3BhZ2VzKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUodGNwdSkgewogCQlfX3BjcHVfdW5tYXBfcGFnZXMocGNwdV9jaHVua19hZGRyKGNodW5rLCB0Y3B1LCBwYWdlX3N0YXJ0KSwKIAkJCQkgICBwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpOwomIzQzOwkJX19wY3B1X3VubWFwX3BhZ2VzX2xvY2FsKHRjcHUsCiYjNDM7CQkJCQkodW5zaWduZWQgbG9uZyljaHVuay0mZ3Q7bG9jYWxfYmFzZSAmIzQzOyAocGFnZV9zdGFydCAmbHQ7Jmx0OyBQQUdFX1NISUZUKSwKJiM0MzsJCQkJCXBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7CiAJCWlmICh0Y3B1ID09IGNwdSkKIAkJCWJyZWFrOwogCX0KQEAgLTI1OCw2ICYjNDM7MzI3LDExIEBAIHN0YXRpYyB2b2lkIHBjcHVfcG9zdF9tYXBfZmx1c2goc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAogCWZsdXNoX2NhY2hlX3ZtYXAoCiAJCXBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9sb3dfdW5pdF9jcHUsIHBhZ2Vfc3RhcnQpLAogCQlwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfaGlnaF91bml0X2NwdSwgcGFnZV9lbmQpKTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0MzsJZmx1c2hfY2FjaGVfdm1hcCgodW5zaWduZWQgbG9uZyljaHVuay0mZ3Q7bG9jYWxfYmFzZSAmIzQzOyAocGFnZV9zdGFydCAmbHQ7Jmx0OyBQQUdFX1NISUZUKSwKJiM0MzsJCQkgKHVuc2lnbmVkIGxvbmcpY2h1bmstJmd0O2xvY2FsX2Jhc2UgJiM0MzsgKHBhZ2VfZW5kICZsdDsmbHQ7IFBBR0VfU0hJRlQpKTsKJiM0MzsjZW5kaWYKIH0KIAogLyoqCkBAIC0zNDksNiAmIzQzOzQyMywyNCBAQCBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY3JlYXRlX2NodW5rKGdmcF90IGdmcCkKIAljaHVuay0mZ3Q7ZGF0YSA9IHZtczsKIAljaHVuay0mZ3Q7YmFzZV9hZGRyID0gdm1zWzBdLSZndDthZGRyIC0gcGNwdV9ncm91cF9vZmZzZXRzWzBdOwogCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQCiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVsdGEgPSAodW5zaWduZWQgbG9uZyljaHVuay0mZ3Q7YmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaGludCA9IGRlbHRhICYjNDM7ICh1bnNpZ25lZCBsb25nKXBjcHVfbG9jYWxfYmFzZTsKJiM0MzsJc3RydWN0IHZtX3N0cnVjdCAqbG9jYWxfdm0gPSBwY3B1X2dldF9sb2NhbF92bV9hcmVhKGhpbnQsCiYjNDM7CQkJCQlwY3B1X3VuaXRfc2l6ZSwgcGNwdV9hdG9tX3NpemUpOwomIzQzOwlpZiAoIWxvY2FsX3ZtKSB7CiYjNDM7CQlwY3B1X2ZyZWVfdm1fYXJlYXModm1zLCBwY3B1X25yX2dyb3Vwcyk7CiYjNDM7CQlwY3B1X2ZyZWVfY2h1bmsoY2h1bmspOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2h1bmstJmd0O2xvY2FsX2Jhc2UgPSBsb2NhbF92bS0mZ3Q7YWRkcjsKJiM0MzsJY2h1bmstJmd0O2xvY2FsX2RhdGEgPSAodm9pZCAqKWxvY2FsX3ZtOwomIzQzOyNlbHNlCiYjNDM7CWNodW5rLSZndDtsb2NhbF9iYXNlID0gMDsKJiM0MzsJY2h1bmstJmd0O2xvY2FsX2RhdGEgPSBOVUxMOwomIzQzOyNlbmRpZgomIzQzOwogCXBjcHVfc3RhdHNfY2h1bmtfYWxsb2MoKTsKIAl0cmFjZV9wZXJjcHVfY3JlYXRlX2NodW5rKGNodW5rLSZndDtiYXNlX2FkZHIpOwogCkBAIC0zNjUsNiAmIzQzOzQ1Nyw4IEBAIHN0YXRpYyB2b2lkIHBjcHVfZGVzdHJveV9jaHVuayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspCiAKIAlpZiAoY2h1bmstJmd0O2RhdGEpCiAJCXBjcHVfZnJlZV92bV9hcmVhcyhjaHVuay0mZ3Q7ZGF0YSwgcGNwdV9ucl9ncm91cHMpOwomIzQzOwlpZiAoY2h1bmstJmd0O2xvY2FsX2RhdGEpCiYjNDM7CQlmcmVlX3ZtX2FyZWEoKHN0cnVjdCB2bV9zdHJ1Y3QgKiljaHVuay0mZ3Q7bG9jYWxfZGF0YSk7CiAJcGNwdV9mcmVlX2NodW5rKGNodW5rKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuYwppbmRleCBiMDY3NmI4MDU0ZWQwOS4uOGIyNzNlZDhlNWE4YmIgMTAwNjQ0Ci0tLSBhL21tL3BlcmNwdS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BlcmNwdS5jCkBAIC0xNDUsNiAmIzQzOzE0NSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGNwdV9oaWdoX3VuaXRfY3B1IF9fcm9fYWZ0ZXJfaW5pdDsKIAogLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGNodW5rIHdoaWNoIHN0YXJ0cyB3aXRoIHRoZSBrZXJuZWwgc3RhdGljIGFyZWEgKi8KIHZvaWQgKnBjcHVfYmFzZV9hZGRyIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsvKiBUaGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgY2h1bmsgbG9jYWwgbWFwcGluZyAqLwomIzQzO3ZvaWQgKnBjcHVfbG9jYWxfYmFzZSBfX3JvX2FmdGVyX2luaXQ7CiAKIHN0YXRpYyBjb25zdCBpbnQgKnBjcHVfdW5pdF9tYXAgX19yb19hZnRlcl9pbml0OwkJLyogY3B1IC0mZ3Q7IHVuaXQgKi8KIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnBjcHVfdW5pdF9vZmZzZXRzIF9fcm9fYWZ0ZXJfaW5pdDsJLyogY3B1IC0mZ3Q7IHVuaXQgb2Zmc2V0ICovCkBAIC0xMzM4LDYgJiM0MzsxMzQwLDcgQEAgc3RhdGljIHZvaWQgcGNwdV9pbml0X21kX2Jsb2NrcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspCiAvKioKICAqIHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsgLSBjcmVhdGVzIGNodW5rcyB0aGF0IHNlcnZlIHRoZSBmaXJzdCBjaHVuawogICogQHRtcF9hZGRyOiB0aGUgc3RhcnQgb2YgdGhlIHJlZ2lvbiBzZXJ2ZWQKJiM0MzsgKiBAbG9jYWxfdG1wOiB0aGUgc3RhcnQgb2YgdGhlIGxvY2FsIHBlcmNwdSByZWdpb24gc2VydmVkCiAgKiBAbWFwX3NpemU6IHNpemUgb2YgdGhlIHJlZ2lvbiBzZXJ2ZWQKICAqCiAgKiBUaGlzIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgY2h1bmtzIHRoYXQgc2VydmUgdGhlIGZpcnN0IGNodW5rLiAgVGhlCkBAIC0xMzQ5LDE1ICYjNDM7MTM1MiwxNiBAQCBzdGF0aWMgdm9pZCBwY3B1X2luaXRfbWRfYmxvY2tzKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaykKICAqIENodW5rIHNlcnZpbmcgdGhlIHJlZ2lvbiBhdCBAdG1wX2FkZHIgb2YgQG1hcF9zaXplLgogICovCiBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKiBfX2luaXQgcGNwdV9hbGxvY19maXJzdF9jaHVuayh1bnNpZ25lZCBsb25nIHRtcF9hZGRyLAotCQkJCQkJCSBpbnQgbWFwX3NpemUpCiYjNDM7CQkJCQkJCSB1bnNpZ25lZCBsb25nIGxvY2FsX3RtcCwgaW50IG1hcF9zaXplKQogewogCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKLQl1bnNpZ25lZCBsb25nIGFsaWduZWRfYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBhbGlnbmVkX2FkZHIsIGFsaWduZWRfbG9jYWw7CiAJaW50IHN0YXJ0X29mZnNldCwgb2Zmc2V0X2JpdHMsIHJlZ2lvbl9zaXplLCByZWdpb25fYml0czsKIAlzaXplX3QgYWxsb2Nfc2l6ZTsKIAogCS8qIHJlZ2lvbiBjYWxjdWxhdGlvbnMgKi8KIAlhbGlnbmVkX2FkZHIgPSB0bXBfYWRkciAmYW1wOyBQQUdFX01BU0s7CiYjNDM7CWFsaWduZWRfbG9jYWwgPSBsb2NhbF90bXAgJmFtcDsgUEFHRV9NQVNLOwogCiAJc3RhcnRfb2Zmc2V0ID0gdG1wX2FkZHIgLSBhbGlnbmVkX2FkZHI7CiAJcmVnaW9uX3NpemUgPSBBTElHTihzdGFydF9vZmZzZXQgJiM0MzsgbWFwX3NpemUsIFBBR0VfU0laRSk7CkBAIC0xMzcwLDYgJiM0MzsxMzc0LDcgQEAgc3RhdGljIHN0cnVjdCBwY3B1X2NodW5rICogX19pbml0IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodW5zaWduZWQgbG9uZyB0bXBfYWRkciwKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2NodW5rLSZndDtsaXN0KTsKIAogCWNodW5rLSZndDtiYXNlX2FkZHIgPSAodm9pZCAqKWFsaWduZWRfYWRkcjsKJiM0MzsJY2h1bmstJmd0O2xvY2FsX2Jhc2UgPSAodm9pZCAqKWFsaWduZWRfbG9jYWw7CiAJY2h1bmstJmd0O3N0YXJ0X29mZnNldCA9IHN0YXJ0X29mZnNldDsKIAljaHVuay0mZ3Q7ZW5kX29mZnNldCA9IHJlZ2lvbl9zaXplIC0gY2h1bmstJmd0O3N0YXJ0X29mZnNldCAtIG1hcF9zaXplOwogCkBAIC0yNTYyLDcgJiM0MzsyNTY3LDcgQEAgc3RhdGljIHZvaWQgcGNwdV9kdW1wX2FsbG9jX2luZm8oY29uc3QgY2hhciAqbHZsLAogICogYW5kIGF2YWlsYWJsZSBmb3IgZHluYW1pYyBhbGxvY2F0aW9uIGxpa2UgYW55IG90aGVyIGNodW5rLgogICovCiB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLAotCQkJCSAgIHZvaWQgKmJhc2VfYWRkcikKJiM0MzsJCQkJICAgdm9pZCAqYmFzZV9hZGRyLCB2b2lkICpsb2NhbF9iYXNlKQogewogCXNpemVfdCBzaXplX3N1bSA9IGFpLSZndDtzdGF0aWNfc2l6ZSAmIzQzOyBhaS0mZ3Q7cmVzZXJ2ZWRfc2l6ZSAmIzQzOyBhaS0mZ3Q7ZHluX3NpemU7CiAJc2l6ZV90IHN0YXRpY19zaXplLCBkeW5fc2l6ZTsKQEAgLTI1NzIsNyAmIzQzOzI1NzcsNyBAQCB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLAogCXVuc2lnbmVkIGludCBjcHU7CiAJaW50ICp1bml0X21hcDsKIAlpbnQgZ3JvdXAsIHVuaXQsIGk7Ci0JdW5zaWduZWQgbG9uZyB0bXBfYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyB0bXBfYWRkciwgbG9jYWxfdG1wID0gMDsKIAlzaXplX3QgYWxsb2Nfc2l6ZTsKIAogI2RlZmluZSBQQ1BVX1NFVFVQX0JVR19PTihjb25kKQlkbyB7CQkJCQlcCkBAIC0yNzEzLDExICYjNDM7MjcxOCwxNSBAQCB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLAogCSAqICAgY2h1bmsuCiAJICovCiAJdG1wX2FkZHIgPSAodW5zaWduZWQgbG9uZyliYXNlX2FkZHIgJiM0Mzsgc3RhdGljX3NpemU7CiYjNDM7CWlmIChsb2NhbF9iYXNlKQomIzQzOwkJbG9jYWxfdG1wID0gKHVuc2lnbmVkIGxvbmcpbG9jYWxfYmFzZSAmIzQzOyBzdGF0aWNfc2l6ZTsKIAlpZiAoYWktJmd0O3Jlc2VydmVkX3NpemUpCi0JCXBjcHVfcmVzZXJ2ZWRfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLAomIzQzOwkJcGNwdV9yZXNlcnZlZF9jaHVuayA9IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodG1wX2FkZHIsIGxvY2FsX3RtcCwKIAkJCQkJCWFpLSZndDtyZXNlcnZlZF9zaXplKTsKIAl0bXBfYWRkciA9ICh1bnNpZ25lZCBsb25nKWJhc2VfYWRkciAmIzQzOyBzdGF0aWNfc2l6ZSAmIzQzOyBhaS0mZ3Q7cmVzZXJ2ZWRfc2l6ZTsKLQlwY3B1X2ZpcnN0X2NodW5rID0gcGNwdV9hbGxvY19maXJzdF9jaHVuayh0bXBfYWRkciwgZHluX3NpemUpOwomIzQzOwlpZiAobG9jYWxfYmFzZSkKJiM0MzsJCWxvY2FsX3RtcCA9ICh1bnNpZ25lZCBsb25nKWxvY2FsX2Jhc2UgJiM0Mzsgc3RhdGljX3NpemUgJiM0MzsgYWktJmd0O3Jlc2VydmVkX3NpemU7CiYjNDM7CXBjcHVfZmlyc3RfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLCBsb2NhbF90bXAsIGR5bl9zaXplKTsKIAogCXBjcHVfbnJfZW1wdHlfcG9wX3BhZ2VzID0gcGNwdV9maXJzdF9jaHVuay0mZ3Q7bnJfZW1wdHlfcG9wX3BhZ2VzOwogCXBjcHVfY2h1bmtfcmVsb2NhdGUocGNwdV9maXJzdF9jaHVuaywgLTEpOwpAQCAtMzEwOCw3ICYjNDM7MzExNyw3IEBAIGludCBfX2luaXQgcGNwdV9lbWJlZF9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgc2l6ZV90IGR5bl9zaXplLAogCQlQRk5fRE9XTihzaXplX3N1bSksIGFpLSZndDtzdGF0aWNfc2l6ZSwgYWktJmd0O3Jlc2VydmVkX3NpemUsCiAJCWFpLSZndDtkeW5fc2l6ZSwgYWktJmd0O3VuaXRfc2l6ZSk7CiAKLQlwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBiYXNlKTsKJiM0MzsJcGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgYmFzZSwgTlVMTCk7CiAJZ290byBvdXRfZnJlZTsKIAogb3V0X2ZyZWVfYXJlYXM6CkBAIC0zMTYzLDcgJiM0MzszMTcyLDcgQEAgdm9pZCBfX2luaXQgX193ZWFrIHBjcHVfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcikKIAlwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcik7CiAJaWYgKHB1ZF9ub25lKCpwdWQpKSB7CiAJCXBtZCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBNRF9UQUJMRV9TSVpFLCBQTURfVEFCTEVfU0laRSk7Ci0JCXB1ZF9wb3B1bGF0ZSgmYW1wO2luaXRfbW0sIHB1ZCwgcG1kKTsKJiM0MzsJCXB1ZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHB1ZCwgcG1kKTsKIAl9CiAKIAlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CkBAIC0zMTcxLDcgJiM0MzszMTgwLDcgQEAgdm9pZCBfX2luaXQgX193ZWFrIHBjcHVfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcikKIAkJcHRlX3QgKm5ldzsKIAogCQluZXcgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVEVfVEFCTEVfU0laRSwgUFRFX1RBQkxFX1NJWkUpOwotCQlwbWRfcG9wdWxhdGVfa2VybmVsKCZhbXA7aW5pdF9tbSwgcG1kLCBuZXcpOwomIzQzOwkJcG1kX3BvcHVsYXRlX3N5bmMoYWRkciwgcG1kLCBuZXcpOwogCX0KIAogCXJldHVybjsKQEAgLTMxOTQsNiAmIzQzOzMyMDMsNyBAQCB2b2lkIF9faW5pdCBfX3dlYWsgcGNwdV9wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9uZyBhZGRyKQogaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdCBjcHVfdG9fbmRfZm4pCiB7CiAJc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3Qgdm07CiYjNDM7CXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0IHBjcHVfdm07CiAJc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWk7CiAJY2hhciBwc2l6ZV9zdHJbMTZdOwogCWludCB1bml0X3BhZ2VzOwpAQCAtMzI0MywxMSAmIzQzOzMyNTMsMjggQEAgaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdAogCX0KIAogCS8qIGFsbG9jYXRlIHZtIGFyZWEsIG1hcCB0aGUgcGFnZXMgYW5kIGNvcHkgc3RhdGljIGRhdGEgKi8KJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0MzsJdm0uZmxhZ3MgPSBWTV9BTExPQzsKJiM0MzsJdm0uYWRkciA9ICh2b2lkICopQUxJR04oUEVSQ1BVX1NUQVJULCBQQUdFX1NJWkUpOwomIzQzOwl2bS5zaXplID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIGFpLSZndDt1bml0X3NpemU7CiYjNDM7CXZtX2FyZWFfYWRkX2Vhcmx5KCZhbXA7dm0pOwomIzQzOwlrYXNhbl9wb3B1bGF0ZV9lYXJseV92bV9hcmVhX3NoYWRvdyh2bS5hZGRyLCB2bS5zaXplKTsKJiM0MzsKJiM0MzsJcGNwdV92bS5mbGFncyA9IFZNX0FMTE9DOwomIzQzOwlwY3B1X3ZtLmFkZHIgPSAodm9pZCAqKUFMSUdOKExPQ0FMX1BFUkNQVV9TVEFSVCwgUEFHRV9TSVpFKTsKJiM0MzsJcGNwdV92bS5zaXplID0gYWktJmd0O3VuaXRfc2l6ZTsKJiM0MzsJdm1fYXJlYV9hZGRfZWFybHkoJmFtcDtwY3B1X3ZtKTsKJiM0MzsJa2FzYW5fcG9wdWxhdGVfZWFybHlfdm1fYXJlYV9zaGFkb3cocGNwdV92bS5hZGRyLCBwY3B1X3ZtLnNpemUpOwomIzQzOyNlbHNlCiAJdm0uZmxhZ3MgPSBWTV9BTExPQzsKIAl2bS5zaXplID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIGFpLSZndDt1bml0X3NpemU7CiAJdm1fYXJlYV9yZWdpc3Rlcl9lYXJseSgmYW1wO3ZtLCBQQUdFX1NJWkUpOwogCiYjNDM7CXBjcHVfdm0uYWRkciA9IE5VTEw7CiYjNDM7I2VuZGlmCiYjNDM7CiAJZm9yICh1bml0ID0gMDsgdW5pdCAmbHQ7IG51bV9wb3NzaWJsZV9jcHVzKCk7IHVuaXQmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgY3B1ID0gYWktJmd0O2dyb3Vwc1swXS5jcHVfbWFwW3VuaXRdOwogCQl1bnNpZ25lZCBsb25nIHVuaXRfYWRkciA9CiAJCQkodW5zaWduZWQgbG9uZyl2bS5hZGRyICYjNDM7IHVuaXQgKiBhaS0mZ3Q7dW5pdF9zaXplOwogCkBAIC0zMjY0LDYgJiM0MzszMjkxLDE0IEBAIGludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3QKIAogCQkvKiBjb3B5IHN0YXRpYyBkYXRhICovCiAJCW1lbWNweSgodm9pZCAqKXVuaXRfYWRkciwgX19wZXJfY3B1X3N0YXJ0LCBhaS0mZ3Q7c3RhdGljX3NpemUpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIE1hcCBwZXJjcHUgZGF0YSB0byBQRVJDUFUgbWFwLgomIzQzOwkJICoKJiM0MzsJCSAqIFBDUFVfRkNfRU1CRUQgY2FuJiMzOTt0IHN1cHBvcnQgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCW1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsoY3B1LCAodW5zaWduZWQgbG9uZylwY3B1X3ZtLmFkZHIsCiYjNDM7CQkJCSZhbXA7cGFnZXNbdW5pdCAqIHVuaXRfcGFnZXNdLCB1bml0X3BhZ2VzKTsKIAl9CiAKIAkvKiB3ZSYjMzk7cmUgcmVhZHksIGNvbW1pdCAqLwpAQCAtMzI3MSw3ICYjNDM7MzMwNiw4IEBAIGludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3QKIAkJdW5pdF9wYWdlcywgcHNpemVfc3RyLCBhaS0mZ3Q7c3RhdGljX3NpemUsCiAJCWFpLSZndDtyZXNlcnZlZF9zaXplLCBhaS0mZ3Q7ZHluX3NpemUpOwogCi0JcGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgdm0uYWRkcik7CiYjNDM7CXBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIHZtLmFkZHIsIHBjcHVfdm0uYWRkcik7CiYjNDM7CXBjcHVfbG9jYWxfYmFzZSA9IHBjcHVfdm0uYWRkcjsKIAlnb3RvIG91dF9mcmVlX2FyOwogCiBlbm9tZW06CkBAIC0zMzUzLDcgJiM0MzszMzg5LDcgQEAgdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKQogCWFpLSZndDtncm91cHNbMF0ubnJfdW5pdHMgPSAxOwogCWFpLSZndDtncm91cHNbMF0uY3B1X21hcFswXSA9IDA7CiAKLQlwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBmYyk7CiYjNDM7CXBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIGZjLCBOVUxMKTsKIAlwY3B1X2ZyZWVfYWxsb2NfaW5mbyhhaSk7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS12bWVtbWFwLmMgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCmluZGV4IDk5ZTJiZTM5NjcxYjYzLi40NjNjMmY4YjYxMWMwMyAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCkBAIC0xOTgsNyAmIzQzOzE5OCw3IEBAIHN0YXRpYyBwbWRfdCAqIF9fbWVtaW5pdCB2bWVtbWFwX3BtZF9wb3B1bGF0ZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGluCiAJCWlmICghcCkKIAkJCXJldHVybiBOVUxMOwogCQlrZXJuZWxfcHRlX2luaXQocCk7Ci0JCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmFtcDtpbml0X21tLCBwbWQsIHApOwomIzQzOwkJcG1kX3BvcHVsYXRlX3N5bmMoYWRkciwgcG1kLCBwKTsKIAl9CiAJcmV0dXJuIHBtZDsKIH0KQEAgLTIxMSw3ICYjNDM7MjExLDcgQEAgc3RhdGljIHB1ZF90ICogX19tZW1pbml0IHZtZW1tYXBfcHVkX3BvcHVsYXRlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW4KIAkJaWYgKCFwKQogCQkJcmV0dXJuIE5VTEw7CiAJCXBtZF9pbml0KHApOwotCQlwdWRfcG9wdWxhdGUoJmFtcDtpbml0X21tLCBwdWQsIHApOwomIzQzOwkJcHVkX3BvcHVsYXRlX3N5bmMoYWRkciwgcHVkLCBwKTsKIAl9CiAJcmV0dXJuIHB1ZDsKIH0KZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAxYWZjYTM1NjhiOWI2NS4uM2Q5NGNhNGJiZDE3YjEgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTgwLDYgJiM0Mzs4MCw5IEBAIGJvb2wgaXNfdm1hbGxvY19hZGRyKGNvbnN0IHZvaWQgKngpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKHgpOwogCiYjNDM7CWlmIChpc19wZXJjcHVfYWRkcihhZGRyKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwogCXJldHVybiBhZGRyICZndDs9IFZNQUxMT0NfU1RBUlQgJmFtcDsmYW1wOyBhZGRyICZsdDsgVk1BTExPQ19FTkQ7CiB9CiBFWFBPUlRfU1lNQk9MKGlzX3ZtYWxsb2NfYWRkcik7CkBAIC0yOTUsOSAmIzQzOzI5OCw5IEBAIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHZtYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJcGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LAotCQkJdW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0KQomIzQzO2ludCB2bWFwX3JhbmdlX25vZmx1c2gocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAomIzQzOwkJICAgICAgIHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCwKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpCiB7CiAJcGdkX3QgKnBnZDsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwpAQCAtMzE0LDcgJiM0MzszMTcsNyBAQCBzdGF0aWMgaW50IHZtYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCUJVR19PTihhZGRyICZndDs9IGVuZCk7CiAKIAlzdGFydCA9IGFkZHI7Ci0JcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOwomIzQzOwlwZ2QgPSBwZ2Rfb2Zmc2V0X3BnZChwZ2RpciwgYWRkcik7CiAJZG8gewogCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CiAJCWVyciA9IHZtYXBfcDRkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90LApAQCAtMzM0LDggJiM0MzszMzcsOCBAQCBpbnQgdm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiB7CiAJaW50IGVycjsKIAotCWVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHBoeXNfYWRkciwgcGdwcm90X254KHByb3QpLAotCQkJCSBpb3JlbWFwX21heF9wYWdlX3NoaWZ0KTsKJiM0MzsJZXJyID0gdm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCBhZGRyLCBlbmQsIHBoeXNfYWRkciwKJiM0MzsJCQkJIHBncHJvdF9ueChwcm90KSwgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdCk7CiAJZmx1c2hfY2FjaGVfdm1hcChhZGRyLCBlbmQpOwogCWlmICghZXJyKQogCQllcnIgPSBrbXNhbl9pb3JlbWFwX3BhZ2VfcmFuZ2UoYWRkciwgZW5kLCBwaHlzX2FkZHIsIHByb3QsCkBAIC00NzgsNyAmIzQzOzQ4MSw3IEBAIHN0YXRpYyB2b2lkIHZ1bm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKICAqCiAgKiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uIG9ubHkuIERvIG5vdCB1c2Ugb3V0c2lkZSBtbS8uCiAgKi8KLXZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKJiM0Mzt2b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2gocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CiAJcGdkX3QgKnBnZDsKQEAgLTQ4Niw3ICYjNDM7NDg5LDcgQEAgdm9pZCBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogCXBndGJsX21vZF9tYXNrIG1hc2sgPSAwOwogCiAJQlVHX09OKGFkZHIgJmd0Oz0gZW5kKTsKLQlwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7CiYjNDM7CXBnZCA9IHBnZF9vZmZzZXRfcGdkKHBnZGlyLCBhZGRyKTsKIAlkbyB7CiAJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKIAkJaWYgKHBnZF9iYWQoKnBnZCkpCkBAIC01MDMsNyAmIzQzOzUwNiw3IEBAIHZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHZvaWQgdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJa21zYW5fdnVubWFwX3JhbmdlX25vZmx1c2goc3RhcnQsIGVuZCk7Ci0JX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChzdGFydCwgZW5kKTsKJiM0MzsJX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgc3RhcnQsIGVuZCk7CiB9CiAKIC8qKgpAQCAtNjcwLDkgJiM0Mzs2NzMsMTAgQEAgaW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yOyBpICYjNDM7PSAxVSAmbHQ7Jmx0OyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpKSB7CiAJCWludCBlcnI7CiAKLQkJZXJyID0gdm1hcF9yYW5nZV9ub2ZsdXNoKGFkZHIsIGFkZHIgJiM0MzsgKDFVTCAmbHQ7Jmx0OyBwYWdlX3NoaWZ0KSwKLQkJCQkJcGFnZV90b19waHlzKHBhZ2VzW2ldKSwgcHJvdCwKLQkJCQkJcGFnZV9zaGlmdCk7CiYjNDM7CQllcnIgPSB2bWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIGFkZHIsCiYjNDM7CQkJCQkgYWRkciAmIzQzOyAoMVVMICZsdDsmbHQ7IHBhZ2Vfc2hpZnQpLAomIzQzOwkJCQkJIHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIHByb3QsCiYjNDM7CQkJCQkgcGFnZV9zaGlmdCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCkBAIC00OTE5LDE1ICYjNDM7NDkyMywyNSBAQCBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKQogICogICBpbiAtIHRoZSBWQSB3ZSBzdGFydCB0aGUgc2VhcmNoKHJldmVyc2Ugb3JkZXIpOwogICogICBvdXQgLSB0aGUgVkEgd2l0aCB0aGUgaGlnaGVzdCBhbGlnbmVkIGVuZCBhZGRyZXNzLgogICogQGFsaWduOiBhbGlnbm1lbnQgZm9yIHJlcXVpcmVkIGhpZ2hlc3QgYWRkcmVzcwomIzQzOyAqIEBwY3B1OiB3aGV0aGVyIHJlcXVlc3QgYWxsb2NhdGlvbiBmcm9tIGxvY2FsIHBlcmNwdSBhcmVhCiAgKgogICogUmV0dXJuczogZGV0ZXJtaW5lZCBlbmQgYWRkcmVzcyB3aXRoaW4gdm1hcF9hcmVhCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nCi1wdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2Uoc3RydWN0IHZtYXBfYXJlYSAqKnZhLCB1bnNpZ25lZCBsb25nIGFsaWduKQomIzQzO3B2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShzdHJ1Y3Qgdm1hcF9hcmVhICoqdmEsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIGJvb2wgcGNwdSkKIHsKLQl1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kID0gVk1BTExPQ19FTkQgJmFtcDsgfihhbGlnbiAtIDEpOwomIzQzOwl1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUAomIzQzOwlpZiAocGNwdSkKJiM0MzsJCXZtYWxsb2NfZW5kID0gTE9DQUxfUEVSQ1BVX0VORCAmYW1wOyB+KGFsaWduIC0gMSk7CiYjNDM7CWVsc2UKJiM0MzsJCXZtYWxsb2NfZW5kID0gUEVSQ1BVX0VORCAmYW1wOyB+KGFsaWduIC0gMSk7CiYjNDM7I2Vsc2UKJiM0MzsJdm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCAmYW1wOyB+KGFsaWduIC0gMSk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJaWYgKGxpa2VseSgqdmEpKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yZXZlcnNlKCgqdmEpLAogCQkJCSZhbXA7ZnJlZV92bWFwX2FyZWFfbGlzdCwgbGlzdCkgewpAQCAtNDk2OCwxNCAmIzQzOzQ5ODIsMjIgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsCiAJCQkJICAgICBjb25zdCBzaXplX3QgKnNpemVzLCBpbnQgbnJfdm1zLAogCQkJCSAgICAgc2l6ZV90IGFsaWduKQogewotCWNvbnN0IHVuc2lnbmVkIGxvbmcgdm1hbGxvY19zdGFydCA9IEFMSUdOKFZNQUxMT0NfU1RBUlQsIGFsaWduKTsKLQljb25zdCB1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kID0gVk1BTExPQ19FTkQgJmFtcDsgfihhbGlnbiAtIDEpOwomIzQzOwl1bnNpZ25lZCBsb25nIHZtYWxsb2Nfc3RhcnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQ7CiAJc3RydWN0IHZtYXBfYXJlYSAqKnZhcywgKnZhOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKip2bXM7CiAJaW50IGFyZWEsIGFyZWEyLCBsYXN0X2FyZWEsIHRlcm1fYXJlYTsKIAl1bnNpZ25lZCBsb25nIGJhc2UsIHN0YXJ0LCBzaXplLCBlbmQsIGxhc3RfZW5kLCBvcmlnX3N0YXJ0LCBvcmlnX2VuZDsKIAlib29sIHB1cmdlZCA9IGZhbHNlOwogCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQCiYjNDM7CXZtYWxsb2Nfc3RhcnQgPSBBTElHTihQRVJDUFVfU1RBUlQsIGFsaWduKTsKJiM0MzsJdm1hbGxvY19lbmQgPSBQRVJDUFVfRU5EICZhbXA7IH4oYWxpZ24gLSAxKTsKJiM0MzsjZWxzZQomIzQzOwl2bWFsbG9jX3N0YXJ0ID0gQUxJR04oVk1BTExPQ19TVEFSVCwgYWxpZ24pOwomIzQzOwl2bWFsbG9jX2VuZCA9IFZNQUxMT0NfRU5EICZhbXA7IH4oYWxpZ24gLSAxKTsKJiM0MzsjZW5kaWYKJiM0MzsKIAkvKiB2ZXJpZnkgcGFyYW1ldGVycyBhbmQgYWxsb2NhdGUgZGF0YSBzdHJ1Y3R1cmVzICovCiAJQlVHX09OKG9mZnNldF9pbl9wYWdlKGFsaWduKSB8fCAhaXNfcG93ZXJfb2ZfMihhbGlnbikpOwogCWZvciAobGFzdF9hcmVhID0gMCwgYXJlYSA9IDA7IGFyZWEgJmx0OyBucl92bXM7IGFyZWEmIzQzOyYjNDM7KSB7CkBAIC01MDI0LDcgJiM0Mzs1MDQ2LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsCiAJZW5kID0gc3RhcnQgJiM0Mzsgc2l6ZXNbYXJlYV07CiAKIAl2YSA9IHB2bV9maW5kX3ZhX2VuY2xvc2VfYWRkcih2bWFsbG9jX2VuZCk7Ci0JYmFzZSA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZSgmYW1wO3ZhLCBhbGlnbikgLSBlbmQ7CiYjNDM7CWJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoJmFtcDt2YSwgYWxpZ24sIGZhbHNlKSAtIGVuZDsKIAogCXdoaWxlICh0cnVlKSB7CiAJCS8qCkBAIC01MDQ1LDcgJiM0Mzs1MDY3LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsCiAJCSAqIGJhc2UgZG93bndhcmRzIGFuZCB0aGVuIHJlY2hlY2suCiAJCSAqLwogCQlpZiAoYmFzZSAmIzQzOyBlbmQgJmd0OyB2YS0mZ3Q7dmFfZW5kKSB7Ci0JCQliYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKCZhbXA7dmEsIGFsaWduKSAtIGVuZDsKJiM0MzsJCQliYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKCZhbXA7dmEsIGFsaWduLCBmYWxzZSkgLSBlbmQ7CiAJCQl0ZXJtX2FyZWEgPSBhcmVhOwogCQkJY29udGludWU7CiAJCX0KQEAgLTUwNTUsNyAmIzQzOzUwNzcsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cywKIAkJICovCiAJCWlmIChiYXNlICYjNDM7IHN0YXJ0ICZsdDsgdmEtJmd0O3ZhX3N0YXJ0KSB7CiAJCQl2YSA9IG5vZGVfdG9fdmEocmJfcHJldigmYW1wO3ZhLSZndDtyYl9ub2RlKSk7Ci0JCQliYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKCZhbXA7dmEsIGFsaWduKSAtIGVuZDsKJiM0MzsJCQliYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKCZhbXA7dmEsIGFsaWduLCBmYWxzZSkgLSBlbmQ7CiAJCQl0ZXJtX2FyZWEgPSBhcmVhOwogCQkJY29udGludWU7CiAJCX0KQEAgLTUyMTgsNiAmIzQzOzUyNDAsODQgQEAgdm9pZCBwY3B1X2ZyZWVfdm1fYXJlYXMoc3RydWN0IHZtX3N0cnVjdCAqKnZtcywgaW50IG5yX3ZtcykKIAkJZnJlZV92bV9hcmVhKHZtc1tpXSk7CiAJa2ZyZWUodm1zKTsKIH0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0MzsvKiBGaW5kIGZyZWUgdm0gYXJlYSBzdGFydHMgZnJvbSBoaW50ICovCiYjNDM7c3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsCiYjNDM7CQkJCSAgICAgaW50IHVuaXRfc2l6ZSwgc2l6ZV90IGFsaWduKQomIzQzO3sKJiM0MzsJc3RydWN0IHZtYXBfYXJlYSAqdG1wX3ZhLCAqdmE7CiYjNDM7CXN0cnVjdCB2bV9zdHJ1Y3QgKnZtOwomIzQzOwlzdHJ1Y3Qgdm1hcF9ub2RlICp2bjsKJiM0MzsJdW5zaWduZWQgbG9uZyBlbmQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXZhID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiYjNDM7CXZtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZtX3N0cnVjdCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXZhIHx8ICF2bSkKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2ZyZWVfdm1hcF9hcmVhX2xvY2spOwomIzQzOwomIzQzOwl0bXBfdmEgPSBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIoaGludCk7CiYjNDM7CWlmICghdG1wX3ZhKSB7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2ZyZWVfdm1hcF9hcmVhX2xvY2spOwomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsJfQomIzQzOwomIzQzOwllbmQgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoJmFtcDt0bXBfdmEsIGFsaWduLCB0cnVlKTsKJiM0MzsKJiM0MzsJaWYgKGhpbnQgJiM0MzsgdW5pdF9zaXplICZndDsgZW5kKSB7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2ZyZWVfdm1hcF9hcmVhX2xvY2spOwomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB2YV9jbGlwKCZhbXA7ZnJlZV92bWFwX2FyZWFfcm9vdCwKJiM0MzsJCQkmYW1wO2ZyZWVfdm1hcF9hcmVhX2xpc3QsIHRtcF92YSwgaGludCwgdW5pdF9zaXplKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtmcmVlX3ZtYXBfYXJlYV9sb2NrKTsKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdmEtJmd0O3ZhX3N0YXJ0ID0gaGludDsKJiM0MzsJdmEtJmd0O3ZhX2VuZCA9IGhpbnQgJiM0MzsgdW5pdF9zaXplOwomIzQzOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2ZyZWVfdm1hcF9hcmVhX2xvY2spOwomIzQzOwomIzQzOwlpZiAoa2FzYW5fcG9wdWxhdGVfdm1hbGxvYyh2YS0mZ3Q7dmFfc3RhcnQsIHVuaXRfc2l6ZSwgR0ZQX0tFUk5FTCkpCiYjNDM7CQlnb3RvIGVycl9mcmVlX3NoYWRvdzsKJiM0MzsKJiM0MzsJdm4gPSBhZGRyX3RvX25vZGUodmEtJmd0O3ZhX3N0YXJ0KTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7dm4tJmd0O2J1c3kubG9jayk7CiYjNDM7CWluc2VydF92bWFwX2FyZWEodmEsICZhbXA7dm4tJmd0O2J1c3kucm9vdCwgJmFtcDt2bi0mZ3Q7YnVzeS5oZWFkKTsKJiM0MzsJc2V0dXBfdm1hbGxvY192bSh2bSwgdmEsIFZNX0FMTE9DLAomIzQzOwkJCSBwY3B1X2dldF9sb2NhbF92bV9hcmVhKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2bi0mZ3Q7YnVzeS5sb2NrKTsKJiM0MzsKJiM0MzsJa2FzYW5fdW5wb2lzb25fdm1hcF9hcmVhcygmYW1wO3ZtLCAxLCBLQVNBTl9WTUFMTE9DX1BST1RfTk9STUFMKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHZtOwomIzQzOwomIzQzO2Vycl9mcmVlOgomIzQzOwlrbWVtX2NhY2hlX2ZyZWUodm1hcF9hcmVhX2NhY2hlcCwgdmEpOwomIzQzOwlrZnJlZSh2bSk7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzOwomIzQzO2Vycl9mcmVlX3NoYWRvdzoKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7ZnJlZV92bWFwX2FyZWFfbG9jayk7CiYjNDM7CXZhID0gbWVyZ2Vfb3JfYWRkX3ZtYXBfYXJlYV9hdWdtZW50KHZhLCAmYW1wO2ZyZWVfdm1hcF9hcmVhX3Jvb3QsCiYjNDM7CQkJJmFtcDtmcmVlX3ZtYXBfYXJlYV9saXN0KTsKJiM0MzsJaWYgKHZhKQomIzQzOwkJa2FzYW5fcmVsZWFzZV92bWFsbG9jKHZhLSZndDt2YV9zdGFydCwgdmEtJmd0O3ZhX2VuZCwgdmEtJmd0O3ZhX3N0YXJ0LCB2YS0mZ3Q7dmFfZW5kLAomIzQzOwkJCSAgICAgICBLQVNBTl9WTUFMTE9DX1BBR0VfUkFOR0UgfCBLQVNBTl9WTUFMTE9DX1RMQl9GTFVTSCk7CiYjNDM7CWtmcmVlKHZtKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtmcmVlX3ZtYXBfYXJlYV9sb2NrKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7fQomIzQzOyNlbmRpZgogI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KIAogI2lmZGVmIENPTkZJR19QUklOVEsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxODIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IExvY2FsIFBlci1DUFUgTWFwcGluZyBmb3IgQVJNNjQqKgoKT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZTogYEhBVkVfTE9DQUxfUEVSX0NQVV9NQVBgLiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIGNvbXBvbmVudHMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAocGVyY3B1LCBwYWdlIHRhYmxlcykgb24gQVJNNjQsIGFuZCB0aGlzICpkZWZpbml0ZWx5KiB0cmlnZ2VycyBteSBmdXp6aW5nIGluc3RpbmN0cy4gQW55dGhpbmcgdGhhdCBtZXNzZXMgd2l0aCBtZW1vcnkgbWFwcGluZyBpcyBhIHBvdGVudGlhbCBnb2xkbWluZSBmb3IgZmluZGluZyBzdWJ0bGUgYnVncy4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRoZSBmaWxlcyBiZWluZyB0b3VjaGVkOiBgYXJjaC9hcm02NC8uLi5gLCBgaW5jbHVkZS8uLi5gLCBhbmQgYG1tLy4uLmAsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgcGVyY3B1YCwgYG1tYCBhbmQgcGFnZSB0YWJsZSByZWxhdGVkIGZpbGVzLgoKVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhZGRpbmcgbG9jYWwgcGVyLWNwdSBtYXBwaW5nIHN1cHBvcnQgZm9yIEFSTTY0LiBUaGF0IHNjcmVhbXMgJiMzNDtmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IHRvIG1lLCBhbmQgaXQgbW9kaWZpZXMgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFdlIGhhdmUgdG8gZnV6eiB0aGlzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZS4gSSYjMzk7bSBzZWVpbmc6IGBzZXR1cF9wZXJjcHVfcGdkYCwgYG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtgLCBgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc2AsIGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCwgYHBjcHVfYWxsb2NfZmlyc3RfY2h1bmtgLCBgcGNwdV9zZXR1cF9maXJzdF9jaHVua2AsIGBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgLCBgdm1hcF9yYW5nZV9ub2ZsdXNoYCwgYW5kIGBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSB3YW50IHRvIHRhcmdldCB3aXRoIGZ1enppbmcuCgpJJiMzOTtsbCBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgbm93LiBgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUGAgaXMgYSBgZGVmX2Jvb2wgeWAgZGVwZW5kaW5nIG9uIEFSTTY0IHBhZ2Ugc2l6ZXMgd2hpY2ggbWVhbnMgaXQgZG9lcyBub3QgbmVlZCB0byBiZSBleHBsaWNpdGx5IGVuYWJsZWQuIFRoYXQgc2FpZCwgaXQgd291bGQgYmUgdXNlZnVsIHRvIGxpc3QgdGhpcyBjb25maWcgaW4gb3VyIGZ1enppbmcgbGlzdC4gSSBzZWUgdGhhdCBgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktgIGlzIHNlbGVjdGVkIGJ5IEFSTTY0IG5vdy4gQWxzbywgYEFSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DYCBhbmQgYEFSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DYCBhcmUgc2VsZWN0ZWQgYnkgQVJNNjQuIEdvb2QgdG8ga25vdy4KClRoZXJlZm9yZSwgbXkgaW5pdGlhbCBsaXN0IG9mIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZyBhcmU6IGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCwgYHBjcHVfYWxsb2NfZmlyc3RfY2h1bmtgLCBgcGNwdV9zZXR1cF9maXJzdF9jaHVua2AsIGBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgLCBgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVua2AsIGBzZXR1cF9wZXJjcHVfcGdkYCBhbmQgYGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NgLiBOb3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgZXhpc3QgYW5kIGFyZSBwYXJ0IG9mIHRoZSB0YXJnZXQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8c3RydWN0IHZtX3N0cnVjdCBcXCopIC4qcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2ODcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipSZWZpbmluZyBNeSBBcHByb2FjaCoqCgpSaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSB0YWtpbmcgYW5vdGhlciBsb29rIGF0IHRoaXMuIFRoZSBjdXJyZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBpc24mIzM5O3QgcXVpdGUgYXMgcm9idXN0IGFzIGl0IG5lZWRzIHRvIGJlLiBJIGNhbiBzZWUgYSBwb3RlbnRpYWwgZWRnZSBjYXNlIG9yIHR3byB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIG1pc3MsIGFuZCB0aGF0JiMzOTtzIG5vdCBhY2NlcHRhYmxlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzY2FsZSBJJiMzOTttIHdvcmtpbmcgYXQuIEkgbmVlZCB0byB0aWdodGVuIHRoaW5ncyB1cC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgYmFjayBpbiBhbmQgcmVmaW5lIHRoZSBwYXR0ZXJuLiBJdCYjMzk7cyBhYm91dCBiZWluZyBwcmVjaXNlOyBsZWF2aW5nIG5vIHJvb20gZm9yIGFtYmlndWl0eS4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBnZXR0aW5nICphKiBtYXRjaDsgaXQmIzM5O3MgYWJvdXQgZ2V0dGluZyAqdGhlIHJpZ2h0KiBtYXRjaCBldmVyeSBzaW5nbGUgdGltZS4gVGltZSBmb3IgYSBtb3JlIGVsZWdhbnQgYW5kIGNvbXByZWhlbnNpdmUgc29sdXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgbG9va2Fyb3VuZHMsIHBlcmhhcHMgZXZlbiBhIHJlY3Vyc2l2ZSBwYXR0ZXJuLCBkZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHNvdXJjZSBkYXRhLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNwdV9nZXRfbG9jYWxfdm1fYXJlYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0zMTU9dm9pZCBwY3B1X2ZyZWVfdm1fYXJlYXMoc3RydWN0IHZtX3N0cnVjdCAqKnZtcywgaW50IG5yX3Ztcyk7XG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDozMTY6c3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0zMTctXHRcdFx0XHQgICAgIGludCB1bml0X3NpemUsIHNpemVfdCBhbGlnbik7XG4tLVxubW0vcGVyY3B1LXZtLmM9NDA3PXN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqcGNwdV9jcmVhdGVfY2h1bmsoZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3BlcmNwdS12bS5jLTQyOC1cdHVuc2lnbmVkIGxvbmcgaGludCA9IGRlbHRhICYjNDM7ICh1bnNpZ25lZCBsb25nKXBjcHVfbG9jYWxfYmFzZTtcbm1tL3BlcmNwdS12bS5jOjQyOTpcdHN0cnVjdCB2bV9zdHJ1Y3QgKmxvY2FsX3ZtID0gcGNwdV9nZXRfbG9jYWxfdm1fYXJlYShoaW50LFxubW0vcGVyY3B1LXZtLmMtNDMwLVx0XHRcdFx0XHRwY3B1X3VuaXRfc2l6ZSwgcGNwdV9hdG9tX3NpemUpO1xuLS1cbm1tL3ZtYWxsb2MuYz01MjM1PXZvaWQgcGNwdV9mcmVlX3ZtX2FyZWFzKHN0cnVjdCB2bV9zdHJ1Y3QgKip2bXMsIGludCBucl92bXMpXG4tLVxubW0vdm1hbGxvYy5jLTUyNDUtLyogRmluZCBmcmVlIHZtIGFyZWEgc3RhcnRzIGZyb20gaGludCAqL1xubW0vdm1hbGxvYy5jOjUyNDY6c3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsXG5tbS92bWFsbG9jLmMtNTI0Ny1cdFx0XHRcdCAgICAgaW50IHVuaXRfc2l6ZSwgc2l6ZV90IGFsaWduKVxuLS1cbm1tL3ZtYWxsb2MuYy01Mjk0LVx0c2V0dXBfdm1hbGxvY192bSh2bSwgdmEsIFZNX0FMTE9DLFxubW0vdm1hbGxvYy5jOjUyOTU6XHRcdFx0IHBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEpO1xubW0vdm1hbGxvYy5jLTUyOTYtXHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VidXN5LmxvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzU3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFBlci1DUFUgVmlydHVhbCBNZW1vcnkgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCBpcyBkZWZpbml0ZWx5IHByZXNlbnQgYW5kIGFjY291bnRlZCBmb3IuIFRoYXQmIzM5O3MgZ29vZC4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHN5c3RlbSBpcyBhY3R1YWxseSBtYW5hZ2luZyBhbmQgbWFwcGluZyB0aGVzZSBsb2NhbCBwZXItQ1BVIHZpcnR1YWwgbWVtb3J5IGFyZWFzLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gZmlndXJlIG91dCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGFsbG9jYXRpb24gc3RyYXRlZ3kuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgZnVuY3Rpb24gd29ya3MgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUga2VybmVsJiMzOTtzIGRvaW5nIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaD03NT1leHRlcm4gdm9pZCBsaW5lYXJfbWFwX21heWJlX3NwbGl0X3RvX3B0ZXModm9pZCk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oLTc2LSNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaDo3NzpleHRlcm4gdm9pZCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgtNzgtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpO1xuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmM9MTA3NT12b2lkIF9faW5pdCBsaW5lYXJfbWFwX21heWJlX3NwbGl0X3RvX3B0ZXModm9pZClcbi0tXG5hcmNoL2FybTY0L21tL21tdS5jLTEwODMtI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG5hcmNoL2FybTY0L21tL21tdS5jOjEwODQ6dm9pZCBfX2luaXQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsXG5hcmNoL2FybTY0L21tL21tdS5jLTEwODUtXHRcdFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD0xNTY9c3RhdGljIGlubGluZSBzaXplX3QgcGNwdV9vYmpfZnVsbF9zaXplKHNpemVfdCBzaXplKVxuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTE2OC0jaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjE2OTpleHRlcm4gdm9pZCBfX2luaXQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNzAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucik7XG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNzEtI2Vsc2Vcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjE3MjpzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxubW0vcGVyY3B1LWludGVybmFsLmgtMTczLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxubW0vcGVyY3B1LmM9MzIwMz1pbnQgX19pbml0IHBjcHVfcGFnZV9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgcGNwdV9mY19jcHVfdG9fbm9kZV9mbl90IGNwdV90b19uZF9mbilcbi0tXG5tbS9wZXJjcHUuYy0zMjk5LVx0XHQgKi9cbm1tL3BlcmNwdS5jOjMzMDA6XHRcdG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsoY3B1LCAodW5zaWduZWQgbG9uZylwY3B1X3ZtLmFkZHIsXG5tbS9wZXJjcHUuYy0zMzAxLVx0XHRcdFx0XHUwMDI2cGFnZXNbdW5pdCAqIHVuaXRfcGFnZXNdLCB1bml0X3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjE3NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGEgc2Vhc29uZWQga2VybmVsIGRldmVsb3BlciBhbmQgdGhlIHRleHQgcmVmZXJzIHRvIGV4YW1pbmluZyBrZXJuZWwgY29kZToKCioqQ2hlY2tpbmcgYGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc2AgZnVuY3Rpb24uIEltbWVkaWF0ZWx5LCBteSBtaW5kIGdvZXMgdG8gdGhlIHBvdGVudGlhbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbnVhbmNlcyB0aGlzIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgZ2VuZXJpYyBtZW1vcnkgc3luY2hyb25pemF0aW9uIHJvdXRpbmU7IHRoZSAmIzM0O2FyY2gmIzM0OyBwcmVmaXggc2NyZWFtcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBhcmNoaXRlY3R1cmFsIGNvbnRleHQgdGhpcyBhcHBsaWVzIHRvLiBJcyBpdCB4ODYsIEFSTSwgUklTQy1WLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGFyY2hpdGVjdHVyZSB3aWxsIGRpY3RhdGUgdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1vZGVscywgY2FjaGUgY29oZXJlbmN5IHByb3RvY29scywgYW5kIG1lbW9yeSBiYXJyaWVycyB0aGF0IGFyZSByZWxldmFudCBoZXJlLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGhvdyB0aGUgZnVuY3Rpb24gc3luY2hyb25pemVzIHRoZSBrZXJuZWwmIzM5O3MgdmlydHVhbCBtZW1vcnkgbWFwcGluZ3MuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGVuc3VyaW5nIGNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB2aXNpYmxlIHRvIHRoZSBrZXJuZWwgYW5kIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIG1lbW9yeS4gV2hhdCYjMzk7cyB0aGUgc3BlY2lmaWMgc2NlbmFyaW8/IElzIGl0IHJlbGF0ZWQgdG8gaGFuZGxpbmcgVExCIGZsdXNoZXM/IFBhZ2UgdGFibGUgdXBkYXRlcz8gT3IgcG9zc2libHkgY2FjaGUgaW52YWxpZGF0aW9uIGZvciBtZW1vcnkgcmVnaW9ucyBzaGFyZWQgYmV0d2VlbiBkaWZmZXJlbnQgcHJvY2Vzc2VzIG9yIGRldmljZXM/IFRoZSBjb21tZW50cyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZiBzaG91bGQgYmUgbXkgZmlyc3QgcG9ydCBvZiBjYWxsLCBidXQgSSBhbnRpY2lwYXRlIGxvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBzcGVjaWZpYyB1c2UgY2FzZXMgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgaXRzIHJvbGUgaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bSBhbHNvIGludGVyZXN0ZWQgaW4gaXRzIGVmZmljaWVuY3ksIEkgd2lsbCBoYXZlIHRvIGxvb2sgdG8gc2VlIGlmIHRoaXMgb3BlcmF0aW9uIGhhcyBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0va2VybmVsL3RyYXBzLmM9OTIxPWFzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfYmFkX3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC90cmFwcy5jLTk1OC0gKi9cbmFyY2gvYXJtL2tlcm5lbC90cmFwcy5jOjk1OTp2b2lkIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG5hcmNoL2FybS9rZXJuZWwvdHJhcHMuYy05NjAte1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oPTM4PXN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGVfc3luYyh1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kcClcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaC00MS1cdGlmIChBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLIFx1MDAyNiBQR1RCTF9QVURfTU9ESUZJRUQpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaDo0MjpcdFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTQzLX1cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaD0xNDE9c3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHAsIHB0ZV90ICpwdGVwKVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTE0NC1cdGlmIChBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLIFx1MDAyNiBQR1RCTF9QTURfTU9ESUZJRUQpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNDU6XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaC0xNDYtfVxuLS1cbmFyY2gvYXJtNjQvbW0va2FzYW5faW5pdC5jPTE3Nj1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcGdkX3BvcHVsYXRlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmMtMTkwLVx0aWYgKG1hc2sgXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXG5hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYzoxOTE6XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIGVuZCk7XG5hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYy0xOTItfVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmM9NzM9dm9pZCBfX2luaXQgc2V0dXBfcGVyY3B1X3BnZCh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtOTctXG5hcmNoL2FybTY0L21tL21tdS5jOjk4OnZvaWQgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbmFyY2gvYXJtNjQvbW0vbW11LmMtOTkte1xuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmM9MTg2Nj1zdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3RhYmxlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg4NS1cdGlmIChtYXNrIFx1MDAyNiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLKVxuYXJjaC9hcm02NC9tbS9tbXUuYzoxODg2Olx0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xuYXJjaC9hcm02NC9tbS9tbXUuYy0xODg3LX1cbi0tXG5hcmNoL2FybTY0L21tL21tdS5jPTIwOTA9aW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMjEwNy1cdGlmIChtYXNrIFx1MDAyNiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLKVxuYXJjaC9hcm02NC9tbS9tbXUuYzoyMTA4Olx0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBzdGFydCAmIzQzOyBzaXplKTtcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjEwOS1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmM9MTExPXZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMtMjIwLVx0ICogc2V0dXBfYXJjaCgpLCBidXQgcGVyY3B1IGRhdGEgYWxzbyBuZWVkcyB0byBiZSBhdmFpbGFibGUgaW5cbmFyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYzoyMjE6XHQgKiB0aGUgc21wYm9vdCBhc20gYW5kIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoKSBkb2VzbiYjMzk7dCBzeW5jIHRvXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMtMjIyLVx0ICogc3dhcHBlcl9wZ19kaXIgb24gMzItYml0LiBUaGUgcGVyLWNwdSBtYXBwaW5ncyBuZWVkIHRvIGJlIGF2YWlsYWJsZVxuLS1cbmFyY2gveDg2L21tL2ZhdWx0LmM9MjY5PU5PS1BST0JFX1NZTUJPTCh2bWFsbG9jX2ZhdWx0KTtcbmFyY2gveDg2L21tL2ZhdWx0LmMtMjcwLVxuYXJjaC94ODYvbW0vZmF1bHQuYzoyNzE6dm9pZCBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuYXJjaC94ODYvbW0vZmF1bHQuYy0yNzIte1xuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYz0yMTg9c3RhdGljIHZvaWQgc3luY19nbG9iYWxfcGdkcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMjM4LSAqL1xuYXJjaC94ODYvbW0vaW5pdF82NC5jOjIzOTp2b2lkIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMjQwLXtcbi0tXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaC0xOC1cdFx0aWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgXHUwMDI2IFBHVEJMX1BHRF9NT0RJRklFRClcdFxcXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaDoxOTpcdFx0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1x0XHRcXFxuaW5jbHVkZS9saW51eC9wZ2FsbG9jLmgtMjAtXHR9IHdoaWxlICgwKVxuLS1cbmluY2x1ZGUvbGludXgvcGdhbGxvYy5oLTI1LVx0XHRpZiAoQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyBcdTAwMjYgUEdUQkxfUDREX01PRElGSUVEKVx0XFxcbmluY2x1ZGUvbGludXgvcGdhbGxvYy5oOjI2Olx0XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaC0yNy1cdH0gd2hpbGUgKDApXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTcyOD1zdGF0aWMgaW5saW5lIHZvaWQgbW9kaWZ5X3Byb3RfY29tbWl0X3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xNzQ1LSAqIGFuZCBsZXQgZ2VuZXJpYyB2bWFsbG9jLCBpb3JlbWFwIGFuZCBwYWdlIHRhYmxlIHVwZGF0ZSBjb2RlIGtub3cgd2hlblxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTc0NjogKiBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKCkgbmVlZHMgdG8gYmUgY2FsbGVkLlxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTc0Ny0gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xNzUyLS8qXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoxNzUzOiAqIFRoZXJlIGlzIG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoKS4gSXQgaXNcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTE3NTQtICogcmVsaWVkIHVwb24gdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGNhbGxzIG91dCBpZiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTc1Ni0gKi9cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjE3NTc6dm9pZCBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTE3NTgtXG4tLVxubW0vbWVtb3J5LmM9MzQ2Mz1zdGF0aWMgaW50IF9fYXBwbHlfdG9fcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21lbW9yeS5jLTM0OTYtXHRpZiAobWFzayBcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcbm1tL21lbW9yeS5jOjM0OTc6XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIHN0YXJ0ICYjNDM7IHNpemUpO1xubW0vbWVtb3J5LmMtMzQ5OC1cbi0tXG5tbS92bWFsbG9jLmM9MzAxPWludCB2bWFwX3JhbmdlX25vZmx1c2gocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0zMjktXHRpZiAobWFzayBcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcbm1tL3ZtYWxsb2MuYzozMzA6XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIGVuZCk7XG5tbS92bWFsbG9jLmMtMzMxLVxuLS1cbm1tL3ZtYWxsb2MuYz00ODQ9dm9pZCBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vdm1hbGxvYy5jLTUwMi1cdGlmIChtYXNrIFx1MDAyNiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLKVxubW0vdm1hbGxvYy5jOjUwMzpcdFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgZW5kKTtcbm1tL3ZtYWxsb2MuYy01MDQtfVxuLS1cbm1tL3ZtYWxsb2MuYz02MjY9c3RhdGljIGludCB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtNjQ3LVx0aWYgKG1hc2sgXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXG5tbS92bWFsbG9jLmM6NjQ4Olx0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xubW0vdm1hbGxvYy5jLTY0OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2NTAKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogMTYxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIEV4cGxvcmF0aW9uIG9mIFBlci1DUFUgTWFwcGluZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGVyLUNQVSBtYXBwaW5nIHN0dWZmLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcga2V5IGZ1bmN0aW9uczogYGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NgLCBgc2V0dXBfcGVyY3B1X3BnZGAsIGBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rYCwgYW5kIGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdGhpcyBmZWF0dXJlLCBhbmQgbGlrZWx5IGNvbnRhaW4gdGhlIG1vc3QgaW50ZXJlc3RpbmcgbG9naWMuCgpGaXJzdCwgSSB3YW50IHRvIHBpbiBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhpcyBmZWF0dXJlJiMzOTtzIGVuYWJsZW1lbnQuIExldCYjMzk7cyBzdGFydCB3aXRoIGBIQVZFX0xPQ0FMX1BFUl9DUFVfTUFQYC4gUXVpY2tseSBjaGVja2luZyBgYXJjaC9hcm02NC9LY29uZmlnYCwgSSBzZWUgaXQmIzM5O3MgYSBgZGVmX2Jvb2wgeWAgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIHRoZSBkZXBlbmRlbmNpZXMgKEFSTTY0IHdpdGggc3BlY2lmaWMgVkEgYml0IHNpemVzIGFuZCBwYWdlIHNpemVzKSBhcmUgbWV0LiBUaGlzIG1lYW5zIHdlIGRvbiYjMzk7dCBoYXZlIHRvIG1hbnVhbGx5IGVuYWJsZSBpdC4gSG93ZXZlciwgaXQmIzM5O3Mgc3RpbGwgd29ydGh3aGlsZSB0byBkb2N1bWVudCB0aGF0IGl0JiMzOTtzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLgoKVGhlbiwgSSYjMzk7bGwgbW92ZSBvbiB0byBgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktgLiBBIHF1aWNrIGNoZWNrIGluIGBhcmNoL2FybTY0L0tjb25maWdgIHJldmVhbHMgdGhhdCBBUk02NCAqc2VsZWN0cyogdGhpcyBjb25maWcsIG1lYW5pbmcgaXQmIzM5O3MgYWx3YXlzIGVuYWJsZWQgd2hlbiBBUk02NCBpcyBhY3RpdmUuCgpOZXh0LCBJJiMzOTtsbCB2ZXJpZnkgd2hhdCBJIHRoaW5rOiBgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNgIGFuZCBgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNgIGFyZSBhbHNvIHNlbGVjdGVkIGJ5IEFSTTY0LiBDb25maXJtZWQuCgpOb3csIGxldCYjMzk7cyBqdW1wIHRvIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUGAgYW5kIHNlZSBpdCYjMzk7cyBhIGBib29sYCBpbiBgbW0vS2NvbmZpZ2AuCgpOb3csIEkgd2FudCB0byB2ZXJpZnkgaWYgdGhlIGZ1bmN0aW9ucyBJIGluaXRpYWxseSBsaXN0ZWQgYXJlIGdvb2QgdGFyZ2V0cyBmb3IgaW52ZXN0aWdhdGlvbi4KCmBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCBmcm9tIGBtbS92bWFsbG9jLmNgIGlzIGVuYWJsZWQgYnkgdGhlIGBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUGAsIHNvIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4KCmBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rYCBmcm9tIGBhcmNoL2FybTY0L21tL21tdS5jYCBpcyBhbHNvIGVuYWJsZWQgYnkgYENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQYCwgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKYHNldHVwX3BlcmNwdV9wZ2RgIGZyb20gYGFyY2gvYXJtNjQvbW0vbW11LmNgIGlzIGFsc28gYSBrZXkgZnVuY3Rpb24uCgpgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc2AgZnJvbSBgYXJjaC9hcm02NC9tbS9tbXUuY2AgaXMgYSBuZXcgZnVuY3Rpb24gYW5kIGlzIGFsc28gYSBrZXkgZnVuY3Rpb24uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGEgZmV3IG1vcmUgZnVuY3Rpb25zLgoKYHZtYXBfcmFuZ2Vfbm9mbHVzaGAgaW4gYG1tL3ZtYWxsb2MuY2AgYW5kIGBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoYCBhbHNvIGluIGBtbS92bWFsbG9jLmNgIGhhdmUgYmVlbiBjaGFuZ2VkIHdpdGggYSBuZXcgcGFyYW1ldGVyLiBMZXQmIzM5O3Mga2VlcCBpbiBtaW5kIHRoYXQgdGhleSBhcmUgbm90IG5ldywgYnV0IGhhdmUgYmVlbiBleHRlbmRlZC4gSG93ZXZlciwgbGV0JiMzOTtzIGtlZXAgdGhlbSBvbiB0aGUgbGlzdCBqdXN0IGluIGNhc2UuCgpgcGNwdV9hbGxvY19maXJzdF9jaHVua2AgaW4gYG1tL3BlcmNwdS5jYAoKYHBjcHVfc2V0dXBfZmlyc3RfY2h1bmtgIGluIGBtbS9wZXJjcHUuY2AKCmBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgIGluIGBtbS9wZXJjcHUuY2AKCk9rYXksIHNvIEkgaGF2ZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGZ1bmN0aW9ucyB0byByZXZpZXcsIHRob3VnaCBJIGNhbiBwcmlvcml0aXplIGJhc2VkIG9uIG5vdmVsdHkgYW5kIHNwZWNpZmljaXR5IHRvIHRoaXMgcGVyLUNQVSBmZWF0dXJlOgoKQmFzZWQgb24gdGhlIGludmVzdGlnYXRpb24sIEkgaGF2ZSB0aGUgZm9sbG93aW5nIHNldCBvZiBrZXkgc3ltYm9sczoKCi0gICBgcGNwdV9nZXRfbG9jYWxfdm1fYXJlYWAKLSAgIGBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rYAotICAgYHNldHVwX3BlcmNwdV9wZ2RgCi0gICBgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc2AKLSAgIGB2bWFwX3JhbmdlX25vZmx1c2hgIChleHRlbmRlZCkKLSAgIGBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoYCAoZXh0ZW5kZWQpCi0gICBgcGNwdV9hbGxvY19maXJzdF9jaHVua2AKLSAgIGBwY3B1X3NldHVwX2ZpcnN0X2NodW5rYAotICAgYHBjcHVfcGFnZV9maXJzdF9jaHVua2AKCkFuZCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmU6CgotICAgYEhBVkVfTE9DQUxfUEVSX0NQVV9NQVBgCi0gICBgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNgCi0gICBgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNgCi0gICBgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktgCgpTaW5jZSB0aGUgb3RoZXIgZnVuY3Rpb25zIGB2bWFwX3JhbmdlX25vZmx1c2hgLCBgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaGAsIGBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rYCwgYHBjcHVfc2V0dXBfZmlyc3RfY2h1bmtgIGFuZCBgcGNwdV9wYWdlX2ZpcnN0X2NodW5rYCBhcmUgZ2VuZXJpYywgaXQmIzM5O3MgY2xlYXIKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEFWRV9MT0NBTF9QRVJfQ1BVX01BUCYjMzQ7LAogICAgJiMzNDtBUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQyYjMzQ7LAogICAgJiMzNDtBUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQyYjMzQ7LAogICAgJiMzNDtORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEmIzM0OywKICAgICYjMzQ7bWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayYjMzQ7LAogICAgJiMzNDtzZXR1cF9wZXJjcHVfcGdkJiMzNDssCiAgICAmIzM0O2FyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgbG9jYWwgcGVyLWNwdSBtYXBwaW5nIHN1cHBvcnQgZm9yIEFSTTY0LCBtb2RpZnlpbmcgY29yZSBrZXJuZWwgbG9naWMgZm9yIHBlcmNwdSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSB0YWJsZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAmIzM0OywKICAgICYjMzQ7QVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkMmIzM0OywKICAgICYjMzQ7QVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkMmIzM0OywKICAgICYjMzQ7TkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwY3B1X2dldF9sb2NhbF92bV9hcmVhJiMzNDssCiAgICAmIzM0O21hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsmIzM0OywKICAgICYjMzQ7c2V0dXBfcGVyY3B1X3BnZCYjMzQ7LAogICAgJiMzNDthcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGxvY2FsIHBlci1jcHUgbWFwcGluZyBzdXBwb3J0IGZvciBBUk02NCwgbW9kaWZ5aW5nIGNvcmUga2VybmVsIGxvZ2ljIGZvciBwZXJjcHUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTVUMjI6NDA6MjQuNTY3OTE1NTg3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1Njg5NDc4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFwiLFxuICAgIFwiQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcIixcbiAgICBcIkFSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXCIsXG4gICAgXCJORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWFcIixcbiAgICBcIm1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtcIixcbiAgICBcInNldHVwX3BlcmNwdV9wZ2RcIixcbiAgICBcImFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBsb2NhbCBwZXItY3B1IG1hcHBpbmcgc3VwcG9ydCBmb3IgQVJNNjQsIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgcGVyY3B1IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjI6NDA6MjQuNTY3OTI0MTY3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMwNTAzMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmJhY2NiMzUxMWZjYWRkMGZhMTJiNTJjNzc5M2Y4Y2YwMTgwMDA2ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxNSAyMjo0MDoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcXG5pbmRleCBiM2FmZTA2ODg5MTliZC4uOTVmZmQxNTExODdmMjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXFxuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuQEAgLTQxLDkgKzQxLDExIEBAIGNvbmZpZyBBUk02NFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcgaWYgQVJNNjRfSEFGVFxcbitcXHRzZWxlY3QgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX1BSRUVNUFRfTEFaWVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfUFREVU1QXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19QVEVfU1BFQ0lBTFxcbitcXHRzZWxlY3QgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbiBcXHRzZWxlY3QgQVJDSF9IQVNfU0VUVVBfRE1BX09QU1xcbiBcXHRzZWxlY3QgQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVBcXG5AQCAtMjI0LDYgKzIyNiw3IEBAIGNvbmZpZyBBUk02NFxcbiBcXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiBcXHRzZWxlY3QgSEFWRV9SU0VRXFxuIFxcdHNlbGVjdCBIQVZFX1JVU1QgaWYgUlVTVENfU1VQUE9SVFNfQVJNNjRcXG4rXFx0c2VsZWN0IEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXFxuIFxcdHNlbGVjdCBIQVZFX1NUQUNLUFJPVEVDVE9SXFxuIFxcdHNlbGVjdCBIQVZFX1NUQVRJQ19DQUxMIGlmIENGSVxcbiBcXHRzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXFxuQEAgLTIzOSw2ICsyNDIsNyBAQCBjb25maWcgQVJNNjRcXG4gXFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuIFxcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQVxcbiBcXHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXFxuK1xcdHNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xcbiBcXHRzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RIXFxuIFxcdHNlbGVjdCBPRlxcbiBcXHRzZWxlY3QgT0ZfRUFSTFlfRkxBVFRSRUVcXG5AQCAtNDExLDYgKzQxNSwxMSBAQCBjb25maWcgS0FTQU5fU0hBRE9XX09GRlNFVFxcbiBjb25maWcgVU5XSU5EX1RBQkxFU1xcbiBcXHRib29sXFxuIFxcbitjb25maWcgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitcXHRkZWZfYm9vbCB5XFxuK1xcdGRlcGVuZHMgb24gKEFSTTY0X1ZBX0JJVFNfNDggXFx1MDAyNlxcdTAwMjYgKEFSTTY0XzRLX1BBR0VTIHx8IEFSTTY0XzY0S19QQUdFUykpIHx8IFxcXFxcXG4rXFx0XFx0ICAgKEFSTTY0X1ZBX0JJVFNfNDcgXFx1MDAyNlxcdTAwMjYgQVJNNjRfMTZLX1BBR0VTKVxcbitcXG4gc291cmNlIFxcXCJhcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zXFxcIlxcbiBcXG4gbWVudSBcXFwiS2VybmVsIEZlYXR1cmVzXFxcIlxcbkBAIC0xNTgxLDkgKzE1OTAsNiBAQCBjb25maWcgTlVNQVxcbiBcXHRib29sIFxcXCJOVU1BIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTY2hlZHVsZXIgU3VwcG9ydFxcXCJcXG4gXFx0c2VsZWN0IEdFTkVSSUNfQVJDSF9OVU1BXFxuIFxcdHNlbGVjdCBPRl9OVU1BXFxuLVxcdHNlbGVjdCBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxcbi1cXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LXFxuLVxcdHNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xcbiBcXHRzZWxlY3QgVVNFX1BFUkNQVV9OVU1BX05PREVfSURcXG4gXFx0aGVscFxcbiBcXHQgIEVuYWJsZSBOVU1BIChOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzKSBzdXBwb3J0LlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaFxcbmluZGV4IDVlMTIxMWM1NDBhYjIzLi5hYTA4MThmN2VjNThjNSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaFxcbkBAIC02Myw2ICs2Myw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcm02NF9rZXJuZWxfdW5tYXBwZWRfYXRfZWwwKHZvaWQpXFxuIGV4dGVybiB2b2lkIGFybTY0X21lbWJsb2NrX2luaXQodm9pZCk7XFxuIGV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpO1xcbiBleHRlcm4gdm9pZCBib290bWVtX2luaXQodm9pZCk7XFxuK2V4dGVybiB2b2lkIHNldHVwX3BlcmNwdV9wZ2Qodm9pZCk7XFxuIGV4dGVybiB2b2lkIGNyZWF0ZV9tYXBwaW5nX25vYWxsb2MocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyB2aXJ0LFxcbiBcXHRcXHRcXHRcXHQgICBwaHlzX2FkZHJfdCBzaXplLCBwZ3Byb3RfdCBwcm90KTtcXG4gZXh0ZXJuIHZvaWQgY3JlYXRlX3BnZF9tYXBwaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwaHlzX2FkZHJfdCBwaHlzLFxcbkBAIC03Miw2ICs3MywxMCBAQCBleHRlcm4gdm9pZCAqZml4bWFwX3JlbWFwX2ZkdChwaHlzX2FkZHJfdCBkdF9waHlzLCBpbnQgKnNpemUsIHBncHJvdF90IHByb3QpO1xcbiBleHRlcm4gdm9pZCBtYXJrX2xpbmVhcl90ZXh0X2FsaWFzX3JvKHZvaWQpO1xcbiBleHRlcm4gaW50IHNwbGl0X2tlcm5lbF9sZWFmX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xcbiBleHRlcm4gdm9pZCBsaW5lYXJfbWFwX21heWJlX3NwbGl0X3RvX3B0ZXModm9pZCk7XFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitleHRlcm4gdm9pZCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKTtcXG4rI2VuZGlmXFxuIFxcbiAvKlxcbiAgKiBUaGlzIGNoZWNrIGlzIHRyaWdnZXJlZCBkdXJpbmcgdGhlIGVhcmx5IGJvb3QgYmVmb3JlIHRoZSBjcHVmZWF0dXJlXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaFxcbmluZGV4IDgwM2I2ODc1ODE1Mjc1Li4wZTk5MWI5OGVkOWVhZiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RsYmZsdXNoLmhcXHUwMDNlXFxuIFxcbiBleHRlcm4gYm9vbCByb2RhdGFfZnVsbDtcXG4rZXh0ZXJuIHBnZF90ICpwZXJjcHVfcGdkW05SX0NQVVNdO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGNvbnRleHRpZHJfdGhyZWFkX3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpXFxuIHtcXG5AQCAtMTM4LDcgKzEzOSwxMyBAQCB2b2lkIF9fY3B1X3JlcGxhY2VfdHRicjEocGdkX3QgKnBnZHAsIGJvb2wgY25wKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfZW5hYmxlX3N3YXBwZXJfY25wKHZvaWQpXFxuIHtcXG4tXFx0X19jcHVfcmVwbGFjZV90dGJyMShsbV9hbGlhcyhzd2FwcGVyX3BnX2RpciksIHRydWUpO1xcbitcXHR1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xcbitcXHRwZ2RfdCAqdHRicjEgPSBwZXJjcHVfcGdkW2NwdV07XFxuK1xcbitcXHRpZiAoY3B1ID09IDApXFxuK1xcdFxcdHR0YnIxID0gbG1fYWxpYXMoc3dhcHBlcl9wZ19kaXIpO1xcbitcXG4rXFx0X19jcHVfcmVwbGFjZV90dGJyMSh0dGJyMSwgZmFsc2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlcGxhY2VfdHRicjEocGdkX3QgKnBnZHApXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oXFxuaW5kZXggYjU3YjJiYjAwOTY3NzQuLjAzZDE0OWY5MTc3YzBlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oXFxuQEAgLTE0Miw2ICsxNDIsMjcgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXFxuICN1bmRlZiBQRVJDUFVfT1BcXG4gI3VuZGVmIFBFUkNQVV9SRVRfT1BcXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfbG9jYWxfb2ZmO1xcbitcXG4rI2RlZmluZSBsb2NhbF9jcHVfcHRyKHB0cilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3ZlcmlmeV9wY3B1X3B0cihwdHIpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0U0hJRlRfUEVSQ1BVX1BUUihwdHIsIF9fcGVyX2NwdV9sb2NhbF9vZmYpO1xcdFxcdFxcdFxcXFxcXG4rfSlcXG4rXFxuKyNkZWZpbmUgX3BjcF9wcm90ZWN0KG9wLCBwY3AsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRvcChsb2NhbF9jcHVfcHRyKFxcdTAwMjYocGNwKSksIF9fVkFfQVJHU19fKTtcXHRcXHRcXHRcXHRcXFxcXFxuK30pXFxuK1xcbisjZGVmaW5lIF9wY3BfcHJvdGVjdF9yZXR1cm4ob3AsIHBjcCwgYXJncy4uLilcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR0eXBlb2YocGNwKSBfX3JldHZhbDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fcmV0dmFsID0gKHR5cGVvZihwY3ApKW9wKGxvY2FsX2NwdV9wdHIoXFx1MDAyNihwY3ApKSwgIyNhcmdzKTtcXHRcXFxcXFxuK1xcdF9fcmV0dmFsO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSlcXG4rI2Vsc2VcXG4gLypcXG4gICogSXQgd291bGQgYmUgbmljZSB0byBhdm9pZCB0aGUgY29uZGl0aW9uYWwgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgd2hlblxcbiAgKiByZS1lbmFibGluZyBwcmVlbXB0aW9uIGZvciBwcmVlbXB0aWJsZSBrZXJuZWxzLCBidXQgZG9pbmcgdGhhdCBpbiBhIHdheVxcbkBAIC0xNTIsNyArMTczLDYgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXFxuICAqIHByZWVtcHRpb24gcG9pbnQgd2hlbiBUSUZfTkVFRF9SRVNDSEVEIGdldHMgc2V0IHdoaWxlIHByZWVtcHRpb24gaXNcXG4gICogZGlzYWJsZWQuXFxuICAqL1xcbi1cXG4gI2RlZmluZSBfcGNwX3Byb3RlY3Qob3AsIHBjcCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdHByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0xNjgsNiArMTg4LDcgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXFxuIFxcdHByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdF9fcmV0dmFsO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfSlcXG4rI2VuZGlmXFxuIFxcbiAjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApXFx0XFx0XFxcXFxcbiBcXHRfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfOCwgcGNwKVxcbkBAIC0yNDMsNiArMjY0LDE5IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKVxcbiBcXG4gI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnNjQocGNwLCBvLCBuKVxcdHRoaXNfY3B1X2NtcHhjaGdfOChwY3AsIG8sIG4pXFxuIFxcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnMTI4KHBjcCwgbywgbilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR0eXBlZGVmIHR5cGVvZihwY3ApIHBjcF9vcF9UX187XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR1MTI4IG9sZF9fLCBuZXdfXywgcmV0X187XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRwY3Bfb3BfVF9fICpwdHJfXztcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdG9sZF9fID0gbztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdG5ld19fID0gbjtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHB0cl9fID0gbG9jYWxfY3B1X3B0cihcXHUwMDI2KHBjcCkpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cmV0X18gPSBjbXB4Y2hnMTI4X2xvY2FsKCh2b2lkICopcHRyX18sIG9sZF9fLCBuZXdfXyk7XFx0XFx0XFxcXFxcbitcXHRyZXRfXztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK30pXFxuKyNlbHNlXFxuICNkZWZpbmUgdGhpc19jcHVfY21weGNoZzEyOChwY3AsIG8sIG4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0dHlwZWRlZiB0eXBlb2YocGNwKSBwY3Bfb3BfVF9fO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtMjU2LDYgKzI5MCw3IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKVxcbiBcXHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRyZXRfXztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIH0pXFxuKyNlbmRpZlxcbiBcXG4gI2lmZGVmIF9fS1ZNX05WSEVfSFlQRVJWSVNPUl9fXFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faHlwX3Blcl9jcHVfb2Zmc2V0KHVuc2lnbmVkIGludCBjcHUpO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuaW5kZXggMWI0NTA5ZDMzODJjNjMuLmRkMWFjODRhMTE2MDVlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5AQCAtMzMsMTEgKzMzLDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kcClcXG4gXFx0cHVkdmFsIHw9IChtbSA9PSBcXHUwMDI2aW5pdF9tbSkgPyBQVURfVEFCTEVfVVhOIDogUFVEX1RBQkxFX1BYTjtcXG4gXFx0X19wdWRfcG9wdWxhdGUocHVkcCwgX19wYShwbWRwKSwgcHVkdmFsKTtcXG4gfVxcbitcXG4rI2lmZGVmIENPTkZJR19BUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQ1xcbitzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlX3N5bmModW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApXFxuK3tcXG4rXFx0cHVkX3BvcHVsYXRlKFxcdTAwMjZpbml0X21tLCBwdWRwLCBwbWRwKTtcXG4rXFx0aWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgXFx1MDAyNiBQR1RCTF9QVURfTU9ESUZJRUQpXFxuK1xcdFxcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XFxuK31cXG4rI2VuZGlmXFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B1ZF9wb3B1bGF0ZShwdWRfdCAqcHVkcCwgcGh5c19hZGRyX3QgcG1kcCwgcHVkdmFsX3QgcHJvdClcXG4ge1xcbiBcXHRCVUlMRF9CVUcoKTtcXG4gfVxcbitcXG4rI2lmZGVmIENPTkZJR19BUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQ1xcbitzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlX3N5bmModW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApXFxuK3tcXG4rXFx0QlVJTERfQlVHKCk7XFxuK31cXG4rI2VuZGlmXFxuICNlbmRpZlxcdC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDIgKi9cXG4gXFxuICNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAzXFxuQEAgLTEyMSw0ICsxMzcsMTIgQEAgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCwgcGd0YWJsZV90IHB0ZXApXFxuIFxcdFxcdCAgICAgICBQTURfVFlQRV9UQUJMRSB8IFBNRF9UQUJMRV9BRiB8IFBNRF9UQUJMRV9QWE4pO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGVfc3luYyh1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwLCBwdGVfdCAqcHRlcClcXG4re1xcbitcXHRwbWRfcG9wdWxhdGVfa2VybmVsKFxcdTAwMjZpbml0X21tLCBwbWRwLCBwdGVwKTtcXG4rXFx0aWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgXFx1MDAyNiBQR1RCTF9QTURfTU9ESUZJRUQpXFxuK1xcdFxcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XFxuK31cXG4rI2VuZGlmXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggMjc2ODljNjJiZDI1ZGQuLjgzY2Q2NTYxMGQ3ZjdkIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtMTgsMTQgKzE4LDM1IEBAXFxuICAqIFZNQUxMT0MgcmFuZ2UuXFxuICAqXFxuICAqIFZNQUxMT0NfU1RBUlQ6IGJlZ2lubmluZyBvZiB0aGUga2VybmVsIHZtYWxsb2Mgc3BhY2VcXG4tICogVk1BTExPQ19FTkQ6IGV4dGVuZHMgdG8gdGhlIGF2YWlsYWJsZSBzcGFjZSBiZWxvdyB2bWVtbWFwXFxuKyAqIFZNQUxMT0NfRU5EOiBleHRlbmRzIHRvIHRoZSBzcGFjZSBiZWxvdyBnbG9iYWwgcGVyY3B1IGFyZWFcXG4gICovXFxuICNkZWZpbmUgVk1BTExPQ19TVEFSVFxcdFxcdChNT0RVTEVTX0VORClcXG4rI2RlZmluZSBWTUFMTE9DX0VORFxcdFxcdChQRVJDUFVfU1RBUlQgLSBTWl84TSlcXG4rXFxuKy8qXFxuKyAqIFBFUkNQVSByYW5nZVxcbisgKlxcbisgKiBQRVJDUFVfU1RBUlQ6IGJlZ2lubmluZyBvZiBnbG9iYWwgcGVyY3B1IGFyZWFcXG4rICogUEVSQ1BVX0VORDogZW5kIG9mIGdsb2JhbCBwZXJjcHUgYXJlYVxcbisgKiBMT0NBTF9QRVJDUFVfU1RBUlQ6IGJlZ2lubmluZyBvZiBsb2NhbCBwZXJjcHUgYXJlYVxcbisgKiBMT0NBTF9QRVJDUFVfRU5EOiBlbmQgb2YgbG9jYWwgcGVyY3B1IGFyZWEsIGV4dGVuZCB0byB0aGUgYXZhaWxhYmxlXFxuKyAqICAgICAgICAgICAgICAgICAgIHNwYWNlIGJlbG93IHZtZW1tYXBcXG4rICovXFxuKyNpZiBkZWZpbmVkKENPTkZJR19BUk02NF80S19QQUdFUylcXG4rI2RlZmluZSBQRVJDUFVfU0laRVxcdFxcdCgyICogUEdESVJfU0laRSlcXG4rI2VsaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfMTZLX1BBR0VTKVxcbisjZGVmaW5lIFBFUkNQVV9TSVpFICAgICAgICAgICAgKDE2ICogUFVEX1NJWkUpXFxuKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSTTY0XzY0S19QQUdFUylcXG4rI2RlZmluZSBQRVJDUFVfU0laRSAgICAgICAgICAgIChQR0RJUl9TSVpFKVxcbisjZW5kaWZcXG4rI2RlZmluZSBQRVJDUFVfU1RBUlRcXHRcXHQoUEVSQ1BVX0VORCAtIFBFUkNQVV9TSVpFKVxcbisjZGVmaW5lIFBFUkNQVV9FTkRcXHRcXHQoTE9DQUxfUEVSQ1BVX1NUQVJUKVxcbisjZGVmaW5lIExPQ0FMX1BFUkNQVV9TVEFSVFxcdChMT0NBTF9QRVJDUFVfRU5EIC0gUEVSQ1BVX1NJWkUpXFxuICNpZiBWQV9CSVRTID09IFZBX0JJVFNfTUlOXFxuLSNkZWZpbmUgVk1BTExPQ19FTkRcXHRcXHQoVk1FTU1BUF9TVEFSVCAtIFNaXzhNKVxcbisjZGVmaW5lIExPQ0FMX1BFUkNQVV9FTkRcXHQoQUxJR05fRE9XTihWTUVNTUFQX1NUQVJULCBQRVJDUFVfU0laRSkpXFxuICNlbHNlXFxuICNkZWZpbmUgVk1FTU1BUF9VTlVTRURfTlBBR0VTXFx0KChfUEFHRV9PRkZTRVQodmFiaXRzX2FjdHVhbCkgLSBQQUdFX09GRlNFVCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVClcXG4tI2RlZmluZSBWTUFMTE9DX0VORFxcdFxcdChWTUVNTUFQX1NUQVJUICsgVk1FTU1BUF9VTlVTRURfTlBBR0VTICogc2l6ZW9mKHN0cnVjdCBwYWdlKSAtIFNaXzhNKVxcbisjZGVmaW5lIExPQ0FMX1BFUkNQVV9FTkRcXHQoQUxJR05fRE9XTigoVk1FTU1BUF9TVEFSVCArIFZNRU1NQVBfVU5VU0VEX05QQUdFUyAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpLCBQRVJDUFVfU0laRSkpXFxuICNlbmRpZlxcbiBcXG4gI2RlZmluZSB2bWVtbWFwXFx0XFx0XFx0KChzdHJ1Y3QgcGFnZSAqKVZNRU1NQVBfU1RBUlQgLSAobWVtc3RhcnRfYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSlcXG5AQCAtMTIxNiw2ICsxMjM3LDE2IEBAIHA0ZF90ICpwNGRfb2Zmc2V0X2xvY2tsZXNzX2ZvbGRlZChwZ2RfdCAqcGdkcCwgcGdkX3QgcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIFxcbiAjZW5kaWYgIC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDQgKi9cXG4gXFxuKyNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMlxcbisjZGVmaW5lIEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgICAgICBQR1RCTF9QTURfTU9ESUZJRURcXG4rI2VsaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTID09IDNcXG4rI2RlZmluZSBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLICAgICAgUEdUQkxfUFVEX01PRElGSUVEXFxuKyNlbGlmIENPTkZJR19QR1RBQkxFX0xFVkVMUyA9PSA0XFxuKyNkZWZpbmUgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyAgICAgIFBHVEJMX1A0RF9NT0RJRklFRFxcbisjZWxpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNVxcbisjZGVmaW5lIEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgICAgICBQR1RCTF9QR0RfTU9ESUZJRURcXG4rI2VuZGlmXFxuK1xcbiAjZGVmaW5lIHBnZF9FUlJPUihlKVxcdFxcXFxcXG4gXFx0cHJfZXJyKFxcXCIlczolZDogYmFkIHBnZCAlMDE2bGx4LlxcXFxuXFxcIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmNcXG5pbmRleCAyM2MwNWRjN2E4ZjJhYy4uNmQ0MjBhZDU5YWY0OTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuY1xcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmNcXG5AQCAtMzYwLDYgKzM2MCw5IEBAIHZvaWQgX19pbml0IF9fbm9fc2FuaXRpemVfYWRkcmVzcyBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXFxuIFxcdHNtcF9pbml0X2NwdXMoKTtcXG4gXFx0c21wX2J1aWxkX21waWRyX2hhc2goKTtcXG4gXFxuK1xcdC8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIHNtcF9pbml0X2NwdXMgKi9cXG4rXFx0c2V0dXBfcGVyY3B1X3BnZCgpO1xcbitcXG4gI2lmZGVmIENPTkZJR19BUk02NF9TV19UVEJSMF9QQU5cXG4gXFx0LypcXG4gXFx0ICogTWFrZSBzdXJlIGluaXRfdGhyZWFkX2luZm8udHRicjAgYWx3YXlzIGdlbmVyYXRlcyB0cmFuc2xhdGlvblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jXFxuaW5kZXggZDQ2MDIyZjcyMDc1NDAuLjRhODExMzc5YzE5MTYyIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wLmNcXG5AQCAtNTUsNiArNTUsOCBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9pcGkuaFxcdTAwM2VcXG4gXFxuK2V4dGVybiB2b2lkIGlkbWFwX2NwdV9yZXBsYWNlX3R0YnIxKHBoeXNfYWRkcl90IHBnZGlyKTtcXG4rXFxuIC8qXFxuICAqIGFzIGZyb20gMi41LCBrZXJuZWxzIG5vIGxvbmdlciBoYXZlIGFuIGluaXRfdGFza3Mgc3RydWN0dXJlXFxuICAqIHNvIHdlIG5lZWQgc29tZSBvdGhlciB3YXkgb2YgdGVsbGluZyBhIG5ldyBzZWNvbmRhcnkgY29yZVxcbkBAIC0xOTgsNiArMjAwLDEyIEBAIGFzbWxpbmthZ2Ugbm90cmFjZSB2b2lkIHNlY29uZGFyeV9zdGFydF9rZXJuZWwodm9pZClcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBcXHUwMDI2aW5pdF9tbTtcXG4gXFx0Y29uc3Qgc3RydWN0IGNwdV9vcGVyYXRpb25zICpvcHM7XFxuIFxcdHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XFxuK1xcdHR5cGVkZWYgdm9pZCAodHRicl9yZXBsYWNlX2Z1bmMpKHBoeXNfYWRkcl90KTtcXG4rXFx0dHRicl9yZXBsYWNlX2Z1bmMgKnJlcGxhY2VfdHRicjtcXG4rXFxuK1xcdHBoeXNfYWRkcl90IHR0YnIxID0gcGh5c190b190dGJyKHZpcnRfdG9fcGh5cyhwZXJjcHVfcGdkW2NwdV0pKTtcXG4rXFx0cmVwbGFjZV90dGJyID0gKHZvaWQgKilfX3BhX3N5bWJvbChpZG1hcF9jcHVfcmVwbGFjZV90dGJyMSk7XFxuK1xcdHJlcGxhY2VfdHRicih0dGJyMSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBBbGwga2VybmVsIHRocmVhZHMgc2hhcmUgdGhlIHNhbWUgbW0gY29udGV4dDsgZ3JhYiBhXFxuQEAgLTgxOSw2ICs4MjcsNDIgQEAgdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpXFxuIFxcdH1cXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19OVU1BXFxuK2V4dGVybiBpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdO1xcbitcXG4raW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpXFxuK3tcXG4rXFx0cmV0dXJuIGNwdV90b19ub2RlX21hcFtjcHVdO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rI2lmZGVmIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxcbit1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseTtcXG4rRVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfb2Zmc2V0KTtcXG4rLyogVXNlZCB0byBjYWxjdWxhdGUgcGNwdSBsb2NhbCBhZGRyZXNzLCB0aGUgb2Zmc2V0IGlzIHNhbWUgZm9yIGFsbCBDUFVzICovXFxuK3Vuc2lnbmVkIGxvbmcgX19wZXJfY3B1X2xvY2FsX29mZiBfX3JvX2FmdGVyX2luaXQ7XFxuK0VYUE9SVF9TWU1CT0woX19wZXJfY3B1X2xvY2FsX29mZik7XFxuK1xcbit2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWx0YTtcXG4rXFx0dW5zaWduZWQgaW50IGNwdTtcXG4rXFx0aW50IHJjID0gLUVJTlZBTDtcXG4rXFxuKyNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcXG4rXFx0LyogUENQVSBwYWdlIHRhYmxlIGp1c3QgY2FuIHN1cHBvcnQgUENQVV9GQ19QQUdFICovXFxuK1xcdHJjID0gcGNwdV9wYWdlX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwgZWFybHlfY3B1X3RvX25vZGUpO1xcbisjZW5kaWZcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cGFuaWMoXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIHBlcmNwdSBhcmVhcyAoZXJyPSVkKS5cXFwiLCByYyk7XFxuK1xcbitcXHRkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0O1xcbitcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxcbitcXHRcXHRfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gPSBkZWx0YSArIHBjcHVfdW5pdF9vZmZzZXRzW2NwdV07XFxuK1xcdF9fcGVyX2NwdV9sb2NhbF9vZmYgPSAodW5zaWduZWQgbG9uZylwY3B1X2xvY2FsX2Jhc2UgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgY29uc3QgY2hhciAqaXBpX3R5cGVzW01BWF9JUEldIF9fdHJhY2Vwb2ludF9zdHJpbmcgPSB7XFxuIFxcdFtJUElfUkVTQ0hFRFVMRV1cXHQ9IFxcXCJSZXNjaGVkdWxpbmcgaW50ZXJydXB0c1xcXCIsXFxuIFxcdFtJUElfQ0FMTF9GVU5DXVxcdFxcdD0gXFxcIkZ1bmN0aW9uIGNhbGwgaW50ZXJydXB0c1xcXCIsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0va2FzYW5faW5pdC5jIGIvYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmNcXG5pbmRleCAzZmNhZDk1NmZkZjdjYi4uYThlMjcyYmZlZmUxYTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmNcXG4rKysgYi9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuY1xcbkBAIC02MCwxMyArNjAsMTQgQEAgc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBrYXNhbl9hbGxvY19yYXdfcGFnZShpbnQgbm9kZSlcXG4gfVxcbiBcXG4gc3RhdGljIHB0ZV90ICpfX2luaXQga2FzYW5fcHRlX29mZnNldChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgYm9vbCBlYXJseSlcXG4rXFx0XFx0XFx0XFx0ICAgICAgYm9vbCBlYXJseSwgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0aWYgKHBtZF9ub25lKFJFQURfT05DRSgqcG1kcCkpKSB7XFxuIFxcdFxcdHBoeXNfYWRkcl90IHB0ZV9waHlzID0gZWFybHkgP1xcbiBcXHRcXHRcXHRcXHRfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcHRlKVxcbiBcXHRcXHRcXHRcXHRcXHQ6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpO1xcbiBcXHRcXHRfX3BtZF9wb3B1bGF0ZShwbWRwLCBwdGVfcGh5cywgUE1EX1RZUEVfVEFCTEUpO1xcbitcXHRcXHQqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBlYXJseSA/IHB0ZV9vZmZzZXRfa2ltZyhwbWRwLCBhZGRyKVxcbkBAIC03NCw0OSArNzUsNTMgQEAgc3RhdGljIHB0ZV90ICpfX2luaXQga2FzYW5fcHRlX29mZnNldChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcXG4gfVxcbiBcXG4gc3RhdGljIHBtZF90ICpfX2luaXQga2FzYW5fcG1kX29mZnNldChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgYm9vbCBlYXJseSlcXG4rXFx0XFx0XFx0XFx0ICAgICAgYm9vbCBlYXJseSwgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0aWYgKHB1ZF9ub25lKFJFQURfT05DRSgqcHVkcCkpKSB7XFxuIFxcdFxcdHBoeXNfYWRkcl90IHBtZF9waHlzID0gZWFybHkgP1xcbiBcXHRcXHRcXHRcXHRfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcG1kKVxcbiBcXHRcXHRcXHRcXHRcXHQ6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpO1xcbiBcXHRcXHRfX3B1ZF9wb3B1bGF0ZShwdWRwLCBwbWRfcGh5cywgUFVEX1RZUEVfVEFCTEUpO1xcbitcXHRcXHQqbWFzayB8PSBQR1RCTF9QVURfTU9ESUZJRUQ7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBlYXJseSA/IHBtZF9vZmZzZXRfa2ltZyhwdWRwLCBhZGRyKSA6IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XFxuIH1cXG4gXFxuIHN0YXRpYyBwdWRfdCAqX19pbml0IGthc2FuX3B1ZF9vZmZzZXQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGJvb2wgZWFybHkpXFxuK1xcdFxcdFxcdFxcdCAgICAgIGJvb2wgZWFybHksIHBndGJsX21vZF9tYXNrICptYXNrKVxcbiB7XFxuIFxcdGlmIChwNGRfbm9uZShSRUFEX09OQ0UoKnA0ZHApKSkge1xcbiBcXHRcXHRwaHlzX2FkZHJfdCBwdWRfcGh5cyA9IGVhcmx5ID9cXG4gXFx0XFx0XFx0XFx0X19wYV9zeW1ib2woa2FzYW5fZWFybHlfc2hhZG93X3B1ZClcXG4gXFx0XFx0XFx0XFx0XFx0OiBrYXNhbl9hbGxvY196ZXJvZWRfcGFnZShub2RlKTtcXG4gXFx0XFx0X19wNGRfcG9wdWxhdGUocDRkcCwgcHVkX3BoeXMsIFA0RF9UWVBFX1RBQkxFKTtcXG4rXFx0XFx0Km1hc2sgfD0gUEdUQkxfUDREX01PRElGSUVEO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZWFybHkgPyBwdWRfb2Zmc2V0X2tpbWcocDRkcCwgYWRkcikgOiBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgcDRkX3QgKl9faW5pdCBrYXNhbl9wNGRfb2Zmc2V0KHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlLFxcbi1cXHRcXHRcXHRcXHQgICAgICBib29sIGVhcmx5KVxcbitcXHRcXHRcXHRcXHQgICAgICBib29sIGVhcmx5LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4ge1xcbiBcXHRpZiAocGdkX25vbmUoUkVBRF9PTkNFKCpwZ2RwKSkpIHtcXG4gXFx0XFx0cGh5c19hZGRyX3QgcDRkX3BoeXMgPSBlYXJseSA/XFxuIFxcdFxcdFxcdFxcdF9fcGFfc3ltYm9sKGthc2FuX2Vhcmx5X3NoYWRvd19wNGQpXFxuIFxcdFxcdFxcdFxcdFxcdDoga2FzYW5fYWxsb2NfemVyb2VkX3BhZ2Uobm9kZSk7XFxuIFxcdFxcdF9fcGdkX3BvcHVsYXRlKHBnZHAsIHA0ZF9waHlzLCBQR0RfVFlQRV9UQUJMRSk7XFxuK1xcdFxcdCptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGVhcmx5ID8gcDRkX29mZnNldF9raW1nKHBnZHAsIGFkZHIpIDogcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbi1cXHRwdGVfdCAqcHRlcCA9IGthc2FuX3B0ZV9vZmZzZXQocG1kcCwgYWRkciwgbm9kZSwgZWFybHkpO1xcbitcXHRwdGVfdCAqcHRlcCA9IGthc2FuX3B0ZV9vZmZzZXQocG1kcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRwaHlzX2FkZHJfdCBwYWdlX3BoeXMgPSBlYXJseSA/XFxuQEAgLTEzMCwzOCArMTM1LDQxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wdGVfcG9wdWxhdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BtZF9wb3B1bGF0ZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbi1cXHRwbWRfdCAqcG1kcCA9IGthc2FuX3BtZF9vZmZzZXQocHVkcCwgYWRkciwgbm9kZSwgZWFybHkpO1xcbitcXHRwbWRfdCAqcG1kcCA9IGthc2FuX3BtZF9vZmZzZXQocHVkcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuLVxcdFxcdGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7XFxuK1xcdFxcdGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgbWFzayk7XFxuIFxcdH0gd2hpbGUgKHBtZHArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kIFxcdTAwMjZcXHUwMDI2IHBtZF9ub25lKFJFQURfT05DRSgqcG1kcCkpKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3B1ZF9wb3B1bGF0ZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbi1cXHRwdWRfdCAqcHVkcCA9IGthc2FuX3B1ZF9vZmZzZXQocDRkcCwgYWRkciwgbm9kZSwgZWFybHkpO1xcbitcXHRwdWRfdCAqcHVkcCA9IGthc2FuX3B1ZF9vZmZzZXQocDRkcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuLVxcdFxcdGthc2FuX3BtZF9wb3B1bGF0ZShwdWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7XFxuK1xcdFxcdGthc2FuX3BtZF9wb3B1bGF0ZShwdWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgbWFzayk7XFxuIFxcdH0gd2hpbGUgKHB1ZHArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kIFxcdTAwMjZcXHUwMDI2IHB1ZF9ub25lKFJFQURfT05DRSgqcHVkcCkpKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbi1cXHRwNGRfdCAqcDRkcCA9IGthc2FuX3A0ZF9vZmZzZXQocGdkcCwgYWRkciwgbm9kZSwgZWFybHkpO1xcbitcXHRwNGRfdCAqcDRkcCA9IGthc2FuX3A0ZF9vZmZzZXQocGdkcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXh0ID0gcDRkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuLVxcdFxcdGthc2FuX3B1ZF9wb3B1bGF0ZShwNGRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7XFxuK1xcdFxcdGthc2FuX3B1ZF9wb3B1bGF0ZShwNGRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgbWFzayk7XFxuIFxcdH0gd2hpbGUgKHA0ZHArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kIFxcdTAwMjZcXHUwMDI2IHA0ZF9ub25lKFJFQURfT05DRSgqcDRkcCkpKTtcXG4gfVxcbiBcXG5AQCAtMTcwLDEyICsxNzgsMTcgQEAgc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BnZF9wb3B1bGF0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG4gXFx0cGdkX3QgKnBnZHA7XFxuK1xcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcXG4gXFxuIFxcdHBnZHAgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7XFxuIFxcdGRvIHtcXG4gXFx0XFx0bmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbi1cXHRcXHRrYXNhbl9wNGRfcG9wdWxhdGUocGdkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHkpO1xcbitcXHRcXHRrYXNhbl9wNGRfcG9wdWxhdGUocGdkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHksIFxcdTAwMjZtYXNrKTtcXG4gXFx0fSB3aGlsZSAocGdkcCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xcbitcXG4rXFx0aWYgKG1hc2sgXFx1MDAyNiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLKVxcbitcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xcbiB9XFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNjRLX1BBR0VTKSB8fCBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSA0XFxuQEAgLTMxMSw3ICszMjQsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2FzYW5faW5pdF9zaGFkb3codm9pZClcXG4gXFxuIFxcdG1vZF9zaGFkb3dfc3RhcnQgPSAodTY0KWthc2FuX21lbV90b19zaGFkb3coKHZvaWQgKilNT0RVTEVTX1ZBRERSKTtcXG4gXFxuLVxcdHZtYWxsb2Nfc2hhZG93X2VuZCA9ICh1NjQpa2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKVZNQUxMT0NfRU5EKTtcXG4rXFx0dm1hbGxvY19zaGFkb3dfZW5kID0gKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopTE9DQUxfUEVSQ1BVX0VORCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBXZSBhcmUgZ29pbmcgdG8gcGVyZm9ybSBwcm9wZXIgc2V0dXAgb2Ygc2hhZG93IG1lbW9yeS5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcXG5pbmRleCBmMmJlNTAxNDY4Y2U1YS4uZWU0YWIwMzFlYmY4ZDcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9tbS9tbXUuY1xcbisrKyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcXG5AQCAtNjcsNiArNjcsNjMgQEAgbG9uZyBfX3NlY3Rpb24oXFxcIi5tbXVvZmYuZGF0YS53cml0ZVxcXCIpIF9fZWFybHlfY3B1X2Jvb3Rfc3RhdHVzO1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN3YXBwZXJfcGdkaXJfbG9jayk7XFxuIHN0YXRpYyBERUZJTkVfTVVURVgoZml4bWFwX2xvY2spO1xcbiBcXG4rcGdkX3QgKnBlcmNwdV9wZ2RbTlJfQ1BVU10gX19yb19hZnRlcl9pbml0O1xcbitib29sIHBlcmNwdV9wZ2Rfc2V0dXBfZG9uZSBfX3JvX2FmdGVyX2luaXQgPSBmYWxzZTtcXG4rXFxuK3ZvaWQgX19pbml0IHNldHVwX3BlcmNwdV9wZ2Qodm9pZClcXG4re1xcbitcXHRpbnQgY3B1O1xcbitcXG4rXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbitcXHRcXHR2b2lkICphZGRyO1xcbitcXG4rXFx0XFx0aWYgKGNwdSA9PSAwKSB7XFxuK1xcdFxcdFxcdHBlcmNwdV9wZ2RbY3B1XSA9IHN3YXBwZXJfcGdfZGlyO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcXG4rXFx0XFx0aWYgKCFhZGRyKVxcbitcXHRcXHRcXHRwYW5pYyhcXFwiQ2FuJ3QgYWxsb2MgcGVyY3B1IHBnZFxcXFxuXFxcIik7XFxuK1xcbitcXHRcXHRtZW1jcHkoYWRkciwgKHZvaWQgKilzd2FwcGVyX3BnX2RpciwgUEFHRV9TSVpFKTtcXG4rXFx0XFx0cGVyY3B1X3BnZFtjcHVdID0gKHBnZF90ICopYWRkcjtcXG4rXFx0fVxcbitcXG4rXFx0ZHNiKGlzaHN0KTtcXG4rXFxuK1xcdHBlcmNwdV9wZ2Rfc2V0dXBfZG9uZSA9IHRydWU7XFxuK31cXG4rXFxuK3ZvaWQgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGFkZHIsIG5leHQ7XFxuK1xcdGludCBjcHU7XFxuK1xcdHBnZF90ICpwZ2RwID0gcGdkX29mZnNldF9rKHN0YXJ0KTtcXG4rXFx0cGdkX3QgcGdkO1xcbitcXHR1bnNpZ25lZCBpbnQgaW5kZXggPSBwZ2RfaW5kZXgoc3RhcnQpO1xcbitcXG4rXFx0QlVHX09OKHN0YXJ0IFxcdTAwM2UgZW5kKTtcXG4rXFxuK1xcdGlmICghcGVyY3B1X3BnZF9zZXR1cF9kb25lKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBEb24ndCBzeW5jIGxvY2FsIHBlcmNwdSBhcmVhIHBhZ2UgdGFibGUgKi9cXG4rXFx0aWYgKHN0YXJ0IFxcdTAwM2U9IExPQ0FMX1BFUkNQVV9TVEFSVCBcXHUwMDI2XFx1MDAyNiBlbmQgXFx1MDAzYyBMT0NBTF9QRVJDUFVfRU5EKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRhZGRyID0gc3RhcnQ7XFxuK1xcdGRvIHtcXG4rXFx0XFx0cGdkID0gUkVBRF9PTkNFKCpwZ2RwKTtcXG4rXFx0XFx0bmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbitcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuK1xcdFxcdFxcdGlmIChjcHUgPT0gMClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdHNldF9wZ2QocGVyY3B1X3BnZFtjcHVdICsgaW5kZXgsIHBnZCk7XFxuK1xcdFxcdH1cXG4rXFx0fSB3aGlsZSAocGdkcCsrLCBpbmRleCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xcbit9XFxuK1xcbiB2b2lkIG5vaW5zdHIgc2V0X3N3YXBwZXJfcGdkKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QpXFxuIHtcXG4gXFx0cGdkX3QgKmZpeG1hcF9wZ2RwO1xcbkBAIC0xNjEsNyArMjE4LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9jbGVhcl9wZ3RhYmxlKHZvaWQgKnRhYmxlKVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpbml0X3B0ZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tXFx0XFx0ICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90KVxcbitcXHRcXHQgICAgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QsIHBndGJsX21vZF9tYXNrICptYXNrKVxcbiB7XFxuIFxcdGRvIHtcXG4gXFx0XFx0cHRlX3Qgb2xkX3B0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XFxuQEAgLTE3MSw2ICsyMjgsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3B0ZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0ICogYXJlIGRlZmVycmVkIHRvIHRoZSBlbmQgb2YgYWxsb2NfaW5pdF9jb250X3B0ZSgpLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0X19zZXRfcHRlX25vc3luYyhwdGVwLCBwZm5fcHRlKF9fcGh5c190b19wZm4ocGh5cyksIHByb3QpKTtcXG4rXFx0XFx0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQWZ0ZXIgdGhlIFBURSBlbnRyeSBoYXMgYmVlbiBwb3B1bGF0ZWQgb25jZSwgd2VcXG5AQCAtMTk4LDcgKzI1Niw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXMsXFxuIFxcdFxcdFxcdCAgICAgICBwZ3Byb3RfdCBwcm90LFxcbiBcXHRcXHRcXHQgICAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxcbi1cXHRcXHRcXHQgICAgICAgaW50IGZsYWdzKVxcbitcXHRcXHRcXHQgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxuIFxcdHBtZF90IHBtZCA9IFJFQURfT05DRSgqcG1kcCk7XFxuQEAgLTIxOSw2ICsyNzcsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0aW5pdF9jbGVhcl9wZ3RhYmxlKHB0ZXApO1xcbiBcXHRcXHRwdGVwICs9IHB0ZV9pbmRleChhZGRyKTtcXG4gXFx0XFx0X19wbWRfcG9wdWxhdGUocG1kcCwgcHRlX3BoeXMsIHBtZHZhbCk7XFxuK1xcdFxcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0QlVHX09OKHBtZF9iYWQocG1kKSk7XFxuIFxcdFxcdHB0ZXAgPSBwdGVfc2V0X2ZpeG1hcF9vZmZzZXQocG1kcCwgYWRkcik7XFxuQEAgLTIzNSw3ICsyOTQsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0ICAgICFwdGVfcmFuZ2VfaGFzX3ZhbGlkX25vbmNvbnQocHRlcCkpXFxuIFxcdFxcdFxcdF9fcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7XFxuIFxcbi1cXHRcXHRpbml0X3B0ZShwdGVwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QpO1xcbitcXHRcXHRpbml0X3B0ZShwdGVwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsIG1hc2spO1xcbiBcXG4gXFx0XFx0cHRlcCArPSBwdGVfaW5kZXgobmV4dCkgLSBwdGVfaW5kZXgoYWRkcik7XFxuIFxcdFxcdHBoeXMgKz0gbmV4dCAtIGFkZHI7XFxuQEAgLTI1Myw3ICszMTIsOCBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFxuIHN0YXRpYyBpbnQgaW5pdF9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdCAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LFxcbi1cXHRcXHQgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLCBpbnQgZmxhZ3MpXFxuK1xcdFxcdCAgICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksIGludCBmbGFncyxcXG4rXFx0XFx0ICAgIHBndGJsX21vZF9tYXNrICptYXNrKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG4gXFxuQEAgLTI2Niw3ICszMjYsMTAgQEAgc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0aWYgKCgoYWRkciB8IG5leHQgfCBwaHlzKSBcXHUwMDI2IH5QTURfTUFTSykgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgKGZsYWdzIFxcdTAwMjYgTk9fQkxPQ0tfTUFQUElOR1MpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFwbWRfdGFibGUob2xkX3BtZCkpIHtcXG4tXFx0XFx0XFx0V0FSTl9PTighcG1kX3NldF9odWdlKHBtZHAsIHBoeXMsIHByb3QpKTtcXG4rXFx0XFx0XFx0aWYgKHBtZF9zZXRfaHVnZShwbWRwLCBwaHlzLCBwcm90KSlcXG4rXFx0XFx0XFx0XFx0Km1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdFdBUk5fT04oMSk7XFxuIFxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBBZnRlciB0aGUgUE1EIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZVxcbkBAIC0yNzgsNyArMzQxLDcgQEAgc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdFxcdHJldCA9IGFsbG9jX2luaXRfY29udF9wdGUocG1kcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgcGd0YWJsZV9hbGxvYywgZmxhZ3MsIG1hc2spO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMzA2LDcgKzM2OSw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3BtZChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXMsXFxuIFxcdFxcdFxcdCAgICAgICBwZ3Byb3RfdCBwcm90LFxcbiBcXHRcXHRcXHQgICAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxcbi1cXHRcXHRcXHQgICAgICAgaW50IGZsYWdzKVxcbitcXHRcXHRcXHQgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxuQEAgLTMzMSw2ICszOTQsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wbWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0aW5pdF9jbGVhcl9wZ3RhYmxlKHBtZHApO1xcbiBcXHRcXHRwbWRwICs9IHBtZF9pbmRleChhZGRyKTtcXG4gXFx0XFx0X19wdWRfcG9wdWxhdGUocHVkcCwgcG1kX3BoeXMsIHB1ZHZhbCk7XFxuK1xcdFxcdCptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0QlVHX09OKHB1ZF9iYWQocHVkKSk7XFxuIFxcdFxcdHBtZHAgPSBwbWRfc2V0X2ZpeG1hcF9vZmZzZXQocHVkcCwgYWRkcik7XFxuQEAgLTM0Nyw3ICs0MTEsOCBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wbWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0ICAgICFwbWRfcmFuZ2VfaGFzX3ZhbGlkX25vbmNvbnQocG1kcCkpXFxuIFxcdFxcdFxcdF9fcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7XFxuIFxcbi1cXHRcXHRyZXQgPSBpbml0X3BtZChwbWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsIHBndGFibGVfYWxsb2MsIGZsYWdzKTtcXG4rXFx0XFx0cmV0ID0gaW5pdF9wbWQocG1kcCwgYWRkciwgbmV4dCwgcGh5cywgX19wcm90LCBwZ3RhYmxlX2FsbG9jLCBmbGFncyxcXG4rXFx0XFx0XFx0ICAgICAgIG1hc2spO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTM2NCw3ICs0MjksNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wbWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gc3RhdGljIGludCBhbGxvY19pbml0X3B1ZChwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0ICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LFxcbiBcXHRcXHRcXHQgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSxcXG4tXFx0XFx0XFx0ICBpbnQgZmxhZ3MpXFxuK1xcdFxcdFxcdCAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4ge1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbkBAIC0zODUsNiArNDUwLDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X3B1ZChwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0aW5pdF9jbGVhcl9wZ3RhYmxlKHB1ZHApO1xcbiBcXHRcXHRwdWRwICs9IHB1ZF9pbmRleChhZGRyKTtcXG4gXFx0XFx0X19wNGRfcG9wdWxhdGUocDRkcCwgcHVkX3BoeXMsIHA0ZHZhbCk7XFxuK1xcdFxcdCptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0QlVHX09OKHA0ZF9iYWQocDRkKSk7XFxuIFxcdFxcdHB1ZHAgPSBwdWRfc2V0X2ZpeG1hcF9vZmZzZXQocDRkcCwgYWRkcik7XFxuQEAgLTQwMiw3ICs0NjgsMTAgQEAgc3RhdGljIGludCBhbGxvY19pbml0X3B1ZChwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0ICAgKChhZGRyIHwgbmV4dCB8IHBoeXMpIFxcdTAwMjYgflBVRF9NQVNLKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAoZmxhZ3MgXFx1MDAyNiBOT19CTE9DS19NQVBQSU5HUykgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIXB1ZF90YWJsZShvbGRfcHVkKSkge1xcbi1cXHRcXHRcXHRXQVJOX09OKCFwdWRfc2V0X2h1Z2UocHVkcCwgcGh5cywgcHJvdCkpO1xcbitcXHRcXHRcXHRpZiAocHVkX3NldF9odWdlKHB1ZHAsIHBoeXMsIHByb3QpKVxcbitcXHRcXHRcXHRcXHQqbWFzayB8PSBQR1RCTF9QVURfTU9ESUZJRUQ7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0V0FSTl9PTigxKTtcXG4gXFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIEFmdGVyIHRoZSBQVUQgZW50cnkgaGFzIGJlZW4gcG9wdWxhdGVkIG9uY2UsIHdlXFxuQEAgLTQxMiw3ICs0ODEsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBSRUFEX09OQ0UocHVkX3ZhbCgqcHVkcCkpKSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHJldCA9IGFsbG9jX2luaXRfY29udF9wbWQocHVkcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgcGd0YWJsZV9hbGxvYywgZmxhZ3MsIG1hc2spO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTQzMSw3ICs1MDAsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBzdGF0aWMgaW50IGFsbG9jX2luaXRfcDRkKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHQgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QsXFxuIFxcdFxcdFxcdCAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxcbi1cXHRcXHRcXHQgIGludCBmbGFncylcXG4rXFx0XFx0XFx0ICBpbnQgZmxhZ3MsIHBndGJsX21vZF9tYXNrICptYXNrKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG5AQCAtNDUyLDYgKzUyMSw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wNGQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdGluaXRfY2xlYXJfcGd0YWJsZShwNGRwKTtcXG4gXFx0XFx0cDRkcCArPSBwNGRfaW5kZXgoYWRkcik7XFxuIFxcdFxcdF9fcGdkX3BvcHVsYXRlKHBnZHAsIHA0ZF9waHlzLCBwZ2R2YWwpO1xcbitcXHRcXHQqbWFzayB8PSBQR1RCTF9QR0RfTU9ESUZJRUQ7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdEJVR19PTihwZ2RfYmFkKHBnZCkpO1xcbiBcXHRcXHRwNGRwID0gcDRkX3NldF9maXhtYXBfb2Zmc2V0KHBnZHAsIGFkZHIpO1xcbkBAIC00NjMsNyArNTMzLDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X3A0ZChwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0bmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbiBcXG4gXFx0XFx0cmV0ID0gYWxsb2NfaW5pdF9wdWQocDRkcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCxcXG4tXFx0XFx0XFx0XFx0ICAgICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdCAgICAgcGd0YWJsZV9hbGxvYywgZmxhZ3MsIG1hc2spO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTQ4Myw3ICs1NTMsNyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nX2xvY2tlZChwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHZpcnQsIHBoeXNfYWRkcl90IHNpemUsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBwZ3Byb3RfdCBwcm90LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgaW50IGZsYWdzKVxcbitcXHRcXHRcXHRcXHQgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHIsIGVuZCwgbmV4dDtcXG5AQCAtNTAzLDcgKzU3Myw3IEBAIHN0YXRpYyBpbnQgX19jcmVhdGVfcGdkX21hcHBpbmdfbG9ja2VkKHBnZF90ICpwZ2RpciwgcGh5c19hZGRyX3QgcGh5cyxcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuIFxcdFxcdHJldCA9IGFsbG9jX2luaXRfcDRkKHBnZHAsIGFkZHIsIG5leHQsIHBoeXMsIHByb3QsIHBndGFibGVfYWxsb2MsXFxuLVxcdFxcdFxcdFxcdCAgICAgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHQgICAgIGZsYWdzLCBtYXNrKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0cGh5cyArPSBuZXh0IC0gYWRkcjtcXG5AQCAtNTE2LDEzICs1ODYsMTMgQEAgc3RhdGljIGludCBfX2NyZWF0ZV9wZ2RfbWFwcGluZyhwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsXFxuIFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgdmlydCwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0cGdwcm90X3QgcHJvdCxcXG4gXFx0XFx0XFx0XFx0cGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxcbi1cXHRcXHRcXHRcXHRpbnQgZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmZpeG1hcF9sb2NrKTtcXG4gXFx0cmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmdfbG9ja2VkKHBnZGlyLCBwaHlzLCB2aXJ0LCBzaXplLCBwcm90LFxcbi1cXHRcXHRcXHRcXHRcXHQgIHBndGFibGVfYWxsb2MsIGZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2Zml4bWFwX2xvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtNTM1LDkgKzYwNSwxMCBAQCBzdGF0aWMgdm9pZCBlYXJseV9jcmVhdGVfcGdkX21hcHBpbmcocGdkX3QgKnBnZGlyLCBwaHlzX2FkZHJfdCBwaHlzLFxcbiBcXHRcXHRcXHRcXHQgICAgIGludCBmbGFncylcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbitcXHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcXG4gXFxuIFxcdHJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHBnZGlyLCBwaHlzLCB2aXJ0LCBzaXplLCBwcm90LCBwZ3RhYmxlX2FsbG9jLFxcbi1cXHRcXHRcXHRcXHQgICBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdCAgIGZsYWdzLCBcXHUwMDI2bWFzayk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHBhbmljKFxcXCJGYWlsZWQgdG8gY3JlYXRlIHBhZ2UgdGFibGVzXFxcXG5cXFwiKTtcXG4gfVxcbkBAIC0xMDA5LDYgKzEwODAsMjkgQEAgdm9pZCBfX2luaXQgbGluZWFyX21hcF9tYXliZV9zcGxpdF90b19wdGVzKHZvaWQpXFxuIFxcdH1cXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXFxuK3ZvaWQgX19pbml0IG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKVxcbit7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xcbitcXG4rXFx0YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnI7IGkrKykge1xcbitcXHRcXHRwaHlzX2FkZHJfdCBwaHlzID0gcGFnZV90b19waHlzKHBhZ2VzW2ldKTtcXG4rXFx0XFx0cmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmcocGVyY3B1X3BnZFtjcHVdLCBwaHlzLCB2aXJ0LCBQQUdFX1NJWkUsIFBBR0VfS0VSTkVMLFxcbitcXHRcXHRcXHRcXHRcXHQgICBlYXJseV9wZ3RhYmxlX2FsbG9jLCBOT19FWEVDX01BUFBJTkdTLCBcXHUwMDI2bWFzayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHBhbmljKFxcXCJGYWlsZWQgdG8gY3JlYXRlIGxvY2FsIHBlcmNwdSBmaXJzdCBjaHVua1xcXFxuXFxcIik7XFxuK1xcbitcXHRcXHR2aXJ0ICs9IFBBR0VfU0laRTtcXG4rXFx0fVxcbitcXG4rXFx0YXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKlxcbiAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgdG8gbW9kaWZ5IGV4aXN0aW5nIHRhYmxlIGVudHJpZXMsXFxuICAqIHdpdGhvdXQgYWxsb2NhdGluZyBuZXcgbGV2ZWxzIG9mIHRhYmxlLiBOb3RlIHRoYXQgdGhpcyBwZXJtaXRzIHRoZVxcbkBAIC0xMjc5LDYgKzEzNzMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX2twdGlfaW5zdGFsbF9uZ19tYXBwaW5ncyh2b2lkICpfX3VudXNlZClcXG4gXFxuIFxcdGlmICghY3B1KSB7XFxuIFxcdFxcdGludCByZXQ7XFxuK1xcdFxcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xcbiBcXG4gXFx0XFx0YWxsb2MgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMgfCBfX0dGUF9aRVJPLCBvcmRlcik7XFxuIFxcdFxcdGtwdGlfbmdfdGVtcF9wZ2QgPSAocGdkX3QgKikoYWxsb2MgKyAobGV2ZWxzIC0gMSkgKiBQQUdFX1NJWkUpO1xcbkBAIC0xMzAyLDcgKzEzOTcsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX2twdGlfaW5zdGFsbF9uZ19tYXBwaW5ncyh2b2lkICpfX3VudXNlZClcXG4gXFx0XFx0Ly9cXG4gXFx0XFx0cmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmdfbG9ja2VkKGtwdGlfbmdfdGVtcF9wZ2QsIF9fcGEoYWxsb2MpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIEtQVElfTkdfVEVNUF9WQSwgUEFHRV9TSVpFLCBQQUdFX0tFUk5FTCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBrcHRpX25nX3BnZF9hbGxvYywgMCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAga3B0aV9uZ19wZ2RfYWxsb2MsIDAsIFxcdTAwMjZtYXNrKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cGFuaWMoXFxcIkZhaWxlZCB0byBjcmVhdGUgcGFnZSB0YWJsZXNcXFxcblxcXCIpO1xcbiBcXHR9XFxuQEAgLTE2MDgsNyArMTcwMyw3IEBAIHN0YXRpYyB2b2lkIHVubWFwX2hvdHBsdWdfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFxuIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHRlX3RhYmxlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcXG4tXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZylcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0cHRlX3QgKnB0ZXAsIHB0ZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBpLCBzdGFydCA9IGFkZHI7XFxuQEAgLTE2MjQsNiArMTcxOSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHRlX3RhYmxlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFdBUk5fT04oIXB0ZV9ub25lKHB0ZSkpO1xcbiBcXHR9IHdoaWxlIChhZGRyICs9IFBBR0VfU0laRSwgYWRkciBcXHUwMDNjIGVuZCk7XFxuIFxcbitcXHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XFxuIFxcdGlmICghcGd0YWJsZV9yYW5nZV9hbGlnbmVkKHN0YXJ0LCBlbmQsIGZsb29yLCBjZWlsaW5nLCBQTURfTUFTSykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTE2MzksMTMgKzE3MzUsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0fVxcbiBcXG4gXFx0cG1kX2NsZWFyKHBtZHApO1xcbitcXHQqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7XFxuIFxcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKHN0YXJ0KTtcXG4gXFx0ZnJlZV9ob3RwbHVnX3BndGFibGVfcGFnZSh2aXJ0X3RvX3BhZ2UocHRlcCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgZmxvb3IsXFxuLVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcpXFxuK1xcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcsIHBndGJsX21vZF9tYXNrICptYXNrKVxcbiB7XFxuIFxcdHBtZF90ICpwbWRwLCBwbWQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaSwgbmV4dCwgc3RhcnQgPSBhZGRyO1xcbkBAIC0xNjU4LDcgKzE3NTUsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFdBUk5fT04oIXBtZF9wcmVzZW50KHBtZCkgfHwgIXBtZF90YWJsZShwbWQpKTtcXG4tXFx0XFx0ZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcpO1xcbitcXHRcXHRmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRwLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZywgbWFzayk7XFxuIFxcdH0gd2hpbGUgKGFkZHIgPSBuZXh0LCBhZGRyIFxcdTAwM2MgZW5kKTtcXG4gXFxuIFxcdGlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgXFx1MDAzYz0gMilcXG5AQCAtMTY3OSwxMyArMTc3NiwxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHR9XFxuIFxcbiBcXHRwdWRfY2xlYXIocHVkcCk7XFxuK1xcdCptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDtcXG4gXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoc3RhcnQpO1xcbiBcXHRmcmVlX2hvdHBsdWdfcGd0YWJsZV9wYWdlKHZpcnRfdG9fcGFnZShwbWRwKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHVkX3RhYmxlKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcXG4tXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZylcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0cHVkX3QgKnB1ZHAsIHB1ZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBpLCBuZXh0LCBzdGFydCA9IGFkZHI7XFxuQEAgLTE2OTgsNyArMTc5Niw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHVkX3RhYmxlKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0V0FSTl9PTighcHVkX3ByZXNlbnQocHVkKSB8fCAhcHVkX3RhYmxlKHB1ZCkpO1xcbi1cXHRcXHRmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRwLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZyk7XFxuK1xcdFxcdGZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nLCBtYXNrKTtcXG4gXFx0fSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgXFx1MDAzYyBlbmQpO1xcbiBcXG4gXFx0aWYgKCFwZ3RhYmxlX2w0X2VuYWJsZWQoKSlcXG5AQCAtMTcxOSwxMyArMTgxNywxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B1ZF90YWJsZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHR9XFxuIFxcbiBcXHRwNGRfY2xlYXIocDRkcCk7XFxuK1xcdCptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDtcXG4gXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoc3RhcnQpO1xcbiBcXHRmcmVlX2hvdHBsdWdfcGd0YWJsZV9wYWdlKHZpcnRfdG9fcGFnZShwdWRwKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcXG4tXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZylcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0cDRkX3QgKnA0ZHAsIHA0ZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBpLCBuZXh0LCBzdGFydCA9IGFkZHI7XFxuQEAgLTE3MzgsNyArMTgzNyw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0V0FSTl9PTighcDRkX3ByZXNlbnQocDRkKSk7XFxuLVxcdFxcdGZyZWVfZW1wdHlfcHVkX3RhYmxlKHA0ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTtcXG4rXFx0XFx0ZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIG1hc2spO1xcbiBcXHR9IHdoaWxlIChhZGRyID0gbmV4dCwgYWRkciBcXHUwMDNjIGVuZCk7XFxuIFxcbiBcXHRpZiAoIXBndGFibGVfbDVfZW5hYmxlZCgpKVxcbkBAIC0xNzU5LDYgKzE4NTgsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3A0ZF90YWJsZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHR9XFxuIFxcbiBcXHRwZ2RfY2xlYXIocGdkcCk7XFxuK1xcdCptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcXG4gXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoc3RhcnQpO1xcbiBcXHRmcmVlX2hvdHBsdWdfcGd0YWJsZV9wYWdlKHZpcnRfdG9fcGFnZShwNGRwKSk7XFxuIH1cXG5AQCAtMTc2OCw2ICsxODY4LDggQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV90YWJsZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxuIFxcdHBnZF90ICpwZ2RwLCBwZ2Q7XFxuK1xcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0bmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbkBAIC0xNzc3LDggKzE4NzksMTEgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV90YWJsZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRXQVJOX09OKCFwZ2RfcHJlc2VudChwZ2QpKTtcXG4tXFx0XFx0ZnJlZV9lbXB0eV9wNGRfdGFibGUocGdkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcpO1xcbitcXHRcXHRmcmVlX2VtcHR5X3A0ZF90YWJsZShwZ2RwLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZywgXFx1MDAyNm1hc2spO1xcbiBcXHR9IHdoaWxlIChhZGRyID0gbmV4dCwgYWRkciBcXHUwMDNjIGVuZCk7XFxuK1xcbitcXHRpZiAobWFzayBcXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXFxuK1xcdFxcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIGVuZCk7XFxuIH1cXG4gI2VuZGlmXFxuIFxcbkBAIC0xOTg2LDYgKzIwOTEsNyBAQCBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuIFxcdFxcdCAgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuIFxcdGludCByZXQsIGZsYWdzID0gTk9fRVhFQ19NQVBQSU5HUztcXG4rXFx0cGd0YmxfbW9kX21hc2sgbWFzayA9IDA7XFxuIFxcbiBcXHRWTV9CVUdfT04oIW1ocF9yYW5nZV9hbGxvd2VkKHN0YXJ0LCBzaXplLCB0cnVlKSk7XFxuIFxcbkBAIC0xOTk0LDEwICsyMTAwLDEzIEBAIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4gXFxuIFxcdHJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHN3YXBwZXJfcGdfZGlyLCBzdGFydCwgX19waHlzX3RvX3ZpcnQoc3RhcnQpLFxcbiBcXHRcXHRcXHRcXHQgICBzaXplLCBwYXJhbXMtXFx1MDAzZXBncHJvdCwgcGdkX3BndGFibGVfYWxsb2NfaW5pdF9tbSxcXG4tXFx0XFx0XFx0XFx0ICAgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHQgICBmbGFncywgXFx1MDAyNm1hc2spO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuK1xcdGlmIChtYXNrIFxcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcXG4rXFx0XFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgc3RhcnQgKyBzaXplKTtcXG4rXFxuIFxcdG1lbWJsb2NrX2NsZWFyX25vbWFwKHN0YXJ0LCBzaXplKTtcXG4gXFxuIFxcdHJldCA9IF9fYWRkX3BhZ2VzKG5pZCwgc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCwgc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xcbmluZGV4IDFjMjAxNDQ3MDBkN2Q3Li5kZDI5MzMxOTgyM2UzYyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXFxuKysrIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xcbkBAIC0zODksNiArMzg5LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IHB0ZHVtcF9pbml0KHZvaWQpXFxuIFxcdFxcdHsgTU9EVUxFU19FTkQsXFx0XFx0XFxcIk1vZHVsZXMgZW5kXFxcIiB9LFxcbiBcXHRcXHR7IFZNQUxMT0NfU1RBUlQsXFx0XFxcInZtYWxsb2MoKSBhcmVhXFxcIiB9LFxcbiBcXHRcXHR7IFZNQUxMT0NfRU5ELFxcdFxcdFxcXCJ2bWFsbG9jKCkgZW5kXFxcIiB9LFxcbitcXHRcXHR7IFBFUkNQVV9TVEFSVCxcXHRcXHRcXFwiR2xvYmFsIHBlcmNwdSBzdGFydFxcXCIgfSxcXG4rXFx0XFx0eyBQRVJDUFVfRU5ELFxcdFxcdFxcXCJHbG9iYWwgcGVyY3B1IGVuZFxcXCIgfSxcXG4rXFx0XFx0eyBMT0NBTF9QRVJDUFVfU1RBUlQsXFx0XFxcIkxvY2FsIHBlcmNwdSBzdGFydFxcXCIgfSxcXG4rXFx0XFx0eyBMT0NBTF9QRVJDUFVfRU5ELFxcdFxcXCJMb2NhbCBwZXJjcHUgZW5kXFxcIiB9LFxcbiBcXHRcXHR7IHZtZW1tYXBfc3RhcnQsXFx0XFxcInZtZW1tYXAgc3RhcnRcXFwiIH0sXFxuIFxcdFxcdHsgVk1FTU1BUF9FTkQsXFx0XFx0XFxcInZtZW1tYXAgZW5kXFxcIiB9LFxcbiBcXHRcXHR7IFBDSV9JT19TVEFSVCxcXHRcXHRcXFwiUENJIEkvTyBzdGFydFxcXCIgfSxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvc21wLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuY1xcbmluZGV4IGZhNjZmOWM5N2Q3NDhkLi5kNDIwZmY5ZGNmNGZjOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuY1xcbisrKyBiL2FyY2gvcmlzY3Yva2VybmVsL3NtcC5jXFxuQEAgLTM2NCwzICszNjQsNTQgQEAgdm9pZCBrZ2RiX3JvdW5kdXBfY3B1cyh2b2lkKVxcbiBcXHR9XFxuIH1cXG4gI2VuZGlmXFxuK1xcbisjaWZkZWYgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXFxuK2V4dGVybiBpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdO1xcbitcXG4rdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfb2Zmc2V0W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7XFxuK0VYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7XFxuK1xcbitpbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSlcXG4re1xcbitcXHRyZXR1cm4gY3B1X3RvX25vZGVfbWFwW2NwdV07XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IHBjcHVfY3B1X2Rpc3RhbmNlKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pXFxuK3tcXG4rXFx0cmV0dXJuIG5vZGVfZGlzdGFuY2UoZWFybHlfY3B1X3RvX25vZGUoZnJvbSksIGVhcmx5X2NwdV90b19ub2RlKHRvKSk7XFxuK31cXG4rXFxuK3ZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGRlbHRhO1xcbitcXHR1bnNpZ25lZCBpbnQgY3B1O1xcbitcXHRpbnQgcmMgPSAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHBjcHVfY2hvc2VuX2ZjICE9IFBDUFVfRkNfUEFHRSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBbHdheXMgcmVzZXJ2ZSBhcmVhIGZvciBtb2R1bGUgcGVyY3B1IHZhcmlhYmxlcy4gIFRoYXQnc1xcbitcXHRcXHQgKiB3aGF0IHRoZSBsZWdhY3kgYWxsb2NhdG9yIGRpZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJjID0gcGNwdV9lbWJlZF9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFLCBQQUdFX1NJWkUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBwY3B1X2NwdV9kaXN0YW5jZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGVhcmx5X2NwdV90b19ub2RlKTtcXG4rI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xcbitcXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgcGNwdV9mY19uYW1lc1twY3B1X2Nob3Nlbl9mY10sIHJjKTtcXG4rI2VuZGlmXFxuK1xcdH1cXG4rXFxuKyNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmMgPSBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLCBlYXJseV9jcHVfdG9fbm9kZSk7XFxuKyNlbmRpZlxcbitcXHRpZiAocmMgXFx1MDAzYyAwKVxcbitcXHRcXHRwYW5pYyhcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcGVyY3B1IGFyZWFzIChlcnI9JWQpLlxcXCIsIHJjKTtcXG4rXFxuK1xcdGRlbHRhID0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7XFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXFxuK1xcdFxcdF9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IGRlbHRhICsgcGNwdV91bml0X29mZnNldHNbY3B1XTtcXG4rfVxcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jIGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jXFxuaW5kZXggYzk5ZjJhYjEwNWU1YjcuLmIzYjkxY2VlZDZhOTBkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xcbisrKyBiL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xcbkBAIC0xNiw3ICsxNiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3NlY3Rpb25zLmhcXHUwMDNlXFxuIFxcbi1zdGF0aWMgaW50IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXSA9IHsgWzAgLi4uIE5SX0NQVVMtMV0gPSBOVU1BX05PX05PREUgfTtcXG4raW50IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXSA9IHsgWzAgLi4uIE5SX0NQVVMtMV0gPSBOVU1BX05PX05PREUgfTtcXG4gXFxuIGJvb2wgbnVtYV9vZmY7XFxuIFxcbkBAIC0xNDAsNTUgKzE0MCw2IEBAIHZvaWQgX19pbml0IGVhcmx5X21hcF9jcHVfdG9fbm9kZSh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgbmlkKVxcbiBcXHRcXHRzZXRfY3B1X251bWFfbm9kZShjcHUsIG5pZCk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcXG4tdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfb2Zmc2V0W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7XFxuLUVYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7XFxuLVxcbi1pbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSlcXG4te1xcbi1cXHRyZXR1cm4gY3B1X3RvX25vZGVfbWFwW2NwdV07XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgX19pbml0IHBjcHVfY3B1X2Rpc3RhbmNlKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pXFxuLXtcXG4tXFx0cmV0dXJuIG5vZGVfZGlzdGFuY2UoZWFybHlfY3B1X3RvX25vZGUoZnJvbSksIGVhcmx5X2NwdV90b19ub2RlKHRvKSk7XFxuLX1cXG4tXFxuLXZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcXG4te1xcbi1cXHR1bnNpZ25lZCBsb25nIGRlbHRhO1xcbi1cXHR1bnNpZ25lZCBpbnQgY3B1O1xcbi1cXHRpbnQgcmMgPSAtRUlOVkFMO1xcbi1cXG4tXFx0aWYgKHBjcHVfY2hvc2VuX2ZjICE9IFBDUFVfRkNfUEFHRSkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBBbHdheXMgcmVzZXJ2ZSBhcmVhIGZvciBtb2R1bGUgcGVyY3B1IHZhcmlhYmxlcy4gIFRoYXQnc1xcbi1cXHRcXHQgKiB3aGF0IHRoZSBsZWdhY3kgYWxsb2NhdG9yIGRpZC5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHJjID0gcGNwdV9lbWJlZF9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFLCBQQUdFX1NJWkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBwY3B1X2NwdV9kaXN0YW5jZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGVhcmx5X2NwdV90b19ub2RlKTtcXG4tI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xcbi1cXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgcGNwdV9mY19uYW1lc1twY3B1X2Nob3Nlbl9mY10sIHJjKTtcXG4tI2VuZGlmXFxuLVxcdH1cXG4tXFxuLSNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcXG4tXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4tXFx0XFx0cmMgPSBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLCBlYXJseV9jcHVfdG9fbm9kZSk7XFxuLSNlbmRpZlxcbi1cXHRpZiAocmMgXFx1MDAzYyAwKVxcbi1cXHRcXHRwYW5pYyhcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcGVyY3B1IGFyZWFzIChlcnI9JWQpLlxcXCIsIHJjKTtcXG4tXFxuLVxcdGRlbHRhID0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7XFxuLVxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXFxuLVxcdFxcdF9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IGRlbHRhICsgcGNwdV91bml0X29mZnNldHNbY3B1XTtcXG4tfVxcbi0jZW5kaWZcXG4tXFxuIC8qXFxuICAqIEluaXRpYWxpemUgTk9ERV9EQVRBIGZvciBhIG5vZGUgb24gdGhlIGxvY2FsIG1lbW9yeVxcbiAgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLmM4YzM4MDBmYmQ5ZmEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxcbkBAIC0xODU4LDYgKzE4NTgsMTcgQEAgdW5zaWduZWQgbG9uZyB2bWFsbG9jX3RvX3Bmbihjb25zdCB2b2lkICphZGRyKTtcXG4gI2lmZGVmIENPTkZJR19NTVVcXG4gZXh0ZXJuIGJvb2wgaXNfdm1hbGxvY19hZGRyKGNvbnN0IHZvaWQgKngpO1xcbiBleHRlcm4gaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCk7XFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGVyY3B1X2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdHJldHVybiBhZGRyIFxcdTAwM2U9IFBFUkNQVV9TVEFSVCBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwM2MgTE9DQUxfUEVSQ1BVX0VORDtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGVyY3B1X2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBib29sIGlzX3ZtYWxsb2NfYWRkcihjb25zdCB2b2lkICp4KVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oXFxuaW5kZXggNGYzNmI4NTg1OTk1YzUuLjVhMjcwMzFkZmYxYTVjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oXFxuQEAgLTc1LDYgKzc1LDggQEBcXG4gXFxuIGV4dGVybiB2b2lkICpwY3B1X2Jhc2VfYWRkcjtcXG4gZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnBjcHVfdW5pdF9vZmZzZXRzO1xcbisvKiBwZXJjcHUgbG9jYWwgbWFwcGluZyBiYXNlICovXFxuK2V4dGVybiB2b2lkICpwY3B1X2xvY2FsX2Jhc2U7XFxuIFxcbiBzdHJ1Y3QgcGNwdV9ncm91cF9pbmZvIHtcXG4gXFx0aW50XFx0XFx0XFx0bnJfdW5pdHM7XFx0LyogYWxpZ25lZCAjIG9mIHVuaXRzICovXFxuQEAgLTExNCw3ICsxMTYsNyBAQCBleHRlcm4gc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBwY3B1X2FsbG9jX2FsbG9jX2luZm8oaW50IG5yX2dyb3VwcyxcXG4gZXh0ZXJuIHZvaWQgX19pbml0IHBjcHVfZnJlZV9hbGxvY19pbmZvKHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpKTtcXG4gXFxuIGV4dGVybiB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLFxcbi1cXHRcXHRcXHRcXHRcXHQgdm9pZCAqYmFzZV9hZGRyKTtcXG4rXFx0XFx0XFx0XFx0XFx0IHZvaWQgKmJhc2VfYWRkciwgdm9pZCAqbG9jYWxfYmFzZSk7XFxuIFxcbiBleHRlcm4gaW50IF9faW5pdCBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBzaXplX3QgZHluX3NpemUsXFxuIFxcdFxcdFxcdFxcdHNpemVfdCBhdG9tX3NpemUsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oIGIvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmhcXG5pbmRleCA5MTc0ZmE1OWJiYzU0ZC4uMDYyYzY0YTVkNGJkMGMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxcbkBAIC0yNiw0ICsyNiwxNyBAQFxcbiBcXHRcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1xcdFxcdFxcXFxcXG4gXFx0fSB3aGlsZSAoMClcXG4gXFxuKyNpZm5kZWYgQ09ORklHX0FSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXFxuKyNkZWZpbmUgcHVkX3BvcHVsYXRlX3N5bmMoYWRkciwgcHVkLCBwbWQpXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRwdWRfcG9wdWxhdGUoXFx1MDAyNmluaXRfbW0sIHB1ZCwgcG1kKTtcXHRcXHRcXHRcXFxcXFxuK1xcdH0gd2hpbGUgKDApXFxuKyNlbmRpZlxcbitcXG4rI2lmbmRlZiBDT05GSUdfQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcXG4rI2RlZmluZSBwbWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwbWQsIHB0ZSlcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0sIHBtZCwgcHRlKTtcXHRcXHRcXFxcXFxuK1xcdH0gd2hpbGUgKDApXFxuKyNlbmRpZlxcbiAjZW5kaWYgLyogX0xJTlVYX1BHQUxMT0NfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oXFxuaW5kZXggZDg3ZGM3Zjc3ZjRlOGEuLmRhZjk5NjVhMTExZDFmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcXG5AQCAtMzEzLDYgKzMxMyw5IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKipwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLFxcbiBcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBhbGlnbik7XFxuIFxcbiB2b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKTtcXG4rc3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IHVuaXRfc2l6ZSwgc2l6ZV90IGFsaWduKTtcXG4rXFxuICMgZWxzZVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2bV9zdHJ1Y3QgKipcXG4gcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uZTE5MTBjMzMyNjM4NTEgMTAwNjQ0XFxuLS0tIGEvbW0vS2NvbmZpZ1xcbisrKyBiL21tL0tjb25maWdcXG5AQCAtMTA2MSw2ICsxMDYxLDkgQEAgY29uZmlnIE5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXFxuIGNvbmZpZyBVU0VfUEVSQ1BVX05VTUFfTk9ERV9JRFxcbiBcXHRib29sXFxuIFxcbitjb25maWcgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitcXHRib29sXFxuK1xcbiBjb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcXG4gXFx0Ym9vbFxcbiBcXG5AQCAtMTUwOSw2ICsxNTEyLDEyIEBAIGNvbmZpZyBMQVpZX01NVV9NT0RFX0tVTklUX1RFU1RcXG4gXFxuIFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gXFxuK2NvbmZpZyBBUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQ1xcbitcXHRib29sXFxuK1xcbitjb25maWcgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNcXG4rXFx0Ym9vbFxcbitcXG4gc291cmNlIFxcXCJtbS9kYW1vbi9LY29uZmlnXFxcIlxcbiBcXG4gZW5kbWVudVxcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li45ZDlmMDhjYjI2YTExNCAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0xNTUyLDEwICsxNTUyLDEzIEBAIHZvaWQgY2xlYXJfdm1fdW5pbml0aWFsaXplZF9mbGFnKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtKTtcXG4gaW50IF9fbXVzdF9jaGVjayBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0KTtcXG4raW50IF9fbXVzdF9jaGVjayB2bWFwX3JhbmdlX25vZmx1c2gocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsXFxuK1xcdFxcdFxcdHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdCk7XFxuIFxcbiB2b2lkIHZ1bm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcXG4gXFxuLXZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XFxuK3ZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfc2luZ2xlX3RocmVhZGVkX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbW0va21zYW4vaG9va3MuYyBiL21tL2ttc2FuL2hvb2tzLmNcXG5pbmRleCA4ZjIyZDFmMjI5ODEzZi4uZTJhMGZhZjM0NGI5MWIgMTAwNjQ0XFxuLS0tIGEvbW0va21zYW4vaG9va3MuY1xcbisrKyBiL21tL2ttc2FuL2hvb2tzLmNcXG5AQCAtMTM1LDggKzEzNSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZtYWxsb2Nfb3JpZ2luKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gXFxuIHZvaWQga21zYW5fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIHtcXG4tXFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh2bWFsbG9jX3NoYWRvdyhzdGFydCksIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xcbi1cXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHZtYWxsb2Nfb3JpZ2luKHN0YXJ0KSwgdm1hbGxvY19vcmlnaW4oZW5kKSk7XFxuK1xcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHZtYWxsb2Nfc2hhZG93KHN0YXJ0KSwgdm1hbGxvY19zaGFkb3coZW5kKSk7XFxuK1xcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHZtYWxsb2Nfb3JpZ2luKHN0YXJ0KSwgdm1hbGxvY19vcmlnaW4oZW5kKSk7XFxuIFxcdGZsdXNoX2NhY2hlX3ZtYXAodm1hbGxvY19zaGFkb3coc3RhcnQpLCB2bWFsbG9jX3NoYWRvdyhlbmQpKTtcXG4gXFx0Zmx1c2hfY2FjaGVfdm1hcCh2bWFsbG9jX29yaWdpbihzdGFydCksIHZtYWxsb2Nfb3JpZ2luKGVuZCkpO1xcbiB9XFxuQEAgLTE4MSw3ICsxODEsNyBAQCBpbnQga21zYW5faW9yZW1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHR2bWFsbG9jX29yaWdpbihzdGFydCArIG9mZiArIFBBR0VfU0laRSksIHByb3QsIFxcdTAwMjZvcmlnaW4sXFxuIFxcdFxcdFxcdFBBR0VfU0hJRlQpO1xcbiBcXHRcXHRpZiAobWFwcGVkKSB7XFxuLVxcdFxcdFxcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goXFxuK1xcdFxcdFxcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsXFxuIFxcdFxcdFxcdFxcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0ICsgb2ZmKSxcXG4gXFx0XFx0XFx0XFx0dm1hbGxvY19zaGFkb3coc3RhcnQgKyBvZmYgKyBQQUdFX1NJWkUpKTtcXG4gXFx0XFx0XFx0ZXJyID0gbWFwcGVkO1xcbkBAIC0yMDMsMTAgKzIwMywxMCBAQCBpbnQga21zYW5faW9yZW1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRfX2ZyZWVfcGFnZXMoc2hhZG93LCAxKTtcXG4gXFx0XFx0aWYgKG9yaWdpbilcXG4gXFx0XFx0XFx0X19mcmVlX3BhZ2VzKG9yaWdpbiwgMSk7XFxuLVxcdFxcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goXFxuK1xcdFxcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsXFxuIFxcdFxcdFxcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0KSxcXG4gXFx0XFx0XFx0dm1hbGxvY19zaGFkb3coc3RhcnQgKyBjbGVhbiAqIFBBR0VfU0laRSkpO1xcbi1cXHRcXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKFxcbitcXHRcXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLFxcbiBcXHRcXHRcXHR2bWFsbG9jX29yaWdpbihzdGFydCksXFxuIFxcdFxcdFxcdHZtYWxsb2Nfb3JpZ2luKHN0YXJ0ICsgY2xlYW4gKiBQQUdFX1NJWkUpKTtcXG4gXFx0fVxcbkBAIC0yMzMsOCArMjMzLDggQEAgdm9pZCBrbXNhbl9pb3VubWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIFxcdCAgICAgaSsrLCB2X3NoYWRvdyArPSBQQUdFX1NJWkUsIHZfb3JpZ2luICs9IFBBR0VfU0laRSkge1xcbiBcXHRcXHRzaGFkb3cgPSBrbXNhbl92bWFsbG9jX3RvX3BhZ2Vfb3JfbnVsbCgodm9pZCAqKXZfc2hhZG93KTtcXG4gXFx0XFx0b3JpZ2luID0ga21zYW5fdm1hbGxvY190b19wYWdlX29yX251bGwoKHZvaWQgKil2X29yaWdpbik7XFxuLVxcdFxcdF9fdnVubWFwX3JhbmdlX25vZmx1c2godl9zaGFkb3csIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xcbi1cXHRcXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHZfb3JpZ2luLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcXG4rXFx0XFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgdl9zaGFkb3csIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xcbitcXHRcXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2X29yaWdpbiwgdm1hbGxvY19vcmlnaW4oZW5kKSk7XFxuIFxcdFxcdGlmIChzaGFkb3cpXFxuIFxcdFxcdFxcdF9fZnJlZV9wYWdlcyhzaGFkb3csIDEpO1xcbiBcXHRcXHRpZiAob3JpZ2luKVxcbmRpZmYgLS1naXQgYS9tbS9wZXJjcHUtaW50ZXJuYWwuaCBiL21tL3BlcmNwdS1pbnRlcm5hbC5oXFxuaW5kZXggOGNiZTAzOWJmODQ3YWMuLjRkNDYxMzA1MjQzYmYwIDEwMDY0NFxcbi0tLSBhL21tL3BlcmNwdS1pbnRlcm5hbC5oXFxuKysrIGIvbW0vcGVyY3B1LWludGVybmFsLmhcXG5AQCAtNjMsMTEgKzYzLDE0IEBAIHN0cnVjdCBwY3B1X2NodW5rIHtcXG4gXFx0ICogY2h1bmtfbWQuXFxuIFxcdCAqL1xcbiBcXHR2b2lkXFx0XFx0XFx0KmJhc2VfYWRkciBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbitcXHQvKiBwZXJjcHUgbG9jYWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBjaHVuayAqL1xcbitcXHR2b2lkICAgICAgICAgICAgICAgICAgICAqbG9jYWxfYmFzZTtcXG4gXFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHQqYWxsb2NfbWFwO1xcdC8qIGFsbG9jYXRpb24gbWFwICovXFxuIFxcdHN0cnVjdCBwY3B1X2Jsb2NrX21kXFx0Km1kX2Jsb2NrcztcXHQvKiBtZXRhZGF0YSBibG9ja3MgKi9cXG4gXFxuIFxcdHZvaWRcXHRcXHRcXHQqZGF0YTtcXHRcXHQvKiBjaHVuayBkYXRhICovXFxuK1xcdHZvaWRcXHRcXHRcXHQqbG9jYWxfZGF0YTtcXHQvKiBjaHVuayBsb2NhbCB2bSAqL1xcbiBcXHRib29sXFx0XFx0XFx0aW1tdXRhYmxlO1xcdC8qIG5vIFtkZV1wb3B1bGF0aW9uIGFsbG93ZWQgKi9cXG4gXFx0Ym9vbFxcdFxcdFxcdGlzb2xhdGVkO1xcdC8qIGlzb2xhdGVkIGZyb20gYWN0aXZlIGNodW5rXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIHNsb3RzICovXFxuQEAgLTE2Miw2ICsxNjUsMTcgQEAgc3RhdGljIGlubGluZSBzaXplX3QgcGNwdV9vYmpfZnVsbF9zaXplKHNpemVfdCBzaXplKVxcbiBcXHRyZXR1cm4gc2l6ZSAqIG51bV9wb3NzaWJsZV9jcHVzKCkgKyBleHRyYV9zaXplO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rZXh0ZXJuIHZvaWQgX19pbml0IG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucilcXG4re1xcbitcXHRyZXR1cm47XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAjaWZkZWYgQ09ORklHX1BFUkNQVV9TVEFUU1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL21tL3BlcmNwdS12bS5jIGIvbW0vcGVyY3B1LXZtLmNcXG5pbmRleCA0ZjU5MzcwOTA1OTBkOC4uNWRlY2FhZDc2NDBmZGMgMTAwNjQ0XFxuLS0tIGEvbW0vcGVyY3B1LXZtLmNcXG4rKysgYi9tbS9wZXJjcHUtdm0uY1xcbkBAIC0xMTIsNiArMTEyLDEwIEBAIHN0YXRpYyBpbnQgcGNwdV9hbGxvY19wYWdlcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXFxuIFxcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rZXh0ZXJuIHBnZF90ICpwZXJjcHVfcGdkW05SX0NQVVNdO1xcbisjZW5kaWZcXG4rXFxuIC8qKlxcbiAgKiBwY3B1X3ByZV91bm1hcF9mbHVzaCAtIGZsdXNoIGNhY2hlIHByaW9yIHRvIHVubWFwcGluZ1xcbiAgKiBAY2h1bms6IGNodW5rIHRoZSByZWdpb25zIHRvIGJlIGZsdXNoZWQgYmVsb25ncyB0b1xcbkBAIC0xMzAsNiArMTM0LDExIEBAIHN0YXRpYyB2b2lkIHBjcHVfcHJlX3VubWFwX2ZsdXNoKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuayxcXG4gXFx0Zmx1c2hfY2FjaGVfdnVubWFwKFxcbiBcXHRcXHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfbG93X3VuaXRfY3B1LCBwYWdlX3N0YXJ0KSxcXG4gXFx0XFx0cGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2hpZ2hfdW5pdF9jcHUsIHBhZ2VfZW5kKSk7XFxuK1xcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rXFx0Zmx1c2hfY2FjaGVfdnVubWFwKCh1bnNpZ25lZCBsb25nKWNodW5rLVxcdTAwM2Vsb2NhbF9iYXNlICsgKHBhZ2Vfc3RhcnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCksXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBsb25nKWNodW5rLVxcdTAwM2Vsb2NhbF9iYXNlICsgKHBhZ2VfZW5kIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKTtcXG4rI2VuZGlmXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fcGNwdV91bm1hcF9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBucl9wYWdlcylcXG5AQCAtMTM3LDYgKzE0NiwyMCBAQCBzdGF0aWMgdm9pZCBfX3BjcHVfdW5tYXBfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnJfcGFnZXMpXFxuIFxcdHZ1bm1hcF9yYW5nZV9ub2ZsdXNoKGFkZHIsIGFkZHIgKyAobnJfcGFnZXMgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzX2xvY2FsKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcXG4rXFx0XFx0XFx0ICAgIGludCBucl9wYWdlcylcXG4re1xcbitcXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHBlcmNwdV9wZ2RbY3B1XSwgdmlydCwgdmlydCArIChucl9wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzX2xvY2FsKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcXG4rXFx0XFx0XFx0ICAgIGludCBucl9wYWdlcylcXG4re1xcbitcXHRyZXR1cm47XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKipcXG4gICogcGNwdV91bm1hcF9wYWdlcyAtIHVubWFwIHBhZ2VzIG91dCBvZiBhIHBjcHVfY2h1bmtcXG4gICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdFxcbkBAIC0xNjYsNiArMTg5LDEwIEBAIHN0YXRpYyB2b2lkIHBjcHVfdW5tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxcbiBcXHRcXHR9XFxuIFxcdFxcdF9fcGNwdV91bm1hcF9wYWdlcyhwY3B1X2NodW5rX2FkZHIoY2h1bmssIGNwdSwgcGFnZV9zdGFydCksXFxuIFxcdFxcdFxcdFxcdCAgIHBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7XFxuK1xcbitcXHRcXHRfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwoY3B1LFxcbitcXHRcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyljaHVuay1cXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX3N0YXJ0IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpLFxcbitcXHRcXHRcXHRcXHRcXHRwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTE4OCw2ICsyMTUsMTIgQEAgc3RhdGljIHZvaWQgcGNwdV9wb3N0X3VubWFwX3RsYl9mbHVzaChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXFxuIFxcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoXFxuIFxcdFxcdHBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9sb3dfdW5pdF9jcHUsIHBhZ2Vfc3RhcnQpLFxcbiBcXHRcXHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfaGlnaF91bml0X2NwdSwgcGFnZV9lbmQpKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKFxcbitcXHRcXHQodW5zaWduZWQgbG9uZyljaHVuay1cXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX3N0YXJ0IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpLFxcbitcXHRcXHQodW5zaWduZWQgbG9uZyljaHVuay1cXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX2VuZCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuKyNlbmRpZlxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbkBAIC0xOTcsNiArMjMwLDMyIEBAIHN0YXRpYyBpbnQgX19wY3B1X21hcF9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuIFxcdFxcdFxcdFBBR0VfS0VSTkVMLCBwYWdlcywgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXNfbG9jYWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbitcXHRcXHRcXHQgICAgaW50IG5yX3BhZ2VzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XFxuK1xcdFxcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChwZXJjcHVfcGdkW2NwdV0sIHZpcnQsIHZpcnQgKyBQQUdFX1NJWkUsXFxuK1xcdFxcdFxcdFxcdHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIFBBR0VfS0VSTkVMLCBQQUdFX1NISUZUKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdFxcdHZpcnQgKz0gUEFHRV9TSVpFO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbnQgX19wY3B1X21hcF9wYWdlc19sb2NhbCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuK1xcdFxcdFxcdCAgICBpbnQgbnJfcGFnZXMpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKipcXG4gICogcGNwdV9tYXBfcGFnZXMgLSBtYXAgcGFnZXMgaW50byBhIHBjcHVfY2h1bmtcXG4gICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdFxcbkBAIC0yMjQsNiArMjgzLDEzIEBAIHN0YXRpYyBpbnQgcGNwdV9tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcbitcXHRcXHRlcnIgPSBfX3BjcHVfbWFwX3BhZ2VzX2xvY2FsKGNwdSxcXG4rXFx0XFx0XFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcpY2h1bmstXFx1MDAzZWxvY2FsX2Jhc2UgKyAocGFnZV9zdGFydCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnBhZ2VzW3BjcHVfcGFnZV9pZHgoY3B1LCBwYWdlX3N0YXJ0KV0sXFxuK1xcdFxcdFxcdFxcdFxcdHBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFxuIFxcdFxcdGZvciAoaSA9IHBhZ2Vfc3RhcnQ7IGkgXFx1MDAzYyBwYWdlX2VuZDsgaSsrKVxcbiBcXHRcXHRcXHRwY3B1X3NldF9wYWdlX2NodW5rKHBhZ2VzW3BjcHVfcGFnZV9pZHgoY3B1LCBpKV0sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjaHVuayk7XFxuQEAgLTIzMyw2ICsyOTksOSBAQCBzdGF0aWMgaW50IHBjcHVfbWFwX3BhZ2VzKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuayxcXG4gXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KHRjcHUpIHtcXG4gXFx0XFx0X19wY3B1X3VubWFwX3BhZ2VzKHBjcHVfY2h1bmtfYWRkcihjaHVuaywgdGNwdSwgcGFnZV9zdGFydCksXFxuIFxcdFxcdFxcdFxcdCAgIHBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7XFxuK1xcdFxcdF9fcGNwdV91bm1hcF9wYWdlc19sb2NhbCh0Y3B1LFxcbitcXHRcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyljaHVuay1cXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX3N0YXJ0IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpLFxcbitcXHRcXHRcXHRcXHRcXHRwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpO1xcbiBcXHRcXHRpZiAodGNwdSA9PSBjcHUpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTI1OCw2ICszMjcsMTEgQEAgc3RhdGljIHZvaWQgcGNwdV9wb3N0X21hcF9mbHVzaChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXFxuIFxcdGZsdXNoX2NhY2hlX3ZtYXAoXFxuIFxcdFxcdHBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9sb3dfdW5pdF9jcHUsIHBhZ2Vfc3RhcnQpLFxcbiBcXHRcXHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfaGlnaF91bml0X2NwdSwgcGFnZV9lbmQpKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitcXHRmbHVzaF9jYWNoZV92bWFwKCh1bnNpZ25lZCBsb25nKWNodW5rLVxcdTAwM2Vsb2NhbF9iYXNlICsgKHBhZ2Vfc3RhcnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCksXFxuK1xcdFxcdFxcdCAodW5zaWduZWQgbG9uZyljaHVuay1cXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX2VuZCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuKyNlbmRpZlxcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzQ5LDYgKzQyMywyNCBAQCBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY3JlYXRlX2NodW5rKGdmcF90IGdmcClcXG4gXFx0Y2h1bmstXFx1MDAzZWRhdGEgPSB2bXM7XFxuIFxcdGNodW5rLVxcdTAwM2ViYXNlX2FkZHIgPSB2bXNbMF0tXFx1MDAzZWFkZHIgLSBwY3B1X2dyb3VwX29mZnNldHNbMF07XFxuIFxcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWx0YSA9ICh1bnNpZ25lZCBsb25nKWNodW5rLVxcdTAwM2ViYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkcjtcXG4rXFx0dW5zaWduZWQgbG9uZyBoaW50ID0gZGVsdGEgKyAodW5zaWduZWQgbG9uZylwY3B1X2xvY2FsX2Jhc2U7XFxuK1xcdHN0cnVjdCB2bV9zdHJ1Y3QgKmxvY2FsX3ZtID0gcGNwdV9nZXRfbG9jYWxfdm1fYXJlYShoaW50LFxcbitcXHRcXHRcXHRcXHRcXHRwY3B1X3VuaXRfc2l6ZSwgcGNwdV9hdG9tX3NpemUpO1xcbitcXHRpZiAoIWxvY2FsX3ZtKSB7XFxuK1xcdFxcdHBjcHVfZnJlZV92bV9hcmVhcyh2bXMsIHBjcHVfbnJfZ3JvdXBzKTtcXG4rXFx0XFx0cGNwdV9mcmVlX2NodW5rKGNodW5rKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGNodW5rLVxcdTAwM2Vsb2NhbF9iYXNlID0gbG9jYWxfdm0tXFx1MDAzZWFkZHI7XFxuK1xcdGNodW5rLVxcdTAwM2Vsb2NhbF9kYXRhID0gKHZvaWQgKilsb2NhbF92bTtcXG4rI2Vsc2VcXG4rXFx0Y2h1bmstXFx1MDAzZWxvY2FsX2Jhc2UgPSAwO1xcbitcXHRjaHVuay1cXHUwMDNlbG9jYWxfZGF0YSA9IE5VTEw7XFxuKyNlbmRpZlxcbitcXG4gXFx0cGNwdV9zdGF0c19jaHVua19hbGxvYygpO1xcbiBcXHR0cmFjZV9wZXJjcHVfY3JlYXRlX2NodW5rKGNodW5rLVxcdTAwM2ViYXNlX2FkZHIpO1xcbiBcXG5AQCAtMzY1LDYgKzQ1Nyw4IEBAIHN0YXRpYyB2b2lkIHBjcHVfZGVzdHJveV9jaHVuayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspXFxuIFxcbiBcXHRpZiAoY2h1bmstXFx1MDAzZWRhdGEpXFxuIFxcdFxcdHBjcHVfZnJlZV92bV9hcmVhcyhjaHVuay1cXHUwMDNlZGF0YSwgcGNwdV9ucl9ncm91cHMpO1xcbitcXHRpZiAoY2h1bmstXFx1MDAzZWxvY2FsX2RhdGEpXFxuK1xcdFxcdGZyZWVfdm1fYXJlYSgoc3RydWN0IHZtX3N0cnVjdCAqKWNodW5rLVxcdTAwM2Vsb2NhbF9kYXRhKTtcXG4gXFx0cGNwdV9mcmVlX2NodW5rKGNodW5rKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuY1xcbmluZGV4IGIwNjc2YjgwNTRlZDA5Li44YjI3M2VkOGU1YThiYiAxMDA2NDRcXG4tLS0gYS9tbS9wZXJjcHUuY1xcbisrKyBiL21tL3BlcmNwdS5jXFxuQEAgLTE0NSw2ICsxNDUsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHBjcHVfaGlnaF91bml0X2NwdSBfX3JvX2FmdGVyX2luaXQ7XFxuIFxcbiAvKiB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgY2h1bmsgd2hpY2ggc3RhcnRzIHdpdGggdGhlIGtlcm5lbCBzdGF0aWMgYXJlYSAqL1xcbiB2b2lkICpwY3B1X2Jhc2VfYWRkciBfX3JvX2FmdGVyX2luaXQ7XFxuKy8qIFRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBjaHVuayBsb2NhbCBtYXBwaW5nICovXFxuK3ZvaWQgKnBjcHVfbG9jYWxfYmFzZSBfX3JvX2FmdGVyX2luaXQ7XFxuIFxcbiBzdGF0aWMgY29uc3QgaW50ICpwY3B1X3VuaXRfbWFwIF9fcm9fYWZ0ZXJfaW5pdDtcXHRcXHQvKiBjcHUgLVxcdTAwM2UgdW5pdCAqL1xcbiBjb25zdCB1bnNpZ25lZCBsb25nICpwY3B1X3VuaXRfb2Zmc2V0cyBfX3JvX2FmdGVyX2luaXQ7XFx0LyogY3B1IC1cXHUwMDNlIHVuaXQgb2Zmc2V0ICovXFxuQEAgLTEzMzgsNiArMTM0MCw3IEBAIHN0YXRpYyB2b2lkIHBjcHVfaW5pdF9tZF9ibG9ja3Moc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rKVxcbiAvKipcXG4gICogcGNwdV9hbGxvY19maXJzdF9jaHVuayAtIGNyZWF0ZXMgY2h1bmtzIHRoYXQgc2VydmUgdGhlIGZpcnN0IGNodW5rXFxuICAqIEB0bXBfYWRkcjogdGhlIHN0YXJ0IG9mIHRoZSByZWdpb24gc2VydmVkXFxuKyAqIEBsb2NhbF90bXA6IHRoZSBzdGFydCBvZiB0aGUgbG9jYWwgcGVyY3B1IHJlZ2lvbiBzZXJ2ZWRcXG4gICogQG1hcF9zaXplOiBzaXplIG9mIHRoZSByZWdpb24gc2VydmVkXFxuICAqXFxuICAqIFRoaXMgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoZSBjaHVua3MgdGhhdCBzZXJ2ZSB0aGUgZmlyc3QgY2h1bmsuICBUaGVcXG5AQCAtMTM0OSwxNSArMTM1MiwxNiBAQCBzdGF0aWMgdm9pZCBwY3B1X2luaXRfbWRfYmxvY2tzKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcXG4gICogQ2h1bmsgc2VydmluZyB0aGUgcmVnaW9uIGF0IEB0bXBfYWRkciBvZiBAbWFwX3NpemUuXFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKiBfX2luaXQgcGNwdV9hbGxvY19maXJzdF9jaHVuayh1bnNpZ25lZCBsb25nIHRtcF9hZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgaW50IG1hcF9zaXplKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBsb2NhbF90bXAsIGludCBtYXBfc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bms7XFxuLVxcdHVuc2lnbmVkIGxvbmcgYWxpZ25lZF9hZGRyO1xcbitcXHR1bnNpZ25lZCBsb25nIGFsaWduZWRfYWRkciwgYWxpZ25lZF9sb2NhbDtcXG4gXFx0aW50IHN0YXJ0X29mZnNldCwgb2Zmc2V0X2JpdHMsIHJlZ2lvbl9zaXplLCByZWdpb25fYml0cztcXG4gXFx0c2l6ZV90IGFsbG9jX3NpemU7XFxuIFxcbiBcXHQvKiByZWdpb24gY2FsY3VsYXRpb25zICovXFxuIFxcdGFsaWduZWRfYWRkciA9IHRtcF9hZGRyIFxcdTAwMjYgUEFHRV9NQVNLO1xcbitcXHRhbGlnbmVkX2xvY2FsID0gbG9jYWxfdG1wIFxcdTAwMjYgUEFHRV9NQVNLO1xcbiBcXG4gXFx0c3RhcnRfb2Zmc2V0ID0gdG1wX2FkZHIgLSBhbGlnbmVkX2FkZHI7XFxuIFxcdHJlZ2lvbl9zaXplID0gQUxJR04oc3RhcnRfb2Zmc2V0ICsgbWFwX3NpemUsIFBBR0VfU0laRSk7XFxuQEAgLTEzNzAsNiArMTM3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqIF9faW5pdCBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHVuc2lnbmVkIGxvbmcgdG1wX2FkZHIsXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjaHVuay1cXHUwMDNlbGlzdCk7XFxuIFxcbiBcXHRjaHVuay1cXHUwMDNlYmFzZV9hZGRyID0gKHZvaWQgKilhbGlnbmVkX2FkZHI7XFxuK1xcdGNodW5rLVxcdTAwM2Vsb2NhbF9iYXNlID0gKHZvaWQgKilhbGlnbmVkX2xvY2FsO1xcbiBcXHRjaHVuay1cXHUwMDNlc3RhcnRfb2Zmc2V0ID0gc3RhcnRfb2Zmc2V0O1xcbiBcXHRjaHVuay1cXHUwMDNlZW5kX29mZnNldCA9IHJlZ2lvbl9zaXplIC0gY2h1bmstXFx1MDAzZXN0YXJ0X29mZnNldCAtIG1hcF9zaXplO1xcbiBcXG5AQCAtMjU2Miw3ICsyNTY3LDcgQEAgc3RhdGljIHZvaWQgcGNwdV9kdW1wX2FsbG9jX2luZm8oY29uc3QgY2hhciAqbHZsLFxcbiAgKiBhbmQgYXZhaWxhYmxlIGZvciBkeW5hbWljIGFsbG9jYXRpb24gbGlrZSBhbnkgb3RoZXIgY2h1bmsuXFxuICAqL1xcbiB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLFxcbi1cXHRcXHRcXHRcXHQgICB2b2lkICpiYXNlX2FkZHIpXFxuK1xcdFxcdFxcdFxcdCAgIHZvaWQgKmJhc2VfYWRkciwgdm9pZCAqbG9jYWxfYmFzZSlcXG4ge1xcbiBcXHRzaXplX3Qgc2l6ZV9zdW0gPSBhaS1cXHUwMDNlc3RhdGljX3NpemUgKyBhaS1cXHUwMDNlcmVzZXJ2ZWRfc2l6ZSArIGFpLVxcdTAwM2VkeW5fc2l6ZTtcXG4gXFx0c2l6ZV90IHN0YXRpY19zaXplLCBkeW5fc2l6ZTtcXG5AQCAtMjU3Miw3ICsyNTc3LDcgQEAgdm9pZCBfX2luaXQgcGNwdV9zZXR1cF9maXJzdF9jaHVuayhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSxcXG4gXFx0dW5zaWduZWQgaW50IGNwdTtcXG4gXFx0aW50ICp1bml0X21hcDtcXG4gXFx0aW50IGdyb3VwLCB1bml0LCBpO1xcbi1cXHR1bnNpZ25lZCBsb25nIHRtcF9hZGRyO1xcbitcXHR1bnNpZ25lZCBsb25nIHRtcF9hZGRyLCBsb2NhbF90bXAgPSAwO1xcbiBcXHRzaXplX3QgYWxsb2Nfc2l6ZTtcXG4gXFxuICNkZWZpbmUgUENQVV9TRVRVUF9CVUdfT04oY29uZClcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0yNzEzLDExICsyNzE4LDE1IEBAIHZvaWQgX19pbml0IHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoY29uc3Qgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWksXFxuIFxcdCAqICAgY2h1bmsuXFxuIFxcdCAqL1xcbiBcXHR0bXBfYWRkciA9ICh1bnNpZ25lZCBsb25nKWJhc2VfYWRkciArIHN0YXRpY19zaXplO1xcbitcXHRpZiAobG9jYWxfYmFzZSlcXG4rXFx0XFx0bG9jYWxfdG1wID0gKHVuc2lnbmVkIGxvbmcpbG9jYWxfYmFzZSArIHN0YXRpY19zaXplO1xcbiBcXHRpZiAoYWktXFx1MDAzZXJlc2VydmVkX3NpemUpXFxuLVxcdFxcdHBjcHVfcmVzZXJ2ZWRfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLFxcbitcXHRcXHRwY3B1X3Jlc2VydmVkX2NodW5rID0gcGNwdV9hbGxvY19maXJzdF9jaHVuayh0bXBfYWRkciwgbG9jYWxfdG1wLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRhaS1cXHUwMDNlcmVzZXJ2ZWRfc2l6ZSk7XFxuIFxcdHRtcF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpYmFzZV9hZGRyICsgc3RhdGljX3NpemUgKyBhaS1cXHUwMDNlcmVzZXJ2ZWRfc2l6ZTtcXG4tXFx0cGNwdV9maXJzdF9jaHVuayA9IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodG1wX2FkZHIsIGR5bl9zaXplKTtcXG4rXFx0aWYgKGxvY2FsX2Jhc2UpXFxuK1xcdFxcdGxvY2FsX3RtcCA9ICh1bnNpZ25lZCBsb25nKWxvY2FsX2Jhc2UgKyBzdGF0aWNfc2l6ZSArIGFpLVxcdTAwM2VyZXNlcnZlZF9zaXplO1xcbitcXHRwY3B1X2ZpcnN0X2NodW5rID0gcGNwdV9hbGxvY19maXJzdF9jaHVuayh0bXBfYWRkciwgbG9jYWxfdG1wLCBkeW5fc2l6ZSk7XFxuIFxcbiBcXHRwY3B1X25yX2VtcHR5X3BvcF9wYWdlcyA9IHBjcHVfZmlyc3RfY2h1bmstXFx1MDAzZW5yX2VtcHR5X3BvcF9wYWdlcztcXG4gXFx0cGNwdV9jaHVua19yZWxvY2F0ZShwY3B1X2ZpcnN0X2NodW5rLCAtMSk7XFxuQEAgLTMxMDgsNyArMzExNyw3IEBAIGludCBfX2luaXQgcGNwdV9lbWJlZF9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgc2l6ZV90IGR5bl9zaXplLFxcbiBcXHRcXHRQRk5fRE9XTihzaXplX3N1bSksIGFpLVxcdTAwM2VzdGF0aWNfc2l6ZSwgYWktXFx1MDAzZXJlc2VydmVkX3NpemUsXFxuIFxcdFxcdGFpLVxcdTAwM2VkeW5fc2l6ZSwgYWktXFx1MDAzZXVuaXRfc2l6ZSk7XFxuIFxcbi1cXHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBiYXNlKTtcXG4rXFx0cGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgYmFzZSwgTlVMTCk7XFxuIFxcdGdvdG8gb3V0X2ZyZWU7XFxuIFxcbiBvdXRfZnJlZV9hcmVhczpcXG5AQCAtMzE2Myw3ICszMTcyLDcgQEAgdm9pZCBfX2luaXQgX193ZWFrIHBjcHVfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gXFx0cHVkID0gcHVkX29mZnNldChwNGQsIGFkZHIpO1xcbiBcXHRpZiAocHVkX25vbmUoKnB1ZCkpIHtcXG4gXFx0XFx0cG1kID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUE1EX1RBQkxFX1NJWkUsIFBNRF9UQUJMRV9TSVpFKTtcXG4tXFx0XFx0cHVkX3BvcHVsYXRlKFxcdTAwMjZpbml0X21tLCBwdWQsIHBtZCk7XFxuK1xcdFxcdHB1ZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHB1ZCwgcG1kKTtcXG4gXFx0fVxcbiBcXG4gXFx0cG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpO1xcbkBAIC0zMTcxLDcgKzMxODAsNyBAQCB2b2lkIF9faW5pdCBfX3dlYWsgcGNwdV9wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9uZyBhZGRyKVxcbiBcXHRcXHRwdGVfdCAqbmV3O1xcbiBcXG4gXFx0XFx0bmV3ID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFRFX1RBQkxFX1NJWkUsIFBURV9UQUJMRV9TSVpFKTtcXG4tXFx0XFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcXHUwMDI2aW5pdF9tbSwgcG1kLCBuZXcpO1xcbitcXHRcXHRwbWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwbWQsIG5ldyk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybjtcXG5AQCAtMzE5NCw2ICszMjAzLDcgQEAgdm9pZCBfX2luaXQgX193ZWFrIHBjcHVfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdCBjcHVfdG9fbmRfZm4pXFxuIHtcXG4gXFx0c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3Qgdm07XFxuK1xcdHN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0IHBjcHVfdm07XFxuIFxcdHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpO1xcbiBcXHRjaGFyIHBzaXplX3N0clsxNl07XFxuIFxcdGludCB1bml0X3BhZ2VzO1xcbkBAIC0zMjQzLDExICszMjUzLDI4IEBAIGludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3RcXG4gXFx0fVxcbiBcXG4gXFx0LyogYWxsb2NhdGUgdm0gYXJlYSwgbWFwIHRoZSBwYWdlcyBhbmQgY29weSBzdGF0aWMgZGF0YSAqL1xcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rXFx0dm0uZmxhZ3MgPSBWTV9BTExPQztcXG4rXFx0dm0uYWRkciA9ICh2b2lkICopQUxJR04oUEVSQ1BVX1NUQVJULCBQQUdFX1NJWkUpO1xcbitcXHR2bS5zaXplID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIGFpLVxcdTAwM2V1bml0X3NpemU7XFxuK1xcdHZtX2FyZWFfYWRkX2Vhcmx5KFxcdTAwMjZ2bSk7XFxuK1xcdGthc2FuX3BvcHVsYXRlX2Vhcmx5X3ZtX2FyZWFfc2hhZG93KHZtLmFkZHIsIHZtLnNpemUpO1xcbitcXG4rXFx0cGNwdV92bS5mbGFncyA9IFZNX0FMTE9DO1xcbitcXHRwY3B1X3ZtLmFkZHIgPSAodm9pZCAqKUFMSUdOKExPQ0FMX1BFUkNQVV9TVEFSVCwgUEFHRV9TSVpFKTtcXG4rXFx0cGNwdV92bS5zaXplID0gYWktXFx1MDAzZXVuaXRfc2l6ZTtcXG4rXFx0dm1fYXJlYV9hZGRfZWFybHkoXFx1MDAyNnBjcHVfdm0pO1xcbitcXHRrYXNhbl9wb3B1bGF0ZV9lYXJseV92bV9hcmVhX3NoYWRvdyhwY3B1X3ZtLmFkZHIsIHBjcHVfdm0uc2l6ZSk7XFxuKyNlbHNlXFxuIFxcdHZtLmZsYWdzID0gVk1fQUxMT0M7XFxuIFxcdHZtLnNpemUgPSBudW1fcG9zc2libGVfY3B1cygpICogYWktXFx1MDAzZXVuaXRfc2l6ZTtcXG4gXFx0dm1fYXJlYV9yZWdpc3Rlcl9lYXJseShcXHUwMDI2dm0sIFBBR0VfU0laRSk7XFxuIFxcbitcXHRwY3B1X3ZtLmFkZHIgPSBOVUxMO1xcbisjZW5kaWZcXG4rXFxuIFxcdGZvciAodW5pdCA9IDA7IHVuaXQgXFx1MDAzYyBudW1fcG9zc2libGVfY3B1cygpOyB1bml0KyspIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGNwdSA9IGFpLVxcdTAwM2Vncm91cHNbMF0uY3B1X21hcFt1bml0XTtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyB1bml0X2FkZHIgPVxcbiBcXHRcXHRcXHQodW5zaWduZWQgbG9uZyl2bS5hZGRyICsgdW5pdCAqIGFpLVxcdTAwM2V1bml0X3NpemU7XFxuIFxcbkBAIC0zMjY0LDYgKzMyOTEsMTQgQEAgaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdFxcbiBcXG4gXFx0XFx0LyogY29weSBzdGF0aWMgZGF0YSAqL1xcbiBcXHRcXHRtZW1jcHkoKHZvaWQgKil1bml0X2FkZHIsIF9fcGVyX2NwdV9zdGFydCwgYWktXFx1MDAzZXN0YXRpY19zaXplKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE1hcCBwZXJjcHUgZGF0YSB0byBQRVJDUFUgbWFwLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBQQ1BVX0ZDX0VNQkVEIGNhbid0IHN1cHBvcnQgaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKGNwdSwgKHVuc2lnbmVkIGxvbmcpcGNwdV92bS5hZGRyLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2cGFnZXNbdW5pdCAqIHVuaXRfcGFnZXNdLCB1bml0X3BhZ2VzKTtcXG4gXFx0fVxcbiBcXG4gXFx0Lyogd2UncmUgcmVhZHksIGNvbW1pdCAqL1xcbkBAIC0zMjcxLDcgKzMzMDYsOCBAQCBpbnQgX19pbml0IHBjcHVfcGFnZV9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgcGNwdV9mY19jcHVfdG9fbm9kZV9mbl90XFxuIFxcdFxcdHVuaXRfcGFnZXMsIHBzaXplX3N0ciwgYWktXFx1MDAzZXN0YXRpY19zaXplLFxcbiBcXHRcXHRhaS1cXHUwMDNlcmVzZXJ2ZWRfc2l6ZSwgYWktXFx1MDAzZWR5bl9zaXplKTtcXG4gXFxuLVxcdHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIHZtLmFkZHIpO1xcbitcXHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCB2bS5hZGRyLCBwY3B1X3ZtLmFkZHIpO1xcbitcXHRwY3B1X2xvY2FsX2Jhc2UgPSBwY3B1X3ZtLmFkZHI7XFxuIFxcdGdvdG8gb3V0X2ZyZWVfYXI7XFxuIFxcbiBlbm9tZW06XFxuQEAgLTMzNTMsNyArMzM4OSw3IEBAIHZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcXG4gXFx0YWktXFx1MDAzZWdyb3Vwc1swXS5ucl91bml0cyA9IDE7XFxuIFxcdGFpLVxcdTAwM2Vncm91cHNbMF0uY3B1X21hcFswXSA9IDA7XFxuIFxcbi1cXHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBmYyk7XFxuK1xcdHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIGZjLCBOVUxMKTtcXG4gXFx0cGNwdV9mcmVlX2FsbG9jX2luZm8oYWkpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9zcGFyc2Utdm1lbW1hcC5jIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xcbmluZGV4IDk5ZTJiZTM5NjcxYjYzLi40NjNjMmY4YjYxMWMwMyAxMDA2NDRcXG4tLS0gYS9tbS9zcGFyc2Utdm1lbW1hcC5jXFxuKysrIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xcbkBAIC0xOTgsNyArMTk4LDcgQEAgc3RhdGljIHBtZF90ICogX19tZW1pbml0IHZtZW1tYXBfcG1kX3BvcHVsYXRlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW5cXG4gXFx0XFx0aWYgKCFwKVxcbiBcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0XFx0a2VybmVsX3B0ZV9pbml0KHApO1xcbi1cXHRcXHRwbWRfcG9wdWxhdGVfa2VybmVsKFxcdTAwMjZpbml0X21tLCBwbWQsIHApO1xcbitcXHRcXHRwbWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwbWQsIHApO1xcbiBcXHR9XFxuIFxcdHJldHVybiBwbWQ7XFxuIH1cXG5AQCAtMjExLDcgKzIxMSw3IEBAIHN0YXRpYyBwdWRfdCAqIF9fbWVtaW5pdCB2bWVtbWFwX3B1ZF9wb3B1bGF0ZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGluXFxuIFxcdFxcdGlmICghcClcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdFxcdHBtZF9pbml0KHApO1xcbi1cXHRcXHRwdWRfcG9wdWxhdGUoXFx1MDAyNmluaXRfbW0sIHB1ZCwgcCk7XFxuK1xcdFxcdHB1ZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHB1ZCwgcCk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHB1ZDtcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uM2Q5NGNhNGJiZDE3YjEgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hbGxvYy5jXFxuKysrIGIvbW0vdm1hbGxvYy5jXFxuQEAgLTgwLDYgKzgwLDkgQEAgYm9vbCBpc192bWFsbG9jX2FkZHIoY29uc3Qgdm9pZCAqeClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcoeCk7XFxuIFxcbitcXHRpZiAoaXNfcGVyY3B1X2FkZHIoYWRkcikpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4gXFx0cmV0dXJuIGFkZHIgXFx1MDAzZT0gVk1BTExPQ19TVEFSVCBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwM2MgVk1BTExPQ19FTkQ7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChpc192bWFsbG9jX2FkZHIpO1xcbkBAIC0yOTUsOSArMjk4LDkgQEAgc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZtYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi1cXHRcXHRcXHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcXG4raW50IHZtYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuK1xcdFxcdCAgICAgICBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXFxuIHtcXG4gXFx0cGdkX3QgKnBnZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydDtcXG5AQCAtMzE0LDcgKzMxNyw3IEBAIHN0YXRpYyBpbnQgdm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdEJVR19PTihhZGRyIFxcdTAwM2U9IGVuZCk7XFxuIFxcbiBcXHRzdGFydCA9IGFkZHI7XFxuLVxcdHBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTtcXG4rXFx0cGdkID0gcGdkX29mZnNldF9wZ2QocGdkaXIsIGFkZHIpO1xcbiBcXHRkbyB7XFxuIFxcdFxcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4gXFx0XFx0ZXJyID0gdm1hcF9wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwaHlzX2FkZHIsIHByb3QsXFxuQEAgLTMzNCw4ICszMzcsOCBAQCBpbnQgdm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHBoeXNfYWRkciwgcGdwcm90X254KHByb3QpLFxcbi1cXHRcXHRcXHRcXHQgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdCk7XFxuK1xcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgYWRkciwgZW5kLCBwaHlzX2FkZHIsXFxuK1xcdFxcdFxcdFxcdCBwZ3Byb3RfbngocHJvdCksIGlvcmVtYXBfbWF4X3BhZ2Vfc2hpZnQpO1xcbiBcXHRmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7XFxuIFxcdGlmICghZXJyKVxcbiBcXHRcXHRlcnIgPSBrbXNhbl9pb3JlbWFwX3BhZ2VfcmFuZ2UoYWRkciwgZW5kLCBwaHlzX2FkZHIsIHByb3QsXFxuQEAgLTQ3OCw3ICs0ODEsNyBAQCBzdGF0aWMgdm9pZCB2dW5tYXBfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuICAqXFxuICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gb25seS4gRG8gbm90IHVzZSBvdXRzaWRlIG1tLy5cXG4gICovXFxuLXZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4rdm9pZCBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbiBcXHRwZ2RfdCAqcGdkO1xcbkBAIC00ODYsNyArNDg5LDcgQEAgdm9pZCBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbiBcXHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcXG4gXFxuIFxcdEJVR19PTihhZGRyIFxcdTAwM2U9IGVuZCk7XFxuLVxcdHBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTtcXG4rXFx0cGdkID0gcGdkX29mZnNldF9wZ2QocGdkaXIsIGFkZHIpO1xcbiBcXHRkbyB7XFxuIFxcdFxcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4gXFx0XFx0aWYgKHBnZF9iYWQoKnBnZCkpXFxuQEAgLTUwMyw3ICs1MDYsNyBAQCB2b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIHZvaWQgdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIHtcXG4gXFx0a21zYW5fdnVubWFwX3JhbmdlX25vZmx1c2goc3RhcnQsIGVuZCk7XFxuLVxcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goc3RhcnQsIGVuZCk7XFxuK1xcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHN0YXJ0LCBlbmQpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNjcwLDkgKzY3MywxMCBAQCBpbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yOyBpICs9IDFVIFxcdTAwM2NcXHUwMDNjIChwYWdlX3NoaWZ0IC0gUEFHRV9TSElGVCkpIHtcXG4gXFx0XFx0aW50IGVycjtcXG4gXFxuLVxcdFxcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICsgKDFVTCBcXHUwMDNjXFx1MDAzYyBwYWdlX3NoaWZ0KSxcXG4tXFx0XFx0XFx0XFx0XFx0cGFnZV90b19waHlzKHBhZ2VzW2ldKSwgcHJvdCxcXG4tXFx0XFx0XFx0XFx0XFx0cGFnZV9zaGlmdCk7XFxuK1xcdFxcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0IGFkZHIgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIHBhZ2Vfc2hpZnQpLFxcbitcXHRcXHRcXHRcXHRcXHQgcGFnZV90b19waHlzKHBhZ2VzW2ldKSwgcHJvdCxcXG4rXFx0XFx0XFx0XFx0XFx0IHBhZ2Vfc2hpZnQpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5AQCAtNDkxOSwxNSArNDkyMywyNSBAQCBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbiAgKiAgIGluIC0gdGhlIFZBIHdlIHN0YXJ0IHRoZSBzZWFyY2gocmV2ZXJzZSBvcmRlcik7XFxuICAqICAgb3V0IC0gdGhlIFZBIHdpdGggdGhlIGhpZ2hlc3QgYWxpZ25lZCBlbmQgYWRkcmVzcy5cXG4gICogQGFsaWduOiBhbGlnbm1lbnQgZm9yIHJlcXVpcmVkIGhpZ2hlc3QgYWRkcmVzc1xcbisgKiBAcGNwdTogd2hldGhlciByZXF1ZXN0IGFsbG9jYXRpb24gZnJvbSBsb2NhbCBwZXJjcHUgYXJlYVxcbiAgKlxcbiAgKiBSZXR1cm5zOiBkZXRlcm1pbmVkIGVuZCBhZGRyZXNzIHdpdGhpbiB2bWFwX2FyZWFcXG4gICovXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nXFxuLXB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShzdHJ1Y3Qgdm1hcF9hcmVhICoqdmEsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXFxuK3B2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShzdHJ1Y3Qgdm1hcF9hcmVhICoqdmEsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIGJvb2wgcGNwdSlcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kID0gVk1BTExPQ19FTkQgXFx1MDAyNiB+KGFsaWduIC0gMSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitcXHRpZiAocGNwdSlcXG4rXFx0XFx0dm1hbGxvY19lbmQgPSBMT0NBTF9QRVJDUFVfRU5EIFxcdTAwMjYgfihhbGlnbiAtIDEpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZtYWxsb2NfZW5kID0gUEVSQ1BVX0VORCBcXHUwMDI2IH4oYWxpZ24gLSAxKTtcXG4rI2Vsc2VcXG4rXFx0dm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCBcXHUwMDI2IH4oYWxpZ24gLSAxKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRpZiAobGlrZWx5KCp2YSkpIHtcXG4gXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JldmVyc2UoKCp2YSksXFxuIFxcdFxcdFxcdFxcdFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0LCBsaXN0KSB7XFxuQEAgLTQ5NjgsMTQgKzQ5ODIsMjIgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc2l6ZV90ICpzaXplcywgaW50IG5yX3ZtcyxcXG4gXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgYWxpZ24pXFxuIHtcXG4tXFx0Y29uc3QgdW5zaWduZWQgbG9uZyB2bWFsbG9jX3N0YXJ0ID0gQUxJR04oVk1BTExPQ19TVEFSVCwgYWxpZ24pO1xcbi1cXHRjb25zdCB1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kID0gVk1BTExPQ19FTkQgXFx1MDAyNiB+KGFsaWduIC0gMSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdm1hbGxvY19zdGFydDtcXG4rXFx0dW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZDtcXG4gXFx0c3RydWN0IHZtYXBfYXJlYSAqKnZhcywgKnZhO1xcbiBcXHRzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zO1xcbiBcXHRpbnQgYXJlYSwgYXJlYTIsIGxhc3RfYXJlYSwgdGVybV9hcmVhO1xcbiBcXHR1bnNpZ25lZCBsb25nIGJhc2UsIHN0YXJ0LCBzaXplLCBlbmQsIGxhc3RfZW5kLCBvcmlnX3N0YXJ0LCBvcmlnX2VuZDtcXG4gXFx0Ym9vbCBwdXJnZWQgPSBmYWxzZTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitcXHR2bWFsbG9jX3N0YXJ0ID0gQUxJR04oUEVSQ1BVX1NUQVJULCBhbGlnbik7XFxuK1xcdHZtYWxsb2NfZW5kID0gUEVSQ1BVX0VORCBcXHUwMDI2IH4oYWxpZ24gLSAxKTtcXG4rI2Vsc2VcXG4rXFx0dm1hbGxvY19zdGFydCA9IEFMSUdOKFZNQUxMT0NfU1RBUlQsIGFsaWduKTtcXG4rXFx0dm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCBcXHUwMDI2IH4oYWxpZ24gLSAxKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHQvKiB2ZXJpZnkgcGFyYW1ldGVycyBhbmQgYWxsb2NhdGUgZGF0YSBzdHJ1Y3R1cmVzICovXFxuIFxcdEJVR19PTihvZmZzZXRfaW5fcGFnZShhbGlnbikgfHwgIWlzX3Bvd2VyX29mXzIoYWxpZ24pKTtcXG4gXFx0Zm9yIChsYXN0X2FyZWEgPSAwLCBhcmVhID0gMDsgYXJlYSBcXHUwMDNjIG5yX3ZtczsgYXJlYSsrKSB7XFxuQEAgLTUwMjQsNyArNTA0Niw3IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKipwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLFxcbiBcXHRlbmQgPSBzdGFydCArIHNpemVzW2FyZWFdO1xcbiBcXG4gXFx0dmEgPSBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIodm1hbGxvY19lbmQpO1xcbi1cXHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFxcdTAwMjZ2YSwgYWxpZ24pIC0gZW5kO1xcbitcXHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFxcdTAwMjZ2YSwgYWxpZ24sIGZhbHNlKSAtIGVuZDtcXG4gXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTUwNDUsNyArNTA2Nyw3IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKipwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLFxcbiBcXHRcXHQgKiBiYXNlIGRvd253YXJkcyBhbmQgdGhlbiByZWNoZWNrLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGJhc2UgKyBlbmQgXFx1MDAzZSB2YS1cXHUwMDNldmFfZW5kKSB7XFxuLVxcdFxcdFxcdGJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoXFx1MDAyNnZhLCBhbGlnbikgLSBlbmQ7XFxuK1xcdFxcdFxcdGJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoXFx1MDAyNnZhLCBhbGlnbiwgZmFsc2UpIC0gZW5kO1xcbiBcXHRcXHRcXHR0ZXJtX2FyZWEgPSBhcmVhO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbkBAIC01MDU1LDcgKzUwNzcsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChiYXNlICsgc3RhcnQgXFx1MDAzYyB2YS1cXHUwMDNldmFfc3RhcnQpIHtcXG4gXFx0XFx0XFx0dmEgPSBub2RlX3RvX3ZhKHJiX3ByZXYoXFx1MDAyNnZhLVxcdTAwM2VyYl9ub2RlKSk7XFxuLVxcdFxcdFxcdGJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoXFx1MDAyNnZhLCBhbGlnbikgLSBlbmQ7XFxuK1xcdFxcdFxcdGJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoXFx1MDAyNnZhLCBhbGlnbiwgZmFsc2UpIC0gZW5kO1xcbiBcXHRcXHRcXHR0ZXJtX2FyZWEgPSBhcmVhO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbkBAIC01MjE4LDYgKzUyNDAsODQgQEAgdm9pZCBwY3B1X2ZyZWVfdm1fYXJlYXMoc3RydWN0IHZtX3N0cnVjdCAqKnZtcywgaW50IG5yX3ZtcylcXG4gXFx0XFx0ZnJlZV92bV9hcmVhKHZtc1tpXSk7XFxuIFxcdGtmcmVlKHZtcyk7XFxuIH1cXG4rXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbisvKiBGaW5kIGZyZWUgdm0gYXJlYSBzdGFydHMgZnJvbSBoaW50ICovXFxuK3N0cnVjdCB2bV9zdHJ1Y3QgKnBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBoaW50LFxcbitcXHRcXHRcXHRcXHQgICAgIGludCB1bml0X3NpemUsIHNpemVfdCBhbGlnbilcXG4re1xcbitcXHRzdHJ1Y3Qgdm1hcF9hcmVhICp0bXBfdmEsICp2YTtcXG4rXFx0c3RydWN0IHZtX3N0cnVjdCAqdm07XFxuK1xcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xcbitcXHR1bnNpZ25lZCBsb25nIGVuZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHZhID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuK1xcdHZtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZtX3N0cnVjdCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXZhIHx8ICF2bSlcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XFxuK1xcbitcXHR0bXBfdmEgPSBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIoaGludCk7XFxuK1xcdGlmICghdG1wX3ZhKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0ZW5kID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFxcdTAwMjZ0bXBfdmEsIGFsaWduLCB0cnVlKTtcXG4rXFxuK1xcdGlmIChoaW50ICsgdW5pdF9zaXplIFxcdTAwM2UgZW5kKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gdmFfY2xpcChcXHUwMDI2ZnJlZV92bWFwX2FyZWFfcm9vdCxcXG4rXFx0XFx0XFx0XFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xpc3QsIHRtcF92YSwgaGludCwgdW5pdF9zaXplKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuK1xcdH1cXG4rXFxuK1xcdHZhLVxcdTAwM2V2YV9zdGFydCA9IGhpbnQ7XFxuK1xcdHZhLVxcdTAwM2V2YV9lbmQgPSBoaW50ICsgdW5pdF9zaXplO1xcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xvY2spO1xcbitcXG4rXFx0aWYgKGthc2FuX3BvcHVsYXRlX3ZtYWxsb2ModmEtXFx1MDAzZXZhX3N0YXJ0LCB1bml0X3NpemUsIEdGUF9LRVJORUwpKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX3NoYWRvdztcXG4rXFxuK1xcdHZuID0gYWRkcl90b19ub2RlKHZhLVxcdTAwM2V2YV9zdGFydCk7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnZuLVxcdTAwM2VidXN5LmxvY2spO1xcbitcXHRpbnNlcnRfdm1hcF9hcmVhKHZhLCBcXHUwMDI2dm4tXFx1MDAzZWJ1c3kucm9vdCwgXFx1MDAyNnZuLVxcdTAwM2VidXN5LmhlYWQpO1xcbitcXHRzZXR1cF92bWFsbG9jX3ZtKHZtLCB2YSwgVk1fQUxMT0MsXFxuK1xcdFxcdFxcdCBwY3B1X2dldF9sb2NhbF92bV9hcmVhKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZuLVxcdTAwM2VidXN5LmxvY2spO1xcbitcXG4rXFx0a2FzYW5fdW5wb2lzb25fdm1hcF9hcmVhcyhcXHUwMDI2dm0sIDEsIEtBU0FOX1ZNQUxMT0NfUFJPVF9OT1JNQUwpO1xcbitcXG4rXFx0cmV0dXJuIHZtO1xcbitcXG4rZXJyX2ZyZWU6XFxuK1xcdGttZW1fY2FjaGVfZnJlZSh2bWFwX2FyZWFfY2FjaGVwLCB2YSk7XFxuK1xcdGtmcmVlKHZtKTtcXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbitcXG4rZXJyX2ZyZWVfc2hhZG93OlxcbitcXHRzcGluX2xvY2soXFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xvY2spO1xcbitcXHR2YSA9IG1lcmdlX29yX2FkZF92bWFwX2FyZWFfYXVnbWVudCh2YSwgXFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsXFxuK1xcdFxcdFxcdFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcXG4rXFx0aWYgKHZhKVxcbitcXHRcXHRrYXNhbl9yZWxlYXNlX3ZtYWxsb2ModmEtXFx1MDAzZXZhX3N0YXJ0LCB2YS1cXHUwMDNldmFfZW5kLCB2YS1cXHUwMDNldmFfc3RhcnQsIHZhLVxcdTAwM2V2YV9lbmQsXFxuK1xcdFxcdFxcdCAgICAgICBLQVNBTl9WTUFMTE9DX1BBR0VfUkFOR0UgfCBLQVNBTl9WTUFMTE9DX1RMQl9GTFVTSCk7XFxuK1xcdGtmcmVlKHZtKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xvY2spO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK31cXG4rI2VuZGlmXFxuICNlbmRpZlxcdC8qIENPTkZJR19TTVAgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfUFJJTlRLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIyOjQwOjI1Ljc5OTY1OTQyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEzMzcxODY4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFwiLFxuICAgIFwiQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcIixcbiAgICBcIkFSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXCIsXG4gICAgXCJORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWFcIixcbiAgICBcIm1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtcIixcbiAgICBcInNldHVwX3BlcmNwdV9wZ2RcIixcbiAgICBcImFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBsb2NhbCBwZXItY3B1IG1hcHBpbmcgc3VwcG9ydCBmb3IgQVJNNjQsIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgcGVyY3B1IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYmFjY2IzNTExZmNhZGQwZmExMmI1MmM3NzkzZjhjZjAxODAwMDZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMjI6NDA6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcbmluZGV4IGIzYWZlMDY4ODkxOWJkLi45NWZmZDE1MTE4N2YyNCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXG5AQCAtNDEsOSArNDEsMTEgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTXG4gXHRzZWxlY3QgQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0VcbiBcdHNlbGVjdCBBUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORyBpZiBBUk02NF9IQUZUXG4rXHRzZWxlY3QgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcbiBcdHNlbGVjdCBBUkNIX0hBU19QUkVFTVBUX0xBWllcbiBcdHNlbGVjdCBBUkNIX0hBU19QVERVTVBcbiBcdHNlbGVjdCBBUkNIX0hBU19QVEVfU1BFQ0lBTFxuK1x0c2VsZWN0IEFSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXG4gXHRzZWxlY3QgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4gXHRzZWxlY3QgQVJDSF9IQVNfU0VUVVBfRE1BX09QU1xuIFx0c2VsZWN0IEFSQ0hfSEFTX1NFVF9ESVJFQ1RfTUFQXG5AQCAtMjI0LDYgKzIyNiw3IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBIQVZFX1JTRVFcbiBcdHNlbGVjdCBIQVZFX1JVU1QgaWYgUlVTVENfU1VQUE9SVFNfQVJNNjRcbitcdHNlbGVjdCBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxuIFx0c2VsZWN0IEhBVkVfU1RBQ0tQUk9URUNUT1JcbiBcdHNlbGVjdCBIQVZFX1NUQVRJQ19DQUxMIGlmIENGSVxuIFx0c2VsZWN0IEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UU1xuQEAgLTIzOSw2ICsyNDIsNyBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuIFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBXG4gXHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXG4rXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbiBcdHNlbGVjdCBORUVEX1NHX0RNQV9MRU5HVEhcbiBcdHNlbGVjdCBPRlxuIFx0c2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFXG5AQCAtNDExLDYgKzQxNSwxMSBAQCBjb25maWcgS0FTQU5fU0hBRE9XX09GRlNFVFxuIGNvbmZpZyBVTldJTkRfVEFCTEVTXG4gXHRib29sXG4gXG4rY29uZmlnIEhBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitcdGRlZl9ib29sIHlcbitcdGRlcGVuZHMgb24gKEFSTTY0X1ZBX0JJVFNfNDggXHUwMDI2XHUwMDI2IChBUk02NF80S19QQUdFUyB8fCBBUk02NF82NEtfUEFHRVMpKSB8fCBcXFxuK1x0XHQgICAoQVJNNjRfVkFfQklUU180NyBcdTAwMjZcdTAwMjYgQVJNNjRfMTZLX1BBR0VTKVxuK1xuIHNvdXJjZSBcImFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXNcIlxuIFxuIG1lbnUgXCJLZXJuZWwgRmVhdHVyZXNcIlxuQEAgLTE1ODEsOSArMTU5MCw2IEBAIGNvbmZpZyBOVU1BXG4gXHRib29sIFwiTlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcIlxuIFx0c2VsZWN0IEdFTkVSSUNfQVJDSF9OVU1BXG4gXHRzZWxlY3QgT0ZfTlVNQVxuLVx0c2VsZWN0IEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4tXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LXG4tXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbiBcdHNlbGVjdCBVU0VfUEVSQ1BVX05VTUFfTk9ERV9JRFxuIFx0aGVscFxuIFx0ICBFbmFibGUgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2Vzcykgc3VwcG9ydC5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaFxuaW5kZXggNWUxMjExYzU0MGFiMjMuLmFhMDgxOGY3ZWM1OGM1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaFxuQEAgLTYzLDYgKzYzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGFybTY0X2tlcm5lbF91bm1hcHBlZF9hdF9lbDAodm9pZClcbiBleHRlcm4gdm9pZCBhcm02NF9tZW1ibG9ja19pbml0KHZvaWQpO1xuIGV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpO1xuIGV4dGVybiB2b2lkIGJvb3RtZW1faW5pdCh2b2lkKTtcbitleHRlcm4gdm9pZCBzZXR1cF9wZXJjcHVfcGdkKHZvaWQpO1xuIGV4dGVybiB2b2lkIGNyZWF0ZV9tYXBwaW5nX25vYWxsb2MocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyB2aXJ0LFxuIFx0XHRcdFx0ICAgcGh5c19hZGRyX3Qgc2l6ZSwgcGdwcm90X3QgcHJvdCk7XG4gZXh0ZXJuIHZvaWQgY3JlYXRlX3BnZF9tYXBwaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwaHlzX2FkZHJfdCBwaHlzLFxuQEAgLTcyLDYgKzczLDEwIEBAIGV4dGVybiB2b2lkICpmaXhtYXBfcmVtYXBfZmR0KHBoeXNfYWRkcl90IGR0X3BoeXMsIGludCAqc2l6ZSwgcGdwcm90X3QgcHJvdCk7XG4gZXh0ZXJuIHZvaWQgbWFya19saW5lYXJfdGV4dF9hbGlhc19ybyh2b2lkKTtcbiBleHRlcm4gaW50IHNwbGl0X2tlcm5lbF9sZWFmX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuIGV4dGVybiB2b2lkIGxpbmVhcl9tYXBfbWF5YmVfc3BsaXRfdG9fcHRlcyh2b2lkKTtcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitleHRlcm4gdm9pZCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcbitcdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucik7XG4rI2VuZGlmXG4gXG4gLypcbiAgKiBUaGlzIGNoZWNrIGlzIHRyaWdnZXJlZCBkdXJpbmcgdGhlIGVhcmx5IGJvb3QgYmVmb3JlIHRoZSBjcHVmZWF0dXJlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXG5pbmRleCA4MDNiNjg3NTgxNTI3NS4uMGU5OTFiOThlZDllYWYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaFxuQEAgLTI3LDYgKzI3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuIFxuIGV4dGVybiBib29sIHJvZGF0YV9mdWxsO1xuK2V4dGVybiBwZ2RfdCAqcGVyY3B1X3BnZFtOUl9DUFVTXTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgY29udGV4dGlkcl90aHJlYWRfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dClcbiB7XG5AQCAtMTM4LDcgKzEzOSwxMyBAQCB2b2lkIF9fY3B1X3JlcGxhY2VfdHRicjEocGdkX3QgKnBnZHAsIGJvb2wgY25wKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X2VuYWJsZV9zd2FwcGVyX2NucCh2b2lkKVxuIHtcbi1cdF9fY3B1X3JlcGxhY2VfdHRicjEobG1fYWxpYXMoc3dhcHBlcl9wZ19kaXIpLCB0cnVlKTtcbitcdHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4rXHRwZ2RfdCAqdHRicjEgPSBwZXJjcHVfcGdkW2NwdV07XG4rXG4rXHRpZiAoY3B1ID09IDApXG4rXHRcdHR0YnIxID0gbG1fYWxpYXMoc3dhcHBlcl9wZ19kaXIpO1xuK1xuK1x0X19jcHVfcmVwbGFjZV90dGJyMSh0dGJyMSwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlcGxhY2VfdHRicjEocGdkX3QgKnBnZHApXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZXJjcHUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcbmluZGV4IGI1N2IyYmIwMDk2Nzc0Li4wM2QxNDlmOTE3N2MwZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcbkBAIC0xNDIsNiArMTQyLDI3IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKVxuICN1bmRlZiBQRVJDUFVfT1BcbiAjdW5kZWYgUEVSQ1BVX1JFVF9PUFxuIFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9sb2NhbF9vZmY7XG4rXG4rI2RlZmluZSBsb2NhbF9jcHVfcHRyKHB0cilcdFx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdF9fdmVyaWZ5X3BjcHVfcHRyKHB0cik7XHRcdFx0XHRcdFx0XFxcbitcdFNISUZUX1BFUkNQVV9QVFIocHRyLCBfX3Blcl9jcHVfbG9jYWxfb2ZmKTtcdFx0XHRcXFxuK30pXG4rXG4rI2RlZmluZSBfcGNwX3Byb3RlY3Qob3AsIHBjcCwgLi4uKVx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdG9wKGxvY2FsX2NwdV9wdHIoXHUwMDI2KHBjcCkpLCBfX1ZBX0FSR1NfXyk7XHRcdFx0XHRcXFxuK30pXG4rXG4rI2RlZmluZSBfcGNwX3Byb3RlY3RfcmV0dXJuKG9wLCBwY3AsIGFyZ3MuLi4pXHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHR5cGVvZihwY3ApIF9fcmV0dmFsO1x0XHRcdFx0XHRcdFxcXG4rXHRfX3JldHZhbCA9ICh0eXBlb2YocGNwKSlvcChsb2NhbF9jcHVfcHRyKFx1MDAyNihwY3ApKSwgIyNhcmdzKTtcdFxcXG4rXHRfX3JldHZhbDtcdFx0XHRcdFx0XHRcdFxcXG4rfSlcbisjZWxzZVxuIC8qXG4gICogSXQgd291bGQgYmUgbmljZSB0byBhdm9pZCB0aGUgY29uZGl0aW9uYWwgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgd2hlblxuICAqIHJlLWVuYWJsaW5nIHByZWVtcHRpb24gZm9yIHByZWVtcHRpYmxlIGtlcm5lbHMsIGJ1dCBkb2luZyB0aGF0IGluIGEgd2F5XG5AQCAtMTUyLDcgKzE3Myw2IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKVxuICAqIHByZWVtcHRpb24gcG9pbnQgd2hlbiBUSUZfTkVFRF9SRVNDSEVEIGdldHMgc2V0IHdoaWxlIHByZWVtcHRpb24gaXNcbiAgKiBkaXNhYmxlZC5cbiAgKi9cbi1cbiAjZGVmaW5lIF9wY3BfcHJvdGVjdChvcCwgcGNwLCAuLi4pXHRcdFx0XHRcdFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0cHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTtcdFx0XHRcdFx0XFxcbkBAIC0xNjgsNiArMTg4LDcgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXG4gXHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XHRcdFx0XHRcdFxcXG4gXHRfX3JldHZhbDtcdFx0XHRcdFx0XHRcdFxcXG4gfSlcbisjZW5kaWZcbiBcbiAjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApXHRcdFxcXG4gXHRfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfOCwgcGNwKVxuQEAgLTI0Myw2ICsyNjQsMTkgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXG4gXG4gI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnNjQocGNwLCBvLCBuKVx0dGhpc19jcHVfY21weGNoZ184KHBjcCwgbywgbilcbiBcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGcxMjgocGNwLCBvLCBuKVx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHR5cGVkZWYgdHlwZW9mKHBjcCkgcGNwX29wX1RfXztcdFx0XHRcdFx0XFxcbitcdHUxMjggb2xkX18sIG5ld19fLCByZXRfXztcdFx0XHRcdFx0XFxcbitcdHBjcF9vcF9UX18gKnB0cl9fO1x0XHRcdFx0XHRcdFxcXG4rXHRvbGRfXyA9IG87XHRcdFx0XHRcdFx0XHRcXFxuK1x0bmV3X18gPSBuO1x0XHRcdFx0XHRcdFx0XFxcbitcdHB0cl9fID0gbG9jYWxfY3B1X3B0cihcdTAwMjYocGNwKSk7XHRcdFx0XHRcdFxcXG4rXHRyZXRfXyA9IGNtcHhjaGcxMjhfbG9jYWwoKHZvaWQgKilwdHJfXywgb2xkX18sIG5ld19fKTtcdFx0XFxcbitcdHJldF9fO1x0XHRcdFx0XHRcdFx0XHRcXFxuK30pXG4rI2Vsc2VcbiAjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGcxMjgocGNwLCBvLCBuKVx0XHRcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdHR5cGVkZWYgdHlwZW9mKHBjcCkgcGNwX29wX1RfXztcdFx0XHRcdFx0XFxcbkBAIC0yNTYsNiArMjkwLDcgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXG4gXHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XHRcdFx0XHRcdFxcXG4gXHRyZXRfXztcdFx0XHRcdFx0XHRcdFx0XFxcbiB9KVxuKyNlbmRpZlxuIFxuICNpZmRlZiBfX0tWTV9OVkhFX0hZUEVSVklTT1JfX1xuIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faHlwX3Blcl9jcHVfb2Zmc2V0KHVuc2lnbmVkIGludCBjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbmluZGV4IDFiNDUwOWQzMzgyYzYzLi5kZDFhYzg0YTExNjA1ZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuQEAgLTMzLDExICszMywyNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApXG4gXHRwdWR2YWwgfD0gKG1tID09IFx1MDAyNmluaXRfbW0pID8gUFVEX1RBQkxFX1VYTiA6IFBVRF9UQUJMRV9QWE47XG4gXHRfX3B1ZF9wb3B1bGF0ZShwdWRwLCBfX3BhKHBtZHApLCBwdWR2YWwpO1xuIH1cbitcbisjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXG4rc3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxuK3tcbitcdHB1ZF9wb3B1bGF0ZShcdTAwMjZpbml0X21tLCBwdWRwLCBwbWRwKTtcbitcdGlmIChBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLIFx1MDAyNiBQR1RCTF9QVURfTU9ESUZJRUQpXG4rXHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XG4rfVxuKyNlbmRpZlxuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcHVkX3BvcHVsYXRlKHB1ZF90ICpwdWRwLCBwaHlzX2FkZHJfdCBwbWRwLCBwdWR2YWxfdCBwcm90KVxuIHtcbiBcdEJVSUxEX0JVRygpO1xuIH1cbitcbisjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXG4rc3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxuK3tcbitcdEJVSUxEX0JVRygpO1xuK31cbisjZW5kaWZcbiAjZW5kaWZcdC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyBcdTAwM2UgMiAqL1xuIFxuICNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDNcbkBAIC0xMjEsNCArMTM3LDEyIEBAIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHAsIHBndGFibGVfdCBwdGVwKVxuIFx0XHQgICAgICAgUE1EX1RZUEVfVEFCTEUgfCBQTURfVEFCTEVfQUYgfCBQTURfVEFCTEVfUFhOKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19BUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQ1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGVfc3luYyh1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwLCBwdGVfdCAqcHRlcClcbit7XG4rXHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZHAsIHB0ZXApO1xuK1x0aWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgXHUwMDI2IFBHVEJMX1BNRF9NT0RJRklFRClcbitcdFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTtcbit9XG4rI2VuZGlmXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMjc2ODljNjJiZDI1ZGQuLjgzY2Q2NTYxMGQ3ZjdkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTgsMTQgKzE4LDM1IEBAXG4gICogVk1BTExPQyByYW5nZS5cbiAgKlxuICAqIFZNQUxMT0NfU1RBUlQ6IGJlZ2lubmluZyBvZiB0aGUga2VybmVsIHZtYWxsb2Mgc3BhY2Vcbi0gKiBWTUFMTE9DX0VORDogZXh0ZW5kcyB0byB0aGUgYXZhaWxhYmxlIHNwYWNlIGJlbG93IHZtZW1tYXBcbisgKiBWTUFMTE9DX0VORDogZXh0ZW5kcyB0byB0aGUgc3BhY2UgYmVsb3cgZ2xvYmFsIHBlcmNwdSBhcmVhXG4gICovXG4gI2RlZmluZSBWTUFMTE9DX1NUQVJUXHRcdChNT0RVTEVTX0VORClcbisjZGVmaW5lIFZNQUxMT0NfRU5EXHRcdChQRVJDUFVfU1RBUlQgLSBTWl84TSlcbitcbisvKlxuKyAqIFBFUkNQVSByYW5nZVxuKyAqXG4rICogUEVSQ1BVX1NUQVJUOiBiZWdpbm5pbmcgb2YgZ2xvYmFsIHBlcmNwdSBhcmVhXG4rICogUEVSQ1BVX0VORDogZW5kIG9mIGdsb2JhbCBwZXJjcHUgYXJlYVxuKyAqIExPQ0FMX1BFUkNQVV9TVEFSVDogYmVnaW5uaW5nIG9mIGxvY2FsIHBlcmNwdSBhcmVhXG4rICogTE9DQUxfUEVSQ1BVX0VORDogZW5kIG9mIGxvY2FsIHBlcmNwdSBhcmVhLCBleHRlbmQgdG8gdGhlIGF2YWlsYWJsZVxuKyAqICAgICAgICAgICAgICAgICAgIHNwYWNlIGJlbG93IHZtZW1tYXBcbisgKi9cbisjaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNEtfUEFHRVMpXG4rI2RlZmluZSBQRVJDUFVfU0laRVx0XHQoMiAqIFBHRElSX1NJWkUpXG4rI2VsaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfMTZLX1BBR0VTKVxuKyNkZWZpbmUgUEVSQ1BVX1NJWkUgICAgICAgICAgICAoMTYgKiBQVURfU0laRSlcbisjZWxpZiBkZWZpbmVkKENPTkZJR19BUk02NF82NEtfUEFHRVMpXG4rI2RlZmluZSBQRVJDUFVfU0laRSAgICAgICAgICAgIChQR0RJUl9TSVpFKVxuKyNlbmRpZlxuKyNkZWZpbmUgUEVSQ1BVX1NUQVJUXHRcdChQRVJDUFVfRU5EIC0gUEVSQ1BVX1NJWkUpXG4rI2RlZmluZSBQRVJDUFVfRU5EXHRcdChMT0NBTF9QRVJDUFVfU1RBUlQpXG4rI2RlZmluZSBMT0NBTF9QRVJDUFVfU1RBUlRcdChMT0NBTF9QRVJDUFVfRU5EIC0gUEVSQ1BVX1NJWkUpXG4gI2lmIFZBX0JJVFMgPT0gVkFfQklUU19NSU5cbi0jZGVmaW5lIFZNQUxMT0NfRU5EXHRcdChWTUVNTUFQX1NUQVJUIC0gU1pfOE0pXG4rI2RlZmluZSBMT0NBTF9QRVJDUFVfRU5EXHQoQUxJR05fRE9XTihWTUVNTUFQX1NUQVJULCBQRVJDUFVfU0laRSkpXG4gI2Vsc2VcbiAjZGVmaW5lIFZNRU1NQVBfVU5VU0VEX05QQUdFU1x0KChfUEFHRV9PRkZTRVQodmFiaXRzX2FjdHVhbCkgLSBQQUdFX09GRlNFVCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4tI2RlZmluZSBWTUFMTE9DX0VORFx0XHQoVk1FTU1BUF9TVEFSVCArIFZNRU1NQVBfVU5VU0VEX05QQUdFUyAqIHNpemVvZihzdHJ1Y3QgcGFnZSkgLSBTWl84TSlcbisjZGVmaW5lIExPQ0FMX1BFUkNQVV9FTkRcdChBTElHTl9ET1dOKChWTUVNTUFQX1NUQVJUICsgVk1FTU1BUF9VTlVTRURfTlBBR0VTICogc2l6ZW9mKHN0cnVjdCBwYWdlKSksIFBFUkNQVV9TSVpFKSlcbiAjZW5kaWZcbiBcbiAjZGVmaW5lIHZtZW1tYXBcdFx0XHQoKHN0cnVjdCBwYWdlICopVk1FTU1BUF9TVEFSVCAtIChtZW1zdGFydF9hZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKSlcbkBAIC0xMjE2LDYgKzEyMzcsMTYgQEAgcDRkX3QgKnA0ZF9vZmZzZXRfbG9ja2xlc3NfZm9sZGVkKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcbiAjZW5kaWYgIC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyBcdTAwM2UgNCAqL1xuIFxuKyNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMlxuKyNkZWZpbmUgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyAgICAgIFBHVEJMX1BNRF9NT0RJRklFRFxuKyNlbGlmIENPTkZJR19QR1RBQkxFX0xFVkVMUyA9PSAzXG4rI2RlZmluZSBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLICAgICAgUEdUQkxfUFVEX01PRElGSUVEXG4rI2VsaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTID09IDRcbisjZGVmaW5lIEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgICAgICBQR1RCTF9QNERfTU9ESUZJRURcbisjZWxpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNVxuKyNkZWZpbmUgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyAgICAgIFBHVEJMX1BHRF9NT0RJRklFRFxuKyNlbmRpZlxuK1xuICNkZWZpbmUgcGdkX0VSUk9SKGUpXHRcXFxuIFx0cHJfZXJyKFwiJXM6JWQ6IGJhZCBwZ2QgJTAxNmxseC5cXG5cIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jXG5pbmRleCAyM2MwNWRjN2E4ZjJhYy4uNmQ0MjBhZDU5YWY0OTIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jXG5AQCAtMzYwLDYgKzM2MCw5IEBAIHZvaWQgX19pbml0IF9fbm9fc2FuaXRpemVfYWRkcmVzcyBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4gXHRzbXBfaW5pdF9jcHVzKCk7XG4gXHRzbXBfYnVpbGRfbXBpZHJfaGFzaCgpO1xuIFxuK1x0LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgc21wX2luaXRfY3B1cyAqL1xuK1x0c2V0dXBfcGVyY3B1X3BnZCgpO1xuK1xuICNpZmRlZiBDT05GSUdfQVJNNjRfU1dfVFRCUjBfUEFOXG4gXHQvKlxuIFx0ICogTWFrZSBzdXJlIGluaXRfdGhyZWFkX2luZm8udHRicjAgYWx3YXlzIGdlbmVyYXRlcyB0cmFuc2xhdGlvblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wLmNcbmluZGV4IGQ0NjAyMmY3MjA3NTQwLi40YTgxMTM3OWMxOTE2MiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zbXAuY1xuQEAgLTU1LDYgKzU1LDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvaXBpLmhcdTAwM2VcbiBcbitleHRlcm4gdm9pZCBpZG1hcF9jcHVfcmVwbGFjZV90dGJyMShwaHlzX2FkZHJfdCBwZ2Rpcik7XG4rXG4gLypcbiAgKiBhcyBmcm9tIDIuNSwga2VybmVscyBubyBsb25nZXIgaGF2ZSBhbiBpbml0X3Rhc2tzIHN0cnVjdHVyZVxuICAqIHNvIHdlIG5lZWQgc29tZSBvdGhlciB3YXkgb2YgdGVsbGluZyBhIG5ldyBzZWNvbmRhcnkgY29yZVxuQEAgLTE5OCw2ICsyMDAsMTIgQEAgYXNtbGlua2FnZSBub3RyYWNlIHZvaWQgc2Vjb25kYXJ5X3N0YXJ0X2tlcm5lbCh2b2lkKVxuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBcdTAwMjZpbml0X21tO1xuIFx0Y29uc3Qgc3RydWN0IGNwdV9vcGVyYXRpb25zICpvcHM7XG4gXHR1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xuK1x0dHlwZWRlZiB2b2lkICh0dGJyX3JlcGxhY2VfZnVuYykocGh5c19hZGRyX3QpO1xuK1x0dHRicl9yZXBsYWNlX2Z1bmMgKnJlcGxhY2VfdHRicjtcbitcbitcdHBoeXNfYWRkcl90IHR0YnIxID0gcGh5c190b190dGJyKHZpcnRfdG9fcGh5cyhwZXJjcHVfcGdkW2NwdV0pKTtcbitcdHJlcGxhY2VfdHRiciA9ICh2b2lkICopX19wYV9zeW1ib2woaWRtYXBfY3B1X3JlcGxhY2VfdHRicjEpO1xuK1x0cmVwbGFjZV90dGJyKHR0YnIxKTtcbiBcbiBcdC8qXG4gXHQgKiBBbGwga2VybmVsIHRocmVhZHMgc2hhcmUgdGhlIHNhbWUgbW0gY29udGV4dDsgZ3JhYiBhXG5AQCAtODE5LDYgKzgyNyw0MiBAQCB2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cylcbiBcdH1cbiB9XG4gXG4rI2lmZGVmIENPTkZJR19OVU1BXG4rZXh0ZXJuIGludCBjcHVfdG9fbm9kZV9tYXBbTlJfQ1BVU107XG4rXG4raW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpXG4re1xuK1x0cmV0dXJuIGNwdV90b19ub2RlX21hcFtjcHVdO1xuK31cbisjZW5kaWZcbitcbisjaWZkZWYgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4rdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfb2Zmc2V0W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7XG4rRVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfb2Zmc2V0KTtcbisvKiBVc2VkIHRvIGNhbGN1bGF0ZSBwY3B1IGxvY2FsIGFkZHJlc3MsIHRoZSBvZmZzZXQgaXMgc2FtZSBmb3IgYWxsIENQVXMgKi9cbit1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9sb2NhbF9vZmYgX19yb19hZnRlcl9pbml0O1xuK0VYUE9SVF9TWU1CT0woX19wZXJfY3B1X2xvY2FsX29mZik7XG4rXG4rdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZGVsdGE7XG4rXHR1bnNpZ25lZCBpbnQgY3B1O1xuK1x0aW50IHJjID0gLUVJTlZBTDtcbitcbisjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXG4rXHQvKiBQQ1BVIHBhZ2UgdGFibGUganVzdCBjYW4gc3VwcG9ydCBQQ1BVX0ZDX1BBR0UgKi9cbitcdHJjID0gcGNwdV9wYWdlX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwgZWFybHlfY3B1X3RvX25vZGUpO1xuKyNlbmRpZlxuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRwYW5pYyhcIkZhaWxlZCB0byBpbml0aWFsaXplIHBlcmNwdSBhcmVhcyAoZXJyPSVkKS5cIiwgcmMpO1xuK1xuK1x0ZGVsdGEgPSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkciAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDtcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXG4rXHRcdF9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IGRlbHRhICsgcGNwdV91bml0X29mZnNldHNbY3B1XTtcbitcdF9fcGVyX2NwdV9sb2NhbF9vZmYgPSAodW5zaWduZWQgbG9uZylwY3B1X2xvY2FsX2Jhc2UgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7XG4rfVxuKyNlbmRpZlxuK1xuIHN0YXRpYyBjb25zdCBjaGFyICppcGlfdHlwZXNbTUFYX0lQSV0gX190cmFjZXBvaW50X3N0cmluZyA9IHtcbiBcdFtJUElfUkVTQ0hFRFVMRV1cdD0gXCJSZXNjaGVkdWxpbmcgaW50ZXJydXB0c1wiLFxuIFx0W0lQSV9DQUxMX0ZVTkNdXHRcdD0gXCJGdW5jdGlvbiBjYWxsIGludGVycnVwdHNcIixcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYyBiL2FyY2gvYXJtNjQvbW0va2FzYW5faW5pdC5jXG5pbmRleCAzZmNhZDk1NmZkZjdjYi4uYThlMjcyYmZlZmUxYTEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmNcbkBAIC02MCwxMyArNjAsMTQgQEAgc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBrYXNhbl9hbGxvY19yYXdfcGFnZShpbnQgbm9kZSlcbiB9XG4gXG4gc3RhdGljIHB0ZV90ICpfX2luaXQga2FzYW5fcHRlX29mZnNldChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcbi1cdFx0XHRcdCAgICAgIGJvb2wgZWFybHkpXG4rXHRcdFx0XHQgICAgICBib29sIGVhcmx5LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpZiAocG1kX25vbmUoUkVBRF9PTkNFKCpwbWRwKSkpIHtcbiBcdFx0cGh5c19hZGRyX3QgcHRlX3BoeXMgPSBlYXJseSA/XG4gXHRcdFx0XHRfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcHRlKVxuIFx0XHRcdFx0XHQ6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpO1xuIFx0XHRfX3BtZF9wb3B1bGF0ZShwbWRwLCBwdGVfcGh5cywgUE1EX1RZUEVfVEFCTEUpO1xuK1x0XHQqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZWFybHkgPyBwdGVfb2Zmc2V0X2tpbWcocG1kcCwgYWRkcilcbkBAIC03NCw0OSArNzUsNTMgQEAgc3RhdGljIHB0ZV90ICpfX2luaXQga2FzYW5fcHRlX29mZnNldChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcbiB9XG4gXG4gc3RhdGljIHBtZF90ICpfX2luaXQga2FzYW5fcG1kX29mZnNldChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcbi1cdFx0XHRcdCAgICAgIGJvb2wgZWFybHkpXG4rXHRcdFx0XHQgICAgICBib29sIGVhcmx5LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpZiAocHVkX25vbmUoUkVBRF9PTkNFKCpwdWRwKSkpIHtcbiBcdFx0cGh5c19hZGRyX3QgcG1kX3BoeXMgPSBlYXJseSA/XG4gXHRcdFx0XHRfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcG1kKVxuIFx0XHRcdFx0XHQ6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpO1xuIFx0XHRfX3B1ZF9wb3B1bGF0ZShwdWRwLCBwbWRfcGh5cywgUFVEX1RZUEVfVEFCTEUpO1xuK1x0XHQqbWFzayB8PSBQR1RCTF9QVURfTU9ESUZJRUQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZWFybHkgPyBwbWRfb2Zmc2V0X2tpbWcocHVkcCwgYWRkcikgOiBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuIH1cbiBcbiBzdGF0aWMgcHVkX3QgKl9faW5pdCBrYXNhbl9wdWRfb2Zmc2V0KHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlLFxuLVx0XHRcdFx0ICAgICAgYm9vbCBlYXJseSlcbitcdFx0XHRcdCAgICAgIGJvb2wgZWFybHksIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdGlmIChwNGRfbm9uZShSRUFEX09OQ0UoKnA0ZHApKSkge1xuIFx0XHRwaHlzX2FkZHJfdCBwdWRfcGh5cyA9IGVhcmx5ID9cbiBcdFx0XHRcdF9fcGFfc3ltYm9sKGthc2FuX2Vhcmx5X3NoYWRvd19wdWQpXG4gXHRcdFx0XHRcdDoga2FzYW5fYWxsb2NfemVyb2VkX3BhZ2Uobm9kZSk7XG4gXHRcdF9fcDRkX3BvcHVsYXRlKHA0ZHAsIHB1ZF9waHlzLCBQNERfVFlQRV9UQUJMRSk7XG4rXHRcdCptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDtcbiBcdH1cbiBcbiBcdHJldHVybiBlYXJseSA/IHB1ZF9vZmZzZXRfa2ltZyhwNGRwLCBhZGRyKSA6IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XG4gfVxuIFxuIHN0YXRpYyBwNGRfdCAqX19pbml0IGthc2FuX3A0ZF9vZmZzZXQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUsXG4tXHRcdFx0XHQgICAgICBib29sIGVhcmx5KVxuK1x0XHRcdFx0ICAgICAgYm9vbCBlYXJseSwgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0aWYgKHBnZF9ub25lKFJFQURfT05DRSgqcGdkcCkpKSB7XG4gXHRcdHBoeXNfYWRkcl90IHA0ZF9waHlzID0gZWFybHkgP1xuIFx0XHRcdFx0X19wYV9zeW1ib2woa2FzYW5fZWFybHlfc2hhZG93X3A0ZClcbiBcdFx0XHRcdFx0OiBrYXNhbl9hbGxvY196ZXJvZWRfcGFnZShub2RlKTtcbiBcdFx0X19wZ2RfcG9wdWxhdGUocGdkcCwgcDRkX3BoeXMsIFBHRF9UWVBFX1RBQkxFKTtcbitcdFx0Km1hc2sgfD0gUEdUQkxfUEdEX01PRElGSUVEO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVhcmx5ID8gcDRkX29mZnNldF9raW1nKHBnZHAsIGFkZHIpIDogcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5KVxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5LFxuK1x0XHRcdFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuLVx0cHRlX3QgKnB0ZXAgPSBrYXNhbl9wdGVfb2Zmc2V0KHBtZHAsIGFkZHIsIG5vZGUsIGVhcmx5KTtcbitcdHB0ZV90ICpwdGVwID0ga2FzYW5fcHRlX29mZnNldChwbWRwLCBhZGRyLCBub2RlLCBlYXJseSwgbWFzayk7XG4gXG4gXHRkbyB7XG4gXHRcdHBoeXNfYWRkcl90IHBhZ2VfcGh5cyA9IGVhcmx5ID9cbkBAIC0xMzAsMzggKzEzNSw0MSBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcHRlX3BvcHVsYXRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wbWRfcG9wdWxhdGUocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSlcbitcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSxcbitcdFx0XHRcdCAgICAgIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbi1cdHBtZF90ICpwbWRwID0ga2FzYW5fcG1kX29mZnNldChwdWRwLCBhZGRyLCBub2RlLCBlYXJseSk7XG4rXHRwbWRfdCAqcG1kcCA9IGthc2FuX3BtZF9vZmZzZXQocHVkcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xuIFxuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7XG4rXHRcdGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgbWFzayk7XG4gXHR9IHdoaWxlIChwbWRwKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCBcdTAwMjZcdTAwMjYgcG1kX25vbmUoUkVBRF9PTkNFKCpwbWRwKSkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcHVkX3BvcHVsYXRlKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpXG4rXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHksXG4rXHRcdFx0XHQgICAgICBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4tXHRwdWRfdCAqcHVkcCA9IGthc2FuX3B1ZF9vZmZzZXQocDRkcCwgYWRkciwgbm9kZSwgZWFybHkpO1xuK1x0cHVkX3QgKnB1ZHAgPSBrYXNhbl9wdWRfb2Zmc2V0KHA0ZHAsIGFkZHIsIG5vZGUsIGVhcmx5LCBtYXNrKTtcbiBcbiBcdGRvIHtcbiBcdFx0bmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuLVx0XHRrYXNhbl9wbWRfcG9wdWxhdGUocHVkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHkpO1xuK1x0XHRrYXNhbl9wbWRfcG9wdWxhdGUocHVkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHksIG1hc2spO1xuIFx0fSB3aGlsZSAocHVkcCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQgXHUwMDI2XHUwMDI2IHB1ZF9ub25lKFJFQURfT05DRSgqcHVkcCkpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5KVxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5LFxuK1x0XHRcdFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuLVx0cDRkX3QgKnA0ZHAgPSBrYXNhbl9wNGRfb2Zmc2V0KHBnZHAsIGFkZHIsIG5vZGUsIGVhcmx5KTtcbitcdHA0ZF90ICpwNGRwID0ga2FzYW5fcDRkX29mZnNldChwZ2RwLCBhZGRyLCBub2RlLCBlYXJseSwgbWFzayk7XG4gXG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwNGRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0a2FzYW5fcHVkX3BvcHVsYXRlKHA0ZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5KTtcbitcdFx0a2FzYW5fcHVkX3BvcHVsYXRlKHA0ZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5LCBtYXNrKTtcbiBcdH0gd2hpbGUgKHA0ZHArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kIFx1MDAyNlx1MDAyNiBwNGRfbm9uZShSRUFEX09OQ0UoKnA0ZHApKSk7XG4gfVxuIFxuQEAgLTE3MCwxMiArMTc4LDE3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wZ2RfcG9wdWxhdGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4gXHRwZ2RfdCAqcGdkcDtcbitcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7XG4gXG4gXHRwZ2RwID0gcGdkX29mZnNldF9rKGFkZHIpO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7XG4rXHRcdGthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgXHUwMDI2bWFzayk7XG4gXHR9IHdoaWxlIChwZ2RwKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG4rXG4rXHRpZiAobWFzayBcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcbitcdFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgZW5kKTtcbiB9XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX0FSTTY0XzY0S19QQUdFUykgfHwgQ09ORklHX1BHVEFCTEVfTEVWRUxTIFx1MDAzZSA0XG5AQCAtMzExLDcgKzMyNCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9pbml0X3NoYWRvdyh2b2lkKVxuIFxuIFx0bW9kX3NoYWRvd19zdGFydCA9ICh1NjQpa2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKU1PRFVMRVNfVkFERFIpO1xuIFxuLVx0dm1hbGxvY19zaGFkb3dfZW5kID0gKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopVk1BTExPQ19FTkQpO1xuK1x0dm1hbGxvY19zaGFkb3dfZW5kID0gKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopTE9DQUxfUEVSQ1BVX0VORCk7XG4gXG4gXHQvKlxuIFx0ICogV2UgYXJlIGdvaW5nIHRvIHBlcmZvcm0gcHJvcGVyIHNldHVwIG9mIHNoYWRvdyBtZW1vcnkuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbmluZGV4IGYyYmU1MDE0NjhjZTVhLi5lZTRhYjAzMWViZjhkNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmNcbisrKyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbkBAIC02Nyw2ICs2Nyw2MyBAQCBsb25nIF9fc2VjdGlvbihcIi5tbXVvZmYuZGF0YS53cml0ZVwiKSBfX2Vhcmx5X2NwdV9ib290X3N0YXR1cztcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN3YXBwZXJfcGdkaXJfbG9jayk7XG4gc3RhdGljIERFRklORV9NVVRFWChmaXhtYXBfbG9jayk7XG4gXG4rcGdkX3QgKnBlcmNwdV9wZ2RbTlJfQ1BVU10gX19yb19hZnRlcl9pbml0O1xuK2Jvb2wgcGVyY3B1X3BnZF9zZXR1cF9kb25lIF9fcm9fYWZ0ZXJfaW5pdCA9IGZhbHNlO1xuK1xuK3ZvaWQgX19pbml0IHNldHVwX3BlcmNwdV9wZ2Qodm9pZClcbit7XG4rXHRpbnQgY3B1O1xuK1xuK1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuK1x0XHR2b2lkICphZGRyO1xuK1xuK1x0XHRpZiAoY3B1ID09IDApIHtcbitcdFx0XHRwZXJjcHVfcGdkW2NwdV0gPSBzd2FwcGVyX3BnX2RpcjtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRhZGRyID0gbWVtYmxvY2tfYWxsb2MoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xuK1x0XHRpZiAoIWFkZHIpXG4rXHRcdFx0cGFuaWMoXCJDYW4ndCBhbGxvYyBwZXJjcHUgcGdkXFxuXCIpO1xuK1xuK1x0XHRtZW1jcHkoYWRkciwgKHZvaWQgKilzd2FwcGVyX3BnX2RpciwgUEFHRV9TSVpFKTtcbitcdFx0cGVyY3B1X3BnZFtjcHVdID0gKHBnZF90ICopYWRkcjtcbitcdH1cbitcbitcdGRzYihpc2hzdCk7XG4rXG4rXHRwZXJjcHVfcGdkX3NldHVwX2RvbmUgPSB0cnVlO1xuK31cbitcbit2b2lkIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyLCBuZXh0O1xuK1x0aW50IGNwdTtcbitcdHBnZF90ICpwZ2RwID0gcGdkX29mZnNldF9rKHN0YXJ0KTtcbitcdHBnZF90IHBnZDtcbitcdHVuc2lnbmVkIGludCBpbmRleCA9IHBnZF9pbmRleChzdGFydCk7XG4rXG4rXHRCVUdfT04oc3RhcnQgXHUwMDNlIGVuZCk7XG4rXG4rXHRpZiAoIXBlcmNwdV9wZ2Rfc2V0dXBfZG9uZSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogRG9uJ3Qgc3luYyBsb2NhbCBwZXJjcHUgYXJlYSBwYWdlIHRhYmxlICovXG4rXHRpZiAoc3RhcnQgXHUwMDNlPSBMT0NBTF9QRVJDUFVfU1RBUlQgXHUwMDI2XHUwMDI2IGVuZCBcdTAwM2MgTE9DQUxfUEVSQ1BVX0VORClcbitcdFx0cmV0dXJuO1xuK1xuK1x0YWRkciA9IHN0YXJ0O1xuK1x0ZG8ge1xuK1x0XHRwZ2QgPSBSRUFEX09OQ0UoKnBnZHApO1xuK1x0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4rXHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbitcdFx0XHRpZiAoY3B1ID09IDApXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRzZXRfcGdkKHBlcmNwdV9wZ2RbY3B1XSArIGluZGV4LCBwZ2QpO1xuK1x0XHR9XG4rXHR9IHdoaWxlIChwZ2RwKyssIGluZGV4KyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG4rfVxuK1xuIHZvaWQgbm9pbnN0ciBzZXRfc3dhcHBlcl9wZ2QocGdkX3QgKnBnZHAsIHBnZF90IHBnZClcbiB7XG4gXHRwZ2RfdCAqZml4bWFwX3BnZHA7XG5AQCAtMTYxLDcgKzIxOCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfY2xlYXJfcGd0YWJsZSh2b2lkICp0YWJsZSlcbiB9XG4gXG4gc3RhdGljIHZvaWQgaW5pdF9wdGUocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tXHRcdCAgICAgcGh5c19hZGRyX3QgcGh5cywgcGdwcm90X3QgcHJvdClcbitcdFx0ICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRkbyB7XG4gXHRcdHB0ZV90IG9sZF9wdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuQEAgLTE3MSw2ICsyMjgsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3B0ZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0ICogYXJlIGRlZmVycmVkIHRvIHRoZSBlbmQgb2YgYWxsb2NfaW5pdF9jb250X3B0ZSgpLlxuIFx0XHQgKi9cbiBcdFx0X19zZXRfcHRlX25vc3luYyhwdGVwLCBwZm5fcHRlKF9fcGh5c190b19wZm4ocGh5cyksIHByb3QpKTtcbitcdFx0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBBZnRlciB0aGUgUFRFIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZVxuQEAgLTE5OCw3ICsyNTYsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXMsXG4gXHRcdFx0ICAgICAgIHBncHJvdF90IHByb3QsXG4gXHRcdFx0ICAgICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSxcbi1cdFx0XHQgICAgICAgaW50IGZsYWdzKVxuK1x0XHRcdCAgICAgICBpbnQgZmxhZ3MsIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbiBcdHBtZF90IHBtZCA9IFJFQURfT05DRSgqcG1kcCk7XG5AQCAtMjE5LDYgKzI3Nyw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRpbml0X2NsZWFyX3BndGFibGUocHRlcCk7XG4gXHRcdHB0ZXAgKz0gcHRlX2luZGV4KGFkZHIpO1xuIFx0XHRfX3BtZF9wb3B1bGF0ZShwbWRwLCBwdGVfcGh5cywgcG1kdmFsKTtcbitcdFx0Km1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEO1xuIFx0fSBlbHNlIHtcbiBcdFx0QlVHX09OKHBtZF9iYWQocG1kKSk7XG4gXHRcdHB0ZXAgPSBwdGVfc2V0X2ZpeG1hcF9vZmZzZXQocG1kcCwgYWRkcik7XG5AQCAtMjM1LDcgKzI5NCw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHQgICAgIXB0ZV9yYW5nZV9oYXNfdmFsaWRfbm9uY29udChwdGVwKSlcbiBcdFx0XHRfX3Byb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwgUFRFX0NPTlQpO1xuIFxuLVx0XHRpbml0X3B0ZShwdGVwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QpO1xuK1x0XHRpbml0X3B0ZShwdGVwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsIG1hc2spO1xuIFxuIFx0XHRwdGVwICs9IHB0ZV9pbmRleChuZXh0KSAtIHB0ZV9pbmRleChhZGRyKTtcbiBcdFx0cGh5cyArPSBuZXh0IC0gYWRkcjtcbkBAIC0yNTMsNyArMzEyLDggQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcHRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXG4gc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0ICAgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QsXG4tXHRcdCAgICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksIGludCBmbGFncylcbitcdFx0ICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSwgaW50IGZsYWdzLFxuK1x0XHQgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuIFxuQEAgLTI2Niw3ICszMjYsMTAgQEAgc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0aWYgKCgoYWRkciB8IG5leHQgfCBwaHlzKSBcdTAwMjYgflBNRF9NQVNLKSA9PSAwIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKGZsYWdzIFx1MDAyNiBOT19CTE9DS19NQVBQSU5HUykgPT0gMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFwbWRfdGFibGUob2xkX3BtZCkpIHtcbi1cdFx0XHRXQVJOX09OKCFwbWRfc2V0X2h1Z2UocG1kcCwgcGh5cywgcHJvdCkpO1xuK1x0XHRcdGlmIChwbWRfc2V0X2h1Z2UocG1kcCwgcGh5cywgcHJvdCkpXG4rXHRcdFx0XHQqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0V0FSTl9PTigxKTtcbiBcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEFmdGVyIHRoZSBQTUQgZW50cnkgaGFzIGJlZW4gcG9wdWxhdGVkIG9uY2UsIHdlXG5AQCAtMjc4LDcgKzM0MSw3IEBAIHN0YXRpYyBpbnQgaW5pdF9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0aW50IHJldDtcbiBcbiBcdFx0XHRyZXQgPSBhbGxvY19pbml0X2NvbnRfcHRlKHBtZHAsIGFkZHIsIG5leHQsIHBoeXMsIHByb3QsXG4tXHRcdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XG4rXHRcdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMzA2LDcgKzM2OSw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3BtZChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgcGh5c19hZGRyX3QgcGh5cyxcbiBcdFx0XHQgICAgICAgcGdwcm90X3QgcHJvdCxcbiBcdFx0XHQgICAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxuLVx0XHRcdCAgICAgICBpbnQgZmxhZ3MpXG4rXHRcdFx0ICAgICAgIGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0aW50IHJldDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbkBAIC0zMzEsNiArMzk0LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGluaXRfY2xlYXJfcGd0YWJsZShwbWRwKTtcbiBcdFx0cG1kcCArPSBwbWRfaW5kZXgoYWRkcik7XG4gXHRcdF9fcHVkX3BvcHVsYXRlKHB1ZHAsIHBtZF9waHlzLCBwdWR2YWwpO1xuK1x0XHQqbWFzayB8PSBQR1RCTF9QVURfTU9ESUZJRUQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRCVUdfT04ocHVkX2JhZChwdWQpKTtcbiBcdFx0cG1kcCA9IHBtZF9zZXRfZml4bWFwX29mZnNldChwdWRwLCBhZGRyKTtcbkBAIC0zNDcsNyArNDExLDggQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdCAgICAhcG1kX3JhbmdlX2hhc192YWxpZF9ub25jb250KHBtZHApKVxuIFx0XHRcdF9fcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7XG4gXG4tXHRcdHJldCA9IGluaXRfcG1kKHBtZHAsIGFkZHIsIG5leHQsIHBoeXMsIF9fcHJvdCwgcGd0YWJsZV9hbGxvYywgZmxhZ3MpO1xuK1x0XHRyZXQgPSBpbml0X3BtZChwbWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsIHBndGFibGVfYWxsb2MsIGZsYWdzLFxuK1x0XHRcdCAgICAgICBtYXNrKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dDtcbiBcbkBAIC0zNjQsNyArNDI5LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gc3RhdGljIGludCBhbGxvY19pbml0X3B1ZChwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHQgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QsXG4gXHRcdFx0ICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksXG4tXHRcdFx0ICBpbnQgZmxhZ3MpXG4rXHRcdFx0ICBpbnQgZmxhZ3MsIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuQEAgLTM4NSw2ICs0NTAsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRpbml0X2NsZWFyX3BndGFibGUocHVkcCk7XG4gXHRcdHB1ZHAgKz0gcHVkX2luZGV4KGFkZHIpO1xuIFx0XHRfX3A0ZF9wb3B1bGF0ZShwNGRwLCBwdWRfcGh5cywgcDRkdmFsKTtcbitcdFx0Km1hc2sgfD0gUEdUQkxfUDREX01PRElGSUVEO1xuIFx0fSBlbHNlIHtcbiBcdFx0QlVHX09OKHA0ZF9iYWQocDRkKSk7XG4gXHRcdHB1ZHAgPSBwdWRfc2V0X2ZpeG1hcF9vZmZzZXQocDRkcCwgYWRkcik7XG5AQCAtNDAyLDcgKzQ2OCwxMCBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHQgICAoKGFkZHIgfCBuZXh0IHwgcGh5cykgXHUwMDI2IH5QVURfTUFTSykgPT0gMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChmbGFncyBcdTAwMjYgTk9fQkxPQ0tfTUFQUElOR1MpID09IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhcHVkX3RhYmxlKG9sZF9wdWQpKSB7XG4tXHRcdFx0V0FSTl9PTighcHVkX3NldF9odWdlKHB1ZHAsIHBoeXMsIHByb3QpKTtcbitcdFx0XHRpZiAocHVkX3NldF9odWdlKHB1ZHAsIHBoeXMsIHByb3QpKVxuK1x0XHRcdFx0Km1hc2sgfD0gUEdUQkxfUFVEX01PRElGSUVEO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdFdBUk5fT04oMSk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBBZnRlciB0aGUgUFVEIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZVxuQEAgLTQxMiw3ICs0ODEsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdFx0XHRcdCAgICAgIFJFQURfT05DRShwdWRfdmFsKCpwdWRwKSkpKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRyZXQgPSBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZHAsIGFkZHIsIG5leHQsIHBoeXMsIHByb3QsXG4tXHRcdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XG4rXHRcdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFxuQEAgLTQzMSw3ICs1MDAsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wNGQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0ICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LFxuIFx0XHRcdCAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxuLVx0XHRcdCAgaW50IGZsYWdzKVxuK1x0XHRcdCAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpbnQgcmV0O1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuQEAgLTQ1Miw2ICs1MjEsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcDRkKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRpbml0X2NsZWFyX3BndGFibGUocDRkcCk7XG4gXHRcdHA0ZHAgKz0gcDRkX2luZGV4KGFkZHIpO1xuIFx0XHRfX3BnZF9wb3B1bGF0ZShwZ2RwLCBwNGRfcGh5cywgcGdkdmFsKTtcbitcdFx0Km1hc2sgfD0gUEdUQkxfUEdEX01PRElGSUVEO1xuIFx0fSBlbHNlIHtcbiBcdFx0QlVHX09OKHBnZF9iYWQocGdkKSk7XG4gXHRcdHA0ZHAgPSBwNGRfc2V0X2ZpeG1hcF9vZmZzZXQocGdkcCwgYWRkcik7XG5AQCAtNDYzLDcgKzUzMyw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wNGQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdG5leHQgPSBwNGRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcbiBcdFx0cmV0ID0gYWxsb2NfaW5pdF9wdWQocDRkcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCxcbi1cdFx0XHRcdCAgICAgcGd0YWJsZV9hbGxvYywgZmxhZ3MpO1xuK1x0XHRcdFx0ICAgICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG5AQCAtNDgzLDcgKzU1Myw3IEBAIHN0YXRpYyBpbnQgX19jcmVhdGVfcGdkX21hcHBpbmdfbG9ja2VkKHBnZF90ICpwZ2RpciwgcGh5c19hZGRyX3QgcGh5cyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHZpcnQsIHBoeXNfYWRkcl90IHNpemUsXG4gXHRcdFx0XHQgICAgICAgcGdwcm90X3QgcHJvdCxcbiBcdFx0XHRcdCAgICAgICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksXG4tXHRcdFx0XHQgICAgICAgaW50IGZsYWdzKVxuK1x0XHRcdFx0ICAgICAgIGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0aW50IHJldDtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciwgZW5kLCBuZXh0O1xuQEAgLTUwMyw3ICs1NzMsNyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nX2xvY2tlZChwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsXG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0cmV0ID0gYWxsb2NfaW5pdF9wNGQocGdkcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCwgcGd0YWJsZV9hbGxvYyxcbi1cdFx0XHRcdCAgICAgZmxhZ3MpO1xuK1x0XHRcdFx0ICAgICBmbGFncywgbWFzayk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0cGh5cyArPSBuZXh0IC0gYWRkcjtcbkBAIC01MTYsMTMgKzU4NiwxMyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHBnZF90ICpwZ2RpciwgcGh5c19hZGRyX3QgcGh5cyxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgdmlydCwgcGh5c19hZGRyX3Qgc2l6ZSxcbiBcdFx0XHRcdHBncHJvdF90IHByb3QsXG4gXHRcdFx0XHRwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksXG4tXHRcdFx0XHRpbnQgZmxhZ3MpXG4rXHRcdFx0XHRpbnQgZmxhZ3MsIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdGludCByZXQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmZpeG1hcF9sb2NrKTtcbiBcdHJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nX2xvY2tlZChwZ2RpciwgcGh5cywgdmlydCwgc2l6ZSwgcHJvdCxcbi1cdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XG4rXHRcdFx0XHRcdCAgcGd0YWJsZV9hbGxvYywgZmxhZ3MsIG1hc2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZpeG1hcF9sb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtNTM1LDkgKzYwNSwxMCBAQCBzdGF0aWMgdm9pZCBlYXJseV9jcmVhdGVfcGdkX21hcHBpbmcocGdkX3QgKnBnZGlyLCBwaHlzX2FkZHJfdCBwaHlzLFxuIFx0XHRcdFx0ICAgICBpbnQgZmxhZ3MpXG4ge1xuIFx0aW50IHJldDtcbitcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xuIFxuIFx0cmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmcocGdkaXIsIHBoeXMsIHZpcnQsIHNpemUsIHByb3QsIHBndGFibGVfYWxsb2MsXG4tXHRcdFx0XHQgICBmbGFncyk7XG4rXHRcdFx0XHQgICBmbGFncywgXHUwMDI2bWFzayk7XG4gXHRpZiAocmV0KVxuIFx0XHRwYW5pYyhcIkZhaWxlZCB0byBjcmVhdGUgcGFnZSB0YWJsZXNcXG5cIik7XG4gfVxuQEAgLTEwMDksNiArMTA4MCwyOSBAQCB2b2lkIF9faW5pdCBsaW5lYXJfbWFwX21heWJlX3NwbGl0X3RvX3B0ZXModm9pZClcbiBcdH1cbiB9XG4gXG4rI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4rdm9pZCBfX2luaXQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsXG4rXHRcdFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucilcbit7XG4rXHRpbnQgaSwgcmV0O1xuK1x0cGd0YmxfbW9kX21hc2sgbWFzayA9IDA7XG4rXG4rXHRhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yOyBpKyspIHtcbitcdFx0cGh5c19hZGRyX3QgcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSk7XG4rXHRcdHJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHBlcmNwdV9wZ2RbY3B1XSwgcGh5cywgdmlydCwgUEFHRV9TSVpFLCBQQUdFX0tFUk5FTCxcbitcdFx0XHRcdFx0ICAgZWFybHlfcGd0YWJsZV9hbGxvYywgTk9fRVhFQ19NQVBQSU5HUywgXHUwMDI2bWFzayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cGFuaWMoXCJGYWlsZWQgdG8gY3JlYXRlIGxvY2FsIHBlcmNwdSBmaXJzdCBjaHVua1xcblwiKTtcbitcbitcdFx0dmlydCArPSBQQUdFX1NJWkU7XG4rXHR9XG4rXG4rXHRhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTtcbit9XG4rI2VuZGlmXG4rXG4gLypcbiAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgdG8gbW9kaWZ5IGV4aXN0aW5nIHRhYmxlIGVudHJpZXMsXG4gICogd2l0aG91dCBhbGxvY2F0aW5nIG5ldyBsZXZlbHMgb2YgdGFibGUuIE5vdGUgdGhhdCB0aGlzIHBlcm1pdHMgdGhlXG5AQCAtMTI3OSw2ICsxMzczLDcgQEAgc3RhdGljIGludCBfX2luaXQgX19rcHRpX2luc3RhbGxfbmdfbWFwcGluZ3Modm9pZCAqX191bnVzZWQpXG4gXG4gXHRpZiAoIWNwdSkge1xuIFx0XHRpbnQgcmV0O1xuK1x0XHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiBcbiBcdFx0YWxsb2MgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMgfCBfX0dGUF9aRVJPLCBvcmRlcik7XG4gXHRcdGtwdGlfbmdfdGVtcF9wZ2QgPSAocGdkX3QgKikoYWxsb2MgKyAobGV2ZWxzIC0gMSkgKiBQQUdFX1NJWkUpO1xuQEAgLTEzMDIsNyArMTM5Nyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fa3B0aV9pbnN0YWxsX25nX21hcHBpbmdzKHZvaWQgKl9fdW51c2VkKVxuIFx0XHQvL1xuIFx0XHRyZXQgPSBfX2NyZWF0ZV9wZ2RfbWFwcGluZ19sb2NrZWQoa3B0aV9uZ190ZW1wX3BnZCwgX19wYShhbGxvYyksXG4gXHRcdFx0XHRcdFx0ICBLUFRJX05HX1RFTVBfVkEsIFBBR0VfU0laRSwgUEFHRV9LRVJORUwsXG4tXHRcdFx0XHRcdFx0ICBrcHRpX25nX3BnZF9hbGxvYywgMCk7XG4rXHRcdFx0XHRcdFx0ICBrcHRpX25nX3BnZF9hbGxvYywgMCwgXHUwMDI2bWFzayk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cGFuaWMoXCJGYWlsZWQgdG8gY3JlYXRlIHBhZ2UgdGFibGVzXFxuXCIpO1xuIFx0fVxuQEAgLTE2MDgsNyArMTcwMyw3IEBAIHN0YXRpYyB2b2lkIHVubWFwX2hvdHBsdWdfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcbiBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGZsb29yLFxuLVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZylcbitcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcsIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdHB0ZV90ICpwdGVwLCBwdGU7XG4gXHR1bnNpZ25lZCBsb25nIGksIHN0YXJ0ID0gYWRkcjtcbkBAIC0xNjI0LDYgKzE3MTksNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRXQVJOX09OKCFwdGVfbm9uZShwdGUpKTtcbiBcdH0gd2hpbGUgKGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyIFx1MDAzYyBlbmQpO1xuIFxuK1x0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xuIFx0aWYgKCFwZ3RhYmxlX3JhbmdlX2FsaWduZWQoc3RhcnQsIGVuZCwgZmxvb3IsIGNlaWxpbmcsIFBNRF9NQVNLKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTE2MzksMTMgKzE3MzUsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdH1cbiBcbiBcdHBtZF9jbGVhcihwbWRwKTtcbitcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKHN0YXJ0KTtcbiBcdGZyZWVfaG90cGx1Z19wZ3RhYmxlX3BhZ2UodmlydF90b19wYWdlKHB0ZXApKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wbWRfdGFibGUocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcbi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcpXG4rXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBjZWlsaW5nLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRwbWRfdCAqcG1kcCwgcG1kO1xuIFx0dW5zaWduZWQgbG9uZyBpLCBuZXh0LCBzdGFydCA9IGFkZHI7XG5AQCAtMTY1OCw3ICsxNzU1LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wbWRfdGFibGUocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0V0FSTl9PTighcG1kX3ByZXNlbnQocG1kKSB8fCAhcG1kX3RhYmxlKHBtZCkpO1xuLVx0XHRmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRwLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZyk7XG4rXHRcdGZyZWVfZW1wdHlfcHRlX3RhYmxlKHBtZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nLCBtYXNrKTtcbiBcdH0gd2hpbGUgKGFkZHIgPSBuZXh0LCBhZGRyIFx1MDAzYyBlbmQpO1xuIFxuIFx0aWYgKENPTkZJR19QR1RBQkxFX0xFVkVMUyBcdTAwM2M9IDIpXG5AQCAtMTY3OSwxMyArMTc3NiwxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0fVxuIFxuIFx0cHVkX2NsZWFyKHB1ZHApO1xuK1x0Km1hc2sgfD0gUEdUQkxfUFVEX01PRElGSUVEO1xuIFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoc3RhcnQpO1xuIFx0ZnJlZV9ob3RwbHVnX3BndGFibGVfcGFnZSh2aXJ0X3RvX3BhZ2UocG1kcCkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B1ZF90YWJsZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGZsb29yLFxuLVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZylcbitcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcsIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdHB1ZF90ICpwdWRwLCBwdWQ7XG4gXHR1bnNpZ25lZCBsb25nIGksIG5leHQsIHN0YXJ0ID0gYWRkcjtcbkBAIC0xNjk4LDcgKzE3OTYsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B1ZF90YWJsZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRXQVJOX09OKCFwdWRfcHJlc2VudChwdWQpIHx8ICFwdWRfdGFibGUocHVkKSk7XG4tXHRcdGZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTtcbitcdFx0ZnJlZV9lbXB0eV9wbWRfdGFibGUocHVkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIG1hc2spO1xuIFx0fSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgXHUwMDNjIGVuZCk7XG4gXG4gXHRpZiAoIXBndGFibGVfbDRfZW5hYmxlZCgpKVxuQEAgLTE3MTksMTMgKzE4MTcsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdH1cbiBcbiBcdHA0ZF9jbGVhcihwNGRwKTtcbitcdCptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKHN0YXJ0KTtcbiBcdGZyZWVfaG90cGx1Z19wZ3RhYmxlX3BhZ2UodmlydF90b19wYWdlKHB1ZHApKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wNGRfdGFibGUocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcbi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcpXG4rXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBjZWlsaW5nLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRwNGRfdCAqcDRkcCwgcDRkO1xuIFx0dW5zaWduZWQgbG9uZyBpLCBuZXh0LCBzdGFydCA9IGFkZHI7XG5AQCAtMTczOCw3ICsxODM3LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wNGRfdGFibGUocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0V0FSTl9PTighcDRkX3ByZXNlbnQocDRkKSk7XG4tXHRcdGZyZWVfZW1wdHlfcHVkX3RhYmxlKHA0ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTtcbitcdFx0ZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIG1hc2spO1xuIFx0fSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgXHUwMDNjIGVuZCk7XG4gXG4gXHRpZiAoIXBndGFibGVfbDVfZW5hYmxlZCgpKVxuQEAgLTE3NTksNiArMTg1OCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHR9XG4gXG4gXHRwZ2RfY2xlYXIocGdkcCk7XG4rXHQqbWFzayB8PSBQR1RCTF9QR0RfTU9ESUZJRUQ7XG4gXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShzdGFydCk7XG4gXHRmcmVlX2hvdHBsdWdfcGd0YWJsZV9wYWdlKHZpcnRfdG9fcGFnZShwNGRwKSk7XG4gfVxuQEAgLTE3NjgsNiArMTg2OCw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfdGFibGVzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuIFx0cGdkX3QgKnBnZHAsIHBnZDtcbitcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7XG4gXG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbkBAIC0xNzc3LDggKzE4NzksMTEgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV90YWJsZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0V0FSTl9PTighcGdkX3ByZXNlbnQocGdkKSk7XG4tXHRcdGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTtcbitcdFx0ZnJlZV9lbXB0eV9wNGRfdGFibGUocGdkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIFx1MDAyNm1hc2spO1xuIFx0fSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgXHUwMDNjIGVuZCk7XG4rXG4rXHRpZiAobWFzayBcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcbitcdFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgZW5kKTtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtMTk4Niw2ICsyMDkxLDcgQEAgaW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuIFx0XHQgICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRpbnQgcmV0LCBmbGFncyA9IE5PX0VYRUNfTUFQUElOR1M7XG4rXHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiBcbiBcdFZNX0JVR19PTighbWhwX3JhbmdlX2FsbG93ZWQoc3RhcnQsIHNpemUsIHRydWUpKTtcbiBcbkBAIC0xOTk0LDEwICsyMTAwLDEzIEBAIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcbiBcdHJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHN3YXBwZXJfcGdfZGlyLCBzdGFydCwgX19waHlzX3RvX3ZpcnQoc3RhcnQpLFxuIFx0XHRcdFx0ICAgc2l6ZSwgcGFyYW1zLVx1MDAzZXBncHJvdCwgcGdkX3BndGFibGVfYWxsb2NfaW5pdF9tbSxcbi1cdFx0XHRcdCAgIGZsYWdzKTtcbitcdFx0XHRcdCAgIGZsYWdzLCBcdTAwMjZtYXNrKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZXJyO1xuIFxuK1x0aWYgKG1hc2sgXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXG4rXHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7XG4rXG4gXHRtZW1ibG9ja19jbGVhcl9ub21hcChzdGFydCwgc2l6ZSk7XG4gXG4gXHRyZXQgPSBfX2FkZF9wYWdlcyhuaWQsIHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uZGQyOTMzMTk4MjNlM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4rKysgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMzg5LDYgKzM4OSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBwdGR1bXBfaW5pdCh2b2lkKVxuIFx0XHR7IE1PRFVMRVNfRU5ELFx0XHRcIk1vZHVsZXMgZW5kXCIgfSxcbiBcdFx0eyBWTUFMTE9DX1NUQVJULFx0XCJ2bWFsbG9jKCkgYXJlYVwiIH0sXG4gXHRcdHsgVk1BTExPQ19FTkQsXHRcdFwidm1hbGxvYygpIGVuZFwiIH0sXG4rXHRcdHsgUEVSQ1BVX1NUQVJULFx0XHRcIkdsb2JhbCBwZXJjcHUgc3RhcnRcIiB9LFxuK1x0XHR7IFBFUkNQVV9FTkQsXHRcdFwiR2xvYmFsIHBlcmNwdSBlbmRcIiB9LFxuK1x0XHR7IExPQ0FMX1BFUkNQVV9TVEFSVCxcdFwiTG9jYWwgcGVyY3B1IHN0YXJ0XCIgfSxcbitcdFx0eyBMT0NBTF9QRVJDUFVfRU5ELFx0XCJMb2NhbCBwZXJjcHUgZW5kXCIgfSxcbiBcdFx0eyB2bWVtbWFwX3N0YXJ0LFx0XCJ2bWVtbWFwIHN0YXJ0XCIgfSxcbiBcdFx0eyBWTUVNTUFQX0VORCxcdFx0XCJ2bWVtbWFwIGVuZFwiIH0sXG4gXHRcdHsgUENJX0lPX1NUQVJULFx0XHRcIlBDSSBJL08gc3RhcnRcIiB9LFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcC5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc21wLmNcbmluZGV4IGZhNjZmOWM5N2Q3NDhkLi5kNDIwZmY5ZGNmNGZjOCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcC5jXG4rKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuY1xuQEAgLTM2NCwzICszNjQsNTQgQEAgdm9pZCBrZ2RiX3JvdW5kdXBfY3B1cyh2b2lkKVxuIFx0fVxuIH1cbiAjZW5kaWZcbitcbisjaWZkZWYgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4rZXh0ZXJuIGludCBjcHVfdG9fbm9kZV9tYXBbTlJfQ1BVU107XG4rXG4rdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfb2Zmc2V0W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7XG4rRVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfb2Zmc2V0KTtcbitcbitpbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSlcbit7XG4rXHRyZXR1cm4gY3B1X3RvX25vZGVfbWFwW2NwdV07XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IHBjcHVfY3B1X2Rpc3RhbmNlKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pXG4re1xuK1x0cmV0dXJuIG5vZGVfZGlzdGFuY2UoZWFybHlfY3B1X3RvX25vZGUoZnJvbSksIGVhcmx5X2NwdV90b19ub2RlKHRvKSk7XG4rfVxuK1xuK3ZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGRlbHRhO1xuK1x0dW5zaWduZWQgaW50IGNwdTtcbitcdGludCByYyA9IC1FSU5WQUw7XG4rXG4rXHRpZiAocGNwdV9jaG9zZW5fZmMgIT0gUENQVV9GQ19QQUdFKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEFsd2F5cyByZXNlcnZlIGFyZWEgZm9yIG1vZHVsZSBwZXJjcHUgdmFyaWFibGVzLiAgVGhhdCdzXG4rXHRcdCAqIHdoYXQgdGhlIGxlZ2FjeSBhbGxvY2F0b3IgZGlkLlxuK1x0XHQgKi9cbitcdFx0cmMgPSBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSxcbitcdFx0XHRcdFx0ICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUsIFBBR0VfU0laRSxcbitcdFx0XHRcdFx0ICAgIHBjcHVfY3B1X2Rpc3RhbmNlLFxuK1x0XHRcdFx0XHQgICAgZWFybHlfY3B1X3RvX25vZGUpO1xuKyNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbitcdFx0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRcdHByX3dhcm4oXCJQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxcblwiLFxuK1x0XHRcdFx0ICAgcGNwdV9mY19uYW1lc1twY3B1X2Nob3Nlbl9mY10sIHJjKTtcbisjZW5kaWZcbitcdH1cbitcbisjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdHJjID0gcGNwdV9wYWdlX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwgZWFybHlfY3B1X3RvX25vZGUpO1xuKyNlbmRpZlxuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRwYW5pYyhcIkZhaWxlZCB0byBpbml0aWFsaXplIHBlcmNwdSBhcmVhcyAoZXJyPSVkKS5cIiwgcmMpO1xuK1xuK1x0ZGVsdGEgPSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkciAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDtcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXG4rXHRcdF9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IGRlbHRhICsgcGNwdV91bml0X29mZnNldHNbY3B1XTtcbit9XG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jIGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jXG5pbmRleCBjOTlmMmFiMTA1ZTViNy4uYjNiOTFjZWVkNmE5MGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmNcbisrKyBiL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xuQEAgLTE2LDcgKzE2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2VjdGlvbnMuaFx1MDAzZVxuIFxuLXN0YXRpYyBpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IE5VTUFfTk9fTk9ERSB9O1xuK2ludCBjcHVfdG9fbm9kZV9tYXBbTlJfQ1BVU10gPSB7IFswIC4uLiBOUl9DUFVTLTFdID0gTlVNQV9OT19OT0RFIH07XG4gXG4gYm9vbCBudW1hX29mZjtcbiBcbkBAIC0xNDAsNTUgKzE0MCw2IEBAIHZvaWQgX19pbml0IGVhcmx5X21hcF9jcHVfdG9fbm9kZSh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgbmlkKVxuIFx0XHRzZXRfY3B1X251bWFfbm9kZShjcHUsIG5pZCk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcbi11bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseTtcbi1FWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9vZmZzZXQpO1xuLVxuLWludCBlYXJseV9jcHVfdG9fbm9kZShpbnQgY3B1KVxuLXtcbi1cdHJldHVybiBjcHVfdG9fbm9kZV9tYXBbY3B1XTtcbi19XG4tXG4tc3RhdGljIGludCBfX2luaXQgcGNwdV9jcHVfZGlzdGFuY2UodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCB0bylcbi17XG4tXHRyZXR1cm4gbm9kZV9kaXN0YW5jZShlYXJseV9jcHVfdG9fbm9kZShmcm9tKSwgZWFybHlfY3B1X3RvX25vZGUodG8pKTtcbi19XG4tXG4tdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgZGVsdGE7XG4tXHR1bnNpZ25lZCBpbnQgY3B1O1xuLVx0aW50IHJjID0gLUVJTlZBTDtcbi1cbi1cdGlmIChwY3B1X2Nob3Nlbl9mYyAhPSBQQ1BVX0ZDX1BBR0UpIHtcbi1cdFx0Lypcbi1cdFx0ICogQWx3YXlzIHJlc2VydmUgYXJlYSBmb3IgbW9kdWxlIHBlcmNwdSB2YXJpYWJsZXMuICBUaGF0J3Ncbi1cdFx0ICogd2hhdCB0aGUgbGVnYWN5IGFsbG9jYXRvciBkaWQuXG4tXHRcdCAqL1xuLVx0XHRyYyA9IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLFxuLVx0XHRcdFx0XHQgICAgUEVSQ1BVX0RZTkFNSUNfUkVTRVJWRSwgUEFHRV9TSVpFLFxuLVx0XHRcdFx0XHQgICAgcGNwdV9jcHVfZGlzdGFuY2UsXG4tXHRcdFx0XHRcdCAgICBlYXJseV9jcHVfdG9fbm9kZSk7XG4tI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuLVx0XHRpZiAocmMgXHUwMDNjIDApXG4tXHRcdFx0cHJfd2FybihcIlBFUkNQVTogJXMgYWxsb2NhdG9yIGZhaWxlZCAoJWQpLCBmYWxsaW5nIGJhY2sgdG8gcGFnZSBzaXplXFxuXCIsXG4tXHRcdFx0XHQgICBwY3B1X2ZjX25hbWVzW3BjcHVfY2hvc2VuX2ZjXSwgcmMpO1xuLSNlbmRpZlxuLVx0fVxuLVxuLSNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbi1cdGlmIChyYyBcdTAwM2MgMClcbi1cdFx0cmMgPSBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLCBlYXJseV9jcHVfdG9fbm9kZSk7XG4tI2VuZGlmXG4tXHRpZiAocmMgXHUwMDNjIDApXG4tXHRcdHBhbmljKFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcGVyY3B1IGFyZWFzIChlcnI9JWQpLlwiLCByYyk7XG4tXG4tXHRkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0O1xuLVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbi1cdFx0X19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgKyBwY3B1X3VuaXRfb2Zmc2V0c1tjcHVdO1xuLX1cbi0jZW5kaWZcbi1cbiAvKlxuICAqIEluaXRpYWxpemUgTk9ERV9EQVRBIGZvciBhIG5vZGUgb24gdGhlIGxvY2FsIG1lbW9yeVxuICAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLmM4YzM4MDBmYmQ5ZmEwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0xODU4LDYgKzE4NTgsMTcgQEAgdW5zaWduZWQgbG9uZyB2bWFsbG9jX3RvX3Bmbihjb25zdCB2b2lkICphZGRyKTtcbiAjaWZkZWYgQ09ORklHX01NVVxuIGV4dGVybiBib29sIGlzX3ZtYWxsb2NfYWRkcihjb25zdCB2b2lkICp4KTtcbiBleHRlcm4gaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCk7XG4rI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4rc3RhdGljIGlubGluZSBib29sIGlzX3BlcmNwdV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rXHRyZXR1cm4gYWRkciBcdTAwM2U9IFBFUkNQVV9TVEFSVCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2MgTE9DQUxfUEVSQ1BVX0VORDtcbit9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGVyY3B1X2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rI2VuZGlmXG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdm1hbGxvY19hZGRyKGNvbnN0IHZvaWQgKngpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oXG5pbmRleCA0ZjM2Yjg1ODU5OTVjNS4uNWEyNzAzMWRmZjFhNWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oXG5AQCAtNzUsNiArNzUsOCBAQFxuIFxuIGV4dGVybiB2b2lkICpwY3B1X2Jhc2VfYWRkcjtcbiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyAqcGNwdV91bml0X29mZnNldHM7XG4rLyogcGVyY3B1IGxvY2FsIG1hcHBpbmcgYmFzZSAqL1xuK2V4dGVybiB2b2lkICpwY3B1X2xvY2FsX2Jhc2U7XG4gXG4gc3RydWN0IHBjcHVfZ3JvdXBfaW5mbyB7XG4gXHRpbnRcdFx0XHRucl91bml0cztcdC8qIGFsaWduZWQgIyBvZiB1bml0cyAqL1xuQEAgLTExNCw3ICsxMTYsNyBAQCBleHRlcm4gc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBwY3B1X2FsbG9jX2FsbG9jX2luZm8oaW50IG5yX2dyb3VwcyxcbiBleHRlcm4gdm9pZCBfX2luaXQgcGNwdV9mcmVlX2FsbG9jX2luZm8oc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWkpO1xuIFxuIGV4dGVybiB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLFxuLVx0XHRcdFx0XHQgdm9pZCAqYmFzZV9hZGRyKTtcbitcdFx0XHRcdFx0IHZvaWQgKmJhc2VfYWRkciwgdm9pZCAqbG9jYWxfYmFzZSk7XG4gXG4gZXh0ZXJuIGludCBfX2luaXQgcGNwdV9lbWJlZF9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgc2l6ZV90IGR5bl9zaXplLFxuIFx0XHRcdFx0c2l6ZV90IGF0b21fc2l6ZSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oXG5pbmRleCA5MTc0ZmE1OWJiYzU0ZC4uMDYyYzY0YTVkNGJkMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmhcbkBAIC0yNiw0ICsyNiwxNyBAQFxuIFx0XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XHRcdFxcXG4gXHR9IHdoaWxlICgwKVxuIFxuKyNpZm5kZWYgQ09ORklHX0FSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXG4rI2RlZmluZSBwdWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwdWQsIHBtZClcdFx0XHRcdFxcXG4rXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdHB1ZF9wb3B1bGF0ZShcdTAwMjZpbml0X21tLCBwdWQsIHBtZCk7XHRcdFx0XFxcbitcdH0gd2hpbGUgKDApXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBDT05GSUdfQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcbisjZGVmaW5lIHBtZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHBtZCwgcHRlKVx0XHRcdFx0XFxcbitcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWQsIHB0ZSk7XHRcdFxcXG4rXHR9IHdoaWxlICgwKVxuKyNlbmRpZlxuICNlbmRpZiAvKiBfTElOVVhfUEdBTExPQ19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaFxuaW5kZXggZDg3ZGM3Zjc3ZjRlOGEuLmRhZjk5NjVhMTExZDFmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oXG5AQCAtMzEzLDYgKzMxMyw5IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKipwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLFxuIFx0XHRcdFx0ICAgICBzaXplX3QgYWxpZ24pO1xuIFxuIHZvaWQgcGNwdV9mcmVlX3ZtX2FyZWFzKHN0cnVjdCB2bV9zdHJ1Y3QgKip2bXMsIGludCBucl92bXMpO1xuK3N0cnVjdCB2bV9zdHJ1Y3QgKnBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBoaW50LFxuK1x0XHRcdFx0ICAgICBpbnQgdW5pdF9zaXplLCBzaXplX3QgYWxpZ24pO1xuK1xuICMgZWxzZVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZtX3N0cnVjdCAqKlxuIHBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcbmluZGV4IDllMGNhNDgyNDkwNTRmLi5lMTkxMGMzMzI2Mzg1MSAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbisrKyBiL21tL0tjb25maWdcbkBAIC0xMDYxLDYgKzEwNjEsOSBAQCBjb25maWcgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbiBjb25maWcgVVNFX1BFUkNQVV9OVU1BX05PREVfSURcbiBcdGJvb2xcbiBcbitjb25maWcgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuK1x0Ym9vbFxuK1xuIGNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxuIFx0Ym9vbFxuIFxuQEAgLTE1MDksNiArMTUxMiwxMiBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXG4gXG4gXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gXG4rY29uZmlnIEFSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DXG4rXHRib29sXG4rXG4rY29uZmlnIEFSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXG4rXHRib29sXG4rXG4gc291cmNlIFwibW0vZGFtb24vS2NvbmZpZ1wiXG4gXG4gZW5kbWVudVxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAxODFlNzlmMWQ2YTIwNy4uOWQ5ZjA4Y2IyNmExMTQgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMTU1MiwxMCArMTU1MiwxMyBAQCB2b2lkIGNsZWFyX3ZtX3VuaW5pdGlhbGl6ZWRfZmxhZyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSk7XG4gaW50IF9fbXVzdF9jaGVjayBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9zaGlmdCk7XG4raW50IF9fbXVzdF9jaGVjayB2bWFwX3JhbmdlX25vZmx1c2gocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXNfYWRkcixcbitcdFx0XHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpO1xuIFxuIHZvaWQgdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuIFxuLXZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG4rdm9pZCBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfc2luZ2xlX3RocmVhZGVkX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuZGlmZiAtLWdpdCBhL21tL2ttc2FuL2hvb2tzLmMgYi9tbS9rbXNhbi9ob29rcy5jXG5pbmRleCA4ZjIyZDFmMjI5ODEzZi4uZTJhMGZhZjM0NGI5MWIgMTAwNjQ0XG4tLS0gYS9tbS9rbXNhbi9ob29rcy5jXG4rKysgYi9tbS9rbXNhbi9ob29rcy5jXG5AQCAtMTM1LDggKzEzNSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZtYWxsb2Nfb3JpZ2luKHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcbiB2b2lkIGttc2FuX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbi1cdF9fdnVubWFwX3JhbmdlX25vZmx1c2godm1hbGxvY19zaGFkb3coc3RhcnQpLCB2bWFsbG9jX3NoYWRvdyhlbmQpKTtcbi1cdF9fdnVubWFwX3JhbmdlX25vZmx1c2godm1hbGxvY19vcmlnaW4oc3RhcnQpLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcbitcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHZtYWxsb2Nfc2hhZG93KHN0YXJ0KSwgdm1hbGxvY19zaGFkb3coZW5kKSk7XG4rXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2bWFsbG9jX29yaWdpbihzdGFydCksIHZtYWxsb2Nfb3JpZ2luKGVuZCkpO1xuIFx0Zmx1c2hfY2FjaGVfdm1hcCh2bWFsbG9jX3NoYWRvdyhzdGFydCksIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xuIFx0Zmx1c2hfY2FjaGVfdm1hcCh2bWFsbG9jX29yaWdpbihzdGFydCksIHZtYWxsb2Nfb3JpZ2luKGVuZCkpO1xuIH1cbkBAIC0xODEsNyArMTgxLDcgQEAgaW50IGttc2FuX2lvcmVtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHR2bWFsbG9jX29yaWdpbihzdGFydCArIG9mZiArIFBBR0VfU0laRSksIHByb3QsIFx1MDAyNm9yaWdpbixcbiBcdFx0XHRQQUdFX1NISUZUKTtcbiBcdFx0aWYgKG1hcHBlZCkge1xuLVx0XHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goXG4rXHRcdFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCxcbiBcdFx0XHRcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0ICsgb2ZmKSxcbiBcdFx0XHRcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0ICsgb2ZmICsgUEFHRV9TSVpFKSk7XG4gXHRcdFx0ZXJyID0gbWFwcGVkO1xuQEAgLTIwMywxMCArMjAzLDEwIEBAIGludCBrbXNhbl9pb3JlbWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0X19mcmVlX3BhZ2VzKHNoYWRvdywgMSk7XG4gXHRcdGlmIChvcmlnaW4pXG4gXHRcdFx0X19mcmVlX3BhZ2VzKG9yaWdpbiwgMSk7XG4tXHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goXG4rXHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsXG4gXHRcdFx0dm1hbGxvY19zaGFkb3coc3RhcnQpLFxuIFx0XHRcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0ICsgY2xlYW4gKiBQQUdFX1NJWkUpKTtcbi1cdFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChcbitcdFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCxcbiBcdFx0XHR2bWFsbG9jX29yaWdpbihzdGFydCksXG4gXHRcdFx0dm1hbGxvY19vcmlnaW4oc3RhcnQgKyBjbGVhbiAqIFBBR0VfU0laRSkpO1xuIFx0fVxuQEAgLTIzMyw4ICsyMzMsOCBAQCB2b2lkIGttc2FuX2lvdW5tYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiBcdCAgICAgaSsrLCB2X3NoYWRvdyArPSBQQUdFX1NJWkUsIHZfb3JpZ2luICs9IFBBR0VfU0laRSkge1xuIFx0XHRzaGFkb3cgPSBrbXNhbl92bWFsbG9jX3RvX3BhZ2Vfb3JfbnVsbCgodm9pZCAqKXZfc2hhZG93KTtcbiBcdFx0b3JpZ2luID0ga21zYW5fdm1hbGxvY190b19wYWdlX29yX251bGwoKHZvaWQgKil2X29yaWdpbik7XG4tXHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2godl9zaGFkb3csIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xuLVx0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHZfb3JpZ2luLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcbitcdFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgdl9zaGFkb3csIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xuK1x0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2X29yaWdpbiwgdm1hbGxvY19vcmlnaW4oZW5kKSk7XG4gXHRcdGlmIChzaGFkb3cpXG4gXHRcdFx0X19mcmVlX3BhZ2VzKHNoYWRvdywgMSk7XG4gXHRcdGlmIChvcmlnaW4pXG5kaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LWludGVybmFsLmggYi9tbS9wZXJjcHUtaW50ZXJuYWwuaFxuaW5kZXggOGNiZTAzOWJmODQ3YWMuLjRkNDYxMzA1MjQzYmYwIDEwMDY0NFxuLS0tIGEvbW0vcGVyY3B1LWludGVybmFsLmhcbisrKyBiL21tL3BlcmNwdS1pbnRlcm5hbC5oXG5AQCAtNjMsMTEgKzYzLDE0IEBAIHN0cnVjdCBwY3B1X2NodW5rIHtcbiBcdCAqIGNodW5rX21kLlxuIFx0ICovXG4gXHR2b2lkXHRcdFx0KmJhc2VfYWRkciBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuK1x0LyogcGVyY3B1IGxvY2FsIGJhc2UgYWRkcmVzcyBvZiB0aGUgY2h1bmsgKi9cbitcdHZvaWQgICAgICAgICAgICAgICAgICAgICpsb2NhbF9iYXNlO1xuIFxuIFx0dW5zaWduZWQgbG9uZ1x0XHQqYWxsb2NfbWFwO1x0LyogYWxsb2NhdGlvbiBtYXAgKi9cbiBcdHN0cnVjdCBwY3B1X2Jsb2NrX21kXHQqbWRfYmxvY2tzO1x0LyogbWV0YWRhdGEgYmxvY2tzICovXG4gXG4gXHR2b2lkXHRcdFx0KmRhdGE7XHRcdC8qIGNodW5rIGRhdGEgKi9cbitcdHZvaWRcdFx0XHQqbG9jYWxfZGF0YTtcdC8qIGNodW5rIGxvY2FsIHZtICovXG4gXHRib29sXHRcdFx0aW1tdXRhYmxlO1x0Lyogbm8gW2RlXXBvcHVsYXRpb24gYWxsb3dlZCAqL1xuIFx0Ym9vbFx0XHRcdGlzb2xhdGVkO1x0LyogaXNvbGF0ZWQgZnJvbSBhY3RpdmUgY2h1bmtcbiBcdFx0XHRcdFx0XHQgICBzbG90cyAqL1xuQEAgLTE2Miw2ICsxNjUsMTcgQEAgc3RhdGljIGlubGluZSBzaXplX3QgcGNwdV9vYmpfZnVsbF9zaXplKHNpemVfdCBzaXplKVxuIFx0cmV0dXJuIHNpemUgKiBudW1fcG9zc2libGVfY3B1cygpICsgZXh0cmFfc2l6ZTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4rZXh0ZXJuIHZvaWQgX19pbml0IG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKVxuK3tcbitcdHJldHVybjtcbit9XG4rI2VuZGlmXG4rXG4gI2lmZGVmIENPTkZJR19QRVJDUFVfU1RBVFNcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LXZtLmMgYi9tbS9wZXJjcHUtdm0uY1xuaW5kZXggNGY1OTM3MDkwNTkwZDguLjVkZWNhYWQ3NjQwZmRjIDEwMDY0NFxuLS0tIGEvbW0vcGVyY3B1LXZtLmNcbisrKyBiL21tL3BlcmNwdS12bS5jXG5AQCAtMTEyLDYgKzExMiwxMCBAQCBzdGF0aWMgaW50IHBjcHVfYWxsb2NfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuK2V4dGVybiBwZ2RfdCAqcGVyY3B1X3BnZFtOUl9DUFVTXTtcbisjZW5kaWZcbitcbiAvKipcbiAgKiBwY3B1X3ByZV91bm1hcF9mbHVzaCAtIGZsdXNoIGNhY2hlIHByaW9yIHRvIHVubWFwcGluZ1xuICAqIEBjaHVuazogY2h1bmsgdGhlIHJlZ2lvbnMgdG8gYmUgZmx1c2hlZCBiZWxvbmdzIHRvXG5AQCAtMTMwLDYgKzEzNCwxMSBAQCBzdGF0aWMgdm9pZCBwY3B1X3ByZV91bm1hcF9mbHVzaChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXG4gXHRmbHVzaF9jYWNoZV92dW5tYXAoXG4gXHRcdHBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9sb3dfdW5pdF9jcHUsIHBhZ2Vfc3RhcnQpLFxuIFx0XHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfaGlnaF91bml0X2NwdSwgcGFnZV9lbmQpKTtcbitcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitcdGZsdXNoX2NhY2hlX3Z1bm1hcCgodW5zaWduZWQgbG9uZyljaHVuay1cdTAwM2Vsb2NhbF9iYXNlICsgKHBhZ2Vfc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxuK1x0XHRcdCh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgKyAocGFnZV9lbmQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbisjZW5kaWZcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5yX3BhZ2VzKVxuQEAgLTEzNyw2ICsxNDYsMjAgQEAgc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5yX3BhZ2VzKVxuIFx0dnVubWFwX3JhbmdlX25vZmx1c2goYWRkciwgYWRkciArIChucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitzdGF0aWMgdm9pZCBfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxuK1x0XHRcdCAgICBpbnQgbnJfcGFnZXMpXG4re1xuK1x0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZXJjcHVfcGdkW2NwdV0sIHZpcnQsIHZpcnQgKyAobnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgdm9pZCBfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxuK1x0XHRcdCAgICBpbnQgbnJfcGFnZXMpXG4re1xuK1x0cmV0dXJuO1xuK31cbisjZW5kaWZcbitcbiAvKipcbiAgKiBwY3B1X3VubWFwX3BhZ2VzIC0gdW5tYXAgcGFnZXMgb3V0IG9mIGEgcGNwdV9jaHVua1xuICAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3RcbkBAIC0xNjYsNiArMTg5LDEwIEBAIHN0YXRpYyB2b2lkIHBjcHVfdW5tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0XHR9XG4gXHRcdF9fcGNwdV91bm1hcF9wYWdlcyhwY3B1X2NodW5rX2FkZHIoY2h1bmssIGNwdSwgcGFnZV9zdGFydCksXG4gXHRcdFx0XHQgICBwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpO1xuK1xuK1x0XHRfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwoY3B1LFxuK1x0XHRcdFx0XHQodW5zaWduZWQgbG9uZyljaHVuay1cdTAwM2Vsb2NhbF9iYXNlICsgKHBhZ2Vfc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxuK1x0XHRcdFx0XHRwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpO1xuIFx0fVxuIH1cbiBcbkBAIC0xODgsNiArMjE1LDEyIEBAIHN0YXRpYyB2b2lkIHBjcHVfcG9zdF91bm1hcF90bGJfZmx1c2goc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShcbiBcdFx0cGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2xvd191bml0X2NwdSwgcGFnZV9zdGFydCksXG4gXHRcdHBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9oaWdoX3VuaXRfY3B1LCBwYWdlX2VuZCkpO1xuK1xuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuK1x0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShcbitcdFx0KHVuc2lnbmVkIGxvbmcpY2h1bmstXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX3N0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbitcdFx0KHVuc2lnbmVkIGxvbmcpY2h1bmstXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX2VuZCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuKyNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuQEAgLTE5Nyw2ICsyMzAsMzIgQEAgc3RhdGljIGludCBfX3BjcHVfbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbiBcdFx0XHRQQUdFX0tFUk5FTCwgcGFnZXMsIFBBR0VfU0hJRlQsIEdGUF9LRVJORUwpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXNfbG9jYWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuK1x0XHRcdCAgICBpbnQgbnJfcGFnZXMpXG4re1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcbitcdFx0ZXJyID0gdm1hcF9yYW5nZV9ub2ZsdXNoKHBlcmNwdV9wZ2RbY3B1XSwgdmlydCwgdmlydCArIFBBR0VfU0laRSxcbitcdFx0XHRcdHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIFBBR0VfS0VSTkVMLCBQQUdFX1NISUZUKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1xuK1x0XHR2aXJ0ICs9IFBBR0VfU0laRTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGludCBfX3BjcHVfbWFwX3BhZ2VzX2xvY2FsKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbitcdFx0XHQgICAgaW50IG5yX3BhZ2VzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbisjZW5kaWZcbitcbiAvKipcbiAgKiBwY3B1X21hcF9wYWdlcyAtIG1hcCBwYWdlcyBpbnRvIGEgcGNwdV9jaHVua1xuICAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3RcbkBAIC0yMjQsNiArMjgzLDEzIEBAIHN0YXRpYyBpbnQgcGNwdV9tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gZXJyO1xuIFxuK1x0XHRlcnIgPSBfX3BjcHVfbWFwX3BhZ2VzX2xvY2FsKGNwdSxcbitcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcpY2h1bmstXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX3N0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbitcdFx0XHRcdFx0XHUwMDI2cGFnZXNbcGNwdV9wYWdlX2lkeChjcHUsIHBhZ2Vfc3RhcnQpXSxcbitcdFx0XHRcdFx0cGFnZV9lbmQgLSBwYWdlX3N0YXJ0KTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcbiBcdFx0Zm9yIChpID0gcGFnZV9zdGFydDsgaSBcdTAwM2MgcGFnZV9lbmQ7IGkrKylcbiBcdFx0XHRwY3B1X3NldF9wYWdlX2NodW5rKHBhZ2VzW3BjcHVfcGFnZV9pZHgoY3B1LCBpKV0sXG4gXHRcdFx0XHRcdCAgICBjaHVuayk7XG5AQCAtMjMzLDYgKzI5OSw5IEBAIHN0YXRpYyBpbnQgcGNwdV9tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KHRjcHUpIHtcbiBcdFx0X19wY3B1X3VubWFwX3BhZ2VzKHBjcHVfY2h1bmtfYWRkcihjaHVuaywgdGNwdSwgcGFnZV9zdGFydCksXG4gXHRcdFx0XHQgICBwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpO1xuK1x0XHRfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwodGNwdSxcbitcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcpY2h1bmstXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX3N0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbitcdFx0XHRcdFx0cGFnZV9lbmQgLSBwYWdlX3N0YXJ0KTtcbiBcdFx0aWYgKHRjcHUgPT0gY3B1KVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTI1OCw2ICszMjcsMTEgQEAgc3RhdGljIHZvaWQgcGNwdV9wb3N0X21hcF9mbHVzaChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXG4gXHRmbHVzaF9jYWNoZV92bWFwKFxuIFx0XHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfbG93X3VuaXRfY3B1LCBwYWdlX3N0YXJ0KSxcbiBcdFx0cGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2hpZ2hfdW5pdF9jcHUsIHBhZ2VfZW5kKSk7XG4rXG4rI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4rXHRmbHVzaF9jYWNoZV92bWFwKCh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgKyAocGFnZV9zdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4rXHRcdFx0ICh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgKyAocGFnZV9lbmQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbisjZW5kaWZcbiB9XG4gXG4gLyoqXG5AQCAtMzQ5LDYgKzQyMywyNCBAQCBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY3JlYXRlX2NodW5rKGdmcF90IGdmcClcbiBcdGNodW5rLVx1MDAzZWRhdGEgPSB2bXM7XG4gXHRjaHVuay1cdTAwM2ViYXNlX2FkZHIgPSB2bXNbMF0tXHUwMDNlYWRkciAtIHBjcHVfZ3JvdXBfb2Zmc2V0c1swXTtcbiBcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitcdHVuc2lnbmVkIGxvbmcgZGVsdGEgPSAodW5zaWduZWQgbG9uZyljaHVuay1cdTAwM2ViYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgaGludCA9IGRlbHRhICsgKHVuc2lnbmVkIGxvbmcpcGNwdV9sb2NhbF9iYXNlO1xuK1x0c3RydWN0IHZtX3N0cnVjdCAqbG9jYWxfdm0gPSBwY3B1X2dldF9sb2NhbF92bV9hcmVhKGhpbnQsXG4rXHRcdFx0XHRcdHBjcHVfdW5pdF9zaXplLCBwY3B1X2F0b21fc2l6ZSk7XG4rXHRpZiAoIWxvY2FsX3ZtKSB7XG4rXHRcdHBjcHVfZnJlZV92bV9hcmVhcyh2bXMsIHBjcHVfbnJfZ3JvdXBzKTtcbitcdFx0cGNwdV9mcmVlX2NodW5rKGNodW5rKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRjaHVuay1cdTAwM2Vsb2NhbF9iYXNlID0gbG9jYWxfdm0tXHUwMDNlYWRkcjtcbitcdGNodW5rLVx1MDAzZWxvY2FsX2RhdGEgPSAodm9pZCAqKWxvY2FsX3ZtO1xuKyNlbHNlXG4rXHRjaHVuay1cdTAwM2Vsb2NhbF9iYXNlID0gMDtcbitcdGNodW5rLVx1MDAzZWxvY2FsX2RhdGEgPSBOVUxMO1xuKyNlbmRpZlxuK1xuIFx0cGNwdV9zdGF0c19jaHVua19hbGxvYygpO1xuIFx0dHJhY2VfcGVyY3B1X2NyZWF0ZV9jaHVuayhjaHVuay1cdTAwM2ViYXNlX2FkZHIpO1xuIFxuQEAgLTM2NSw2ICs0NTcsOCBAQCBzdGF0aWMgdm9pZCBwY3B1X2Rlc3Ryb3lfY2h1bmsoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rKVxuIFxuIFx0aWYgKGNodW5rLVx1MDAzZWRhdGEpXG4gXHRcdHBjcHVfZnJlZV92bV9hcmVhcyhjaHVuay1cdTAwM2VkYXRhLCBwY3B1X25yX2dyb3Vwcyk7XG4rXHRpZiAoY2h1bmstXHUwMDNlbG9jYWxfZGF0YSlcbitcdFx0ZnJlZV92bV9hcmVhKChzdHJ1Y3Qgdm1fc3RydWN0ICopY2h1bmstXHUwMDNlbG9jYWxfZGF0YSk7XG4gXHRwY3B1X2ZyZWVfY2h1bmsoY2h1bmspO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9wZXJjcHUuYyBiL21tL3BlcmNwdS5jXG5pbmRleCBiMDY3NmI4MDU0ZWQwOS4uOGIyNzNlZDhlNWE4YmIgMTAwNjQ0XG4tLS0gYS9tbS9wZXJjcHUuY1xuKysrIGIvbW0vcGVyY3B1LmNcbkBAIC0xNDUsNiArMTQ1LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBwY3B1X2hpZ2hfdW5pdF9jcHUgX19yb19hZnRlcl9pbml0O1xuIFxuIC8qIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBjaHVuayB3aGljaCBzdGFydHMgd2l0aCB0aGUga2VybmVsIHN0YXRpYyBhcmVhICovXG4gdm9pZCAqcGNwdV9iYXNlX2FkZHIgX19yb19hZnRlcl9pbml0O1xuKy8qIFRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBjaHVuayBsb2NhbCBtYXBwaW5nICovXG4rdm9pZCAqcGNwdV9sb2NhbF9iYXNlIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiBzdGF0aWMgY29uc3QgaW50ICpwY3B1X3VuaXRfbWFwIF9fcm9fYWZ0ZXJfaW5pdDtcdFx0LyogY3B1IC1cdTAwM2UgdW5pdCAqL1xuIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnBjcHVfdW5pdF9vZmZzZXRzIF9fcm9fYWZ0ZXJfaW5pdDtcdC8qIGNwdSAtXHUwMDNlIHVuaXQgb2Zmc2V0ICovXG5AQCAtMTMzOCw2ICsxMzQwLDcgQEAgc3RhdGljIHZvaWQgcGNwdV9pbml0X21kX2Jsb2NrcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspXG4gLyoqXG4gICogcGNwdV9hbGxvY19maXJzdF9jaHVuayAtIGNyZWF0ZXMgY2h1bmtzIHRoYXQgc2VydmUgdGhlIGZpcnN0IGNodW5rXG4gICogQHRtcF9hZGRyOiB0aGUgc3RhcnQgb2YgdGhlIHJlZ2lvbiBzZXJ2ZWRcbisgKiBAbG9jYWxfdG1wOiB0aGUgc3RhcnQgb2YgdGhlIGxvY2FsIHBlcmNwdSByZWdpb24gc2VydmVkXG4gICogQG1hcF9zaXplOiBzaXplIG9mIHRoZSByZWdpb24gc2VydmVkXG4gICpcbiAgKiBUaGlzIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgY2h1bmtzIHRoYXQgc2VydmUgdGhlIGZpcnN0IGNodW5rLiAgVGhlXG5AQCAtMTM0OSwxNSArMTM1MiwxNiBAQCBzdGF0aWMgdm9pZCBwY3B1X2luaXRfbWRfYmxvY2tzKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcbiAgKiBDaHVuayBzZXJ2aW5nIHRoZSByZWdpb24gYXQgQHRtcF9hZGRyIG9mIEBtYXBfc2l6ZS5cbiAgKi9cbiBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKiBfX2luaXQgcGNwdV9hbGxvY19maXJzdF9jaHVuayh1bnNpZ25lZCBsb25nIHRtcF9hZGRyLFxuLVx0XHRcdFx0XHRcdFx0IGludCBtYXBfc2l6ZSlcbitcdFx0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGxvY2FsX3RtcCwgaW50IG1hcF9zaXplKVxuIHtcbiBcdHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaztcbi1cdHVuc2lnbmVkIGxvbmcgYWxpZ25lZF9hZGRyO1xuK1x0dW5zaWduZWQgbG9uZyBhbGlnbmVkX2FkZHIsIGFsaWduZWRfbG9jYWw7XG4gXHRpbnQgc3RhcnRfb2Zmc2V0LCBvZmZzZXRfYml0cywgcmVnaW9uX3NpemUsIHJlZ2lvbl9iaXRzO1xuIFx0c2l6ZV90IGFsbG9jX3NpemU7XG4gXG4gXHQvKiByZWdpb24gY2FsY3VsYXRpb25zICovXG4gXHRhbGlnbmVkX2FkZHIgPSB0bXBfYWRkciBcdTAwMjYgUEFHRV9NQVNLO1xuK1x0YWxpZ25lZF9sb2NhbCA9IGxvY2FsX3RtcCBcdTAwMjYgUEFHRV9NQVNLO1xuIFxuIFx0c3RhcnRfb2Zmc2V0ID0gdG1wX2FkZHIgLSBhbGlnbmVkX2FkZHI7XG4gXHRyZWdpb25fc2l6ZSA9IEFMSUdOKHN0YXJ0X29mZnNldCArIG1hcF9zaXplLCBQQUdFX1NJWkUpO1xuQEAgLTEzNzAsNiArMTM3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqIF9faW5pdCBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHVuc2lnbmVkIGxvbmcgdG1wX2FkZHIsXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjaHVuay1cdTAwM2VsaXN0KTtcbiBcbiBcdGNodW5rLVx1MDAzZWJhc2VfYWRkciA9ICh2b2lkICopYWxpZ25lZF9hZGRyO1xuK1x0Y2h1bmstXHUwMDNlbG9jYWxfYmFzZSA9ICh2b2lkICopYWxpZ25lZF9sb2NhbDtcbiBcdGNodW5rLVx1MDAzZXN0YXJ0X29mZnNldCA9IHN0YXJ0X29mZnNldDtcbiBcdGNodW5rLVx1MDAzZWVuZF9vZmZzZXQgPSByZWdpb25fc2l6ZSAtIGNodW5rLVx1MDAzZXN0YXJ0X29mZnNldCAtIG1hcF9zaXplO1xuIFxuQEAgLTI1NjIsNyArMjU2Nyw3IEBAIHN0YXRpYyB2b2lkIHBjcHVfZHVtcF9hbGxvY19pbmZvKGNvbnN0IGNoYXIgKmx2bCxcbiAgKiBhbmQgYXZhaWxhYmxlIGZvciBkeW5hbWljIGFsbG9jYXRpb24gbGlrZSBhbnkgb3RoZXIgY2h1bmsuXG4gICovXG4gdm9pZCBfX2luaXQgcGNwdV9zZXR1cF9maXJzdF9jaHVuayhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSxcbi1cdFx0XHRcdCAgIHZvaWQgKmJhc2VfYWRkcilcbitcdFx0XHRcdCAgIHZvaWQgKmJhc2VfYWRkciwgdm9pZCAqbG9jYWxfYmFzZSlcbiB7XG4gXHRzaXplX3Qgc2l6ZV9zdW0gPSBhaS1cdTAwM2VzdGF0aWNfc2l6ZSArIGFpLVx1MDAzZXJlc2VydmVkX3NpemUgKyBhaS1cdTAwM2VkeW5fc2l6ZTtcbiBcdHNpemVfdCBzdGF0aWNfc2l6ZSwgZHluX3NpemU7XG5AQCAtMjU3Miw3ICsyNTc3LDcgQEAgdm9pZCBfX2luaXQgcGNwdV9zZXR1cF9maXJzdF9jaHVuayhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSxcbiBcdHVuc2lnbmVkIGludCBjcHU7XG4gXHRpbnQgKnVuaXRfbWFwO1xuIFx0aW50IGdyb3VwLCB1bml0LCBpO1xuLVx0dW5zaWduZWQgbG9uZyB0bXBfYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgdG1wX2FkZHIsIGxvY2FsX3RtcCA9IDA7XG4gXHRzaXplX3QgYWxsb2Nfc2l6ZTtcbiBcbiAjZGVmaW5lIFBDUFVfU0VUVVBfQlVHX09OKGNvbmQpXHRkbyB7XHRcdFx0XHRcdFxcXG5AQCAtMjcxMywxMSArMjcxOCwxNSBAQCB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLFxuIFx0ICogICBjaHVuay5cbiBcdCAqL1xuIFx0dG1wX2FkZHIgPSAodW5zaWduZWQgbG9uZyliYXNlX2FkZHIgKyBzdGF0aWNfc2l6ZTtcbitcdGlmIChsb2NhbF9iYXNlKVxuK1x0XHRsb2NhbF90bXAgPSAodW5zaWduZWQgbG9uZylsb2NhbF9iYXNlICsgc3RhdGljX3NpemU7XG4gXHRpZiAoYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZSlcbi1cdFx0cGNwdV9yZXNlcnZlZF9jaHVuayA9IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodG1wX2FkZHIsXG4rXHRcdHBjcHVfcmVzZXJ2ZWRfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLCBsb2NhbF90bXAsXG4gXHRcdFx0XHRcdFx0YWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZSk7XG4gXHR0bXBfYWRkciA9ICh1bnNpZ25lZCBsb25nKWJhc2VfYWRkciArIHN0YXRpY19zaXplICsgYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZTtcbi1cdHBjcHVfZmlyc3RfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLCBkeW5fc2l6ZSk7XG4rXHRpZiAobG9jYWxfYmFzZSlcbitcdFx0bG9jYWxfdG1wID0gKHVuc2lnbmVkIGxvbmcpbG9jYWxfYmFzZSArIHN0YXRpY19zaXplICsgYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZTtcbitcdHBjcHVfZmlyc3RfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLCBsb2NhbF90bXAsIGR5bl9zaXplKTtcbiBcbiBcdHBjcHVfbnJfZW1wdHlfcG9wX3BhZ2VzID0gcGNwdV9maXJzdF9jaHVuay1cdTAwM2Vucl9lbXB0eV9wb3BfcGFnZXM7XG4gXHRwY3B1X2NodW5rX3JlbG9jYXRlKHBjcHVfZmlyc3RfY2h1bmssIC0xKTtcbkBAIC0zMTA4LDcgKzMxMTcsNyBAQCBpbnQgX19pbml0IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHNpemVfdCBkeW5fc2l6ZSxcbiBcdFx0UEZOX0RPV04oc2l6ZV9zdW0pLCBhaS1cdTAwM2VzdGF0aWNfc2l6ZSwgYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZSxcbiBcdFx0YWktXHUwMDNlZHluX3NpemUsIGFpLVx1MDAzZXVuaXRfc2l6ZSk7XG4gXG4tXHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBiYXNlKTtcbitcdHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIGJhc2UsIE5VTEwpO1xuIFx0Z290byBvdXRfZnJlZTtcbiBcbiBvdXRfZnJlZV9hcmVhczpcbkBAIC0zMTYzLDcgKzMxNzIsNyBAQCB2b2lkIF9faW5pdCBfX3dlYWsgcGNwdV9wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9uZyBhZGRyKVxuIFx0cHVkID0gcHVkX29mZnNldChwNGQsIGFkZHIpO1xuIFx0aWYgKHB1ZF9ub25lKCpwdWQpKSB7XG4gXHRcdHBtZCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBNRF9UQUJMRV9TSVpFLCBQTURfVEFCTEVfU0laRSk7XG4tXHRcdHB1ZF9wb3B1bGF0ZShcdTAwMjZpbml0X21tLCBwdWQsIHBtZCk7XG4rXHRcdHB1ZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHB1ZCwgcG1kKTtcbiBcdH1cbiBcbiBcdHBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTtcbkBAIC0zMTcxLDcgKzMxODAsNyBAQCB2b2lkIF9faW5pdCBfX3dlYWsgcGNwdV9wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9uZyBhZGRyKVxuIFx0XHRwdGVfdCAqbmV3O1xuIFxuIFx0XHRuZXcgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVEVfVEFCTEVfU0laRSwgUFRFX1RBQkxFX1NJWkUpO1xuLVx0XHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZCwgbmV3KTtcbitcdFx0cG1kX3BvcHVsYXRlX3N5bmMoYWRkciwgcG1kLCBuZXcpO1xuIFx0fVxuIFxuIFx0cmV0dXJuO1xuQEAgLTMxOTQsNiArMzIwMyw3IEBAIHZvaWQgX19pbml0IF9fd2VhayBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpXG4gaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdCBjcHVfdG9fbmRfZm4pXG4ge1xuIFx0c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3Qgdm07XG4rXHRzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCBwY3B1X3ZtO1xuIFx0c3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWk7XG4gXHRjaGFyIHBzaXplX3N0clsxNl07XG4gXHRpbnQgdW5pdF9wYWdlcztcbkBAIC0zMjQzLDExICszMjUzLDI4IEBAIGludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3RcbiBcdH1cbiBcbiBcdC8qIGFsbG9jYXRlIHZtIGFyZWEsIG1hcCB0aGUgcGFnZXMgYW5kIGNvcHkgc3RhdGljIGRhdGEgKi9cbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitcdHZtLmZsYWdzID0gVk1fQUxMT0M7XG4rXHR2bS5hZGRyID0gKHZvaWQgKilBTElHTihQRVJDUFVfU1RBUlQsIFBBR0VfU0laRSk7XG4rXHR2bS5zaXplID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIGFpLVx1MDAzZXVuaXRfc2l6ZTtcbitcdHZtX2FyZWFfYWRkX2Vhcmx5KFx1MDAyNnZtKTtcbitcdGthc2FuX3BvcHVsYXRlX2Vhcmx5X3ZtX2FyZWFfc2hhZG93KHZtLmFkZHIsIHZtLnNpemUpO1xuK1xuK1x0cGNwdV92bS5mbGFncyA9IFZNX0FMTE9DO1xuK1x0cGNwdV92bS5hZGRyID0gKHZvaWQgKilBTElHTihMT0NBTF9QRVJDUFVfU1RBUlQsIFBBR0VfU0laRSk7XG4rXHRwY3B1X3ZtLnNpemUgPSBhaS1cdTAwM2V1bml0X3NpemU7XG4rXHR2bV9hcmVhX2FkZF9lYXJseShcdTAwMjZwY3B1X3ZtKTtcbitcdGthc2FuX3BvcHVsYXRlX2Vhcmx5X3ZtX2FyZWFfc2hhZG93KHBjcHVfdm0uYWRkciwgcGNwdV92bS5zaXplKTtcbisjZWxzZVxuIFx0dm0uZmxhZ3MgPSBWTV9BTExPQztcbiBcdHZtLnNpemUgPSBudW1fcG9zc2libGVfY3B1cygpICogYWktXHUwMDNldW5pdF9zaXplO1xuIFx0dm1fYXJlYV9yZWdpc3Rlcl9lYXJseShcdTAwMjZ2bSwgUEFHRV9TSVpFKTtcbiBcbitcdHBjcHVfdm0uYWRkciA9IE5VTEw7XG4rI2VuZGlmXG4rXG4gXHRmb3IgKHVuaXQgPSAwOyB1bml0IFx1MDAzYyBudW1fcG9zc2libGVfY3B1cygpOyB1bml0KyspIHtcbitcdFx0dW5zaWduZWQgaW50IGNwdSA9IGFpLVx1MDAzZWdyb3Vwc1swXS5jcHVfbWFwW3VuaXRdO1xuIFx0XHR1bnNpZ25lZCBsb25nIHVuaXRfYWRkciA9XG4gXHRcdFx0KHVuc2lnbmVkIGxvbmcpdm0uYWRkciArIHVuaXQgKiBhaS1cdTAwM2V1bml0X3NpemU7XG4gXG5AQCAtMzI2NCw2ICszMjkxLDE0IEBAIGludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3RcbiBcbiBcdFx0LyogY29weSBzdGF0aWMgZGF0YSAqL1xuIFx0XHRtZW1jcHkoKHZvaWQgKil1bml0X2FkZHIsIF9fcGVyX2NwdV9zdGFydCwgYWktXHUwMDNlc3RhdGljX3NpemUpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBNYXAgcGVyY3B1IGRhdGEgdG8gUEVSQ1BVIG1hcC5cbitcdFx0ICpcbitcdFx0ICogUENQVV9GQ19FTUJFRCBjYW4ndCBzdXBwb3J0IGl0LlxuK1x0XHQgKi9cbitcdFx0bWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayhjcHUsICh1bnNpZ25lZCBsb25nKXBjcHVfdm0uYWRkcixcbitcdFx0XHRcdFx1MDAyNnBhZ2VzW3VuaXQgKiB1bml0X3BhZ2VzXSwgdW5pdF9wYWdlcyk7XG4gXHR9XG4gXG4gXHQvKiB3ZSdyZSByZWFkeSwgY29tbWl0ICovXG5AQCAtMzI3MSw3ICszMzA2LDggQEAgaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdFxuIFx0XHR1bml0X3BhZ2VzLCBwc2l6ZV9zdHIsIGFpLVx1MDAzZXN0YXRpY19zaXplLFxuIFx0XHRhaS1cdTAwM2VyZXNlcnZlZF9zaXplLCBhaS1cdTAwM2VkeW5fc2l6ZSk7XG4gXG4tXHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCB2bS5hZGRyKTtcbitcdHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIHZtLmFkZHIsIHBjcHVfdm0uYWRkcik7XG4rXHRwY3B1X2xvY2FsX2Jhc2UgPSBwY3B1X3ZtLmFkZHI7XG4gXHRnb3RvIG91dF9mcmVlX2FyO1xuIFxuIGVub21lbTpcbkBAIC0zMzUzLDcgKzMzODksNyBAQCB2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpXG4gXHRhaS1cdTAwM2Vncm91cHNbMF0ubnJfdW5pdHMgPSAxO1xuIFx0YWktXHUwMDNlZ3JvdXBzWzBdLmNwdV9tYXBbMF0gPSAwO1xuIFxuLVx0cGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgZmMpO1xuK1x0cGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgZmMsIE5VTEwpO1xuIFx0cGNwdV9mcmVlX2FsbG9jX2luZm8oYWkpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zcGFyc2Utdm1lbW1hcC5jIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xuaW5kZXggOTllMmJlMzk2NzFiNjMuLjQ2M2MyZjhiNjExYzAzIDEwMDY0NFxuLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuY1xuKysrIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xuQEAgLTE5OCw3ICsxOTgsNyBAQCBzdGF0aWMgcG1kX3QgKiBfX21lbWluaXQgdm1lbW1hcF9wbWRfcG9wdWxhdGUocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpblxuIFx0XHRpZiAoIXApXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdGtlcm5lbF9wdGVfaW5pdChwKTtcbi1cdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWQsIHApO1xuK1x0XHRwbWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwbWQsIHApO1xuIFx0fVxuIFx0cmV0dXJuIHBtZDtcbiB9XG5AQCAtMjExLDcgKzIxMSw3IEBAIHN0YXRpYyBwdWRfdCAqIF9fbWVtaW5pdCB2bWVtbWFwX3B1ZF9wb3B1bGF0ZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGluXG4gXHRcdGlmICghcClcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0cG1kX2luaXQocCk7XG4tXHRcdHB1ZF9wb3B1bGF0ZShcdTAwMjZpbml0X21tLCBwdWQsIHApO1xuK1x0XHRwdWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwdWQsIHApO1xuIFx0fVxuIFx0cmV0dXJuIHB1ZDtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uM2Q5NGNhNGJiZDE3YjEgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbisrKyBiL21tL3ZtYWxsb2MuY1xuQEAgLTgwLDYgKzgwLDkgQEAgYm9vbCBpc192bWFsbG9jX2FkZHIoY29uc3Qgdm9pZCAqeClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcoeCk7XG4gXG4rXHRpZiAoaXNfcGVyY3B1X2FkZHIoYWRkcikpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuIFx0cmV0dXJuIGFkZHIgXHUwMDNlPSBWTUFMTE9DX1NUQVJUIFx1MDAyNlx1MDAyNiBhZGRyIFx1MDAzYyBWTUFMTE9DX0VORDtcbiB9XG4gRVhQT1JUX1NZTUJPTChpc192bWFsbG9jX2FkZHIpO1xuQEAgLTI5NSw5ICsyOTgsOSBAQCBzdGF0aWMgaW50IHZtYXBfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZtYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLVx0XHRcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcbi1cdFx0XHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXG4raW50IHZtYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4rXHRcdCAgICAgICBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXG4ge1xuIFx0cGdkX3QgKnBnZDtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XG5AQCAtMzE0LDcgKzMxNyw3IEBAIHN0YXRpYyBpbnQgdm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRCVUdfT04oYWRkciBcdTAwM2U9IGVuZCk7XG4gXG4gXHRzdGFydCA9IGFkZHI7XG4tXHRwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7XG4rXHRwZ2QgPSBwZ2Rfb2Zmc2V0X3BnZChwZ2RpciwgYWRkcik7XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0ZXJyID0gdm1hcF9wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwaHlzX2FkZHIsIHByb3QsXG5AQCAtMzM0LDggKzMzNyw4IEBAIGludCB2bWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gdm1hcF9yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcGh5c19hZGRyLCBwZ3Byb3RfbngocHJvdCksXG4tXHRcdFx0XHQgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdCk7XG4rXHRlcnIgPSB2bWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIGFkZHIsIGVuZCwgcGh5c19hZGRyLFxuK1x0XHRcdFx0IHBncHJvdF9ueChwcm90KSwgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdCk7XG4gXHRmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7XG4gXHRpZiAoIWVycilcbiBcdFx0ZXJyID0ga21zYW5faW9yZW1hcF9wYWdlX3JhbmdlKGFkZHIsIGVuZCwgcGh5c19hZGRyLCBwcm90LFxuQEAgLTQ3OCw3ICs0ODEsNyBAQCBzdGF0aWMgdm9pZCB2dW5tYXBfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gICpcbiAgKiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uIG9ubHkuIERvIG5vdCB1c2Ugb3V0c2lkZSBtbS8uXG4gICovXG4tdm9pZCBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuK3ZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbiBcdHBnZF90ICpwZ2Q7XG5AQCAtNDg2LDcgKzQ4OSw3IEBAIHZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiBcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xuIFxuIFx0QlVHX09OKGFkZHIgXHUwMDNlPSBlbmQpO1xuLVx0cGdkID0gcGdkX29mZnNldF9rKGFkZHIpO1xuK1x0cGdkID0gcGdkX29mZnNldF9wZ2QocGdkaXIsIGFkZHIpO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwZ2RfYmFkKCpwZ2QpKVxuQEAgLTUwMyw3ICs1MDYsNyBAQCB2b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gdm9pZCB2dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiB7XG4gXHRrbXNhbl92dW5tYXBfcmFuZ2Vfbm9mbHVzaChzdGFydCwgZW5kKTtcbi1cdF9fdnVubWFwX3JhbmdlX25vZmx1c2goc3RhcnQsIGVuZCk7XG4rXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCBzdGFydCwgZW5kKTtcbiB9XG4gXG4gLyoqXG5AQCAtNjcwLDkgKzY3MywxMCBAQCBpbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yOyBpICs9IDFVIFx1MDAzY1x1MDAzYyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpKSB7XG4gXHRcdGludCBlcnI7XG4gXG4tXHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICsgKDFVTCBcdTAwM2NcdTAwM2MgcGFnZV9zaGlmdCksXG4tXHRcdFx0XHRcdHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIHByb3QsXG4tXHRcdFx0XHRcdHBhZ2Vfc2hpZnQpO1xuK1x0XHRlcnIgPSB2bWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIGFkZHIsXG4rXHRcdFx0XHRcdCBhZGRyICsgKDFVTCBcdTAwM2NcdTAwM2MgcGFnZV9zaGlmdCksXG4rXHRcdFx0XHRcdCBwYWdlX3RvX3BoeXMocGFnZXNbaV0pLCBwcm90LFxuK1x0XHRcdFx0XHQgcGFnZV9zaGlmdCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC00OTE5LDE1ICs0OTIzLDI1IEBAIHB2bV9maW5kX3ZhX2VuY2xvc2VfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpXG4gICogICBpbiAtIHRoZSBWQSB3ZSBzdGFydCB0aGUgc2VhcmNoKHJldmVyc2Ugb3JkZXIpO1xuICAqICAgb3V0IC0gdGhlIFZBIHdpdGggdGhlIGhpZ2hlc3QgYWxpZ25lZCBlbmQgYWRkcmVzcy5cbiAgKiBAYWxpZ246IGFsaWdubWVudCBmb3IgcmVxdWlyZWQgaGlnaGVzdCBhZGRyZXNzXG4rICogQHBjcHU6IHdoZXRoZXIgcmVxdWVzdCBhbGxvY2F0aW9uIGZyb20gbG9jYWwgcGVyY3B1IGFyZWFcbiAgKlxuICAqIFJldHVybnM6IGRldGVybWluZWQgZW5kIGFkZHJlc3Mgd2l0aGluIHZtYXBfYXJlYVxuICAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nXG4tcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKHN0cnVjdCB2bWFwX2FyZWEgKip2YSwgdW5zaWduZWQgbG9uZyBhbGlnbilcbitwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2Uoc3RydWN0IHZtYXBfYXJlYSAqKnZhLCB1bnNpZ25lZCBsb25nIGFsaWduLCBib29sIHBjcHUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZCA9IFZNQUxMT0NfRU5EIFx1MDAyNiB+KGFsaWduIC0gMSk7XG4rXHR1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuK1x0aWYgKHBjcHUpXG4rXHRcdHZtYWxsb2NfZW5kID0gTE9DQUxfUEVSQ1BVX0VORCBcdTAwMjYgfihhbGlnbiAtIDEpO1xuK1x0ZWxzZVxuK1x0XHR2bWFsbG9jX2VuZCA9IFBFUkNQVV9FTkQgXHUwMDI2IH4oYWxpZ24gLSAxKTtcbisjZWxzZVxuK1x0dm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCBcdTAwMjYgfihhbGlnbiAtIDEpO1xuKyNlbmRpZlxuK1xuIFx0aWYgKGxpa2VseSgqdmEpKSB7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yZXZlcnNlKCgqdmEpLFxuIFx0XHRcdFx0XHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCwgbGlzdCkge1xuQEAgLTQ5NjgsMTQgKzQ5ODIsMjIgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHNpemVfdCAqc2l6ZXMsIGludCBucl92bXMsXG4gXHRcdFx0XHQgICAgIHNpemVfdCBhbGlnbilcbiB7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIHZtYWxsb2Nfc3RhcnQgPSBBTElHTihWTUFMTE9DX1NUQVJULCBhbGlnbik7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kID0gVk1BTExPQ19FTkQgXHUwMDI2IH4oYWxpZ24gLSAxKTtcbitcdHVuc2lnbmVkIGxvbmcgdm1hbGxvY19zdGFydDtcbitcdHVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQ7XG4gXHRzdHJ1Y3Qgdm1hcF9hcmVhICoqdmFzLCAqdmE7XG4gXHRzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zO1xuIFx0aW50IGFyZWEsIGFyZWEyLCBsYXN0X2FyZWEsIHRlcm1fYXJlYTtcbiBcdHVuc2lnbmVkIGxvbmcgYmFzZSwgc3RhcnQsIHNpemUsIGVuZCwgbGFzdF9lbmQsIG9yaWdfc3RhcnQsIG9yaWdfZW5kO1xuIFx0Ym9vbCBwdXJnZWQgPSBmYWxzZTtcbiBcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitcdHZtYWxsb2Nfc3RhcnQgPSBBTElHTihQRVJDUFVfU1RBUlQsIGFsaWduKTtcbitcdHZtYWxsb2NfZW5kID0gUEVSQ1BVX0VORCBcdTAwMjYgfihhbGlnbiAtIDEpO1xuKyNlbHNlXG4rXHR2bWFsbG9jX3N0YXJ0ID0gQUxJR04oVk1BTExPQ19TVEFSVCwgYWxpZ24pO1xuK1x0dm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCBcdTAwMjYgfihhbGlnbiAtIDEpO1xuKyNlbmRpZlxuK1xuIFx0LyogdmVyaWZ5IHBhcmFtZXRlcnMgYW5kIGFsbG9jYXRlIGRhdGEgc3RydWN0dXJlcyAqL1xuIFx0QlVHX09OKG9mZnNldF9pbl9wYWdlKGFsaWduKSB8fCAhaXNfcG93ZXJfb2ZfMihhbGlnbikpO1xuIFx0Zm9yIChsYXN0X2FyZWEgPSAwLCBhcmVhID0gMDsgYXJlYSBcdTAwM2MgbnJfdm1zOyBhcmVhKyspIHtcbkBAIC01MDI0LDcgKzUwNDYsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbiBcdGVuZCA9IHN0YXJ0ICsgc2l6ZXNbYXJlYV07XG4gXG4gXHR2YSA9IHB2bV9maW5kX3ZhX2VuY2xvc2VfYWRkcih2bWFsbG9jX2VuZCk7XG4tXHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnZhLCBhbGlnbikgLSBlbmQ7XG4rXHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnZhLCBhbGlnbiwgZmFsc2UpIC0gZW5kO1xuIFxuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0LypcbkBAIC01MDQ1LDcgKzUwNjcsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbiBcdFx0ICogYmFzZSBkb3dud2FyZHMgYW5kIHRoZW4gcmVjaGVjay5cbiBcdFx0ICovXG4gXHRcdGlmIChiYXNlICsgZW5kIFx1MDAzZSB2YS1cdTAwM2V2YV9lbmQpIHtcbi1cdFx0XHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnZhLCBhbGlnbikgLSBlbmQ7XG4rXHRcdFx0YmFzZSA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShcdTAwMjZ2YSwgYWxpZ24sIGZhbHNlKSAtIGVuZDtcbiBcdFx0XHR0ZXJtX2FyZWEgPSBhcmVhO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtNTA1NSw3ICs1MDc3LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsXG4gXHRcdCAqL1xuIFx0XHRpZiAoYmFzZSArIHN0YXJ0IFx1MDAzYyB2YS1cdTAwM2V2YV9zdGFydCkge1xuIFx0XHRcdHZhID0gbm9kZV90b192YShyYl9wcmV2KFx1MDAyNnZhLVx1MDAzZXJiX25vZGUpKTtcbi1cdFx0XHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnZhLCBhbGlnbikgLSBlbmQ7XG4rXHRcdFx0YmFzZSA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShcdTAwMjZ2YSwgYWxpZ24sIGZhbHNlKSAtIGVuZDtcbiBcdFx0XHR0ZXJtX2FyZWEgPSBhcmVhO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtNTIxOCw2ICs1MjQwLDg0IEBAIHZvaWQgcGNwdV9mcmVlX3ZtX2FyZWFzKHN0cnVjdCB2bV9zdHJ1Y3QgKip2bXMsIGludCBucl92bXMpXG4gXHRcdGZyZWVfdm1fYXJlYSh2bXNbaV0pO1xuIFx0a2ZyZWUodm1zKTtcbiB9XG4rXG4rI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4rLyogRmluZCBmcmVlIHZtIGFyZWEgc3RhcnRzIGZyb20gaGludCAqL1xuK3N0cnVjdCB2bV9zdHJ1Y3QgKnBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBoaW50LFxuK1x0XHRcdFx0ICAgICBpbnQgdW5pdF9zaXplLCBzaXplX3QgYWxpZ24pXG4re1xuK1x0c3RydWN0IHZtYXBfYXJlYSAqdG1wX3ZhLCAqdmE7XG4rXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcbitcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xuK1x0dW5zaWduZWQgbG9uZyBlbmQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0dmEgPSBrbWVtX2NhY2hlX3phbGxvYyh2bWFwX2FyZWFfY2FjaGVwLCBHRlBfS0VSTkVMKTtcbitcdHZtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZtX3N0cnVjdCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCF2YSB8fCAhdm0pXG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4rXG4rXHR0bXBfdmEgPSBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIoaGludCk7XG4rXHRpZiAoIXRtcF92YSkge1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcbitcdFx0Z290byBlcnJfZnJlZTtcbitcdH1cbitcbitcdGVuZCA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShcdTAwMjZ0bXBfdmEsIGFsaWduLCB0cnVlKTtcbitcbitcdGlmIChoaW50ICsgdW5pdF9zaXplIFx1MDAzZSBlbmQpIHtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4rXHR9XG4rXG4rXHRyZXQgPSB2YV9jbGlwKFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsXG4rXHRcdFx0XHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCwgdG1wX3ZhLCBoaW50LCB1bml0X3NpemUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcbitcdFx0Z290byBlcnJfZnJlZTtcbitcdH1cbitcbitcdHZhLVx1MDAzZXZhX3N0YXJ0ID0gaGludDtcbitcdHZhLVx1MDAzZXZhX2VuZCA9IGhpbnQgKyB1bml0X3NpemU7XG4rXG4rXHRzcGluX3VubG9jayhcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcbitcbitcdGlmIChrYXNhbl9wb3B1bGF0ZV92bWFsbG9jKHZhLVx1MDAzZXZhX3N0YXJ0LCB1bml0X3NpemUsIEdGUF9LRVJORUwpKVxuK1x0XHRnb3RvIGVycl9mcmVlX3NoYWRvdztcbitcbitcdHZuID0gYWRkcl90b19ub2RlKHZhLVx1MDAzZXZhX3N0YXJ0KTtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZ2bi1cdTAwM2VidXN5LmxvY2spO1xuK1x0aW5zZXJ0X3ZtYXBfYXJlYSh2YSwgXHUwMDI2dm4tXHUwMDNlYnVzeS5yb290LCBcdTAwMjZ2bi1cdTAwM2VidXN5LmhlYWQpO1xuK1x0c2V0dXBfdm1hbGxvY192bSh2bSwgdmEsIFZNX0FMTE9DLFxuK1x0XHRcdCBwY3B1X2dldF9sb2NhbF92bV9hcmVhKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG4rXG4rXHRrYXNhbl91bnBvaXNvbl92bWFwX2FyZWFzKFx1MDAyNnZtLCAxLCBLQVNBTl9WTUFMTE9DX1BST1RfTk9STUFMKTtcbitcbitcdHJldHVybiB2bTtcbitcbitlcnJfZnJlZTpcbitcdGttZW1fY2FjaGVfZnJlZSh2bWFwX2FyZWFfY2FjaGVwLCB2YSk7XG4rXHRrZnJlZSh2bSk7XG4rXG4rXHRyZXR1cm4gTlVMTDtcbitcbitlcnJfZnJlZV9zaGFkb3c6XG4rXHRzcGluX2xvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4rXHR2YSA9IG1lcmdlX29yX2FkZF92bWFwX2FyZWFfYXVnbWVudCh2YSwgXHUwMDI2ZnJlZV92bWFwX2FyZWFfcm9vdCxcbitcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcbitcdGlmICh2YSlcbitcdFx0a2FzYW5fcmVsZWFzZV92bWFsbG9jKHZhLVx1MDAzZXZhX3N0YXJ0LCB2YS1cdTAwM2V2YV9lbmQsIHZhLVx1MDAzZXZhX3N0YXJ0LCB2YS1cdTAwM2V2YV9lbmQsXG4rXHRcdFx0ICAgICAgIEtBU0FOX1ZNQUxMT0NfUEFHRV9SQU5HRSB8IEtBU0FOX1ZNQUxMT0NfVExCX0ZMVVNIKTtcbitcdGtmcmVlKHZtKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xvY2spO1xuK1x0cmV0dXJuIE5VTEw7XG4rXG4rfVxuKyNlbmRpZlxuICNlbmRpZlx0LyogQ09ORklHX1NNUCAqL1xuIFxuICNpZmRlZiBDT05GSUdfUFJJTlRLXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMjo0MDoyNS43OTk2NjE0MDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI5MjkyNTYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTG9jYWwgUGVyLUNQVSBNYXBwaW5nIGZvciBBUk02NCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgYmFzZWQgb24gdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmU6IGBIQVZFX0xPQ0FMX1BFUl9DUFVfTUFQYC4gSXQgdG91Y2hlcyBjb3JlIGtlcm5lbCBjb21wb25lbnRzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgKHBlcmNwdSwgcGFnZSB0YWJsZXMpIG9uIEFSTTY0LCBhbmQgdGhpcyAqZGVmaW5pdGVseSogdHJpZ2dlcnMgbXkgZnV6emluZyBpbnN0aW5jdHMuIEFueXRoaW5nIHRoYXQgbWVzc2VzIHdpdGggbWVtb3J5IG1hcHBpbmcgaXMgYSBwb3RlbnRpYWwgZ29sZG1pbmUgZm9yIGZpbmRpbmcgc3VidGxlIGJ1Z3MuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGUgZmlsZXMgYmVpbmcgdG91Y2hlZDogYGFyY2gvYXJtNjQvLi4uYCwgYGluY2x1ZGUvLi4uYCwgYW5kIGBtbS8uLi5gLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHBlcmNwdWAsIGBtbWAgYW5kIHBhZ2UgdGFibGUgcmVsYXRlZCBmaWxlcy5cblxuVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhZGRpbmcgbG9jYWwgcGVyLWNwdSBtYXBwaW5nIHN1cHBvcnQgZm9yIEFSTTY0LiBUaGF0IHNjcmVhbXMgXCJmdW5jdGlvbmFsIGNoYW5nZVwiIHRvIG1lLCBhbmQgaXQgbW9kaWZpZXMgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFdlIGhhdmUgdG8gZnV6eiB0aGlzLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIEknbSBzZWVpbmc6IGBzZXR1cF9wZXJjcHVfcGdkYCwgYG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtgLCBgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc2AsIGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCwgYHBjcHVfYWxsb2NfZmlyc3RfY2h1bmtgLCBgcGNwdV9zZXR1cF9maXJzdF9jaHVua2AsIGBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgLCBgdm1hcF9yYW5nZV9ub2ZsdXNoYCwgYW5kIGBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSB3YW50IHRvIHRhcmdldCB3aXRoIGZ1enppbmcuXG5cbkknbGwgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIG5vdy4gYEhBVkVfTE9DQUxfUEVSX0NQVV9NQVBgIGlzIGEgYGRlZl9ib29sIHlgIGRlcGVuZGluZyBvbiBBUk02NCBwYWdlIHNpemVzIHdoaWNoIG1lYW5zIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgZXhwbGljaXRseSBlbmFibGVkLiBUaGF0IHNhaWQsIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBsaXN0IHRoaXMgY29uZmlnIGluIG91ciBmdXp6aW5nIGxpc3QuIEkgc2VlIHRoYXQgYE5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LYCBpcyBzZWxlY3RlZCBieSBBUk02NCBub3cuIEFsc28sIGBBUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQ2AgYW5kIGBBUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQ2AgYXJlIHNlbGVjdGVkIGJ5IEFSTTY0LiBHb29kIHRvIGtub3cuXG5cblRoZXJlZm9yZSwgbXkgaW5pdGlhbCBsaXN0IG9mIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZyBhcmU6IGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCwgYHBjcHVfYWxsb2NfZmlyc3RfY2h1bmtgLCBgcGNwdV9zZXR1cF9maXJzdF9jaHVua2AsIGBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgLCBgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVua2AsIGBzZXR1cF9wZXJjcHVfcGdkYCBhbmQgYGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NgLiBOb3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgZXhpc3QgYW5kIGFyZSBwYXJ0IG9mIHRoZSB0YXJnZXQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxODIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMjo0MDozNi4wOTI1OTAzNzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyNDM4NDgyMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxzdHJ1Y3Qgdm1fc3RydWN0IFxcXFwqKSAuKnBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIyOjQwOjQ1LjAxNjk4NTg1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjU3ODUyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlJlZmluaW5nIE15IEFwcHJvYWNoKipcblxuUmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEknbSB0YWtpbmcgYW5vdGhlciBsb29rIGF0IHRoaXMuIFRoZSBjdXJyZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBpc24ndCBxdWl0ZSBhcyByb2J1c3QgYXMgaXQgbmVlZHMgdG8gYmUuIEkgY2FuIHNlZSBhIHBvdGVudGlhbCBlZGdlIGNhc2Ugb3IgdHdvIHRoYXQgaXQncyBnb2luZyB0byBtaXNzLCBhbmQgdGhhdCdzIG5vdCBhY2NlcHRhYmxlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzY2FsZSBJJ20gd29ya2luZyBhdC4gSSBuZWVkIHRvIHRpZ2h0ZW4gdGhpbmdzIHVwLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGJhY2sgaW4gYW5kIHJlZmluZSB0aGUgcGF0dGVybi4gSXQncyBhYm91dCBiZWluZyBwcmVjaXNlOyBsZWF2aW5nIG5vIHJvb20gZm9yIGFtYmlndWl0eS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGdldHRpbmcgKmEqIG1hdGNoOyBpdCdzIGFib3V0IGdldHRpbmcgKnRoZSByaWdodCogbWF0Y2ggZXZlcnkgc2luZ2xlIHRpbWUuIFRpbWUgZm9yIGEgbW9yZSBlbGVnYW50IGFuZCBjb21wcmVoZW5zaXZlIHNvbHV0aW9uLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgbG9va2Fyb3VuZHMsIHBlcmhhcHMgZXZlbiBhIHJlY3Vyc2l2ZSBwYXR0ZXJuLCBkZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHNvdXJjZSBkYXRhLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2ODcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMjo0MDo0OC40NDI3OTkzMDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3ODE1OTkxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY3B1X2dldF9sb2NhbF92bV9hcmVhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTMxNT12b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKTtcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDozMTY6c3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzE3LVxcdFxcdFxcdFxcdCAgICAgaW50IHVuaXRfc2l6ZSwgc2l6ZV90IGFsaWduKTtcXG4tLVxcbm1tL3BlcmNwdS12bS5jPTQwNz1zdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY3JlYXRlX2NodW5rKGdmcF90IGdmcClcXG4tLVxcbm1tL3BlcmNwdS12bS5jLTQyOC1cXHR1bnNpZ25lZCBsb25nIGhpbnQgPSBkZWx0YSArICh1bnNpZ25lZCBsb25nKXBjcHVfbG9jYWxfYmFzZTtcXG5tbS9wZXJjcHUtdm0uYzo0Mjk6XFx0c3RydWN0IHZtX3N0cnVjdCAqbG9jYWxfdm0gPSBwY3B1X2dldF9sb2NhbF92bV9hcmVhKGhpbnQsXFxubW0vcGVyY3B1LXZtLmMtNDMwLVxcdFxcdFxcdFxcdFxcdHBjcHVfdW5pdF9zaXplLCBwY3B1X2F0b21fc2l6ZSk7XFxuLS1cXG5tbS92bWFsbG9jLmM9NTIzNT12b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKVxcbi0tXFxubW0vdm1hbGxvYy5jLTUyNDUtLyogRmluZCBmcmVlIHZtIGFyZWEgc3RhcnRzIGZyb20gaGludCAqL1xcbm1tL3ZtYWxsb2MuYzo1MjQ2OnN0cnVjdCB2bV9zdHJ1Y3QgKnBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBoaW50LFxcbm1tL3ZtYWxsb2MuYy01MjQ3LVxcdFxcdFxcdFxcdCAgICAgaW50IHVuaXRfc2l6ZSwgc2l6ZV90IGFsaWduKVxcbi0tXFxubW0vdm1hbGxvYy5jLTUyOTQtXFx0c2V0dXBfdm1hbGxvY192bSh2bSwgdmEsIFZNX0FMTE9DLFxcbm1tL3ZtYWxsb2MuYzo1Mjk1OlxcdFxcdFxcdCBwY3B1X2dldF9sb2NhbF92bV9hcmVhKTtcXG5tbS92bWFsbG9jLmMtNTI5Ni1cXHRzcGluX3VubG9jayhcXHUwMDI2dm4tXFx1MDAzZWJ1c3kubG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIyOjQwOjUzLjAyMDk2NzczNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjgzNzA5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBQZXItQ1BVIFZpcnR1YWwgTWVtb3J5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCBpcyBkZWZpbml0ZWx5IHByZXNlbnQgYW5kIGFjY291bnRlZCBmb3IuIFRoYXQncyBnb29kLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3lzdGVtIGlzIGFjdHVhbGx5IG1hbmFnaW5nIGFuZCBtYXBwaW5nIHRoZXNlIGxvY2FsIHBlci1DUFUgdmlydHVhbCBtZW1vcnkgYXJlYXMsIEkgbmVlZCB0byBkaXZlIGludG8gYG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGZpZ3VyZSBvdXQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBMZXQncyBzZWUgaG93IHRoYXQgZnVuY3Rpb24gd29ya3MgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUga2VybmVsJ3MgZG9pbmcgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzU3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjI6NDA6NTYuMjQ5MzQyMTg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTY1NzExMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVua1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oPTc1PWV4dGVybiB2b2lkIGxpbmVhcl9tYXBfbWF5YmVfc3BsaXRfdG9fcHRlcyh2b2lkKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oLTc2LSNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11Lmg6Nzc6ZXh0ZXJuIHZvaWQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaC03OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpO1xcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYz0xMDc1PXZvaWQgX19pbml0IGxpbmVhcl9tYXBfbWF5YmVfc3BsaXRfdG9fcHRlcyh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xMDgzLSNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTA4NDp2b2lkIF9faW5pdCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcXG5hcmNoL2FybTY0L21tL21tdS5jLTEwODUtXFx0XFx0XFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucilcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oPTE1Nj1zdGF0aWMgaW5saW5lIHNpemVfdCBwY3B1X29ial9mdWxsX3NpemUoc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNjgtI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXFxubW0vcGVyY3B1LWludGVybmFsLmg6MTY5OmV4dGVybiB2b2lkIF9faW5pdCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNzAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucik7XFxubW0vcGVyY3B1LWludGVybmFsLmgtMTcxLSNlbHNlXFxubW0vcGVyY3B1LWludGVybmFsLmg6MTcyOnN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsXFxubW0vcGVyY3B1LWludGVybmFsLmgtMTczLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5tbS9wZXJjcHUuYz0zMjAzPWludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3QgY3B1X3RvX25kX2ZuKVxcbi0tXFxubW0vcGVyY3B1LmMtMzI5OS1cXHRcXHQgKi9cXG5tbS9wZXJjcHUuYzozMzAwOlxcdFxcdG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsoY3B1LCAodW5zaWduZWQgbG9uZylwY3B1X3ZtLmFkZHIsXFxubW0vcGVyY3B1LmMtMzMwMS1cXHRcXHRcXHRcXHRcXHUwMDI2cGFnZXNbdW5pdCAqIHVuaXRfcGFnZXNdLCB1bml0X3BhZ2VzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjI6NDE6MDAuOTY1OTE5NTk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2MjI1OTU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyIGFuZCB0aGUgdGV4dCByZWZlcnMgdG8gZXhhbWluaW5nIGtlcm5lbCBjb2RlOlxuXG4qKkNoZWNraW5nIGBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgZ29lcyB0byB0aGUgcG90ZW50aWFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBudWFuY2VzIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMuIFRoaXMgaXNuJ3QganVzdCBhIGdlbmVyaWMgbWVtb3J5IHN5bmNocm9uaXphdGlvbiByb3V0aW5lOyB0aGUgXCJhcmNoXCIgcHJlZml4IHNjcmVhbXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBhcmNoaXRlY3R1cmFsIGNvbnRleHQgdGhpcyBhcHBsaWVzIHRvLiBJcyBpdCB4ODYsIEFSTSwgUklTQy1WLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGFyY2hpdGVjdHVyZSB3aWxsIGRpY3RhdGUgdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1vZGVscywgY2FjaGUgY29oZXJlbmN5IHByb3RvY29scywgYW5kIG1lbW9yeSBiYXJyaWVycyB0aGF0IGFyZSByZWxldmFudCBoZXJlLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gaG93IHRoZSBmdW5jdGlvbiBzeW5jaHJvbml6ZXMgdGhlIGtlcm5lbCdzIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmdzLiBXZSdyZSB0YWxraW5nIGFib3V0IGVuc3VyaW5nIGNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB2aXNpYmxlIHRvIHRoZSBrZXJuZWwgYW5kIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIG1lbW9yeS4gV2hhdCdzIHRoZSBzcGVjaWZpYyBzY2VuYXJpbz8gSXMgaXQgcmVsYXRlZCB0byBoYW5kbGluZyBUTEIgZmx1c2hlcz8gUGFnZSB0YWJsZSB1cGRhdGVzPyBPciBwb3NzaWJseSBjYWNoZSBpbnZhbGlkYXRpb24gZm9yIG1lbW9yeSByZWdpb25zIHNoYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBwcm9jZXNzZXMgb3IgZGV2aWNlcz8gVGhlIGNvbW1lbnRzIHdpdGhpbiB0aGUgZnVuY3Rpb24gaXRzZWxmIHNob3VsZCBiZSBteSBmaXJzdCBwb3J0IG9mIGNhbGwsIGJ1dCBJIGFudGljaXBhdGUgbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaXRzIHNwZWNpZmljIHVzZSBjYXNlcyBhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBpdHMgcm9sZSBpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gaXRzIGVmZmljaWVuY3ksIEkgd2lsbCBoYXZlIHRvIGxvb2sgdG8gc2VlIGlmIHRoaXMgb3BlcmF0aW9uIGhhcyBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTc3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjI6NDE6MDUuMDI4MTgzNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzkzNDMzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9rZXJuZWwvdHJhcHMuYz05MjE9YXNtbGlua2FnZSB2b2lkIGhhbmRsZV9iYWRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdHJhcHMuYy05NTgtICovXFxuYXJjaC9hcm0va2VybmVsL3RyYXBzLmM6OTU5OnZvaWQgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5hcmNoL2FybS9rZXJuZWwvdHJhcHMuYy05NjAte1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg9Mzg9c3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgtNDEtXFx0aWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgXFx1MDAyNiBQR1RCTF9QVURfTU9ESUZJRUQpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6NDI6XFx0XFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaC00My19XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaD0xNDE9c3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHAsIHB0ZV90ICpwdGVwKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgtMTQ0LVxcdGlmIChBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLIFxcdTAwMjYgUEdUQkxfUE1EX01PRElGSUVEKVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjE0NTpcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTE0Ni19XFxuLS1cXG5hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYz0xNzY9c3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BnZF9wb3B1bGF0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxuYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmMtMTkwLVxcdGlmIChtYXNrIFxcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcXG5hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYzoxOTE6XFx0XFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgZW5kKTtcXG5hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYy0xOTItfVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYz03Mz12b2lkIF9faW5pdCBzZXR1cF9wZXJjcHVfcGdkKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jLTk3LVxcbmFyY2gvYXJtNjQvbW0vbW11LmM6OTg6dm9pZCBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtOTkte1xcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYz0xODY2PXN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfdGFibGVzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jLTE4ODUtXFx0aWYgKG1hc2sgXFx1MDAyNiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLKVxcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTg4NjpcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg4Ny19XFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jPTIwOTA9aW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMTA3LVxcdGlmIChtYXNrIFxcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcXG5hcmNoL2FybTY0L21tL21tdS5jOjIxMDg6XFx0XFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgc3RhcnQgKyBzaXplKTtcXG5hcmNoL2FybTY0L21tL21tdS5jLTIxMDktXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmM9MTExPXZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYy0yMjAtXFx0ICogc2V0dXBfYXJjaCgpLCBidXQgcGVyY3B1IGRhdGEgYWxzbyBuZWVkcyB0byBiZSBhdmFpbGFibGUgaW5cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmM6MjIxOlxcdCAqIHRoZSBzbXBib290IGFzbSBhbmQgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncygpIGRvZXNuJ3Qgc3luYyB0b1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYy0yMjItXFx0ICogc3dhcHBlcl9wZ19kaXIgb24gMzItYml0LiBUaGUgcGVyLWNwdSBtYXBwaW5ncyBuZWVkIHRvIGJlIGF2YWlsYWJsZVxcbi0tXFxuYXJjaC94ODYvbW0vZmF1bHQuYz0yNjk9Tk9LUFJPQkVfU1lNQk9MKHZtYWxsb2NfZmF1bHQpO1xcbmFyY2gveDg2L21tL2ZhdWx0LmMtMjcwLVxcbmFyY2gveDg2L21tL2ZhdWx0LmM6MjcxOnZvaWQgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTI3Mi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MjE4PXN0YXRpYyB2b2lkIHN5bmNfZ2xvYmFsX3BnZHModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMjM4LSAqL1xcbmFyY2gveDg2L21tL2luaXRfNjQuYzoyMzk6dm9pZCBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy0yNDAte1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZ2FsbG9jLmgtMTgtXFx0XFx0aWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgXFx1MDAyNiBQR1RCTF9QR0RfTU9ESUZJRUQpXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGdhbGxvYy5oOjE5OlxcdFxcdFxcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGdhbGxvYy5oLTIwLVxcdH0gd2hpbGUgKDApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaC0yNS1cXHRcXHRpZiAoQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyBcXHUwMDI2IFBHVEJMX1A0RF9NT0RJRklFRClcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wZ2FsbG9jLmg6MjY6XFx0XFx0XFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTtcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wZ2FsbG9jLmgtMjctXFx0fSB3aGlsZSAoMClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTE3Mjg9c3RhdGljIGlubGluZSB2b2lkIG1vZGlmeV9wcm90X2NvbW1pdF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xNzQ1LSAqIGFuZCBsZXQgZ2VuZXJpYyB2bWFsbG9jLCBpb3JlbWFwIGFuZCBwYWdlIHRhYmxlIHVwZGF0ZSBjb2RlIGtub3cgd2hlblxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjE3NDY6ICogYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncygpIG5lZWRzIHRvIGJlIGNhbGxlZC5cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xNzQ3LSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTc1Mi0vKlxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjE3NTM6ICogVGhlcmUgaXMgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncygpLiBJdCBpc1xcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTE3NTQtICogcmVsaWVkIHVwb24gdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGNhbGxzIG91dCBpZiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xNzU2LSAqL1xcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjE3NTc6dm9pZCBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xNzU4LVxcbi0tXFxubW0vbWVtb3J5LmM9MzQ2Mz1zdGF0aWMgaW50IF9fYXBwbHlfdG9fcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmMtMzQ5Ni1cXHRpZiAobWFzayBcXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXFxubW0vbWVtb3J5LmM6MzQ5NzpcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBzdGFydCArIHNpemUpO1xcbm1tL21lbW9yeS5jLTM0OTgtXFxuLS1cXG5tbS92bWFsbG9jLmM9MzAxPWludCB2bWFwX3JhbmdlX25vZmx1c2gocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTMyOS1cXHRpZiAobWFzayBcXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXFxubW0vdm1hbGxvYy5jOjMzMDpcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xcbm1tL3ZtYWxsb2MuYy0zMzEtXFxuLS1cXG5tbS92bWFsbG9jLmM9NDg0PXZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxubW0vdm1hbGxvYy5jLTUwMi1cXHRpZiAobWFzayBcXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXFxubW0vdm1hbGxvYy5jOjUwMzpcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xcbm1tL3ZtYWxsb2MuYy01MDQtfVxcbi0tXFxubW0vdm1hbGxvYy5jPTYyNj1zdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTY0Ny1cXHRpZiAobWFzayBcXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXFxubW0vdm1hbGxvYy5jOjY0ODpcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xcbm1tL3ZtYWxsb2MuYy02NDktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIyOjQxOjEwLjc2NzU1MTI0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjEyNzE5OTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIEV4cGxvcmF0aW9uIG9mIFBlci1DUFUgTWFwcGluZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBlci1DUFUgbWFwcGluZyBzdHVmZi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGEgZmV3IGtleSBmdW5jdGlvbnM6IGBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzYCwgYHNldHVwX3BlcmNwdV9wZ2RgLCBgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVua2AsIGFuZCBgcGNwdV9nZXRfbG9jYWxfdm1fYXJlYWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIHRoaXMgZmVhdHVyZSwgYW5kIGxpa2VseSBjb250YWluIHRoZSBtb3N0IGludGVyZXN0aW5nIGxvZ2ljLlxuXG5GaXJzdCwgSSB3YW50IHRvIHBpbiBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhpcyBmZWF0dXJlJ3MgZW5hYmxlbWVudC4gTGV0J3Mgc3RhcnQgd2l0aCBgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUGAuIFF1aWNrbHkgY2hlY2tpbmcgYGFyY2gvYXJtNjQvS2NvbmZpZ2AsIEkgc2VlIGl0J3MgYSBgZGVmX2Jvb2wgeWAgd2hpY2ggbWVhbnMgaXQncyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgdGhlIGRlcGVuZGVuY2llcyAoQVJNNjQgd2l0aCBzcGVjaWZpYyBWQSBiaXQgc2l6ZXMgYW5kIHBhZ2Ugc2l6ZXMpIGFyZSBtZXQuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byBtYW51YWxseSBlbmFibGUgaXQuIEhvd2V2ZXIsIGl0J3Mgc3RpbGwgd29ydGh3aGlsZSB0byBkb2N1bWVudCB0aGF0IGl0J3MgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuXG5cblRoZW4sIEknbGwgbW92ZSBvbiB0byBgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktgLiBBIHF1aWNrIGNoZWNrIGluIGBhcmNoL2FybTY0L0tjb25maWdgIHJldmVhbHMgdGhhdCBBUk02NCAqc2VsZWN0cyogdGhpcyBjb25maWcsIG1lYW5pbmcgaXQncyBhbHdheXMgZW5hYmxlZCB3aGVuIEFSTTY0IGlzIGFjdGl2ZS5cblxuTmV4dCwgSSdsbCB2ZXJpZnkgd2hhdCBJIHRoaW5rOiBgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNgIGFuZCBgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNgIGFyZSBhbHNvIHNlbGVjdGVkIGJ5IEFSTTY0LiBDb25maXJtZWQuXG5cbk5vdywgbGV0J3MganVtcCB0byB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiwgYEhBVkVfTE9DQUxfUEVSX0NQVV9NQVBgIGFuZCBzZWUgaXQncyBhIGBib29sYCBpbiBgbW0vS2NvbmZpZ2AuXG5cbk5vdywgSSB3YW50IHRvIHZlcmlmeSBpZiB0aGUgZnVuY3Rpb25zIEkgaW5pdGlhbGx5IGxpc3RlZCBhcmUgZ29vZCB0YXJnZXRzIGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5gcGNwdV9nZXRfbG9jYWxfdm1fYXJlYWAgZnJvbSBgbW0vdm1hbGxvYy5jYCBpcyBlbmFibGVkIGJ5IHRoZSBgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBgLCBzbyBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuYG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtgIGZyb20gYGFyY2gvYXJtNjQvbW0vbW11LmNgIGlzIGFsc28gZW5hYmxlZCBieSBgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBgLCBzbyBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuYHNldHVwX3BlcmNwdV9wZ2RgIGZyb20gYGFyY2gvYXJtNjQvbW0vbW11LmNgIGlzIGFsc28gYSBrZXkgZnVuY3Rpb24uXG5cbmBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzYCBmcm9tIGBhcmNoL2FybTY0L21tL21tdS5jYCBpcyBhIG5ldyBmdW5jdGlvbiBhbmQgaXMgYWxzbyBhIGtleSBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBsb29rIGF0IGEgZmV3IG1vcmUgZnVuY3Rpb25zLlxuXG5gdm1hcF9yYW5nZV9ub2ZsdXNoYCBpbiBgbW0vdm1hbGxvYy5jYCBhbmQgYF9fdnVubWFwX3JhbmdlX25vZmx1c2hgIGFsc28gaW4gYG1tL3ZtYWxsb2MuY2AgaGF2ZSBiZWVuIGNoYW5nZWQgd2l0aCBhIG5ldyBwYXJhbWV0ZXIuIExldCdzIGtlZXAgaW4gbWluZCB0aGF0IHRoZXkgYXJlIG5vdCBuZXcsIGJ1dCBoYXZlIGJlZW4gZXh0ZW5kZWQuIEhvd2V2ZXIsIGxldCdzIGtlZXAgdGhlbSBvbiB0aGUgbGlzdCBqdXN0IGluIGNhc2UuXG5cbmBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rYCBpbiBgbW0vcGVyY3B1LmNgXG5cbmBwY3B1X3NldHVwX2ZpcnN0X2NodW5rYCBpbiBgbW0vcGVyY3B1LmNgXG5cbmBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgIGluIGBtbS9wZXJjcHUuY2BcblxuT2theSwgc28gSSBoYXZlIGEgbW9yZSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHJldmlldywgdGhvdWdoIEkgY2FuIHByaW9yaXRpemUgYmFzZWQgb24gbm92ZWx0eSBhbmQgc3BlY2lmaWNpdHkgdG8gdGhpcyBwZXItQ1BVIGZlYXR1cmU6XG5cbkJhc2VkIG9uIHRoZSBpbnZlc3RpZ2F0aW9uLCBJIGhhdmUgdGhlIGZvbGxvd2luZyBzZXQgb2Yga2V5IHN5bWJvbHM6XG5cbi0gICBgcGNwdV9nZXRfbG9jYWxfdm1fYXJlYWBcbi0gICBgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVua2Bcbi0gICBgc2V0dXBfcGVyY3B1X3BnZGBcbi0gICBgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc2Bcbi0gICBgdm1hcF9yYW5nZV9ub2ZsdXNoYCAoZXh0ZW5kZWQpXG4tICAgYF9fdnVubWFwX3JhbmdlX25vZmx1c2hgIChleHRlbmRlZClcbi0gICBgcGNwdV9hbGxvY19maXJzdF9jaHVua2Bcbi0gICBgcGNwdV9zZXR1cF9maXJzdF9jaHVua2Bcbi0gICBgcGNwdV9wYWdlX2ZpcnN0X2NodW5rYFxuXG5BbmQgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlOlxuXG4tICAgYEhBVkVfTE9DQUxfUEVSX0NQVV9NQVBgXG4tICAgYEFSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DYFxuLSAgIGBBUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQ2Bcbi0gICBgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktgXG5cblNpbmNlIHRoZSBvdGhlciBmdW5jdGlvbnMgYHZtYXBfcmFuZ2Vfbm9mbHVzaGAsIGBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoYCwgYHBjcHVfYWxsb2NfZmlyc3RfY2h1bmtgLCBgcGNwdV9zZXR1cF9maXJzdF9jaHVua2AgYW5kIGBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgIGFyZSBnZW5lcmljLCBpdCdzIGNsZWFyXG5cbiIsIklucHV0VG9rZW5zIjozNDY1MCwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIyOjQxOjI2Ljg5NDc1Njc5OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjA4MjAwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFwiLFxuICAgIFwiQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcIixcbiAgICBcIkFSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXCIsXG4gICAgXCJORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWFcIixcbiAgICBcIm1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtcIixcbiAgICBcInNldHVwX3BlcmNwdV9wZ2RcIixcbiAgICBcImFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBsb2NhbCBwZXItY3B1IG1hcHBpbmcgc3VwcG9ydCBmb3IgQVJNNjQsIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgcGVyY3B1IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXCIsXG4gICAgXCJBUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQ1wiLFxuICAgIFwiQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNcIixcbiAgICBcIk5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGNwdV9nZXRfbG9jYWxfdm1fYXJlYVwiLFxuICAgIFwibWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVua1wiLFxuICAgIFwic2V0dXBfcGVyY3B1X3BnZFwiLFxuICAgIFwiYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGxvY2FsIHBlci1jcHUgbWFwcGluZyBzdXBwb3J0IGZvciBBUk02NCwgbW9kaWZ5aW5nIGNvcmUga2VybmVsIGxvZ2ljIGZvciBwZXJjcHUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbbhl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-15 22:21:47 +0000 UTC FinishedAt: 2026-07-15 22:41:28 +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": "32bfe6d6b85e3c11a710eb40b9771f715e3c612f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HAVE_LOCAL_PER_CPU_MAP", "ARCH_HAS_PMD_POPULATE_SYNC", "ARCH_HAS_PUD_POPULATE_SYNC", "NEED_PER_CPU_PAGE_FIRST_CHUNK" ], "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": "32bfe6d6b85e3c11a710eb40b9771f715e3c612f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HAVE_LOCAL_PER_CPU_MAP", "ARCH_HAS_PMD_POPULATE_SYNC", "ARCH_HAS_PUD_POPULATE_SYNC", "NEED_PER_CPU_PAGE_FIRST_CHUNK" ], "series_id": "8eceab8c-9d59-4750-8e5c-2e43f68d1776" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "pcpu_get_local_vm_area", "map_local_percpu_first_chunk", "setup_percpu_pgd", "arch_sync_kernel_mappings" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIyOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAmIzM0OywKICAgICYjMzQ7QVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkMmIzM0OywKICAgICYjMzQ7QVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkMmIzM0OywKICAgICYjMzQ7TkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwY3B1X2dldF9sb2NhbF92bV9hcmVhJiMzNDssCiAgICAmIzM0O21hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsmIzM0OywKICAgICYjMzQ7c2V0dXBfcGVyY3B1X3BnZCYjMzQ7LAogICAgJiMzNDthcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGxvY2FsIHBlci1jcHUgbWFwcGluZyBzdXBwb3J0IGZvciBBUk02NCwgbW9kaWZ5aW5nIGNvcmUga2VybmVsIGxvZ2ljIGZvciBwZXJjcHUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIyOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmJhY2NiMzUxMWZjYWRkMGZhMTJiNTJjNzc5M2Y4Y2YwMTgwMDA2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDE1IDIyOjQwOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjNhZmUwNjg4OTE5YmQuLjk1ZmZkMTUxMTg3ZjI0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC00MSw5ICYjNDM7NDEsMTEgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTXG4gXHRzZWxlY3QgQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0VcbiBcdHNlbGVjdCBBUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORyBpZiBBUk02NF9IQUZUXG4mIzQzO1x0c2VsZWN0IEFSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DXG4gXHRzZWxlY3QgQVJDSF9IQVNfUFJFRU1QVF9MQVpZXG4gXHRzZWxlY3QgQVJDSF9IQVNfUFREVU1QXG4gXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcbiYjNDM7XHRzZWxlY3QgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNcbiBcdHNlbGVjdCBBUkNIX0hBU19IV19QVEVfWU9VTkdcbiBcdHNlbGVjdCBBUkNIX0hBU19TRVRVUF9ETUFfT1BTXG4gXHRzZWxlY3QgQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVBcbkBAIC0yMjQsNiAmIzQzOzIyNiw3IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBIQVZFX1JTRVFcbiBcdHNlbGVjdCBIQVZFX1JVU1QgaWYgUlVTVENfU1VQUE9SVFNfQVJNNjRcbiYjNDM7XHRzZWxlY3QgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcbiBcdHNlbGVjdCBIQVZFX1NUQUNLUFJPVEVDVE9SXG4gXHRzZWxlY3QgSEFWRV9TVEFUSUNfQ0FMTCBpZiBDRklcbiBcdHNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFNcbkBAIC0yMzksNiAmIzQzOzI0Miw3IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEFcbiBcdHNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEVcbiYjNDM7XHRzZWxlY3QgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbiBcdHNlbGVjdCBORUVEX1NHX0RNQV9MRU5HVEhcbiBcdHNlbGVjdCBPRlxuIFx0c2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFXG5AQCAtNDExLDYgJiM0Mzs0MTUsMTEgQEAgY29uZmlnIEtBU0FOX1NIQURPV19PRkZTRVRcbiBjb25maWcgVU5XSU5EX1RBQkxFU1xuIFx0Ym9vbFxuIFxuJiM0Mztjb25maWcgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztcdGRlZl9ib29sIHlcbiYjNDM7XHRkZXBlbmRzIG9uIChBUk02NF9WQV9CSVRTXzQ4IFx1MDAyNlx1MDAyNiAoQVJNNjRfNEtfUEFHRVMgfHwgQVJNNjRfNjRLX1BBR0VTKSkgfHwgXFxcbiYjNDM7XHRcdCAgIChBUk02NF9WQV9CSVRTXzQ3IFx1MDAyNlx1MDAyNiBBUk02NF8xNktfUEFHRVMpXG4mIzQzO1xuIHNvdXJjZSBcJiMzNDthcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zXCYjMzQ7XG4gXG4gbWVudSBcJiMzNDtLZXJuZWwgRmVhdHVyZXNcJiMzNDtcbkBAIC0xNTgxLDkgJiM0MzsxNTkwLDYgQEAgY29uZmlnIE5VTUFcbiBcdGJvb2wgXCYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcJiMzNDtcbiBcdHNlbGVjdCBHRU5FUklDX0FSQ0hfTlVNQVxuIFx0c2VsZWN0IE9GX05VTUFcbi1cdHNlbGVjdCBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxuLVx0c2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOS1xuLVx0c2VsZWN0IE5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXG4gXHRzZWxlY3QgVVNFX1BFUkNQVV9OVU1BX05PREVfSURcbiBcdGhlbHBcbiBcdCAgRW5hYmxlIE5VTUEgKE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MpIHN1cHBvcnQuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmhcbmluZGV4IDVlMTIxMWM1NDBhYjIzLi5hYTA4MThmN2VjNThjNSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmhcbkBAIC02Myw2ICYjNDM7NjMsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJtNjRfa2VybmVsX3VubWFwcGVkX2F0X2VsMCh2b2lkKVxuIGV4dGVybiB2b2lkIGFybTY0X21lbWJsb2NrX2luaXQodm9pZCk7XG4gZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7XG4gZXh0ZXJuIHZvaWQgYm9vdG1lbV9pbml0KHZvaWQpO1xuJiM0MztleHRlcm4gdm9pZCBzZXR1cF9wZXJjcHVfcGdkKHZvaWQpO1xuIGV4dGVybiB2b2lkIGNyZWF0ZV9tYXBwaW5nX25vYWxsb2MocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyB2aXJ0LFxuIFx0XHRcdFx0ICAgcGh5c19hZGRyX3Qgc2l6ZSwgcGdwcm90X3QgcHJvdCk7XG4gZXh0ZXJuIHZvaWQgY3JlYXRlX3BnZF9tYXBwaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwaHlzX2FkZHJfdCBwaHlzLFxuQEAgLTcyLDYgJiM0Mzs3MywxMCBAQCBleHRlcm4gdm9pZCAqZml4bWFwX3JlbWFwX2ZkdChwaHlzX2FkZHJfdCBkdF9waHlzLCBpbnQgKnNpemUsIHBncHJvdF90IHByb3QpO1xuIGV4dGVybiB2b2lkIG1hcmtfbGluZWFyX3RleHRfYWxpYXNfcm8odm9pZCk7XG4gZXh0ZXJuIGludCBzcGxpdF9rZXJuZWxfbGVhZl9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbiBleHRlcm4gdm9pZCBsaW5lYXJfbWFwX21heWJlX3NwbGl0X3RvX3B0ZXModm9pZCk7XG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztleHRlcm4gdm9pZCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpO1xuJiM0MzsjZW5kaWZcbiBcbiAvKlxuICAqIFRoaXMgY2hlY2sgaXMgdHJpZ2dlcmVkIGR1cmluZyB0aGUgZWFybHkgYm9vdCBiZWZvcmUgdGhlIGNwdWZlYXR1cmVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcbmluZGV4IDgwM2I2ODc1ODE1Mjc1Li4wZTk5MWI5OGVkOWVhZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXG5AQCAtMjcsNiAmIzQzOzI3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuIFxuIGV4dGVybiBib29sIHJvZGF0YV9mdWxsO1xuJiM0MztleHRlcm4gcGdkX3QgKnBlcmNwdV9wZ2RbTlJfQ1BVU107XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGNvbnRleHRpZHJfdGhyZWFkX3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpXG4ge1xuQEAgLTEzOCw3ICYjNDM7MTM5LDEzIEBAIHZvaWQgX19jcHVfcmVwbGFjZV90dGJyMShwZ2RfdCAqcGdkcCwgYm9vbCBjbnApO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfZW5hYmxlX3N3YXBwZXJfY25wKHZvaWQpXG4ge1xuLVx0X19jcHVfcmVwbGFjZV90dGJyMShsbV9hbGlhcyhzd2FwcGVyX3BnX2RpciksIHRydWUpO1xuJiM0MztcdHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4mIzQzO1x0cGdkX3QgKnR0YnIxID0gcGVyY3B1X3BnZFtjcHVdO1xuJiM0MztcbiYjNDM7XHRpZiAoY3B1ID09IDApXG4mIzQzO1x0XHR0dGJyMSA9IGxtX2FsaWFzKHN3YXBwZXJfcGdfZGlyKTtcbiYjNDM7XG4mIzQzO1x0X19jcHVfcmVwbGFjZV90dGJyMSh0dGJyMSwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlcGxhY2VfdHRicjEocGdkX3QgKnBnZHApXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZXJjcHUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcbmluZGV4IGI1N2IyYmIwMDk2Nzc0Li4wM2QxNDlmOTE3N2MwZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcbkBAIC0xNDIsNiAmIzQzOzE0MiwyNyBAQCBQRVJDUFVfUkVUX09QKGFkZCwgYWRkLCBsZGFkZClcbiAjdW5kZWYgUEVSQ1BVX09QXG4gI3VuZGVmIFBFUkNQVV9SRVRfT1BcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4mIzQzO2V4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9sb2NhbF9vZmY7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIGxvY2FsX2NwdV9wdHIocHRyKVx0XHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX3ZlcmlmeV9wY3B1X3B0cihwdHIpO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0U0hJRlRfUEVSQ1BVX1BUUihwdHIsIF9fcGVyX2NwdV9sb2NhbF9vZmYpO1x0XHRcdFxcXG4mIzQzO30pXG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9wY3BfcHJvdGVjdChvcCwgcGNwLCAuLi4pXHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRvcChsb2NhbF9jcHVfcHRyKFx1MDAyNihwY3ApKSwgX19WQV9BUkdTX18pO1x0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgX3BjcF9wcm90ZWN0X3JldHVybihvcCwgcGNwLCBhcmdzLi4uKVx0XHRcdFx0XFxcbiYjNDM7KHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHR5cGVvZihwY3ApIF9fcmV0dmFsO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0X19yZXR2YWwgPSAodHlwZW9mKHBjcCkpb3AobG9jYWxfY3B1X3B0cihcdTAwMjYocGNwKSksICMjYXJncyk7XHRcXFxuJiM0MztcdF9fcmV0dmFsO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7I2Vsc2VcbiAvKlxuICAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gYXZvaWQgdGhlIGNvbmRpdGlvbmFsIGNhbGwgaW50byB0aGUgc2NoZWR1bGVyIHdoZW5cbiAgKiByZS1lbmFibGluZyBwcmVlbXB0aW9uIGZvciBwcmVlbXB0aWJsZSBrZXJuZWxzLCBidXQgZG9pbmcgdGhhdCBpbiBhIHdheVxuQEAgLTE1Miw3ICYjNDM7MTczLDYgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXG4gICogcHJlZW1wdGlvbiBwb2ludCB3aGVuIFRJRl9ORUVEX1JFU0NIRUQgZ2V0cyBzZXQgd2hpbGUgcHJlZW1wdGlvbiBpc1xuICAqIGRpc2FibGVkLlxuICAqL1xuLVxuICNkZWZpbmUgX3BjcF9wcm90ZWN0KG9wLCBwY3AsIC4uLilcdFx0XHRcdFx0XFxcbiAoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4gXHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuQEAgLTE2OCw2ICYjNDM7MTg4LDcgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXG4gXHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XHRcdFx0XHRcdFxcXG4gXHRfX3JldHZhbDtcdFx0XHRcdFx0XHRcdFxcXG4gfSlcbiYjNDM7I2VuZGlmXG4gXG4gI2RlZmluZSB0aGlzX2NwdV9yZWFkXzEocGNwKVx0XHRcXFxuIFx0X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9yZWFkXzgsIHBjcClcbkBAIC0yNDMsNiAmIzQzOzI2NCwxOSBAQCBQRVJDUFVfUkVUX09QKGFkZCwgYWRkLCBsZGFkZClcbiBcbiAjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGc2NChwY3AsIG8sIG4pXHR0aGlzX2NwdV9jbXB4Y2hnXzgocGNwLCBvLCBuKVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnMTI4KHBjcCwgbywgbilcdFx0XHRcdFx0XFxcbiYjNDM7KHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHR5cGVkZWYgdHlwZW9mKHBjcCkgcGNwX29wX1RfXztcdFx0XHRcdFx0XFxcbiYjNDM7XHR1MTI4IG9sZF9fLCBuZXdfXywgcmV0X187XHRcdFx0XHRcdFxcXG4mIzQzO1x0cGNwX29wX1RfXyAqcHRyX187XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRvbGRfXyA9IG87XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdG5ld19fID0gbjtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cHRyX18gPSBsb2NhbF9jcHVfcHRyKFx1MDAyNihwY3ApKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyZXRfXyA9IGNtcHhjaGcxMjhfbG9jYWwoKHZvaWQgKilwdHJfXywgb2xkX18sIG5ld19fKTtcdFx0XFxcbiYjNDM7XHRyZXRfXztcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7I2Vsc2VcbiAjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGcxMjgocGNwLCBvLCBuKVx0XHRcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdHR5cGVkZWYgdHlwZW9mKHBjcCkgcGNwX29wX1RfXztcdFx0XHRcdFx0XFxcbkBAIC0yNTYsNiAmIzQzOzI5MCw3IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKVxuIFx0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuIFx0cmV0X187XHRcdFx0XHRcdFx0XHRcdFxcXG4gfSlcbiYjNDM7I2VuZGlmXG4gXG4gI2lmZGVmIF9fS1ZNX05WSEVfSFlQRVJWSVNPUl9fXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19oeXBfcGVyX2NwdV9vZmZzZXQodW5zaWduZWQgaW50IGNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuaW5kZXggMWI0NTA5ZDMzODJjNjMuLmRkMWFjODRhMTE2MDVlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtMzMsMTEgJiM0MzszMywyNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApXG4gXHRwdWR2YWwgfD0gKG1tID09IFx1MDAyNmluaXRfbW0pID8gUFVEX1RBQkxFX1VYTiA6IFBVRF9UQUJMRV9QWE47XG4gXHRfX3B1ZF9wb3B1bGF0ZShwdWRwLCBfX3BhKHBtZHApLCBwdWR2YWwpO1xuIH1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxuJiM0Mzt7XG4mIzQzO1x0cHVkX3BvcHVsYXRlKFx1MDAyNmluaXRfbW0sIHB1ZHAsIHBtZHApO1xuJiM0MztcdGlmIChBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLIFx1MDAyNiBQR1RCTF9QVURfTU9ESUZJRUQpXG4mIzQzO1x0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcHVkX3BvcHVsYXRlKHB1ZF90ICpwdWRwLCBwaHlzX2FkZHJfdCBwbWRwLCBwdWR2YWxfdCBwcm90KVxuIHtcbiBcdEJVSUxEX0JVRygpO1xuIH1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxuJiM0Mzt7XG4mIzQzO1x0QlVJTERfQlVHKCk7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4gI2VuZGlmXHQvKiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDIgKi9cbiBcbiAjaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTIFx1MDAzZSAzXG5AQCAtMTIxLDQgJiM0MzsxMzcsMTIgQEAgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCwgcGd0YWJsZV90IHB0ZXApXG4gXHRcdCAgICAgICBQTURfVFlQRV9UQUJMRSB8IFBNRF9UQUJMRV9BRiB8IFBNRF9UQUJMRV9QWE4pO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQ1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX3N5bmModW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcCwgcHRlX3QgKnB0ZXApXG4mIzQzO3tcbiYjNDM7XHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZHAsIHB0ZXApO1xuJiM0MztcdGlmIChBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLIFx1MDAyNiBQR1RCTF9QTURfTU9ESUZJRUQpXG4mIzQzO1x0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDI3Njg5YzYyYmQyNWRkLi44M2NkNjU2MTBkN2Y3ZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTE4LDE0ICYjNDM7MTgsMzUgQEBcbiAgKiBWTUFMTE9DIHJhbmdlLlxuICAqXG4gICogVk1BTExPQ19TVEFSVDogYmVnaW5uaW5nIG9mIHRoZSBrZXJuZWwgdm1hbGxvYyBzcGFjZVxuLSAqIFZNQUxMT0NfRU5EOiBleHRlbmRzIHRvIHRoZSBhdmFpbGFibGUgc3BhY2UgYmVsb3cgdm1lbW1hcFxuJiM0MzsgKiBWTUFMTE9DX0VORDogZXh0ZW5kcyB0byB0aGUgc3BhY2UgYmVsb3cgZ2xvYmFsIHBlcmNwdSBhcmVhXG4gICovXG4gI2RlZmluZSBWTUFMTE9DX1NUQVJUXHRcdChNT0RVTEVTX0VORClcbiYjNDM7I2RlZmluZSBWTUFMTE9DX0VORFx0XHQoUEVSQ1BVX1NUQVJUIC0gU1pfOE0pXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQRVJDUFUgcmFuZ2VcbiYjNDM7ICpcbiYjNDM7ICogUEVSQ1BVX1NUQVJUOiBiZWdpbm5pbmcgb2YgZ2xvYmFsIHBlcmNwdSBhcmVhXG4mIzQzOyAqIFBFUkNQVV9FTkQ6IGVuZCBvZiBnbG9iYWwgcGVyY3B1IGFyZWFcbiYjNDM7ICogTE9DQUxfUEVSQ1BVX1NUQVJUOiBiZWdpbm5pbmcgb2YgbG9jYWwgcGVyY3B1IGFyZWFcbiYjNDM7ICogTE9DQUxfUEVSQ1BVX0VORDogZW5kIG9mIGxvY2FsIHBlcmNwdSBhcmVhLCBleHRlbmQgdG8gdGhlIGF2YWlsYWJsZVxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICBzcGFjZSBiZWxvdyB2bWVtbWFwXG4mIzQzOyAqL1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNEtfUEFHRVMpXG4mIzQzOyNkZWZpbmUgUEVSQ1BVX1NJWkVcdFx0KDIgKiBQR0RJUl9TSVpFKVxuJiM0MzsjZWxpZiBkZWZpbmVkKENPTkZJR19BUk02NF8xNktfUEFHRVMpXG4mIzQzOyNkZWZpbmUgUEVSQ1BVX1NJWkUgICAgICAgICAgICAoMTYgKiBQVURfU0laRSlcbiYjNDM7I2VsaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNjRLX1BBR0VTKVxuJiM0MzsjZGVmaW5lIFBFUkNQVV9TSVpFICAgICAgICAgICAgKFBHRElSX1NJWkUpXG4mIzQzOyNlbmRpZlxuJiM0MzsjZGVmaW5lIFBFUkNQVV9TVEFSVFx0XHQoUEVSQ1BVX0VORCAtIFBFUkNQVV9TSVpFKVxuJiM0MzsjZGVmaW5lIFBFUkNQVV9FTkRcdFx0KExPQ0FMX1BFUkNQVV9TVEFSVClcbiYjNDM7I2RlZmluZSBMT0NBTF9QRVJDUFVfU1RBUlRcdChMT0NBTF9QRVJDUFVfRU5EIC0gUEVSQ1BVX1NJWkUpXG4gI2lmIFZBX0JJVFMgPT0gVkFfQklUU19NSU5cbi0jZGVmaW5lIFZNQUxMT0NfRU5EXHRcdChWTUVNTUFQX1NUQVJUIC0gU1pfOE0pXG4mIzQzOyNkZWZpbmUgTE9DQUxfUEVSQ1BVX0VORFx0KEFMSUdOX0RPV04oVk1FTU1BUF9TVEFSVCwgUEVSQ1BVX1NJWkUpKVxuICNlbHNlXG4gI2RlZmluZSBWTUVNTUFQX1VOVVNFRF9OUEFHRVNcdCgoX1BBR0VfT0ZGU0VUKHZhYml0c19hY3R1YWwpIC0gUEFHRV9PRkZTRVQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKVxuLSNkZWZpbmUgVk1BTExPQ19FTkRcdFx0KFZNRU1NQVBfU1RBUlQgJiM0MzsgVk1FTU1BUF9VTlVTRURfTlBBR0VTICogc2l6ZW9mKHN0cnVjdCBwYWdlKSAtIFNaXzhNKVxuJiM0MzsjZGVmaW5lIExPQ0FMX1BFUkNQVV9FTkRcdChBTElHTl9ET1dOKChWTUVNTUFQX1NUQVJUICYjNDM7IFZNRU1NQVBfVU5VU0VEX05QQUdFUyAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpLCBQRVJDUFVfU0laRSkpXG4gI2VuZGlmXG4gXG4gI2RlZmluZSB2bWVtbWFwXHRcdFx0KChzdHJ1Y3QgcGFnZSAqKVZNRU1NQVBfU1RBUlQgLSAobWVtc3RhcnRfYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkpXG5AQCAtMTIxNiw2ICYjNDM7MTIzNywxNiBAQCBwNGRfdCAqcDRkX29mZnNldF9sb2NrbGVzc19mb2xkZWQocGdkX3QgKnBnZHAsIHBnZF90IHBnZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIFxuICNlbmRpZiAgLyogQ09ORklHX1BHVEFCTEVfTEVWRUxTIFx1MDAzZSA0ICovXG4gXG4mIzQzOyNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMlxuJiM0MzsjZGVmaW5lIEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgICAgICBQR1RCTF9QTURfTU9ESUZJRURcbiYjNDM7I2VsaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTID09IDNcbiYjNDM7I2RlZmluZSBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLICAgICAgUEdUQkxfUFVEX01PRElGSUVEXG4mIzQzOyNlbGlmIENPTkZJR19QR1RBQkxFX0xFVkVMUyA9PSA0XG4mIzQzOyNkZWZpbmUgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyAgICAgIFBHVEJMX1A0RF9NT0RJRklFRFxuJiM0MzsjZWxpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNVxuJiM0MzsjZGVmaW5lIEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgICAgICBQR1RCTF9QR0RfTU9ESUZJRURcbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNkZWZpbmUgcGdkX0VSUk9SKGUpXHRcXFxuIFx0cHJfZXJyKFwmIzM0OyVzOiVkOiBiYWQgcGdkICUwMTZsbHguXFxuXCYjMzQ7LCBfX0ZJTEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmNcbmluZGV4IDIzYzA1ZGM3YThmMmFjLi42ZDQyMGFkNTlhZjQ5MiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmNcbkBAIC0zNjAsNiAmIzQzOzM2MCw5IEBAIHZvaWQgX19pbml0IF9fbm9fc2FuaXRpemVfYWRkcmVzcyBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4gXHRzbXBfaW5pdF9jcHVzKCk7XG4gXHRzbXBfYnVpbGRfbXBpZHJfaGFzaCgpO1xuIFxuJiM0MztcdC8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIHNtcF9pbml0X2NwdXMgKi9cbiYjNDM7XHRzZXR1cF9wZXJjcHVfcGdkKCk7XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfQVJNNjRfU1dfVFRCUjBfUEFOXG4gXHQvKlxuIFx0ICogTWFrZSBzdXJlIGluaXRfdGhyZWFkX2luZm8udHRicjAgYWx3YXlzIGdlbmVyYXRlcyB0cmFuc2xhdGlvblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wLmNcbmluZGV4IGQ0NjAyMmY3MjA3NTQwLi40YTgxMTM3OWMxOTE2MiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9zbXAuY1xuQEAgLTU1LDYgJiM0Mzs1NSw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2lwaS5oXHUwMDNlXG4gXG4mIzQzO2V4dGVybiB2b2lkIGlkbWFwX2NwdV9yZXBsYWNlX3R0YnIxKHBoeXNfYWRkcl90IHBnZGlyKTtcbiYjNDM7XG4gLypcbiAgKiBhcyBmcm9tIDIuNSwga2VybmVscyBubyBsb25nZXIgaGF2ZSBhbiBpbml0X3Rhc2tzIHN0cnVjdHVyZVxuICAqIHNvIHdlIG5lZWQgc29tZSBvdGhlciB3YXkgb2YgdGVsbGluZyBhIG5ldyBzZWNvbmRhcnkgY29yZVxuQEAgLTE5OCw2ICYjNDM7MjAwLDEyIEBAIGFzbWxpbmthZ2Ugbm90cmFjZSB2b2lkIHNlY29uZGFyeV9zdGFydF9rZXJuZWwodm9pZClcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gXHUwMDI2aW5pdF9tbTtcbiBcdGNvbnN0IHN0cnVjdCBjcHVfb3BlcmF0aW9ucyAqb3BzO1xuIFx0dW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTtcbiYjNDM7XHR0eXBlZGVmIHZvaWQgKHR0YnJfcmVwbGFjZV9mdW5jKShwaHlzX2FkZHJfdCk7XG4mIzQzO1x0dHRicl9yZXBsYWNlX2Z1bmMgKnJlcGxhY2VfdHRicjtcbiYjNDM7XG4mIzQzO1x0cGh5c19hZGRyX3QgdHRicjEgPSBwaHlzX3RvX3R0YnIodmlydF90b19waHlzKHBlcmNwdV9wZ2RbY3B1XSkpO1xuJiM0MztcdHJlcGxhY2VfdHRiciA9ICh2b2lkICopX19wYV9zeW1ib2woaWRtYXBfY3B1X3JlcGxhY2VfdHRicjEpO1xuJiM0MztcdHJlcGxhY2VfdHRicih0dGJyMSk7XG4gXG4gXHQvKlxuIFx0ICogQWxsIGtlcm5lbCB0aHJlYWRzIHNoYXJlIHRoZSBzYW1lIG1tIGNvbnRleHQ7IGdyYWIgYVxuQEAgLTgxOSw2ICYjNDM7ODI3LDQyIEBAIHZvaWQgX19pbml0IHNtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKVxuIFx0fVxuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19OVU1BXG4mIzQzO2V4dGVybiBpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdO1xuJiM0MztcbiYjNDM7aW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY3B1X3RvX25vZGVfbWFwW2NwdV07XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4mIzQzO3Vuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5O1xuJiM0MztFWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9vZmZzZXQpO1xuJiM0MzsvKiBVc2VkIHRvIGNhbGN1bGF0ZSBwY3B1IGxvY2FsIGFkZHJlc3MsIHRoZSBvZmZzZXQgaXMgc2FtZSBmb3IgYWxsIENQVXMgKi9cbiYjNDM7dW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfbG9jYWxfb2ZmIF9fcm9fYWZ0ZXJfaW5pdDtcbiYjNDM7RVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfbG9jYWxfb2ZmKTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZGVsdGE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGNwdTtcbiYjNDM7XHRpbnQgcmMgPSAtRUlOVkFMO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuJiM0MztcdC8qIFBDUFUgcGFnZSB0YWJsZSBqdXN0IGNhbiBzdXBwb3J0IFBDUFVfRkNfUEFHRSAqL1xuJiM0MztcdHJjID0gcGNwdV9wYWdlX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwgZWFybHlfY3B1X3RvX25vZGUpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRwYW5pYyhcJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwZXJjcHUgYXJlYXMgKGVycj0lZCkuXCYjMzQ7LCByYyk7XG4mIzQzO1xuJiM0MztcdGRlbHRhID0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7XG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiYjNDM7XHRcdF9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IGRlbHRhICYjNDM7IHBjcHVfdW5pdF9vZmZzZXRzW2NwdV07XG4mIzQzO1x0X19wZXJfY3B1X2xvY2FsX29mZiA9ICh1bnNpZ25lZCBsb25nKXBjcHVfbG9jYWxfYmFzZSAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIGNvbnN0IGNoYXIgKmlwaV90eXBlc1tNQVhfSVBJXSBfX3RyYWNlcG9pbnRfc3RyaW5nID0ge1xuIFx0W0lQSV9SRVNDSEVEVUxFXVx0PSBcJiMzNDtSZXNjaGVkdWxpbmcgaW50ZXJydXB0c1wmIzM0OyxcbiBcdFtJUElfQ0FMTF9GVU5DXVx0XHQ9IFwmIzM0O0Z1bmN0aW9uIGNhbGwgaW50ZXJydXB0c1wmIzM0OyxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYyBiL2FyY2gvYXJtNjQvbW0va2FzYW5faW5pdC5jXG5pbmRleCAzZmNhZDk1NmZkZjdjYi4uYThlMjcyYmZlZmUxYTEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmNcbkBAIC02MCwxMyAmIzQzOzYwLDE0IEBAIHN0YXRpYyBwaHlzX2FkZHJfdCBfX2luaXQga2FzYW5fYWxsb2NfcmF3X3BhZ2UoaW50IG5vZGUpXG4gfVxuIFxuIHN0YXRpYyBwdGVfdCAqX19pbml0IGthc2FuX3B0ZV9vZmZzZXQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUsXG4tXHRcdFx0XHQgICAgICBib29sIGVhcmx5KVxuJiM0MztcdFx0XHRcdCAgICAgIGJvb2wgZWFybHksIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdGlmIChwbWRfbm9uZShSRUFEX09OQ0UoKnBtZHApKSkge1xuIFx0XHRwaHlzX2FkZHJfdCBwdGVfcGh5cyA9IGVhcmx5ID9cbiBcdFx0XHRcdF9fcGFfc3ltYm9sKGthc2FuX2Vhcmx5X3NoYWRvd19wdGUpXG4gXHRcdFx0XHRcdDoga2FzYW5fYWxsb2NfemVyb2VkX3BhZ2Uobm9kZSk7XG4gXHRcdF9fcG1kX3BvcHVsYXRlKHBtZHAsIHB0ZV9waHlzLCBQTURfVFlQRV9UQUJMRSk7XG4mIzQzO1x0XHQqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZWFybHkgPyBwdGVfb2Zmc2V0X2tpbWcocG1kcCwgYWRkcilcbkBAIC03NCw0OSAmIzQzOzc1LDUzIEBAIHN0YXRpYyBwdGVfdCAqX19pbml0IGthc2FuX3B0ZV9vZmZzZXQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUsXG4gfVxuIFxuIHN0YXRpYyBwbWRfdCAqX19pbml0IGthc2FuX3BtZF9vZmZzZXQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUsXG4tXHRcdFx0XHQgICAgICBib29sIGVhcmx5KVxuJiM0MztcdFx0XHRcdCAgICAgIGJvb2wgZWFybHksIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdGlmIChwdWRfbm9uZShSRUFEX09OQ0UoKnB1ZHApKSkge1xuIFx0XHRwaHlzX2FkZHJfdCBwbWRfcGh5cyA9IGVhcmx5ID9cbiBcdFx0XHRcdF9fcGFfc3ltYm9sKGthc2FuX2Vhcmx5X3NoYWRvd19wbWQpXG4gXHRcdFx0XHRcdDoga2FzYW5fYWxsb2NfemVyb2VkX3BhZ2Uobm9kZSk7XG4gXHRcdF9fcHVkX3BvcHVsYXRlKHB1ZHAsIHBtZF9waHlzLCBQVURfVFlQRV9UQUJMRSk7XG4mIzQzO1x0XHQqbWFzayB8PSBQR1RCTF9QVURfTU9ESUZJRUQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZWFybHkgPyBwbWRfb2Zmc2V0X2tpbWcocHVkcCwgYWRkcikgOiBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuIH1cbiBcbiBzdGF0aWMgcHVkX3QgKl9faW5pdCBrYXNhbl9wdWRfb2Zmc2V0KHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlLFxuLVx0XHRcdFx0ICAgICAgYm9vbCBlYXJseSlcbiYjNDM7XHRcdFx0XHQgICAgICBib29sIGVhcmx5LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpZiAocDRkX25vbmUoUkVBRF9PTkNFKCpwNGRwKSkpIHtcbiBcdFx0cGh5c19hZGRyX3QgcHVkX3BoeXMgPSBlYXJseSA/XG4gXHRcdFx0XHRfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcHVkKVxuIFx0XHRcdFx0XHQ6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpO1xuIFx0XHRfX3A0ZF9wb3B1bGF0ZShwNGRwLCBwdWRfcGh5cywgUDREX1RZUEVfVEFCTEUpO1xuJiM0MztcdFx0Km1hc2sgfD0gUEdUQkxfUDREX01PRElGSUVEO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVhcmx5ID8gcHVkX29mZnNldF9raW1nKHA0ZHAsIGFkZHIpIDogcHVkX29mZnNldChwNGRwLCBhZGRyKTtcbiB9XG4gXG4gc3RhdGljIHA0ZF90ICpfX2luaXQga2FzYW5fcDRkX29mZnNldChwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcbi1cdFx0XHRcdCAgICAgIGJvb2wgZWFybHkpXG4mIzQzO1x0XHRcdFx0ICAgICAgYm9vbCBlYXJseSwgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0aWYgKHBnZF9ub25lKFJFQURfT05DRSgqcGdkcCkpKSB7XG4gXHRcdHBoeXNfYWRkcl90IHA0ZF9waHlzID0gZWFybHkgP1xuIFx0XHRcdFx0X19wYV9zeW1ib2woa2FzYW5fZWFybHlfc2hhZG93X3A0ZClcbiBcdFx0XHRcdFx0OiBrYXNhbl9hbGxvY196ZXJvZWRfcGFnZShub2RlKTtcbiBcdFx0X19wZ2RfcG9wdWxhdGUocGdkcCwgcDRkX3BoeXMsIFBHRF9UWVBFX1RBQkxFKTtcbiYjNDM7XHRcdCptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcbiBcdH1cbiBcbiBcdHJldHVybiBlYXJseSA/IHA0ZF9vZmZzZXRfa2ltZyhwZ2RwLCBhZGRyKSA6IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wdGVfcG9wdWxhdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSlcbiYjNDM7XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHksXG4mIzQzO1x0XHRcdFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuLVx0cHRlX3QgKnB0ZXAgPSBrYXNhbl9wdGVfb2Zmc2V0KHBtZHAsIGFkZHIsIG5vZGUsIGVhcmx5KTtcbiYjNDM7XHRwdGVfdCAqcHRlcCA9IGthc2FuX3B0ZV9vZmZzZXQocG1kcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xuIFxuIFx0ZG8ge1xuIFx0XHRwaHlzX2FkZHJfdCBwYWdlX3BoeXMgPSBlYXJseSA/XG5AQCAtMTMwLDM4ICYjNDM7MTM1LDQxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wdGVfcG9wdWxhdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BtZF9wb3B1bGF0ZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5KVxuJiM0MztcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSxcbiYjNDM7XHRcdFx0XHQgICAgICBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4tXHRwbWRfdCAqcG1kcCA9IGthc2FuX3BtZF9vZmZzZXQocHVkcCwgYWRkciwgbm9kZSwgZWFybHkpO1xuJiM0MztcdHBtZF90ICpwbWRwID0ga2FzYW5fcG1kX29mZnNldChwdWRwLCBhZGRyLCBub2RlLCBlYXJseSwgbWFzayk7XG4gXG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0a2FzYW5fcHRlX3BvcHVsYXRlKHBtZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5KTtcbiYjNDM7XHRcdGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgbWFzayk7XG4gXHR9IHdoaWxlIChwbWRwJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kIFx1MDAyNlx1MDAyNiBwbWRfbm9uZShSRUFEX09OQ0UoKnBtZHApKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wdWRfcG9wdWxhdGUocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSlcbiYjNDM7XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHksXG4mIzQzO1x0XHRcdFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuLVx0cHVkX3QgKnB1ZHAgPSBrYXNhbl9wdWRfb2Zmc2V0KHA0ZHAsIGFkZHIsIG5vZGUsIGVhcmx5KTtcbiYjNDM7XHRwdWRfdCAqcHVkcCA9IGthc2FuX3B1ZF9vZmZzZXQocDRkcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xuIFxuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGthc2FuX3BtZF9wb3B1bGF0ZShwdWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7XG4mIzQzO1x0XHRrYXNhbl9wbWRfcG9wdWxhdGUocHVkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHksIG1hc2spO1xuIFx0fSB3aGlsZSAocHVkcCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCBcdTAwMjZcdTAwMjYgcHVkX25vbmUoUkVBRF9PTkNFKCpwdWRwKSkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcDRkX3BvcHVsYXRlKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5LFxuJiM0MztcdFx0XHRcdCAgICAgIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbi1cdHA0ZF90ICpwNGRwID0ga2FzYW5fcDRkX29mZnNldChwZ2RwLCBhZGRyLCBub2RlLCBlYXJseSk7XG4mIzQzO1x0cDRkX3QgKnA0ZHAgPSBrYXNhbl9wNGRfb2Zmc2V0KHBnZHAsIGFkZHIsIG5vZGUsIGVhcmx5LCBtYXNrKTtcbiBcbiBcdGRvIHtcbiBcdFx0bmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuLVx0XHRrYXNhbl9wdWRfcG9wdWxhdGUocDRkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHkpO1xuJiM0MztcdFx0a2FzYW5fcHVkX3BvcHVsYXRlKHA0ZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5LCBtYXNrKTtcbiBcdH0gd2hpbGUgKHA0ZHAmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQgXHUwMDI2XHUwMDI2IHA0ZF9ub25lKFJFQURfT05DRSgqcDRkcCkpKTtcbiB9XG4gXG5AQCAtMTcwLDEyICYjNDM7MTc4LDE3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wZ2RfcG9wdWxhdGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4gXHRwZ2RfdCAqcGdkcDtcbiYjNDM7XHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcbiBcbiBcdHBnZHAgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0a2FzYW5fcDRkX3BvcHVsYXRlKHBnZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5KTtcbiYjNDM7XHRcdGthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgXHUwMDI2bWFzayk7XG4gXHR9IHdoaWxlIChwZ2RwJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1hc2sgXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXG4mIzQzO1x0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xuIH1cbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNjRLX1BBR0VTKSB8fCBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDRcbkBAIC0zMTEsNyAmIzQzOzMyNCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9pbml0X3NoYWRvdyh2b2lkKVxuIFxuIFx0bW9kX3NoYWRvd19zdGFydCA9ICh1NjQpa2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKU1PRFVMRVNfVkFERFIpO1xuIFxuLVx0dm1hbGxvY19zaGFkb3dfZW5kID0gKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopVk1BTExPQ19FTkQpO1xuJiM0MztcdHZtYWxsb2Nfc2hhZG93X2VuZCA9ICh1NjQpa2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKUxPQ0FMX1BFUkNQVV9FTkQpO1xuIFxuIFx0LypcbiBcdCAqIFdlIGFyZSBnb2luZyB0byBwZXJmb3JtIHByb3BlciBzZXR1cCBvZiBzaGFkb3cgbWVtb3J5LlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vbW11LmMgYi9hcmNoL2FybTY0L21tL21tdS5jXG5pbmRleCBmMmJlNTAxNDY4Y2U1YS4uZWU0YWIwMzFlYmY4ZDcgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL21tdS5jXG5AQCAtNjcsNiAmIzQzOzY3LDYzIEBAIGxvbmcgX19zZWN0aW9uKFwmIzM0Oy5tbXVvZmYuZGF0YS53cml0ZVwmIzM0OykgX19lYXJseV9jcHVfYm9vdF9zdGF0dXM7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyhzd2FwcGVyX3BnZGlyX2xvY2spO1xuIHN0YXRpYyBERUZJTkVfTVVURVgoZml4bWFwX2xvY2spO1xuIFxuJiM0MztwZ2RfdCAqcGVyY3B1X3BnZFtOUl9DUFVTXSBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO2Jvb2wgcGVyY3B1X3BnZF9zZXR1cF9kb25lIF9fcm9fYWZ0ZXJfaW5pdCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7dm9pZCBfX2luaXQgc2V0dXBfcGVyY3B1X3BnZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuJiM0MztcdFx0dm9pZCAqYWRkcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY3B1ID09IDApIHtcbiYjNDM7XHRcdFx0cGVyY3B1X3BnZFtjcHVdID0gc3dhcHBlcl9wZ19kaXI7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGFkZHIgPSBtZW1ibG9ja19hbGxvYyhQQUdFX1NJWkUsIFBBR0VfU0laRSk7XG4mIzQzO1x0XHRpZiAoIWFkZHIpXG4mIzQzO1x0XHRcdHBhbmljKFwmIzM0O0NhbiYjMzk7dCBhbGxvYyBwZXJjcHUgcGdkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1jcHkoYWRkciwgKHZvaWQgKilzd2FwcGVyX3BnX2RpciwgUEFHRV9TSVpFKTtcbiYjNDM7XHRcdHBlcmNwdV9wZ2RbY3B1XSA9IChwZ2RfdCAqKWFkZHI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkc2IoaXNoc3QpO1xuJiM0MztcbiYjNDM7XHRwZXJjcHVfcGdkX3NldHVwX2RvbmUgPSB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHIsIG5leHQ7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XHRwZ2RfdCAqcGdkcCA9IHBnZF9vZmZzZXRfayhzdGFydCk7XG4mIzQzO1x0cGdkX3QgcGdkO1xuJiM0MztcdHVuc2lnbmVkIGludCBpbmRleCA9IHBnZF9pbmRleChzdGFydCk7XG4mIzQzO1xuJiM0MztcdEJVR19PTihzdGFydCBcdTAwM2UgZW5kKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZXJjcHVfcGdkX3NldHVwX2RvbmUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIERvbiYjMzk7dCBzeW5jIGxvY2FsIHBlcmNwdSBhcmVhIHBhZ2UgdGFibGUgKi9cbiYjNDM7XHRpZiAoc3RhcnQgXHUwMDNlPSBMT0NBTF9QRVJDUFVfU1RBUlQgXHUwMDI2XHUwMDI2IGVuZCBcdTAwM2MgTE9DQUxfUEVSQ1BVX0VORClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YWRkciA9IHN0YXJ0O1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHBnZCA9IFJFQURfT05DRSgqcGdkcCk7XG4mIzQzO1x0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4mIzQzO1x0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4mIzQzO1x0XHRcdGlmIChjcHUgPT0gMClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0c2V0X3BnZChwZXJjcHVfcGdkW2NwdV0gJiM0MzsgaW5kZXgsIHBnZCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSB3aGlsZSAocGdkcCYjNDM7JiM0MzssIGluZGV4JiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIG5vaW5zdHIgc2V0X3N3YXBwZXJfcGdkKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QpXG4ge1xuIFx0cGdkX3QgKmZpeG1hcF9wZ2RwO1xuQEAgLTE2MSw3ICYjNDM7MjE4LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9jbGVhcl9wZ3RhYmxlKHZvaWQgKnRhYmxlKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBpbml0X3B0ZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi1cdFx0ICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90KVxuJiM0MztcdFx0ICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRkbyB7XG4gXHRcdHB0ZV90IG9sZF9wdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuQEAgLTE3MSw2ICYjNDM7MjI4LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wdGUocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdCAqIGFyZSBkZWZlcnJlZCB0byB0aGUgZW5kIG9mIGFsbG9jX2luaXRfY29udF9wdGUoKS5cbiBcdFx0ICovXG4gXHRcdF9fc2V0X3B0ZV9ub3N5bmMocHRlcCwgcGZuX3B0ZShfX3BoeXNfdG9fcGZuKHBoeXMpLCBwcm90KSk7XG4mIzQzO1x0XHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEFmdGVyIHRoZSBQVEUgZW50cnkgaGFzIGJlZW4gcG9wdWxhdGVkIG9uY2UsIHdlXG5AQCAtMTk4LDcgJiM0MzsyNTYsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXMsXG4gXHRcdFx0ICAgICAgIHBncHJvdF90IHByb3QsXG4gXHRcdFx0ICAgICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSxcbi1cdFx0XHQgICAgICAgaW50IGZsYWdzKVxuJiM0MztcdFx0XHQgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4gXHRwbWRfdCBwbWQgPSBSRUFEX09OQ0UoKnBtZHApO1xuQEAgLTIxOSw2ICYjNDM7Mjc3LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcHRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGluaXRfY2xlYXJfcGd0YWJsZShwdGVwKTtcbiBcdFx0cHRlcCAmIzQzOz0gcHRlX2luZGV4KGFkZHIpO1xuIFx0XHRfX3BtZF9wb3B1bGF0ZShwbWRwLCBwdGVfcGh5cywgcG1kdmFsKTtcbiYjNDM7XHRcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcbiBcdH0gZWxzZSB7XG4gXHRcdEJVR19PTihwbWRfYmFkKHBtZCkpO1xuIFx0XHRwdGVwID0gcHRlX3NldF9maXhtYXBfb2Zmc2V0KHBtZHAsIGFkZHIpO1xuQEAgLTIzNSw3ICYjNDM7Mjk0LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcHRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdCAgICAhcHRlX3JhbmdlX2hhc192YWxpZF9ub25jb250KHB0ZXApKVxuIFx0XHRcdF9fcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7XG4gXG4tXHRcdGluaXRfcHRlKHB0ZXAsIGFkZHIsIG5leHQsIHBoeXMsIF9fcHJvdCk7XG4mIzQzO1x0XHRpbml0X3B0ZShwdGVwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsIG1hc2spO1xuIFxuIFx0XHRwdGVwICYjNDM7PSBwdGVfaW5kZXgobmV4dCkgLSBwdGVfaW5kZXgoYWRkcik7XG4gXHRcdHBoeXMgJiM0Mzs9IG5leHQgLSBhZGRyO1xuQEAgLTI1Myw3ICYjNDM7MzEyLDggQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcHRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXG4gc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0ICAgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QsXG4tXHRcdCAgICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksIGludCBmbGFncylcbiYjNDM7XHRcdCAgICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksIGludCBmbGFncyxcbiYjNDM7XHRcdCAgICBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4gXG5AQCAtMjY2LDcgJiM0MzszMjYsMTAgQEAgc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0aWYgKCgoYWRkciB8IG5leHQgfCBwaHlzKSBcdTAwMjYgflBNRF9NQVNLKSA9PSAwIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKGZsYWdzIFx1MDAyNiBOT19CTE9DS19NQVBQSU5HUykgPT0gMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFwbWRfdGFibGUob2xkX3BtZCkpIHtcbi1cdFx0XHRXQVJOX09OKCFwbWRfc2V0X2h1Z2UocG1kcCwgcGh5cywgcHJvdCkpO1xuJiM0MztcdFx0XHRpZiAocG1kX3NldF9odWdlKHBtZHAsIHBoeXMsIHByb3QpKVxuJiM0MztcdFx0XHRcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdFdBUk5fT04oMSk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBBZnRlciB0aGUgUE1EIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZVxuQEAgLTI3OCw3ICYjNDM7MzQxLDcgQEAgc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRcdHJldCA9IGFsbG9jX2luaXRfY29udF9wdGUocG1kcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCxcbi1cdFx0XHRcdFx0XHQgIHBndGFibGVfYWxsb2MsIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMzA2LDcgJiM0MzszNjksNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wbWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXMsXG4gXHRcdFx0ICAgICAgIHBncHJvdF90IHByb3QsXG4gXHRcdFx0ICAgICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSxcbi1cdFx0XHQgICAgICAgaW50IGZsYWdzKVxuJiM0MztcdFx0XHQgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpbnQgcmV0O1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuQEAgLTMzMSw2ICYjNDM7Mzk0LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGluaXRfY2xlYXJfcGd0YWJsZShwbWRwKTtcbiBcdFx0cG1kcCAmIzQzOz0gcG1kX2luZGV4KGFkZHIpO1xuIFx0XHRfX3B1ZF9wb3B1bGF0ZShwdWRwLCBwbWRfcGh5cywgcHVkdmFsKTtcbiYjNDM7XHRcdCptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDtcbiBcdH0gZWxzZSB7XG4gXHRcdEJVR19PTihwdWRfYmFkKHB1ZCkpO1xuIFx0XHRwbWRwID0gcG1kX3NldF9maXhtYXBfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuQEAgLTM0Nyw3ICYjNDM7NDExLDggQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdCAgICAhcG1kX3JhbmdlX2hhc192YWxpZF9ub25jb250KHBtZHApKVxuIFx0XHRcdF9fcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7XG4gXG4tXHRcdHJldCA9IGluaXRfcG1kKHBtZHAsIGFkZHIsIG5leHQsIHBoeXMsIF9fcHJvdCwgcGd0YWJsZV9hbGxvYywgZmxhZ3MpO1xuJiM0MztcdFx0cmV0ID0gaW5pdF9wbWQocG1kcCwgYWRkciwgbmV4dCwgcGh5cywgX19wcm90LCBwZ3RhYmxlX2FsbG9jLCBmbGFncyxcbiYjNDM7XHRcdFx0ICAgICAgIG1hc2spO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuQEAgLTM2NCw3ICYjNDM7NDI5LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gc3RhdGljIGludCBhbGxvY19pbml0X3B1ZChwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHQgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QsXG4gXHRcdFx0ICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksXG4tXHRcdFx0ICBpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdCAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbkBAIC0zODUsNiAmIzQzOzQ1MCw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wdWQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdGluaXRfY2xlYXJfcGd0YWJsZShwdWRwKTtcbiBcdFx0cHVkcCAmIzQzOz0gcHVkX2luZGV4KGFkZHIpO1xuIFx0XHRfX3A0ZF9wb3B1bGF0ZShwNGRwLCBwdWRfcGh5cywgcDRkdmFsKTtcbiYjNDM7XHRcdCptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDtcbiBcdH0gZWxzZSB7XG4gXHRcdEJVR19PTihwNGRfYmFkKHA0ZCkpO1xuIFx0XHRwdWRwID0gcHVkX3NldF9maXhtYXBfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xuQEAgLTQwMiw3ICYjNDM7NDY4LDEwIEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wdWQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdCAgICgoYWRkciB8IG5leHQgfCBwaHlzKSBcdTAwMjYgflBVRF9NQVNLKSA9PSAwIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKGZsYWdzIFx1MDAyNiBOT19CTE9DS19NQVBQSU5HUykgPT0gMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFwdWRfdGFibGUob2xkX3B1ZCkpIHtcbi1cdFx0XHRXQVJOX09OKCFwdWRfc2V0X2h1Z2UocHVkcCwgcGh5cywgcHJvdCkpO1xuJiM0MztcdFx0XHRpZiAocHVkX3NldF9odWdlKHB1ZHAsIHBoeXMsIHByb3QpKVxuJiM0MztcdFx0XHRcdCptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdFdBUk5fT04oMSk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBBZnRlciB0aGUgUFVEIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZVxuQEAgLTQxMiw3ICYjNDM7NDgxLDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X3B1ZChwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRcdFx0XHQgICAgICBSRUFEX09OQ0UocHVkX3ZhbCgqcHVkcCkpKSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cmV0ID0gYWxsb2NfaW5pdF9jb250X3BtZChwdWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBwcm90LFxuLVx0XHRcdFx0XHRcdCAgcGd0YWJsZV9hbGxvYywgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdFx0XHQgIHBndGFibGVfYWxsb2MsIGZsYWdzLCBtYXNrKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0Z290byBvdXQ7XG4gXG5AQCAtNDMxLDcgJiM0Mzs1MDAsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wNGQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0ICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LFxuIFx0XHRcdCAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxuLVx0XHRcdCAgaW50IGZsYWdzKVxuJiM0MztcdFx0XHQgIGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0aW50IHJldDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbkBAIC00NTIsNiAmIzQzOzUyMSw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wNGQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdGluaXRfY2xlYXJfcGd0YWJsZShwNGRwKTtcbiBcdFx0cDRkcCAmIzQzOz0gcDRkX2luZGV4KGFkZHIpO1xuIFx0XHRfX3BnZF9wb3B1bGF0ZShwZ2RwLCBwNGRfcGh5cywgcGdkdmFsKTtcbiYjNDM7XHRcdCptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcbiBcdH0gZWxzZSB7XG4gXHRcdEJVR19PTihwZ2RfYmFkKHBnZCkpO1xuIFx0XHRwNGRwID0gcDRkX3NldF9maXhtYXBfb2Zmc2V0KHBnZHAsIGFkZHIpO1xuQEAgLTQ2Myw3ICYjNDM7NTMzLDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X3A0ZChwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0bmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuIFxuIFx0XHRyZXQgPSBhbGxvY19pbml0X3B1ZChwNGRwLCBhZGRyLCBuZXh0LCBwaHlzLCBwcm90LFxuLVx0XHRcdFx0ICAgICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XG4mIzQzO1x0XHRcdFx0ICAgICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG5AQCAtNDgzLDcgJiM0Mzs1NTMsNyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nX2xvY2tlZChwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsXG4gXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyB2aXJ0LCBwaHlzX2FkZHJfdCBzaXplLFxuIFx0XHRcdFx0ICAgICAgIHBncHJvdF90IHByb3QsXG4gXHRcdFx0XHQgICAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxuLVx0XHRcdFx0ICAgICAgIGludCBmbGFncylcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpbnQgcmV0O1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyLCBlbmQsIG5leHQ7XG5AQCAtNTAzLDcgJiM0Mzs1NzMsNyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nX2xvY2tlZChwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsXG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0cmV0ID0gYWxsb2NfaW5pdF9wNGQocGdkcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCwgcGd0YWJsZV9hbGxvYyxcbi1cdFx0XHRcdCAgICAgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdCAgICAgZmxhZ3MsIG1hc2spO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdHBoeXMgJiM0Mzs9IG5leHQgLSBhZGRyO1xuQEAgLTUxNiwxMyAmIzQzOzU4NiwxMyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHBnZF90ICpwZ2RpciwgcGh5c19hZGRyX3QgcGh5cyxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgdmlydCwgcGh5c19hZGRyX3Qgc2l6ZSxcbiBcdFx0XHRcdHBncHJvdF90IHByb3QsXG4gXHRcdFx0XHRwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksXG4tXHRcdFx0XHRpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdFx0aW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpbnQgcmV0O1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZmaXhtYXBfbG9jayk7XG4gXHRyZXQgPSBfX2NyZWF0ZV9wZ2RfbWFwcGluZ19sb2NrZWQocGdkaXIsIHBoeXMsIHZpcnQsIHNpemUsIHByb3QsXG4tXHRcdFx0XHRcdCAgcGd0YWJsZV9hbGxvYywgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2Zml4bWFwX2xvY2spO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC01MzUsOSAmIzQzOzYwNSwxMCBAQCBzdGF0aWMgdm9pZCBlYXJseV9jcmVhdGVfcGdkX21hcHBpbmcocGdkX3QgKnBnZGlyLCBwaHlzX2FkZHJfdCBwaHlzLFxuIFx0XHRcdFx0ICAgICBpbnQgZmxhZ3MpXG4ge1xuIFx0aW50IHJldDtcbiYjNDM7XHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiBcbiBcdHJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHBnZGlyLCBwaHlzLCB2aXJ0LCBzaXplLCBwcm90LCBwZ3RhYmxlX2FsbG9jLFxuLVx0XHRcdFx0ICAgZmxhZ3MpO1xuJiM0MztcdFx0XHRcdCAgIGZsYWdzLCBcdTAwMjZtYXNrKTtcbiBcdGlmIChyZXQpXG4gXHRcdHBhbmljKFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgcGFnZSB0YWJsZXNcXG5cJiMzNDspO1xuIH1cbkBAIC0xMDA5LDYgJiM0MzsxMDgwLDI5IEBAIHZvaWQgX19pbml0IGxpbmVhcl9tYXBfbWF5YmVfc3BsaXRfdG9fcHRlcyh2b2lkKVxuIFx0fVxuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4mIzQzO3ZvaWQgX19pbml0IG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxuJiM0MztcdFx0XHQgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiYjNDM7XG4mIzQzO1x0YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cGh5c19hZGRyX3QgcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSk7XG4mIzQzO1x0XHRyZXQgPSBfX2NyZWF0ZV9wZ2RfbWFwcGluZyhwZXJjcHVfcGdkW2NwdV0sIHBoeXMsIHZpcnQsIFBBR0VfU0laRSwgUEFHRV9LRVJORUwsXG4mIzQzO1x0XHRcdFx0XHQgICBlYXJseV9wZ3RhYmxlX2FsbG9jLCBOT19FWEVDX01BUFBJTkdTLCBcdTAwMjZtYXNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHBhbmljKFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgbG9jYWwgcGVyY3B1IGZpcnN0IGNodW5rXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHR2aXJ0ICYjNDM7PSBQQUdFX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLypcbiAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgdG8gbW9kaWZ5IGV4aXN0aW5nIHRhYmxlIGVudHJpZXMsXG4gICogd2l0aG91dCBhbGxvY2F0aW5nIG5ldyBsZXZlbHMgb2YgdGFibGUuIE5vdGUgdGhhdCB0aGlzIHBlcm1pdHMgdGhlXG5AQCAtMTI3OSw2ICYjNDM7MTM3Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fa3B0aV9pbnN0YWxsX25nX21hcHBpbmdzKHZvaWQgKl9fdW51c2VkKVxuIFxuIFx0aWYgKCFjcHUpIHtcbiBcdFx0aW50IHJldDtcbiYjNDM7XHRcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xuIFxuIFx0XHRhbGxvYyA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQyB8IF9fR0ZQX1pFUk8sIG9yZGVyKTtcbiBcdFx0a3B0aV9uZ190ZW1wX3BnZCA9IChwZ2RfdCAqKShhbGxvYyAmIzQzOyAobGV2ZWxzIC0gMSkgKiBQQUdFX1NJWkUpO1xuQEAgLTEzMDIsNyAmIzQzOzEzOTcsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX2twdGlfaW5zdGFsbF9uZ19tYXBwaW5ncyh2b2lkICpfX3VudXNlZClcbiBcdFx0Ly9cbiBcdFx0cmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmdfbG9ja2VkKGtwdGlfbmdfdGVtcF9wZ2QsIF9fcGEoYWxsb2MpLFxuIFx0XHRcdFx0XHRcdCAgS1BUSV9OR19URU1QX1ZBLCBQQUdFX1NJWkUsIFBBR0VfS0VSTkVMLFxuLVx0XHRcdFx0XHRcdCAga3B0aV9uZ19wZ2RfYWxsb2MsIDApO1xuJiM0MztcdFx0XHRcdFx0XHQgIGtwdGlfbmdfcGdkX2FsbG9jLCAwLCBcdTAwMjZtYXNrKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRwYW5pYyhcJiMzNDtGYWlsZWQgdG8gY3JlYXRlIHBhZ2UgdGFibGVzXFxuXCYjMzQ7KTtcbiBcdH1cbkBAIC0xNjA4LDcgJiM0MzsxNzAzLDcgQEAgc3RhdGljIHZvaWQgdW5tYXBfaG90cGx1Z19yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFxuIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHRlX3RhYmxlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgZmxvb3IsXG4tXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBjZWlsaW5nKVxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcsIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdHB0ZV90ICpwdGVwLCBwdGU7XG4gXHR1bnNpZ25lZCBsb25nIGksIHN0YXJ0ID0gYWRkcjtcbkBAIC0xNjI0LDYgJiM0MzsxNzE5LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0V0FSTl9PTighcHRlX25vbmUocHRlKSk7XG4gXHR9IHdoaWxlIChhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGFkZHIgXHUwMDNjIGVuZCk7XG4gXG4mIzQzO1x0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xuIFx0aWYgKCFwZ3RhYmxlX3JhbmdlX2FsaWduZWQoc3RhcnQsIGVuZCwgZmxvb3IsIGNlaWxpbmcsIFBNRF9NQVNLKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTE2MzksMTMgJiM0MzsxNzM1LDE0IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHRlX3RhYmxlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHR9XG4gXG4gXHRwbWRfY2xlYXIocG1kcCk7XG4mIzQzO1x0Km1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEO1xuIFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoc3RhcnQpO1xuIFx0ZnJlZV9ob3RwbHVnX3BndGFibGVfcGFnZSh2aXJ0X3RvX3BhZ2UocHRlcCkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGZsb29yLFxuLVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZylcbiYjNDM7XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBjZWlsaW5nLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRwbWRfdCAqcG1kcCwgcG1kO1xuIFx0dW5zaWduZWQgbG9uZyBpLCBuZXh0LCBzdGFydCA9IGFkZHI7XG5AQCAtMTY1OCw3ICYjNDM7MTc1NSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFdBUk5fT04oIXBtZF9wcmVzZW50KHBtZCkgfHwgIXBtZF90YWJsZShwbWQpKTtcbi1cdFx0ZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcpO1xuJiM0MztcdFx0ZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIG1hc2spO1xuIFx0fSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgXHUwMDNjIGVuZCk7XG4gXG4gXHRpZiAoQ09ORklHX1BHVEFCTEVfTEVWRUxTIFx1MDAzYz0gMilcbkBAIC0xNjc5LDEzICYjNDM7MTc3NiwxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0fVxuIFxuIFx0cHVkX2NsZWFyKHB1ZHApO1xuJiM0MztcdCptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKHN0YXJ0KTtcbiBcdGZyZWVfaG90cGx1Z19wZ3RhYmxlX3BhZ2UodmlydF90b19wYWdlKHBtZHApKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcbi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcpXG4mIzQzO1x0XHRcdFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0cHVkX3QgKnB1ZHAsIHB1ZDtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgbmV4dCwgc3RhcnQgPSBhZGRyO1xuQEAgLTE2OTgsNyAmIzQzOzE3OTYsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B1ZF90YWJsZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRXQVJOX09OKCFwdWRfcHJlc2VudChwdWQpIHx8ICFwdWRfdGFibGUocHVkKSk7XG4tXHRcdGZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTtcbiYjNDM7XHRcdGZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nLCBtYXNrKTtcbiBcdH0gd2hpbGUgKGFkZHIgPSBuZXh0LCBhZGRyIFx1MDAzYyBlbmQpO1xuIFxuIFx0aWYgKCFwZ3RhYmxlX2w0X2VuYWJsZWQoKSlcbkBAIC0xNzE5LDEzICYjNDM7MTgxNywxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B1ZF90YWJsZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0fVxuIFxuIFx0cDRkX2NsZWFyKHA0ZHApO1xuJiM0MztcdCptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKHN0YXJ0KTtcbiBcdGZyZWVfaG90cGx1Z19wZ3RhYmxlX3BhZ2UodmlydF90b19wYWdlKHB1ZHApKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wNGRfdGFibGUocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcbi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcpXG4mIzQzO1x0XHRcdFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0cDRkX3QgKnA0ZHAsIHA0ZDtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgbmV4dCwgc3RhcnQgPSBhZGRyO1xuQEAgLTE3MzgsNyAmIzQzOzE4MzcsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3A0ZF90YWJsZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRXQVJOX09OKCFwNGRfcHJlc2VudChwNGQpKTtcbi1cdFx0ZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcpO1xuJiM0MztcdFx0ZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIG1hc2spO1xuIFx0fSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgXHUwMDNjIGVuZCk7XG4gXG4gXHRpZiAoIXBndGFibGVfbDVfZW5hYmxlZCgpKVxuQEAgLTE3NTksNiAmIzQzOzE4NTgsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3A0ZF90YWJsZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0fVxuIFxuIFx0cGdkX2NsZWFyKHBnZHApO1xuJiM0MztcdCptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKHN0YXJ0KTtcbiBcdGZyZWVfaG90cGx1Z19wZ3RhYmxlX3BhZ2UodmlydF90b19wYWdlKHA0ZHApKTtcbiB9XG5AQCAtMTc2OCw2ICYjNDM7MTg2OCw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfdGFibGVzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuIFx0cGdkX3QgKnBnZHAsIHBnZDtcbiYjNDM7XHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcbiBcbiBcdGRvIHtcbiBcdFx0bmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuQEAgLTE3NzcsOCAmIzQzOzE4NzksMTEgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV90YWJsZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0V0FSTl9PTighcGdkX3ByZXNlbnQocGdkKSk7XG4tXHRcdGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTtcbiYjNDM7XHRcdGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nLCBcdTAwMjZtYXNrKTtcbiBcdH0gd2hpbGUgKGFkZHIgPSBuZXh0LCBhZGRyIFx1MDAzYyBlbmQpO1xuJiM0MztcbiYjNDM7XHRpZiAobWFzayBcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcbiYjNDM7XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIGVuZCk7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTE5ODYsNiAmIzQzOzIwOTEsNyBAQCBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXHRcdCAgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxuIHtcbiBcdGludCByZXQsIGZsYWdzID0gTk9fRVhFQ19NQVBQSU5HUztcbiYjNDM7XHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiBcbiBcdFZNX0JVR19PTighbWhwX3JhbmdlX2FsbG93ZWQoc3RhcnQsIHNpemUsIHRydWUpKTtcbiBcbkBAIC0xOTk0LDEwICYjNDM7MjEwMCwxMyBAQCBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4gXG4gXHRyZXQgPSBfX2NyZWF0ZV9wZ2RfbWFwcGluZyhzd2FwcGVyX3BnX2Rpciwgc3RhcnQsIF9fcGh5c190b192aXJ0KHN0YXJ0KSxcbiBcdFx0XHRcdCAgIHNpemUsIHBhcmFtcy1cdTAwM2VwZ3Byb3QsIHBnZF9wZ3RhYmxlX2FsbG9jX2luaXRfbW0sXG4tXHRcdFx0XHQgICBmbGFncyk7XG4mIzQzO1x0XHRcdFx0ICAgZmxhZ3MsIFx1MDAyNm1hc2spO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnI7XG4gXG4mIzQzO1x0aWYgKG1hc2sgXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXG4mIzQzO1x0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBzdGFydCAmIzQzOyBzaXplKTtcbiYjNDM7XG4gXHRtZW1ibG9ja19jbGVhcl9ub21hcChzdGFydCwgc2l6ZSk7XG4gXG4gXHRyZXQgPSBfX2FkZF9wYWdlcyhuaWQsIHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uZGQyOTMzMTk4MjNlM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMzg5LDYgJiM0MzszODksMTAgQEAgc3RhdGljIGludCBfX2luaXQgcHRkdW1wX2luaXQodm9pZClcbiBcdFx0eyBNT0RVTEVTX0VORCxcdFx0XCYjMzQ7TW9kdWxlcyBlbmRcJiMzNDsgfSxcbiBcdFx0eyBWTUFMTE9DX1NUQVJULFx0XCYjMzQ7dm1hbGxvYygpIGFyZWFcJiMzNDsgfSxcbiBcdFx0eyBWTUFMTE9DX0VORCxcdFx0XCYjMzQ7dm1hbGxvYygpIGVuZFwmIzM0OyB9LFxuJiM0MztcdFx0eyBQRVJDUFVfU1RBUlQsXHRcdFwmIzM0O0dsb2JhbCBwZXJjcHUgc3RhcnRcJiMzNDsgfSxcbiYjNDM7XHRcdHsgUEVSQ1BVX0VORCxcdFx0XCYjMzQ7R2xvYmFsIHBlcmNwdSBlbmRcJiMzNDsgfSxcbiYjNDM7XHRcdHsgTE9DQUxfUEVSQ1BVX1NUQVJULFx0XCYjMzQ7TG9jYWwgcGVyY3B1IHN0YXJ0XCYjMzQ7IH0sXG4mIzQzO1x0XHR7IExPQ0FMX1BFUkNQVV9FTkQsXHRcJiMzNDtMb2NhbCBwZXJjcHUgZW5kXCYjMzQ7IH0sXG4gXHRcdHsgdm1lbW1hcF9zdGFydCxcdFwmIzM0O3ZtZW1tYXAgc3RhcnRcJiMzNDsgfSxcbiBcdFx0eyBWTUVNTUFQX0VORCxcdFx0XCYjMzQ7dm1lbW1hcCBlbmRcJiMzNDsgfSxcbiBcdFx0eyBQQ0lfSU9fU1RBUlQsXHRcdFwmIzM0O1BDSSBJL08gc3RhcnRcJiMzNDsgfSxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuYyBiL2FyY2gvcmlzY3Yva2VybmVsL3NtcC5jXG5pbmRleCBmYTY2ZjljOTdkNzQ4ZC4uZDQyMGZmOWRjZjRmYzggMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rZXJuZWwvc21wLmNcbkBAIC0zNjQsMyAmIzQzOzM2NCw1NCBAQCB2b2lkIGtnZGJfcm91bmR1cF9jcHVzKHZvaWQpXG4gXHR9XG4gfVxuICNlbmRpZlxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxuJiM0MztleHRlcm4gaW50IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXTtcbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5O1xuJiM0MztFWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9vZmZzZXQpO1xuJiM0MztcbiYjNDM7aW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY3B1X3RvX25vZGVfbWFwW2NwdV07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IHBjcHVfY3B1X2Rpc3RhbmNlKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbm9kZV9kaXN0YW5jZShlYXJseV9jcHVfdG9fbm9kZShmcm9tKSwgZWFybHlfY3B1X3RvX25vZGUodG8pKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkZWx0YTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3B1O1xuJiM0MztcdGludCByYyA9IC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChwY3B1X2Nob3Nlbl9mYyAhPSBQQ1BVX0ZDX1BBR0UpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBbHdheXMgcmVzZXJ2ZSBhcmVhIGZvciBtb2R1bGUgcGVyY3B1IHZhcmlhYmxlcy4gIFRoYXQmIzM5O3NcbiYjNDM7XHRcdCAqIHdoYXQgdGhlIGxlZ2FjeSBhbGxvY2F0b3IgZGlkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyYyA9IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLFxuJiM0MztcdFx0XHRcdFx0ICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUsIFBBR0VfU0laRSxcbiYjNDM7XHRcdFx0XHRcdCAgICBwY3B1X2NwdV9kaXN0YW5jZSxcbiYjNDM7XHRcdFx0XHRcdCAgICBlYXJseV9jcHVfdG9fbm9kZSk7XG4mIzQzOyNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbiYjNDM7XHRcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBwY3B1X2ZjX25hbWVzW3BjcHVfY2hvc2VuX2ZjXSwgcmMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKVxuJiM0MztcdFx0cmMgPSBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLCBlYXJseV9jcHVfdG9fbm9kZSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdHBhbmljKFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHBlcmNwdSBhcmVhcyAoZXJyPSVkKS5cJiMzNDssIHJjKTtcbiYjNDM7XG4mIzQzO1x0ZGVsdGEgPSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkciAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDtcbiYjNDM7XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxuJiM0MztcdFx0X19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgJiM0MzsgcGNwdV91bml0X29mZnNldHNbY3B1XTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMgYi9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmNcbmluZGV4IGM5OWYyYWIxMDVlNWI3Li5iM2I5MWNlZWQ2YTkwZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jXG5AQCAtMTYsNyAmIzQzOzE2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2VjdGlvbnMuaFx1MDAzZVxuIFxuLXN0YXRpYyBpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IE5VTUFfTk9fTk9ERSB9O1xuJiM0MztpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IE5VTUFfTk9fTk9ERSB9O1xuIFxuIGJvb2wgbnVtYV9vZmY7XG4gXG5AQCAtMTQwLDU1ICYjNDM7MTQwLDYgQEAgdm9pZCBfX2luaXQgZWFybHlfbWFwX2NwdV90b19ub2RlKHVuc2lnbmVkIGludCBjcHUsIGludCBuaWQpXG4gXHRcdHNldF9jcHVfbnVtYV9ub2RlKGNwdSwgbmlkKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxuLXVuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5O1xuLUVYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7XG4tXG4taW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpXG4te1xuLVx0cmV0dXJuIGNwdV90b19ub2RlX21hcFtjcHVdO1xuLX1cbi1cbi1zdGF0aWMgaW50IF9faW5pdCBwY3B1X2NwdV9kaXN0YW5jZSh1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvKVxuLXtcbi1cdHJldHVybiBub2RlX2Rpc3RhbmNlKGVhcmx5X2NwdV90b19ub2RlKGZyb20pLCBlYXJseV9jcHVfdG9fbm9kZSh0bykpO1xuLX1cbi1cbi12b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBkZWx0YTtcbi1cdHVuc2lnbmVkIGludCBjcHU7XG4tXHRpbnQgcmMgPSAtRUlOVkFMO1xuLVxuLVx0aWYgKHBjcHVfY2hvc2VuX2ZjICE9IFBDUFVfRkNfUEFHRSkge1xuLVx0XHQvKlxuLVx0XHQgKiBBbHdheXMgcmVzZXJ2ZSBhcmVhIGZvciBtb2R1bGUgcGVyY3B1IHZhcmlhYmxlcy4gIFRoYXQmIzM5O3Ncbi1cdFx0ICogd2hhdCB0aGUgbGVnYWN5IGFsbG9jYXRvciBkaWQuXG4tXHRcdCAqL1xuLVx0XHRyYyA9IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLFxuLVx0XHRcdFx0XHQgICAgUEVSQ1BVX0RZTkFNSUNfUkVTRVJWRSwgUEFHRV9TSVpFLFxuLVx0XHRcdFx0XHQgICAgcGNwdV9jcHVfZGlzdGFuY2UsXG4tXHRcdFx0XHRcdCAgICBlYXJseV9jcHVfdG9fbm9kZSk7XG4tI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuLVx0XHRpZiAocmMgXHUwMDNjIDApXG4tXHRcdFx0cHJfd2FybihcJiMzNDtQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxcblwmIzM0Oyxcbi1cdFx0XHRcdCAgIHBjcHVfZmNfbmFtZXNbcGNwdV9jaG9zZW5fZmNdLCByYyk7XG4tI2VuZGlmXG4tXHR9XG4tXG4tI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuLVx0aWYgKHJjIFx1MDAzYyAwKVxuLVx0XHRyYyA9IHBjcHVfcGFnZV9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsIGVhcmx5X2NwdV90b19ub2RlKTtcbi0jZW5kaWZcbi1cdGlmIChyYyBcdTAwM2MgMClcbi1cdFx0cGFuaWMoXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgcGVyY3B1IGFyZWFzIChlcnI9JWQpLlwmIzM0OywgcmMpO1xuLVxuLVx0ZGVsdGEgPSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkciAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDtcbi1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXG4tXHRcdF9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IGRlbHRhICYjNDM7IHBjcHVfdW5pdF9vZmZzZXRzW2NwdV07XG4tfVxuLSNlbmRpZlxuLVxuIC8qXG4gICogSW5pdGlhbGl6ZSBOT0RFX0RBVEEgZm9yIGEgbm9kZSBvbiB0aGUgbG9jYWwgbWVtb3J5XG4gICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uYzhjMzgwMGZiZDlmYTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTE4NTgsNiAmIzQzOzE4NTgsMTcgQEAgdW5zaWduZWQgbG9uZyB2bWFsbG9jX3RvX3Bmbihjb25zdCB2b2lkICphZGRyKTtcbiAjaWZkZWYgQ09ORklHX01NVVxuIGV4dGVybiBib29sIGlzX3ZtYWxsb2NfYWRkcihjb25zdCB2b2lkICp4KTtcbiBleHRlcm4gaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCk7XG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGVyY3B1X2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGFkZHIgXHUwMDNlPSBQRVJDUFVfU1RBUlQgXHUwMDI2XHUwMDI2IGFkZHIgXHUwMDNjIExPQ0FMX1BFUkNQVV9FTkQ7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3BlcmNwdV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc192bWFsbG9jX2FkZHIoY29uc3Qgdm9pZCAqeClcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmhcbmluZGV4IDRmMzZiODU4NTk5NWM1Li41YTI3MDMxZGZmMWE1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmhcbkBAIC03NSw2ICYjNDM7NzUsOCBAQFxuIFxuIGV4dGVybiB2b2lkICpwY3B1X2Jhc2VfYWRkcjtcbiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyAqcGNwdV91bml0X29mZnNldHM7XG4mIzQzOy8qIHBlcmNwdSBsb2NhbCBtYXBwaW5nIGJhc2UgKi9cbiYjNDM7ZXh0ZXJuIHZvaWQgKnBjcHVfbG9jYWxfYmFzZTtcbiBcbiBzdHJ1Y3QgcGNwdV9ncm91cF9pbmZvIHtcbiBcdGludFx0XHRcdG5yX3VuaXRzO1x0LyogYWxpZ25lZCAjIG9mIHVuaXRzICovXG5AQCAtMTE0LDcgJiM0MzsxMTYsNyBAQCBleHRlcm4gc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBwY3B1X2FsbG9jX2FsbG9jX2luZm8oaW50IG5yX2dyb3VwcyxcbiBleHRlcm4gdm9pZCBfX2luaXQgcGNwdV9mcmVlX2FsbG9jX2luZm8oc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWkpO1xuIFxuIGV4dGVybiB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLFxuLVx0XHRcdFx0XHQgdm9pZCAqYmFzZV9hZGRyKTtcbiYjNDM7XHRcdFx0XHRcdCB2b2lkICpiYXNlX2FkZHIsIHZvaWQgKmxvY2FsX2Jhc2UpO1xuIFxuIGV4dGVybiBpbnQgX19pbml0IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHNpemVfdCBkeW5fc2l6ZSxcbiBcdFx0XHRcdHNpemVfdCBhdG9tX3NpemUsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxuaW5kZXggOTE3NGZhNTliYmM1NGQuLjA2MmM2NGE1ZDRiZDBjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oXG5AQCAtMjYsNCAmIzQzOzI2LDE3IEBAXG4gXHRcdFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTtcdFx0XFxcbiBcdH0gd2hpbGUgKDApXG4gXG4mIzQzOyNpZm5kZWYgQ09ORklHX0FSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXG4mIzQzOyNkZWZpbmUgcHVkX3BvcHVsYXRlX3N5bmMoYWRkciwgcHVkLCBwbWQpXHRcdFx0XHRcXFxuJiM0MztcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHB1ZF9wb3B1bGF0ZShcdTAwMjZpbml0X21tLCBwdWQsIHBtZCk7XHRcdFx0XFxcbiYjNDM7XHR9IHdoaWxlICgwKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZm5kZWYgQ09ORklHX0FSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DXG4mIzQzOyNkZWZpbmUgcG1kX3BvcHVsYXRlX3N5bmMoYWRkciwgcG1kLCBwdGUpXHRcdFx0XHRcXFxuJiM0MztcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSwgcG1kLCBwdGUpO1x0XHRcXFxuJiM0MztcdH0gd2hpbGUgKDApXG4mIzQzOyNlbmRpZlxuICNlbmRpZiAvKiBfTElOVVhfUEdBTExPQ19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaFxuaW5kZXggZDg3ZGM3Zjc3ZjRlOGEuLmRhZjk5NjVhMTExZDFmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oXG5AQCAtMzEzLDYgJiM0MzszMTMsOSBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbiBcdFx0XHRcdCAgICAgc2l6ZV90IGFsaWduKTtcbiBcbiB2b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKTtcbiYjNDM7c3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgdW5pdF9zaXplLCBzaXplX3QgYWxpZ24pO1xuJiM0MztcbiAjIGVsc2VcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2bV9zdHJ1Y3QgKipcbiBwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLFxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uZTE5MTBjMzMyNjM4NTEgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnXG5AQCAtMTA2MSw2ICYjNDM7MTA2MSw5IEBAIGNvbmZpZyBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuIGNvbmZpZyBVU0VfUEVSQ1BVX05VTUFfTk9ERV9JRFxuIFx0Ym9vbFxuIFxuJiM0Mztjb25maWcgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztcdGJvb2xcbiYjNDM7XG4gY29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4gXHRib29sXG4gXG5AQCAtMTUwOSw2ICYjNDM7MTUxMiwxMiBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXG4gXG4gXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gXG4mIzQzO2NvbmZpZyBBUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQ1xuJiM0MztcdGJvb2xcbiYjNDM7XG4mIzQzO2NvbmZpZyBBUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQ1xuJiM0MztcdGJvb2xcbiYjNDM7XG4gc291cmNlIFwmIzM0O21tL2RhbW9uL0tjb25maWdcJiMzNDtcbiBcbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li45ZDlmMDhjYjI2YTExNCAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0xNTUyLDEwICYjNDM7MTU1MiwxMyBAQCB2b2lkIGNsZWFyX3ZtX3VuaW5pdGlhbGl6ZWRfZmxhZyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSk7XG4gaW50IF9fbXVzdF9jaGVjayBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9zaGlmdCk7XG4mIzQzO2ludCBfX211c3RfY2hlY2sgdm1hcF9yYW5nZV9ub2ZsdXNoKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgcGh5c19hZGRyX3QgcGh5c19hZGRyLFxuJiM0MztcdFx0XHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpO1xuIFxuIHZvaWQgdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuIFxuLXZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG4mIzQzO3ZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX3NpbmdsZV90aHJlYWRlZF9wcml2YXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9rbXNhbi9ob29rcy5jIGIvbW0va21zYW4vaG9va3MuY1xuaW5kZXggOGYyMmQxZjIyOTgxM2YuLmUyYTBmYWYzNDRiOTFiIDEwMDY0NFxuLS0tIGEvbW0va21zYW4vaG9va3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va21zYW4vaG9va3MuY1xuQEAgLTEzNSw4ICYjNDM7MTM1LDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdm1hbGxvY19vcmlnaW4odW5zaWduZWQgbG9uZyBhZGRyKVxuIFxuIHZvaWQga21zYW5fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4ge1xuLVx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh2bWFsbG9jX3NoYWRvdyhzdGFydCksIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xuLVx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh2bWFsbG9jX29yaWdpbihzdGFydCksIHZtYWxsb2Nfb3JpZ2luKGVuZCkpO1xuJiM0MztcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHZtYWxsb2Nfc2hhZG93KHN0YXJ0KSwgdm1hbGxvY19zaGFkb3coZW5kKSk7XG4mIzQzO1x0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgdm1hbGxvY19vcmlnaW4oc3RhcnQpLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcbiBcdGZsdXNoX2NhY2hlX3ZtYXAodm1hbGxvY19zaGFkb3coc3RhcnQpLCB2bWFsbG9jX3NoYWRvdyhlbmQpKTtcbiBcdGZsdXNoX2NhY2hlX3ZtYXAodm1hbGxvY19vcmlnaW4oc3RhcnQpLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcbiB9XG5AQCAtMTgxLDcgJiM0MzsxODEsNyBAQCBpbnQga21zYW5faW9yZW1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdHZtYWxsb2Nfb3JpZ2luKHN0YXJ0ICYjNDM7IG9mZiAmIzQzOyBQQUdFX1NJWkUpLCBwcm90LCBcdTAwMjZvcmlnaW4sXG4gXHRcdFx0UEFHRV9TSElGVCk7XG4gXHRcdGlmIChtYXBwZWQpIHtcbi1cdFx0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKFxuJiM0MztcdFx0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLFxuIFx0XHRcdFx0dm1hbGxvY19zaGFkb3coc3RhcnQgJiM0Mzsgb2ZmKSxcbiBcdFx0XHRcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0ICYjNDM7IG9mZiAmIzQzOyBQQUdFX1NJWkUpKTtcbiBcdFx0XHRlcnIgPSBtYXBwZWQ7XG5AQCAtMjAzLDEwICYjNDM7MjAzLDEwIEBAIGludCBrbXNhbl9pb3JlbWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0X19mcmVlX3BhZ2VzKHNoYWRvdywgMSk7XG4gXHRcdGlmIChvcmlnaW4pXG4gXHRcdFx0X19mcmVlX3BhZ2VzKG9yaWdpbiwgMSk7XG4tXHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goXG4mIzQzO1x0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLFxuIFx0XHRcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0KSxcbiBcdFx0XHR2bWFsbG9jX3NoYWRvdyhzdGFydCAmIzQzOyBjbGVhbiAqIFBBR0VfU0laRSkpO1xuLVx0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKFxuJiM0MztcdFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCxcbiBcdFx0XHR2bWFsbG9jX29yaWdpbihzdGFydCksXG4gXHRcdFx0dm1hbGxvY19vcmlnaW4oc3RhcnQgJiM0MzsgY2xlYW4gKiBQQUdFX1NJWkUpKTtcbiBcdH1cbkBAIC0yMzMsOCAmIzQzOzIzMyw4IEBAIHZvaWQga21zYW5faW91bm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFx0ICAgICBpJiM0MzsmIzQzOywgdl9zaGFkb3cgJiM0Mzs9IFBBR0VfU0laRSwgdl9vcmlnaW4gJiM0Mzs9IFBBR0VfU0laRSkge1xuIFx0XHRzaGFkb3cgPSBrbXNhbl92bWFsbG9jX3RvX3BhZ2Vfb3JfbnVsbCgodm9pZCAqKXZfc2hhZG93KTtcbiBcdFx0b3JpZ2luID0ga21zYW5fdm1hbGxvY190b19wYWdlX29yX251bGwoKHZvaWQgKil2X29yaWdpbik7XG4tXHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2godl9zaGFkb3csIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xuLVx0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHZfb3JpZ2luLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcbiYjNDM7XHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHZfc2hhZG93LCB2bWFsbG9jX3NoYWRvdyhlbmQpKTtcbiYjNDM7XHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHZfb3JpZ2luLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcbiBcdFx0aWYgKHNoYWRvdylcbiBcdFx0XHRfX2ZyZWVfcGFnZXMoc2hhZG93LCAxKTtcbiBcdFx0aWYgKG9yaWdpbilcbmRpZmYgLS1naXQgYS9tbS9wZXJjcHUtaW50ZXJuYWwuaCBiL21tL3BlcmNwdS1pbnRlcm5hbC5oXG5pbmRleCA4Y2JlMDM5YmY4NDdhYy4uNGQ0NjEzMDUyNDNiZjAgMTAwNjQ0XG4tLS0gYS9tbS9wZXJjcHUtaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGVyY3B1LWludGVybmFsLmhcbkBAIC02MywxMSAmIzQzOzYzLDE0IEBAIHN0cnVjdCBwY3B1X2NodW5rIHtcbiBcdCAqIGNodW5rX21kLlxuIFx0ICovXG4gXHR2b2lkXHRcdFx0KmJhc2VfYWRkciBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuJiM0MztcdC8qIHBlcmNwdSBsb2NhbCBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNodW5rICovXG4mIzQzO1x0dm9pZCAgICAgICAgICAgICAgICAgICAgKmxvY2FsX2Jhc2U7XG4gXG4gXHR1bnNpZ25lZCBsb25nXHRcdCphbGxvY19tYXA7XHQvKiBhbGxvY2F0aW9uIG1hcCAqL1xuIFx0c3RydWN0IHBjcHVfYmxvY2tfbWRcdCptZF9ibG9ja3M7XHQvKiBtZXRhZGF0YSBibG9ja3MgKi9cbiBcbiBcdHZvaWRcdFx0XHQqZGF0YTtcdFx0LyogY2h1bmsgZGF0YSAqL1xuJiM0MztcdHZvaWRcdFx0XHQqbG9jYWxfZGF0YTtcdC8qIGNodW5rIGxvY2FsIHZtICovXG4gXHRib29sXHRcdFx0aW1tdXRhYmxlO1x0Lyogbm8gW2RlXXBvcHVsYXRpb24gYWxsb3dlZCAqL1xuIFx0Ym9vbFx0XHRcdGlzb2xhdGVkO1x0LyogaXNvbGF0ZWQgZnJvbSBhY3RpdmUgY2h1bmtcbiBcdFx0XHRcdFx0XHQgICBzbG90cyAqL1xuQEAgLTE2Miw2ICYjNDM7MTY1LDE3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHBjcHVfb2JqX2Z1bGxfc2l6ZShzaXplX3Qgc2l6ZSlcbiBcdHJldHVybiBzaXplICogbnVtX3Bvc3NpYmxlX2NwdXMoKSAmIzQzOyBleHRyYV9zaXplO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4mIzQzO2V4dGVybiB2b2lkIF9faW5pdCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucik7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm47XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNpZmRlZiBDT05GSUdfUEVSQ1BVX1NUQVRTXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuZGlmZiAtLWdpdCBhL21tL3BlcmNwdS12bS5jIGIvbW0vcGVyY3B1LXZtLmNcbmluZGV4IDRmNTkzNzA5MDU5MGQ4Li41ZGVjYWFkNzY0MGZkYyAxMDA2NDRcbi0tLSBhL21tL3BlcmNwdS12bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wZXJjcHUtdm0uY1xuQEAgLTExMiw2ICYjNDM7MTEyLDEwIEBAIHN0YXRpYyBpbnQgcGNwdV9hbGxvY19wYWdlcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXG4gXHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztleHRlcm4gcGdkX3QgKnBlcmNwdV9wZ2RbTlJfQ1BVU107XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKipcbiAgKiBwY3B1X3ByZV91bm1hcF9mbHVzaCAtIGZsdXNoIGNhY2hlIHByaW9yIHRvIHVubWFwcGluZ1xuICAqIEBjaHVuazogY2h1bmsgdGhlIHJlZ2lvbnMgdG8gYmUgZmx1c2hlZCBiZWxvbmdzIHRvXG5AQCAtMTMwLDYgJiM0MzsxMzQsMTEgQEAgc3RhdGljIHZvaWQgcGNwdV9wcmVfdW5tYXBfZmx1c2goc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0Zmx1c2hfY2FjaGVfdnVubWFwKFxuIFx0XHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfbG93X3VuaXRfY3B1LCBwYWdlX3N0YXJ0KSxcbiBcdFx0cGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2hpZ2hfdW5pdF9jcHUsIHBhZ2VfZW5kKSk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbiYjNDM7XHRmbHVzaF9jYWNoZV92dW5tYXAoKHVuc2lnbmVkIGxvbmcpY2h1bmstXHUwMDNlbG9jYWxfYmFzZSAmIzQzOyAocGFnZV9zdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4mIzQzO1x0XHRcdCh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgJiM0MzsgKHBhZ2VfZW5kIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4mIzQzOyNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX3BjcHVfdW5tYXBfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnJfcGFnZXMpXG5AQCAtMTM3LDYgJiM0MzsxNDYsMjAgQEAgc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5yX3BhZ2VzKVxuIFx0dnVubWFwX3JhbmdlX25vZmx1c2goYWRkciwgYWRkciAmIzQzOyAobnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztzdGF0aWMgdm9pZCBfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxuJiM0MztcdFx0XHQgICAgaW50IG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZXJjcHVfcGdkW2NwdV0sIHZpcnQsIHZpcnQgJiM0MzsgKG5yX3BhZ2VzIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzX2xvY2FsKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcbiYjNDM7XHRcdFx0ICAgIGludCBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybjtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyoqXG4gICogcGNwdV91bm1hcF9wYWdlcyAtIHVubWFwIHBhZ2VzIG91dCBvZiBhIHBjcHVfY2h1bmtcbiAgKiBAY2h1bms6IGNodW5rIG9mIGludGVyZXN0XG5AQCAtMTY2LDYgJiM0MzsxODksMTAgQEAgc3RhdGljIHZvaWQgcGNwdV91bm1hcF9wYWdlcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXG4gXHRcdH1cbiBcdFx0X19wY3B1X3VubWFwX3BhZ2VzKHBjcHVfY2h1bmtfYWRkcihjaHVuaywgY3B1LCBwYWdlX3N0YXJ0KSxcbiBcdFx0XHRcdCAgIHBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7XG4mIzQzO1xuJiM0MztcdFx0X19wY3B1X3VubWFwX3BhZ2VzX2xvY2FsKGNwdSxcbiYjNDM7XHRcdFx0XHRcdCh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgJiM0MzsgKHBhZ2Vfc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxuJiM0MztcdFx0XHRcdFx0cGFnZV9lbmQgLSBwYWdlX3N0YXJ0KTtcbiBcdH1cbiB9XG4gXG5AQCAtMTg4LDYgJiM0MzsyMTUsMTIgQEAgc3RhdGljIHZvaWQgcGNwdV9wb3N0X3VubWFwX3RsYl9mbHVzaChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXG4gXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKFxuIFx0XHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfbG93X3VuaXRfY3B1LCBwYWdlX3N0YXJ0KSxcbiBcdFx0cGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2hpZ2hfdW5pdF9jcHUsIHBhZ2VfZW5kKSk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbiYjNDM7XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKFxuJiM0MztcdFx0KHVuc2lnbmVkIGxvbmcpY2h1bmstXHUwMDNlbG9jYWxfYmFzZSAmIzQzOyAocGFnZV9zdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4mIzQzO1x0XHQodW5zaWduZWQgbG9uZyljaHVuay1cdTAwM2Vsb2NhbF9iYXNlICYjNDM7IChwYWdlX2VuZCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuJiM0MzsjZW5kaWZcbiB9XG4gXG4gc3RhdGljIGludCBfX3BjcHVfbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbkBAIC0xOTcsNiAmIzQzOzIzMCwzMiBAQCBzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuIFx0XHRcdFBBR0VfS0VSTkVMLCBwYWdlcywgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbiYjNDM7c3RhdGljIGludCBfX3BjcHVfbWFwX3BhZ2VzX2xvY2FsKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbiYjNDM7XHRcdFx0ICAgIGludCBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChwZXJjcHVfcGdkW2NwdV0sIHZpcnQsIHZpcnQgJiM0MzsgUEFHRV9TSVpFLFxuJiM0MztcdFx0XHRcdHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIFBBR0VfS0VSTkVMLCBQQUdFX1NISUZUKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0dmlydCAmIzQzOz0gUEFHRV9TSVpFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXNfbG9jYWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuJiM0MztcdFx0XHQgICAgaW50IG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qKlxuICAqIHBjcHVfbWFwX3BhZ2VzIC0gbWFwIHBhZ2VzIGludG8gYSBwY3B1X2NodW5rXG4gICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdFxuQEAgLTIyNCw2ICYjNDM7MjgzLDEzIEBAIHN0YXRpYyBpbnQgcGNwdV9tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gZXJyO1xuIFxuJiM0MztcdFx0ZXJyID0gX19wY3B1X21hcF9wYWdlc19sb2NhbChjcHUsXG4mIzQzO1x0XHRcdFx0XHQodW5zaWduZWQgbG9uZyljaHVuay1cdTAwM2Vsb2NhbF9iYXNlICYjNDM7IChwYWdlX3N0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNnBhZ2VzW3BjcHVfcGFnZV9pZHgoY3B1LCBwYWdlX3N0YXJ0KV0sXG4mIzQzO1x0XHRcdFx0XHRwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuIFx0XHRmb3IgKGkgPSBwYWdlX3N0YXJ0OyBpIFx1MDAzYyBwYWdlX2VuZDsgaSYjNDM7JiM0MzspXG4gXHRcdFx0cGNwdV9zZXRfcGFnZV9jaHVuayhwYWdlc1twY3B1X3BhZ2VfaWR4KGNwdSwgaSldLFxuIFx0XHRcdFx0XHQgICAgY2h1bmspO1xuQEAgLTIzMyw2ICYjNDM7Mjk5LDkgQEAgc3RhdGljIGludCBwY3B1X21hcF9wYWdlcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUodGNwdSkge1xuIFx0XHRfX3BjcHVfdW5tYXBfcGFnZXMocGNwdV9jaHVua19hZGRyKGNodW5rLCB0Y3B1LCBwYWdlX3N0YXJ0KSxcbiBcdFx0XHRcdCAgIHBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7XG4mIzQzO1x0XHRfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwodGNwdSxcbiYjNDM7XHRcdFx0XHRcdCh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgJiM0MzsgKHBhZ2Vfc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxuJiM0MztcdFx0XHRcdFx0cGFnZV9lbmQgLSBwYWdlX3N0YXJ0KTtcbiBcdFx0aWYgKHRjcHUgPT0gY3B1KVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTI1OCw2ICYjNDM7MzI3LDExIEBAIHN0YXRpYyB2b2lkIHBjcHVfcG9zdF9tYXBfZmx1c2goc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0Zmx1c2hfY2FjaGVfdm1hcChcbiBcdFx0cGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2xvd191bml0X2NwdSwgcGFnZV9zdGFydCksXG4gXHRcdHBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9oaWdoX3VuaXRfY3B1LCBwYWdlX2VuZCkpO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4mIzQzO1x0Zmx1c2hfY2FjaGVfdm1hcCgodW5zaWduZWQgbG9uZyljaHVuay1cdTAwM2Vsb2NhbF9iYXNlICYjNDM7IChwYWdlX3N0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbiYjNDM7XHRcdFx0ICh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgJiM0MzsgKHBhZ2VfZW5kIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4mIzQzOyNlbmRpZlxuIH1cbiBcbiAvKipcbkBAIC0zNDksNiAmIzQzOzQyMywyNCBAQCBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY3JlYXRlX2NodW5rKGdmcF90IGdmcClcbiBcdGNodW5rLVx1MDAzZWRhdGEgPSB2bXM7XG4gXHRjaHVuay1cdTAwM2ViYXNlX2FkZHIgPSB2bXNbMF0tXHUwMDNlYWRkciAtIHBjcHVfZ3JvdXBfb2Zmc2V0c1swXTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkZWx0YSA9ICh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWJhc2VfYWRkciAtICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaGludCA9IGRlbHRhICYjNDM7ICh1bnNpZ25lZCBsb25nKXBjcHVfbG9jYWxfYmFzZTtcbiYjNDM7XHRzdHJ1Y3Qgdm1fc3RydWN0ICpsb2NhbF92bSA9IHBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEoaGludCxcbiYjNDM7XHRcdFx0XHRcdHBjcHVfdW5pdF9zaXplLCBwY3B1X2F0b21fc2l6ZSk7XG4mIzQzO1x0aWYgKCFsb2NhbF92bSkge1xuJiM0MztcdFx0cGNwdV9mcmVlX3ZtX2FyZWFzKHZtcywgcGNwdV9ucl9ncm91cHMpO1xuJiM0MztcdFx0cGNwdV9mcmVlX2NodW5rKGNodW5rKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2h1bmstXHUwMDNlbG9jYWxfYmFzZSA9IGxvY2FsX3ZtLVx1MDAzZWFkZHI7XG4mIzQzO1x0Y2h1bmstXHUwMDNlbG9jYWxfZGF0YSA9ICh2b2lkICopbG9jYWxfdm07XG4mIzQzOyNlbHNlXG4mIzQzO1x0Y2h1bmstXHUwMDNlbG9jYWxfYmFzZSA9IDA7XG4mIzQzO1x0Y2h1bmstXHUwMDNlbG9jYWxfZGF0YSA9IE5VTEw7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdHBjcHVfc3RhdHNfY2h1bmtfYWxsb2MoKTtcbiBcdHRyYWNlX3BlcmNwdV9jcmVhdGVfY2h1bmsoY2h1bmstXHUwMDNlYmFzZV9hZGRyKTtcbiBcbkBAIC0zNjUsNiAmIzQzOzQ1Nyw4IEBAIHN0YXRpYyB2b2lkIHBjcHVfZGVzdHJveV9jaHVuayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspXG4gXG4gXHRpZiAoY2h1bmstXHUwMDNlZGF0YSlcbiBcdFx0cGNwdV9mcmVlX3ZtX2FyZWFzKGNodW5rLVx1MDAzZWRhdGEsIHBjcHVfbnJfZ3JvdXBzKTtcbiYjNDM7XHRpZiAoY2h1bmstXHUwMDNlbG9jYWxfZGF0YSlcbiYjNDM7XHRcdGZyZWVfdm1fYXJlYSgoc3RydWN0IHZtX3N0cnVjdCAqKWNodW5rLVx1MDAzZWxvY2FsX2RhdGEpO1xuIFx0cGNwdV9mcmVlX2NodW5rKGNodW5rKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuY1xuaW5kZXggYjA2NzZiODA1NGVkMDkuLjhiMjczZWQ4ZTVhOGJiIDEwMDY0NFxuLS0tIGEvbW0vcGVyY3B1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BlcmNwdS5jXG5AQCAtMTQ1LDYgJiM0MzsxNDUsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHBjcHVfaGlnaF91bml0X2NwdSBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGNodW5rIHdoaWNoIHN0YXJ0cyB3aXRoIHRoZSBrZXJuZWwgc3RhdGljIGFyZWEgKi9cbiB2b2lkICpwY3B1X2Jhc2VfYWRkciBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzOy8qIFRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBjaHVuayBsb2NhbCBtYXBwaW5nICovXG4mIzQzO3ZvaWQgKnBjcHVfbG9jYWxfYmFzZSBfX3JvX2FmdGVyX2luaXQ7XG4gXG4gc3RhdGljIGNvbnN0IGludCAqcGNwdV91bml0X21hcCBfX3JvX2FmdGVyX2luaXQ7XHRcdC8qIGNwdSAtXHUwMDNlIHVuaXQgKi9cbiBjb25zdCB1bnNpZ25lZCBsb25nICpwY3B1X3VuaXRfb2Zmc2V0cyBfX3JvX2FmdGVyX2luaXQ7XHQvKiBjcHUgLVx1MDAzZSB1bml0IG9mZnNldCAqL1xuQEAgLTEzMzgsNiAmIzQzOzEzNDAsNyBAQCBzdGF0aWMgdm9pZCBwY3B1X2luaXRfbWRfYmxvY2tzKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcbiAvKipcbiAgKiBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rIC0gY3JlYXRlcyBjaHVua3MgdGhhdCBzZXJ2ZSB0aGUgZmlyc3QgY2h1bmtcbiAgKiBAdG1wX2FkZHI6IHRoZSBzdGFydCBvZiB0aGUgcmVnaW9uIHNlcnZlZFxuJiM0MzsgKiBAbG9jYWxfdG1wOiB0aGUgc3RhcnQgb2YgdGhlIGxvY2FsIHBlcmNwdSByZWdpb24gc2VydmVkXG4gICogQG1hcF9zaXplOiBzaXplIG9mIHRoZSByZWdpb24gc2VydmVkXG4gICpcbiAgKiBUaGlzIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgY2h1bmtzIHRoYXQgc2VydmUgdGhlIGZpcnN0IGNodW5rLiAgVGhlXG5AQCAtMTM0OSwxNSAmIzQzOzEzNTIsMTYgQEAgc3RhdGljIHZvaWQgcGNwdV9pbml0X21kX2Jsb2NrcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspXG4gICogQ2h1bmsgc2VydmluZyB0aGUgcmVnaW9uIGF0IEB0bXBfYWRkciBvZiBAbWFwX3NpemUuXG4gICovXG4gc3RhdGljIHN0cnVjdCBwY3B1X2NodW5rICogX19pbml0IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodW5zaWduZWQgbG9uZyB0bXBfYWRkcixcbi1cdFx0XHRcdFx0XHRcdCBpbnQgbWFwX3NpemUpXG4mIzQzO1x0XHRcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbG9jYWxfdG1wLCBpbnQgbWFwX3NpemUpXG4ge1xuIFx0c3RydWN0IHBjcHVfY2h1bmsgKmNodW5rO1xuLVx0dW5zaWduZWQgbG9uZyBhbGlnbmVkX2FkZHI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhbGlnbmVkX2FkZHIsIGFsaWduZWRfbG9jYWw7XG4gXHRpbnQgc3RhcnRfb2Zmc2V0LCBvZmZzZXRfYml0cywgcmVnaW9uX3NpemUsIHJlZ2lvbl9iaXRzO1xuIFx0c2l6ZV90IGFsbG9jX3NpemU7XG4gXG4gXHQvKiByZWdpb24gY2FsY3VsYXRpb25zICovXG4gXHRhbGlnbmVkX2FkZHIgPSB0bXBfYWRkciBcdTAwMjYgUEFHRV9NQVNLO1xuJiM0MztcdGFsaWduZWRfbG9jYWwgPSBsb2NhbF90bXAgXHUwMDI2IFBBR0VfTUFTSztcbiBcbiBcdHN0YXJ0X29mZnNldCA9IHRtcF9hZGRyIC0gYWxpZ25lZF9hZGRyO1xuIFx0cmVnaW9uX3NpemUgPSBBTElHTihzdGFydF9vZmZzZXQgJiM0MzsgbWFwX3NpemUsIFBBR0VfU0laRSk7XG5AQCAtMTM3MCw2ICYjNDM7MTM3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqIF9faW5pdCBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHVuc2lnbmVkIGxvbmcgdG1wX2FkZHIsXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjaHVuay1cdTAwM2VsaXN0KTtcbiBcbiBcdGNodW5rLVx1MDAzZWJhc2VfYWRkciA9ICh2b2lkICopYWxpZ25lZF9hZGRyO1xuJiM0MztcdGNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgPSAodm9pZCAqKWFsaWduZWRfbG9jYWw7XG4gXHRjaHVuay1cdTAwM2VzdGFydF9vZmZzZXQgPSBzdGFydF9vZmZzZXQ7XG4gXHRjaHVuay1cdTAwM2VlbmRfb2Zmc2V0ID0gcmVnaW9uX3NpemUgLSBjaHVuay1cdTAwM2VzdGFydF9vZmZzZXQgLSBtYXBfc2l6ZTtcbiBcbkBAIC0yNTYyLDcgJiM0MzsyNTY3LDcgQEAgc3RhdGljIHZvaWQgcGNwdV9kdW1wX2FsbG9jX2luZm8oY29uc3QgY2hhciAqbHZsLFxuICAqIGFuZCBhdmFpbGFibGUgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBsaWtlIGFueSBvdGhlciBjaHVuay5cbiAgKi9cbiB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLFxuLVx0XHRcdFx0ICAgdm9pZCAqYmFzZV9hZGRyKVxuJiM0MztcdFx0XHRcdCAgIHZvaWQgKmJhc2VfYWRkciwgdm9pZCAqbG9jYWxfYmFzZSlcbiB7XG4gXHRzaXplX3Qgc2l6ZV9zdW0gPSBhaS1cdTAwM2VzdGF0aWNfc2l6ZSAmIzQzOyBhaS1cdTAwM2VyZXNlcnZlZF9zaXplICYjNDM7IGFpLVx1MDAzZWR5bl9zaXplO1xuIFx0c2l6ZV90IHN0YXRpY19zaXplLCBkeW5fc2l6ZTtcbkBAIC0yNTcyLDcgJiM0MzsyNTc3LDcgQEAgdm9pZCBfX2luaXQgcGNwdV9zZXR1cF9maXJzdF9jaHVuayhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSxcbiBcdHVuc2lnbmVkIGludCBjcHU7XG4gXHRpbnQgKnVuaXRfbWFwO1xuIFx0aW50IGdyb3VwLCB1bml0LCBpO1xuLVx0dW5zaWduZWQgbG9uZyB0bXBfYWRkcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRtcF9hZGRyLCBsb2NhbF90bXAgPSAwO1xuIFx0c2l6ZV90IGFsbG9jX3NpemU7XG4gXG4gI2RlZmluZSBQQ1BVX1NFVFVQX0JVR19PTihjb25kKVx0ZG8ge1x0XHRcdFx0XHRcXFxuQEAgLTI3MTMsMTEgJiM0MzsyNzE4LDE1IEBAIHZvaWQgX19pbml0IHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoY29uc3Qgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWksXG4gXHQgKiAgIGNodW5rLlxuIFx0ICovXG4gXHR0bXBfYWRkciA9ICh1bnNpZ25lZCBsb25nKWJhc2VfYWRkciAmIzQzOyBzdGF0aWNfc2l6ZTtcbiYjNDM7XHRpZiAobG9jYWxfYmFzZSlcbiYjNDM7XHRcdGxvY2FsX3RtcCA9ICh1bnNpZ25lZCBsb25nKWxvY2FsX2Jhc2UgJiM0Mzsgc3RhdGljX3NpemU7XG4gXHRpZiAoYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZSlcbi1cdFx0cGNwdV9yZXNlcnZlZF9jaHVuayA9IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodG1wX2FkZHIsXG4mIzQzO1x0XHRwY3B1X3Jlc2VydmVkX2NodW5rID0gcGNwdV9hbGxvY19maXJzdF9jaHVuayh0bXBfYWRkciwgbG9jYWxfdG1wLFxuIFx0XHRcdFx0XHRcdGFpLVx1MDAzZXJlc2VydmVkX3NpemUpO1xuIFx0dG1wX2FkZHIgPSAodW5zaWduZWQgbG9uZyliYXNlX2FkZHIgJiM0Mzsgc3RhdGljX3NpemUgJiM0MzsgYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZTtcbi1cdHBjcHVfZmlyc3RfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLCBkeW5fc2l6ZSk7XG4mIzQzO1x0aWYgKGxvY2FsX2Jhc2UpXG4mIzQzO1x0XHRsb2NhbF90bXAgPSAodW5zaWduZWQgbG9uZylsb2NhbF9iYXNlICYjNDM7IHN0YXRpY19zaXplICYjNDM7IGFpLVx1MDAzZXJlc2VydmVkX3NpemU7XG4mIzQzO1x0cGNwdV9maXJzdF9jaHVuayA9IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodG1wX2FkZHIsIGxvY2FsX3RtcCwgZHluX3NpemUpO1xuIFxuIFx0cGNwdV9ucl9lbXB0eV9wb3BfcGFnZXMgPSBwY3B1X2ZpcnN0X2NodW5rLVx1MDAzZW5yX2VtcHR5X3BvcF9wYWdlcztcbiBcdHBjcHVfY2h1bmtfcmVsb2NhdGUocGNwdV9maXJzdF9jaHVuaywgLTEpO1xuQEAgLTMxMDgsNyAmIzQzOzMxMTcsNyBAQCBpbnQgX19pbml0IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHNpemVfdCBkeW5fc2l6ZSxcbiBcdFx0UEZOX0RPV04oc2l6ZV9zdW0pLCBhaS1cdTAwM2VzdGF0aWNfc2l6ZSwgYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZSxcbiBcdFx0YWktXHUwMDNlZHluX3NpemUsIGFpLVx1MDAzZXVuaXRfc2l6ZSk7XG4gXG4tXHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBiYXNlKTtcbiYjNDM7XHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBiYXNlLCBOVUxMKTtcbiBcdGdvdG8gb3V0X2ZyZWU7XG4gXG4gb3V0X2ZyZWVfYXJlYXM6XG5AQCAtMzE2Myw3ICYjNDM7MzE3Miw3IEBAIHZvaWQgX19pbml0IF9fd2VhayBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHRwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcik7XG4gXHRpZiAocHVkX25vbmUoKnB1ZCkpIHtcbiBcdFx0cG1kID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUE1EX1RBQkxFX1NJWkUsIFBNRF9UQUJMRV9TSVpFKTtcbi1cdFx0cHVkX3BvcHVsYXRlKFx1MDAyNmluaXRfbW0sIHB1ZCwgcG1kKTtcbiYjNDM7XHRcdHB1ZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHB1ZCwgcG1kKTtcbiBcdH1cbiBcbiBcdHBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTtcbkBAIC0zMTcxLDcgJiM0MzszMTgwLDcgQEAgdm9pZCBfX2luaXQgX193ZWFrIHBjcHVfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdFx0cHRlX3QgKm5ldztcbiBcbiBcdFx0bmV3ID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFRFX1RBQkxFX1NJWkUsIFBURV9UQUJMRV9TSVpFKTtcbi1cdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWQsIG5ldyk7XG4mIzQzO1x0XHRwbWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwbWQsIG5ldyk7XG4gXHR9XG4gXG4gXHRyZXR1cm47XG5AQCAtMzE5NCw2ICYjNDM7MzIwMyw3IEBAIHZvaWQgX19pbml0IF9fd2VhayBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpXG4gaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdCBjcHVfdG9fbmRfZm4pXG4ge1xuIFx0c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3Qgdm07XG4mIzQzO1x0c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgcGNwdV92bTtcbiBcdHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpO1xuIFx0Y2hhciBwc2l6ZV9zdHJbMTZdO1xuIFx0aW50IHVuaXRfcGFnZXM7XG5AQCAtMzI0MywxMSAmIzQzOzMyNTMsMjggQEAgaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdFxuIFx0fVxuIFxuIFx0LyogYWxsb2NhdGUgdm0gYXJlYSwgbWFwIHRoZSBwYWdlcyBhbmQgY29weSBzdGF0aWMgZGF0YSAqL1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbiYjNDM7XHR2bS5mbGFncyA9IFZNX0FMTE9DO1xuJiM0MztcdHZtLmFkZHIgPSAodm9pZCAqKUFMSUdOKFBFUkNQVV9TVEFSVCwgUEFHRV9TSVpFKTtcbiYjNDM7XHR2bS5zaXplID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIGFpLVx1MDAzZXVuaXRfc2l6ZTtcbiYjNDM7XHR2bV9hcmVhX2FkZF9lYXJseShcdTAwMjZ2bSk7XG4mIzQzO1x0a2FzYW5fcG9wdWxhdGVfZWFybHlfdm1fYXJlYV9zaGFkb3codm0uYWRkciwgdm0uc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHBjcHVfdm0uZmxhZ3MgPSBWTV9BTExPQztcbiYjNDM7XHRwY3B1X3ZtLmFkZHIgPSAodm9pZCAqKUFMSUdOKExPQ0FMX1BFUkNQVV9TVEFSVCwgUEFHRV9TSVpFKTtcbiYjNDM7XHRwY3B1X3ZtLnNpemUgPSBhaS1cdTAwM2V1bml0X3NpemU7XG4mIzQzO1x0dm1fYXJlYV9hZGRfZWFybHkoXHUwMDI2cGNwdV92bSk7XG4mIzQzO1x0a2FzYW5fcG9wdWxhdGVfZWFybHlfdm1fYXJlYV9zaGFkb3cocGNwdV92bS5hZGRyLCBwY3B1X3ZtLnNpemUpO1xuJiM0MzsjZWxzZVxuIFx0dm0uZmxhZ3MgPSBWTV9BTExPQztcbiBcdHZtLnNpemUgPSBudW1fcG9zc2libGVfY3B1cygpICogYWktXHUwMDNldW5pdF9zaXplO1xuIFx0dm1fYXJlYV9yZWdpc3Rlcl9lYXJseShcdTAwMjZ2bSwgUEFHRV9TSVpFKTtcbiBcbiYjNDM7XHRwY3B1X3ZtLmFkZHIgPSBOVUxMO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRmb3IgKHVuaXQgPSAwOyB1bml0IFx1MDAzYyBudW1fcG9zc2libGVfY3B1cygpOyB1bml0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGNwdSA9IGFpLVx1MDAzZWdyb3Vwc1swXS5jcHVfbWFwW3VuaXRdO1xuIFx0XHR1bnNpZ25lZCBsb25nIHVuaXRfYWRkciA9XG4gXHRcdFx0KHVuc2lnbmVkIGxvbmcpdm0uYWRkciAmIzQzOyB1bml0ICogYWktXHUwMDNldW5pdF9zaXplO1xuIFxuQEAgLTMyNjQsNiAmIzQzOzMyOTEsMTQgQEAgaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdFxuIFxuIFx0XHQvKiBjb3B5IHN0YXRpYyBkYXRhICovXG4gXHRcdG1lbWNweSgodm9pZCAqKXVuaXRfYWRkciwgX19wZXJfY3B1X3N0YXJ0LCBhaS1cdTAwM2VzdGF0aWNfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIE1hcCBwZXJjcHUgZGF0YSB0byBQRVJDUFUgbWFwLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIFBDUFVfRkNfRU1CRUQgY2FuJiMzOTt0IHN1cHBvcnQgaXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsoY3B1LCAodW5zaWduZWQgbG9uZylwY3B1X3ZtLmFkZHIsXG4mIzQzO1x0XHRcdFx0XHUwMDI2cGFnZXNbdW5pdCAqIHVuaXRfcGFnZXNdLCB1bml0X3BhZ2VzKTtcbiBcdH1cbiBcbiBcdC8qIHdlJiMzOTtyZSByZWFkeSwgY29tbWl0ICovXG5AQCAtMzI3MSw3ICYjNDM7MzMwNiw4IEBAIGludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3RcbiBcdFx0dW5pdF9wYWdlcywgcHNpemVfc3RyLCBhaS1cdTAwM2VzdGF0aWNfc2l6ZSxcbiBcdFx0YWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZSwgYWktXHUwMDNlZHluX3NpemUpO1xuIFxuLVx0cGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgdm0uYWRkcik7XG4mIzQzO1x0cGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgdm0uYWRkciwgcGNwdV92bS5hZGRyKTtcbiYjNDM7XHRwY3B1X2xvY2FsX2Jhc2UgPSBwY3B1X3ZtLmFkZHI7XG4gXHRnb3RvIG91dF9mcmVlX2FyO1xuIFxuIGVub21lbTpcbkBAIC0zMzUzLDcgJiM0MzszMzg5LDcgQEAgdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKVxuIFx0YWktXHUwMDNlZ3JvdXBzWzBdLm5yX3VuaXRzID0gMTtcbiBcdGFpLVx1MDAzZWdyb3Vwc1swXS5jcHVfbWFwWzBdID0gMDtcbiBcbi1cdHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIGZjKTtcbiYjNDM7XHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBmYywgTlVMTCk7XG4gXHRwY3B1X2ZyZWVfYWxsb2NfaW5mbyhhaSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3NwYXJzZS12bWVtbWFwLmMgYi9tbS9zcGFyc2Utdm1lbW1hcC5jXG5pbmRleCA5OWUyYmUzOTY3MWI2My4uNDYzYzJmOGI2MTFjMDMgMTAwNjQ0XG4tLS0gYS9tbS9zcGFyc2Utdm1lbW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zcGFyc2Utdm1lbW1hcC5jXG5AQCAtMTk4LDcgJiM0MzsxOTgsNyBAQCBzdGF0aWMgcG1kX3QgKiBfX21lbWluaXQgdm1lbW1hcF9wbWRfcG9wdWxhdGUocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpblxuIFx0XHRpZiAoIXApXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdGtlcm5lbF9wdGVfaW5pdChwKTtcbi1cdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWQsIHApO1xuJiM0MztcdFx0cG1kX3BvcHVsYXRlX3N5bmMoYWRkciwgcG1kLCBwKTtcbiBcdH1cbiBcdHJldHVybiBwbWQ7XG4gfVxuQEAgLTIxMSw3ICYjNDM7MjExLDcgQEAgc3RhdGljIHB1ZF90ICogX19tZW1pbml0IHZtZW1tYXBfcHVkX3BvcHVsYXRlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW5cbiBcdFx0aWYgKCFwKVxuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHRwbWRfaW5pdChwKTtcbi1cdFx0cHVkX3BvcHVsYXRlKFx1MDAyNmluaXRfbW0sIHB1ZCwgcCk7XG4mIzQzO1x0XHRwdWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwdWQsIHApO1xuIFx0fVxuIFx0cmV0dXJuIHB1ZDtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uM2Q5NGNhNGJiZDE3YjEgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYWxsb2MuY1xuQEAgLTgwLDYgJiM0Mzs4MCw5IEBAIGJvb2wgaXNfdm1hbGxvY19hZGRyKGNvbnN0IHZvaWQgKngpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKHgpO1xuIFxuJiM0MztcdGlmIChpc19wZXJjcHVfYWRkcihhZGRyKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiBcdHJldHVybiBhZGRyIFx1MDAzZT0gVk1BTExPQ19TVEFSVCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2MgVk1BTExPQ19FTkQ7XG4gfVxuIEVYUE9SVF9TWU1CT0woaXNfdm1hbGxvY19hZGRyKTtcbkBAIC0yOTUsOSAmIzQzOzI5OCw5IEBAIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tXHRcdFx0cGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LFxuLVx0XHRcdHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcbiYjNDM7aW50IHZtYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzQzO1x0XHQgICAgICAgcGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LFxuJiM0MztcdFx0ICAgICAgIHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcbiB7XG4gXHRwZ2RfdCAqcGdkO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydDtcbkBAIC0zMTQsNyAmIzQzOzMxNyw3IEBAIHN0YXRpYyBpbnQgdm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRCVUdfT04oYWRkciBcdTAwM2U9IGVuZCk7XG4gXG4gXHRzdGFydCA9IGFkZHI7XG4tXHRwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7XG4mIzQzO1x0cGdkID0gcGdkX29mZnNldF9wZ2QocGdkaXIsIGFkZHIpO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGVyciA9IHZtYXBfcDRkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90LFxuQEAgLTMzNCw4ICYjNDM7MzM3LDggQEAgaW50IHZtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSB2bWFwX3JhbmdlX25vZmx1c2goYWRkciwgZW5kLCBwaHlzX2FkZHIsIHBncHJvdF9ueChwcm90KSxcbi1cdFx0XHRcdCBpb3JlbWFwX21heF9wYWdlX3NoaWZ0KTtcbiYjNDM7XHRlcnIgPSB2bWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIGFkZHIsIGVuZCwgcGh5c19hZGRyLFxuJiM0MztcdFx0XHRcdCBwZ3Byb3RfbngocHJvdCksIGlvcmVtYXBfbWF4X3BhZ2Vfc2hpZnQpO1xuIFx0Zmx1c2hfY2FjaGVfdm1hcChhZGRyLCBlbmQpO1xuIFx0aWYgKCFlcnIpXG4gXHRcdGVyciA9IGttc2FuX2lvcmVtYXBfcGFnZV9yYW5nZShhZGRyLCBlbmQsIHBoeXNfYWRkciwgcHJvdCxcbkBAIC00NzgsNyAmIzQzOzQ4MSw3IEBAIHN0YXRpYyB2b2lkIHZ1bm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiAgKlxuICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gb25seS4gRG8gbm90IHVzZSBvdXRzaWRlIG1tLy5cbiAgKi9cbi12b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4mIzQzO3ZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbiBcdHBnZF90ICpwZ2Q7XG5AQCAtNDg2LDcgJiM0Mzs0ODksNyBAQCB2b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gXHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiBcbiBcdEJVR19PTihhZGRyIFx1MDAzZT0gZW5kKTtcbi1cdHBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTtcbiYjNDM7XHRwZ2QgPSBwZ2Rfb2Zmc2V0X3BnZChwZ2RpciwgYWRkcik7XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0aWYgKHBnZF9iYWQoKnBnZCkpXG5AQCAtNTAzLDcgJiM0Mzs1MDYsNyBAQCB2b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gdm9pZCB2dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiB7XG4gXHRrbXNhbl92dW5tYXBfcmFuZ2Vfbm9mbHVzaChzdGFydCwgZW5kKTtcbi1cdF9fdnVubWFwX3JhbmdlX25vZmx1c2goc3RhcnQsIGVuZCk7XG4mIzQzO1x0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgc3RhcnQsIGVuZCk7XG4gfVxuIFxuIC8qKlxuQEAgLTY3MCw5ICYjNDM7NjczLDEwIEBAIGludCBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnI7IGkgJiM0Mzs9IDFVIFx1MDAzY1x1MDAzYyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpKSB7XG4gXHRcdGludCBlcnI7XG4gXG4tXHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQpLFxuLVx0XHRcdFx0XHRwYWdlX3RvX3BoeXMocGFnZXNbaV0pLCBwcm90LFxuLVx0XHRcdFx0XHRwYWdlX3NoaWZ0KTtcbiYjNDM7XHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgYWRkcixcbiYjNDM7XHRcdFx0XHRcdCBhZGRyICYjNDM7ICgxVUwgXHUwMDNjXHUwMDNjIHBhZ2Vfc2hpZnQpLFxuJiM0MztcdFx0XHRcdFx0IHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIHByb3QsXG4mIzQzO1x0XHRcdFx0XHQgcGFnZV9zaGlmdCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC00OTE5LDE1ICYjNDM7NDkyMywyNSBAQCBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxuICAqICAgaW4gLSB0aGUgVkEgd2Ugc3RhcnQgdGhlIHNlYXJjaChyZXZlcnNlIG9yZGVyKTtcbiAgKiAgIG91dCAtIHRoZSBWQSB3aXRoIHRoZSBoaWdoZXN0IGFsaWduZWQgZW5kIGFkZHJlc3MuXG4gICogQGFsaWduOiBhbGlnbm1lbnQgZm9yIHJlcXVpcmVkIGhpZ2hlc3QgYWRkcmVzc1xuJiM0MzsgKiBAcGNwdTogd2hldGhlciByZXF1ZXN0IGFsbG9jYXRpb24gZnJvbSBsb2NhbCBwZXJjcHUgYXJlYVxuICAqXG4gICogUmV0dXJuczogZGV0ZXJtaW5lZCBlbmQgYWRkcmVzcyB3aXRoaW4gdm1hcF9hcmVhXG4gICovXG4gc3RhdGljIHVuc2lnbmVkIGxvbmdcbi1wdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2Uoc3RydWN0IHZtYXBfYXJlYSAqKnZhLCB1bnNpZ25lZCBsb25nIGFsaWduKVxuJiM0Mztwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2Uoc3RydWN0IHZtYXBfYXJlYSAqKnZhLCB1bnNpZ25lZCBsb25nIGFsaWduLCBib29sIHBjcHUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZCA9IFZNQUxMT0NfRU5EIFx1MDAyNiB+KGFsaWduIC0gMSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZDtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4mIzQzO1x0aWYgKHBjcHUpXG4mIzQzO1x0XHR2bWFsbG9jX2VuZCA9IExPQ0FMX1BFUkNQVV9FTkQgXHUwMDI2IH4oYWxpZ24gLSAxKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2bWFsbG9jX2VuZCA9IFBFUkNQVV9FTkQgXHUwMDI2IH4oYWxpZ24gLSAxKTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHR2bWFsbG9jX2VuZCA9IFZNQUxMT0NfRU5EIFx1MDAyNiB+KGFsaWduIC0gMSk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGlmIChsaWtlbHkoKnZhKSkge1xuIFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb21fcmV2ZXJzZSgoKnZhKSxcbiBcdFx0XHRcdFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xpc3QsIGxpc3QpIHtcbkBAIC00OTY4LDE0ICYjNDM7NDk4MiwyMiBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc2l6ZV90ICpzaXplcywgaW50IG5yX3ZtcyxcbiBcdFx0XHRcdCAgICAgc2l6ZV90IGFsaWduKVxuIHtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgdm1hbGxvY19zdGFydCA9IEFMSUdOKFZNQUxMT0NfU1RBUlQsIGFsaWduKTtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCBcdTAwMjYgfihhbGlnbiAtIDEpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdm1hbGxvY19zdGFydDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kO1xuIFx0c3RydWN0IHZtYXBfYXJlYSAqKnZhcywgKnZhO1xuIFx0c3RydWN0IHZtX3N0cnVjdCAqKnZtcztcbiBcdGludCBhcmVhLCBhcmVhMiwgbGFzdF9hcmVhLCB0ZXJtX2FyZWE7XG4gXHR1bnNpZ25lZCBsb25nIGJhc2UsIHN0YXJ0LCBzaXplLCBlbmQsIGxhc3RfZW5kLCBvcmlnX3N0YXJ0LCBvcmlnX2VuZDtcbiBcdGJvb2wgcHVyZ2VkID0gZmFsc2U7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuJiM0MztcdHZtYWxsb2Nfc3RhcnQgPSBBTElHTihQRVJDUFVfU1RBUlQsIGFsaWduKTtcbiYjNDM7XHR2bWFsbG9jX2VuZCA9IFBFUkNQVV9FTkQgXHUwMDI2IH4oYWxpZ24gLSAxKTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHR2bWFsbG9jX3N0YXJ0ID0gQUxJR04oVk1BTExPQ19TVEFSVCwgYWxpZ24pO1xuJiM0MztcdHZtYWxsb2NfZW5kID0gVk1BTExPQ19FTkQgXHUwMDI2IH4oYWxpZ24gLSAxKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0LyogdmVyaWZ5IHBhcmFtZXRlcnMgYW5kIGFsbG9jYXRlIGRhdGEgc3RydWN0dXJlcyAqL1xuIFx0QlVHX09OKG9mZnNldF9pbl9wYWdlKGFsaWduKSB8fCAhaXNfcG93ZXJfb2ZfMihhbGlnbikpO1xuIFx0Zm9yIChsYXN0X2FyZWEgPSAwLCBhcmVhID0gMDsgYXJlYSBcdTAwM2MgbnJfdm1zOyBhcmVhJiM0MzsmIzQzOykge1xuQEAgLTUwMjQsNyAmIzQzOzUwNDYsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbiBcdGVuZCA9IHN0YXJ0ICYjNDM7IHNpemVzW2FyZWFdO1xuIFxuIFx0dmEgPSBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIodm1hbGxvY19lbmQpO1xuLVx0YmFzZSA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShcdTAwMjZ2YSwgYWxpZ24pIC0gZW5kO1xuJiM0MztcdGJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoXHUwMDI2dmEsIGFsaWduLCBmYWxzZSkgLSBlbmQ7XG4gXG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHQvKlxuQEAgLTUwNDUsNyAmIzQzOzUwNjcsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbiBcdFx0ICogYmFzZSBkb3dud2FyZHMgYW5kIHRoZW4gcmVjaGVjay5cbiBcdFx0ICovXG4gXHRcdGlmIChiYXNlICYjNDM7IGVuZCBcdTAwM2UgdmEtXHUwMDNldmFfZW5kKSB7XG4tXHRcdFx0YmFzZSA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShcdTAwMjZ2YSwgYWxpZ24pIC0gZW5kO1xuJiM0MztcdFx0XHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnZhLCBhbGlnbiwgZmFsc2UpIC0gZW5kO1xuIFx0XHRcdHRlcm1fYXJlYSA9IGFyZWE7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbkBAIC01MDU1LDcgJiM0Mzs1MDc3LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsXG4gXHRcdCAqL1xuIFx0XHRpZiAoYmFzZSAmIzQzOyBzdGFydCBcdTAwM2MgdmEtXHUwMDNldmFfc3RhcnQpIHtcbiBcdFx0XHR2YSA9IG5vZGVfdG9fdmEocmJfcHJldihcdTAwMjZ2YS1cdTAwM2VyYl9ub2RlKSk7XG4tXHRcdFx0YmFzZSA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShcdTAwMjZ2YSwgYWxpZ24pIC0gZW5kO1xuJiM0MztcdFx0XHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnZhLCBhbGlnbiwgZmFsc2UpIC0gZW5kO1xuIFx0XHRcdHRlcm1fYXJlYSA9IGFyZWE7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbkBAIC01MjE4LDYgJiM0Mzs1MjQwLDg0IEBAIHZvaWQgcGNwdV9mcmVlX3ZtX2FyZWFzKHN0cnVjdCB2bV9zdHJ1Y3QgKip2bXMsIGludCBucl92bXMpXG4gXHRcdGZyZWVfdm1fYXJlYSh2bXNbaV0pO1xuIFx0a2ZyZWUodm1zKTtcbiB9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbiYjNDM7LyogRmluZCBmcmVlIHZtIGFyZWEgc3RhcnRzIGZyb20gaGludCAqL1xuJiM0MztzdHJ1Y3Qgdm1fc3RydWN0ICpwY3B1X2dldF9sb2NhbF92bV9hcmVhKHVuc2lnbmVkIGxvbmcgaGludCxcbiYjNDM7XHRcdFx0XHQgICAgIGludCB1bml0X3NpemUsIHNpemVfdCBhbGlnbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2bWFwX2FyZWEgKnRtcF92YSwgKnZhO1xuJiM0MztcdHN0cnVjdCB2bV9zdHJ1Y3QgKnZtO1xuJiM0MztcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZW5kO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHZhID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0dm0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgdm1fc3RydWN0KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCF2YSB8fCAhdm0pXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4mIzQzO1xuJiM0MztcdHRtcF92YSA9IHB2bV9maW5kX3ZhX2VuY2xvc2VfYWRkcihoaW50KTtcbiYjNDM7XHRpZiAoIXRtcF92YSkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZW5kID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnRtcF92YSwgYWxpZ24sIHRydWUpO1xuJiM0MztcbiYjNDM7XHRpZiAoaGludCAmIzQzOyB1bml0X3NpemUgXHUwMDNlIGVuZCkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmFfY2xpcChcdTAwMjZmcmVlX3ZtYXBfYXJlYV9yb290LFxuJiM0MztcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0LCB0bXBfdmEsIGhpbnQsIHVuaXRfc2l6ZSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dmEtXHUwMDNldmFfc3RhcnQgPSBoaW50O1xuJiM0MztcdHZhLVx1MDAzZXZhX2VuZCA9IGhpbnQgJiM0MzsgdW5pdF9zaXplO1xuJiM0MztcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGthc2FuX3BvcHVsYXRlX3ZtYWxsb2ModmEtXHUwMDNldmFfc3RhcnQsIHVuaXRfc2l6ZSwgR0ZQX0tFUk5FTCkpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX3NoYWRvdztcbiYjNDM7XG4mIzQzO1x0dm4gPSBhZGRyX3RvX25vZGUodmEtXHUwMDNldmFfc3RhcnQpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dm4tXHUwMDNlYnVzeS5sb2NrKTtcbiYjNDM7XHRpbnNlcnRfdm1hcF9hcmVhKHZhLCBcdTAwMjZ2bi1cdTAwM2VidXN5LnJvb3QsIFx1MDAyNnZuLVx1MDAzZWJ1c3kuaGVhZCk7XG4mIzQzO1x0c2V0dXBfdm1hbGxvY192bSh2bSwgdmEsIFZNX0FMTE9DLFxuJiM0MztcdFx0XHQgcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2dm4tXHUwMDNlYnVzeS5sb2NrKTtcbiYjNDM7XG4mIzQzO1x0a2FzYW5fdW5wb2lzb25fdm1hcF9hcmVhcyhcdTAwMjZ2bSwgMSwgS0FTQU5fVk1BTExPQ19QUk9UX05PUk1BTCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2bTtcbiYjNDM7XG4mIzQzO2Vycl9mcmVlOlxuJiM0MztcdGttZW1fY2FjaGVfZnJlZSh2bWFwX2FyZWFfY2FjaGVwLCB2YSk7XG4mIzQzO1x0a2ZyZWUodm0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO2Vycl9mcmVlX3NoYWRvdzpcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4mIzQzO1x0dmEgPSBtZXJnZV9vcl9hZGRfdm1hcF9hcmVhX2F1Z21lbnQodmEsIFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsXG4mIzQzO1x0XHRcdFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xpc3QpO1xuJiM0MztcdGlmICh2YSlcbiYjNDM7XHRcdGthc2FuX3JlbGVhc2Vfdm1hbGxvYyh2YS1cdTAwM2V2YV9zdGFydCwgdmEtXHUwMDNldmFfZW5kLCB2YS1cdTAwM2V2YV9zdGFydCwgdmEtXHUwMDNldmFfZW5kLFxuJiM0MztcdFx0XHQgICAgICAgS0FTQU5fVk1BTExPQ19QQUdFX1JBTkdFIHwgS0FTQU5fVk1BTExPQ19UTEJfRkxVU0gpO1xuJiM0MztcdGtmcmVlKHZtKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4gI2VuZGlmXHQvKiBDT05GSUdfU01QICovXG4gXG4gI2lmZGVmIENPTkZJR19QUklOVEtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMjo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIQVZFX0xPQ0FMX1BFUl9DUFVfTUFQJiMzNDssCiAgICAmIzM0O0FSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DJiMzNDssCiAgICAmIzM0O0FSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DJiMzNDssCiAgICAmIzM0O05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGNwdV9nZXRfbG9jYWxfdm1fYXJlYSYjMzQ7LAogICAgJiMzNDttYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rJiMzNDssCiAgICAmIzM0O3NldHVwX3BlcmNwdV9wZ2QmIzM0OywKICAgICYjMzQ7YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBsb2NhbCBwZXItY3B1IG1hcHBpbmcgc3VwcG9ydCBmb3IgQVJNNjQsIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgcGVyY3B1IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmJhY2NiMzUxMWZjYWRkMGZhMTJiNTJjNzc5M2Y4Y2YwMTgwMDA2ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDE1IDIyOjQwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IGIzYWZlMDY4ODkxOWJkLi45NWZmZDE1MTE4N2YyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtNDEsOSAmIzQzOzQxLDExIEBAIGNvbmZpZyBBUk02NAogCXNlbGVjdCBBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMKIAlzZWxlY3QgQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0UKIAlzZWxlY3QgQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcgaWYgQVJNNjRfSEFGVAomIzQzOwlzZWxlY3QgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkMKIAlzZWxlY3QgQVJDSF9IQVNfUFJFRU1QVF9MQVpZCiAJc2VsZWN0IEFSQ0hfSEFTX1BURFVNUAogCXNlbGVjdCBBUkNIX0hBU19QVEVfU1BFQ0lBTAomIzQzOwlzZWxlY3QgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkMKIAlzZWxlY3QgQVJDSF9IQVNfSFdfUFRFX1lPVU5HCiAJc2VsZWN0IEFSQ0hfSEFTX1NFVFVQX0RNQV9PUFMKIAlzZWxlY3QgQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVAKQEAgLTIyNCw2ICYjNDM7MjI2LDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKIAlzZWxlY3QgSEFWRV9SU0VRCiAJc2VsZWN0IEhBVkVfUlVTVCBpZiBSVVNUQ19TVVBQT1JUU19BUk02NAomIzQzOwlzZWxlY3QgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKIAlzZWxlY3QgSEFWRV9TVEFDS1BST1RFQ1RPUgogCXNlbGVjdCBIQVZFX1NUQVRJQ19DQUxMIGlmIENGSQogCXNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKQEAgLTIzOSw2ICYjNDM7MjQyLDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BCiAJc2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBCiAJc2VsZWN0IE5FRURfRE1BX01BUF9TVEFURQomIzQzOwlzZWxlY3QgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksKIAlzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RICiAJc2VsZWN0IE9GCiAJc2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFCkBAIC00MTEsNiAmIzQzOzQxNSwxMSBAQCBjb25maWcgS0FTQU5fU0hBRE9XX09GRlNFVAogY29uZmlnIFVOV0lORF9UQUJMRVMKIAlib29sCiAKJiM0Mztjb25maWcgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUAomIzQzOwlkZWZfYm9vbCB5CiYjNDM7CWRlcGVuZHMgb24gKEFSTTY0X1ZBX0JJVFNfNDggJmFtcDsmYW1wOyAoQVJNNjRfNEtfUEFHRVMgfHwgQVJNNjRfNjRLX1BBR0VTKSkgfHwgXAomIzQzOwkJICAgKEFSTTY0X1ZBX0JJVFNfNDcgJmFtcDsmYW1wOyBBUk02NF8xNktfUEFHRVMpCiYjNDM7CiBzb3VyY2UgJiMzNDthcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zJiMzNDsKIAogbWVudSAmIzM0O0tlcm5lbCBGZWF0dXJlcyYjMzQ7CkBAIC0xNTgxLDkgJiM0MzsxNTkwLDYgQEAgY29uZmlnIE5VTUEKIAlib29sICYjMzQ7TlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnQmIzM0OwogCXNlbGVjdCBHRU5FUklDX0FSQ0hfTlVNQQogCXNlbGVjdCBPRl9OVU1BCi0Jc2VsZWN0IEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBCi0Jc2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSwotCXNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwogCXNlbGVjdCBVU0VfUEVSQ1BVX05VTUFfTk9ERV9JRAogCWhlbHAKIAkgIEVuYWJsZSBOVU1BIChOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzKSBzdXBwb3J0LgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgKaW5kZXggNWUxMjExYzU0MGFiMjMuLmFhMDgxOGY3ZWM1OGM1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgKQEAgLTYzLDYgJiM0Mzs2Myw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcm02NF9rZXJuZWxfdW5tYXBwZWRfYXRfZWwwKHZvaWQpCiBleHRlcm4gdm9pZCBhcm02NF9tZW1ibG9ja19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBib290bWVtX2luaXQodm9pZCk7CiYjNDM7ZXh0ZXJuIHZvaWQgc2V0dXBfcGVyY3B1X3BnZCh2b2lkKTsKIGV4dGVybiB2b2lkIGNyZWF0ZV9tYXBwaW5nX25vYWxsb2MocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyB2aXJ0LAogCQkJCSAgIHBoeXNfYWRkcl90IHNpemUsIHBncHJvdF90IHByb3QpOwogZXh0ZXJuIHZvaWQgY3JlYXRlX3BnZF9tYXBwaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwaHlzX2FkZHJfdCBwaHlzLApAQCAtNzIsNiAmIzQzOzczLDEwIEBAIGV4dGVybiB2b2lkICpmaXhtYXBfcmVtYXBfZmR0KHBoeXNfYWRkcl90IGR0X3BoeXMsIGludCAqc2l6ZSwgcGdwcm90X3QgcHJvdCk7CiBleHRlcm4gdm9pZCBtYXJrX2xpbmVhcl90ZXh0X2FsaWFzX3JvKHZvaWQpOwogZXh0ZXJuIGludCBzcGxpdF9rZXJuZWxfbGVhZl9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGV4dGVybiB2b2lkIGxpbmVhcl9tYXBfbWF5YmVfc3BsaXRfdG9fcHRlcyh2b2lkKTsKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0MztleHRlcm4gdm9pZCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCwKJiM0MzsJCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKTsKJiM0MzsjZW5kaWYKIAogLyoKICAqIFRoaXMgY2hlY2sgaXMgdHJpZ2dlcmVkIGR1cmluZyB0aGUgZWFybHkgYm9vdCBiZWZvcmUgdGhlIGNwdWZlYXR1cmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCA4MDNiNjg3NTgxNTI3NS4uMGU5OTFiOThlZDllYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTI3LDYgJiM0MzsyNyw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL3RsYmZsdXNoLmgmZ3Q7CiAKIGV4dGVybiBib29sIHJvZGF0YV9mdWxsOwomIzQzO2V4dGVybiBwZ2RfdCAqcGVyY3B1X3BnZFtOUl9DUFVTXTsKIAogc3RhdGljIGlubGluZSB2b2lkIGNvbnRleHRpZHJfdGhyZWFkX3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiB7CkBAIC0xMzgsNyAmIzQzOzEzOSwxMyBAQCB2b2lkIF9fY3B1X3JlcGxhY2VfdHRicjEocGdkX3QgKnBnZHAsIGJvb2wgY25wKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGNwdV9lbmFibGVfc3dhcHBlcl9jbnAodm9pZCkKIHsKLQlfX2NwdV9yZXBsYWNlX3R0YnIxKGxtX2FsaWFzKHN3YXBwZXJfcGdfZGlyKSwgdHJ1ZSk7CiYjNDM7CXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiYjNDM7CXBnZF90ICp0dGJyMSA9IHBlcmNwdV9wZ2RbY3B1XTsKJiM0MzsKJiM0MzsJaWYgKGNwdSA9PSAwKQomIzQzOwkJdHRicjEgPSBsbV9hbGlhcyhzd2FwcGVyX3BnX2Rpcik7CiYjNDM7CiYjNDM7CV9fY3B1X3JlcGxhY2VfdHRicjEodHRicjEsIGZhbHNlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZXBsYWNlX3R0YnIxKHBnZF90ICpwZ2RwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZXJjcHUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmgKaW5kZXggYjU3YjJiYjAwOTY3NzQuLjAzZDE0OWY5MTc3YzBlIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTE0Miw2ICYjNDM7MTQyLDI3IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKQogI3VuZGVmIFBFUkNQVV9PUAogI3VuZGVmIFBFUkNQVV9SRVRfT1AKIAomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUAomIzQzO2V4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9sb2NhbF9vZmY7CiYjNDM7CiYjNDM7I2RlZmluZSBsb2NhbF9jcHVfcHRyKHB0cikJCQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CV9fdmVyaWZ5X3BjcHVfcHRyKHB0cik7CQkJCQkJXAomIzQzOwlTSElGVF9QRVJDUFVfUFRSKHB0ciwgX19wZXJfY3B1X2xvY2FsX29mZik7CQkJXAomIzQzO30pCiYjNDM7CiYjNDM7I2RlZmluZSBfcGNwX3Byb3RlY3Qob3AsIHBjcCwgLi4uKQkJCQkJXAomIzQzOyh7CQkJCQkJCQkJXAomIzQzOwlvcChsb2NhbF9jcHVfcHRyKCZhbXA7KHBjcCkpLCBfX1ZBX0FSR1NfXyk7CQkJCVwKJiM0Mzt9KQomIzQzOwomIzQzOyNkZWZpbmUgX3BjcF9wcm90ZWN0X3JldHVybihvcCwgcGNwLCBhcmdzLi4uKQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CXR5cGVvZihwY3ApIF9fcmV0dmFsOwkJCQkJCVwKJiM0MzsJX19yZXR2YWwgPSAodHlwZW9mKHBjcCkpb3AobG9jYWxfY3B1X3B0cigmYW1wOyhwY3ApKSwgIyNhcmdzKTsJXAomIzQzOwlfX3JldHZhbDsJCQkJCQkJXAomIzQzO30pCiYjNDM7I2Vsc2UKIC8qCiAgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGF2b2lkIHRoZSBjb25kaXRpb25hbCBjYWxsIGludG8gdGhlIHNjaGVkdWxlciB3aGVuCiAgKiByZS1lbmFibGluZyBwcmVlbXB0aW9uIGZvciBwcmVlbXB0aWJsZSBrZXJuZWxzLCBidXQgZG9pbmcgdGhhdCBpbiBhIHdheQpAQCAtMTUyLDcgJiM0MzsxNzMsNiBAQCBQRVJDUFVfUkVUX09QKGFkZCwgYWRkLCBsZGFkZCkKICAqIHByZWVtcHRpb24gcG9pbnQgd2hlbiBUSUZfTkVFRF9SRVNDSEVEIGdldHMgc2V0IHdoaWxlIHByZWVtcHRpb24gaXMKICAqIGRpc2FibGVkLgogICovCi0KICNkZWZpbmUgX3BjcF9wcm90ZWN0KG9wLCBwY3AsIC4uLikJCQkJCVwKICh7CQkJCQkJCQkJXAogCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CQkJCQlcCkBAIC0xNjgsNiAmIzQzOzE4OCw3IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKQogCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsJCQkJCVwKIAlfX3JldHZhbDsJCQkJCQkJXAogfSkKJiM0MzsjZW5kaWYKIAogI2RlZmluZSB0aGlzX2NwdV9yZWFkXzEocGNwKQkJXAogCV9wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfcmVhZF84LCBwY3ApCkBAIC0yNDMsNiAmIzQzOzI2NCwxOSBAQCBQRVJDUFVfUkVUX09QKGFkZCwgYWRkLCBsZGFkZCkKIAogI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnNjQocGNwLCBvLCBuKQl0aGlzX2NwdV9jbXB4Y2hnXzgocGNwLCBvLCBuKQogCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQCiYjNDM7I2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnMTI4KHBjcCwgbywgbikJCQkJCVwKJiM0MzsoewkJCQkJCQkJCVwKJiM0MzsJdHlwZWRlZiB0eXBlb2YocGNwKSBwY3Bfb3BfVF9fOwkJCQkJXAomIzQzOwl1MTI4IG9sZF9fLCBuZXdfXywgcmV0X187CQkJCQlcCiYjNDM7CXBjcF9vcF9UX18gKnB0cl9fOwkJCQkJCVwKJiM0MzsJb2xkX18gPSBvOwkJCQkJCQlcCiYjNDM7CW5ld19fID0gbjsJCQkJCQkJXAomIzQzOwlwdHJfXyA9IGxvY2FsX2NwdV9wdHIoJmFtcDsocGNwKSk7CQkJCQlcCiYjNDM7CXJldF9fID0gY21weGNoZzEyOF9sb2NhbCgodm9pZCAqKXB0cl9fLCBvbGRfXywgbmV3X18pOwkJXAomIzQzOwlyZXRfXzsJCQkJCQkJCVwKJiM0Mzt9KQomIzQzOyNlbHNlCiAjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGcxMjgocGNwLCBvLCBuKQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJdHlwZWRlZiB0eXBlb2YocGNwKSBwY3Bfb3BfVF9fOwkJCQkJXApAQCAtMjU2LDYgJiM0MzsyOTAsNyBAQCBQRVJDUFVfUkVUX09QKGFkZCwgYWRkLCBsZGFkZCkKIAlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CQkJCQlcCiAJcmV0X187CQkJCQkJCQlcCiB9KQomIzQzOyNlbmRpZgogCiAjaWZkZWYgX19LVk1fTlZIRV9IWVBFUlZJU09SX18KIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faHlwX3Blcl9jcHVfb2Zmc2V0KHVuc2lnbmVkIGludCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCAxYjQ1MDlkMzM4MmM2My4uZGQxYWM4NGExMTYwNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0zMywxMSAmIzQzOzMzLDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kcCkKIAlwdWR2YWwgfD0gKG1tID09ICZhbXA7aW5pdF9tbSkgPyBQVURfVEFCTEVfVVhOIDogUFVEX1RBQkxFX1BYTjsKIAlfX3B1ZF9wb3B1bGF0ZShwdWRwLCBfX3BhKHBtZHApLCBwdWR2YWwpOwogfQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkMKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlX3N5bmModW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApCiYjNDM7ewomIzQzOwlwdWRfcG9wdWxhdGUoJmFtcDtpbml0X21tLCBwdWRwLCBwbWRwKTsKJiM0MzsJaWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgJmFtcDsgUEdUQkxfUFVEX01PRElGSUVEKQomIzQzOwkJYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIF9fcHVkX3BvcHVsYXRlKHB1ZF90ICpwdWRwLCBwaHlzX2FkZHJfdCBwbWRwLCBwdWR2YWxfdCBwcm90KQogewogCUJVSUxEX0JVRygpOwogfQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkMKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlX3N5bmModW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApCiYjNDM7ewomIzQzOwlCVUlMRF9CVUcoKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiAjZW5kaWYJLyogQ09ORklHX1BHVEFCTEVfTEVWRUxTICZndDsgMiAqLwogCiAjaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTICZndDsgMwpAQCAtMTIxLDQgJiM0MzsxMzcsMTIgQEAgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCwgcGd0YWJsZV90IHB0ZXApCiAJCSAgICAgICBQTURfVFlQRV9UQUJMRSB8IFBNRF9UQUJMRV9BRiB8IFBNRF9UQUJMRV9QWE4pOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGVfc3luYyh1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwLCBwdGVfdCAqcHRlcCkKJiM0Mzt7CiYjNDM7CXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmFtcDtpbml0X21tLCBwbWRwLCBwdGVwKTsKJiM0MzsJaWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgJmFtcDsgUEdUQkxfUE1EX01PRElGSUVEKQomIzQzOwkJYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMjc2ODljNjJiZDI1ZGQuLjgzY2Q2NTYxMGQ3ZjdkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTgsMTQgJiM0MzsxOCwzNSBAQAogICogVk1BTExPQyByYW5nZS4KICAqCiAgKiBWTUFMTE9DX1NUQVJUOiBiZWdpbm5pbmcgb2YgdGhlIGtlcm5lbCB2bWFsbG9jIHNwYWNlCi0gKiBWTUFMTE9DX0VORDogZXh0ZW5kcyB0byB0aGUgYXZhaWxhYmxlIHNwYWNlIGJlbG93IHZtZW1tYXAKJiM0MzsgKiBWTUFMTE9DX0VORDogZXh0ZW5kcyB0byB0aGUgc3BhY2UgYmVsb3cgZ2xvYmFsIHBlcmNwdSBhcmVhCiAgKi8KICNkZWZpbmUgVk1BTExPQ19TVEFSVAkJKE1PRFVMRVNfRU5EKQomIzQzOyNkZWZpbmUgVk1BTExPQ19FTkQJCShQRVJDUFVfU1RBUlQgLSBTWl84TSkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBFUkNQVSByYW5nZQomIzQzOyAqCiYjNDM7ICogUEVSQ1BVX1NUQVJUOiBiZWdpbm5pbmcgb2YgZ2xvYmFsIHBlcmNwdSBhcmVhCiYjNDM7ICogUEVSQ1BVX0VORDogZW5kIG9mIGdsb2JhbCBwZXJjcHUgYXJlYQomIzQzOyAqIExPQ0FMX1BFUkNQVV9TVEFSVDogYmVnaW5uaW5nIG9mIGxvY2FsIHBlcmNwdSBhcmVhCiYjNDM7ICogTE9DQUxfUEVSQ1BVX0VORDogZW5kIG9mIGxvY2FsIHBlcmNwdSBhcmVhLCBleHRlbmQgdG8gdGhlIGF2YWlsYWJsZQomIzQzOyAqICAgICAgICAgICAgICAgICAgIHNwYWNlIGJlbG93IHZtZW1tYXAKJiM0MzsgKi8KJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNEtfUEFHRVMpCiYjNDM7I2RlZmluZSBQRVJDUFVfU0laRQkJKDIgKiBQR0RJUl9TSVpFKQomIzQzOyNlbGlmIGRlZmluZWQoQ09ORklHX0FSTTY0XzE2S19QQUdFUykKJiM0MzsjZGVmaW5lIFBFUkNQVV9TSVpFICAgICAgICAgICAgKDE2ICogUFVEX1NJWkUpCiYjNDM7I2VsaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNjRLX1BBR0VTKQomIzQzOyNkZWZpbmUgUEVSQ1BVX1NJWkUgICAgICAgICAgICAoUEdESVJfU0laRSkKJiM0MzsjZW5kaWYKJiM0MzsjZGVmaW5lIFBFUkNQVV9TVEFSVAkJKFBFUkNQVV9FTkQgLSBQRVJDUFVfU0laRSkKJiM0MzsjZGVmaW5lIFBFUkNQVV9FTkQJCShMT0NBTF9QRVJDUFVfU1RBUlQpCiYjNDM7I2RlZmluZSBMT0NBTF9QRVJDUFVfU1RBUlQJKExPQ0FMX1BFUkNQVV9FTkQgLSBQRVJDUFVfU0laRSkKICNpZiBWQV9CSVRTID09IFZBX0JJVFNfTUlOCi0jZGVmaW5lIFZNQUxMT0NfRU5ECQkoVk1FTU1BUF9TVEFSVCAtIFNaXzhNKQomIzQzOyNkZWZpbmUgTE9DQUxfUEVSQ1BVX0VORAkoQUxJR05fRE9XTihWTUVNTUFQX1NUQVJULCBQRVJDUFVfU0laRSkpCiAjZWxzZQogI2RlZmluZSBWTUVNTUFQX1VOVVNFRF9OUEFHRVMJKChfUEFHRV9PRkZTRVQodmFiaXRzX2FjdHVhbCkgLSBQQUdFX09GRlNFVCkgJmd0OyZndDsgUEFHRV9TSElGVCkKLSNkZWZpbmUgVk1BTExPQ19FTkQJCShWTUVNTUFQX1NUQVJUICYjNDM7IFZNRU1NQVBfVU5VU0VEX05QQUdFUyAqIHNpemVvZihzdHJ1Y3QgcGFnZSkgLSBTWl84TSkKJiM0MzsjZGVmaW5lIExPQ0FMX1BFUkNQVV9FTkQJKEFMSUdOX0RPV04oKFZNRU1NQVBfU1RBUlQgJiM0MzsgVk1FTU1BUF9VTlVTRURfTlBBR0VTICogc2l6ZW9mKHN0cnVjdCBwYWdlKSksIFBFUkNQVV9TSVpFKSkKICNlbmRpZgogCiAjZGVmaW5lIHZtZW1tYXAJCQkoKHN0cnVjdCBwYWdlICopVk1FTU1BUF9TVEFSVCAtIChtZW1zdGFydF9hZGRyICZndDsmZ3Q7IFBBR0VfU0hJRlQpKQpAQCAtMTIxNiw2ICYjNDM7MTIzNywxNiBAQCBwNGRfdCAqcDRkX29mZnNldF9sb2NrbGVzc19mb2xkZWQocGdkX3QgKnBnZHAsIHBnZF90IHBnZCwgdW5zaWduZWQgbG9uZyBhZGRyKQogCiAjZW5kaWYgIC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyAmZ3Q7IDQgKi8KIAomIzQzOyNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMgomIzQzOyNkZWZpbmUgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyAgICAgIFBHVEJMX1BNRF9NT0RJRklFRAomIzQzOyNlbGlmIENPTkZJR19QR1RBQkxFX0xFVkVMUyA9PSAzCiYjNDM7I2RlZmluZSBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLICAgICAgUEdUQkxfUFVEX01PRElGSUVECiYjNDM7I2VsaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTID09IDQKJiM0MzsjZGVmaW5lIEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgICAgICBQR1RCTF9QNERfTU9ESUZJRUQKJiM0MzsjZWxpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNQomIzQzOyNkZWZpbmUgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyAgICAgIFBHVEJMX1BHRF9NT0RJRklFRAomIzQzOyNlbmRpZgomIzQzOwogI2RlZmluZSBwZ2RfRVJST1IoZSkJXAogCXByX2VycigmIzM0OyVzOiVkOiBiYWQgcGdkICUwMTZsbHguXG4mIzM0OywgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYwppbmRleCAyM2MwNWRjN2E4ZjJhYy4uNmQ0MjBhZDU5YWY0OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYwpAQCAtMzYwLDYgJiM0MzszNjAsOSBAQCB2b2lkIF9faW5pdCBfX25vX3Nhbml0aXplX2FkZHJlc3Mgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogCXNtcF9pbml0X2NwdXMoKTsKIAlzbXBfYnVpbGRfbXBpZHJfaGFzaCgpOwogCiYjNDM7CS8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIHNtcF9pbml0X2NwdXMgKi8KJiM0MzsJc2V0dXBfcGVyY3B1X3BnZCgpOwomIzQzOwogI2lmZGVmIENPTkZJR19BUk02NF9TV19UVEJSMF9QQU4KIAkvKgogCSAqIE1ha2Ugc3VyZSBpbml0X3RocmVhZF9pbmZvLnR0YnIwIGFsd2F5cyBnZW5lcmF0ZXMgdHJhbnNsYXRpb24KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wLmMKaW5kZXggZDQ2MDIyZjcyMDc1NDAuLjRhODExMzc5YzE5MTYyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9zbXAuYwpAQCAtNTUsNiAmIzQzOzU1LDggQEAKIAogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9pcGkuaCZndDsKIAomIzQzO2V4dGVybiB2b2lkIGlkbWFwX2NwdV9yZXBsYWNlX3R0YnIxKHBoeXNfYWRkcl90IHBnZGlyKTsKJiM0MzsKIC8qCiAgKiBhcyBmcm9tIDIuNSwga2VybmVscyBubyBsb25nZXIgaGF2ZSBhbiBpbml0X3Rhc2tzIHN0cnVjdHVyZQogICogc28gd2UgbmVlZCBzb21lIG90aGVyIHdheSBvZiB0ZWxsaW5nIGEgbmV3IHNlY29uZGFyeSBjb3JlCkBAIC0xOTgsNiAmIzQzOzIwMCwxMiBAQCBhc21saW5rYWdlIG5vdHJhY2Ugdm9pZCBzZWNvbmRhcnlfc3RhcnRfa2VybmVsKHZvaWQpCiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSAmYW1wO2luaXRfbW07CiAJY29uc3Qgc3RydWN0IGNwdV9vcGVyYXRpb25zICpvcHM7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKJiM0MzsJdHlwZWRlZiB2b2lkICh0dGJyX3JlcGxhY2VfZnVuYykocGh5c19hZGRyX3QpOwomIzQzOwl0dGJyX3JlcGxhY2VfZnVuYyAqcmVwbGFjZV90dGJyOwomIzQzOwomIzQzOwlwaHlzX2FkZHJfdCB0dGJyMSA9IHBoeXNfdG9fdHRicih2aXJ0X3RvX3BoeXMocGVyY3B1X3BnZFtjcHVdKSk7CiYjNDM7CXJlcGxhY2VfdHRiciA9ICh2b2lkICopX19wYV9zeW1ib2woaWRtYXBfY3B1X3JlcGxhY2VfdHRicjEpOwomIzQzOwlyZXBsYWNlX3R0YnIodHRicjEpOwogCiAJLyoKIAkgKiBBbGwga2VybmVsIHRocmVhZHMgc2hhcmUgdGhlIHNhbWUgbW0gY29udGV4dDsgZ3JhYiBhCkBAIC04MTksNiAmIzQzOzgyNyw0MiBAQCB2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIAl9CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX05VTUEKJiM0MztleHRlcm4gaW50IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXTsKJiM0MzsKJiM0MztpbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXJldHVybiBjcHVfdG9fbm9kZV9tYXBbY3B1XTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQQomIzQzO3Vuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5OwomIzQzO0VYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7CiYjNDM7LyogVXNlZCB0byBjYWxjdWxhdGUgcGNwdSBsb2NhbCBhZGRyZXNzLCB0aGUgb2Zmc2V0IGlzIHNhbWUgZm9yIGFsbCBDUFVzICovCiYjNDM7dW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfbG9jYWxfb2ZmIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MztFWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9sb2NhbF9vZmYpOwomIzQzOwomIzQzO3ZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVsdGE7CiYjNDM7CXVuc2lnbmVkIGludCBjcHU7CiYjNDM7CWludCByYyA9IC1FSU5WQUw7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwomIzQzOwkvKiBQQ1BVIHBhZ2UgdGFibGUganVzdCBjYW4gc3VwcG9ydCBQQ1BVX0ZDX1BBR0UgKi8KJiM0MzsJcmMgPSBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLCBlYXJseV9jcHVfdG9fbm9kZSk7CiYjNDM7I2VuZGlmCiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlwYW5pYygmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHBlcmNwdSBhcmVhcyAoZXJyPSVkKS4mIzM0OywgcmMpOwomIzQzOwomIzQzOwlkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0OwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQomIzQzOwkJX19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgJiM0MzsgcGNwdV91bml0X29mZnNldHNbY3B1XTsKJiM0MzsJX19wZXJfY3B1X2xvY2FsX29mZiA9ICh1bnNpZ25lZCBsb25nKXBjcHVfbG9jYWxfYmFzZSAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgY29uc3QgY2hhciAqaXBpX3R5cGVzW01BWF9JUEldIF9fdHJhY2Vwb2ludF9zdHJpbmcgPSB7CiAJW0lQSV9SRVNDSEVEVUxFXQk9ICYjMzQ7UmVzY2hlZHVsaW5nIGludGVycnVwdHMmIzM0OywKIAlbSVBJX0NBTExfRlVOQ10JCT0gJiMzNDtGdW5jdGlvbiBjYWxsIGludGVycnVwdHMmIzM0OywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0va2FzYW5faW5pdC5jIGIvYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmMKaW5kZXggM2ZjYWQ5NTZmZGY3Y2IuLmE4ZTI3MmJmZWZlMWExIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYwpAQCAtNjAsMTMgJiM0Mzs2MCwxNCBAQCBzdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IGthc2FuX2FsbG9jX3Jhd19wYWdlKGludCBub2RlKQogfQogCiBzdGF0aWMgcHRlX3QgKl9faW5pdCBrYXNhbl9wdGVfb2Zmc2V0KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlLAotCQkJCSAgICAgIGJvb2wgZWFybHkpCiYjNDM7CQkJCSAgICAgIGJvb2wgZWFybHksIHBndGJsX21vZF9tYXNrICptYXNrKQogewogCWlmIChwbWRfbm9uZShSRUFEX09OQ0UoKnBtZHApKSkgewogCQlwaHlzX2FkZHJfdCBwdGVfcGh5cyA9IGVhcmx5ID8KIAkJCQlfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcHRlKQogCQkJCQk6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpOwogCQlfX3BtZF9wb3B1bGF0ZShwbWRwLCBwdGVfcGh5cywgUE1EX1RZUEVfVEFCTEUpOwomIzQzOwkJKm1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEOwogCX0KIAogCXJldHVybiBlYXJseSA/IHB0ZV9vZmZzZXRfa2ltZyhwbWRwLCBhZGRyKQpAQCAtNzQsNDkgJiM0Mzs3NSw1MyBAQCBzdGF0aWMgcHRlX3QgKl9faW5pdCBrYXNhbl9wdGVfb2Zmc2V0KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlLAogfQogCiBzdGF0aWMgcG1kX3QgKl9faW5pdCBrYXNhbl9wbWRfb2Zmc2V0KHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlLAotCQkJCSAgICAgIGJvb2wgZWFybHkpCiYjNDM7CQkJCSAgICAgIGJvb2wgZWFybHksIHBndGJsX21vZF9tYXNrICptYXNrKQogewogCWlmIChwdWRfbm9uZShSRUFEX09OQ0UoKnB1ZHApKSkgewogCQlwaHlzX2FkZHJfdCBwbWRfcGh5cyA9IGVhcmx5ID8KIAkJCQlfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcG1kKQogCQkJCQk6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpOwogCQlfX3B1ZF9wb3B1bGF0ZShwdWRwLCBwbWRfcGh5cywgUFVEX1RZUEVfVEFCTEUpOwomIzQzOwkJKm1hc2sgfD0gUEdUQkxfUFVEX01PRElGSUVEOwogCX0KIAogCXJldHVybiBlYXJseSA/IHBtZF9vZmZzZXRfa2ltZyhwdWRwLCBhZGRyKSA6IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7CiB9CiAKIHN0YXRpYyBwdWRfdCAqX19pbml0IGthc2FuX3B1ZF9vZmZzZXQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUsCi0JCQkJICAgICAgYm9vbCBlYXJseSkKJiM0MzsJCQkJICAgICAgYm9vbCBlYXJseSwgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJaWYgKHA0ZF9ub25lKFJFQURfT05DRSgqcDRkcCkpKSB7CiAJCXBoeXNfYWRkcl90IHB1ZF9waHlzID0gZWFybHkgPwogCQkJCV9fcGFfc3ltYm9sKGthc2FuX2Vhcmx5X3NoYWRvd19wdWQpCiAJCQkJCToga2FzYW5fYWxsb2NfemVyb2VkX3BhZ2Uobm9kZSk7CiAJCV9fcDRkX3BvcHVsYXRlKHA0ZHAsIHB1ZF9waHlzLCBQNERfVFlQRV9UQUJMRSk7CiYjNDM7CQkqbWFzayB8PSBQR1RCTF9QNERfTU9ESUZJRUQ7CiAJfQogCiAJcmV0dXJuIGVhcmx5ID8gcHVkX29mZnNldF9raW1nKHA0ZHAsIGFkZHIpIDogcHVkX29mZnNldChwNGRwLCBhZGRyKTsKIH0KIAogc3RhdGljIHA0ZF90ICpfX2luaXQga2FzYW5fcDRkX29mZnNldChwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSwKLQkJCQkgICAgICBib29sIGVhcmx5KQomIzQzOwkJCQkgICAgICBib29sIGVhcmx5LCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlpZiAocGdkX25vbmUoUkVBRF9PTkNFKCpwZ2RwKSkpIHsKIAkJcGh5c19hZGRyX3QgcDRkX3BoeXMgPSBlYXJseSA/CiAJCQkJX19wYV9zeW1ib2woa2FzYW5fZWFybHlfc2hhZG93X3A0ZCkKIAkJCQkJOiBrYXNhbl9hbGxvY196ZXJvZWRfcGFnZShub2RlKTsKIAkJX19wZ2RfcG9wdWxhdGUocGdkcCwgcDRkX3BoeXMsIFBHRF9UWVBFX1RBQkxFKTsKJiM0MzsJCSptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDsKIAl9CiAKIAlyZXR1cm4gZWFybHkgPyBwNGRfb2Zmc2V0X2tpbWcocGdkcCwgYWRkcikgOiBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcHRlX3BvcHVsYXRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5KQomIzQzOwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHksCiYjNDM7CQkJCSAgICAgIHBndGJsX21vZF9tYXNrICptYXNrKQogewogCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQlwdGVfdCAqcHRlcCA9IGthc2FuX3B0ZV9vZmZzZXQocG1kcCwgYWRkciwgbm9kZSwgZWFybHkpOwomIzQzOwlwdGVfdCAqcHRlcCA9IGthc2FuX3B0ZV9vZmZzZXQocG1kcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spOwogCiAJZG8gewogCQlwaHlzX2FkZHJfdCBwYWdlX3BoeXMgPSBlYXJseSA/CkBAIC0xMzAsMzggJiM0MzsxMzUsNDEgQEAgc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcG1kX3BvcHVsYXRlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5KQomIzQzOwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHksCiYjNDM7CQkJCSAgICAgIHBndGJsX21vZF9tYXNrICptYXNrKQogewogCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQlwbWRfdCAqcG1kcCA9IGthc2FuX3BtZF9vZmZzZXQocHVkcCwgYWRkciwgbm9kZSwgZWFybHkpOwomIzQzOwlwbWRfdCAqcG1kcCA9IGthc2FuX3BtZF9vZmZzZXQocHVkcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spOwogCiAJZG8gewogCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWthc2FuX3B0ZV9wb3B1bGF0ZShwbWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7CiYjNDM7CQlrYXNhbl9wdGVfcG9wdWxhdGUocG1kcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHksIG1hc2spOwogCX0gd2hpbGUgKHBtZHAmIzQzOyYjNDM7LCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQgJmFtcDsmYW1wOyBwbWRfbm9uZShSRUFEX09OQ0UoKnBtZHApKSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wdWRfcG9wdWxhdGUocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpCiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSwKJiM0MzsJCQkJICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwotCXB1ZF90ICpwdWRwID0ga2FzYW5fcHVkX29mZnNldChwNGRwLCBhZGRyLCBub2RlLCBlYXJseSk7CiYjNDM7CXB1ZF90ICpwdWRwID0ga2FzYW5fcHVkX29mZnNldChwNGRwLCBhZGRyLCBub2RlLCBlYXJseSwgbWFzayk7CiAKIAlkbyB7CiAJCW5leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJa2FzYW5fcG1kX3BvcHVsYXRlKHB1ZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5KTsKJiM0MzsJCWthc2FuX3BtZF9wb3B1bGF0ZShwdWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgbWFzayk7CiAJfSB3aGlsZSAocHVkcCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCAmYW1wOyZhbXA7IHB1ZF9ub25lKFJFQURfT05DRSgqcHVkcCkpKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSkKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5LAomIzQzOwkJCQkgICAgICBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAl1bnNpZ25lZCBsb25nIG5leHQ7Ci0JcDRkX3QgKnA0ZHAgPSBrYXNhbl9wNGRfb2Zmc2V0KHBnZHAsIGFkZHIsIG5vZGUsIGVhcmx5KTsKJiM0MzsJcDRkX3QgKnA0ZHAgPSBrYXNhbl9wNGRfb2Zmc2V0KHBnZHAsIGFkZHIsIG5vZGUsIGVhcmx5LCBtYXNrKTsKIAogCWRvIHsKIAkJbmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlrYXNhbl9wdWRfcG9wdWxhdGUocDRkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHkpOwomIzQzOwkJa2FzYW5fcHVkX3BvcHVsYXRlKHA0ZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5LCBtYXNrKTsKIAl9IHdoaWxlIChwNGRwJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kICZhbXA7JmFtcDsgcDRkX25vbmUoUkVBRF9PTkNFKCpwNGRwKSkpOwogfQogCkBAIC0xNzAsMTIgJiM0MzsxNzgsMTcgQEAgc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BnZF9wb3B1bGF0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogewogCXVuc2lnbmVkIGxvbmcgbmV4dDsKIAlwZ2RfdCAqcGdkcDsKJiM0MzsJcGd0YmxfbW9kX21hc2sgbWFzayA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBhZGRyOwogCiAJcGdkcCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKIAlkbyB7CiAJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJa2FzYW5fcDRkX3BvcHVsYXRlKHBnZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5KTsKJiM0MzsJCWthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgJmFtcDttYXNrKTsKIAl9IHdoaWxlIChwZ2RwJiM0MzsmIzQzOywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKJiM0MzsKJiM0MzsJaWYgKG1hc2sgJmFtcDsgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSykKJiM0MzsJCWFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIGVuZCk7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUk02NF82NEtfUEFHRVMpIHx8IENPTkZJR19QR1RBQkxFX0xFVkVMUyAmZ3Q7IDQKQEAgLTMxMSw3ICYjNDM7MzI0LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGthc2FuX2luaXRfc2hhZG93KHZvaWQpCiAKIAltb2Rfc2hhZG93X3N0YXJ0ID0gKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopTU9EVUxFU19WQUREUik7CiAKLQl2bWFsbG9jX3NoYWRvd19lbmQgPSAodTY0KWthc2FuX21lbV90b19zaGFkb3coKHZvaWQgKilWTUFMTE9DX0VORCk7CiYjNDM7CXZtYWxsb2Nfc2hhZG93X2VuZCA9ICh1NjQpa2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKUxPQ0FMX1BFUkNQVV9FTkQpOwogCiAJLyoKIAkgKiBXZSBhcmUgZ29pbmcgdG8gcGVyZm9ybSBwcm9wZXIgc2V0dXAgb2Ygc2hhZG93IG1lbW9yeS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vbW11LmMgYi9hcmNoL2FybTY0L21tL21tdS5jCmluZGV4IGYyYmU1MDE0NjhjZTVhLi5lZTRhYjAzMWViZjhkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL21tdS5jCkBAIC02Nyw2ICYjNDM7NjcsNjMgQEAgbG9uZyBfX3NlY3Rpb24oJiMzNDsubW11b2ZmLmRhdGEud3JpdGUmIzM0OykgX19lYXJseV9jcHVfYm9vdF9zdGF0dXM7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN3YXBwZXJfcGdkaXJfbG9jayk7CiBzdGF0aWMgREVGSU5FX01VVEVYKGZpeG1hcF9sb2NrKTsKIAomIzQzO3BnZF90ICpwZXJjcHVfcGdkW05SX0NQVVNdIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0Mztib29sIHBlcmNwdV9wZ2Rfc2V0dXBfZG9uZSBfX3JvX2FmdGVyX2luaXQgPSBmYWxzZTsKJiM0MzsKJiM0Mzt2b2lkIF9faW5pdCBzZXR1cF9wZXJjcHVfcGdkKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiYjNDM7CQl2b2lkICphZGRyOwomIzQzOwomIzQzOwkJaWYgKGNwdSA9PSAwKSB7CiYjNDM7CQkJcGVyY3B1X3BnZFtjcHVdID0gc3dhcHBlcl9wZ19kaXI7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlhZGRyID0gbWVtYmxvY2tfYWxsb2MoUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwomIzQzOwkJaWYgKCFhZGRyKQomIzQzOwkJCXBhbmljKCYjMzQ7Q2FuJiMzOTt0IGFsbG9jIHBlcmNwdSBwZ2RcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCW1lbWNweShhZGRyLCAodm9pZCAqKXN3YXBwZXJfcGdfZGlyLCBQQUdFX1NJWkUpOwomIzQzOwkJcGVyY3B1X3BnZFtjcHVdID0gKHBnZF90ICopYWRkcjsKJiM0MzsJfQomIzQzOwomIzQzOwlkc2IoaXNoc3QpOwomIzQzOwomIzQzOwlwZXJjcHVfcGdkX3NldHVwX2RvbmUgPSB0cnVlOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHIsIG5leHQ7CiYjNDM7CWludCBjcHU7CiYjNDM7CXBnZF90ICpwZ2RwID0gcGdkX29mZnNldF9rKHN0YXJ0KTsKJiM0MzsJcGdkX3QgcGdkOwomIzQzOwl1bnNpZ25lZCBpbnQgaW5kZXggPSBwZ2RfaW5kZXgoc3RhcnQpOwomIzQzOwomIzQzOwlCVUdfT04oc3RhcnQgJmd0OyBlbmQpOwomIzQzOwomIzQzOwlpZiAoIXBlcmNwdV9wZ2Rfc2V0dXBfZG9uZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogRG9uJiMzOTt0IHN5bmMgbG9jYWwgcGVyY3B1IGFyZWEgcGFnZSB0YWJsZSAqLwomIzQzOwlpZiAoc3RhcnQgJmd0Oz0gTE9DQUxfUEVSQ1BVX1NUQVJUICZhbXA7JmFtcDsgZW5kICZsdDsgTE9DQUxfUEVSQ1BVX0VORCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJYWRkciA9IHN0YXJ0OwomIzQzOwlkbyB7CiYjNDM7CQlwZ2QgPSBSRUFEX09OQ0UoKnBnZHApOwomIzQzOwkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwomIzQzOwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewomIzQzOwkJCWlmIChjcHUgPT0gMCkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJc2V0X3BnZChwZXJjcHVfcGdkW2NwdV0gJiM0MzsgaW5kZXgsIHBnZCk7CiYjNDM7CQl9CiYjNDM7CX0gd2hpbGUgKHBnZHAmIzQzOyYjNDM7LCBpbmRleCYjNDM7JiM0MzssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiYjNDM7fQomIzQzOwogdm9pZCBub2luc3RyIHNldF9zd2FwcGVyX3BnZChwZ2RfdCAqcGdkcCwgcGdkX3QgcGdkKQogewogCXBnZF90ICpmaXhtYXBfcGdkcDsKQEAgLTE2MSw3ICYjNDM7MjE4LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9jbGVhcl9wZ3RhYmxlKHZvaWQgKnRhYmxlKQogfQogCiBzdGF0aWMgdm9pZCBpbml0X3B0ZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKLQkJICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90KQomIzQzOwkJICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlkbyB7CiAJCXB0ZV90IG9sZF9wdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApOwpAQCAtMTcxLDYgJiM0MzsyMjgsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3B0ZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJICogYXJlIGRlZmVycmVkIHRvIHRoZSBlbmQgb2YgYWxsb2NfaW5pdF9jb250X3B0ZSgpLgogCQkgKi8KIAkJX19zZXRfcHRlX25vc3luYyhwdGVwLCBwZm5fcHRlKF9fcGh5c190b19wZm4ocGh5cyksIHByb3QpKTsKJiM0MzsJCSptYXNrIHw9IFBHVEJMX1BURV9NT0RJRklFRDsKIAogCQkvKgogCQkgKiBBZnRlciB0aGUgUFRFIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZQpAQCAtMTk4LDcgJiM0MzsyNTYsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgcGh5c19hZGRyX3QgcGh5cywKIAkJCSAgICAgICBwZ3Byb3RfdCBwcm90LAogCQkJICAgICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSwKLQkJCSAgICAgICBpbnQgZmxhZ3MpCiYjNDM7CQkJICAgICAgIGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwogCXBtZF90IHBtZCA9IFJFQURfT05DRSgqcG1kcCk7CkBAIC0yMTksNiAmIzQzOzI3Nyw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlpbml0X2NsZWFyX3BndGFibGUocHRlcCk7CiAJCXB0ZXAgJiM0Mzs9IHB0ZV9pbmRleChhZGRyKTsKIAkJX19wbWRfcG9wdWxhdGUocG1kcCwgcHRlX3BoeXMsIHBtZHZhbCk7CiYjNDM7CQkqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7CiAJfSBlbHNlIHsKIAkJQlVHX09OKHBtZF9iYWQocG1kKSk7CiAJCXB0ZXAgPSBwdGVfc2V0X2ZpeG1hcF9vZmZzZXQocG1kcCwgYWRkcik7CkBAIC0yMzUsNyAmIzQzOzI5NCw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkgICAgIXB0ZV9yYW5nZV9oYXNfdmFsaWRfbm9uY29udChwdGVwKSkKIAkJCV9fcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7CiAKLQkJaW5pdF9wdGUocHRlcCwgYWRkciwgbmV4dCwgcGh5cywgX19wcm90KTsKJiM0MzsJCWluaXRfcHRlKHB0ZXAsIGFkZHIsIG5leHQsIHBoeXMsIF9fcHJvdCwgbWFzayk7CiAKIAkJcHRlcCAmIzQzOz0gcHRlX2luZGV4KG5leHQpIC0gcHRlX2luZGV4KGFkZHIpOwogCQlwaHlzICYjNDM7PSBuZXh0IC0gYWRkcjsKQEAgLTI1Myw3ICYjNDM7MzEyLDggQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcHRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAKIHN0YXRpYyBpbnQgaW5pdF9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCSAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LAotCQkgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLCBpbnQgZmxhZ3MpCiYjNDM7CQkgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLCBpbnQgZmxhZ3MsCiYjNDM7CQkgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwogCkBAIC0yNjYsNyAmIzQzOzMyNiwxMCBAQCBzdGF0aWMgaW50IGluaXRfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQlpZiAoKChhZGRyIHwgbmV4dCB8IHBoeXMpICZhbXA7IH5QTURfTUFTSykgPT0gMCAmYW1wOyZhbXA7CiAJCSAgICAoZmxhZ3MgJmFtcDsgTk9fQkxPQ0tfTUFQUElOR1MpID09IDAgJmFtcDsmYW1wOwogCQkgICAgIXBtZF90YWJsZShvbGRfcG1kKSkgewotCQkJV0FSTl9PTighcG1kX3NldF9odWdlKHBtZHAsIHBoeXMsIHByb3QpKTsKJiM0MzsJCQlpZiAocG1kX3NldF9odWdlKHBtZHAsIHBoeXMsIHByb3QpKQomIzQzOwkJCQkqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlXQVJOX09OKDEpOwogCiAJCQkvKgogCQkJICogQWZ0ZXIgdGhlIFBNRCBlbnRyeSBoYXMgYmVlbiBwb3B1bGF0ZWQgb25jZSwgd2UKQEAgLTI3OCw3ICYjNDM7MzQxLDcgQEAgc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWludCByZXQ7CiAKIAkJCXJldCA9IGFsbG9jX2luaXRfY29udF9wdGUocG1kcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCwKLQkJCQkJCSAgcGd0YWJsZV9hbGxvYywgZmxhZ3MpOwomIzQzOwkJCQkJCSAgcGd0YWJsZV9hbGxvYywgZmxhZ3MsIG1hc2spOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCkBAIC0zMDYsNyAmIzQzOzM2OSw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3BtZChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzLAogCQkJICAgICAgIHBncHJvdF90IHByb3QsCiAJCQkgICAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLAotCQkJICAgICAgIGludCBmbGFncykKJiM0MzsJCQkgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTMzMSw2ICYjNDM7Mzk0LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCWluaXRfY2xlYXJfcGd0YWJsZShwbWRwKTsKIAkJcG1kcCAmIzQzOz0gcG1kX2luZGV4KGFkZHIpOwogCQlfX3B1ZF9wb3B1bGF0ZShwdWRwLCBwbWRfcGh5cywgcHVkdmFsKTsKJiM0MzsJCSptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDsKIAl9IGVsc2UgewogCQlCVUdfT04ocHVkX2JhZChwdWQpKTsKIAkJcG1kcCA9IHBtZF9zZXRfZml4bWFwX29mZnNldChwdWRwLCBhZGRyKTsKQEAgLTM0Nyw3ICYjNDM7NDExLDggQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCSAgICAhcG1kX3JhbmdlX2hhc192YWxpZF9ub25jb250KHBtZHApKQogCQkJX19wcm90ID0gX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IFBURV9DT05UKTsKIAotCQlyZXQgPSBpbml0X3BtZChwbWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsIHBndGFibGVfYWxsb2MsIGZsYWdzKTsKJiM0MzsJCXJldCA9IGluaXRfcG1kKHBtZHAsIGFkZHIsIG5leHQsIHBoeXMsIF9fcHJvdCwgcGd0YWJsZV9hbGxvYywgZmxhZ3MsCiYjNDM7CQkJICAgICAgIG1hc2spOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAKQEAgLTM2NCw3ICYjNDM7NDI5LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LAogCQkJICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksCi0JCQkgIGludCBmbGFncykKJiM0MzsJCQkgIGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwpAQCAtMzg1LDYgJiM0Mzs0NTAsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQlpbml0X2NsZWFyX3BndGFibGUocHVkcCk7CiAJCXB1ZHAgJiM0Mzs9IHB1ZF9pbmRleChhZGRyKTsKIAkJX19wNGRfcG9wdWxhdGUocDRkcCwgcHVkX3BoeXMsIHA0ZHZhbCk7CiYjNDM7CQkqbWFzayB8PSBQR1RCTF9QNERfTU9ESUZJRUQ7CiAJfSBlbHNlIHsKIAkJQlVHX09OKHA0ZF9iYWQocDRkKSk7CiAJCXB1ZHAgPSBwdWRfc2V0X2ZpeG1hcF9vZmZzZXQocDRkcCwgYWRkcik7CkBAIC00MDIsNyAmIzQzOzQ2OCwxMCBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkgICAoKGFkZHIgfCBuZXh0IHwgcGh5cykgJmFtcDsgflBVRF9NQVNLKSA9PSAwICZhbXA7JmFtcDsKIAkJICAgIChmbGFncyAmYW1wOyBOT19CTE9DS19NQVBQSU5HUykgPT0gMCAmYW1wOyZhbXA7CiAJCSAgICAhcHVkX3RhYmxlKG9sZF9wdWQpKSB7Ci0JCQlXQVJOX09OKCFwdWRfc2V0X2h1Z2UocHVkcCwgcGh5cywgcHJvdCkpOwomIzQzOwkJCWlmIChwdWRfc2V0X2h1Z2UocHVkcCwgcGh5cywgcHJvdCkpCiYjNDM7CQkJCSptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCVdBUk5fT04oMSk7CiAKIAkJCS8qCiAJCQkgKiBBZnRlciB0aGUgUFVEIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZQpAQCAtNDEyLDcgJiM0Mzs0ODEsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCQkJICAgICAgUkVBRF9PTkNFKHB1ZF92YWwoKnB1ZHApKSkpOwogCQl9IGVsc2UgewogCQkJcmV0ID0gYWxsb2NfaW5pdF9jb250X3BtZChwdWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBwcm90LAotCQkJCQkJICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7CiYjNDM7CQkJCQkJICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7CiAJCQlpZiAocmV0KQogCQkJCWdvdG8gb3V0OwogCkBAIC00MzEsNyAmIzQzOzUwMCw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wdWQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiBzdGF0aWMgaW50IGFsbG9jX2luaXRfcDRkKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LAogCQkJICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksCi0JCQkgIGludCBmbGFncykKJiM0MzsJCQkgIGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC00NTIsNiAmIzQzOzUyMSw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wNGQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCWluaXRfY2xlYXJfcGd0YWJsZShwNGRwKTsKIAkJcDRkcCAmIzQzOz0gcDRkX2luZGV4KGFkZHIpOwogCQlfX3BnZF9wb3B1bGF0ZShwZ2RwLCBwNGRfcGh5cywgcGdkdmFsKTsKJiM0MzsJCSptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDsKIAl9IGVsc2UgewogCQlCVUdfT04ocGdkX2JhZChwZ2QpKTsKIAkJcDRkcCA9IHA0ZF9zZXRfZml4bWFwX29mZnNldChwZ2RwLCBhZGRyKTsKQEAgLTQ2Myw3ICYjNDM7NTMzLDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X3A0ZChwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJbmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCiAJCXJldCA9IGFsbG9jX2luaXRfcHVkKHA0ZHAsIGFkZHIsIG5leHQsIHBoeXMsIHByb3QsCi0JCQkJICAgICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7CiYjNDM7CQkJCSAgICAgcGd0YWJsZV9hbGxvYywgZmxhZ3MsIG1hc2spOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAKQEAgLTQ4Myw3ICYjNDM7NTUzLDcgQEAgc3RhdGljIGludCBfX2NyZWF0ZV9wZ2RfbWFwcGluZ19sb2NrZWQocGdkX3QgKnBnZGlyLCBwaHlzX2FkZHJfdCBwaHlzLAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZpcnQsIHBoeXNfYWRkcl90IHNpemUsCiAJCQkJICAgICAgIHBncHJvdF90IHByb3QsCiAJCQkJICAgICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSwKLQkJCQkgICAgICAgaW50IGZsYWdzKQomIzQzOwkJCQkgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgYWRkciwgZW5kLCBuZXh0OwpAQCAtNTAzLDcgJiM0Mzs1NzMsNyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nX2xvY2tlZChwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsCiAJZG8gewogCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CiAJCXJldCA9IGFsbG9jX2luaXRfcDRkKHBnZHAsIGFkZHIsIG5leHQsIHBoeXMsIHByb3QsIHBndGFibGVfYWxsb2MsCi0JCQkJICAgICBmbGFncyk7CiYjNDM7CQkJCSAgICAgZmxhZ3MsIG1hc2spOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAkJcGh5cyAmIzQzOz0gbmV4dCAtIGFkZHI7CkBAIC01MTYsMTMgJiM0Mzs1ODYsMTMgQEAgc3RhdGljIGludCBfX2NyZWF0ZV9wZ2RfbWFwcGluZyhwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsCiAJCQkJdW5zaWduZWQgbG9uZyB2aXJ0LCBwaHlzX2FkZHJfdCBzaXplLAogCQkJCXBncHJvdF90IHByb3QsCiAJCQkJcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLAotCQkJCWludCBmbGFncykKJiM0MzsJCQkJaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmYW1wO2ZpeG1hcF9sb2NrKTsKIAlyZXQgPSBfX2NyZWF0ZV9wZ2RfbWFwcGluZ19sb2NrZWQocGdkaXIsIHBoeXMsIHZpcnQsIHNpemUsIHByb3QsCi0JCQkJCSAgcGd0YWJsZV9hbGxvYywgZmxhZ3MpOwomIzQzOwkJCQkJICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Zml4bWFwX2xvY2spOwogCiAJcmV0dXJuIHJldDsKQEAgLTUzNSw5ICYjNDM7NjA1LDEwIEBAIHN0YXRpYyB2b2lkIGVhcmx5X2NyZWF0ZV9wZ2RfbWFwcGluZyhwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsCiAJCQkJICAgICBpbnQgZmxhZ3MpCiB7CiAJaW50IHJldDsKJiM0MzsJcGd0YmxfbW9kX21hc2sgbWFzayA9IDA7CiAKIAlyZXQgPSBfX2NyZWF0ZV9wZ2RfbWFwcGluZyhwZ2RpciwgcGh5cywgdmlydCwgc2l6ZSwgcHJvdCwgcGd0YWJsZV9hbGxvYywKLQkJCQkgICBmbGFncyk7CiYjNDM7CQkJCSAgIGZsYWdzLCAmYW1wO21hc2spOwogCWlmIChyZXQpCiAJCXBhbmljKCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBwYWdlIHRhYmxlc1xuJiMzNDspOwogfQpAQCAtMTAwOSw2ICYjNDM7MTA4MCwyOSBAQCB2b2lkIF9faW5pdCBsaW5lYXJfbWFwX21heWJlX3NwbGl0X3RvX3B0ZXModm9pZCkKIAl9CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0Mzt2b2lkIF9faW5pdCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCwKJiM0MzsJCQkgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKQomIzQzO3sKJiM0MzsJaW50IGksIHJldDsKJiM0MzsJcGd0YmxfbW9kX21hc2sgbWFzayA9IDA7CiYjNDM7CiYjNDM7CWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnI7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlwaHlzX2FkZHJfdCBwaHlzID0gcGFnZV90b19waHlzKHBhZ2VzW2ldKTsKJiM0MzsJCXJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHBlcmNwdV9wZ2RbY3B1XSwgcGh5cywgdmlydCwgUEFHRV9TSVpFLCBQQUdFX0tFUk5FTCwKJiM0MzsJCQkJCSAgIGVhcmx5X3BndGFibGVfYWxsb2MsIE5PX0VYRUNfTUFQUElOR1MsICZhbXA7bWFzayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXBhbmljKCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBsb2NhbCBwZXJjcHUgZmlyc3QgY2h1bmtcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCXZpcnQgJiM0Mzs9IFBBR0VfU0laRTsKJiM0MzsJfQomIzQzOwomIzQzOwlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKgogICogVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIHRvIG1vZGlmeSBleGlzdGluZyB0YWJsZSBlbnRyaWVzLAogICogd2l0aG91dCBhbGxvY2F0aW5nIG5ldyBsZXZlbHMgb2YgdGFibGUuIE5vdGUgdGhhdCB0aGlzIHBlcm1pdHMgdGhlCkBAIC0xMjc5LDYgJiM0MzsxMzczLDcgQEAgc3RhdGljIGludCBfX2luaXQgX19rcHRpX2luc3RhbGxfbmdfbWFwcGluZ3Modm9pZCAqX191bnVzZWQpCiAKIAlpZiAoIWNwdSkgewogCQlpbnQgcmV0OwomIzQzOwkJcGd0YmxfbW9kX21hc2sgbWFzayA9IDA7CiAKIAkJYWxsb2MgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMgfCBfX0dGUF9aRVJPLCBvcmRlcik7CiAJCWtwdGlfbmdfdGVtcF9wZ2QgPSAocGdkX3QgKikoYWxsb2MgJiM0MzsgKGxldmVscyAtIDEpICogUEFHRV9TSVpFKTsKQEAgLTEzMDIsNyAmIzQzOzEzOTcsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX2twdGlfaW5zdGFsbF9uZ19tYXBwaW5ncyh2b2lkICpfX3VudXNlZCkKIAkJLy8KIAkJcmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmdfbG9ja2VkKGtwdGlfbmdfdGVtcF9wZ2QsIF9fcGEoYWxsb2MpLAogCQkJCQkJICBLUFRJX05HX1RFTVBfVkEsIFBBR0VfU0laRSwgUEFHRV9LRVJORUwsCi0JCQkJCQkgIGtwdGlfbmdfcGdkX2FsbG9jLCAwKTsKJiM0MzsJCQkJCQkgIGtwdGlfbmdfcGdkX2FsbG9jLCAwLCAmYW1wO21hc2spOwogCQlpZiAocmV0KQogCQkJcGFuaWMoJiMzNDtGYWlsZWQgdG8gY3JlYXRlIHBhZ2UgdGFibGVzXG4mIzM0Oyk7CiAJfQpAQCAtMTYwOCw3ICYjNDM7MTcwMyw3IEBAIHN0YXRpYyB2b2lkIHVubWFwX2hvdHBsdWdfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAogc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgZmxvb3IsCi0JCQkJIHVuc2lnbmVkIGxvbmcgY2VpbGluZykKJiM0MzsJCQkJIHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJcHRlX3QgKnB0ZXAsIHB0ZTsKIAl1bnNpZ25lZCBsb25nIGksIHN0YXJ0ID0gYWRkcjsKQEAgLTE2MjQsNiAmIzQzOzE3MTksNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQlXQVJOX09OKCFwdGVfbm9uZShwdGUpKTsKIAl9IHdoaWxlIChhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGFkZHIgJmx0OyBlbmQpOwogCiYjNDM7CSptYXNrIHw9IFBHVEJMX1BURV9NT0RJRklFRDsKIAlpZiAoIXBndGFibGVfcmFuZ2VfYWxpZ25lZChzdGFydCwgZW5kLCBmbG9vciwgY2VpbGluZywgUE1EX01BU0spKQogCQlyZXR1cm47CiAKQEAgLTE2MzksMTMgJiM0MzsxNzM1LDE0IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHRlX3RhYmxlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJfQogCiAJcG1kX2NsZWFyKHBtZHApOwomIzQzOwkqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7CiAJX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoc3RhcnQpOwogCWZyZWVfaG90cGx1Z19wZ3RhYmxlX3BhZ2UodmlydF90b19wYWdlKHB0ZXApKTsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wbWRfdGFibGUocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgZmxvb3IsCi0JCQkJIHVuc2lnbmVkIGxvbmcgY2VpbGluZykKJiM0MzsJCQkJIHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spCiB7CiAJcG1kX3QgKnBtZHAsIHBtZDsKIAl1bnNpZ25lZCBsb25nIGksIG5leHQsIHN0YXJ0ID0gYWRkcjsKQEAgLTE2NTgsNyAmIzQzOzE3NTUsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJY29udGludWU7CiAKIAkJV0FSTl9PTighcG1kX3ByZXNlbnQocG1kKSB8fCAhcG1kX3RhYmxlKHBtZCkpOwotCQlmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRwLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZyk7CiYjNDM7CQlmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRwLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZywgbWFzayk7CiAJfSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgJmx0OyBlbmQpOwogCiAJaWYgKENPTkZJR19QR1RBQkxFX0xFVkVMUyAmbHQ7PSAyKQpAQCAtMTY3OSwxMyAmIzQzOzE3NzYsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wbWRfdGFibGUocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAl9CiAKIAlwdWRfY2xlYXIocHVkcCk7CiYjNDM7CSptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDsKIAlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShzdGFydCk7CiAJZnJlZV9ob3RwbHVnX3BndGFibGVfcGFnZSh2aXJ0X3RvX3BhZ2UocG1kcCkpOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B1ZF90YWJsZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCSB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vciwKLQkJCQkgdW5zaWduZWQgbG9uZyBjZWlsaW5nKQomIzQzOwkJCQkgdW5zaWduZWQgbG9uZyBjZWlsaW5nLCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlwdWRfdCAqcHVkcCwgcHVkOwogCXVuc2lnbmVkIGxvbmcgaSwgbmV4dCwgc3RhcnQgPSBhZGRyOwpAQCAtMTY5OCw3ICYjNDM7MTc5Niw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHVkX3RhYmxlKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQljb250aW51ZTsKIAogCQlXQVJOX09OKCFwdWRfcHJlc2VudChwdWQpIHx8ICFwdWRfdGFibGUocHVkKSk7Ci0JCWZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTsKJiM0MzsJCWZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nLCBtYXNrKTsKIAl9IHdoaWxlIChhZGRyID0gbmV4dCwgYWRkciAmbHQ7IGVuZCk7CiAKIAlpZiAoIXBndGFibGVfbDRfZW5hYmxlZCgpKQpAQCAtMTcxOSwxMyAmIzQzOzE4MTcsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAl9CiAKIAlwNGRfY2xlYXIocDRkcCk7CiYjNDM7CSptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDsKIAlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShzdGFydCk7CiAJZnJlZV9ob3RwbHVnX3BndGFibGVfcGFnZSh2aXJ0X3RvX3BhZ2UocHVkcCkpOwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3A0ZF90YWJsZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCSB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vciwKLQkJCQkgdW5zaWduZWQgbG9uZyBjZWlsaW5nKQomIzQzOwkJCQkgdW5zaWduZWQgbG9uZyBjZWlsaW5nLCBwZ3RibF9tb2RfbWFzayAqbWFzaykKIHsKIAlwNGRfdCAqcDRkcCwgcDRkOwogCXVuc2lnbmVkIGxvbmcgaSwgbmV4dCwgc3RhcnQgPSBhZGRyOwpAQCAtMTczOCw3ICYjNDM7MTgzNyw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQljb250aW51ZTsKIAogCQlXQVJOX09OKCFwNGRfcHJlc2VudChwNGQpKTsKLQkJZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcpOwomIzQzOwkJZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIG1hc2spOwogCX0gd2hpbGUgKGFkZHIgPSBuZXh0LCBhZGRyICZsdDsgZW5kKTsKIAogCWlmICghcGd0YWJsZV9sNV9lbmFibGVkKCkpCkBAIC0xNzU5LDYgJiM0MzsxODU4LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wNGRfdGFibGUocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAl9CiAKIAlwZ2RfY2xlYXIocGdkcCk7CiYjNDM7CSptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDsKIAlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShzdGFydCk7CiAJZnJlZV9ob3RwbHVnX3BndGFibGVfcGFnZSh2aXJ0X3RvX3BhZ2UocDRkcCkpOwogfQpAQCAtMTc2OCw2ICYjNDM7MTg2OCw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfdGFibGVzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiB7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwogCXBnZF90ICpwZ2RwLCBwZ2Q7CiYjNDM7CXBndGJsX21vZF9tYXNrIG1hc2sgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjsKIAogCWRvIHsKIAkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwpAQCAtMTc3Nyw4ICYjNDM7MTg3OSwxMSBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3RhYmxlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAKIAkJV0FSTl9PTighcGdkX3ByZXNlbnQocGdkKSk7Ci0JCWZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTsKJiM0MzsJCWZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nLCAmYW1wO21hc2spOwogCX0gd2hpbGUgKGFkZHIgPSBuZXh0LCBhZGRyICZsdDsgZW5kKTsKJiM0MzsKJiM0MzsJaWYgKG1hc2sgJmFtcDsgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSykKJiM0MzsJCWFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIGVuZCk7CiB9CiAjZW5kaWYKIApAQCAtMTk4Niw2ICYjNDM7MjA5MSw3IEBAIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAkJICAgIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpCiB7CiAJaW50IHJldCwgZmxhZ3MgPSBOT19FWEVDX01BUFBJTkdTOwomIzQzOwlwZ3RibF9tb2RfbWFzayBtYXNrID0gMDsKIAogCVZNX0JVR19PTighbWhwX3JhbmdlX2FsbG93ZWQoc3RhcnQsIHNpemUsIHRydWUpKTsKIApAQCAtMTk5NCwxMCAmIzQzOzIxMDAsMTMgQEAgaW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLAogCiAJcmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmcoc3dhcHBlcl9wZ19kaXIsIHN0YXJ0LCBfX3BoeXNfdG9fdmlydChzdGFydCksCiAJCQkJICAgc2l6ZSwgcGFyYW1zLSZndDtwZ3Byb3QsIHBnZF9wZ3RhYmxlX2FsbG9jX2luaXRfbW0sCi0JCQkJICAgZmxhZ3MpOwomIzQzOwkJCQkgICBmbGFncywgJmFtcDttYXNrKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAomIzQzOwlpZiAobWFzayAmYW1wOyBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLKQomIzQzOwkJYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgc3RhcnQgJiM0Mzsgc2l6ZSk7CiYjNDM7CiAJbWVtYmxvY2tfY2xlYXJfbm9tYXAoc3RhcnQsIHNpemUpOwogCiAJcmV0ID0gX19hZGRfcGFnZXMobmlkLCBzdGFydCAmZ3Q7Jmd0OyBQQUdFX1NISUZULCBzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwppbmRleCAxYzIwMTQ0NzAwZDdkNy4uZGQyOTMzMTk4MjNlM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwpAQCAtMzg5LDYgJiM0MzszODksMTAgQEAgc3RhdGljIGludCBfX2luaXQgcHRkdW1wX2luaXQodm9pZCkKIAkJeyBNT0RVTEVTX0VORCwJCSYjMzQ7TW9kdWxlcyBlbmQmIzM0OyB9LAogCQl7IFZNQUxMT0NfU1RBUlQsCSYjMzQ7dm1hbGxvYygpIGFyZWEmIzM0OyB9LAogCQl7IFZNQUxMT0NfRU5ELAkJJiMzNDt2bWFsbG9jKCkgZW5kJiMzNDsgfSwKJiM0MzsJCXsgUEVSQ1BVX1NUQVJULAkJJiMzNDtHbG9iYWwgcGVyY3B1IHN0YXJ0JiMzNDsgfSwKJiM0MzsJCXsgUEVSQ1BVX0VORCwJCSYjMzQ7R2xvYmFsIHBlcmNwdSBlbmQmIzM0OyB9LAomIzQzOwkJeyBMT0NBTF9QRVJDUFVfU1RBUlQsCSYjMzQ7TG9jYWwgcGVyY3B1IHN0YXJ0JiMzNDsgfSwKJiM0MzsJCXsgTE9DQUxfUEVSQ1BVX0VORCwJJiMzNDtMb2NhbCBwZXJjcHUgZW5kJiMzNDsgfSwKIAkJeyB2bWVtbWFwX3N0YXJ0LAkmIzM0O3ZtZW1tYXAgc3RhcnQmIzM0OyB9LAogCQl7IFZNRU1NQVBfRU5ELAkJJiMzNDt2bWVtbWFwIGVuZCYjMzQ7IH0sCiAJCXsgUENJX0lPX1NUQVJULAkJJiMzNDtQQ0kgSS9PIHN0YXJ0JiMzNDsgfSwKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcC5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc21wLmMKaW5kZXggZmE2NmY5Yzk3ZDc0OGQuLmQ0MjBmZjlkY2Y0ZmM4IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuYwpAQCAtMzY0LDMgJiM0MzszNjQsNTQgQEAgdm9pZCBrZ2RiX3JvdW5kdXBfY3B1cyh2b2lkKQogCX0KIH0KICNlbmRpZgomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKJiM0MztleHRlcm4gaW50IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXTsKJiM0MzsKJiM0Mzt1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseTsKJiM0MztFWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9vZmZzZXQpOwomIzQzOwomIzQzO2ludCBlYXJseV9jcHVfdG9fbm9kZShpbnQgY3B1KQomIzQzO3sKJiM0MzsJcmV0dXJuIGNwdV90b19ub2RlX21hcFtjcHVdOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBwY3B1X2NwdV9kaXN0YW5jZSh1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvKQomIzQzO3sKJiM0MzsJcmV0dXJuIG5vZGVfZGlzdGFuY2UoZWFybHlfY3B1X3RvX25vZGUoZnJvbSksIGVhcmx5X2NwdV90b19ub2RlKHRvKSk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVsdGE7CiYjNDM7CXVuc2lnbmVkIGludCBjcHU7CiYjNDM7CWludCByYyA9IC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChwY3B1X2Nob3Nlbl9mYyAhPSBQQ1BVX0ZDX1BBR0UpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbHdheXMgcmVzZXJ2ZSBhcmVhIGZvciBtb2R1bGUgcGVyY3B1IHZhcmlhYmxlcy4gIFRoYXQmIzM5O3MKJiM0MzsJCSAqIHdoYXQgdGhlIGxlZ2FjeSBhbGxvY2F0b3IgZGlkLgomIzQzOwkJICovCiYjNDM7CQlyYyA9IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLAomIzQzOwkJCQkJICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUsIFBBR0VfU0laRSwKJiM0MzsJCQkJCSAgICBwY3B1X2NwdV9kaXN0YW5jZSwKJiM0MzsJCQkJCSAgICBlYXJseV9jcHVfdG9fbm9kZSk7CiYjNDM7I2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwomIzQzOwkJaWYgKHJjICZsdDsgMCkKJiM0MzsJCQlwcl93YXJuKCYjMzQ7UEVSQ1BVOiAlcyBhbGxvY2F0b3IgZmFpbGVkICglZCksIGZhbGxpbmcgYmFjayB0byBwYWdlIHNpemVcbiYjMzQ7LAomIzQzOwkJCQkgICBwY3B1X2ZjX25hbWVzW3BjcHVfY2hvc2VuX2ZjXSwgcmMpOwomIzQzOyNlbmRpZgomIzQzOwl9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJcmMgPSBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLCBlYXJseV9jcHVfdG9fbm9kZSk7CiYjNDM7I2VuZGlmCiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlwYW5pYygmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHBlcmNwdSBhcmVhcyAoZXJyPSVkKS4mIzM0OywgcmMpOwomIzQzOwomIzQzOwlkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0OwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQomIzQzOwkJX19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgJiM0MzsgcGNwdV91bml0X29mZnNldHNbY3B1XTsKJiM0Mzt9CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMgYi9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMKaW5kZXggYzk5ZjJhYjEwNWU1YjcuLmIzYjkxY2VlZDZhOTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jCkBAIC0xNiw3ICYjNDM7MTYsNyBAQAogCiAjaW5jbHVkZSAmbHQ7YXNtL3NlY3Rpb25zLmgmZ3Q7CiAKLXN0YXRpYyBpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IE5VTUFfTk9fTk9ERSB9OwomIzQzO2ludCBjcHVfdG9fbm9kZV9tYXBbTlJfQ1BVU10gPSB7IFswIC4uLiBOUl9DUFVTLTFdID0gTlVNQV9OT19OT0RFIH07CiAKIGJvb2wgbnVtYV9vZmY7CiAKQEAgLTE0MCw1NSAmIzQzOzE0MCw2IEBAIHZvaWQgX19pbml0IGVhcmx5X21hcF9jcHVfdG9fbm9kZSh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgbmlkKQogCQlzZXRfY3B1X251bWFfbm9kZShjcHUsIG5pZCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKLXVuc2lnbmVkIGxvbmcgX19wZXJfY3B1X29mZnNldFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfb2Zmc2V0KTsKLQotaW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpCi17Ci0JcmV0dXJuIGNwdV90b19ub2RlX21hcFtjcHVdOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBwY3B1X2NwdV9kaXN0YW5jZSh1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvKQotewotCXJldHVybiBub2RlX2Rpc3RhbmNlKGVhcmx5X2NwdV90b19ub2RlKGZyb20pLCBlYXJseV9jcHVfdG9fbm9kZSh0bykpOwotfQotCi12b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBkZWx0YTsKLQl1bnNpZ25lZCBpbnQgY3B1OwotCWludCByYyA9IC1FSU5WQUw7Ci0KLQlpZiAocGNwdV9jaG9zZW5fZmMgIT0gUENQVV9GQ19QQUdFKSB7Ci0JCS8qCi0JCSAqIEFsd2F5cyByZXNlcnZlIGFyZWEgZm9yIG1vZHVsZSBwZXJjcHUgdmFyaWFibGVzLiAgVGhhdCYjMzk7cwotCQkgKiB3aGF0IHRoZSBsZWdhY3kgYWxsb2NhdG9yIGRpZC4KLQkJICovCi0JCXJjID0gcGNwdV9lbWJlZF9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsCi0JCQkJCSAgICBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFLCBQQUdFX1NJWkUsCi0JCQkJCSAgICBwY3B1X2NwdV9kaXN0YW5jZSwKLQkJCQkJICAgIGVhcmx5X2NwdV90b19ub2RlKTsKLSNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksKLQkJaWYgKHJjICZsdDsgMCkKLQkJCXByX3dhcm4oJiMzNDtQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxuJiMzNDssCi0JCQkJICAgcGNwdV9mY19uYW1lc1twY3B1X2Nob3Nlbl9mY10sIHJjKTsKLSNlbmRpZgotCX0KLQotI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwotCWlmIChyYyAmbHQ7IDApCi0JCXJjID0gcGNwdV9wYWdlX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwgZWFybHlfY3B1X3RvX25vZGUpOwotI2VuZGlmCi0JaWYgKHJjICZsdDsgMCkKLQkJcGFuaWMoJiMzNDtGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwZXJjcHUgYXJlYXMgKGVycj0lZCkuJiMzNDssIHJjKTsKLQotCWRlbHRhID0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7Ci0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKLQkJX19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgJiM0MzsgcGNwdV91bml0X29mZnNldHNbY3B1XTsKLX0KLSNlbmRpZgotCiAvKgogICogSW5pdGlhbGl6ZSBOT0RFX0RBVEEgZm9yIGEgbm9kZSBvbiB0aGUgbG9jYWwgbWVtb3J5CiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA0ODVkZjljMmRiZGRiMy4uYzhjMzgwMGZiZDlmYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTE4NTgsNiAmIzQzOzE4NTgsMTcgQEAgdW5zaWduZWQgbG9uZyB2bWFsbG9jX3RvX3Bmbihjb25zdCB2b2lkICphZGRyKTsKICNpZmRlZiBDT05GSUdfTU1VCiBleHRlcm4gYm9vbCBpc192bWFsbG9jX2FkZHIoY29uc3Qgdm9pZCAqeCk7CiBleHRlcm4gaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCk7CiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQCiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX3BlcmNwdV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcikKJiM0Mzt7CiYjNDM7CXJldHVybiBhZGRyICZndDs9IFBFUkNQVV9TVEFSVCAmYW1wOyZhbXA7IGFkZHIgJmx0OyBMT0NBTF9QRVJDUFVfRU5EOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc19wZXJjcHVfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc192bWFsbG9jX2FkZHIoY29uc3Qgdm9pZCAqeCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCmluZGV4IDRmMzZiODU4NTk5NWM1Li41YTI3MDMxZGZmMWE1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCkBAIC03NSw2ICYjNDM7NzUsOCBAQAogCiBleHRlcm4gdm9pZCAqcGNwdV9iYXNlX2FkZHI7CiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyAqcGNwdV91bml0X29mZnNldHM7CiYjNDM7LyogcGVyY3B1IGxvY2FsIG1hcHBpbmcgYmFzZSAqLwomIzQzO2V4dGVybiB2b2lkICpwY3B1X2xvY2FsX2Jhc2U7CiAKIHN0cnVjdCBwY3B1X2dyb3VwX2luZm8gewogCWludAkJCW5yX3VuaXRzOwkvKiBhbGlnbmVkICMgb2YgdW5pdHMgKi8KQEAgLTExNCw3ICYjNDM7MTE2LDcgQEAgZXh0ZXJuIHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKiBfX2luaXQgcGNwdV9hbGxvY19hbGxvY19pbmZvKGludCBucl9ncm91cHMsCiBleHRlcm4gdm9pZCBfX2luaXQgcGNwdV9mcmVlX2FsbG9jX2luZm8oc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWkpOwogCiBleHRlcm4gdm9pZCBfX2luaXQgcGNwdV9zZXR1cF9maXJzdF9jaHVuayhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSwKLQkJCQkJIHZvaWQgKmJhc2VfYWRkcik7CiYjNDM7CQkJCQkgdm9pZCAqYmFzZV9hZGRyLCB2b2lkICpsb2NhbF9iYXNlKTsKIAogZXh0ZXJuIGludCBfX2luaXQgcGNwdV9lbWJlZF9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgc2l6ZV90IGR5bl9zaXplLAogCQkJCXNpemVfdCBhdG9tX3NpemUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oCmluZGV4IDkxNzRmYTU5YmJjNTRkLi4wNjJjNjRhNWQ0YmQwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmgKQEAgLTI2LDQgJiM0MzsyNiwxNyBAQAogCQkJYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTsJCVwKIAl9IHdoaWxlICgwKQogCiYjNDM7I2lmbmRlZiBDT05GSUdfQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkMKJiM0MzsjZGVmaW5lIHB1ZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHB1ZCwgcG1kKQkJCQlcCiYjNDM7CWRvIHsJCQkJCQkJCVwKJiM0MzsJCXB1ZF9wb3B1bGF0ZSgmYW1wO2luaXRfbW0sIHB1ZCwgcG1kKTsJCQlcCiYjNDM7CX0gd2hpbGUgKDApCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmbmRlZiBDT05GSUdfQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkMKJiM0MzsjZGVmaW5lIHBtZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHBtZCwgcHRlKQkJCQlcCiYjNDM7CWRvIHsJCQkJCQkJCVwKJiM0MzsJCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmFtcDtpbml0X21tLCBwbWQsIHB0ZSk7CQlcCiYjNDM7CX0gd2hpbGUgKDApCiYjNDM7I2VuZGlmCiAjZW5kaWYgLyogX0xJTlVYX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaAppbmRleCBkODdkYzdmNzdmNGU4YS4uZGFmOTk2NWExMTFkMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCkBAIC0zMTMsNiAmIzQzOzMxMyw5IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKipwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLAogCQkJCSAgICAgc2l6ZV90IGFsaWduKTsKIAogdm9pZCBwY3B1X2ZyZWVfdm1fYXJlYXMoc3RydWN0IHZtX3N0cnVjdCAqKnZtcywgaW50IG5yX3Ztcyk7CiYjNDM7c3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsCiYjNDM7CQkJCSAgICAgaW50IHVuaXRfc2l6ZSwgc2l6ZV90IGFsaWduKTsKJiM0MzsKICMgZWxzZQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1fc3RydWN0ICoqCiBwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLApkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggOWUwY2E0ODI0OTA1NGYuLmUxOTEwYzMzMjYzODUxIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWcKQEAgLTEwNjEsNiAmIzQzOzEwNjEsOSBAQCBjb25maWcgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksKIGNvbmZpZyBVU0VfUEVSQ1BVX05VTUFfTk9ERV9JRAogCWJvb2wKIAomIzQzO2NvbmZpZyBIQVZFX0xPQ0FMX1BFUl9DUFVfTUFQCiYjNDM7CWJvb2wKJiM0MzsKIGNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQQogCWJvb2wKIApAQCAtMTUwOSw2ICYjNDM7MTUxMiwxMiBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKJiM0Mztjb25maWcgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkMKJiM0MzsJYm9vbAomIzQzOwomIzQzO2NvbmZpZyBBUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQwomIzQzOwlib29sCiYjNDM7CiBzb3VyY2UgJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMTgxZTc5ZjFkNmEyMDcuLjlkOWYwOGNiMjZhMTE0IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTE1NTIsMTAgJiM0MzsxNTUyLDEzIEBAIHZvaWQgY2xlYXJfdm1fdW5pbml0aWFsaXplZF9mbGFnKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtKTsKIGludCBfX211c3RfY2hlY2sgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LAogCQkJICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0KTsKJiM0MztpbnQgX19tdXN0X2NoZWNrIHZtYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQl1bnNpZ25lZCBsb25nIGVuZCwgcGh5c19hZGRyX3QgcGh5c19hZGRyLAomIzQzOwkJCXBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdCk7CiAKIHZvaWQgdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogCi12b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwomIzQzO3ZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIAogc3RhdGljIGlubGluZSBib29sIHZtYV9pc19zaW5nbGVfdGhyZWFkZWRfcHJpdmF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKZGlmZiAtLWdpdCBhL21tL2ttc2FuL2hvb2tzLmMgYi9tbS9rbXNhbi9ob29rcy5jCmluZGV4IDhmMjJkMWYyMjk4MTNmLi5lMmEwZmFmMzQ0YjkxYiAxMDA2NDQKLS0tIGEvbW0va21zYW4vaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9rbXNhbi9ob29rcy5jCkBAIC0xMzUsOCAmIzQzOzEzNSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZtYWxsb2Nfb3JpZ2luKHVuc2lnbmVkIGxvbmcgYWRkcikKIAogdm9pZCBrbXNhbl92dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHZtYWxsb2Nfc2hhZG93KHN0YXJ0KSwgdm1hbGxvY19zaGFkb3coZW5kKSk7Ci0JX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh2bWFsbG9jX29yaWdpbihzdGFydCksIHZtYWxsb2Nfb3JpZ2luKGVuZCkpOwomIzQzOwlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2bWFsbG9jX3NoYWRvdyhzdGFydCksIHZtYWxsb2Nfc2hhZG93KGVuZCkpOwomIzQzOwlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2bWFsbG9jX29yaWdpbihzdGFydCksIHZtYWxsb2Nfb3JpZ2luKGVuZCkpOwogCWZsdXNoX2NhY2hlX3ZtYXAodm1hbGxvY19zaGFkb3coc3RhcnQpLCB2bWFsbG9jX3NoYWRvdyhlbmQpKTsKIAlmbHVzaF9jYWNoZV92bWFwKHZtYWxsb2Nfb3JpZ2luKHN0YXJ0KSwgdm1hbGxvY19vcmlnaW4oZW5kKSk7CiB9CkBAIC0xODEsNyAmIzQzOzE4MSw3IEBAIGludCBrbXNhbl9pb3JlbWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQl2bWFsbG9jX29yaWdpbihzdGFydCAmIzQzOyBvZmYgJiM0MzsgUEFHRV9TSVpFKSwgcHJvdCwgJmFtcDtvcmlnaW4sCiAJCQlQQUdFX1NISUZUKTsKIAkJaWYgKG1hcHBlZCkgewotCQkJX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCgKJiM0MzsJCQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLAogCQkJCXZtYWxsb2Nfc2hhZG93KHN0YXJ0ICYjNDM7IG9mZiksCiAJCQkJdm1hbGxvY19zaGFkb3coc3RhcnQgJiM0Mzsgb2ZmICYjNDM7IFBBR0VfU0laRSkpOwogCQkJZXJyID0gbWFwcGVkOwpAQCAtMjAzLDEwICYjNDM7MjAzLDEwIEBAIGludCBrbXNhbl9pb3JlbWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQlfX2ZyZWVfcGFnZXMoc2hhZG93LCAxKTsKIAkJaWYgKG9yaWdpbikKIAkJCV9fZnJlZV9wYWdlcyhvcmlnaW4sIDEpOwotCQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKAomIzQzOwkJX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwKIAkJCXZtYWxsb2Nfc2hhZG93KHN0YXJ0KSwKIAkJCXZtYWxsb2Nfc2hhZG93KHN0YXJ0ICYjNDM7IGNsZWFuICogUEFHRV9TSVpFKSk7Ci0JCV9fdnVubWFwX3JhbmdlX25vZmx1c2goCiYjNDM7CQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLAogCQkJdm1hbGxvY19vcmlnaW4oc3RhcnQpLAogCQkJdm1hbGxvY19vcmlnaW4oc3RhcnQgJiM0MzsgY2xlYW4gKiBQQUdFX1NJWkUpKTsKIAl9CkBAIC0yMzMsOCAmIzQzOzIzMyw4IEBAIHZvaWQga21zYW5faW91bm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogCSAgICAgaSYjNDM7JiM0MzssIHZfc2hhZG93ICYjNDM7PSBQQUdFX1NJWkUsIHZfb3JpZ2luICYjNDM7PSBQQUdFX1NJWkUpIHsKIAkJc2hhZG93ID0ga21zYW5fdm1hbGxvY190b19wYWdlX29yX251bGwoKHZvaWQgKil2X3NoYWRvdyk7CiAJCW9yaWdpbiA9IGttc2FuX3ZtYWxsb2NfdG9fcGFnZV9vcl9udWxsKCh2b2lkICopdl9vcmlnaW4pOwotCQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHZfc2hhZG93LCB2bWFsbG9jX3NoYWRvdyhlbmQpKTsKLQkJX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh2X29yaWdpbiwgdm1hbGxvY19vcmlnaW4oZW5kKSk7CiYjNDM7CQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2X3NoYWRvdywgdm1hbGxvY19zaGFkb3coZW5kKSk7CiYjNDM7CQlfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2X29yaWdpbiwgdm1hbGxvY19vcmlnaW4oZW5kKSk7CiAJCWlmIChzaGFkb3cpCiAJCQlfX2ZyZWVfcGFnZXMoc2hhZG93LCAxKTsKIAkJaWYgKG9yaWdpbikKZGlmZiAtLWdpdCBhL21tL3BlcmNwdS1pbnRlcm5hbC5oIGIvbW0vcGVyY3B1LWludGVybmFsLmgKaW5kZXggOGNiZTAzOWJmODQ3YWMuLjRkNDYxMzA1MjQzYmYwIDEwMDY0NAotLS0gYS9tbS9wZXJjcHUtaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9wZXJjcHUtaW50ZXJuYWwuaApAQCAtNjMsMTEgJiM0Mzs2MywxNCBAQCBzdHJ1Y3QgcGNwdV9jaHVuayB7CiAJICogY2h1bmtfbWQuCiAJICovCiAJdm9pZAkJCSpiYXNlX2FkZHIgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKJiM0MzsJLyogcGVyY3B1IGxvY2FsIGJhc2UgYWRkcmVzcyBvZiB0aGUgY2h1bmsgKi8KJiM0MzsJdm9pZCAgICAgICAgICAgICAgICAgICAgKmxvY2FsX2Jhc2U7CiAKIAl1bnNpZ25lZCBsb25nCQkqYWxsb2NfbWFwOwkvKiBhbGxvY2F0aW9uIG1hcCAqLwogCXN0cnVjdCBwY3B1X2Jsb2NrX21kCSptZF9ibG9ja3M7CS8qIG1ldGFkYXRhIGJsb2NrcyAqLwogCiAJdm9pZAkJCSpkYXRhOwkJLyogY2h1bmsgZGF0YSAqLwomIzQzOwl2b2lkCQkJKmxvY2FsX2RhdGE7CS8qIGNodW5rIGxvY2FsIHZtICovCiAJYm9vbAkJCWltbXV0YWJsZTsJLyogbm8gW2RlXXBvcHVsYXRpb24gYWxsb3dlZCAqLwogCWJvb2wJCQlpc29sYXRlZDsJLyogaXNvbGF0ZWQgZnJvbSBhY3RpdmUgY2h1bmsKIAkJCQkJCSAgIHNsb3RzICovCkBAIC0xNjIsNiAmIzQzOzE2NSwxNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBwY3B1X29ial9mdWxsX3NpemUoc2l6ZV90IHNpemUpCiAJcmV0dXJuIHNpemUgKiBudW1fcG9zc2libGVfY3B1cygpICYjNDM7IGV4dHJhX3NpemU7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0MztleHRlcm4gdm9pZCBfX2luaXQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucik7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpCiYjNDM7ewomIzQzOwlyZXR1cm47CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2lmZGVmIENPTkZJR19QRVJDUFVfU1RBVFMKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CmRpZmYgLS1naXQgYS9tbS9wZXJjcHUtdm0uYyBiL21tL3BlcmNwdS12bS5jCmluZGV4IDRmNTkzNzA5MDU5MGQ4Li41ZGVjYWFkNzY0MGZkYyAxMDA2NDQKLS0tIGEvbW0vcGVyY3B1LXZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGVyY3B1LXZtLmMKQEAgLTExMiw2ICYjNDM7MTEyLDEwIEBAIHN0YXRpYyBpbnQgcGNwdV9hbGxvY19wYWdlcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssCiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0MztleHRlcm4gcGdkX3QgKnBlcmNwdV9wZ2RbTlJfQ1BVU107CiYjNDM7I2VuZGlmCiYjNDM7CiAvKioKICAqIHBjcHVfcHJlX3VubWFwX2ZsdXNoIC0gZmx1c2ggY2FjaGUgcHJpb3IgdG8gdW5tYXBwaW5nCiAgKiBAY2h1bms6IGNodW5rIHRoZSByZWdpb25zIHRvIGJlIGZsdXNoZWQgYmVsb25ncyB0bwpAQCAtMTMwLDYgJiM0MzsxMzQsMTEgQEAgc3RhdGljIHZvaWQgcGNwdV9wcmVfdW5tYXBfZmx1c2goc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAogCWZsdXNoX2NhY2hlX3Z1bm1hcCgKIAkJcGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2xvd191bml0X2NwdSwgcGFnZV9zdGFydCksCiAJCXBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9oaWdoX3VuaXRfY3B1LCBwYWdlX2VuZCkpOwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUAomIzQzOwlmbHVzaF9jYWNoZV92dW5tYXAoKHVuc2lnbmVkIGxvbmcpY2h1bmstJmd0O2xvY2FsX2Jhc2UgJiM0MzsgKHBhZ2Vfc3RhcnQgJmx0OyZsdDsgUEFHRV9TSElGVCksCiYjNDM7CQkJKHVuc2lnbmVkIGxvbmcpY2h1bmstJmd0O2xvY2FsX2Jhc2UgJiM0MzsgKHBhZ2VfZW5kICZsdDsmbHQ7IFBBR0VfU0hJRlQpKTsKJiM0MzsjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5yX3BhZ2VzKQpAQCAtMTM3LDYgJiM0MzsxNDYsMjAgQEAgc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5yX3BhZ2VzKQogCXZ1bm1hcF9yYW5nZV9ub2ZsdXNoKGFkZHIsIGFkZHIgJiM0MzsgKG5yX3BhZ2VzICZsdDsmbHQ7IFBBR0VfU0hJRlQpKTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUAomIzQzO3N0YXRpYyB2b2lkIF9fcGNwdV91bm1hcF9wYWdlc19sb2NhbCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsCiYjNDM7CQkJICAgIGludCBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CV9fdnVubWFwX3JhbmdlX25vZmx1c2gocGVyY3B1X3BnZFtjcHVdLCB2aXJ0LCB2aXJ0ICYjNDM7IChucl9wYWdlcyAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzX2xvY2FsKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCwKJiM0MzsJCQkgICAgaW50IG5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJcmV0dXJuOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIC8qKgogICogcGNwdV91bm1hcF9wYWdlcyAtIHVubWFwIHBhZ2VzIG91dCBvZiBhIHBjcHVfY2h1bmsKICAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKQEAgLTE2Niw2ICYjNDM7MTg5LDEwIEBAIHN0YXRpYyB2b2lkIHBjcHVfdW5tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAogCQl9CiAJCV9fcGNwdV91bm1hcF9wYWdlcyhwY3B1X2NodW5rX2FkZHIoY2h1bmssIGNwdSwgcGFnZV9zdGFydCksCiAJCQkJICAgcGFnZV9lbmQgLSBwYWdlX3N0YXJ0KTsKJiM0MzsKJiM0MzsJCV9fcGNwdV91bm1hcF9wYWdlc19sb2NhbChjcHUsCiYjNDM7CQkJCQkodW5zaWduZWQgbG9uZyljaHVuay0mZ3Q7bG9jYWxfYmFzZSAmIzQzOyAocGFnZV9zdGFydCAmbHQ7Jmx0OyBQQUdFX1NISUZUKSwKJiM0MzsJCQkJCXBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7CiAJfQogfQogCkBAIC0xODgsNiAmIzQzOzIxNSwxMiBAQCBzdGF0aWMgdm9pZCBwY3B1X3Bvc3RfdW5tYXBfdGxiX2ZsdXNoKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywKIAlmbHVzaF90bGJfa2VybmVsX3JhbmdlKAogCQlwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfbG93X3VuaXRfY3B1LCBwYWdlX3N0YXJ0KSwKIAkJcGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2hpZ2hfdW5pdF9jcHUsIHBhZ2VfZW5kKSk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQCiYjNDM7CWZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoCiYjNDM7CQkodW5zaWduZWQgbG9uZyljaHVuay0mZ3Q7bG9jYWxfYmFzZSAmIzQzOyAocGFnZV9zdGFydCAmbHQ7Jmx0OyBQQUdFX1NISUZUKSwKJiM0MzsJCSh1bnNpZ25lZCBsb25nKWNodW5rLSZndDtsb2NhbF9iYXNlICYjNDM7IChwYWdlX2VuZCAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiYjNDM7I2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgX19wY3B1X21hcF9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICoqcGFnZXMsCkBAIC0xOTcsNiAmIzQzOzIzMCwzMiBAQCBzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogCQkJUEFHRV9LRVJORUwsIHBhZ2VzLCBQQUdFX1NISUZULCBHRlBfS0VSTkVMKTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUAomIzQzO3N0YXRpYyBpbnQgX19wY3B1X21hcF9wYWdlc19sb2NhbCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsIHN0cnVjdCBwYWdlICoqcGFnZXMsCiYjNDM7CQkJICAgIGludCBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gdm1hcF9yYW5nZV9ub2ZsdXNoKHBlcmNwdV9wZ2RbY3B1XSwgdmlydCwgdmlydCAmIzQzOyBQQUdFX1NJWkUsCiYjNDM7CQkJCXBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIFBBR0VfS0VSTkVMLCBQQUdFX1NISUZUKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJCXZpcnQgJiM0Mzs9IFBBR0VfU0laRTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbnQgX19wY3B1X21hcF9wYWdlc19sb2NhbCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsIHN0cnVjdCBwYWdlICoqcGFnZXMsCiYjNDM7CQkJICAgIGludCBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIC8qKgogICogcGNwdV9tYXBfcGFnZXMgLSBtYXAgcGFnZXMgaW50byBhIHBjcHVfY2h1bmsKICAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKQEAgLTIyNCw2ICYjNDM7MjgzLDEzIEBAIHN0YXRpYyBpbnQgcGNwdV9tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAogCQlpZiAoZXJyICZsdDsgMCkKIAkJCWdvdG8gZXJyOwogCiYjNDM7CQllcnIgPSBfX3BjcHVfbWFwX3BhZ2VzX2xvY2FsKGNwdSwKJiM0MzsJCQkJCSh1bnNpZ25lZCBsb25nKWNodW5rLSZndDtsb2NhbF9iYXNlICYjNDM7IChwYWdlX3N0YXJ0ICZsdDsmbHQ7IFBBR0VfU0hJRlQpLAomIzQzOwkJCQkJJmFtcDtwYWdlc1twY3B1X3BhZ2VfaWR4KGNwdSwgcGFnZV9zdGFydCldLAomIzQzOwkJCQkJcGFnZV9lbmQgLSBwYWdlX3N0YXJ0KTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwogCQlmb3IgKGkgPSBwYWdlX3N0YXJ0OyBpICZsdDsgcGFnZV9lbmQ7IGkmIzQzOyYjNDM7KQogCQkJcGNwdV9zZXRfcGFnZV9jaHVuayhwYWdlc1twY3B1X3BhZ2VfaWR4KGNwdSwgaSldLAogCQkJCQkgICAgY2h1bmspOwpAQCAtMjMzLDYgJiM0MzsyOTksOSBAQCBzdGF0aWMgaW50IHBjcHVfbWFwX3BhZ2VzKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUodGNwdSkgewogCQlfX3BjcHVfdW5tYXBfcGFnZXMocGNwdV9jaHVua19hZGRyKGNodW5rLCB0Y3B1LCBwYWdlX3N0YXJ0KSwKIAkJCQkgICBwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpOwomIzQzOwkJX19wY3B1X3VubWFwX3BhZ2VzX2xvY2FsKHRjcHUsCiYjNDM7CQkJCQkodW5zaWduZWQgbG9uZyljaHVuay0mZ3Q7bG9jYWxfYmFzZSAmIzQzOyAocGFnZV9zdGFydCAmbHQ7Jmx0OyBQQUdFX1NISUZUKSwKJiM0MzsJCQkJCXBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7CiAJCWlmICh0Y3B1ID09IGNwdSkKIAkJCWJyZWFrOwogCX0KQEAgLTI1OCw2ICYjNDM7MzI3LDExIEBAIHN0YXRpYyB2b2lkIHBjcHVfcG9zdF9tYXBfZmx1c2goc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLAogCWZsdXNoX2NhY2hlX3ZtYXAoCiAJCXBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9sb3dfdW5pdF9jcHUsIHBhZ2Vfc3RhcnQpLAogCQlwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfaGlnaF91bml0X2NwdSwgcGFnZV9lbmQpKTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0MzsJZmx1c2hfY2FjaGVfdm1hcCgodW5zaWduZWQgbG9uZyljaHVuay0mZ3Q7bG9jYWxfYmFzZSAmIzQzOyAocGFnZV9zdGFydCAmbHQ7Jmx0OyBQQUdFX1NISUZUKSwKJiM0MzsJCQkgKHVuc2lnbmVkIGxvbmcpY2h1bmstJmd0O2xvY2FsX2Jhc2UgJiM0MzsgKHBhZ2VfZW5kICZsdDsmbHQ7IFBBR0VfU0hJRlQpKTsKJiM0MzsjZW5kaWYKIH0KIAogLyoqCkBAIC0zNDksNiAmIzQzOzQyMywyNCBAQCBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY3JlYXRlX2NodW5rKGdmcF90IGdmcCkKIAljaHVuay0mZ3Q7ZGF0YSA9IHZtczsKIAljaHVuay0mZ3Q7YmFzZV9hZGRyID0gdm1zWzBdLSZndDthZGRyIC0gcGNwdV9ncm91cF9vZmZzZXRzWzBdOwogCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQCiYjNDM7CXVuc2lnbmVkIGxvbmcgZGVsdGEgPSAodW5zaWduZWQgbG9uZyljaHVuay0mZ3Q7YmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaGludCA9IGRlbHRhICYjNDM7ICh1bnNpZ25lZCBsb25nKXBjcHVfbG9jYWxfYmFzZTsKJiM0MzsJc3RydWN0IHZtX3N0cnVjdCAqbG9jYWxfdm0gPSBwY3B1X2dldF9sb2NhbF92bV9hcmVhKGhpbnQsCiYjNDM7CQkJCQlwY3B1X3VuaXRfc2l6ZSwgcGNwdV9hdG9tX3NpemUpOwomIzQzOwlpZiAoIWxvY2FsX3ZtKSB7CiYjNDM7CQlwY3B1X2ZyZWVfdm1fYXJlYXModm1zLCBwY3B1X25yX2dyb3Vwcyk7CiYjNDM7CQlwY3B1X2ZyZWVfY2h1bmsoY2h1bmspOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2h1bmstJmd0O2xvY2FsX2Jhc2UgPSBsb2NhbF92bS0mZ3Q7YWRkcjsKJiM0MzsJY2h1bmstJmd0O2xvY2FsX2RhdGEgPSAodm9pZCAqKWxvY2FsX3ZtOwomIzQzOyNlbHNlCiYjNDM7CWNodW5rLSZndDtsb2NhbF9iYXNlID0gMDsKJiM0MzsJY2h1bmstJmd0O2xvY2FsX2RhdGEgPSBOVUxMOwomIzQzOyNlbmRpZgomIzQzOwogCXBjcHVfc3RhdHNfY2h1bmtfYWxsb2MoKTsKIAl0cmFjZV9wZXJjcHVfY3JlYXRlX2NodW5rKGNodW5rLSZndDtiYXNlX2FkZHIpOwogCkBAIC0zNjUsNiAmIzQzOzQ1Nyw4IEBAIHN0YXRpYyB2b2lkIHBjcHVfZGVzdHJveV9jaHVuayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspCiAKIAlpZiAoY2h1bmstJmd0O2RhdGEpCiAJCXBjcHVfZnJlZV92bV9hcmVhcyhjaHVuay0mZ3Q7ZGF0YSwgcGNwdV9ucl9ncm91cHMpOwomIzQzOwlpZiAoY2h1bmstJmd0O2xvY2FsX2RhdGEpCiYjNDM7CQlmcmVlX3ZtX2FyZWEoKHN0cnVjdCB2bV9zdHJ1Y3QgKiljaHVuay0mZ3Q7bG9jYWxfZGF0YSk7CiAJcGNwdV9mcmVlX2NodW5rKGNodW5rKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuYwppbmRleCBiMDY3NmI4MDU0ZWQwOS4uOGIyNzNlZDhlNWE4YmIgMTAwNjQ0Ci0tLSBhL21tL3BlcmNwdS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BlcmNwdS5jCkBAIC0xNDUsNiAmIzQzOzE0NSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGNwdV9oaWdoX3VuaXRfY3B1IF9fcm9fYWZ0ZXJfaW5pdDsKIAogLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGNodW5rIHdoaWNoIHN0YXJ0cyB3aXRoIHRoZSBrZXJuZWwgc3RhdGljIGFyZWEgKi8KIHZvaWQgKnBjcHVfYmFzZV9hZGRyIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsvKiBUaGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgY2h1bmsgbG9jYWwgbWFwcGluZyAqLwomIzQzO3ZvaWQgKnBjcHVfbG9jYWxfYmFzZSBfX3JvX2FmdGVyX2luaXQ7CiAKIHN0YXRpYyBjb25zdCBpbnQgKnBjcHVfdW5pdF9tYXAgX19yb19hZnRlcl9pbml0OwkJLyogY3B1IC0mZ3Q7IHVuaXQgKi8KIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnBjcHVfdW5pdF9vZmZzZXRzIF9fcm9fYWZ0ZXJfaW5pdDsJLyogY3B1IC0mZ3Q7IHVuaXQgb2Zmc2V0ICovCkBAIC0xMzM4LDYgJiM0MzsxMzQwLDcgQEAgc3RhdGljIHZvaWQgcGNwdV9pbml0X21kX2Jsb2NrcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspCiAvKioKICAqIHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsgLSBjcmVhdGVzIGNodW5rcyB0aGF0IHNlcnZlIHRoZSBmaXJzdCBjaHVuawogICogQHRtcF9hZGRyOiB0aGUgc3RhcnQgb2YgdGhlIHJlZ2lvbiBzZXJ2ZWQKJiM0MzsgKiBAbG9jYWxfdG1wOiB0aGUgc3RhcnQgb2YgdGhlIGxvY2FsIHBlcmNwdSByZWdpb24gc2VydmVkCiAgKiBAbWFwX3NpemU6IHNpemUgb2YgdGhlIHJlZ2lvbiBzZXJ2ZWQKICAqCiAgKiBUaGlzIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgY2h1bmtzIHRoYXQgc2VydmUgdGhlIGZpcnN0IGNodW5rLiAgVGhlCkBAIC0xMzQ5LDE1ICYjNDM7MTM1MiwxNiBAQCBzdGF0aWMgdm9pZCBwY3B1X2luaXRfbWRfYmxvY2tzKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaykKICAqIENodW5rIHNlcnZpbmcgdGhlIHJlZ2lvbiBhdCBAdG1wX2FkZHIgb2YgQG1hcF9zaXplLgogICovCiBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKiBfX2luaXQgcGNwdV9hbGxvY19maXJzdF9jaHVuayh1bnNpZ25lZCBsb25nIHRtcF9hZGRyLAotCQkJCQkJCSBpbnQgbWFwX3NpemUpCiYjNDM7CQkJCQkJCSB1bnNpZ25lZCBsb25nIGxvY2FsX3RtcCwgaW50IG1hcF9zaXplKQogewogCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKLQl1bnNpZ25lZCBsb25nIGFsaWduZWRfYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBhbGlnbmVkX2FkZHIsIGFsaWduZWRfbG9jYWw7CiAJaW50IHN0YXJ0X29mZnNldCwgb2Zmc2V0X2JpdHMsIHJlZ2lvbl9zaXplLCByZWdpb25fYml0czsKIAlzaXplX3QgYWxsb2Nfc2l6ZTsKIAogCS8qIHJlZ2lvbiBjYWxjdWxhdGlvbnMgKi8KIAlhbGlnbmVkX2FkZHIgPSB0bXBfYWRkciAmYW1wOyBQQUdFX01BU0s7CiYjNDM7CWFsaWduZWRfbG9jYWwgPSBsb2NhbF90bXAgJmFtcDsgUEFHRV9NQVNLOwogCiAJc3RhcnRfb2Zmc2V0ID0gdG1wX2FkZHIgLSBhbGlnbmVkX2FkZHI7CiAJcmVnaW9uX3NpemUgPSBBTElHTihzdGFydF9vZmZzZXQgJiM0MzsgbWFwX3NpemUsIFBBR0VfU0laRSk7CkBAIC0xMzcwLDYgJiM0MzsxMzc0LDcgQEAgc3RhdGljIHN0cnVjdCBwY3B1X2NodW5rICogX19pbml0IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodW5zaWduZWQgbG9uZyB0bXBfYWRkciwKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2NodW5rLSZndDtsaXN0KTsKIAogCWNodW5rLSZndDtiYXNlX2FkZHIgPSAodm9pZCAqKWFsaWduZWRfYWRkcjsKJiM0MzsJY2h1bmstJmd0O2xvY2FsX2Jhc2UgPSAodm9pZCAqKWFsaWduZWRfbG9jYWw7CiAJY2h1bmstJmd0O3N0YXJ0X29mZnNldCA9IHN0YXJ0X29mZnNldDsKIAljaHVuay0mZ3Q7ZW5kX29mZnNldCA9IHJlZ2lvbl9zaXplIC0gY2h1bmstJmd0O3N0YXJ0X29mZnNldCAtIG1hcF9zaXplOwogCkBAIC0yNTYyLDcgJiM0MzsyNTY3LDcgQEAgc3RhdGljIHZvaWQgcGNwdV9kdW1wX2FsbG9jX2luZm8oY29uc3QgY2hhciAqbHZsLAogICogYW5kIGF2YWlsYWJsZSBmb3IgZHluYW1pYyBhbGxvY2F0aW9uIGxpa2UgYW55IG90aGVyIGNodW5rLgogICovCiB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLAotCQkJCSAgIHZvaWQgKmJhc2VfYWRkcikKJiM0MzsJCQkJICAgdm9pZCAqYmFzZV9hZGRyLCB2b2lkICpsb2NhbF9iYXNlKQogewogCXNpemVfdCBzaXplX3N1bSA9IGFpLSZndDtzdGF0aWNfc2l6ZSAmIzQzOyBhaS0mZ3Q7cmVzZXJ2ZWRfc2l6ZSAmIzQzOyBhaS0mZ3Q7ZHluX3NpemU7CiAJc2l6ZV90IHN0YXRpY19zaXplLCBkeW5fc2l6ZTsKQEAgLTI1NzIsNyAmIzQzOzI1NzcsNyBAQCB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLAogCXVuc2lnbmVkIGludCBjcHU7CiAJaW50ICp1bml0X21hcDsKIAlpbnQgZ3JvdXAsIHVuaXQsIGk7Ci0JdW5zaWduZWQgbG9uZyB0bXBfYWRkcjsKJiM0MzsJdW5zaWduZWQgbG9uZyB0bXBfYWRkciwgbG9jYWxfdG1wID0gMDsKIAlzaXplX3QgYWxsb2Nfc2l6ZTsKIAogI2RlZmluZSBQQ1BVX1NFVFVQX0JVR19PTihjb25kKQlkbyB7CQkJCQlcCkBAIC0yNzEzLDExICYjNDM7MjcxOCwxNSBAQCB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLAogCSAqICAgY2h1bmsuCiAJICovCiAJdG1wX2FkZHIgPSAodW5zaWduZWQgbG9uZyliYXNlX2FkZHIgJiM0Mzsgc3RhdGljX3NpemU7CiYjNDM7CWlmIChsb2NhbF9iYXNlKQomIzQzOwkJbG9jYWxfdG1wID0gKHVuc2lnbmVkIGxvbmcpbG9jYWxfYmFzZSAmIzQzOyBzdGF0aWNfc2l6ZTsKIAlpZiAoYWktJmd0O3Jlc2VydmVkX3NpemUpCi0JCXBjcHVfcmVzZXJ2ZWRfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLAomIzQzOwkJcGNwdV9yZXNlcnZlZF9jaHVuayA9IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodG1wX2FkZHIsIGxvY2FsX3RtcCwKIAkJCQkJCWFpLSZndDtyZXNlcnZlZF9zaXplKTsKIAl0bXBfYWRkciA9ICh1bnNpZ25lZCBsb25nKWJhc2VfYWRkciAmIzQzOyBzdGF0aWNfc2l6ZSAmIzQzOyBhaS0mZ3Q7cmVzZXJ2ZWRfc2l6ZTsKLQlwY3B1X2ZpcnN0X2NodW5rID0gcGNwdV9hbGxvY19maXJzdF9jaHVuayh0bXBfYWRkciwgZHluX3NpemUpOwomIzQzOwlpZiAobG9jYWxfYmFzZSkKJiM0MzsJCWxvY2FsX3RtcCA9ICh1bnNpZ25lZCBsb25nKWxvY2FsX2Jhc2UgJiM0Mzsgc3RhdGljX3NpemUgJiM0MzsgYWktJmd0O3Jlc2VydmVkX3NpemU7CiYjNDM7CXBjcHVfZmlyc3RfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLCBsb2NhbF90bXAsIGR5bl9zaXplKTsKIAogCXBjcHVfbnJfZW1wdHlfcG9wX3BhZ2VzID0gcGNwdV9maXJzdF9jaHVuay0mZ3Q7bnJfZW1wdHlfcG9wX3BhZ2VzOwogCXBjcHVfY2h1bmtfcmVsb2NhdGUocGNwdV9maXJzdF9jaHVuaywgLTEpOwpAQCAtMzEwOCw3ICYjNDM7MzExNyw3IEBAIGludCBfX2luaXQgcGNwdV9lbWJlZF9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgc2l6ZV90IGR5bl9zaXplLAogCQlQRk5fRE9XTihzaXplX3N1bSksIGFpLSZndDtzdGF0aWNfc2l6ZSwgYWktJmd0O3Jlc2VydmVkX3NpemUsCiAJCWFpLSZndDtkeW5fc2l6ZSwgYWktJmd0O3VuaXRfc2l6ZSk7CiAKLQlwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBiYXNlKTsKJiM0MzsJcGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgYmFzZSwgTlVMTCk7CiAJZ290byBvdXRfZnJlZTsKIAogb3V0X2ZyZWVfYXJlYXM6CkBAIC0zMTYzLDcgJiM0MzszMTcyLDcgQEAgdm9pZCBfX2luaXQgX193ZWFrIHBjcHVfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcikKIAlwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcik7CiAJaWYgKHB1ZF9ub25lKCpwdWQpKSB7CiAJCXBtZCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBNRF9UQUJMRV9TSVpFLCBQTURfVEFCTEVfU0laRSk7Ci0JCXB1ZF9wb3B1bGF0ZSgmYW1wO2luaXRfbW0sIHB1ZCwgcG1kKTsKJiM0MzsJCXB1ZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHB1ZCwgcG1kKTsKIAl9CiAKIAlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CkBAIC0zMTcxLDcgJiM0MzszMTgwLDcgQEAgdm9pZCBfX2luaXQgX193ZWFrIHBjcHVfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcikKIAkJcHRlX3QgKm5ldzsKIAogCQluZXcgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVEVfVEFCTEVfU0laRSwgUFRFX1RBQkxFX1NJWkUpOwotCQlwbWRfcG9wdWxhdGVfa2VybmVsKCZhbXA7aW5pdF9tbSwgcG1kLCBuZXcpOwomIzQzOwkJcG1kX3BvcHVsYXRlX3N5bmMoYWRkciwgcG1kLCBuZXcpOwogCX0KIAogCXJldHVybjsKQEAgLTMxOTQsNiAmIzQzOzMyMDMsNyBAQCB2b2lkIF9faW5pdCBfX3dlYWsgcGNwdV9wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9uZyBhZGRyKQogaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdCBjcHVfdG9fbmRfZm4pCiB7CiAJc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3Qgdm07CiYjNDM7CXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0IHBjcHVfdm07CiAJc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWk7CiAJY2hhciBwc2l6ZV9zdHJbMTZdOwogCWludCB1bml0X3BhZ2VzOwpAQCAtMzI0MywxMSAmIzQzOzMyNTMsMjggQEAgaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdAogCX0KIAogCS8qIGFsbG9jYXRlIHZtIGFyZWEsIG1hcCB0aGUgcGFnZXMgYW5kIGNvcHkgc3RhdGljIGRhdGEgKi8KJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0MzsJdm0uZmxhZ3MgPSBWTV9BTExPQzsKJiM0MzsJdm0uYWRkciA9ICh2b2lkICopQUxJR04oUEVSQ1BVX1NUQVJULCBQQUdFX1NJWkUpOwomIzQzOwl2bS5zaXplID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIGFpLSZndDt1bml0X3NpemU7CiYjNDM7CXZtX2FyZWFfYWRkX2Vhcmx5KCZhbXA7dm0pOwomIzQzOwlrYXNhbl9wb3B1bGF0ZV9lYXJseV92bV9hcmVhX3NoYWRvdyh2bS5hZGRyLCB2bS5zaXplKTsKJiM0MzsKJiM0MzsJcGNwdV92bS5mbGFncyA9IFZNX0FMTE9DOwomIzQzOwlwY3B1X3ZtLmFkZHIgPSAodm9pZCAqKUFMSUdOKExPQ0FMX1BFUkNQVV9TVEFSVCwgUEFHRV9TSVpFKTsKJiM0MzsJcGNwdV92bS5zaXplID0gYWktJmd0O3VuaXRfc2l6ZTsKJiM0MzsJdm1fYXJlYV9hZGRfZWFybHkoJmFtcDtwY3B1X3ZtKTsKJiM0MzsJa2FzYW5fcG9wdWxhdGVfZWFybHlfdm1fYXJlYV9zaGFkb3cocGNwdV92bS5hZGRyLCBwY3B1X3ZtLnNpemUpOwomIzQzOyNlbHNlCiAJdm0uZmxhZ3MgPSBWTV9BTExPQzsKIAl2bS5zaXplID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIGFpLSZndDt1bml0X3NpemU7CiAJdm1fYXJlYV9yZWdpc3Rlcl9lYXJseSgmYW1wO3ZtLCBQQUdFX1NJWkUpOwogCiYjNDM7CXBjcHVfdm0uYWRkciA9IE5VTEw7CiYjNDM7I2VuZGlmCiYjNDM7CiAJZm9yICh1bml0ID0gMDsgdW5pdCAmbHQ7IG51bV9wb3NzaWJsZV9jcHVzKCk7IHVuaXQmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgY3B1ID0gYWktJmd0O2dyb3Vwc1swXS5jcHVfbWFwW3VuaXRdOwogCQl1bnNpZ25lZCBsb25nIHVuaXRfYWRkciA9CiAJCQkodW5zaWduZWQgbG9uZyl2bS5hZGRyICYjNDM7IHVuaXQgKiBhaS0mZ3Q7dW5pdF9zaXplOwogCkBAIC0zMjY0LDYgJiM0MzszMjkxLDE0IEBAIGludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3QKIAogCQkvKiBjb3B5IHN0YXRpYyBkYXRhICovCiAJCW1lbWNweSgodm9pZCAqKXVuaXRfYWRkciwgX19wZXJfY3B1X3N0YXJ0LCBhaS0mZ3Q7c3RhdGljX3NpemUpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIE1hcCBwZXJjcHUgZGF0YSB0byBQRVJDUFUgbWFwLgomIzQzOwkJICoKJiM0MzsJCSAqIFBDUFVfRkNfRU1CRUQgY2FuJiMzOTt0IHN1cHBvcnQgaXQuCiYjNDM7CQkgKi8KJiM0MzsJCW1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsoY3B1LCAodW5zaWduZWQgbG9uZylwY3B1X3ZtLmFkZHIsCiYjNDM7CQkJCSZhbXA7cGFnZXNbdW5pdCAqIHVuaXRfcGFnZXNdLCB1bml0X3BhZ2VzKTsKIAl9CiAKIAkvKiB3ZSYjMzk7cmUgcmVhZHksIGNvbW1pdCAqLwpAQCAtMzI3MSw3ICYjNDM7MzMwNiw4IEBAIGludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3QKIAkJdW5pdF9wYWdlcywgcHNpemVfc3RyLCBhaS0mZ3Q7c3RhdGljX3NpemUsCiAJCWFpLSZndDtyZXNlcnZlZF9zaXplLCBhaS0mZ3Q7ZHluX3NpemUpOwogCi0JcGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgdm0uYWRkcik7CiYjNDM7CXBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIHZtLmFkZHIsIHBjcHVfdm0uYWRkcik7CiYjNDM7CXBjcHVfbG9jYWxfYmFzZSA9IHBjcHVfdm0uYWRkcjsKIAlnb3RvIG91dF9mcmVlX2FyOwogCiBlbm9tZW06CkBAIC0zMzUzLDcgJiM0MzszMzg5LDcgQEAgdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKQogCWFpLSZndDtncm91cHNbMF0ubnJfdW5pdHMgPSAxOwogCWFpLSZndDtncm91cHNbMF0uY3B1X21hcFswXSA9IDA7CiAKLQlwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBmYyk7CiYjNDM7CXBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIGZjLCBOVUxMKTsKIAlwY3B1X2ZyZWVfYWxsb2NfaW5mbyhhaSk7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS12bWVtbWFwLmMgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCmluZGV4IDk5ZTJiZTM5NjcxYjYzLi40NjNjMmY4YjYxMWMwMyAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCkBAIC0xOTgsNyAmIzQzOzE5OCw3IEBAIHN0YXRpYyBwbWRfdCAqIF9fbWVtaW5pdCB2bWVtbWFwX3BtZF9wb3B1bGF0ZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGluCiAJCWlmICghcCkKIAkJCXJldHVybiBOVUxMOwogCQlrZXJuZWxfcHRlX2luaXQocCk7Ci0JCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmFtcDtpbml0X21tLCBwbWQsIHApOwomIzQzOwkJcG1kX3BvcHVsYXRlX3N5bmMoYWRkciwgcG1kLCBwKTsKIAl9CiAJcmV0dXJuIHBtZDsKIH0KQEAgLTIxMSw3ICYjNDM7MjExLDcgQEAgc3RhdGljIHB1ZF90ICogX19tZW1pbml0IHZtZW1tYXBfcHVkX3BvcHVsYXRlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW4KIAkJaWYgKCFwKQogCQkJcmV0dXJuIE5VTEw7CiAJCXBtZF9pbml0KHApOwotCQlwdWRfcG9wdWxhdGUoJmFtcDtpbml0X21tLCBwdWQsIHApOwomIzQzOwkJcHVkX3BvcHVsYXRlX3N5bmMoYWRkciwgcHVkLCBwKTsKIAl9CiAJcmV0dXJuIHB1ZDsKIH0KZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAxYWZjYTM1NjhiOWI2NS4uM2Q5NGNhNGJiZDE3YjEgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTgwLDYgJiM0Mzs4MCw5IEBAIGJvb2wgaXNfdm1hbGxvY19hZGRyKGNvbnN0IHZvaWQgKngpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKHgpOwogCiYjNDM7CWlmIChpc19wZXJjcHVfYWRkcihhZGRyKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwogCXJldHVybiBhZGRyICZndDs9IFZNQUxMT0NfU1RBUlQgJmFtcDsmYW1wOyBhZGRyICZsdDsgVk1BTExPQ19FTkQ7CiB9CiBFWFBPUlRfU1lNQk9MKGlzX3ZtYWxsb2NfYWRkcik7CkBAIC0yOTUsOSAmIzQzOzI5OCw5IEBAIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHZtYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJcGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LAotCQkJdW5zaWduZWQgaW50IG1heF9wYWdlX3NoaWZ0KQomIzQzO2ludCB2bWFwX3JhbmdlX25vZmx1c2gocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAomIzQzOwkJICAgICAgIHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCwKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpCiB7CiAJcGdkX3QgKnBnZDsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwpAQCAtMzE0LDcgJiM0MzszMTcsNyBAQCBzdGF0aWMgaW50IHZtYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCUJVR19PTihhZGRyICZndDs9IGVuZCk7CiAKIAlzdGFydCA9IGFkZHI7Ci0JcGdkID0gcGdkX29mZnNldF9rKGFkZHIpOwomIzQzOwlwZ2QgPSBwZ2Rfb2Zmc2V0X3BnZChwZ2RpciwgYWRkcik7CiAJZG8gewogCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CiAJCWVyciA9IHZtYXBfcDRkX3JhbmdlKHBnZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90LApAQCAtMzM0LDggJiM0MzszMzcsOCBAQCBpbnQgdm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiB7CiAJaW50IGVycjsKIAotCWVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHBoeXNfYWRkciwgcGdwcm90X254KHByb3QpLAotCQkJCSBpb3JlbWFwX21heF9wYWdlX3NoaWZ0KTsKJiM0MzsJZXJyID0gdm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCBhZGRyLCBlbmQsIHBoeXNfYWRkciwKJiM0MzsJCQkJIHBncHJvdF9ueChwcm90KSwgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdCk7CiAJZmx1c2hfY2FjaGVfdm1hcChhZGRyLCBlbmQpOwogCWlmICghZXJyKQogCQllcnIgPSBrbXNhbl9pb3JlbWFwX3BhZ2VfcmFuZ2UoYWRkciwgZW5kLCBwaHlzX2FkZHIsIHByb3QsCkBAIC00NzgsNyAmIzQzOzQ4MSw3IEBAIHN0YXRpYyB2b2lkIHZ1bm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKICAqCiAgKiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uIG9ubHkuIERvIG5vdCB1c2Ugb3V0c2lkZSBtbS8uCiAgKi8KLXZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKJiM0Mzt2b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2gocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CiAJcGdkX3QgKnBnZDsKQEAgLTQ4Niw3ICYjNDM7NDg5LDcgQEAgdm9pZCBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogCXBndGJsX21vZF9tYXNrIG1hc2sgPSAwOwogCiAJQlVHX09OKGFkZHIgJmd0Oz0gZW5kKTsKLQlwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7CiYjNDM7CXBnZCA9IHBnZF9vZmZzZXRfcGdkKHBnZGlyLCBhZGRyKTsKIAlkbyB7CiAJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKIAkJaWYgKHBnZF9iYWQoKnBnZCkpCkBAIC01MDMsNyAmIzQzOzUwNiw3IEBAIHZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHZvaWQgdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJa21zYW5fdnVubWFwX3JhbmdlX25vZmx1c2goc3RhcnQsIGVuZCk7Ci0JX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChzdGFydCwgZW5kKTsKJiM0MzsJX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgc3RhcnQsIGVuZCk7CiB9CiAKIC8qKgpAQCAtNjcwLDkgJiM0Mzs2NzMsMTAgQEAgaW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yOyBpICYjNDM7PSAxVSAmbHQ7Jmx0OyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpKSB7CiAJCWludCBlcnI7CiAKLQkJZXJyID0gdm1hcF9yYW5nZV9ub2ZsdXNoKGFkZHIsIGFkZHIgJiM0MzsgKDFVTCAmbHQ7Jmx0OyBwYWdlX3NoaWZ0KSwKLQkJCQkJcGFnZV90b19waHlzKHBhZ2VzW2ldKSwgcHJvdCwKLQkJCQkJcGFnZV9zaGlmdCk7CiYjNDM7CQllcnIgPSB2bWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIGFkZHIsCiYjNDM7CQkJCQkgYWRkciAmIzQzOyAoMVVMICZsdDsmbHQ7IHBhZ2Vfc2hpZnQpLAomIzQzOwkJCQkJIHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIHByb3QsCiYjNDM7CQkJCQkgcGFnZV9zaGlmdCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCkBAIC00OTE5LDE1ICYjNDM7NDkyMywyNSBAQCBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKQogICogICBpbiAtIHRoZSBWQSB3ZSBzdGFydCB0aGUgc2VhcmNoKHJldmVyc2Ugb3JkZXIpOwogICogICBvdXQgLSB0aGUgVkEgd2l0aCB0aGUgaGlnaGVzdCBhbGlnbmVkIGVuZCBhZGRyZXNzLgogICogQGFsaWduOiBhbGlnbm1lbnQgZm9yIHJlcXVpcmVkIGhpZ2hlc3QgYWRkcmVzcwomIzQzOyAqIEBwY3B1OiB3aGV0aGVyIHJlcXVlc3QgYWxsb2NhdGlvbiBmcm9tIGxvY2FsIHBlcmNwdSBhcmVhCiAgKgogICogUmV0dXJuczogZGV0ZXJtaW5lZCBlbmQgYWRkcmVzcyB3aXRoaW4gdm1hcF9hcmVhCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nCi1wdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2Uoc3RydWN0IHZtYXBfYXJlYSAqKnZhLCB1bnNpZ25lZCBsb25nIGFsaWduKQomIzQzO3B2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShzdHJ1Y3Qgdm1hcF9hcmVhICoqdmEsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIGJvb2wgcGNwdSkKIHsKLQl1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kID0gVk1BTExPQ19FTkQgJmFtcDsgfihhbGlnbiAtIDEpOwomIzQzOwl1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAomIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUAomIzQzOwlpZiAocGNwdSkKJiM0MzsJCXZtYWxsb2NfZW5kID0gTE9DQUxfUEVSQ1BVX0VORCAmYW1wOyB+KGFsaWduIC0gMSk7CiYjNDM7CWVsc2UKJiM0MzsJCXZtYWxsb2NfZW5kID0gUEVSQ1BVX0VORCAmYW1wOyB+KGFsaWduIC0gMSk7CiYjNDM7I2Vsc2UKJiM0MzsJdm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCAmYW1wOyB+KGFsaWduIC0gMSk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJaWYgKGxpa2VseSgqdmEpKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yZXZlcnNlKCgqdmEpLAogCQkJCSZhbXA7ZnJlZV92bWFwX2FyZWFfbGlzdCwgbGlzdCkgewpAQCAtNDk2OCwxNCAmIzQzOzQ5ODIsMjIgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsCiAJCQkJICAgICBjb25zdCBzaXplX3QgKnNpemVzLCBpbnQgbnJfdm1zLAogCQkJCSAgICAgc2l6ZV90IGFsaWduKQogewotCWNvbnN0IHVuc2lnbmVkIGxvbmcgdm1hbGxvY19zdGFydCA9IEFMSUdOKFZNQUxMT0NfU1RBUlQsIGFsaWduKTsKLQljb25zdCB1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kID0gVk1BTExPQ19FTkQgJmFtcDsgfihhbGlnbiAtIDEpOwomIzQzOwl1bnNpZ25lZCBsb25nIHZtYWxsb2Nfc3RhcnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQ7CiAJc3RydWN0IHZtYXBfYXJlYSAqKnZhcywgKnZhOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKip2bXM7CiAJaW50IGFyZWEsIGFyZWEyLCBsYXN0X2FyZWEsIHRlcm1fYXJlYTsKIAl1bnNpZ25lZCBsb25nIGJhc2UsIHN0YXJ0LCBzaXplLCBlbmQsIGxhc3RfZW5kLCBvcmlnX3N0YXJ0LCBvcmlnX2VuZDsKIAlib29sIHB1cmdlZCA9IGZhbHNlOwogCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQCiYjNDM7CXZtYWxsb2Nfc3RhcnQgPSBBTElHTihQRVJDUFVfU1RBUlQsIGFsaWduKTsKJiM0MzsJdm1hbGxvY19lbmQgPSBQRVJDUFVfRU5EICZhbXA7IH4oYWxpZ24gLSAxKTsKJiM0MzsjZWxzZQomIzQzOwl2bWFsbG9jX3N0YXJ0ID0gQUxJR04oVk1BTExPQ19TVEFSVCwgYWxpZ24pOwomIzQzOwl2bWFsbG9jX2VuZCA9IFZNQUxMT0NfRU5EICZhbXA7IH4oYWxpZ24gLSAxKTsKJiM0MzsjZW5kaWYKJiM0MzsKIAkvKiB2ZXJpZnkgcGFyYW1ldGVycyBhbmQgYWxsb2NhdGUgZGF0YSBzdHJ1Y3R1cmVzICovCiAJQlVHX09OKG9mZnNldF9pbl9wYWdlKGFsaWduKSB8fCAhaXNfcG93ZXJfb2ZfMihhbGlnbikpOwogCWZvciAobGFzdF9hcmVhID0gMCwgYXJlYSA9IDA7IGFyZWEgJmx0OyBucl92bXM7IGFyZWEmIzQzOyYjNDM7KSB7CkBAIC01MDI0LDcgJiM0Mzs1MDQ2LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsCiAJZW5kID0gc3RhcnQgJiM0Mzsgc2l6ZXNbYXJlYV07CiAKIAl2YSA9IHB2bV9maW5kX3ZhX2VuY2xvc2VfYWRkcih2bWFsbG9jX2VuZCk7Ci0JYmFzZSA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZSgmYW1wO3ZhLCBhbGlnbikgLSBlbmQ7CiYjNDM7CWJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoJmFtcDt2YSwgYWxpZ24sIGZhbHNlKSAtIGVuZDsKIAogCXdoaWxlICh0cnVlKSB7CiAJCS8qCkBAIC01MDQ1LDcgJiM0Mzs1MDY3LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsCiAJCSAqIGJhc2UgZG93bndhcmRzIGFuZCB0aGVuIHJlY2hlY2suCiAJCSAqLwogCQlpZiAoYmFzZSAmIzQzOyBlbmQgJmd0OyB2YS0mZ3Q7dmFfZW5kKSB7Ci0JCQliYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKCZhbXA7dmEsIGFsaWduKSAtIGVuZDsKJiM0MzsJCQliYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKCZhbXA7dmEsIGFsaWduLCBmYWxzZSkgLSBlbmQ7CiAJCQl0ZXJtX2FyZWEgPSBhcmVhOwogCQkJY29udGludWU7CiAJCX0KQEAgLTUwNTUsNyAmIzQzOzUwNzcsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cywKIAkJICovCiAJCWlmIChiYXNlICYjNDM7IHN0YXJ0ICZsdDsgdmEtJmd0O3ZhX3N0YXJ0KSB7CiAJCQl2YSA9IG5vZGVfdG9fdmEocmJfcHJldigmYW1wO3ZhLSZndDtyYl9ub2RlKSk7Ci0JCQliYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKCZhbXA7dmEsIGFsaWduKSAtIGVuZDsKJiM0MzsJCQliYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKCZhbXA7dmEsIGFsaWduLCBmYWxzZSkgLSBlbmQ7CiAJCQl0ZXJtX2FyZWEgPSBhcmVhOwogCQkJY29udGludWU7CiAJCX0KQEAgLTUyMTgsNiAmIzQzOzUyNDAsODQgQEAgdm9pZCBwY3B1X2ZyZWVfdm1fYXJlYXMoc3RydWN0IHZtX3N0cnVjdCAqKnZtcywgaW50IG5yX3ZtcykKIAkJZnJlZV92bV9hcmVhKHZtc1tpXSk7CiAJa2ZyZWUodm1zKTsKIH0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAKJiM0MzsvKiBGaW5kIGZyZWUgdm0gYXJlYSBzdGFydHMgZnJvbSBoaW50ICovCiYjNDM7c3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsCiYjNDM7CQkJCSAgICAgaW50IHVuaXRfc2l6ZSwgc2l6ZV90IGFsaWduKQomIzQzO3sKJiM0MzsJc3RydWN0IHZtYXBfYXJlYSAqdG1wX3ZhLCAqdmE7CiYjNDM7CXN0cnVjdCB2bV9zdHJ1Y3QgKnZtOwomIzQzOwlzdHJ1Y3Qgdm1hcF9ub2RlICp2bjsKJiM0MzsJdW5zaWduZWQgbG9uZyBlbmQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXZhID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiYjNDM7CXZtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZtX3N0cnVjdCksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXZhIHx8ICF2bSkKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2ZyZWVfdm1hcF9hcmVhX2xvY2spOwomIzQzOwomIzQzOwl0bXBfdmEgPSBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIoaGludCk7CiYjNDM7CWlmICghdG1wX3ZhKSB7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2ZyZWVfdm1hcF9hcmVhX2xvY2spOwomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsJfQomIzQzOwomIzQzOwllbmQgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoJmFtcDt0bXBfdmEsIGFsaWduLCB0cnVlKTsKJiM0MzsKJiM0MzsJaWYgKGhpbnQgJiM0MzsgdW5pdF9zaXplICZndDsgZW5kKSB7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2ZyZWVfdm1hcF9hcmVhX2xvY2spOwomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB2YV9jbGlwKCZhbXA7ZnJlZV92bWFwX2FyZWFfcm9vdCwKJiM0MzsJCQkmYW1wO2ZyZWVfdm1hcF9hcmVhX2xpc3QsIHRtcF92YSwgaGludCwgdW5pdF9zaXplKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtmcmVlX3ZtYXBfYXJlYV9sb2NrKTsKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdmEtJmd0O3ZhX3N0YXJ0ID0gaGludDsKJiM0MzsJdmEtJmd0O3ZhX2VuZCA9IGhpbnQgJiM0MzsgdW5pdF9zaXplOwomIzQzOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2ZyZWVfdm1hcF9hcmVhX2xvY2spOwomIzQzOwomIzQzOwlpZiAoa2FzYW5fcG9wdWxhdGVfdm1hbGxvYyh2YS0mZ3Q7dmFfc3RhcnQsIHVuaXRfc2l6ZSwgR0ZQX0tFUk5FTCkpCiYjNDM7CQlnb3RvIGVycl9mcmVlX3NoYWRvdzsKJiM0MzsKJiM0MzsJdm4gPSBhZGRyX3RvX25vZGUodmEtJmd0O3ZhX3N0YXJ0KTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7dm4tJmd0O2J1c3kubG9jayk7CiYjNDM7CWluc2VydF92bWFwX2FyZWEodmEsICZhbXA7dm4tJmd0O2J1c3kucm9vdCwgJmFtcDt2bi0mZ3Q7YnVzeS5oZWFkKTsKJiM0MzsJc2V0dXBfdm1hbGxvY192bSh2bSwgdmEsIFZNX0FMTE9DLAomIzQzOwkJCSBwY3B1X2dldF9sb2NhbF92bV9hcmVhKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt2bi0mZ3Q7YnVzeS5sb2NrKTsKJiM0MzsKJiM0MzsJa2FzYW5fdW5wb2lzb25fdm1hcF9hcmVhcygmYW1wO3ZtLCAxLCBLQVNBTl9WTUFMTE9DX1BST1RfTk9STUFMKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHZtOwomIzQzOwomIzQzO2Vycl9mcmVlOgomIzQzOwlrbWVtX2NhY2hlX2ZyZWUodm1hcF9hcmVhX2NhY2hlcCwgdmEpOwomIzQzOwlrZnJlZSh2bSk7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzOwomIzQzO2Vycl9mcmVlX3NoYWRvdzoKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7ZnJlZV92bWFwX2FyZWFfbG9jayk7CiYjNDM7CXZhID0gbWVyZ2Vfb3JfYWRkX3ZtYXBfYXJlYV9hdWdtZW50KHZhLCAmYW1wO2ZyZWVfdm1hcF9hcmVhX3Jvb3QsCiYjNDM7CQkJJmFtcDtmcmVlX3ZtYXBfYXJlYV9saXN0KTsKJiM0MzsJaWYgKHZhKQomIzQzOwkJa2FzYW5fcmVsZWFzZV92bWFsbG9jKHZhLSZndDt2YV9zdGFydCwgdmEtJmd0O3ZhX2VuZCwgdmEtJmd0O3ZhX3N0YXJ0LCB2YS0mZ3Q7dmFfZW5kLAomIzQzOwkJCSAgICAgICBLQVNBTl9WTUFMTE9DX1BBR0VfUkFOR0UgfCBLQVNBTl9WTUFMTE9DX1RMQl9GTFVTSCk7CiYjNDM7CWtmcmVlKHZtKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtmcmVlX3ZtYXBfYXJlYV9sb2NrKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7fQomIzQzOyNlbmRpZgogI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KIAogI2lmZGVmIENPTkZJR19QUklOVEsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxODIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IExvY2FsIFBlci1DUFUgTWFwcGluZyBmb3IgQVJNNjQqKgoKT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZTogYEhBVkVfTE9DQUxfUEVSX0NQVV9NQVBgLiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIGNvbXBvbmVudHMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAocGVyY3B1LCBwYWdlIHRhYmxlcykgb24gQVJNNjQsIGFuZCB0aGlzICpkZWZpbml0ZWx5KiB0cmlnZ2VycyBteSBmdXp6aW5nIGluc3RpbmN0cy4gQW55dGhpbmcgdGhhdCBtZXNzZXMgd2l0aCBtZW1vcnkgbWFwcGluZyBpcyBhIHBvdGVudGlhbCBnb2xkbWluZSBmb3IgZmluZGluZyBzdWJ0bGUgYnVncy4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRoZSBmaWxlcyBiZWluZyB0b3VjaGVkOiBgYXJjaC9hcm02NC8uLi5gLCBgaW5jbHVkZS8uLi5gLCBhbmQgYG1tLy4uLmAsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgcGVyY3B1YCwgYG1tYCBhbmQgcGFnZSB0YWJsZSByZWxhdGVkIGZpbGVzLgoKVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhZGRpbmcgbG9jYWwgcGVyLWNwdSBtYXBwaW5nIHN1cHBvcnQgZm9yIEFSTTY0LiBUaGF0IHNjcmVhbXMgJiMzNDtmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IHRvIG1lLCBhbmQgaXQgbW9kaWZpZXMgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFdlIGhhdmUgdG8gZnV6eiB0aGlzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZS4gSSYjMzk7bSBzZWVpbmc6IGBzZXR1cF9wZXJjcHVfcGdkYCwgYG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtgLCBgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc2AsIGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCwgYHBjcHVfYWxsb2NfZmlyc3RfY2h1bmtgLCBgcGNwdV9zZXR1cF9maXJzdF9jaHVua2AsIGBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgLCBgdm1hcF9yYW5nZV9ub2ZsdXNoYCwgYW5kIGBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSB3YW50IHRvIHRhcmdldCB3aXRoIGZ1enppbmcuCgpJJiMzOTtsbCBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMgbm93LiBgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUGAgaXMgYSBgZGVmX2Jvb2wgeWAgZGVwZW5kaW5nIG9uIEFSTTY0IHBhZ2Ugc2l6ZXMgd2hpY2ggbWVhbnMgaXQgZG9lcyBub3QgbmVlZCB0byBiZSBleHBsaWNpdGx5IGVuYWJsZWQuIFRoYXQgc2FpZCwgaXQgd291bGQgYmUgdXNlZnVsIHRvIGxpc3QgdGhpcyBjb25maWcgaW4gb3VyIGZ1enppbmcgbGlzdC4gSSBzZWUgdGhhdCBgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktgIGlzIHNlbGVjdGVkIGJ5IEFSTTY0IG5vdy4gQWxzbywgYEFSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DYCBhbmQgYEFSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DYCBhcmUgc2VsZWN0ZWQgYnkgQVJNNjQuIEdvb2QgdG8ga25vdy4KClRoZXJlZm9yZSwgbXkgaW5pdGlhbCBsaXN0IG9mIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZyBhcmU6IGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCwgYHBjcHVfYWxsb2NfZmlyc3RfY2h1bmtgLCBgcGNwdV9zZXR1cF9maXJzdF9jaHVua2AsIGBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgLCBgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVua2AsIGBzZXR1cF9wZXJjcHVfcGdkYCBhbmQgYGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NgLiBOb3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgZXhpc3QgYW5kIGFyZSBwYXJ0IG9mIHRoZSB0YXJnZXQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8c3RydWN0IHZtX3N0cnVjdCBcXCopIC4qcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA2ODcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipSZWZpbmluZyBNeSBBcHByb2FjaCoqCgpSaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSB0YWtpbmcgYW5vdGhlciBsb29rIGF0IHRoaXMuIFRoZSBjdXJyZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBpc24mIzM5O3QgcXVpdGUgYXMgcm9idXN0IGFzIGl0IG5lZWRzIHRvIGJlLiBJIGNhbiBzZWUgYSBwb3RlbnRpYWwgZWRnZSBjYXNlIG9yIHR3byB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIG1pc3MsIGFuZCB0aGF0JiMzOTtzIG5vdCBhY2NlcHRhYmxlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzY2FsZSBJJiMzOTttIHdvcmtpbmcgYXQuIEkgbmVlZCB0byB0aWdodGVuIHRoaW5ncyB1cC4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgYmFjayBpbiBhbmQgcmVmaW5lIHRoZSBwYXR0ZXJuLiBJdCYjMzk7cyBhYm91dCBiZWluZyBwcmVjaXNlOyBsZWF2aW5nIG5vIHJvb20gZm9yIGFtYmlndWl0eS4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBnZXR0aW5nICphKiBtYXRjaDsgaXQmIzM5O3MgYWJvdXQgZ2V0dGluZyAqdGhlIHJpZ2h0KiBtYXRjaCBldmVyeSBzaW5nbGUgdGltZS4gVGltZSBmb3IgYSBtb3JlIGVsZWdhbnQgYW5kIGNvbXByZWhlbnNpdmUgc29sdXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgbG9va2Fyb3VuZHMsIHBlcmhhcHMgZXZlbiBhIHJlY3Vyc2l2ZSBwYXR0ZXJuLCBkZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHNvdXJjZSBkYXRhLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjI6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNwdV9nZXRfbG9jYWxfdm1fYXJlYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0zMTU9dm9pZCBwY3B1X2ZyZWVfdm1fYXJlYXMoc3RydWN0IHZtX3N0cnVjdCAqKnZtcywgaW50IG5yX3Ztcyk7XG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDozMTY6c3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0zMTctXHRcdFx0XHQgICAgIGludCB1bml0X3NpemUsIHNpemVfdCBhbGlnbik7XG4tLVxubW0vcGVyY3B1LXZtLmM9NDA3PXN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqcGNwdV9jcmVhdGVfY2h1bmsoZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3BlcmNwdS12bS5jLTQyOC1cdHVuc2lnbmVkIGxvbmcgaGludCA9IGRlbHRhICYjNDM7ICh1bnNpZ25lZCBsb25nKXBjcHVfbG9jYWxfYmFzZTtcbm1tL3BlcmNwdS12bS5jOjQyOTpcdHN0cnVjdCB2bV9zdHJ1Y3QgKmxvY2FsX3ZtID0gcGNwdV9nZXRfbG9jYWxfdm1fYXJlYShoaW50LFxubW0vcGVyY3B1LXZtLmMtNDMwLVx0XHRcdFx0XHRwY3B1X3VuaXRfc2l6ZSwgcGNwdV9hdG9tX3NpemUpO1xuLS1cbm1tL3ZtYWxsb2MuYz01MjM1PXZvaWQgcGNwdV9mcmVlX3ZtX2FyZWFzKHN0cnVjdCB2bV9zdHJ1Y3QgKip2bXMsIGludCBucl92bXMpXG4tLVxubW0vdm1hbGxvYy5jLTUyNDUtLyogRmluZCBmcmVlIHZtIGFyZWEgc3RhcnRzIGZyb20gaGludCAqL1xubW0vdm1hbGxvYy5jOjUyNDY6c3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsXG5tbS92bWFsbG9jLmMtNTI0Ny1cdFx0XHRcdCAgICAgaW50IHVuaXRfc2l6ZSwgc2l6ZV90IGFsaWduKVxuLS1cbm1tL3ZtYWxsb2MuYy01Mjk0LVx0c2V0dXBfdm1hbGxvY192bSh2bSwgdmEsIFZNX0FMTE9DLFxubW0vdm1hbGxvYy5jOjUyOTU6XHRcdFx0IHBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEpO1xubW0vdm1hbGxvYy5jLTUyOTYtXHRzcGluX3VubG9jayhcdTAwMjZ2bi1cdTAwM2VidXN5LmxvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzU3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFBlci1DUFUgVmlydHVhbCBNZW1vcnkgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCBpcyBkZWZpbml0ZWx5IHByZXNlbnQgYW5kIGFjY291bnRlZCBmb3IuIFRoYXQmIzM5O3MgZ29vZC4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHN5c3RlbSBpcyBhY3R1YWxseSBtYW5hZ2luZyBhbmQgbWFwcGluZyB0aGVzZSBsb2NhbCBwZXItQ1BVIHZpcnR1YWwgbWVtb3J5IGFyZWFzLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gZmlndXJlIG91dCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGFsbG9jYXRpb24gc3RyYXRlZ3kuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgZnVuY3Rpb24gd29ya3MgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUga2VybmVsJiMzOTtzIGRvaW5nIHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaD03NT1leHRlcm4gdm9pZCBsaW5lYXJfbWFwX21heWJlX3NwbGl0X3RvX3B0ZXModm9pZCk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oLTc2LSNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaDo3NzpleHRlcm4gdm9pZCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgtNzgtXHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpO1xuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmM9MTA3NT12b2lkIF9faW5pdCBsaW5lYXJfbWFwX21heWJlX3NwbGl0X3RvX3B0ZXModm9pZClcbi0tXG5hcmNoL2FybTY0L21tL21tdS5jLTEwODMtI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG5hcmNoL2FybTY0L21tL21tdS5jOjEwODQ6dm9pZCBfX2luaXQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsXG5hcmNoL2FybTY0L21tL21tdS5jLTEwODUtXHRcdFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD0xNTY9c3RhdGljIGlubGluZSBzaXplX3QgcGNwdV9vYmpfZnVsbF9zaXplKHNpemVfdCBzaXplKVxuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTE2OC0jaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjE2OTpleHRlcm4gdm9pZCBfX2luaXQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNzAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucik7XG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNzEtI2Vsc2Vcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjE3MjpzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxubW0vcGVyY3B1LWludGVybmFsLmgtMTczLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpXG4tLVxubW0vcGVyY3B1LmM9MzIwMz1pbnQgX19pbml0IHBjcHVfcGFnZV9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgcGNwdV9mY19jcHVfdG9fbm9kZV9mbl90IGNwdV90b19uZF9mbilcbi0tXG5tbS9wZXJjcHUuYy0zMjk5LVx0XHQgKi9cbm1tL3BlcmNwdS5jOjMzMDA6XHRcdG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsoY3B1LCAodW5zaWduZWQgbG9uZylwY3B1X3ZtLmFkZHIsXG5tbS9wZXJjcHUuYy0zMzAxLVx0XHRcdFx0XHUwMDI2cGFnZXNbdW5pdCAqIHVuaXRfcGFnZXNdLCB1bml0X3BhZ2VzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjE3NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGEgc2Vhc29uZWQga2VybmVsIGRldmVsb3BlciBhbmQgdGhlIHRleHQgcmVmZXJzIHRvIGV4YW1pbmluZyBrZXJuZWwgY29kZToKCioqQ2hlY2tpbmcgYGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc2AgZnVuY3Rpb24uIEltbWVkaWF0ZWx5LCBteSBtaW5kIGdvZXMgdG8gdGhlIHBvdGVudGlhbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbnVhbmNlcyB0aGlzIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgZ2VuZXJpYyBtZW1vcnkgc3luY2hyb25pemF0aW9uIHJvdXRpbmU7IHRoZSAmIzM0O2FyY2gmIzM0OyBwcmVmaXggc2NyZWFtcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBhcmNoaXRlY3R1cmFsIGNvbnRleHQgdGhpcyBhcHBsaWVzIHRvLiBJcyBpdCB4ODYsIEFSTSwgUklTQy1WLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGFyY2hpdGVjdHVyZSB3aWxsIGRpY3RhdGUgdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1vZGVscywgY2FjaGUgY29oZXJlbmN5IHByb3RvY29scywgYW5kIG1lbW9yeSBiYXJyaWVycyB0aGF0IGFyZSByZWxldmFudCBoZXJlLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGhvdyB0aGUgZnVuY3Rpb24gc3luY2hyb25pemVzIHRoZSBrZXJuZWwmIzM5O3MgdmlydHVhbCBtZW1vcnkgbWFwcGluZ3MuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGVuc3VyaW5nIGNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB2aXNpYmxlIHRvIHRoZSBrZXJuZWwgYW5kIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIG1lbW9yeS4gV2hhdCYjMzk7cyB0aGUgc3BlY2lmaWMgc2NlbmFyaW8/IElzIGl0IHJlbGF0ZWQgdG8gaGFuZGxpbmcgVExCIGZsdXNoZXM/IFBhZ2UgdGFibGUgdXBkYXRlcz8gT3IgcG9zc2libHkgY2FjaGUgaW52YWxpZGF0aW9uIGZvciBtZW1vcnkgcmVnaW9ucyBzaGFyZWQgYmV0d2VlbiBkaWZmZXJlbnQgcHJvY2Vzc2VzIG9yIGRldmljZXM/IFRoZSBjb21tZW50cyB3aXRoaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZiBzaG91bGQgYmUgbXkgZmlyc3QgcG9ydCBvZiBjYWxsLCBidXQgSSBhbnRpY2lwYXRlIGxvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBzcGVjaWZpYyB1c2UgY2FzZXMgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgaXRzIHJvbGUgaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bSBhbHNvIGludGVyZXN0ZWQgaW4gaXRzIGVmZmljaWVuY3ksIEkgd2lsbCBoYXZlIHRvIGxvb2sgdG8gc2VlIGlmIHRoaXMgb3BlcmF0aW9uIGhhcyBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDIyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0va2VybmVsL3RyYXBzLmM9OTIxPWFzbWxpbmthZ2Ugdm9pZCBoYW5kbGVfYmFkX3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC90cmFwcy5jLTk1OC0gKi9cbmFyY2gvYXJtL2tlcm5lbC90cmFwcy5jOjk1OTp2b2lkIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG5hcmNoL2FybS9rZXJuZWwvdHJhcHMuYy05NjAte1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oPTM4PXN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGVfc3luYyh1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kcClcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaC00MS1cdGlmIChBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLIFx1MDAyNiBQR1RCTF9QVURfTU9ESUZJRUQpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaDo0MjpcdFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTQzLX1cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaD0xNDE9c3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHAsIHB0ZV90ICpwdGVwKVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTE0NC1cdGlmIChBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLIFx1MDAyNiBQR1RCTF9QTURfTU9ESUZJRUQpXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNDU6XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaC0xNDYtfVxuLS1cbmFyY2gvYXJtNjQvbW0va2FzYW5faW5pdC5jPTE3Nj1zdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcGdkX3BvcHVsYXRlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmMtMTkwLVx0aWYgKG1hc2sgXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXG5hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYzoxOTE6XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIGVuZCk7XG5hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYy0xOTItfVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmM9NzM9dm9pZCBfX2luaXQgc2V0dXBfcGVyY3B1X3BnZCh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtOTctXG5hcmNoL2FybTY0L21tL21tdS5jOjk4OnZvaWQgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbmFyY2gvYXJtNjQvbW0vbW11LmMtOTkte1xuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmM9MTg2Nj1zdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3RhYmxlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg4NS1cdGlmIChtYXNrIFx1MDAyNiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLKVxuYXJjaC9hcm02NC9tbS9tbXUuYzoxODg2Olx0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xuYXJjaC9hcm02NC9tbS9tbXUuYy0xODg3LX1cbi0tXG5hcmNoL2FybTY0L21tL21tdS5jPTIwOTA9aW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMjEwNy1cdGlmIChtYXNrIFx1MDAyNiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLKVxuYXJjaC9hcm02NC9tbS9tbXUuYzoyMTA4Olx0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBzdGFydCAmIzQzOyBzaXplKTtcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjEwOS1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmM9MTExPXZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMtMjIwLVx0ICogc2V0dXBfYXJjaCgpLCBidXQgcGVyY3B1IGRhdGEgYWxzbyBuZWVkcyB0byBiZSBhdmFpbGFibGUgaW5cbmFyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYzoyMjE6XHQgKiB0aGUgc21wYm9vdCBhc20gYW5kIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoKSBkb2VzbiYjMzk7dCBzeW5jIHRvXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMtMjIyLVx0ICogc3dhcHBlcl9wZ19kaXIgb24gMzItYml0LiBUaGUgcGVyLWNwdSBtYXBwaW5ncyBuZWVkIHRvIGJlIGF2YWlsYWJsZVxuLS1cbmFyY2gveDg2L21tL2ZhdWx0LmM9MjY5PU5PS1BST0JFX1NZTUJPTCh2bWFsbG9jX2ZhdWx0KTtcbmFyY2gveDg2L21tL2ZhdWx0LmMtMjcwLVxuYXJjaC94ODYvbW0vZmF1bHQuYzoyNzE6dm9pZCBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuYXJjaC94ODYvbW0vZmF1bHQuYy0yNzIte1xuLS1cbmFyY2gveDg2L21tL2luaXRfNjQuYz0yMTg9c3RhdGljIHZvaWQgc3luY19nbG9iYWxfcGdkcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMjM4LSAqL1xuYXJjaC94ODYvbW0vaW5pdF82NC5jOjIzOTp2b2lkIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMjQwLXtcbi0tXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaC0xOC1cdFx0aWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgXHUwMDI2IFBHVEJMX1BHRF9NT0RJRklFRClcdFxcXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaDoxOTpcdFx0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1x0XHRcXFxuaW5jbHVkZS9saW51eC9wZ2FsbG9jLmgtMjAtXHR9IHdoaWxlICgwKVxuLS1cbmluY2x1ZGUvbGludXgvcGdhbGxvYy5oLTI1LVx0XHRpZiAoQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyBcdTAwMjYgUEdUQkxfUDREX01PRElGSUVEKVx0XFxcbmluY2x1ZGUvbGludXgvcGdhbGxvYy5oOjI2Olx0XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaC0yNy1cdH0gd2hpbGUgKDApXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTcyOD1zdGF0aWMgaW5saW5lIHZvaWQgbW9kaWZ5X3Byb3RfY29tbWl0X3B0ZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xNzQ1LSAqIGFuZCBsZXQgZ2VuZXJpYyB2bWFsbG9jLCBpb3JlbWFwIGFuZCBwYWdlIHRhYmxlIHVwZGF0ZSBjb2RlIGtub3cgd2hlblxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTc0NjogKiBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKCkgbmVlZHMgdG8gYmUgY2FsbGVkLlxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTc0Ny0gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xNzUyLS8qXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoxNzUzOiAqIFRoZXJlIGlzIG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoKS4gSXQgaXNcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTE3NTQtICogcmVsaWVkIHVwb24gdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGNhbGxzIG91dCBpZiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTc1Ni0gKi9cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjE3NTc6dm9pZCBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTE3NTgtXG4tLVxubW0vbWVtb3J5LmM9MzQ2Mz1zdGF0aWMgaW50IF9fYXBwbHlfdG9fcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21lbW9yeS5jLTM0OTYtXHRpZiAobWFzayBcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcbm1tL21lbW9yeS5jOjM0OTc6XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIHN0YXJ0ICYjNDM7IHNpemUpO1xubW0vbWVtb3J5LmMtMzQ5OC1cbi0tXG5tbS92bWFsbG9jLmM9MzAxPWludCB2bWFwX3JhbmdlX25vZmx1c2gocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0zMjktXHRpZiAobWFzayBcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcbm1tL3ZtYWxsb2MuYzozMzA6XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIGVuZCk7XG5tbS92bWFsbG9jLmMtMzMxLVxuLS1cbm1tL3ZtYWxsb2MuYz00ODQ9dm9pZCBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vdm1hbGxvYy5jLTUwMi1cdGlmIChtYXNrIFx1MDAyNiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLKVxubW0vdm1hbGxvYy5jOjUwMzpcdFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgZW5kKTtcbm1tL3ZtYWxsb2MuYy01MDQtfVxuLS1cbm1tL3ZtYWxsb2MuYz02MjY9c3RhdGljIGludCB2bWFwX3NtYWxsX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtNjQ3LVx0aWYgKG1hc2sgXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXG5tbS92bWFsbG9jLmM6NjQ4Olx0XHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xubW0vdm1hbGxvYy5jLTY0OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2NTAKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogMTYxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIEV4cGxvcmF0aW9uIG9mIFBlci1DUFUgTWFwcGluZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGVyLUNQVSBtYXBwaW5nIHN0dWZmLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcga2V5IGZ1bmN0aW9uczogYGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NgLCBgc2V0dXBfcGVyY3B1X3BnZGAsIGBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rYCwgYW5kIGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdGhpcyBmZWF0dXJlLCBhbmQgbGlrZWx5IGNvbnRhaW4gdGhlIG1vc3QgaW50ZXJlc3RpbmcgbG9naWMuCgpGaXJzdCwgSSB3YW50IHRvIHBpbiBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhpcyBmZWF0dXJlJiMzOTtzIGVuYWJsZW1lbnQuIExldCYjMzk7cyBzdGFydCB3aXRoIGBIQVZFX0xPQ0FMX1BFUl9DUFVfTUFQYC4gUXVpY2tseSBjaGVja2luZyBgYXJjaC9hcm02NC9LY29uZmlnYCwgSSBzZWUgaXQmIzM5O3MgYSBgZGVmX2Jvb2wgeWAgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIHRoZSBkZXBlbmRlbmNpZXMgKEFSTTY0IHdpdGggc3BlY2lmaWMgVkEgYml0IHNpemVzIGFuZCBwYWdlIHNpemVzKSBhcmUgbWV0LiBUaGlzIG1lYW5zIHdlIGRvbiYjMzk7dCBoYXZlIHRvIG1hbnVhbGx5IGVuYWJsZSBpdC4gSG93ZXZlciwgaXQmIzM5O3Mgc3RpbGwgd29ydGh3aGlsZSB0byBkb2N1bWVudCB0aGF0IGl0JiMzOTtzIHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLgoKVGhlbiwgSSYjMzk7bGwgbW92ZSBvbiB0byBgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktgLiBBIHF1aWNrIGNoZWNrIGluIGBhcmNoL2FybTY0L0tjb25maWdgIHJldmVhbHMgdGhhdCBBUk02NCAqc2VsZWN0cyogdGhpcyBjb25maWcsIG1lYW5pbmcgaXQmIzM5O3MgYWx3YXlzIGVuYWJsZWQgd2hlbiBBUk02NCBpcyBhY3RpdmUuCgpOZXh0LCBJJiMzOTtsbCB2ZXJpZnkgd2hhdCBJIHRoaW5rOiBgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNgIGFuZCBgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNgIGFyZSBhbHNvIHNlbGVjdGVkIGJ5IEFSTTY0LiBDb25maXJtZWQuCgpOb3csIGxldCYjMzk7cyBqdW1wIHRvIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUGAgYW5kIHNlZSBpdCYjMzk7cyBhIGBib29sYCBpbiBgbW0vS2NvbmZpZ2AuCgpOb3csIEkgd2FudCB0byB2ZXJpZnkgaWYgdGhlIGZ1bmN0aW9ucyBJIGluaXRpYWxseSBsaXN0ZWQgYXJlIGdvb2QgdGFyZ2V0cyBmb3IgaW52ZXN0aWdhdGlvbi4KCmBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCBmcm9tIGBtbS92bWFsbG9jLmNgIGlzIGVuYWJsZWQgYnkgdGhlIGBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUGAsIHNvIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4KCmBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rYCBmcm9tIGBhcmNoL2FybTY0L21tL21tdS5jYCBpcyBhbHNvIGVuYWJsZWQgYnkgYENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQYCwgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKYHNldHVwX3BlcmNwdV9wZ2RgIGZyb20gYGFyY2gvYXJtNjQvbW0vbW11LmNgIGlzIGFsc28gYSBrZXkgZnVuY3Rpb24uCgpgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc2AgZnJvbSBgYXJjaC9hcm02NC9tbS9tbXUuY2AgaXMgYSBuZXcgZnVuY3Rpb24gYW5kIGlzIGFsc28gYSBrZXkgZnVuY3Rpb24uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGEgZmV3IG1vcmUgZnVuY3Rpb25zLgoKYHZtYXBfcmFuZ2Vfbm9mbHVzaGAgaW4gYG1tL3ZtYWxsb2MuY2AgYW5kIGBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoYCBhbHNvIGluIGBtbS92bWFsbG9jLmNgIGhhdmUgYmVlbiBjaGFuZ2VkIHdpdGggYSBuZXcgcGFyYW1ldGVyLiBMZXQmIzM5O3Mga2VlcCBpbiBtaW5kIHRoYXQgdGhleSBhcmUgbm90IG5ldywgYnV0IGhhdmUgYmVlbiBleHRlbmRlZC4gSG93ZXZlciwgbGV0JiMzOTtzIGtlZXAgdGhlbSBvbiB0aGUgbGlzdCBqdXN0IGluIGNhc2UuCgpgcGNwdV9hbGxvY19maXJzdF9jaHVua2AgaW4gYG1tL3BlcmNwdS5jYAoKYHBjcHVfc2V0dXBfZmlyc3RfY2h1bmtgIGluIGBtbS9wZXJjcHUuY2AKCmBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgIGluIGBtbS9wZXJjcHUuY2AKCk9rYXksIHNvIEkgaGF2ZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGZ1bmN0aW9ucyB0byByZXZpZXcsIHRob3VnaCBJIGNhbiBwcmlvcml0aXplIGJhc2VkIG9uIG5vdmVsdHkgYW5kIHNwZWNpZmljaXR5IHRvIHRoaXMgcGVyLUNQVSBmZWF0dXJlOgoKQmFzZWQgb24gdGhlIGludmVzdGlnYXRpb24sIEkgaGF2ZSB0aGUgZm9sbG93aW5nIHNldCBvZiBrZXkgc3ltYm9sczoKCi0gICBgcGNwdV9nZXRfbG9jYWxfdm1fYXJlYWAKLSAgIGBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rYAotICAgYHNldHVwX3BlcmNwdV9wZ2RgCi0gICBgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc2AKLSAgIGB2bWFwX3JhbmdlX25vZmx1c2hgIChleHRlbmRlZCkKLSAgIGBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoYCAoZXh0ZW5kZWQpCi0gICBgcGNwdV9hbGxvY19maXJzdF9jaHVua2AKLSAgIGBwY3B1X3NldHVwX2ZpcnN0X2NodW5rYAotICAgYHBjcHVfcGFnZV9maXJzdF9jaHVua2AKCkFuZCB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmU6CgotICAgYEhBVkVfTE9DQUxfUEVSX0NQVV9NQVBgCi0gICBgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNgCi0gICBgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNgCi0gICBgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktgCgpTaW5jZSB0aGUgb3RoZXIgZnVuY3Rpb25zIGB2bWFwX3JhbmdlX25vZmx1c2hgLCBgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaGAsIGBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rYCwgYHBjcHVfc2V0dXBfZmlyc3RfY2h1bmtgIGFuZCBgcGNwdV9wYWdlX2ZpcnN0X2NodW5rYCBhcmUgZ2VuZXJpYywgaXQmIzM5O3MgY2xlYXIKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAyMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEFWRV9MT0NBTF9QRVJfQ1BVX01BUCYjMzQ7LAogICAgJiMzNDtBUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQyYjMzQ7LAogICAgJiMzNDtBUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQyYjMzQ7LAogICAgJiMzNDtORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEmIzM0OywKICAgICYjMzQ7bWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayYjMzQ7LAogICAgJiMzNDtzZXR1cF9wZXJjcHVfcGdkJiMzNDssCiAgICAmIzM0O2FyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgbG9jYWwgcGVyLWNwdSBtYXBwaW5nIHN1cHBvcnQgZm9yIEFSTTY0LCBtb2RpZnlpbmcgY29yZSBrZXJuZWwgbG9naWMgZm9yIHBlcmNwdSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSB0YWJsZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hBVkVfTE9DQUxfUEVSX0NQVV9NQVAmIzM0OywKICAgICYjMzQ7QVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkMmIzM0OywKICAgICYjMzQ7QVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkMmIzM0OywKICAgICYjMzQ7TkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwY3B1X2dldF9sb2NhbF92bV9hcmVhJiMzNDssCiAgICAmIzM0O21hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsmIzM0OywKICAgICYjMzQ7c2V0dXBfcGVyY3B1X3BnZCYjMzQ7LAogICAgJiMzNDthcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGxvY2FsIHBlci1jcHUgbWFwcGluZyBzdXBwb3J0IGZvciBBUk02NCwgbW9kaWZ5aW5nIGNvcmUga2VybmVsIGxvZ2ljIGZvciBwZXJjcHUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTVUMjI6NDA6MjQuNTY3OTE1NTg3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1Njg5NDc4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFwiLFxuICAgIFwiQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcIixcbiAgICBcIkFSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXCIsXG4gICAgXCJORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWFcIixcbiAgICBcIm1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtcIixcbiAgICBcInNldHVwX3BlcmNwdV9wZ2RcIixcbiAgICBcImFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBsb2NhbCBwZXItY3B1IG1hcHBpbmcgc3VwcG9ydCBmb3IgQVJNNjQsIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgcGVyY3B1IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjI6NDA6MjQuNTY3OTI0MTY3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMwNTAzMjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmJhY2NiMzUxMWZjYWRkMGZhMTJiNTJjNzc5M2Y4Y2YwMTgwMDA2ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxNSAyMjo0MDoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcXG5pbmRleCBiM2FmZTA2ODg5MTliZC4uOTVmZmQxNTExODdmMjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXFxuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuQEAgLTQxLDkgKzQxLDExIEBAIGNvbmZpZyBBUk02NFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcgaWYgQVJNNjRfSEFGVFxcbitcXHRzZWxlY3QgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX1BSRUVNUFRfTEFaWVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfUFREVU1QXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19QVEVfU1BFQ0lBTFxcbitcXHRzZWxlY3QgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbiBcXHRzZWxlY3QgQVJDSF9IQVNfU0VUVVBfRE1BX09QU1xcbiBcXHRzZWxlY3QgQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVBcXG5AQCAtMjI0LDYgKzIyNiw3IEBAIGNvbmZpZyBBUk02NFxcbiBcXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiBcXHRzZWxlY3QgSEFWRV9SU0VRXFxuIFxcdHNlbGVjdCBIQVZFX1JVU1QgaWYgUlVTVENfU1VQUE9SVFNfQVJNNjRcXG4rXFx0c2VsZWN0IEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXFxuIFxcdHNlbGVjdCBIQVZFX1NUQUNLUFJPVEVDVE9SXFxuIFxcdHNlbGVjdCBIQVZFX1NUQVRJQ19DQUxMIGlmIENGSVxcbiBcXHRzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXFxuQEAgLTIzOSw2ICsyNDIsNyBAQCBjb25maWcgQVJNNjRcXG4gXFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuIFxcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQVxcbiBcXHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXFxuK1xcdHNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xcbiBcXHRzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RIXFxuIFxcdHNlbGVjdCBPRlxcbiBcXHRzZWxlY3QgT0ZfRUFSTFlfRkxBVFRSRUVcXG5AQCAtNDExLDYgKzQxNSwxMSBAQCBjb25maWcgS0FTQU5fU0hBRE9XX09GRlNFVFxcbiBjb25maWcgVU5XSU5EX1RBQkxFU1xcbiBcXHRib29sXFxuIFxcbitjb25maWcgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitcXHRkZWZfYm9vbCB5XFxuK1xcdGRlcGVuZHMgb24gKEFSTTY0X1ZBX0JJVFNfNDggXFx1MDAyNlxcdTAwMjYgKEFSTTY0XzRLX1BBR0VTIHx8IEFSTTY0XzY0S19QQUdFUykpIHx8IFxcXFxcXG4rXFx0XFx0ICAgKEFSTTY0X1ZBX0JJVFNfNDcgXFx1MDAyNlxcdTAwMjYgQVJNNjRfMTZLX1BBR0VTKVxcbitcXG4gc291cmNlIFxcXCJhcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zXFxcIlxcbiBcXG4gbWVudSBcXFwiS2VybmVsIEZlYXR1cmVzXFxcIlxcbkBAIC0xNTgxLDkgKzE1OTAsNiBAQCBjb25maWcgTlVNQVxcbiBcXHRib29sIFxcXCJOVU1BIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBTY2hlZHVsZXIgU3VwcG9ydFxcXCJcXG4gXFx0c2VsZWN0IEdFTkVSSUNfQVJDSF9OVU1BXFxuIFxcdHNlbGVjdCBPRl9OVU1BXFxuLVxcdHNlbGVjdCBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxcbi1cXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LXFxuLVxcdHNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xcbiBcXHRzZWxlY3QgVVNFX1BFUkNQVV9OVU1BX05PREVfSURcXG4gXFx0aGVscFxcbiBcXHQgIEVuYWJsZSBOVU1BIChOb24tVW5pZm9ybSBNZW1vcnkgQWNjZXNzKSBzdXBwb3J0LlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaFxcbmluZGV4IDVlMTIxMWM1NDBhYjIzLi5hYTA4MThmN2VjNThjNSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaFxcbkBAIC02Myw2ICs2Myw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcm02NF9rZXJuZWxfdW5tYXBwZWRfYXRfZWwwKHZvaWQpXFxuIGV4dGVybiB2b2lkIGFybTY0X21lbWJsb2NrX2luaXQodm9pZCk7XFxuIGV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpO1xcbiBleHRlcm4gdm9pZCBib290bWVtX2luaXQodm9pZCk7XFxuK2V4dGVybiB2b2lkIHNldHVwX3BlcmNwdV9wZ2Qodm9pZCk7XFxuIGV4dGVybiB2b2lkIGNyZWF0ZV9tYXBwaW5nX25vYWxsb2MocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyB2aXJ0LFxcbiBcXHRcXHRcXHRcXHQgICBwaHlzX2FkZHJfdCBzaXplLCBwZ3Byb3RfdCBwcm90KTtcXG4gZXh0ZXJuIHZvaWQgY3JlYXRlX3BnZF9tYXBwaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwaHlzX2FkZHJfdCBwaHlzLFxcbkBAIC03Miw2ICs3MywxMCBAQCBleHRlcm4gdm9pZCAqZml4bWFwX3JlbWFwX2ZkdChwaHlzX2FkZHJfdCBkdF9waHlzLCBpbnQgKnNpemUsIHBncHJvdF90IHByb3QpO1xcbiBleHRlcm4gdm9pZCBtYXJrX2xpbmVhcl90ZXh0X2FsaWFzX3JvKHZvaWQpO1xcbiBleHRlcm4gaW50IHNwbGl0X2tlcm5lbF9sZWFmX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xcbiBleHRlcm4gdm9pZCBsaW5lYXJfbWFwX21heWJlX3NwbGl0X3RvX3B0ZXModm9pZCk7XFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitleHRlcm4gdm9pZCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKTtcXG4rI2VuZGlmXFxuIFxcbiAvKlxcbiAgKiBUaGlzIGNoZWNrIGlzIHRyaWdnZXJlZCBkdXJpbmcgdGhlIGVhcmx5IGJvb3QgYmVmb3JlIHRoZSBjcHVmZWF0dXJlXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaFxcbmluZGV4IDgwM2I2ODc1ODE1Mjc1Li4wZTk5MWI5OGVkOWVhZiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3RsYmZsdXNoLmhcXHUwMDNlXFxuIFxcbiBleHRlcm4gYm9vbCByb2RhdGFfZnVsbDtcXG4rZXh0ZXJuIHBnZF90ICpwZXJjcHVfcGdkW05SX0NQVVNdO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGNvbnRleHRpZHJfdGhyZWFkX3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpXFxuIHtcXG5AQCAtMTM4LDcgKzEzOSwxMyBAQCB2b2lkIF9fY3B1X3JlcGxhY2VfdHRicjEocGdkX3QgKnBnZHAsIGJvb2wgY25wKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfZW5hYmxlX3N3YXBwZXJfY25wKHZvaWQpXFxuIHtcXG4tXFx0X19jcHVfcmVwbGFjZV90dGJyMShsbV9hbGlhcyhzd2FwcGVyX3BnX2RpciksIHRydWUpO1xcbitcXHR1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xcbitcXHRwZ2RfdCAqdHRicjEgPSBwZXJjcHVfcGdkW2NwdV07XFxuK1xcbitcXHRpZiAoY3B1ID09IDApXFxuK1xcdFxcdHR0YnIxID0gbG1fYWxpYXMoc3dhcHBlcl9wZ19kaXIpO1xcbitcXG4rXFx0X19jcHVfcmVwbGFjZV90dGJyMSh0dGJyMSwgZmFsc2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlcGxhY2VfdHRicjEocGdkX3QgKnBnZHApXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oXFxuaW5kZXggYjU3YjJiYjAwOTY3NzQuLjAzZDE0OWY5MTc3YzBlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oXFxuQEAgLTE0Miw2ICsxNDIsMjcgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXFxuICN1bmRlZiBQRVJDUFVfT1BcXG4gI3VuZGVmIFBFUkNQVV9SRVRfT1BcXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfbG9jYWxfb2ZmO1xcbitcXG4rI2RlZmluZSBsb2NhbF9jcHVfcHRyKHB0cilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3ZlcmlmeV9wY3B1X3B0cihwdHIpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0U0hJRlRfUEVSQ1BVX1BUUihwdHIsIF9fcGVyX2NwdV9sb2NhbF9vZmYpO1xcdFxcdFxcdFxcXFxcXG4rfSlcXG4rXFxuKyNkZWZpbmUgX3BjcF9wcm90ZWN0KG9wLCBwY3AsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRvcChsb2NhbF9jcHVfcHRyKFxcdTAwMjYocGNwKSksIF9fVkFfQVJHU19fKTtcXHRcXHRcXHRcXHRcXFxcXFxuK30pXFxuK1xcbisjZGVmaW5lIF9wY3BfcHJvdGVjdF9yZXR1cm4ob3AsIHBjcCwgYXJncy4uLilcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR0eXBlb2YocGNwKSBfX3JldHZhbDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fcmV0dmFsID0gKHR5cGVvZihwY3ApKW9wKGxvY2FsX2NwdV9wdHIoXFx1MDAyNihwY3ApKSwgIyNhcmdzKTtcXHRcXFxcXFxuK1xcdF9fcmV0dmFsO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSlcXG4rI2Vsc2VcXG4gLypcXG4gICogSXQgd291bGQgYmUgbmljZSB0byBhdm9pZCB0aGUgY29uZGl0aW9uYWwgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgd2hlblxcbiAgKiByZS1lbmFibGluZyBwcmVlbXB0aW9uIGZvciBwcmVlbXB0aWJsZSBrZXJuZWxzLCBidXQgZG9pbmcgdGhhdCBpbiBhIHdheVxcbkBAIC0xNTIsNyArMTczLDYgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXFxuICAqIHByZWVtcHRpb24gcG9pbnQgd2hlbiBUSUZfTkVFRF9SRVNDSEVEIGdldHMgc2V0IHdoaWxlIHByZWVtcHRpb24gaXNcXG4gICogZGlzYWJsZWQuXFxuICAqL1xcbi1cXG4gI2RlZmluZSBfcGNwX3Byb3RlY3Qob3AsIHBjcCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdHByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0xNjgsNiArMTg4LDcgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXFxuIFxcdHByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdF9fcmV0dmFsO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfSlcXG4rI2VuZGlmXFxuIFxcbiAjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApXFx0XFx0XFxcXFxcbiBcXHRfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfOCwgcGNwKVxcbkBAIC0yNDMsNiArMjY0LDE5IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKVxcbiBcXG4gI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnNjQocGNwLCBvLCBuKVxcdHRoaXNfY3B1X2NtcHhjaGdfOChwY3AsIG8sIG4pXFxuIFxcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnMTI4KHBjcCwgbywgbilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR0eXBlZGVmIHR5cGVvZihwY3ApIHBjcF9vcF9UX187XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR1MTI4IG9sZF9fLCBuZXdfXywgcmV0X187XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRwY3Bfb3BfVF9fICpwdHJfXztcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdG9sZF9fID0gbztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdG5ld19fID0gbjtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHB0cl9fID0gbG9jYWxfY3B1X3B0cihcXHUwMDI2KHBjcCkpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cmV0X18gPSBjbXB4Y2hnMTI4X2xvY2FsKCh2b2lkICopcHRyX18sIG9sZF9fLCBuZXdfXyk7XFx0XFx0XFxcXFxcbitcXHRyZXRfXztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK30pXFxuKyNlbHNlXFxuICNkZWZpbmUgdGhpc19jcHVfY21weGNoZzEyOChwY3AsIG8sIG4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0dHlwZWRlZiB0eXBlb2YocGNwKSBwY3Bfb3BfVF9fO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtMjU2LDYgKzI5MCw3IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKVxcbiBcXHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHRyZXRfXztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIH0pXFxuKyNlbmRpZlxcbiBcXG4gI2lmZGVmIF9fS1ZNX05WSEVfSFlQRVJWSVNPUl9fXFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faHlwX3Blcl9jcHVfb2Zmc2V0KHVuc2lnbmVkIGludCBjcHUpO1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuaW5kZXggMWI0NTA5ZDMzODJjNjMuLmRkMWFjODRhMTE2MDVlIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5AQCAtMzMsMTEgKzMzLDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kcClcXG4gXFx0cHVkdmFsIHw9IChtbSA9PSBcXHUwMDI2aW5pdF9tbSkgPyBQVURfVEFCTEVfVVhOIDogUFVEX1RBQkxFX1BYTjtcXG4gXFx0X19wdWRfcG9wdWxhdGUocHVkcCwgX19wYShwbWRwKSwgcHVkdmFsKTtcXG4gfVxcbitcXG4rI2lmZGVmIENPTkZJR19BUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQ1xcbitzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlX3N5bmModW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApXFxuK3tcXG4rXFx0cHVkX3BvcHVsYXRlKFxcdTAwMjZpbml0X21tLCBwdWRwLCBwbWRwKTtcXG4rXFx0aWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgXFx1MDAyNiBQR1RCTF9QVURfTU9ESUZJRUQpXFxuK1xcdFxcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XFxuK31cXG4rI2VuZGlmXFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B1ZF9wb3B1bGF0ZShwdWRfdCAqcHVkcCwgcGh5c19hZGRyX3QgcG1kcCwgcHVkdmFsX3QgcHJvdClcXG4ge1xcbiBcXHRCVUlMRF9CVUcoKTtcXG4gfVxcbitcXG4rI2lmZGVmIENPTkZJR19BUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQ1xcbitzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlX3N5bmModW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApXFxuK3tcXG4rXFx0QlVJTERfQlVHKCk7XFxuK31cXG4rI2VuZGlmXFxuICNlbmRpZlxcdC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDIgKi9cXG4gXFxuICNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAzXFxuQEAgLTEyMSw0ICsxMzcsMTIgQEAgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCwgcGd0YWJsZV90IHB0ZXApXFxuIFxcdFxcdCAgICAgICBQTURfVFlQRV9UQUJMRSB8IFBNRF9UQUJMRV9BRiB8IFBNRF9UQUJMRV9QWE4pO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGVfc3luYyh1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwLCBwdGVfdCAqcHRlcClcXG4re1xcbitcXHRwbWRfcG9wdWxhdGVfa2VybmVsKFxcdTAwMjZpbml0X21tLCBwbWRwLCBwdGVwKTtcXG4rXFx0aWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgXFx1MDAyNiBQR1RCTF9QTURfTU9ESUZJRUQpXFxuK1xcdFxcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XFxuK31cXG4rI2VuZGlmXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggMjc2ODljNjJiZDI1ZGQuLjgzY2Q2NTYxMGQ3ZjdkIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtMTgsMTQgKzE4LDM1IEBAXFxuICAqIFZNQUxMT0MgcmFuZ2UuXFxuICAqXFxuICAqIFZNQUxMT0NfU1RBUlQ6IGJlZ2lubmluZyBvZiB0aGUga2VybmVsIHZtYWxsb2Mgc3BhY2VcXG4tICogVk1BTExPQ19FTkQ6IGV4dGVuZHMgdG8gdGhlIGF2YWlsYWJsZSBzcGFjZSBiZWxvdyB2bWVtbWFwXFxuKyAqIFZNQUxMT0NfRU5EOiBleHRlbmRzIHRvIHRoZSBzcGFjZSBiZWxvdyBnbG9iYWwgcGVyY3B1IGFyZWFcXG4gICovXFxuICNkZWZpbmUgVk1BTExPQ19TVEFSVFxcdFxcdChNT0RVTEVTX0VORClcXG4rI2RlZmluZSBWTUFMTE9DX0VORFxcdFxcdChQRVJDUFVfU1RBUlQgLSBTWl84TSlcXG4rXFxuKy8qXFxuKyAqIFBFUkNQVSByYW5nZVxcbisgKlxcbisgKiBQRVJDUFVfU1RBUlQ6IGJlZ2lubmluZyBvZiBnbG9iYWwgcGVyY3B1IGFyZWFcXG4rICogUEVSQ1BVX0VORDogZW5kIG9mIGdsb2JhbCBwZXJjcHUgYXJlYVxcbisgKiBMT0NBTF9QRVJDUFVfU1RBUlQ6IGJlZ2lubmluZyBvZiBsb2NhbCBwZXJjcHUgYXJlYVxcbisgKiBMT0NBTF9QRVJDUFVfRU5EOiBlbmQgb2YgbG9jYWwgcGVyY3B1IGFyZWEsIGV4dGVuZCB0byB0aGUgYXZhaWxhYmxlXFxuKyAqICAgICAgICAgICAgICAgICAgIHNwYWNlIGJlbG93IHZtZW1tYXBcXG4rICovXFxuKyNpZiBkZWZpbmVkKENPTkZJR19BUk02NF80S19QQUdFUylcXG4rI2RlZmluZSBQRVJDUFVfU0laRVxcdFxcdCgyICogUEdESVJfU0laRSlcXG4rI2VsaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfMTZLX1BBR0VTKVxcbisjZGVmaW5lIFBFUkNQVV9TSVpFICAgICAgICAgICAgKDE2ICogUFVEX1NJWkUpXFxuKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSTTY0XzY0S19QQUdFUylcXG4rI2RlZmluZSBQRVJDUFVfU0laRSAgICAgICAgICAgIChQR0RJUl9TSVpFKVxcbisjZW5kaWZcXG4rI2RlZmluZSBQRVJDUFVfU1RBUlRcXHRcXHQoUEVSQ1BVX0VORCAtIFBFUkNQVV9TSVpFKVxcbisjZGVmaW5lIFBFUkNQVV9FTkRcXHRcXHQoTE9DQUxfUEVSQ1BVX1NUQVJUKVxcbisjZGVmaW5lIExPQ0FMX1BFUkNQVV9TVEFSVFxcdChMT0NBTF9QRVJDUFVfRU5EIC0gUEVSQ1BVX1NJWkUpXFxuICNpZiBWQV9CSVRTID09IFZBX0JJVFNfTUlOXFxuLSNkZWZpbmUgVk1BTExPQ19FTkRcXHRcXHQoVk1FTU1BUF9TVEFSVCAtIFNaXzhNKVxcbisjZGVmaW5lIExPQ0FMX1BFUkNQVV9FTkRcXHQoQUxJR05fRE9XTihWTUVNTUFQX1NUQVJULCBQRVJDUFVfU0laRSkpXFxuICNlbHNlXFxuICNkZWZpbmUgVk1FTU1BUF9VTlVTRURfTlBBR0VTXFx0KChfUEFHRV9PRkZTRVQodmFiaXRzX2FjdHVhbCkgLSBQQUdFX09GRlNFVCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVClcXG4tI2RlZmluZSBWTUFMTE9DX0VORFxcdFxcdChWTUVNTUFQX1NUQVJUICsgVk1FTU1BUF9VTlVTRURfTlBBR0VTICogc2l6ZW9mKHN0cnVjdCBwYWdlKSAtIFNaXzhNKVxcbisjZGVmaW5lIExPQ0FMX1BFUkNQVV9FTkRcXHQoQUxJR05fRE9XTigoVk1FTU1BUF9TVEFSVCArIFZNRU1NQVBfVU5VU0VEX05QQUdFUyAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpLCBQRVJDUFVfU0laRSkpXFxuICNlbmRpZlxcbiBcXG4gI2RlZmluZSB2bWVtbWFwXFx0XFx0XFx0KChzdHJ1Y3QgcGFnZSAqKVZNRU1NQVBfU1RBUlQgLSAobWVtc3RhcnRfYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSlcXG5AQCAtMTIxNiw2ICsxMjM3LDE2IEBAIHA0ZF90ICpwNGRfb2Zmc2V0X2xvY2tsZXNzX2ZvbGRlZChwZ2RfdCAqcGdkcCwgcGdkX3QgcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIFxcbiAjZW5kaWYgIC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDQgKi9cXG4gXFxuKyNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMlxcbisjZGVmaW5lIEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgICAgICBQR1RCTF9QTURfTU9ESUZJRURcXG4rI2VsaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTID09IDNcXG4rI2RlZmluZSBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLICAgICAgUEdUQkxfUFVEX01PRElGSUVEXFxuKyNlbGlmIENPTkZJR19QR1RBQkxFX0xFVkVMUyA9PSA0XFxuKyNkZWZpbmUgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyAgICAgIFBHVEJMX1A0RF9NT0RJRklFRFxcbisjZWxpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNVxcbisjZGVmaW5lIEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgICAgICBQR1RCTF9QR0RfTU9ESUZJRURcXG4rI2VuZGlmXFxuK1xcbiAjZGVmaW5lIHBnZF9FUlJPUihlKVxcdFxcXFxcXG4gXFx0cHJfZXJyKFxcXCIlczolZDogYmFkIHBnZCAlMDE2bGx4LlxcXFxuXFxcIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmNcXG5pbmRleCAyM2MwNWRjN2E4ZjJhYy4uNmQ0MjBhZDU5YWY0OTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuY1xcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmNcXG5AQCAtMzYwLDYgKzM2MCw5IEBAIHZvaWQgX19pbml0IF9fbm9fc2FuaXRpemVfYWRkcmVzcyBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXFxuIFxcdHNtcF9pbml0X2NwdXMoKTtcXG4gXFx0c21wX2J1aWxkX21waWRyX2hhc2goKTtcXG4gXFxuK1xcdC8qIE11c3QgYmUgY2FsbGVkIGFmdGVyIHNtcF9pbml0X2NwdXMgKi9cXG4rXFx0c2V0dXBfcGVyY3B1X3BnZCgpO1xcbitcXG4gI2lmZGVmIENPTkZJR19BUk02NF9TV19UVEJSMF9QQU5cXG4gXFx0LypcXG4gXFx0ICogTWFrZSBzdXJlIGluaXRfdGhyZWFkX2luZm8udHRicjAgYWx3YXlzIGdlbmVyYXRlcyB0cmFuc2xhdGlvblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jXFxuaW5kZXggZDQ2MDIyZjcyMDc1NDAuLjRhODExMzc5YzE5MTYyIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wLmNcXG5AQCAtNTUsNiArNTUsOCBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9pcGkuaFxcdTAwM2VcXG4gXFxuK2V4dGVybiB2b2lkIGlkbWFwX2NwdV9yZXBsYWNlX3R0YnIxKHBoeXNfYWRkcl90IHBnZGlyKTtcXG4rXFxuIC8qXFxuICAqIGFzIGZyb20gMi41LCBrZXJuZWxzIG5vIGxvbmdlciBoYXZlIGFuIGluaXRfdGFza3Mgc3RydWN0dXJlXFxuICAqIHNvIHdlIG5lZWQgc29tZSBvdGhlciB3YXkgb2YgdGVsbGluZyBhIG5ldyBzZWNvbmRhcnkgY29yZVxcbkBAIC0xOTgsNiArMjAwLDEyIEBAIGFzbWxpbmthZ2Ugbm90cmFjZSB2b2lkIHNlY29uZGFyeV9zdGFydF9rZXJuZWwodm9pZClcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBcXHUwMDI2aW5pdF9tbTtcXG4gXFx0Y29uc3Qgc3RydWN0IGNwdV9vcGVyYXRpb25zICpvcHM7XFxuIFxcdHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XFxuK1xcdHR5cGVkZWYgdm9pZCAodHRicl9yZXBsYWNlX2Z1bmMpKHBoeXNfYWRkcl90KTtcXG4rXFx0dHRicl9yZXBsYWNlX2Z1bmMgKnJlcGxhY2VfdHRicjtcXG4rXFxuK1xcdHBoeXNfYWRkcl90IHR0YnIxID0gcGh5c190b190dGJyKHZpcnRfdG9fcGh5cyhwZXJjcHVfcGdkW2NwdV0pKTtcXG4rXFx0cmVwbGFjZV90dGJyID0gKHZvaWQgKilfX3BhX3N5bWJvbChpZG1hcF9jcHVfcmVwbGFjZV90dGJyMSk7XFxuK1xcdHJlcGxhY2VfdHRicih0dGJyMSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBBbGwga2VybmVsIHRocmVhZHMgc2hhcmUgdGhlIHNhbWUgbW0gY29udGV4dDsgZ3JhYiBhXFxuQEAgLTgxOSw2ICs4MjcsNDIgQEAgdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpXFxuIFxcdH1cXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19OVU1BXFxuK2V4dGVybiBpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdO1xcbitcXG4raW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpXFxuK3tcXG4rXFx0cmV0dXJuIGNwdV90b19ub2RlX21hcFtjcHVdO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rI2lmZGVmIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxcbit1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseTtcXG4rRVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfb2Zmc2V0KTtcXG4rLyogVXNlZCB0byBjYWxjdWxhdGUgcGNwdSBsb2NhbCBhZGRyZXNzLCB0aGUgb2Zmc2V0IGlzIHNhbWUgZm9yIGFsbCBDUFVzICovXFxuK3Vuc2lnbmVkIGxvbmcgX19wZXJfY3B1X2xvY2FsX29mZiBfX3JvX2FmdGVyX2luaXQ7XFxuK0VYUE9SVF9TWU1CT0woX19wZXJfY3B1X2xvY2FsX29mZik7XFxuK1xcbit2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWx0YTtcXG4rXFx0dW5zaWduZWQgaW50IGNwdTtcXG4rXFx0aW50IHJjID0gLUVJTlZBTDtcXG4rXFxuKyNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcXG4rXFx0LyogUENQVSBwYWdlIHRhYmxlIGp1c3QgY2FuIHN1cHBvcnQgUENQVV9GQ19QQUdFICovXFxuK1xcdHJjID0gcGNwdV9wYWdlX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwgZWFybHlfY3B1X3RvX25vZGUpO1xcbisjZW5kaWZcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cGFuaWMoXFxcIkZhaWxlZCB0byBpbml0aWFsaXplIHBlcmNwdSBhcmVhcyAoZXJyPSVkKS5cXFwiLCByYyk7XFxuK1xcbitcXHRkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0O1xcbitcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxcbitcXHRcXHRfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gPSBkZWx0YSArIHBjcHVfdW5pdF9vZmZzZXRzW2NwdV07XFxuK1xcdF9fcGVyX2NwdV9sb2NhbF9vZmYgPSAodW5zaWduZWQgbG9uZylwY3B1X2xvY2FsX2Jhc2UgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgY29uc3QgY2hhciAqaXBpX3R5cGVzW01BWF9JUEldIF9fdHJhY2Vwb2ludF9zdHJpbmcgPSB7XFxuIFxcdFtJUElfUkVTQ0hFRFVMRV1cXHQ9IFxcXCJSZXNjaGVkdWxpbmcgaW50ZXJydXB0c1xcXCIsXFxuIFxcdFtJUElfQ0FMTF9GVU5DXVxcdFxcdD0gXFxcIkZ1bmN0aW9uIGNhbGwgaW50ZXJydXB0c1xcXCIsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0va2FzYW5faW5pdC5jIGIvYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmNcXG5pbmRleCAzZmNhZDk1NmZkZjdjYi4uYThlMjcyYmZlZmUxYTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmNcXG4rKysgYi9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuY1xcbkBAIC02MCwxMyArNjAsMTQgQEAgc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBrYXNhbl9hbGxvY19yYXdfcGFnZShpbnQgbm9kZSlcXG4gfVxcbiBcXG4gc3RhdGljIHB0ZV90ICpfX2luaXQga2FzYW5fcHRlX29mZnNldChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgYm9vbCBlYXJseSlcXG4rXFx0XFx0XFx0XFx0ICAgICAgYm9vbCBlYXJseSwgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0aWYgKHBtZF9ub25lKFJFQURfT05DRSgqcG1kcCkpKSB7XFxuIFxcdFxcdHBoeXNfYWRkcl90IHB0ZV9waHlzID0gZWFybHkgP1xcbiBcXHRcXHRcXHRcXHRfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcHRlKVxcbiBcXHRcXHRcXHRcXHRcXHQ6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpO1xcbiBcXHRcXHRfX3BtZF9wb3B1bGF0ZShwbWRwLCBwdGVfcGh5cywgUE1EX1RZUEVfVEFCTEUpO1xcbitcXHRcXHQqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBlYXJseSA/IHB0ZV9vZmZzZXRfa2ltZyhwbWRwLCBhZGRyKVxcbkBAIC03NCw0OSArNzUsNTMgQEAgc3RhdGljIHB0ZV90ICpfX2luaXQga2FzYW5fcHRlX29mZnNldChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcXG4gfVxcbiBcXG4gc3RhdGljIHBtZF90ICpfX2luaXQga2FzYW5fcG1kX29mZnNldChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgYm9vbCBlYXJseSlcXG4rXFx0XFx0XFx0XFx0ICAgICAgYm9vbCBlYXJseSwgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0aWYgKHB1ZF9ub25lKFJFQURfT05DRSgqcHVkcCkpKSB7XFxuIFxcdFxcdHBoeXNfYWRkcl90IHBtZF9waHlzID0gZWFybHkgP1xcbiBcXHRcXHRcXHRcXHRfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcG1kKVxcbiBcXHRcXHRcXHRcXHRcXHQ6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpO1xcbiBcXHRcXHRfX3B1ZF9wb3B1bGF0ZShwdWRwLCBwbWRfcGh5cywgUFVEX1RZUEVfVEFCTEUpO1xcbitcXHRcXHQqbWFzayB8PSBQR1RCTF9QVURfTU9ESUZJRUQ7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBlYXJseSA/IHBtZF9vZmZzZXRfa2ltZyhwdWRwLCBhZGRyKSA6IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XFxuIH1cXG4gXFxuIHN0YXRpYyBwdWRfdCAqX19pbml0IGthc2FuX3B1ZF9vZmZzZXQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGJvb2wgZWFybHkpXFxuK1xcdFxcdFxcdFxcdCAgICAgIGJvb2wgZWFybHksIHBndGJsX21vZF9tYXNrICptYXNrKVxcbiB7XFxuIFxcdGlmIChwNGRfbm9uZShSRUFEX09OQ0UoKnA0ZHApKSkge1xcbiBcXHRcXHRwaHlzX2FkZHJfdCBwdWRfcGh5cyA9IGVhcmx5ID9cXG4gXFx0XFx0XFx0XFx0X19wYV9zeW1ib2woa2FzYW5fZWFybHlfc2hhZG93X3B1ZClcXG4gXFx0XFx0XFx0XFx0XFx0OiBrYXNhbl9hbGxvY196ZXJvZWRfcGFnZShub2RlKTtcXG4gXFx0XFx0X19wNGRfcG9wdWxhdGUocDRkcCwgcHVkX3BoeXMsIFA0RF9UWVBFX1RBQkxFKTtcXG4rXFx0XFx0Km1hc2sgfD0gUEdUQkxfUDREX01PRElGSUVEO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZWFybHkgPyBwdWRfb2Zmc2V0X2tpbWcocDRkcCwgYWRkcikgOiBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgcDRkX3QgKl9faW5pdCBrYXNhbl9wNGRfb2Zmc2V0KHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlLFxcbi1cXHRcXHRcXHRcXHQgICAgICBib29sIGVhcmx5KVxcbitcXHRcXHRcXHRcXHQgICAgICBib29sIGVhcmx5LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4ge1xcbiBcXHRpZiAocGdkX25vbmUoUkVBRF9PTkNFKCpwZ2RwKSkpIHtcXG4gXFx0XFx0cGh5c19hZGRyX3QgcDRkX3BoeXMgPSBlYXJseSA/XFxuIFxcdFxcdFxcdFxcdF9fcGFfc3ltYm9sKGthc2FuX2Vhcmx5X3NoYWRvd19wNGQpXFxuIFxcdFxcdFxcdFxcdFxcdDoga2FzYW5fYWxsb2NfemVyb2VkX3BhZ2Uobm9kZSk7XFxuIFxcdFxcdF9fcGdkX3BvcHVsYXRlKHBnZHAsIHA0ZF9waHlzLCBQR0RfVFlQRV9UQUJMRSk7XFxuK1xcdFxcdCptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGVhcmx5ID8gcDRkX29mZnNldF9raW1nKHBnZHAsIGFkZHIpIDogcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbi1cXHRwdGVfdCAqcHRlcCA9IGthc2FuX3B0ZV9vZmZzZXQocG1kcCwgYWRkciwgbm9kZSwgZWFybHkpO1xcbitcXHRwdGVfdCAqcHRlcCA9IGthc2FuX3B0ZV9vZmZzZXQocG1kcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRwaHlzX2FkZHJfdCBwYWdlX3BoeXMgPSBlYXJseSA/XFxuQEAgLTEzMCwzOCArMTM1LDQxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wdGVfcG9wdWxhdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BtZF9wb3B1bGF0ZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbi1cXHRwbWRfdCAqcG1kcCA9IGthc2FuX3BtZF9vZmZzZXQocHVkcCwgYWRkciwgbm9kZSwgZWFybHkpO1xcbitcXHRwbWRfdCAqcG1kcCA9IGthc2FuX3BtZF9vZmZzZXQocHVkcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuLVxcdFxcdGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7XFxuK1xcdFxcdGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgbWFzayk7XFxuIFxcdH0gd2hpbGUgKHBtZHArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kIFxcdTAwMjZcXHUwMDI2IHBtZF9ub25lKFJFQURfT05DRSgqcG1kcCkpKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3B1ZF9wb3B1bGF0ZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbi1cXHRwdWRfdCAqcHVkcCA9IGthc2FuX3B1ZF9vZmZzZXQocDRkcCwgYWRkciwgbm9kZSwgZWFybHkpO1xcbitcXHRwdWRfdCAqcHVkcCA9IGthc2FuX3B1ZF9vZmZzZXQocDRkcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuLVxcdFxcdGthc2FuX3BtZF9wb3B1bGF0ZShwdWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7XFxuK1xcdFxcdGthc2FuX3BtZF9wb3B1bGF0ZShwdWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgbWFzayk7XFxuIFxcdH0gd2hpbGUgKHB1ZHArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kIFxcdTAwMjZcXHUwMDI2IHB1ZF9ub25lKFJFQURfT05DRSgqcHVkcCkpKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbi1cXHRwNGRfdCAqcDRkcCA9IGthc2FuX3A0ZF9vZmZzZXQocGdkcCwgYWRkciwgbm9kZSwgZWFybHkpO1xcbitcXHRwNGRfdCAqcDRkcCA9IGthc2FuX3A0ZF9vZmZzZXQocGdkcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXh0ID0gcDRkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuLVxcdFxcdGthc2FuX3B1ZF9wb3B1bGF0ZShwNGRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7XFxuK1xcdFxcdGthc2FuX3B1ZF9wb3B1bGF0ZShwNGRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgbWFzayk7XFxuIFxcdH0gd2hpbGUgKHA0ZHArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kIFxcdTAwMjZcXHUwMDI2IHA0ZF9ub25lKFJFQURfT05DRSgqcDRkcCkpKTtcXG4gfVxcbiBcXG5AQCAtMTcwLDEyICsxNzgsMTcgQEAgc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BnZF9wb3B1bGF0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG4gXFx0cGdkX3QgKnBnZHA7XFxuK1xcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcXG4gXFxuIFxcdHBnZHAgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7XFxuIFxcdGRvIHtcXG4gXFx0XFx0bmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbi1cXHRcXHRrYXNhbl9wNGRfcG9wdWxhdGUocGdkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHkpO1xcbitcXHRcXHRrYXNhbl9wNGRfcG9wdWxhdGUocGdkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHksIFxcdTAwMjZtYXNrKTtcXG4gXFx0fSB3aGlsZSAocGdkcCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xcbitcXG4rXFx0aWYgKG1hc2sgXFx1MDAyNiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLKVxcbitcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xcbiB9XFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNjRLX1BBR0VTKSB8fCBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSA0XFxuQEAgLTMxMSw3ICszMjQsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2FzYW5faW5pdF9zaGFkb3codm9pZClcXG4gXFxuIFxcdG1vZF9zaGFkb3dfc3RhcnQgPSAodTY0KWthc2FuX21lbV90b19zaGFkb3coKHZvaWQgKilNT0RVTEVTX1ZBRERSKTtcXG4gXFxuLVxcdHZtYWxsb2Nfc2hhZG93X2VuZCA9ICh1NjQpa2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKVZNQUxMT0NfRU5EKTtcXG4rXFx0dm1hbGxvY19zaGFkb3dfZW5kID0gKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopTE9DQUxfUEVSQ1BVX0VORCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBXZSBhcmUgZ29pbmcgdG8gcGVyZm9ybSBwcm9wZXIgc2V0dXAgb2Ygc2hhZG93IG1lbW9yeS5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcXG5pbmRleCBmMmJlNTAxNDY4Y2U1YS4uZWU0YWIwMzFlYmY4ZDcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9tbS9tbXUuY1xcbisrKyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcXG5AQCAtNjcsNiArNjcsNjMgQEAgbG9uZyBfX3NlY3Rpb24oXFxcIi5tbXVvZmYuZGF0YS53cml0ZVxcXCIpIF9fZWFybHlfY3B1X2Jvb3Rfc3RhdHVzO1xcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN3YXBwZXJfcGdkaXJfbG9jayk7XFxuIHN0YXRpYyBERUZJTkVfTVVURVgoZml4bWFwX2xvY2spO1xcbiBcXG4rcGdkX3QgKnBlcmNwdV9wZ2RbTlJfQ1BVU10gX19yb19hZnRlcl9pbml0O1xcbitib29sIHBlcmNwdV9wZ2Rfc2V0dXBfZG9uZSBfX3JvX2FmdGVyX2luaXQgPSBmYWxzZTtcXG4rXFxuK3ZvaWQgX19pbml0IHNldHVwX3BlcmNwdV9wZ2Qodm9pZClcXG4re1xcbitcXHRpbnQgY3B1O1xcbitcXG4rXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbitcXHRcXHR2b2lkICphZGRyO1xcbitcXG4rXFx0XFx0aWYgKGNwdSA9PSAwKSB7XFxuK1xcdFxcdFxcdHBlcmNwdV9wZ2RbY3B1XSA9IHN3YXBwZXJfcGdfZGlyO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jKFBBR0VfU0laRSwgUEFHRV9TSVpFKTtcXG4rXFx0XFx0aWYgKCFhZGRyKVxcbitcXHRcXHRcXHRwYW5pYyhcXFwiQ2FuJ3QgYWxsb2MgcGVyY3B1IHBnZFxcXFxuXFxcIik7XFxuK1xcbitcXHRcXHRtZW1jcHkoYWRkciwgKHZvaWQgKilzd2FwcGVyX3BnX2RpciwgUEFHRV9TSVpFKTtcXG4rXFx0XFx0cGVyY3B1X3BnZFtjcHVdID0gKHBnZF90ICopYWRkcjtcXG4rXFx0fVxcbitcXG4rXFx0ZHNiKGlzaHN0KTtcXG4rXFxuK1xcdHBlcmNwdV9wZ2Rfc2V0dXBfZG9uZSA9IHRydWU7XFxuK31cXG4rXFxuK3ZvaWQgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGFkZHIsIG5leHQ7XFxuK1xcdGludCBjcHU7XFxuK1xcdHBnZF90ICpwZ2RwID0gcGdkX29mZnNldF9rKHN0YXJ0KTtcXG4rXFx0cGdkX3QgcGdkO1xcbitcXHR1bnNpZ25lZCBpbnQgaW5kZXggPSBwZ2RfaW5kZXgoc3RhcnQpO1xcbitcXG4rXFx0QlVHX09OKHN0YXJ0IFxcdTAwM2UgZW5kKTtcXG4rXFxuK1xcdGlmICghcGVyY3B1X3BnZF9zZXR1cF9kb25lKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBEb24ndCBzeW5jIGxvY2FsIHBlcmNwdSBhcmVhIHBhZ2UgdGFibGUgKi9cXG4rXFx0aWYgKHN0YXJ0IFxcdTAwM2U9IExPQ0FMX1BFUkNQVV9TVEFSVCBcXHUwMDI2XFx1MDAyNiBlbmQgXFx1MDAzYyBMT0NBTF9QRVJDUFVfRU5EKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRhZGRyID0gc3RhcnQ7XFxuK1xcdGRvIHtcXG4rXFx0XFx0cGdkID0gUkVBRF9PTkNFKCpwZ2RwKTtcXG4rXFx0XFx0bmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbitcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuK1xcdFxcdFxcdGlmIChjcHUgPT0gMClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdHNldF9wZ2QocGVyY3B1X3BnZFtjcHVdICsgaW5kZXgsIHBnZCk7XFxuK1xcdFxcdH1cXG4rXFx0fSB3aGlsZSAocGdkcCsrLCBpbmRleCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpO1xcbit9XFxuK1xcbiB2b2lkIG5vaW5zdHIgc2V0X3N3YXBwZXJfcGdkKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QpXFxuIHtcXG4gXFx0cGdkX3QgKmZpeG1hcF9wZ2RwO1xcbkBAIC0xNjEsNyArMjE4LDcgQEAgc3RhdGljIHZvaWQgaW5pdF9jbGVhcl9wZ3RhYmxlKHZvaWQgKnRhYmxlKVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBpbml0X3B0ZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tXFx0XFx0ICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90KVxcbitcXHRcXHQgICAgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QsIHBndGJsX21vZF9tYXNrICptYXNrKVxcbiB7XFxuIFxcdGRvIHtcXG4gXFx0XFx0cHRlX3Qgb2xkX3B0ZSA9IF9fcHRlcF9nZXQocHRlcCk7XFxuQEAgLTE3MSw2ICsyMjgsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3B0ZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0ICogYXJlIGRlZmVycmVkIHRvIHRoZSBlbmQgb2YgYWxsb2NfaW5pdF9jb250X3B0ZSgpLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0X19zZXRfcHRlX25vc3luYyhwdGVwLCBwZm5fcHRlKF9fcGh5c190b19wZm4ocGh5cyksIHByb3QpKTtcXG4rXFx0XFx0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQWZ0ZXIgdGhlIFBURSBlbnRyeSBoYXMgYmVlbiBwb3B1bGF0ZWQgb25jZSwgd2VcXG5AQCAtMTk4LDcgKzI1Niw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXMsXFxuIFxcdFxcdFxcdCAgICAgICBwZ3Byb3RfdCBwcm90LFxcbiBcXHRcXHRcXHQgICAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxcbi1cXHRcXHRcXHQgICAgICAgaW50IGZsYWdzKVxcbitcXHRcXHRcXHQgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxuIFxcdHBtZF90IHBtZCA9IFJFQURfT05DRSgqcG1kcCk7XFxuQEAgLTIxOSw2ICsyNzcsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0aW5pdF9jbGVhcl9wZ3RhYmxlKHB0ZXApO1xcbiBcXHRcXHRwdGVwICs9IHB0ZV9pbmRleChhZGRyKTtcXG4gXFx0XFx0X19wbWRfcG9wdWxhdGUocG1kcCwgcHRlX3BoeXMsIHBtZHZhbCk7XFxuK1xcdFxcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0QlVHX09OKHBtZF9iYWQocG1kKSk7XFxuIFxcdFxcdHB0ZXAgPSBwdGVfc2V0X2ZpeG1hcF9vZmZzZXQocG1kcCwgYWRkcik7XFxuQEAgLTIzNSw3ICsyOTQsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0ICAgICFwdGVfcmFuZ2VfaGFzX3ZhbGlkX25vbmNvbnQocHRlcCkpXFxuIFxcdFxcdFxcdF9fcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7XFxuIFxcbi1cXHRcXHRpbml0X3B0ZShwdGVwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QpO1xcbitcXHRcXHRpbml0X3B0ZShwdGVwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsIG1hc2spO1xcbiBcXG4gXFx0XFx0cHRlcCArPSBwdGVfaW5kZXgobmV4dCkgLSBwdGVfaW5kZXgoYWRkcik7XFxuIFxcdFxcdHBoeXMgKz0gbmV4dCAtIGFkZHI7XFxuQEAgLTI1Myw3ICszMTIsOCBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFxuIHN0YXRpYyBpbnQgaW5pdF9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdCAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LFxcbi1cXHRcXHQgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLCBpbnQgZmxhZ3MpXFxuK1xcdFxcdCAgICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksIGludCBmbGFncyxcXG4rXFx0XFx0ICAgIHBndGJsX21vZF9tYXNrICptYXNrKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG4gXFxuQEAgLTI2Niw3ICszMjYsMTAgQEAgc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0aWYgKCgoYWRkciB8IG5leHQgfCBwaHlzKSBcXHUwMDI2IH5QTURfTUFTSykgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgKGZsYWdzIFxcdTAwMjYgTk9fQkxPQ0tfTUFQUElOR1MpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFwbWRfdGFibGUob2xkX3BtZCkpIHtcXG4tXFx0XFx0XFx0V0FSTl9PTighcG1kX3NldF9odWdlKHBtZHAsIHBoeXMsIHByb3QpKTtcXG4rXFx0XFx0XFx0aWYgKHBtZF9zZXRfaHVnZShwbWRwLCBwaHlzLCBwcm90KSlcXG4rXFx0XFx0XFx0XFx0Km1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdFdBUk5fT04oMSk7XFxuIFxcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBBZnRlciB0aGUgUE1EIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZVxcbkBAIC0yNzgsNyArMzQxLDcgQEAgc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdFxcdHJldCA9IGFsbG9jX2luaXRfY29udF9wdGUocG1kcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgcGd0YWJsZV9hbGxvYywgZmxhZ3MsIG1hc2spO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMzA2LDcgKzM2OSw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3BtZChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXMsXFxuIFxcdFxcdFxcdCAgICAgICBwZ3Byb3RfdCBwcm90LFxcbiBcXHRcXHRcXHQgICAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxcbi1cXHRcXHRcXHQgICAgICAgaW50IGZsYWdzKVxcbitcXHRcXHRcXHQgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxuQEAgLTMzMSw2ICszOTQsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wbWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0aW5pdF9jbGVhcl9wZ3RhYmxlKHBtZHApO1xcbiBcXHRcXHRwbWRwICs9IHBtZF9pbmRleChhZGRyKTtcXG4gXFx0XFx0X19wdWRfcG9wdWxhdGUocHVkcCwgcG1kX3BoeXMsIHB1ZHZhbCk7XFxuK1xcdFxcdCptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0QlVHX09OKHB1ZF9iYWQocHVkKSk7XFxuIFxcdFxcdHBtZHAgPSBwbWRfc2V0X2ZpeG1hcF9vZmZzZXQocHVkcCwgYWRkcik7XFxuQEAgLTM0Nyw3ICs0MTEsOCBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wbWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0ICAgICFwbWRfcmFuZ2VfaGFzX3ZhbGlkX25vbmNvbnQocG1kcCkpXFxuIFxcdFxcdFxcdF9fcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7XFxuIFxcbi1cXHRcXHRyZXQgPSBpbml0X3BtZChwbWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsIHBndGFibGVfYWxsb2MsIGZsYWdzKTtcXG4rXFx0XFx0cmV0ID0gaW5pdF9wbWQocG1kcCwgYWRkciwgbmV4dCwgcGh5cywgX19wcm90LCBwZ3RhYmxlX2FsbG9jLCBmbGFncyxcXG4rXFx0XFx0XFx0ICAgICAgIG1hc2spO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTM2NCw3ICs0MjksNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wbWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gc3RhdGljIGludCBhbGxvY19pbml0X3B1ZChwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0ICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LFxcbiBcXHRcXHRcXHQgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSxcXG4tXFx0XFx0XFx0ICBpbnQgZmxhZ3MpXFxuK1xcdFxcdFxcdCAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4ge1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbkBAIC0zODUsNiArNDUwLDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X3B1ZChwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0aW5pdF9jbGVhcl9wZ3RhYmxlKHB1ZHApO1xcbiBcXHRcXHRwdWRwICs9IHB1ZF9pbmRleChhZGRyKTtcXG4gXFx0XFx0X19wNGRfcG9wdWxhdGUocDRkcCwgcHVkX3BoeXMsIHA0ZHZhbCk7XFxuK1xcdFxcdCptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0QlVHX09OKHA0ZF9iYWQocDRkKSk7XFxuIFxcdFxcdHB1ZHAgPSBwdWRfc2V0X2ZpeG1hcF9vZmZzZXQocDRkcCwgYWRkcik7XFxuQEAgLTQwMiw3ICs0NjgsMTAgQEAgc3RhdGljIGludCBhbGxvY19pbml0X3B1ZChwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0ICAgKChhZGRyIHwgbmV4dCB8IHBoeXMpIFxcdTAwMjYgflBVRF9NQVNLKSA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAoZmxhZ3MgXFx1MDAyNiBOT19CTE9DS19NQVBQSU5HUykgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIXB1ZF90YWJsZShvbGRfcHVkKSkge1xcbi1cXHRcXHRcXHRXQVJOX09OKCFwdWRfc2V0X2h1Z2UocHVkcCwgcGh5cywgcHJvdCkpO1xcbitcXHRcXHRcXHRpZiAocHVkX3NldF9odWdlKHB1ZHAsIHBoeXMsIHByb3QpKVxcbitcXHRcXHRcXHRcXHQqbWFzayB8PSBQR1RCTF9QVURfTU9ESUZJRUQ7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0V0FSTl9PTigxKTtcXG4gXFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIEFmdGVyIHRoZSBQVUQgZW50cnkgaGFzIGJlZW4gcG9wdWxhdGVkIG9uY2UsIHdlXFxuQEAgLTQxMiw3ICs0ODEsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBSRUFEX09OQ0UocHVkX3ZhbCgqcHVkcCkpKSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHJldCA9IGFsbG9jX2luaXRfY29udF9wbWQocHVkcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgcGd0YWJsZV9hbGxvYywgZmxhZ3MsIG1hc2spO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTQzMSw3ICs1MDAsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBzdGF0aWMgaW50IGFsbG9jX2luaXRfcDRkKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHQgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QsXFxuIFxcdFxcdFxcdCAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxcbi1cXHRcXHRcXHQgIGludCBmbGFncylcXG4rXFx0XFx0XFx0ICBpbnQgZmxhZ3MsIHBndGJsX21vZF9tYXNrICptYXNrKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbmV4dDtcXG5AQCAtNDUyLDYgKzUyMSw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wNGQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdGluaXRfY2xlYXJfcGd0YWJsZShwNGRwKTtcXG4gXFx0XFx0cDRkcCArPSBwNGRfaW5kZXgoYWRkcik7XFxuIFxcdFxcdF9fcGdkX3BvcHVsYXRlKHBnZHAsIHA0ZF9waHlzLCBwZ2R2YWwpO1xcbitcXHRcXHQqbWFzayB8PSBQR1RCTF9QR0RfTU9ESUZJRUQ7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdEJVR19PTihwZ2RfYmFkKHBnZCkpO1xcbiBcXHRcXHRwNGRwID0gcDRkX3NldF9maXhtYXBfb2Zmc2V0KHBnZHAsIGFkZHIpO1xcbkBAIC00NjMsNyArNTMzLDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X3A0ZChwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0bmV4dCA9IHA0ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbiBcXG4gXFx0XFx0cmV0ID0gYWxsb2NfaW5pdF9wdWQocDRkcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCxcXG4tXFx0XFx0XFx0XFx0ICAgICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdCAgICAgcGd0YWJsZV9hbGxvYywgZmxhZ3MsIG1hc2spO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTQ4Myw3ICs1NTMsNyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nX2xvY2tlZChwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHZpcnQsIHBoeXNfYWRkcl90IHNpemUsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBwZ3Byb3RfdCBwcm90LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgaW50IGZsYWdzKVxcbitcXHRcXHRcXHRcXHQgICAgICAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHIsIGVuZCwgbmV4dDtcXG5AQCAtNTAzLDcgKzU3Myw3IEBAIHN0YXRpYyBpbnQgX19jcmVhdGVfcGdkX21hcHBpbmdfbG9ja2VkKHBnZF90ICpwZ2RpciwgcGh5c19hZGRyX3QgcGh5cyxcXG4gXFx0ZG8ge1xcbiBcXHRcXHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XFxuIFxcdFxcdHJldCA9IGFsbG9jX2luaXRfcDRkKHBnZHAsIGFkZHIsIG5leHQsIHBoeXMsIHByb3QsIHBndGFibGVfYWxsb2MsXFxuLVxcdFxcdFxcdFxcdCAgICAgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHQgICAgIGZsYWdzLCBtYXNrKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0cGh5cyArPSBuZXh0IC0gYWRkcjtcXG5AQCAtNTE2LDEzICs1ODYsMTMgQEAgc3RhdGljIGludCBfX2NyZWF0ZV9wZ2RfbWFwcGluZyhwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsXFxuIFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgdmlydCwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0cGdwcm90X3QgcHJvdCxcXG4gXFx0XFx0XFx0XFx0cGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxcbi1cXHRcXHRcXHRcXHRpbnQgZmxhZ3MpXFxuK1xcdFxcdFxcdFxcdGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmZpeG1hcF9sb2NrKTtcXG4gXFx0cmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmdfbG9ja2VkKHBnZGlyLCBwaHlzLCB2aXJ0LCBzaXplLCBwcm90LFxcbi1cXHRcXHRcXHRcXHRcXHQgIHBndGFibGVfYWxsb2MsIGZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2Zml4bWFwX2xvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtNTM1LDkgKzYwNSwxMCBAQCBzdGF0aWMgdm9pZCBlYXJseV9jcmVhdGVfcGdkX21hcHBpbmcocGdkX3QgKnBnZGlyLCBwaHlzX2FkZHJfdCBwaHlzLFxcbiBcXHRcXHRcXHRcXHQgICAgIGludCBmbGFncylcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbitcXHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcXG4gXFxuIFxcdHJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHBnZGlyLCBwaHlzLCB2aXJ0LCBzaXplLCBwcm90LCBwZ3RhYmxlX2FsbG9jLFxcbi1cXHRcXHRcXHRcXHQgICBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdCAgIGZsYWdzLCBcXHUwMDI2bWFzayk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHBhbmljKFxcXCJGYWlsZWQgdG8gY3JlYXRlIHBhZ2UgdGFibGVzXFxcXG5cXFwiKTtcXG4gfVxcbkBAIC0xMDA5LDYgKzEwODAsMjkgQEAgdm9pZCBfX2luaXQgbGluZWFyX21hcF9tYXliZV9zcGxpdF90b19wdGVzKHZvaWQpXFxuIFxcdH1cXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXFxuK3ZvaWQgX19pbml0IG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKVxcbit7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xcbitcXG4rXFx0YXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnI7IGkrKykge1xcbitcXHRcXHRwaHlzX2FkZHJfdCBwaHlzID0gcGFnZV90b19waHlzKHBhZ2VzW2ldKTtcXG4rXFx0XFx0cmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmcocGVyY3B1X3BnZFtjcHVdLCBwaHlzLCB2aXJ0LCBQQUdFX1NJWkUsIFBBR0VfS0VSTkVMLFxcbitcXHRcXHRcXHRcXHRcXHQgICBlYXJseV9wZ3RhYmxlX2FsbG9jLCBOT19FWEVDX01BUFBJTkdTLCBcXHUwMDI2bWFzayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHBhbmljKFxcXCJGYWlsZWQgdG8gY3JlYXRlIGxvY2FsIHBlcmNwdSBmaXJzdCBjaHVua1xcXFxuXFxcIik7XFxuK1xcbitcXHRcXHR2aXJ0ICs9IFBBR0VfU0laRTtcXG4rXFx0fVxcbitcXG4rXFx0YXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKlxcbiAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgdG8gbW9kaWZ5IGV4aXN0aW5nIHRhYmxlIGVudHJpZXMsXFxuICAqIHdpdGhvdXQgYWxsb2NhdGluZyBuZXcgbGV2ZWxzIG9mIHRhYmxlLiBOb3RlIHRoYXQgdGhpcyBwZXJtaXRzIHRoZVxcbkBAIC0xMjc5LDYgKzEzNzMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX2twdGlfaW5zdGFsbF9uZ19tYXBwaW5ncyh2b2lkICpfX3VudXNlZClcXG4gXFxuIFxcdGlmICghY3B1KSB7XFxuIFxcdFxcdGludCByZXQ7XFxuK1xcdFxcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xcbiBcXG4gXFx0XFx0YWxsb2MgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMgfCBfX0dGUF9aRVJPLCBvcmRlcik7XFxuIFxcdFxcdGtwdGlfbmdfdGVtcF9wZ2QgPSAocGdkX3QgKikoYWxsb2MgKyAobGV2ZWxzIC0gMSkgKiBQQUdFX1NJWkUpO1xcbkBAIC0xMzAyLDcgKzEzOTcsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX2twdGlfaW5zdGFsbF9uZ19tYXBwaW5ncyh2b2lkICpfX3VudXNlZClcXG4gXFx0XFx0Ly9cXG4gXFx0XFx0cmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmdfbG9ja2VkKGtwdGlfbmdfdGVtcF9wZ2QsIF9fcGEoYWxsb2MpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIEtQVElfTkdfVEVNUF9WQSwgUEFHRV9TSVpFLCBQQUdFX0tFUk5FTCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBrcHRpX25nX3BnZF9hbGxvYywgMCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAga3B0aV9uZ19wZ2RfYWxsb2MsIDAsIFxcdTAwMjZtYXNrKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cGFuaWMoXFxcIkZhaWxlZCB0byBjcmVhdGUgcGFnZSB0YWJsZXNcXFxcblxcXCIpO1xcbiBcXHR9XFxuQEAgLTE2MDgsNyArMTcwMyw3IEBAIHN0YXRpYyB2b2lkIHVubWFwX2hvdHBsdWdfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFxuIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHRlX3RhYmxlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcXG4tXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZylcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0cHRlX3QgKnB0ZXAsIHB0ZTtcXG4gXFx0dW5zaWduZWQgbG9uZyBpLCBzdGFydCA9IGFkZHI7XFxuQEAgLTE2MjQsNiArMTcxOSw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHRlX3RhYmxlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFdBUk5fT04oIXB0ZV9ub25lKHB0ZSkpO1xcbiBcXHR9IHdoaWxlIChhZGRyICs9IFBBR0VfU0laRSwgYWRkciBcXHUwMDNjIGVuZCk7XFxuIFxcbitcXHQqbWFzayB8PSBQR1RCTF9QVEVfTU9ESUZJRUQ7XFxuIFxcdGlmICghcGd0YWJsZV9yYW5nZV9hbGlnbmVkKHN0YXJ0LCBlbmQsIGZsb29yLCBjZWlsaW5nLCBQTURfTUFTSykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTE2MzksMTMgKzE3MzUsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0fVxcbiBcXG4gXFx0cG1kX2NsZWFyKHBtZHApO1xcbitcXHQqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7XFxuIFxcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKHN0YXJ0KTtcXG4gXFx0ZnJlZV9ob3RwbHVnX3BndGFibGVfcGFnZSh2aXJ0X3RvX3BhZ2UocHRlcCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgZmxvb3IsXFxuLVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcpXFxuK1xcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcsIHBndGJsX21vZF9tYXNrICptYXNrKVxcbiB7XFxuIFxcdHBtZF90ICpwbWRwLCBwbWQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaSwgbmV4dCwgc3RhcnQgPSBhZGRyO1xcbkBAIC0xNjU4LDcgKzE3NTUsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFdBUk5fT04oIXBtZF9wcmVzZW50KHBtZCkgfHwgIXBtZF90YWJsZShwbWQpKTtcXG4tXFx0XFx0ZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcpO1xcbitcXHRcXHRmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRwLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZywgbWFzayk7XFxuIFxcdH0gd2hpbGUgKGFkZHIgPSBuZXh0LCBhZGRyIFxcdTAwM2MgZW5kKTtcXG4gXFxuIFxcdGlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgXFx1MDAzYz0gMilcXG5AQCAtMTY3OSwxMyArMTc3NiwxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHR9XFxuIFxcbiBcXHRwdWRfY2xlYXIocHVkcCk7XFxuK1xcdCptYXNrIHw9IFBHVEJMX1BVRF9NT0RJRklFRDtcXG4gXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoc3RhcnQpO1xcbiBcXHRmcmVlX2hvdHBsdWdfcGd0YWJsZV9wYWdlKHZpcnRfdG9fcGFnZShwbWRwKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHVkX3RhYmxlKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcXG4tXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZylcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0cHVkX3QgKnB1ZHAsIHB1ZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBpLCBuZXh0LCBzdGFydCA9IGFkZHI7XFxuQEAgLTE2OTgsNyArMTc5Niw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcHVkX3RhYmxlKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0V0FSTl9PTighcHVkX3ByZXNlbnQocHVkKSB8fCAhcHVkX3RhYmxlKHB1ZCkpO1xcbi1cXHRcXHRmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRwLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZyk7XFxuK1xcdFxcdGZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nLCBtYXNrKTtcXG4gXFx0fSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgXFx1MDAzYyBlbmQpO1xcbiBcXG4gXFx0aWYgKCFwZ3RhYmxlX2w0X2VuYWJsZWQoKSlcXG5AQCAtMTcxOSwxMyArMTgxNywxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B1ZF90YWJsZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHR9XFxuIFxcbiBcXHRwNGRfY2xlYXIocDRkcCk7XFxuK1xcdCptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDtcXG4gXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoc3RhcnQpO1xcbiBcXHRmcmVlX2hvdHBsdWdfcGd0YWJsZV9wYWdlKHZpcnRfdG9fcGFnZShwdWRwKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcXG4tXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZylcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZywgcGd0YmxfbW9kX21hc2sgKm1hc2spXFxuIHtcXG4gXFx0cDRkX3QgKnA0ZHAsIHA0ZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBpLCBuZXh0LCBzdGFydCA9IGFkZHI7XFxuQEAgLTE3MzgsNyArMTgzNyw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0V0FSTl9PTighcDRkX3ByZXNlbnQocDRkKSk7XFxuLVxcdFxcdGZyZWVfZW1wdHlfcHVkX3RhYmxlKHA0ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTtcXG4rXFx0XFx0ZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIG1hc2spO1xcbiBcXHR9IHdoaWxlIChhZGRyID0gbmV4dCwgYWRkciBcXHUwMDNjIGVuZCk7XFxuIFxcbiBcXHRpZiAoIXBndGFibGVfbDVfZW5hYmxlZCgpKVxcbkBAIC0xNzU5LDYgKzE4NTgsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3A0ZF90YWJsZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHR9XFxuIFxcbiBcXHRwZ2RfY2xlYXIocGdkcCk7XFxuK1xcdCptYXNrIHw9IFBHVEJMX1BHRF9NT0RJRklFRDtcXG4gXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoc3RhcnQpO1xcbiBcXHRmcmVlX2hvdHBsdWdfcGd0YWJsZV9wYWdlKHZpcnRfdG9fcGFnZShwNGRwKSk7XFxuIH1cXG5AQCAtMTc2OCw2ICsxODY4LDggQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV90YWJsZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5leHQ7XFxuIFxcdHBnZF90ICpwZ2RwLCBwZ2Q7XFxuK1xcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcjtcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0bmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbkBAIC0xNzc3LDggKzE4NzksMTEgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV90YWJsZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRXQVJOX09OKCFwZ2RfcHJlc2VudChwZ2QpKTtcXG4tXFx0XFx0ZnJlZV9lbXB0eV9wNGRfdGFibGUocGdkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcpO1xcbitcXHRcXHRmcmVlX2VtcHR5X3A0ZF90YWJsZShwZ2RwLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZywgXFx1MDAyNm1hc2spO1xcbiBcXHR9IHdoaWxlIChhZGRyID0gbmV4dCwgYWRkciBcXHUwMDNjIGVuZCk7XFxuK1xcbitcXHRpZiAobWFzayBcXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXFxuK1xcdFxcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIGVuZCk7XFxuIH1cXG4gI2VuZGlmXFxuIFxcbkBAIC0xOTg2LDYgKzIwOTEsNyBAQCBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXFxuIFxcdFxcdCAgICBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuIFxcdGludCByZXQsIGZsYWdzID0gTk9fRVhFQ19NQVBQSU5HUztcXG4rXFx0cGd0YmxfbW9kX21hc2sgbWFzayA9IDA7XFxuIFxcbiBcXHRWTV9CVUdfT04oIW1ocF9yYW5nZV9hbGxvd2VkKHN0YXJ0LCBzaXplLCB0cnVlKSk7XFxuIFxcbkBAIC0xOTk0LDEwICsyMTAwLDEzIEBAIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4gXFxuIFxcdHJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHN3YXBwZXJfcGdfZGlyLCBzdGFydCwgX19waHlzX3RvX3ZpcnQoc3RhcnQpLFxcbiBcXHRcXHRcXHRcXHQgICBzaXplLCBwYXJhbXMtXFx1MDAzZXBncHJvdCwgcGdkX3BndGFibGVfYWxsb2NfaW5pdF9tbSxcXG4tXFx0XFx0XFx0XFx0ICAgZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHQgICBmbGFncywgXFx1MDAyNm1hc2spO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuK1xcdGlmIChtYXNrIFxcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcXG4rXFx0XFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgc3RhcnQgKyBzaXplKTtcXG4rXFxuIFxcdG1lbWJsb2NrX2NsZWFyX25vbWFwKHN0YXJ0LCBzaXplKTtcXG4gXFxuIFxcdHJldCA9IF9fYWRkX3BhZ2VzKG5pZCwgc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCwgc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xcbmluZGV4IDFjMjAxNDQ3MDBkN2Q3Li5kZDI5MzMxOTgyM2UzYyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXFxuKysrIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xcbkBAIC0zODksNiArMzg5LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IHB0ZHVtcF9pbml0KHZvaWQpXFxuIFxcdFxcdHsgTU9EVUxFU19FTkQsXFx0XFx0XFxcIk1vZHVsZXMgZW5kXFxcIiB9LFxcbiBcXHRcXHR7IFZNQUxMT0NfU1RBUlQsXFx0XFxcInZtYWxsb2MoKSBhcmVhXFxcIiB9LFxcbiBcXHRcXHR7IFZNQUxMT0NfRU5ELFxcdFxcdFxcXCJ2bWFsbG9jKCkgZW5kXFxcIiB9LFxcbitcXHRcXHR7IFBFUkNQVV9TVEFSVCxcXHRcXHRcXFwiR2xvYmFsIHBlcmNwdSBzdGFydFxcXCIgfSxcXG4rXFx0XFx0eyBQRVJDUFVfRU5ELFxcdFxcdFxcXCJHbG9iYWwgcGVyY3B1IGVuZFxcXCIgfSxcXG4rXFx0XFx0eyBMT0NBTF9QRVJDUFVfU1RBUlQsXFx0XFxcIkxvY2FsIHBlcmNwdSBzdGFydFxcXCIgfSxcXG4rXFx0XFx0eyBMT0NBTF9QRVJDUFVfRU5ELFxcdFxcXCJMb2NhbCBwZXJjcHUgZW5kXFxcIiB9LFxcbiBcXHRcXHR7IHZtZW1tYXBfc3RhcnQsXFx0XFxcInZtZW1tYXAgc3RhcnRcXFwiIH0sXFxuIFxcdFxcdHsgVk1FTU1BUF9FTkQsXFx0XFx0XFxcInZtZW1tYXAgZW5kXFxcIiB9LFxcbiBcXHRcXHR7IFBDSV9JT19TVEFSVCxcXHRcXHRcXFwiUENJIEkvTyBzdGFydFxcXCIgfSxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvc21wLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuY1xcbmluZGV4IGZhNjZmOWM5N2Q3NDhkLi5kNDIwZmY5ZGNmNGZjOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuY1xcbisrKyBiL2FyY2gvcmlzY3Yva2VybmVsL3NtcC5jXFxuQEAgLTM2NCwzICszNjQsNTQgQEAgdm9pZCBrZ2RiX3JvdW5kdXBfY3B1cyh2b2lkKVxcbiBcXHR9XFxuIH1cXG4gI2VuZGlmXFxuK1xcbisjaWZkZWYgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXFxuK2V4dGVybiBpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdO1xcbitcXG4rdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfb2Zmc2V0W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7XFxuK0VYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7XFxuK1xcbitpbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSlcXG4re1xcbitcXHRyZXR1cm4gY3B1X3RvX25vZGVfbWFwW2NwdV07XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IHBjcHVfY3B1X2Rpc3RhbmNlKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pXFxuK3tcXG4rXFx0cmV0dXJuIG5vZGVfZGlzdGFuY2UoZWFybHlfY3B1X3RvX25vZGUoZnJvbSksIGVhcmx5X2NwdV90b19ub2RlKHRvKSk7XFxuK31cXG4rXFxuK3ZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGRlbHRhO1xcbitcXHR1bnNpZ25lZCBpbnQgY3B1O1xcbitcXHRpbnQgcmMgPSAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHBjcHVfY2hvc2VuX2ZjICE9IFBDUFVfRkNfUEFHRSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBBbHdheXMgcmVzZXJ2ZSBhcmVhIGZvciBtb2R1bGUgcGVyY3B1IHZhcmlhYmxlcy4gIFRoYXQnc1xcbitcXHRcXHQgKiB3aGF0IHRoZSBsZWdhY3kgYWxsb2NhdG9yIGRpZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJjID0gcGNwdV9lbWJlZF9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFLCBQQUdFX1NJWkUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBwY3B1X2NwdV9kaXN0YW5jZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGVhcmx5X2NwdV90b19ub2RlKTtcXG4rI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xcbitcXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgcGNwdV9mY19uYW1lc1twY3B1X2Nob3Nlbl9mY10sIHJjKTtcXG4rI2VuZGlmXFxuK1xcdH1cXG4rXFxuKyNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmMgPSBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLCBlYXJseV9jcHVfdG9fbm9kZSk7XFxuKyNlbmRpZlxcbitcXHRpZiAocmMgXFx1MDAzYyAwKVxcbitcXHRcXHRwYW5pYyhcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcGVyY3B1IGFyZWFzIChlcnI9JWQpLlxcXCIsIHJjKTtcXG4rXFxuK1xcdGRlbHRhID0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7XFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXFxuK1xcdFxcdF9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IGRlbHRhICsgcGNwdV91bml0X29mZnNldHNbY3B1XTtcXG4rfVxcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jIGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jXFxuaW5kZXggYzk5ZjJhYjEwNWU1YjcuLmIzYjkxY2VlZDZhOTBkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xcbisrKyBiL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xcbkBAIC0xNiw3ICsxNiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3NlY3Rpb25zLmhcXHUwMDNlXFxuIFxcbi1zdGF0aWMgaW50IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXSA9IHsgWzAgLi4uIE5SX0NQVVMtMV0gPSBOVU1BX05PX05PREUgfTtcXG4raW50IGNwdV90b19ub2RlX21hcFtOUl9DUFVTXSA9IHsgWzAgLi4uIE5SX0NQVVMtMV0gPSBOVU1BX05PX05PREUgfTtcXG4gXFxuIGJvb2wgbnVtYV9vZmY7XFxuIFxcbkBAIC0xNDAsNTUgKzE0MCw2IEBAIHZvaWQgX19pbml0IGVhcmx5X21hcF9jcHVfdG9fbm9kZSh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgbmlkKVxcbiBcXHRcXHRzZXRfY3B1X251bWFfbm9kZShjcHUsIG5pZCk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcXG4tdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfb2Zmc2V0W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7XFxuLUVYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7XFxuLVxcbi1pbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSlcXG4te1xcbi1cXHRyZXR1cm4gY3B1X3RvX25vZGVfbWFwW2NwdV07XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgX19pbml0IHBjcHVfY3B1X2Rpc3RhbmNlKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pXFxuLXtcXG4tXFx0cmV0dXJuIG5vZGVfZGlzdGFuY2UoZWFybHlfY3B1X3RvX25vZGUoZnJvbSksIGVhcmx5X2NwdV90b19ub2RlKHRvKSk7XFxuLX1cXG4tXFxuLXZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcXG4te1xcbi1cXHR1bnNpZ25lZCBsb25nIGRlbHRhO1xcbi1cXHR1bnNpZ25lZCBpbnQgY3B1O1xcbi1cXHRpbnQgcmMgPSAtRUlOVkFMO1xcbi1cXG4tXFx0aWYgKHBjcHVfY2hvc2VuX2ZjICE9IFBDUFVfRkNfUEFHRSkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBBbHdheXMgcmVzZXJ2ZSBhcmVhIGZvciBtb2R1bGUgcGVyY3B1IHZhcmlhYmxlcy4gIFRoYXQnc1xcbi1cXHRcXHQgKiB3aGF0IHRoZSBsZWdhY3kgYWxsb2NhdG9yIGRpZC5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHJjID0gcGNwdV9lbWJlZF9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFLCBQQUdFX1NJWkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBwY3B1X2NwdV9kaXN0YW5jZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGVhcmx5X2NwdV90b19ub2RlKTtcXG4tI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xcbi1cXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgcGNwdV9mY19uYW1lc1twY3B1X2Nob3Nlbl9mY10sIHJjKTtcXG4tI2VuZGlmXFxuLVxcdH1cXG4tXFxuLSNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcXG4tXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4tXFx0XFx0cmMgPSBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLCBlYXJseV9jcHVfdG9fbm9kZSk7XFxuLSNlbmRpZlxcbi1cXHRpZiAocmMgXFx1MDAzYyAwKVxcbi1cXHRcXHRwYW5pYyhcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcGVyY3B1IGFyZWFzIChlcnI9JWQpLlxcXCIsIHJjKTtcXG4tXFxuLVxcdGRlbHRhID0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7XFxuLVxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXFxuLVxcdFxcdF9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IGRlbHRhICsgcGNwdV91bml0X29mZnNldHNbY3B1XTtcXG4tfVxcbi0jZW5kaWZcXG4tXFxuIC8qXFxuICAqIEluaXRpYWxpemUgTk9ERV9EQVRBIGZvciBhIG5vZGUgb24gdGhlIGxvY2FsIG1lbW9yeVxcbiAgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLmM4YzM4MDBmYmQ5ZmEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxcbkBAIC0xODU4LDYgKzE4NTgsMTcgQEAgdW5zaWduZWQgbG9uZyB2bWFsbG9jX3RvX3Bmbihjb25zdCB2b2lkICphZGRyKTtcXG4gI2lmZGVmIENPTkZJR19NTVVcXG4gZXh0ZXJuIGJvb2wgaXNfdm1hbGxvY19hZGRyKGNvbnN0IHZvaWQgKngpO1xcbiBleHRlcm4gaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCk7XFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGVyY3B1X2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdHJldHVybiBhZGRyIFxcdTAwM2U9IFBFUkNQVV9TVEFSVCBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwM2MgTE9DQUxfUEVSQ1BVX0VORDtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGVyY3B1X2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBib29sIGlzX3ZtYWxsb2NfYWRkcihjb25zdCB2b2lkICp4KVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oXFxuaW5kZXggNGYzNmI4NTg1OTk1YzUuLjVhMjcwMzFkZmYxYTVjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oXFxuQEAgLTc1LDYgKzc1LDggQEBcXG4gXFxuIGV4dGVybiB2b2lkICpwY3B1X2Jhc2VfYWRkcjtcXG4gZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnBjcHVfdW5pdF9vZmZzZXRzO1xcbisvKiBwZXJjcHUgbG9jYWwgbWFwcGluZyBiYXNlICovXFxuK2V4dGVybiB2b2lkICpwY3B1X2xvY2FsX2Jhc2U7XFxuIFxcbiBzdHJ1Y3QgcGNwdV9ncm91cF9pbmZvIHtcXG4gXFx0aW50XFx0XFx0XFx0bnJfdW5pdHM7XFx0LyogYWxpZ25lZCAjIG9mIHVuaXRzICovXFxuQEAgLTExNCw3ICsxMTYsNyBAQCBleHRlcm4gc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBwY3B1X2FsbG9jX2FsbG9jX2luZm8oaW50IG5yX2dyb3VwcyxcXG4gZXh0ZXJuIHZvaWQgX19pbml0IHBjcHVfZnJlZV9hbGxvY19pbmZvKHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpKTtcXG4gXFxuIGV4dGVybiB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLFxcbi1cXHRcXHRcXHRcXHRcXHQgdm9pZCAqYmFzZV9hZGRyKTtcXG4rXFx0XFx0XFx0XFx0XFx0IHZvaWQgKmJhc2VfYWRkciwgdm9pZCAqbG9jYWxfYmFzZSk7XFxuIFxcbiBleHRlcm4gaW50IF9faW5pdCBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBzaXplX3QgZHluX3NpemUsXFxuIFxcdFxcdFxcdFxcdHNpemVfdCBhdG9tX3NpemUsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oIGIvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmhcXG5pbmRleCA5MTc0ZmE1OWJiYzU0ZC4uMDYyYzY0YTVkNGJkMGMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxcbkBAIC0yNiw0ICsyNiwxNyBAQFxcbiBcXHRcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1xcdFxcdFxcXFxcXG4gXFx0fSB3aGlsZSAoMClcXG4gXFxuKyNpZm5kZWYgQ09ORklHX0FSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXFxuKyNkZWZpbmUgcHVkX3BvcHVsYXRlX3N5bmMoYWRkciwgcHVkLCBwbWQpXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRwdWRfcG9wdWxhdGUoXFx1MDAyNmluaXRfbW0sIHB1ZCwgcG1kKTtcXHRcXHRcXHRcXFxcXFxuK1xcdH0gd2hpbGUgKDApXFxuKyNlbmRpZlxcbitcXG4rI2lmbmRlZiBDT05GSUdfQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcXG4rI2RlZmluZSBwbWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwbWQsIHB0ZSlcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHBtZF9wb3B1bGF0ZV9rZXJuZWwoXFx1MDAyNmluaXRfbW0sIHBtZCwgcHRlKTtcXHRcXHRcXFxcXFxuK1xcdH0gd2hpbGUgKDApXFxuKyNlbmRpZlxcbiAjZW5kaWYgLyogX0xJTlVYX1BHQUxMT0NfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oXFxuaW5kZXggZDg3ZGM3Zjc3ZjRlOGEuLmRhZjk5NjVhMTExZDFmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcXG5AQCAtMzEzLDYgKzMxMyw5IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKipwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLFxcbiBcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBhbGlnbik7XFxuIFxcbiB2b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKTtcXG4rc3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IHVuaXRfc2l6ZSwgc2l6ZV90IGFsaWduKTtcXG4rXFxuICMgZWxzZVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2bV9zdHJ1Y3QgKipcXG4gcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uZTE5MTBjMzMyNjM4NTEgMTAwNjQ0XFxuLS0tIGEvbW0vS2NvbmZpZ1xcbisrKyBiL21tL0tjb25maWdcXG5AQCAtMTA2MSw2ICsxMDYxLDkgQEAgY29uZmlnIE5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXFxuIGNvbmZpZyBVU0VfUEVSQ1BVX05VTUFfTk9ERV9JRFxcbiBcXHRib29sXFxuIFxcbitjb25maWcgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitcXHRib29sXFxuK1xcbiBjb25maWcgSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcXG4gXFx0Ym9vbFxcbiBcXG5AQCAtMTUwOSw2ICsxNTEyLDEyIEBAIGNvbmZpZyBMQVpZX01NVV9NT0RFX0tVTklUX1RFU1RcXG4gXFxuIFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gXFxuK2NvbmZpZyBBUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQ1xcbitcXHRib29sXFxuK1xcbitjb25maWcgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNcXG4rXFx0Ym9vbFxcbitcXG4gc291cmNlIFxcXCJtbS9kYW1vbi9LY29uZmlnXFxcIlxcbiBcXG4gZW5kbWVudVxcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li45ZDlmMDhjYjI2YTExNCAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0xNTUyLDEwICsxNTUyLDEzIEBAIHZvaWQgY2xlYXJfdm1fdW5pbml0aWFsaXplZF9mbGFnKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtKTtcXG4gaW50IF9fbXVzdF9jaGVjayBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgcHJvdCxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0KTtcXG4raW50IF9fbXVzdF9jaGVjayB2bWFwX3JhbmdlX25vZmx1c2gocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsXFxuK1xcdFxcdFxcdHBncHJvdF90IHByb3QsIHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdCk7XFxuIFxcbiB2b2lkIHZ1bm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcXG4gXFxuLXZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XFxuK3ZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfc2luZ2xlX3RocmVhZGVkX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbW0va21zYW4vaG9va3MuYyBiL21tL2ttc2FuL2hvb2tzLmNcXG5pbmRleCA4ZjIyZDFmMjI5ODEzZi4uZTJhMGZhZjM0NGI5MWIgMTAwNjQ0XFxuLS0tIGEvbW0va21zYW4vaG9va3MuY1xcbisrKyBiL21tL2ttc2FuL2hvb2tzLmNcXG5AQCAtMTM1LDggKzEzNSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZtYWxsb2Nfb3JpZ2luKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gXFxuIHZvaWQga21zYW5fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIHtcXG4tXFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh2bWFsbG9jX3NoYWRvdyhzdGFydCksIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xcbi1cXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHZtYWxsb2Nfb3JpZ2luKHN0YXJ0KSwgdm1hbGxvY19vcmlnaW4oZW5kKSk7XFxuK1xcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHZtYWxsb2Nfc2hhZG93KHN0YXJ0KSwgdm1hbGxvY19zaGFkb3coZW5kKSk7XFxuK1xcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHZtYWxsb2Nfb3JpZ2luKHN0YXJ0KSwgdm1hbGxvY19vcmlnaW4oZW5kKSk7XFxuIFxcdGZsdXNoX2NhY2hlX3ZtYXAodm1hbGxvY19zaGFkb3coc3RhcnQpLCB2bWFsbG9jX3NoYWRvdyhlbmQpKTtcXG4gXFx0Zmx1c2hfY2FjaGVfdm1hcCh2bWFsbG9jX29yaWdpbihzdGFydCksIHZtYWxsb2Nfb3JpZ2luKGVuZCkpO1xcbiB9XFxuQEAgLTE4MSw3ICsxODEsNyBAQCBpbnQga21zYW5faW9yZW1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHR2bWFsbG9jX29yaWdpbihzdGFydCArIG9mZiArIFBBR0VfU0laRSksIHByb3QsIFxcdTAwMjZvcmlnaW4sXFxuIFxcdFxcdFxcdFBBR0VfU0hJRlQpO1xcbiBcXHRcXHRpZiAobWFwcGVkKSB7XFxuLVxcdFxcdFxcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goXFxuK1xcdFxcdFxcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsXFxuIFxcdFxcdFxcdFxcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0ICsgb2ZmKSxcXG4gXFx0XFx0XFx0XFx0dm1hbGxvY19zaGFkb3coc3RhcnQgKyBvZmYgKyBQQUdFX1NJWkUpKTtcXG4gXFx0XFx0XFx0ZXJyID0gbWFwcGVkO1xcbkBAIC0yMDMsMTAgKzIwMywxMCBAQCBpbnQga21zYW5faW9yZW1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRfX2ZyZWVfcGFnZXMoc2hhZG93LCAxKTtcXG4gXFx0XFx0aWYgKG9yaWdpbilcXG4gXFx0XFx0XFx0X19mcmVlX3BhZ2VzKG9yaWdpbiwgMSk7XFxuLVxcdFxcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goXFxuK1xcdFxcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsXFxuIFxcdFxcdFxcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0KSxcXG4gXFx0XFx0XFx0dm1hbGxvY19zaGFkb3coc3RhcnQgKyBjbGVhbiAqIFBBR0VfU0laRSkpO1xcbi1cXHRcXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKFxcbitcXHRcXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLFxcbiBcXHRcXHRcXHR2bWFsbG9jX29yaWdpbihzdGFydCksXFxuIFxcdFxcdFxcdHZtYWxsb2Nfb3JpZ2luKHN0YXJ0ICsgY2xlYW4gKiBQQUdFX1NJWkUpKTtcXG4gXFx0fVxcbkBAIC0yMzMsOCArMjMzLDggQEAgdm9pZCBrbXNhbl9pb3VubWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIFxcdCAgICAgaSsrLCB2X3NoYWRvdyArPSBQQUdFX1NJWkUsIHZfb3JpZ2luICs9IFBBR0VfU0laRSkge1xcbiBcXHRcXHRzaGFkb3cgPSBrbXNhbl92bWFsbG9jX3RvX3BhZ2Vfb3JfbnVsbCgodm9pZCAqKXZfc2hhZG93KTtcXG4gXFx0XFx0b3JpZ2luID0ga21zYW5fdm1hbGxvY190b19wYWdlX29yX251bGwoKHZvaWQgKil2X29yaWdpbik7XFxuLVxcdFxcdF9fdnVubWFwX3JhbmdlX25vZmx1c2godl9zaGFkb3csIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xcbi1cXHRcXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHZfb3JpZ2luLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcXG4rXFx0XFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgdl9zaGFkb3csIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xcbitcXHRcXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2X29yaWdpbiwgdm1hbGxvY19vcmlnaW4oZW5kKSk7XFxuIFxcdFxcdGlmIChzaGFkb3cpXFxuIFxcdFxcdFxcdF9fZnJlZV9wYWdlcyhzaGFkb3csIDEpO1xcbiBcXHRcXHRpZiAob3JpZ2luKVxcbmRpZmYgLS1naXQgYS9tbS9wZXJjcHUtaW50ZXJuYWwuaCBiL21tL3BlcmNwdS1pbnRlcm5hbC5oXFxuaW5kZXggOGNiZTAzOWJmODQ3YWMuLjRkNDYxMzA1MjQzYmYwIDEwMDY0NFxcbi0tLSBhL21tL3BlcmNwdS1pbnRlcm5hbC5oXFxuKysrIGIvbW0vcGVyY3B1LWludGVybmFsLmhcXG5AQCAtNjMsMTEgKzYzLDE0IEBAIHN0cnVjdCBwY3B1X2NodW5rIHtcXG4gXFx0ICogY2h1bmtfbWQuXFxuIFxcdCAqL1xcbiBcXHR2b2lkXFx0XFx0XFx0KmJhc2VfYWRkciBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbitcXHQvKiBwZXJjcHUgbG9jYWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBjaHVuayAqL1xcbitcXHR2b2lkICAgICAgICAgICAgICAgICAgICAqbG9jYWxfYmFzZTtcXG4gXFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHQqYWxsb2NfbWFwO1xcdC8qIGFsbG9jYXRpb24gbWFwICovXFxuIFxcdHN0cnVjdCBwY3B1X2Jsb2NrX21kXFx0Km1kX2Jsb2NrcztcXHQvKiBtZXRhZGF0YSBibG9ja3MgKi9cXG4gXFxuIFxcdHZvaWRcXHRcXHRcXHQqZGF0YTtcXHRcXHQvKiBjaHVuayBkYXRhICovXFxuK1xcdHZvaWRcXHRcXHRcXHQqbG9jYWxfZGF0YTtcXHQvKiBjaHVuayBsb2NhbCB2bSAqL1xcbiBcXHRib29sXFx0XFx0XFx0aW1tdXRhYmxlO1xcdC8qIG5vIFtkZV1wb3B1bGF0aW9uIGFsbG93ZWQgKi9cXG4gXFx0Ym9vbFxcdFxcdFxcdGlzb2xhdGVkO1xcdC8qIGlzb2xhdGVkIGZyb20gYWN0aXZlIGNodW5rXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIHNsb3RzICovXFxuQEAgLTE2Miw2ICsxNjUsMTcgQEAgc3RhdGljIGlubGluZSBzaXplX3QgcGNwdV9vYmpfZnVsbF9zaXplKHNpemVfdCBzaXplKVxcbiBcXHRyZXR1cm4gc2l6ZSAqIG51bV9wb3NzaWJsZV9jcHVzKCkgKyBleHRyYV9zaXplO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rZXh0ZXJuIHZvaWQgX19pbml0IG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucilcXG4re1xcbitcXHRyZXR1cm47XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAjaWZkZWYgQ09ORklHX1BFUkNQVV9TVEFUU1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL21tL3BlcmNwdS12bS5jIGIvbW0vcGVyY3B1LXZtLmNcXG5pbmRleCA0ZjU5MzcwOTA1OTBkOC4uNWRlY2FhZDc2NDBmZGMgMTAwNjQ0XFxuLS0tIGEvbW0vcGVyY3B1LXZtLmNcXG4rKysgYi9tbS9wZXJjcHUtdm0uY1xcbkBAIC0xMTIsNiArMTEyLDEwIEBAIHN0YXRpYyBpbnQgcGNwdV9hbGxvY19wYWdlcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXFxuIFxcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rZXh0ZXJuIHBnZF90ICpwZXJjcHVfcGdkW05SX0NQVVNdO1xcbisjZW5kaWZcXG4rXFxuIC8qKlxcbiAgKiBwY3B1X3ByZV91bm1hcF9mbHVzaCAtIGZsdXNoIGNhY2hlIHByaW9yIHRvIHVubWFwcGluZ1xcbiAgKiBAY2h1bms6IGNodW5rIHRoZSByZWdpb25zIHRvIGJlIGZsdXNoZWQgYmVsb25ncyB0b1xcbkBAIC0xMzAsNiArMTM0LDExIEBAIHN0YXRpYyB2b2lkIHBjcHVfcHJlX3VubWFwX2ZsdXNoKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuayxcXG4gXFx0Zmx1c2hfY2FjaGVfdnVubWFwKFxcbiBcXHRcXHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfbG93X3VuaXRfY3B1LCBwYWdlX3N0YXJ0KSxcXG4gXFx0XFx0cGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2hpZ2hfdW5pdF9jcHUsIHBhZ2VfZW5kKSk7XFxuK1xcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rXFx0Zmx1c2hfY2FjaGVfdnVubWFwKCh1bnNpZ25lZCBsb25nKWNodW5rLVxcdTAwM2Vsb2NhbF9iYXNlICsgKHBhZ2Vfc3RhcnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCksXFxuK1xcdFxcdFxcdCh1bnNpZ25lZCBsb25nKWNodW5rLVxcdTAwM2Vsb2NhbF9iYXNlICsgKHBhZ2VfZW5kIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKTtcXG4rI2VuZGlmXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fcGNwdV91bm1hcF9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBucl9wYWdlcylcXG5AQCAtMTM3LDYgKzE0NiwyMCBAQCBzdGF0aWMgdm9pZCBfX3BjcHVfdW5tYXBfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnJfcGFnZXMpXFxuIFxcdHZ1bm1hcF9yYW5nZV9ub2ZsdXNoKGFkZHIsIGFkZHIgKyAobnJfcGFnZXMgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzX2xvY2FsKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcXG4rXFx0XFx0XFx0ICAgIGludCBucl9wYWdlcylcXG4re1xcbitcXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHBlcmNwdV9wZ2RbY3B1XSwgdmlydCwgdmlydCArIChucl9wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzX2xvY2FsKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcXG4rXFx0XFx0XFx0ICAgIGludCBucl9wYWdlcylcXG4re1xcbitcXHRyZXR1cm47XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKipcXG4gICogcGNwdV91bm1hcF9wYWdlcyAtIHVubWFwIHBhZ2VzIG91dCBvZiBhIHBjcHVfY2h1bmtcXG4gICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdFxcbkBAIC0xNjYsNiArMTg5LDEwIEBAIHN0YXRpYyB2b2lkIHBjcHVfdW5tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxcbiBcXHRcXHR9XFxuIFxcdFxcdF9fcGNwdV91bm1hcF9wYWdlcyhwY3B1X2NodW5rX2FkZHIoY2h1bmssIGNwdSwgcGFnZV9zdGFydCksXFxuIFxcdFxcdFxcdFxcdCAgIHBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7XFxuK1xcbitcXHRcXHRfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwoY3B1LFxcbitcXHRcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyljaHVuay1cXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX3N0YXJ0IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpLFxcbitcXHRcXHRcXHRcXHRcXHRwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTE4OCw2ICsyMTUsMTIgQEAgc3RhdGljIHZvaWQgcGNwdV9wb3N0X3VubWFwX3RsYl9mbHVzaChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXFxuIFxcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UoXFxuIFxcdFxcdHBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9sb3dfdW5pdF9jcHUsIHBhZ2Vfc3RhcnQpLFxcbiBcXHRcXHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfaGlnaF91bml0X2NwdSwgcGFnZV9lbmQpKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKFxcbitcXHRcXHQodW5zaWduZWQgbG9uZyljaHVuay1cXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX3N0YXJ0IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpLFxcbitcXHRcXHQodW5zaWduZWQgbG9uZyljaHVuay1cXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX2VuZCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuKyNlbmRpZlxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbkBAIC0xOTcsNiArMjMwLDMyIEBAIHN0YXRpYyBpbnQgX19wY3B1X21hcF9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuIFxcdFxcdFxcdFBBR0VfS0VSTkVMLCBwYWdlcywgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCk7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXNfbG9jYWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbitcXHRcXHRcXHQgICAgaW50IG5yX3BhZ2VzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XFxuK1xcdFxcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChwZXJjcHVfcGdkW2NwdV0sIHZpcnQsIHZpcnQgKyBQQUdFX1NJWkUsXFxuK1xcdFxcdFxcdFxcdHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIFBBR0VfS0VSTkVMLCBQQUdFX1NISUZUKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdFxcdHZpcnQgKz0gUEFHRV9TSVpFO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbnQgX19wY3B1X21hcF9wYWdlc19sb2NhbCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsIHN0cnVjdCBwYWdlICoqcGFnZXMsXFxuK1xcdFxcdFxcdCAgICBpbnQgbnJfcGFnZXMpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKipcXG4gICogcGNwdV9tYXBfcGFnZXMgLSBtYXAgcGFnZXMgaW50byBhIHBjcHVfY2h1bmtcXG4gICogQGNodW5rOiBjaHVuayBvZiBpbnRlcmVzdFxcbkBAIC0yMjQsNiArMjgzLDEzIEBAIHN0YXRpYyBpbnQgcGNwdV9tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcbitcXHRcXHRlcnIgPSBfX3BjcHVfbWFwX3BhZ2VzX2xvY2FsKGNwdSxcXG4rXFx0XFx0XFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcpY2h1bmstXFx1MDAzZWxvY2FsX2Jhc2UgKyAocGFnZV9zdGFydCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnBhZ2VzW3BjcHVfcGFnZV9pZHgoY3B1LCBwYWdlX3N0YXJ0KV0sXFxuK1xcdFxcdFxcdFxcdFxcdHBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFxuIFxcdFxcdGZvciAoaSA9IHBhZ2Vfc3RhcnQ7IGkgXFx1MDAzYyBwYWdlX2VuZDsgaSsrKVxcbiBcXHRcXHRcXHRwY3B1X3NldF9wYWdlX2NodW5rKHBhZ2VzW3BjcHVfcGFnZV9pZHgoY3B1LCBpKV0sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBjaHVuayk7XFxuQEAgLTIzMyw2ICsyOTksOSBAQCBzdGF0aWMgaW50IHBjcHVfbWFwX3BhZ2VzKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuayxcXG4gXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KHRjcHUpIHtcXG4gXFx0XFx0X19wY3B1X3VubWFwX3BhZ2VzKHBjcHVfY2h1bmtfYWRkcihjaHVuaywgdGNwdSwgcGFnZV9zdGFydCksXFxuIFxcdFxcdFxcdFxcdCAgIHBhZ2VfZW5kIC0gcGFnZV9zdGFydCk7XFxuK1xcdFxcdF9fcGNwdV91bm1hcF9wYWdlc19sb2NhbCh0Y3B1LFxcbitcXHRcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyljaHVuay1cXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX3N0YXJ0IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpLFxcbitcXHRcXHRcXHRcXHRcXHRwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpO1xcbiBcXHRcXHRpZiAodGNwdSA9PSBjcHUpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTI1OCw2ICszMjcsMTEgQEAgc3RhdGljIHZvaWQgcGNwdV9wb3N0X21hcF9mbHVzaChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXFxuIFxcdGZsdXNoX2NhY2hlX3ZtYXAoXFxuIFxcdFxcdHBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9sb3dfdW5pdF9jcHUsIHBhZ2Vfc3RhcnQpLFxcbiBcXHRcXHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfaGlnaF91bml0X2NwdSwgcGFnZV9lbmQpKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitcXHRmbHVzaF9jYWNoZV92bWFwKCh1bnNpZ25lZCBsb25nKWNodW5rLVxcdTAwM2Vsb2NhbF9iYXNlICsgKHBhZ2Vfc3RhcnQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCksXFxuK1xcdFxcdFxcdCAodW5zaWduZWQgbG9uZyljaHVuay1cXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX2VuZCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuKyNlbmRpZlxcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzQ5LDYgKzQyMywyNCBAQCBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY3JlYXRlX2NodW5rKGdmcF90IGdmcClcXG4gXFx0Y2h1bmstXFx1MDAzZWRhdGEgPSB2bXM7XFxuIFxcdGNodW5rLVxcdTAwM2ViYXNlX2FkZHIgPSB2bXNbMF0tXFx1MDAzZWFkZHIgLSBwY3B1X2dyb3VwX29mZnNldHNbMF07XFxuIFxcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWx0YSA9ICh1bnNpZ25lZCBsb25nKWNodW5rLVxcdTAwM2ViYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkcjtcXG4rXFx0dW5zaWduZWQgbG9uZyBoaW50ID0gZGVsdGEgKyAodW5zaWduZWQgbG9uZylwY3B1X2xvY2FsX2Jhc2U7XFxuK1xcdHN0cnVjdCB2bV9zdHJ1Y3QgKmxvY2FsX3ZtID0gcGNwdV9nZXRfbG9jYWxfdm1fYXJlYShoaW50LFxcbitcXHRcXHRcXHRcXHRcXHRwY3B1X3VuaXRfc2l6ZSwgcGNwdV9hdG9tX3NpemUpO1xcbitcXHRpZiAoIWxvY2FsX3ZtKSB7XFxuK1xcdFxcdHBjcHVfZnJlZV92bV9hcmVhcyh2bXMsIHBjcHVfbnJfZ3JvdXBzKTtcXG4rXFx0XFx0cGNwdV9mcmVlX2NodW5rKGNodW5rKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGNodW5rLVxcdTAwM2Vsb2NhbF9iYXNlID0gbG9jYWxfdm0tXFx1MDAzZWFkZHI7XFxuK1xcdGNodW5rLVxcdTAwM2Vsb2NhbF9kYXRhID0gKHZvaWQgKilsb2NhbF92bTtcXG4rI2Vsc2VcXG4rXFx0Y2h1bmstXFx1MDAzZWxvY2FsX2Jhc2UgPSAwO1xcbitcXHRjaHVuay1cXHUwMDNlbG9jYWxfZGF0YSA9IE5VTEw7XFxuKyNlbmRpZlxcbitcXG4gXFx0cGNwdV9zdGF0c19jaHVua19hbGxvYygpO1xcbiBcXHR0cmFjZV9wZXJjcHVfY3JlYXRlX2NodW5rKGNodW5rLVxcdTAwM2ViYXNlX2FkZHIpO1xcbiBcXG5AQCAtMzY1LDYgKzQ1Nyw4IEBAIHN0YXRpYyB2b2lkIHBjcHVfZGVzdHJveV9jaHVuayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspXFxuIFxcbiBcXHRpZiAoY2h1bmstXFx1MDAzZWRhdGEpXFxuIFxcdFxcdHBjcHVfZnJlZV92bV9hcmVhcyhjaHVuay1cXHUwMDNlZGF0YSwgcGNwdV9ucl9ncm91cHMpO1xcbitcXHRpZiAoY2h1bmstXFx1MDAzZWxvY2FsX2RhdGEpXFxuK1xcdFxcdGZyZWVfdm1fYXJlYSgoc3RydWN0IHZtX3N0cnVjdCAqKWNodW5rLVxcdTAwM2Vsb2NhbF9kYXRhKTtcXG4gXFx0cGNwdV9mcmVlX2NodW5rKGNodW5rKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LmMgYi9tbS9wZXJjcHUuY1xcbmluZGV4IGIwNjc2YjgwNTRlZDA5Li44YjI3M2VkOGU1YThiYiAxMDA2NDRcXG4tLS0gYS9tbS9wZXJjcHUuY1xcbisrKyBiL21tL3BlcmNwdS5jXFxuQEAgLTE0NSw2ICsxNDUsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHBjcHVfaGlnaF91bml0X2NwdSBfX3JvX2FmdGVyX2luaXQ7XFxuIFxcbiAvKiB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgY2h1bmsgd2hpY2ggc3RhcnRzIHdpdGggdGhlIGtlcm5lbCBzdGF0aWMgYXJlYSAqL1xcbiB2b2lkICpwY3B1X2Jhc2VfYWRkciBfX3JvX2FmdGVyX2luaXQ7XFxuKy8qIFRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBjaHVuayBsb2NhbCBtYXBwaW5nICovXFxuK3ZvaWQgKnBjcHVfbG9jYWxfYmFzZSBfX3JvX2FmdGVyX2luaXQ7XFxuIFxcbiBzdGF0aWMgY29uc3QgaW50ICpwY3B1X3VuaXRfbWFwIF9fcm9fYWZ0ZXJfaW5pdDtcXHRcXHQvKiBjcHUgLVxcdTAwM2UgdW5pdCAqL1xcbiBjb25zdCB1bnNpZ25lZCBsb25nICpwY3B1X3VuaXRfb2Zmc2V0cyBfX3JvX2FmdGVyX2luaXQ7XFx0LyogY3B1IC1cXHUwMDNlIHVuaXQgb2Zmc2V0ICovXFxuQEAgLTEzMzgsNiArMTM0MCw3IEBAIHN0YXRpYyB2b2lkIHBjcHVfaW5pdF9tZF9ibG9ja3Moc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rKVxcbiAvKipcXG4gICogcGNwdV9hbGxvY19maXJzdF9jaHVuayAtIGNyZWF0ZXMgY2h1bmtzIHRoYXQgc2VydmUgdGhlIGZpcnN0IGNodW5rXFxuICAqIEB0bXBfYWRkcjogdGhlIHN0YXJ0IG9mIHRoZSByZWdpb24gc2VydmVkXFxuKyAqIEBsb2NhbF90bXA6IHRoZSBzdGFydCBvZiB0aGUgbG9jYWwgcGVyY3B1IHJlZ2lvbiBzZXJ2ZWRcXG4gICogQG1hcF9zaXplOiBzaXplIG9mIHRoZSByZWdpb24gc2VydmVkXFxuICAqXFxuICAqIFRoaXMgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoZSBjaHVua3MgdGhhdCBzZXJ2ZSB0aGUgZmlyc3QgY2h1bmsuICBUaGVcXG5AQCAtMTM0OSwxNSArMTM1MiwxNiBAQCBzdGF0aWMgdm9pZCBwY3B1X2luaXRfbWRfYmxvY2tzKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcXG4gICogQ2h1bmsgc2VydmluZyB0aGUgcmVnaW9uIGF0IEB0bXBfYWRkciBvZiBAbWFwX3NpemUuXFxuICAqL1xcbiBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKiBfX2luaXQgcGNwdV9hbGxvY19maXJzdF9jaHVuayh1bnNpZ25lZCBsb25nIHRtcF9hZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgaW50IG1hcF9zaXplKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBsb2NhbF90bXAsIGludCBtYXBfc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bms7XFxuLVxcdHVuc2lnbmVkIGxvbmcgYWxpZ25lZF9hZGRyO1xcbitcXHR1bnNpZ25lZCBsb25nIGFsaWduZWRfYWRkciwgYWxpZ25lZF9sb2NhbDtcXG4gXFx0aW50IHN0YXJ0X29mZnNldCwgb2Zmc2V0X2JpdHMsIHJlZ2lvbl9zaXplLCByZWdpb25fYml0cztcXG4gXFx0c2l6ZV90IGFsbG9jX3NpemU7XFxuIFxcbiBcXHQvKiByZWdpb24gY2FsY3VsYXRpb25zICovXFxuIFxcdGFsaWduZWRfYWRkciA9IHRtcF9hZGRyIFxcdTAwMjYgUEFHRV9NQVNLO1xcbitcXHRhbGlnbmVkX2xvY2FsID0gbG9jYWxfdG1wIFxcdTAwMjYgUEFHRV9NQVNLO1xcbiBcXG4gXFx0c3RhcnRfb2Zmc2V0ID0gdG1wX2FkZHIgLSBhbGlnbmVkX2FkZHI7XFxuIFxcdHJlZ2lvbl9zaXplID0gQUxJR04oc3RhcnRfb2Zmc2V0ICsgbWFwX3NpemUsIFBBR0VfU0laRSk7XFxuQEAgLTEzNzAsNiArMTM3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqIF9faW5pdCBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHVuc2lnbmVkIGxvbmcgdG1wX2FkZHIsXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjaHVuay1cXHUwMDNlbGlzdCk7XFxuIFxcbiBcXHRjaHVuay1cXHUwMDNlYmFzZV9hZGRyID0gKHZvaWQgKilhbGlnbmVkX2FkZHI7XFxuK1xcdGNodW5rLVxcdTAwM2Vsb2NhbF9iYXNlID0gKHZvaWQgKilhbGlnbmVkX2xvY2FsO1xcbiBcXHRjaHVuay1cXHUwMDNlc3RhcnRfb2Zmc2V0ID0gc3RhcnRfb2Zmc2V0O1xcbiBcXHRjaHVuay1cXHUwMDNlZW5kX29mZnNldCA9IHJlZ2lvbl9zaXplIC0gY2h1bmstXFx1MDAzZXN0YXJ0X29mZnNldCAtIG1hcF9zaXplO1xcbiBcXG5AQCAtMjU2Miw3ICsyNTY3LDcgQEAgc3RhdGljIHZvaWQgcGNwdV9kdW1wX2FsbG9jX2luZm8oY29uc3QgY2hhciAqbHZsLFxcbiAgKiBhbmQgYXZhaWxhYmxlIGZvciBkeW5hbWljIGFsbG9jYXRpb24gbGlrZSBhbnkgb3RoZXIgY2h1bmsuXFxuICAqL1xcbiB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLFxcbi1cXHRcXHRcXHRcXHQgICB2b2lkICpiYXNlX2FkZHIpXFxuK1xcdFxcdFxcdFxcdCAgIHZvaWQgKmJhc2VfYWRkciwgdm9pZCAqbG9jYWxfYmFzZSlcXG4ge1xcbiBcXHRzaXplX3Qgc2l6ZV9zdW0gPSBhaS1cXHUwMDNlc3RhdGljX3NpemUgKyBhaS1cXHUwMDNlcmVzZXJ2ZWRfc2l6ZSArIGFpLVxcdTAwM2VkeW5fc2l6ZTtcXG4gXFx0c2l6ZV90IHN0YXRpY19zaXplLCBkeW5fc2l6ZTtcXG5AQCAtMjU3Miw3ICsyNTc3LDcgQEAgdm9pZCBfX2luaXQgcGNwdV9zZXR1cF9maXJzdF9jaHVuayhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSxcXG4gXFx0dW5zaWduZWQgaW50IGNwdTtcXG4gXFx0aW50ICp1bml0X21hcDtcXG4gXFx0aW50IGdyb3VwLCB1bml0LCBpO1xcbi1cXHR1bnNpZ25lZCBsb25nIHRtcF9hZGRyO1xcbitcXHR1bnNpZ25lZCBsb25nIHRtcF9hZGRyLCBsb2NhbF90bXAgPSAwO1xcbiBcXHRzaXplX3QgYWxsb2Nfc2l6ZTtcXG4gXFxuICNkZWZpbmUgUENQVV9TRVRVUF9CVUdfT04oY29uZClcXHRkbyB7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbkBAIC0yNzEzLDExICsyNzE4LDE1IEBAIHZvaWQgX19pbml0IHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoY29uc3Qgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWksXFxuIFxcdCAqICAgY2h1bmsuXFxuIFxcdCAqL1xcbiBcXHR0bXBfYWRkciA9ICh1bnNpZ25lZCBsb25nKWJhc2VfYWRkciArIHN0YXRpY19zaXplO1xcbitcXHRpZiAobG9jYWxfYmFzZSlcXG4rXFx0XFx0bG9jYWxfdG1wID0gKHVuc2lnbmVkIGxvbmcpbG9jYWxfYmFzZSArIHN0YXRpY19zaXplO1xcbiBcXHRpZiAoYWktXFx1MDAzZXJlc2VydmVkX3NpemUpXFxuLVxcdFxcdHBjcHVfcmVzZXJ2ZWRfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLFxcbitcXHRcXHRwY3B1X3Jlc2VydmVkX2NodW5rID0gcGNwdV9hbGxvY19maXJzdF9jaHVuayh0bXBfYWRkciwgbG9jYWxfdG1wLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRhaS1cXHUwMDNlcmVzZXJ2ZWRfc2l6ZSk7XFxuIFxcdHRtcF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpYmFzZV9hZGRyICsgc3RhdGljX3NpemUgKyBhaS1cXHUwMDNlcmVzZXJ2ZWRfc2l6ZTtcXG4tXFx0cGNwdV9maXJzdF9jaHVuayA9IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodG1wX2FkZHIsIGR5bl9zaXplKTtcXG4rXFx0aWYgKGxvY2FsX2Jhc2UpXFxuK1xcdFxcdGxvY2FsX3RtcCA9ICh1bnNpZ25lZCBsb25nKWxvY2FsX2Jhc2UgKyBzdGF0aWNfc2l6ZSArIGFpLVxcdTAwM2VyZXNlcnZlZF9zaXplO1xcbitcXHRwY3B1X2ZpcnN0X2NodW5rID0gcGNwdV9hbGxvY19maXJzdF9jaHVuayh0bXBfYWRkciwgbG9jYWxfdG1wLCBkeW5fc2l6ZSk7XFxuIFxcbiBcXHRwY3B1X25yX2VtcHR5X3BvcF9wYWdlcyA9IHBjcHVfZmlyc3RfY2h1bmstXFx1MDAzZW5yX2VtcHR5X3BvcF9wYWdlcztcXG4gXFx0cGNwdV9jaHVua19yZWxvY2F0ZShwY3B1X2ZpcnN0X2NodW5rLCAtMSk7XFxuQEAgLTMxMDgsNyArMzExNyw3IEBAIGludCBfX2luaXQgcGNwdV9lbWJlZF9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgc2l6ZV90IGR5bl9zaXplLFxcbiBcXHRcXHRQRk5fRE9XTihzaXplX3N1bSksIGFpLVxcdTAwM2VzdGF0aWNfc2l6ZSwgYWktXFx1MDAzZXJlc2VydmVkX3NpemUsXFxuIFxcdFxcdGFpLVxcdTAwM2VkeW5fc2l6ZSwgYWktXFx1MDAzZXVuaXRfc2l6ZSk7XFxuIFxcbi1cXHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBiYXNlKTtcXG4rXFx0cGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgYmFzZSwgTlVMTCk7XFxuIFxcdGdvdG8gb3V0X2ZyZWU7XFxuIFxcbiBvdXRfZnJlZV9hcmVhczpcXG5AQCAtMzE2Myw3ICszMTcyLDcgQEAgdm9pZCBfX2luaXQgX193ZWFrIHBjcHVfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gXFx0cHVkID0gcHVkX29mZnNldChwNGQsIGFkZHIpO1xcbiBcXHRpZiAocHVkX25vbmUoKnB1ZCkpIHtcXG4gXFx0XFx0cG1kID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUE1EX1RBQkxFX1NJWkUsIFBNRF9UQUJMRV9TSVpFKTtcXG4tXFx0XFx0cHVkX3BvcHVsYXRlKFxcdTAwMjZpbml0X21tLCBwdWQsIHBtZCk7XFxuK1xcdFxcdHB1ZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHB1ZCwgcG1kKTtcXG4gXFx0fVxcbiBcXG4gXFx0cG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpO1xcbkBAIC0zMTcxLDcgKzMxODAsNyBAQCB2b2lkIF9faW5pdCBfX3dlYWsgcGNwdV9wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9uZyBhZGRyKVxcbiBcXHRcXHRwdGVfdCAqbmV3O1xcbiBcXG4gXFx0XFx0bmV3ID0gbWVtYmxvY2tfYWxsb2Nfb3JfcGFuaWMoUFRFX1RBQkxFX1NJWkUsIFBURV9UQUJMRV9TSVpFKTtcXG4tXFx0XFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcXHUwMDI2aW5pdF9tbSwgcG1kLCBuZXcpO1xcbitcXHRcXHRwbWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwbWQsIG5ldyk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybjtcXG5AQCAtMzE5NCw2ICszMjAzLDcgQEAgdm9pZCBfX2luaXQgX193ZWFrIHBjcHVfcG9wdWxhdGVfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdCBjcHVfdG9fbmRfZm4pXFxuIHtcXG4gXFx0c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3Qgdm07XFxuK1xcdHN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0IHBjcHVfdm07XFxuIFxcdHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpO1xcbiBcXHRjaGFyIHBzaXplX3N0clsxNl07XFxuIFxcdGludCB1bml0X3BhZ2VzO1xcbkBAIC0zMjQzLDExICszMjUzLDI4IEBAIGludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3RcXG4gXFx0fVxcbiBcXG4gXFx0LyogYWxsb2NhdGUgdm0gYXJlYSwgbWFwIHRoZSBwYWdlcyBhbmQgY29weSBzdGF0aWMgZGF0YSAqL1xcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcXG4rXFx0dm0uZmxhZ3MgPSBWTV9BTExPQztcXG4rXFx0dm0uYWRkciA9ICh2b2lkICopQUxJR04oUEVSQ1BVX1NUQVJULCBQQUdFX1NJWkUpO1xcbitcXHR2bS5zaXplID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIGFpLVxcdTAwM2V1bml0X3NpemU7XFxuK1xcdHZtX2FyZWFfYWRkX2Vhcmx5KFxcdTAwMjZ2bSk7XFxuK1xcdGthc2FuX3BvcHVsYXRlX2Vhcmx5X3ZtX2FyZWFfc2hhZG93KHZtLmFkZHIsIHZtLnNpemUpO1xcbitcXG4rXFx0cGNwdV92bS5mbGFncyA9IFZNX0FMTE9DO1xcbitcXHRwY3B1X3ZtLmFkZHIgPSAodm9pZCAqKUFMSUdOKExPQ0FMX1BFUkNQVV9TVEFSVCwgUEFHRV9TSVpFKTtcXG4rXFx0cGNwdV92bS5zaXplID0gYWktXFx1MDAzZXVuaXRfc2l6ZTtcXG4rXFx0dm1fYXJlYV9hZGRfZWFybHkoXFx1MDAyNnBjcHVfdm0pO1xcbitcXHRrYXNhbl9wb3B1bGF0ZV9lYXJseV92bV9hcmVhX3NoYWRvdyhwY3B1X3ZtLmFkZHIsIHBjcHVfdm0uc2l6ZSk7XFxuKyNlbHNlXFxuIFxcdHZtLmZsYWdzID0gVk1fQUxMT0M7XFxuIFxcdHZtLnNpemUgPSBudW1fcG9zc2libGVfY3B1cygpICogYWktXFx1MDAzZXVuaXRfc2l6ZTtcXG4gXFx0dm1fYXJlYV9yZWdpc3Rlcl9lYXJseShcXHUwMDI2dm0sIFBBR0VfU0laRSk7XFxuIFxcbitcXHRwY3B1X3ZtLmFkZHIgPSBOVUxMO1xcbisjZW5kaWZcXG4rXFxuIFxcdGZvciAodW5pdCA9IDA7IHVuaXQgXFx1MDAzYyBudW1fcG9zc2libGVfY3B1cygpOyB1bml0KyspIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGNwdSA9IGFpLVxcdTAwM2Vncm91cHNbMF0uY3B1X21hcFt1bml0XTtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyB1bml0X2FkZHIgPVxcbiBcXHRcXHRcXHQodW5zaWduZWQgbG9uZyl2bS5hZGRyICsgdW5pdCAqIGFpLVxcdTAwM2V1bml0X3NpemU7XFxuIFxcbkBAIC0zMjY0LDYgKzMyOTEsMTQgQEAgaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdFxcbiBcXG4gXFx0XFx0LyogY29weSBzdGF0aWMgZGF0YSAqL1xcbiBcXHRcXHRtZW1jcHkoKHZvaWQgKil1bml0X2FkZHIsIF9fcGVyX2NwdV9zdGFydCwgYWktXFx1MDAzZXN0YXRpY19zaXplKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE1hcCBwZXJjcHUgZGF0YSB0byBQRVJDUFUgbWFwLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBQQ1BVX0ZDX0VNQkVEIGNhbid0IHN1cHBvcnQgaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKGNwdSwgKHVuc2lnbmVkIGxvbmcpcGNwdV92bS5hZGRyLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2cGFnZXNbdW5pdCAqIHVuaXRfcGFnZXNdLCB1bml0X3BhZ2VzKTtcXG4gXFx0fVxcbiBcXG4gXFx0Lyogd2UncmUgcmVhZHksIGNvbW1pdCAqL1xcbkBAIC0zMjcxLDcgKzMzMDYsOCBAQCBpbnQgX19pbml0IHBjcHVfcGFnZV9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgcGNwdV9mY19jcHVfdG9fbm9kZV9mbl90XFxuIFxcdFxcdHVuaXRfcGFnZXMsIHBzaXplX3N0ciwgYWktXFx1MDAzZXN0YXRpY19zaXplLFxcbiBcXHRcXHRhaS1cXHUwMDNlcmVzZXJ2ZWRfc2l6ZSwgYWktXFx1MDAzZWR5bl9zaXplKTtcXG4gXFxuLVxcdHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIHZtLmFkZHIpO1xcbitcXHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCB2bS5hZGRyLCBwY3B1X3ZtLmFkZHIpO1xcbitcXHRwY3B1X2xvY2FsX2Jhc2UgPSBwY3B1X3ZtLmFkZHI7XFxuIFxcdGdvdG8gb3V0X2ZyZWVfYXI7XFxuIFxcbiBlbm9tZW06XFxuQEAgLTMzNTMsNyArMzM4OSw3IEBAIHZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcXG4gXFx0YWktXFx1MDAzZWdyb3Vwc1swXS5ucl91bml0cyA9IDE7XFxuIFxcdGFpLVxcdTAwM2Vncm91cHNbMF0uY3B1X21hcFswXSA9IDA7XFxuIFxcbi1cXHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBmYyk7XFxuK1xcdHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIGZjLCBOVUxMKTtcXG4gXFx0cGNwdV9mcmVlX2FsbG9jX2luZm8oYWkpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9zcGFyc2Utdm1lbW1hcC5jIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xcbmluZGV4IDk5ZTJiZTM5NjcxYjYzLi40NjNjMmY4YjYxMWMwMyAxMDA2NDRcXG4tLS0gYS9tbS9zcGFyc2Utdm1lbW1hcC5jXFxuKysrIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xcbkBAIC0xOTgsNyArMTk4LDcgQEAgc3RhdGljIHBtZF90ICogX19tZW1pbml0IHZtZW1tYXBfcG1kX3BvcHVsYXRlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW5cXG4gXFx0XFx0aWYgKCFwKVxcbiBcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0XFx0a2VybmVsX3B0ZV9pbml0KHApO1xcbi1cXHRcXHRwbWRfcG9wdWxhdGVfa2VybmVsKFxcdTAwMjZpbml0X21tLCBwbWQsIHApO1xcbitcXHRcXHRwbWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwbWQsIHApO1xcbiBcXHR9XFxuIFxcdHJldHVybiBwbWQ7XFxuIH1cXG5AQCAtMjExLDcgKzIxMSw3IEBAIHN0YXRpYyBwdWRfdCAqIF9fbWVtaW5pdCB2bWVtbWFwX3B1ZF9wb3B1bGF0ZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGluXFxuIFxcdFxcdGlmICghcClcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdFxcdHBtZF9pbml0KHApO1xcbi1cXHRcXHRwdWRfcG9wdWxhdGUoXFx1MDAyNmluaXRfbW0sIHB1ZCwgcCk7XFxuK1xcdFxcdHB1ZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHB1ZCwgcCk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHB1ZDtcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uM2Q5NGNhNGJiZDE3YjEgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hbGxvYy5jXFxuKysrIGIvbW0vdm1hbGxvYy5jXFxuQEAgLTgwLDYgKzgwLDkgQEAgYm9vbCBpc192bWFsbG9jX2FkZHIoY29uc3Qgdm9pZCAqeClcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcoeCk7XFxuIFxcbitcXHRpZiAoaXNfcGVyY3B1X2FkZHIoYWRkcikpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4gXFx0cmV0dXJuIGFkZHIgXFx1MDAzZT0gVk1BTExPQ19TVEFSVCBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwM2MgVk1BTExPQ19FTkQ7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChpc192bWFsbG9jX2FkZHIpO1xcbkBAIC0yOTUsOSArMjk4LDkgQEAgc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZtYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi1cXHRcXHRcXHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGludCBtYXhfcGFnZV9zaGlmdClcXG4raW50IHZtYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuK1xcdFxcdCAgICAgICBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXFxuIHtcXG4gXFx0cGdkX3QgKnBnZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydDtcXG5AQCAtMzE0LDcgKzMxNyw3IEBAIHN0YXRpYyBpbnQgdm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdEJVR19PTihhZGRyIFxcdTAwM2U9IGVuZCk7XFxuIFxcbiBcXHRzdGFydCA9IGFkZHI7XFxuLVxcdHBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTtcXG4rXFx0cGdkID0gcGdkX29mZnNldF9wZ2QocGdkaXIsIGFkZHIpO1xcbiBcXHRkbyB7XFxuIFxcdFxcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4gXFx0XFx0ZXJyID0gdm1hcF9wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwaHlzX2FkZHIsIHByb3QsXFxuQEAgLTMzNCw4ICszMzcsOCBAQCBpbnQgdm1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBlbmQsIHBoeXNfYWRkciwgcGdwcm90X254KHByb3QpLFxcbi1cXHRcXHRcXHRcXHQgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdCk7XFxuK1xcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgYWRkciwgZW5kLCBwaHlzX2FkZHIsXFxuK1xcdFxcdFxcdFxcdCBwZ3Byb3RfbngocHJvdCksIGlvcmVtYXBfbWF4X3BhZ2Vfc2hpZnQpO1xcbiBcXHRmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7XFxuIFxcdGlmICghZXJyKVxcbiBcXHRcXHRlcnIgPSBrbXNhbl9pb3JlbWFwX3BhZ2VfcmFuZ2UoYWRkciwgZW5kLCBwaHlzX2FkZHIsIHByb3QsXFxuQEAgLTQ3OCw3ICs0ODEsNyBAQCBzdGF0aWMgdm9pZCB2dW5tYXBfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuICAqXFxuICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gb25seS4gRG8gbm90IHVzZSBvdXRzaWRlIG1tLy5cXG4gICovXFxuLXZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4rdm9pZCBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbiBcXHRwZ2RfdCAqcGdkO1xcbkBAIC00ODYsNyArNDg5LDcgQEAgdm9pZCBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbiBcXHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcXG4gXFxuIFxcdEJVR19PTihhZGRyIFxcdTAwM2U9IGVuZCk7XFxuLVxcdHBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTtcXG4rXFx0cGdkID0gcGdkX29mZnNldF9wZ2QocGdkaXIsIGFkZHIpO1xcbiBcXHRkbyB7XFxuIFxcdFxcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4gXFx0XFx0aWYgKHBnZF9iYWQoKnBnZCkpXFxuQEAgLTUwMyw3ICs1MDYsNyBAQCB2b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIHZvaWQgdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIHtcXG4gXFx0a21zYW5fdnVubWFwX3JhbmdlX25vZmx1c2goc3RhcnQsIGVuZCk7XFxuLVxcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goc3RhcnQsIGVuZCk7XFxuK1xcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHN0YXJ0LCBlbmQpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNjcwLDkgKzY3MywxMCBAQCBpbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yOyBpICs9IDFVIFxcdTAwM2NcXHUwMDNjIChwYWdlX3NoaWZ0IC0gUEFHRV9TSElGVCkpIHtcXG4gXFx0XFx0aW50IGVycjtcXG4gXFxuLVxcdFxcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICsgKDFVTCBcXHUwMDNjXFx1MDAzYyBwYWdlX3NoaWZ0KSxcXG4tXFx0XFx0XFx0XFx0XFx0cGFnZV90b19waHlzKHBhZ2VzW2ldKSwgcHJvdCxcXG4tXFx0XFx0XFx0XFx0XFx0cGFnZV9zaGlmdCk7XFxuK1xcdFxcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0IGFkZHIgKyAoMVVMIFxcdTAwM2NcXHUwMDNjIHBhZ2Vfc2hpZnQpLFxcbitcXHRcXHRcXHRcXHRcXHQgcGFnZV90b19waHlzKHBhZ2VzW2ldKSwgcHJvdCxcXG4rXFx0XFx0XFx0XFx0XFx0IHBhZ2Vfc2hpZnQpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5AQCAtNDkxOSwxNSArNDkyMywyNSBAQCBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxcbiAgKiAgIGluIC0gdGhlIFZBIHdlIHN0YXJ0IHRoZSBzZWFyY2gocmV2ZXJzZSBvcmRlcik7XFxuICAqICAgb3V0IC0gdGhlIFZBIHdpdGggdGhlIGhpZ2hlc3QgYWxpZ25lZCBlbmQgYWRkcmVzcy5cXG4gICogQGFsaWduOiBhbGlnbm1lbnQgZm9yIHJlcXVpcmVkIGhpZ2hlc3QgYWRkcmVzc1xcbisgKiBAcGNwdTogd2hldGhlciByZXF1ZXN0IGFsbG9jYXRpb24gZnJvbSBsb2NhbCBwZXJjcHUgYXJlYVxcbiAgKlxcbiAgKiBSZXR1cm5zOiBkZXRlcm1pbmVkIGVuZCBhZGRyZXNzIHdpdGhpbiB2bWFwX2FyZWFcXG4gICovXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nXFxuLXB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShzdHJ1Y3Qgdm1hcF9hcmVhICoqdmEsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXFxuK3B2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShzdHJ1Y3Qgdm1hcF9hcmVhICoqdmEsIHVuc2lnbmVkIGxvbmcgYWxpZ24sIGJvb2wgcGNwdSlcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kID0gVk1BTExPQ19FTkQgXFx1MDAyNiB+KGFsaWduIC0gMSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitcXHRpZiAocGNwdSlcXG4rXFx0XFx0dm1hbGxvY19lbmQgPSBMT0NBTF9QRVJDUFVfRU5EIFxcdTAwMjYgfihhbGlnbiAtIDEpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZtYWxsb2NfZW5kID0gUEVSQ1BVX0VORCBcXHUwMDI2IH4oYWxpZ24gLSAxKTtcXG4rI2Vsc2VcXG4rXFx0dm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCBcXHUwMDI2IH4oYWxpZ24gLSAxKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRpZiAobGlrZWx5KCp2YSkpIHtcXG4gXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JldmVyc2UoKCp2YSksXFxuIFxcdFxcdFxcdFxcdFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0LCBsaXN0KSB7XFxuQEAgLTQ5NjgsMTQgKzQ5ODIsMjIgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc2l6ZV90ICpzaXplcywgaW50IG5yX3ZtcyxcXG4gXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgYWxpZ24pXFxuIHtcXG4tXFx0Y29uc3QgdW5zaWduZWQgbG9uZyB2bWFsbG9jX3N0YXJ0ID0gQUxJR04oVk1BTExPQ19TVEFSVCwgYWxpZ24pO1xcbi1cXHRjb25zdCB1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kID0gVk1BTExPQ19FTkQgXFx1MDAyNiB+KGFsaWduIC0gMSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdm1hbGxvY19zdGFydDtcXG4rXFx0dW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZDtcXG4gXFx0c3RydWN0IHZtYXBfYXJlYSAqKnZhcywgKnZhO1xcbiBcXHRzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zO1xcbiBcXHRpbnQgYXJlYSwgYXJlYTIsIGxhc3RfYXJlYSwgdGVybV9hcmVhO1xcbiBcXHR1bnNpZ25lZCBsb25nIGJhc2UsIHN0YXJ0LCBzaXplLCBlbmQsIGxhc3RfZW5kLCBvcmlnX3N0YXJ0LCBvcmlnX2VuZDtcXG4gXFx0Ym9vbCBwdXJnZWQgPSBmYWxzZTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbitcXHR2bWFsbG9jX3N0YXJ0ID0gQUxJR04oUEVSQ1BVX1NUQVJULCBhbGlnbik7XFxuK1xcdHZtYWxsb2NfZW5kID0gUEVSQ1BVX0VORCBcXHUwMDI2IH4oYWxpZ24gLSAxKTtcXG4rI2Vsc2VcXG4rXFx0dm1hbGxvY19zdGFydCA9IEFMSUdOKFZNQUxMT0NfU1RBUlQsIGFsaWduKTtcXG4rXFx0dm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCBcXHUwMDI2IH4oYWxpZ24gLSAxKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHQvKiB2ZXJpZnkgcGFyYW1ldGVycyBhbmQgYWxsb2NhdGUgZGF0YSBzdHJ1Y3R1cmVzICovXFxuIFxcdEJVR19PTihvZmZzZXRfaW5fcGFnZShhbGlnbikgfHwgIWlzX3Bvd2VyX29mXzIoYWxpZ24pKTtcXG4gXFx0Zm9yIChsYXN0X2FyZWEgPSAwLCBhcmVhID0gMDsgYXJlYSBcXHUwMDNjIG5yX3ZtczsgYXJlYSsrKSB7XFxuQEAgLTUwMjQsNyArNTA0Niw3IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKipwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLFxcbiBcXHRlbmQgPSBzdGFydCArIHNpemVzW2FyZWFdO1xcbiBcXG4gXFx0dmEgPSBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIodm1hbGxvY19lbmQpO1xcbi1cXHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFxcdTAwMjZ2YSwgYWxpZ24pIC0gZW5kO1xcbitcXHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFxcdTAwMjZ2YSwgYWxpZ24sIGZhbHNlKSAtIGVuZDtcXG4gXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTUwNDUsNyArNTA2Nyw3IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKipwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLFxcbiBcXHRcXHQgKiBiYXNlIGRvd253YXJkcyBhbmQgdGhlbiByZWNoZWNrLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGJhc2UgKyBlbmQgXFx1MDAzZSB2YS1cXHUwMDNldmFfZW5kKSB7XFxuLVxcdFxcdFxcdGJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoXFx1MDAyNnZhLCBhbGlnbikgLSBlbmQ7XFxuK1xcdFxcdFxcdGJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoXFx1MDAyNnZhLCBhbGlnbiwgZmFsc2UpIC0gZW5kO1xcbiBcXHRcXHRcXHR0ZXJtX2FyZWEgPSBhcmVhO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbkBAIC01MDU1LDcgKzUwNzcsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChiYXNlICsgc3RhcnQgXFx1MDAzYyB2YS1cXHUwMDNldmFfc3RhcnQpIHtcXG4gXFx0XFx0XFx0dmEgPSBub2RlX3RvX3ZhKHJiX3ByZXYoXFx1MDAyNnZhLVxcdTAwM2VyYl9ub2RlKSk7XFxuLVxcdFxcdFxcdGJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoXFx1MDAyNnZhLCBhbGlnbikgLSBlbmQ7XFxuK1xcdFxcdFxcdGJhc2UgPSBwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2UoXFx1MDAyNnZhLCBhbGlnbiwgZmFsc2UpIC0gZW5kO1xcbiBcXHRcXHRcXHR0ZXJtX2FyZWEgPSBhcmVhO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbkBAIC01MjE4LDYgKzUyNDAsODQgQEAgdm9pZCBwY3B1X2ZyZWVfdm1fYXJlYXMoc3RydWN0IHZtX3N0cnVjdCAqKnZtcywgaW50IG5yX3ZtcylcXG4gXFx0XFx0ZnJlZV92bV9hcmVhKHZtc1tpXSk7XFxuIFxcdGtmcmVlKHZtcyk7XFxuIH1cXG4rXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbisvKiBGaW5kIGZyZWUgdm0gYXJlYSBzdGFydHMgZnJvbSBoaW50ICovXFxuK3N0cnVjdCB2bV9zdHJ1Y3QgKnBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBoaW50LFxcbitcXHRcXHRcXHRcXHQgICAgIGludCB1bml0X3NpemUsIHNpemVfdCBhbGlnbilcXG4re1xcbitcXHRzdHJ1Y3Qgdm1hcF9hcmVhICp0bXBfdmEsICp2YTtcXG4rXFx0c3RydWN0IHZtX3N0cnVjdCAqdm07XFxuK1xcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xcbitcXHR1bnNpZ25lZCBsb25nIGVuZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHZhID0ga21lbV9jYWNoZV96YWxsb2Modm1hcF9hcmVhX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuK1xcdHZtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZtX3N0cnVjdCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXZhIHx8ICF2bSlcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XFxuK1xcbitcXHR0bXBfdmEgPSBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIoaGludCk7XFxuK1xcdGlmICghdG1wX3ZhKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0ZW5kID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFxcdTAwMjZ0bXBfdmEsIGFsaWduLCB0cnVlKTtcXG4rXFxuK1xcdGlmIChoaW50ICsgdW5pdF9zaXplIFxcdTAwM2UgZW5kKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gdmFfY2xpcChcXHUwMDI2ZnJlZV92bWFwX2FyZWFfcm9vdCxcXG4rXFx0XFx0XFx0XFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xpc3QsIHRtcF92YSwgaGludCwgdW5pdF9zaXplKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuK1xcdH1cXG4rXFxuK1xcdHZhLVxcdTAwM2V2YV9zdGFydCA9IGhpbnQ7XFxuK1xcdHZhLVxcdTAwM2V2YV9lbmQgPSBoaW50ICsgdW5pdF9zaXplO1xcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xvY2spO1xcbitcXG4rXFx0aWYgKGthc2FuX3BvcHVsYXRlX3ZtYWxsb2ModmEtXFx1MDAzZXZhX3N0YXJ0LCB1bml0X3NpemUsIEdGUF9LRVJORUwpKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX3NoYWRvdztcXG4rXFxuK1xcdHZuID0gYWRkcl90b19ub2RlKHZhLVxcdTAwM2V2YV9zdGFydCk7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnZuLVxcdTAwM2VidXN5LmxvY2spO1xcbitcXHRpbnNlcnRfdm1hcF9hcmVhKHZhLCBcXHUwMDI2dm4tXFx1MDAzZWJ1c3kucm9vdCwgXFx1MDAyNnZuLVxcdTAwM2VidXN5LmhlYWQpO1xcbitcXHRzZXR1cF92bWFsbG9jX3ZtKHZtLCB2YSwgVk1fQUxMT0MsXFxuK1xcdFxcdFxcdCBwY3B1X2dldF9sb2NhbF92bV9hcmVhKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnZuLVxcdTAwM2VidXN5LmxvY2spO1xcbitcXG4rXFx0a2FzYW5fdW5wb2lzb25fdm1hcF9hcmVhcyhcXHUwMDI2dm0sIDEsIEtBU0FOX1ZNQUxMT0NfUFJPVF9OT1JNQUwpO1xcbitcXG4rXFx0cmV0dXJuIHZtO1xcbitcXG4rZXJyX2ZyZWU6XFxuK1xcdGttZW1fY2FjaGVfZnJlZSh2bWFwX2FyZWFfY2FjaGVwLCB2YSk7XFxuK1xcdGtmcmVlKHZtKTtcXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbitcXG4rZXJyX2ZyZWVfc2hhZG93OlxcbitcXHRzcGluX2xvY2soXFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xvY2spO1xcbitcXHR2YSA9IG1lcmdlX29yX2FkZF92bWFwX2FyZWFfYXVnbWVudCh2YSwgXFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsXFxuK1xcdFxcdFxcdFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcXG4rXFx0aWYgKHZhKVxcbitcXHRcXHRrYXNhbl9yZWxlYXNlX3ZtYWxsb2ModmEtXFx1MDAzZXZhX3N0YXJ0LCB2YS1cXHUwMDNldmFfZW5kLCB2YS1cXHUwMDNldmFfc3RhcnQsIHZhLVxcdTAwM2V2YV9lbmQsXFxuK1xcdFxcdFxcdCAgICAgICBLQVNBTl9WTUFMTE9DX1BBR0VfUkFOR0UgfCBLQVNBTl9WTUFMTE9DX1RMQl9GTFVTSCk7XFxuK1xcdGtmcmVlKHZtKTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xvY2spO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK31cXG4rI2VuZGlmXFxuICNlbmRpZlxcdC8qIENPTkZJR19TTVAgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfUFJJTlRLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIyOjQwOjI1Ljc5OTY1OTQyMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEzMzcxODY4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFwiLFxuICAgIFwiQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcIixcbiAgICBcIkFSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXCIsXG4gICAgXCJORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWFcIixcbiAgICBcIm1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtcIixcbiAgICBcInNldHVwX3BlcmNwdV9wZ2RcIixcbiAgICBcImFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBsb2NhbCBwZXItY3B1IG1hcHBpbmcgc3VwcG9ydCBmb3IgQVJNNjQsIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgcGVyY3B1IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYmFjY2IzNTExZmNhZGQwZmExMmI1MmM3NzkzZjhjZjAxODAwMDZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMTUgMjI6NDA6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcbmluZGV4IGIzYWZlMDY4ODkxOWJkLi45NWZmZDE1MTE4N2YyNCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXG5AQCAtNDEsOSArNDEsMTEgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTXG4gXHRzZWxlY3QgQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0VcbiBcdHNlbGVjdCBBUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORyBpZiBBUk02NF9IQUZUXG4rXHRzZWxlY3QgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcbiBcdHNlbGVjdCBBUkNIX0hBU19QUkVFTVBUX0xBWllcbiBcdHNlbGVjdCBBUkNIX0hBU19QVERVTVBcbiBcdHNlbGVjdCBBUkNIX0hBU19QVEVfU1BFQ0lBTFxuK1x0c2VsZWN0IEFSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXG4gXHRzZWxlY3QgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4gXHRzZWxlY3QgQVJDSF9IQVNfU0VUVVBfRE1BX09QU1xuIFx0c2VsZWN0IEFSQ0hfSEFTX1NFVF9ESVJFQ1RfTUFQXG5AQCAtMjI0LDYgKzIyNiw3IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBIQVZFX1JTRVFcbiBcdHNlbGVjdCBIQVZFX1JVU1QgaWYgUlVTVENfU1VQUE9SVFNfQVJNNjRcbitcdHNlbGVjdCBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxuIFx0c2VsZWN0IEhBVkVfU1RBQ0tQUk9URUNUT1JcbiBcdHNlbGVjdCBIQVZFX1NUQVRJQ19DQUxMIGlmIENGSVxuIFx0c2VsZWN0IEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UU1xuQEAgLTIzOSw2ICsyNDIsNyBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuIFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBXG4gXHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXG4rXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbiBcdHNlbGVjdCBORUVEX1NHX0RNQV9MRU5HVEhcbiBcdHNlbGVjdCBPRlxuIFx0c2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFXG5AQCAtNDExLDYgKzQxNSwxMSBAQCBjb25maWcgS0FTQU5fU0hBRE9XX09GRlNFVFxuIGNvbmZpZyBVTldJTkRfVEFCTEVTXG4gXHRib29sXG4gXG4rY29uZmlnIEhBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitcdGRlZl9ib29sIHlcbitcdGRlcGVuZHMgb24gKEFSTTY0X1ZBX0JJVFNfNDggXHUwMDI2XHUwMDI2IChBUk02NF80S19QQUdFUyB8fCBBUk02NF82NEtfUEFHRVMpKSB8fCBcXFxuK1x0XHQgICAoQVJNNjRfVkFfQklUU180NyBcdTAwMjZcdTAwMjYgQVJNNjRfMTZLX1BBR0VTKVxuK1xuIHNvdXJjZSBcImFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXNcIlxuIFxuIG1lbnUgXCJLZXJuZWwgRmVhdHVyZXNcIlxuQEAgLTE1ODEsOSArMTU5MCw2IEBAIGNvbmZpZyBOVU1BXG4gXHRib29sIFwiTlVNQSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnRcIlxuIFx0c2VsZWN0IEdFTkVSSUNfQVJDSF9OVU1BXG4gXHRzZWxlY3QgT0ZfTlVNQVxuLVx0c2VsZWN0IEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4tXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LXG4tXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbiBcdHNlbGVjdCBVU0VfUEVSQ1BVX05VTUFfTk9ERV9JRFxuIFx0aGVscFxuIFx0ICBFbmFibGUgTlVNQSAoTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2Vzcykgc3VwcG9ydC5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaFxuaW5kZXggNWUxMjExYzU0MGFiMjMuLmFhMDgxOGY3ZWM1OGM1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaFxuQEAgLTYzLDYgKzYzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGFybTY0X2tlcm5lbF91bm1hcHBlZF9hdF9lbDAodm9pZClcbiBleHRlcm4gdm9pZCBhcm02NF9tZW1ibG9ja19pbml0KHZvaWQpO1xuIGV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpO1xuIGV4dGVybiB2b2lkIGJvb3RtZW1faW5pdCh2b2lkKTtcbitleHRlcm4gdm9pZCBzZXR1cF9wZXJjcHVfcGdkKHZvaWQpO1xuIGV4dGVybiB2b2lkIGNyZWF0ZV9tYXBwaW5nX25vYWxsb2MocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyB2aXJ0LFxuIFx0XHRcdFx0ICAgcGh5c19hZGRyX3Qgc2l6ZSwgcGdwcm90X3QgcHJvdCk7XG4gZXh0ZXJuIHZvaWQgY3JlYXRlX3BnZF9tYXBwaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwaHlzX2FkZHJfdCBwaHlzLFxuQEAgLTcyLDYgKzczLDEwIEBAIGV4dGVybiB2b2lkICpmaXhtYXBfcmVtYXBfZmR0KHBoeXNfYWRkcl90IGR0X3BoeXMsIGludCAqc2l6ZSwgcGdwcm90X3QgcHJvdCk7XG4gZXh0ZXJuIHZvaWQgbWFya19saW5lYXJfdGV4dF9hbGlhc19ybyh2b2lkKTtcbiBleHRlcm4gaW50IHNwbGl0X2tlcm5lbF9sZWFmX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuIGV4dGVybiB2b2lkIGxpbmVhcl9tYXBfbWF5YmVfc3BsaXRfdG9fcHRlcyh2b2lkKTtcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitleHRlcm4gdm9pZCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcbitcdFx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucik7XG4rI2VuZGlmXG4gXG4gLypcbiAgKiBUaGlzIGNoZWNrIGlzIHRyaWdnZXJlZCBkdXJpbmcgdGhlIGVhcmx5IGJvb3QgYmVmb3JlIHRoZSBjcHVmZWF0dXJlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXG5pbmRleCA4MDNiNjg3NTgxNTI3NS4uMGU5OTFiOThlZDllYWYgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaFxuQEAgLTI3LDYgKzI3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdGxiZmx1c2guaFx1MDAzZVxuIFxuIGV4dGVybiBib29sIHJvZGF0YV9mdWxsO1xuK2V4dGVybiBwZ2RfdCAqcGVyY3B1X3BnZFtOUl9DUFVTXTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgY29udGV4dGlkcl90aHJlYWRfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dClcbiB7XG5AQCAtMTM4LDcgKzEzOSwxMyBAQCB2b2lkIF9fY3B1X3JlcGxhY2VfdHRicjEocGdkX3QgKnBnZHAsIGJvb2wgY25wKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X2VuYWJsZV9zd2FwcGVyX2NucCh2b2lkKVxuIHtcbi1cdF9fY3B1X3JlcGxhY2VfdHRicjEobG1fYWxpYXMoc3dhcHBlcl9wZ19kaXIpLCB0cnVlKTtcbitcdHVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7XG4rXHRwZ2RfdCAqdHRicjEgPSBwZXJjcHVfcGdkW2NwdV07XG4rXG4rXHRpZiAoY3B1ID09IDApXG4rXHRcdHR0YnIxID0gbG1fYWxpYXMoc3dhcHBlcl9wZ19kaXIpO1xuK1xuK1x0X19jcHVfcmVwbGFjZV90dGJyMSh0dGJyMSwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlcGxhY2VfdHRicjEocGdkX3QgKnBnZHApXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZXJjcHUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcbmluZGV4IGI1N2IyYmIwMDk2Nzc0Li4wM2QxNDlmOTE3N2MwZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGVyY3B1LmhcbkBAIC0xNDIsNiArMTQyLDI3IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKVxuICN1bmRlZiBQRVJDUFVfT1BcbiAjdW5kZWYgUEVSQ1BVX1JFVF9PUFxuIFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9sb2NhbF9vZmY7XG4rXG4rI2RlZmluZSBsb2NhbF9jcHVfcHRyKHB0cilcdFx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdF9fdmVyaWZ5X3BjcHVfcHRyKHB0cik7XHRcdFx0XHRcdFx0XFxcbitcdFNISUZUX1BFUkNQVV9QVFIocHRyLCBfX3Blcl9jcHVfbG9jYWxfb2ZmKTtcdFx0XHRcXFxuK30pXG4rXG4rI2RlZmluZSBfcGNwX3Byb3RlY3Qob3AsIHBjcCwgLi4uKVx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdG9wKGxvY2FsX2NwdV9wdHIoXHUwMDI2KHBjcCkpLCBfX1ZBX0FSR1NfXyk7XHRcdFx0XHRcXFxuK30pXG4rXG4rI2RlZmluZSBfcGNwX3Byb3RlY3RfcmV0dXJuKG9wLCBwY3AsIGFyZ3MuLi4pXHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHR5cGVvZihwY3ApIF9fcmV0dmFsO1x0XHRcdFx0XHRcdFxcXG4rXHRfX3JldHZhbCA9ICh0eXBlb2YocGNwKSlvcChsb2NhbF9jcHVfcHRyKFx1MDAyNihwY3ApKSwgIyNhcmdzKTtcdFxcXG4rXHRfX3JldHZhbDtcdFx0XHRcdFx0XHRcdFxcXG4rfSlcbisjZWxzZVxuIC8qXG4gICogSXQgd291bGQgYmUgbmljZSB0byBhdm9pZCB0aGUgY29uZGl0aW9uYWwgY2FsbCBpbnRvIHRoZSBzY2hlZHVsZXIgd2hlblxuICAqIHJlLWVuYWJsaW5nIHByZWVtcHRpb24gZm9yIHByZWVtcHRpYmxlIGtlcm5lbHMsIGJ1dCBkb2luZyB0aGF0IGluIGEgd2F5XG5AQCAtMTUyLDcgKzE3Myw2IEBAIFBFUkNQVV9SRVRfT1AoYWRkLCBhZGQsIGxkYWRkKVxuICAqIHByZWVtcHRpb24gcG9pbnQgd2hlbiBUSUZfTkVFRF9SRVNDSEVEIGdldHMgc2V0IHdoaWxlIHByZWVtcHRpb24gaXNcbiAgKiBkaXNhYmxlZC5cbiAgKi9cbi1cbiAjZGVmaW5lIF9wY3BfcHJvdGVjdChvcCwgcGNwLCAuLi4pXHRcdFx0XHRcdFxcXG4gKHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0cHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTtcdFx0XHRcdFx0XFxcbkBAIC0xNjgsNiArMTg4LDcgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXG4gXHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XHRcdFx0XHRcdFxcXG4gXHRfX3JldHZhbDtcdFx0XHRcdFx0XHRcdFxcXG4gfSlcbisjZW5kaWZcbiBcbiAjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApXHRcdFxcXG4gXHRfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfOCwgcGNwKVxuQEAgLTI0Myw2ICsyNjQsMTkgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXG4gXG4gI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnNjQocGNwLCBvLCBuKVx0dGhpc19jcHVfY21weGNoZ184KHBjcCwgbywgbilcbiBcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGcxMjgocGNwLCBvLCBuKVx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHR5cGVkZWYgdHlwZW9mKHBjcCkgcGNwX29wX1RfXztcdFx0XHRcdFx0XFxcbitcdHUxMjggb2xkX18sIG5ld19fLCByZXRfXztcdFx0XHRcdFx0XFxcbitcdHBjcF9vcF9UX18gKnB0cl9fO1x0XHRcdFx0XHRcdFxcXG4rXHRvbGRfXyA9IG87XHRcdFx0XHRcdFx0XHRcXFxuK1x0bmV3X18gPSBuO1x0XHRcdFx0XHRcdFx0XFxcbitcdHB0cl9fID0gbG9jYWxfY3B1X3B0cihcdTAwMjYocGNwKSk7XHRcdFx0XHRcdFxcXG4rXHRyZXRfXyA9IGNtcHhjaGcxMjhfbG9jYWwoKHZvaWQgKilwdHJfXywgb2xkX18sIG5ld19fKTtcdFx0XFxcbitcdHJldF9fO1x0XHRcdFx0XHRcdFx0XHRcXFxuK30pXG4rI2Vsc2VcbiAjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGcxMjgocGNwLCBvLCBuKVx0XHRcdFx0XHRcXFxuICh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdHR5cGVkZWYgdHlwZW9mKHBjcCkgcGNwX29wX1RfXztcdFx0XHRcdFx0XFxcbkBAIC0yNTYsNiArMjkwLDcgQEAgUEVSQ1BVX1JFVF9PUChhZGQsIGFkZCwgbGRhZGQpXG4gXHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XHRcdFx0XHRcdFxcXG4gXHRyZXRfXztcdFx0XHRcdFx0XHRcdFx0XFxcbiB9KVxuKyNlbmRpZlxuIFxuICNpZmRlZiBfX0tWTV9OVkhFX0hZUEVSVklTT1JfX1xuIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faHlwX3Blcl9jcHVfb2Zmc2V0KHVuc2lnbmVkIGludCBjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbmluZGV4IDFiNDUwOWQzMzgyYzYzLi5kZDFhYzg0YTExNjA1ZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuQEAgLTMzLDExICszMywyNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApXG4gXHRwdWR2YWwgfD0gKG1tID09IFx1MDAyNmluaXRfbW0pID8gUFVEX1RBQkxFX1VYTiA6IFBVRF9UQUJMRV9QWE47XG4gXHRfX3B1ZF9wb3B1bGF0ZShwdWRwLCBfX3BhKHBtZHApLCBwdWR2YWwpO1xuIH1cbitcbisjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXG4rc3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxuK3tcbitcdHB1ZF9wb3B1bGF0ZShcdTAwMjZpbml0X21tLCBwdWRwLCBwbWRwKTtcbitcdGlmIChBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLIFx1MDAyNiBQR1RCTF9QVURfTU9ESUZJRUQpXG4rXHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XG4rfVxuKyNlbmRpZlxuICNlbHNlXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcHVkX3BvcHVsYXRlKHB1ZF90ICpwdWRwLCBwaHlzX2FkZHJfdCBwbWRwLCBwdWR2YWxfdCBwcm90KVxuIHtcbiBcdEJVSUxEX0JVRygpO1xuIH1cbitcbisjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXG4rc3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxuK3tcbitcdEJVSUxEX0JVRygpO1xuK31cbisjZW5kaWZcbiAjZW5kaWZcdC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyBcdTAwM2UgMiAqL1xuIFxuICNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDNcbkBAIC0xMjEsNCArMTM3LDEyIEBAIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHAsIHBndGFibGVfdCBwdGVwKVxuIFx0XHQgICAgICAgUE1EX1RZUEVfVEFCTEUgfCBQTURfVEFCTEVfQUYgfCBQTURfVEFCTEVfUFhOKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19BUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQ1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGVfc3luYyh1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwLCBwdGVfdCAqcHRlcClcbit7XG4rXHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZHAsIHB0ZXApO1xuK1x0aWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgXHUwMDI2IFBHVEJMX1BNRF9NT0RJRklFRClcbitcdFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTtcbit9XG4rI2VuZGlmXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMjc2ODljNjJiZDI1ZGQuLjgzY2Q2NTYxMGQ3ZjdkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTgsMTQgKzE4LDM1IEBAXG4gICogVk1BTExPQyByYW5nZS5cbiAgKlxuICAqIFZNQUxMT0NfU1RBUlQ6IGJlZ2lubmluZyBvZiB0aGUga2VybmVsIHZtYWxsb2Mgc3BhY2Vcbi0gKiBWTUFMTE9DX0VORDogZXh0ZW5kcyB0byB0aGUgYXZhaWxhYmxlIHNwYWNlIGJlbG93IHZtZW1tYXBcbisgKiBWTUFMTE9DX0VORDogZXh0ZW5kcyB0byB0aGUgc3BhY2UgYmVsb3cgZ2xvYmFsIHBlcmNwdSBhcmVhXG4gICovXG4gI2RlZmluZSBWTUFMTE9DX1NUQVJUXHRcdChNT0RVTEVTX0VORClcbisjZGVmaW5lIFZNQUxMT0NfRU5EXHRcdChQRVJDUFVfU1RBUlQgLSBTWl84TSlcbitcbisvKlxuKyAqIFBFUkNQVSByYW5nZVxuKyAqXG4rICogUEVSQ1BVX1NUQVJUOiBiZWdpbm5pbmcgb2YgZ2xvYmFsIHBlcmNwdSBhcmVhXG4rICogUEVSQ1BVX0VORDogZW5kIG9mIGdsb2JhbCBwZXJjcHUgYXJlYVxuKyAqIExPQ0FMX1BFUkNQVV9TVEFSVDogYmVnaW5uaW5nIG9mIGxvY2FsIHBlcmNwdSBhcmVhXG4rICogTE9DQUxfUEVSQ1BVX0VORDogZW5kIG9mIGxvY2FsIHBlcmNwdSBhcmVhLCBleHRlbmQgdG8gdGhlIGF2YWlsYWJsZVxuKyAqICAgICAgICAgICAgICAgICAgIHNwYWNlIGJlbG93IHZtZW1tYXBcbisgKi9cbisjaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfNEtfUEFHRVMpXG4rI2RlZmluZSBQRVJDUFVfU0laRVx0XHQoMiAqIFBHRElSX1NJWkUpXG4rI2VsaWYgZGVmaW5lZChDT05GSUdfQVJNNjRfMTZLX1BBR0VTKVxuKyNkZWZpbmUgUEVSQ1BVX1NJWkUgICAgICAgICAgICAoMTYgKiBQVURfU0laRSlcbisjZWxpZiBkZWZpbmVkKENPTkZJR19BUk02NF82NEtfUEFHRVMpXG4rI2RlZmluZSBQRVJDUFVfU0laRSAgICAgICAgICAgIChQR0RJUl9TSVpFKVxuKyNlbmRpZlxuKyNkZWZpbmUgUEVSQ1BVX1NUQVJUXHRcdChQRVJDUFVfRU5EIC0gUEVSQ1BVX1NJWkUpXG4rI2RlZmluZSBQRVJDUFVfRU5EXHRcdChMT0NBTF9QRVJDUFVfU1RBUlQpXG4rI2RlZmluZSBMT0NBTF9QRVJDUFVfU1RBUlRcdChMT0NBTF9QRVJDUFVfRU5EIC0gUEVSQ1BVX1NJWkUpXG4gI2lmIFZBX0JJVFMgPT0gVkFfQklUU19NSU5cbi0jZGVmaW5lIFZNQUxMT0NfRU5EXHRcdChWTUVNTUFQX1NUQVJUIC0gU1pfOE0pXG4rI2RlZmluZSBMT0NBTF9QRVJDUFVfRU5EXHQoQUxJR05fRE9XTihWTUVNTUFQX1NUQVJULCBQRVJDUFVfU0laRSkpXG4gI2Vsc2VcbiAjZGVmaW5lIFZNRU1NQVBfVU5VU0VEX05QQUdFU1x0KChfUEFHRV9PRkZTRVQodmFiaXRzX2FjdHVhbCkgLSBQQUdFX09GRlNFVCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpXG4tI2RlZmluZSBWTUFMTE9DX0VORFx0XHQoVk1FTU1BUF9TVEFSVCArIFZNRU1NQVBfVU5VU0VEX05QQUdFUyAqIHNpemVvZihzdHJ1Y3QgcGFnZSkgLSBTWl84TSlcbisjZGVmaW5lIExPQ0FMX1BFUkNQVV9FTkRcdChBTElHTl9ET1dOKChWTUVNTUFQX1NUQVJUICsgVk1FTU1BUF9VTlVTRURfTlBBR0VTICogc2l6ZW9mKHN0cnVjdCBwYWdlKSksIFBFUkNQVV9TSVpFKSlcbiAjZW5kaWZcbiBcbiAjZGVmaW5lIHZtZW1tYXBcdFx0XHQoKHN0cnVjdCBwYWdlICopVk1FTU1BUF9TVEFSVCAtIChtZW1zdGFydF9hZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKSlcbkBAIC0xMjE2LDYgKzEyMzcsMTYgQEAgcDRkX3QgKnA0ZF9vZmZzZXRfbG9ja2xlc3NfZm9sZGVkKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcbiAjZW5kaWYgIC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyBcdTAwM2UgNCAqL1xuIFxuKyNpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMlxuKyNkZWZpbmUgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyAgICAgIFBHVEJMX1BNRF9NT0RJRklFRFxuKyNlbGlmIENPTkZJR19QR1RBQkxFX0xFVkVMUyA9PSAzXG4rI2RlZmluZSBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLICAgICAgUEdUQkxfUFVEX01PRElGSUVEXG4rI2VsaWYgQ09ORklHX1BHVEFCTEVfTEVWRUxTID09IDRcbisjZGVmaW5lIEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgICAgICBQR1RCTF9QNERfTU9ESUZJRURcbisjZWxpZiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNVxuKyNkZWZpbmUgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyAgICAgIFBHVEJMX1BHRF9NT0RJRklFRFxuKyNlbmRpZlxuK1xuICNkZWZpbmUgcGdkX0VSUk9SKGUpXHRcXFxuIFx0cHJfZXJyKFwiJXM6JWQ6IGJhZCBwZ2QgJTAxNmxseC5cXG5cIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jXG5pbmRleCAyM2MwNWRjN2E4ZjJhYy4uNmQ0MjBhZDU5YWY0OTIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jXG5AQCAtMzYwLDYgKzM2MCw5IEBAIHZvaWQgX19pbml0IF9fbm9fc2FuaXRpemVfYWRkcmVzcyBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4gXHRzbXBfaW5pdF9jcHVzKCk7XG4gXHRzbXBfYnVpbGRfbXBpZHJfaGFzaCgpO1xuIFxuK1x0LyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgc21wX2luaXRfY3B1cyAqL1xuK1x0c2V0dXBfcGVyY3B1X3BnZCgpO1xuK1xuICNpZmRlZiBDT05GSUdfQVJNNjRfU1dfVFRCUjBfUEFOXG4gXHQvKlxuIFx0ICogTWFrZSBzdXJlIGluaXRfdGhyZWFkX2luZm8udHRicjAgYWx3YXlzIGdlbmVyYXRlcyB0cmFuc2xhdGlvblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wLmNcbmluZGV4IGQ0NjAyMmY3MjA3NTQwLi40YTgxMTM3OWMxOTE2MiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zbXAuY1xuQEAgLTU1LDYgKzU1LDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvaXBpLmhcdTAwM2VcbiBcbitleHRlcm4gdm9pZCBpZG1hcF9jcHVfcmVwbGFjZV90dGJyMShwaHlzX2FkZHJfdCBwZ2Rpcik7XG4rXG4gLypcbiAgKiBhcyBmcm9tIDIuNSwga2VybmVscyBubyBsb25nZXIgaGF2ZSBhbiBpbml0X3Rhc2tzIHN0cnVjdHVyZVxuICAqIHNvIHdlIG5lZWQgc29tZSBvdGhlciB3YXkgb2YgdGVsbGluZyBhIG5ldyBzZWNvbmRhcnkgY29yZVxuQEAgLTE5OCw2ICsyMDAsMTIgQEAgYXNtbGlua2FnZSBub3RyYWNlIHZvaWQgc2Vjb25kYXJ5X3N0YXJ0X2tlcm5lbCh2b2lkKVxuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBcdTAwMjZpbml0X21tO1xuIFx0Y29uc3Qgc3RydWN0IGNwdV9vcGVyYXRpb25zICpvcHM7XG4gXHR1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpO1xuK1x0dHlwZWRlZiB2b2lkICh0dGJyX3JlcGxhY2VfZnVuYykocGh5c19hZGRyX3QpO1xuK1x0dHRicl9yZXBsYWNlX2Z1bmMgKnJlcGxhY2VfdHRicjtcbitcbitcdHBoeXNfYWRkcl90IHR0YnIxID0gcGh5c190b190dGJyKHZpcnRfdG9fcGh5cyhwZXJjcHVfcGdkW2NwdV0pKTtcbitcdHJlcGxhY2VfdHRiciA9ICh2b2lkICopX19wYV9zeW1ib2woaWRtYXBfY3B1X3JlcGxhY2VfdHRicjEpO1xuK1x0cmVwbGFjZV90dGJyKHR0YnIxKTtcbiBcbiBcdC8qXG4gXHQgKiBBbGwga2VybmVsIHRocmVhZHMgc2hhcmUgdGhlIHNhbWUgbW0gY29udGV4dDsgZ3JhYiBhXG5AQCAtODE5LDYgKzgyNyw0MiBAQCB2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cylcbiBcdH1cbiB9XG4gXG4rI2lmZGVmIENPTkZJR19OVU1BXG4rZXh0ZXJuIGludCBjcHVfdG9fbm9kZV9tYXBbTlJfQ1BVU107XG4rXG4raW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpXG4re1xuK1x0cmV0dXJuIGNwdV90b19ub2RlX21hcFtjcHVdO1xuK31cbisjZW5kaWZcbitcbisjaWZkZWYgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4rdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfb2Zmc2V0W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7XG4rRVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfb2Zmc2V0KTtcbisvKiBVc2VkIHRvIGNhbGN1bGF0ZSBwY3B1IGxvY2FsIGFkZHJlc3MsIHRoZSBvZmZzZXQgaXMgc2FtZSBmb3IgYWxsIENQVXMgKi9cbit1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9sb2NhbF9vZmYgX19yb19hZnRlcl9pbml0O1xuK0VYUE9SVF9TWU1CT0woX19wZXJfY3B1X2xvY2FsX29mZik7XG4rXG4rdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZGVsdGE7XG4rXHR1bnNpZ25lZCBpbnQgY3B1O1xuK1x0aW50IHJjID0gLUVJTlZBTDtcbitcbisjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXG4rXHQvKiBQQ1BVIHBhZ2UgdGFibGUganVzdCBjYW4gc3VwcG9ydCBQQ1BVX0ZDX1BBR0UgKi9cbitcdHJjID0gcGNwdV9wYWdlX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwgZWFybHlfY3B1X3RvX25vZGUpO1xuKyNlbmRpZlxuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRwYW5pYyhcIkZhaWxlZCB0byBpbml0aWFsaXplIHBlcmNwdSBhcmVhcyAoZXJyPSVkKS5cIiwgcmMpO1xuK1xuK1x0ZGVsdGEgPSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkciAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDtcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXG4rXHRcdF9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IGRlbHRhICsgcGNwdV91bml0X29mZnNldHNbY3B1XTtcbitcdF9fcGVyX2NwdV9sb2NhbF9vZmYgPSAodW5zaWduZWQgbG9uZylwY3B1X2xvY2FsX2Jhc2UgLSAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQ7XG4rfVxuKyNlbmRpZlxuK1xuIHN0YXRpYyBjb25zdCBjaGFyICppcGlfdHlwZXNbTUFYX0lQSV0gX190cmFjZXBvaW50X3N0cmluZyA9IHtcbiBcdFtJUElfUkVTQ0hFRFVMRV1cdD0gXCJSZXNjaGVkdWxpbmcgaW50ZXJydXB0c1wiLFxuIFx0W0lQSV9DQUxMX0ZVTkNdXHRcdD0gXCJGdW5jdGlvbiBjYWxsIGludGVycnVwdHNcIixcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYyBiL2FyY2gvYXJtNjQvbW0va2FzYW5faW5pdC5jXG5pbmRleCAzZmNhZDk1NmZkZjdjYi4uYThlMjcyYmZlZmUxYTEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL2thc2FuX2luaXQuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmNcbkBAIC02MCwxMyArNjAsMTQgQEAgc3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBrYXNhbl9hbGxvY19yYXdfcGFnZShpbnQgbm9kZSlcbiB9XG4gXG4gc3RhdGljIHB0ZV90ICpfX2luaXQga2FzYW5fcHRlX29mZnNldChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcbi1cdFx0XHRcdCAgICAgIGJvb2wgZWFybHkpXG4rXHRcdFx0XHQgICAgICBib29sIGVhcmx5LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpZiAocG1kX25vbmUoUkVBRF9PTkNFKCpwbWRwKSkpIHtcbiBcdFx0cGh5c19hZGRyX3QgcHRlX3BoeXMgPSBlYXJseSA/XG4gXHRcdFx0XHRfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcHRlKVxuIFx0XHRcdFx0XHQ6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpO1xuIFx0XHRfX3BtZF9wb3B1bGF0ZShwbWRwLCBwdGVfcGh5cywgUE1EX1RZUEVfVEFCTEUpO1xuK1x0XHQqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZWFybHkgPyBwdGVfb2Zmc2V0X2tpbWcocG1kcCwgYWRkcilcbkBAIC03NCw0OSArNzUsNTMgQEAgc3RhdGljIHB0ZV90ICpfX2luaXQga2FzYW5fcHRlX29mZnNldChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcbiB9XG4gXG4gc3RhdGljIHBtZF90ICpfX2luaXQga2FzYW5fcG1kX29mZnNldChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSxcbi1cdFx0XHRcdCAgICAgIGJvb2wgZWFybHkpXG4rXHRcdFx0XHQgICAgICBib29sIGVhcmx5LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpZiAocHVkX25vbmUoUkVBRF9PTkNFKCpwdWRwKSkpIHtcbiBcdFx0cGh5c19hZGRyX3QgcG1kX3BoeXMgPSBlYXJseSA/XG4gXHRcdFx0XHRfX3BhX3N5bWJvbChrYXNhbl9lYXJseV9zaGFkb3dfcG1kKVxuIFx0XHRcdFx0XHQ6IGthc2FuX2FsbG9jX3plcm9lZF9wYWdlKG5vZGUpO1xuIFx0XHRfX3B1ZF9wb3B1bGF0ZShwdWRwLCBwbWRfcGh5cywgUFVEX1RZUEVfVEFCTEUpO1xuK1x0XHQqbWFzayB8PSBQR1RCTF9QVURfTU9ESUZJRUQ7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZWFybHkgPyBwbWRfb2Zmc2V0X2tpbWcocHVkcCwgYWRkcikgOiBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuIH1cbiBcbiBzdGF0aWMgcHVkX3QgKl9faW5pdCBrYXNhbl9wdWRfb2Zmc2V0KHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBub2RlLFxuLVx0XHRcdFx0ICAgICAgYm9vbCBlYXJseSlcbitcdFx0XHRcdCAgICAgIGJvb2wgZWFybHksIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdGlmIChwNGRfbm9uZShSRUFEX09OQ0UoKnA0ZHApKSkge1xuIFx0XHRwaHlzX2FkZHJfdCBwdWRfcGh5cyA9IGVhcmx5ID9cbiBcdFx0XHRcdF9fcGFfc3ltYm9sKGthc2FuX2Vhcmx5X3NoYWRvd19wdWQpXG4gXHRcdFx0XHRcdDoga2FzYW5fYWxsb2NfemVyb2VkX3BhZ2Uobm9kZSk7XG4gXHRcdF9fcDRkX3BvcHVsYXRlKHA0ZHAsIHB1ZF9waHlzLCBQNERfVFlQRV9UQUJMRSk7XG4rXHRcdCptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDtcbiBcdH1cbiBcbiBcdHJldHVybiBlYXJseSA/IHB1ZF9vZmZzZXRfa2ltZyhwNGRwLCBhZGRyKSA6IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XG4gfVxuIFxuIHN0YXRpYyBwNGRfdCAqX19pbml0IGthc2FuX3A0ZF9vZmZzZXQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUsXG4tXHRcdFx0XHQgICAgICBib29sIGVhcmx5KVxuK1x0XHRcdFx0ICAgICAgYm9vbCBlYXJseSwgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0aWYgKHBnZF9ub25lKFJFQURfT05DRSgqcGdkcCkpKSB7XG4gXHRcdHBoeXNfYWRkcl90IHA0ZF9waHlzID0gZWFybHkgP1xuIFx0XHRcdFx0X19wYV9zeW1ib2woa2FzYW5fZWFybHlfc2hhZG93X3A0ZClcbiBcdFx0XHRcdFx0OiBrYXNhbl9hbGxvY196ZXJvZWRfcGFnZShub2RlKTtcbiBcdFx0X19wZ2RfcG9wdWxhdGUocGdkcCwgcDRkX3BoeXMsIFBHRF9UWVBFX1RBQkxFKTtcbitcdFx0Km1hc2sgfD0gUEdUQkxfUEdEX01PRElGSUVEO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVhcmx5ID8gcDRkX29mZnNldF9raW1nKHBnZHAsIGFkZHIpIDogcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5KVxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5LFxuK1x0XHRcdFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuLVx0cHRlX3QgKnB0ZXAgPSBrYXNhbl9wdGVfb2Zmc2V0KHBtZHAsIGFkZHIsIG5vZGUsIGVhcmx5KTtcbitcdHB0ZV90ICpwdGVwID0ga2FzYW5fcHRlX29mZnNldChwbWRwLCBhZGRyLCBub2RlLCBlYXJseSwgbWFzayk7XG4gXG4gXHRkbyB7XG4gXHRcdHBoeXNfYWRkcl90IHBhZ2VfcGh5cyA9IGVhcmx5ID9cbkBAIC0xMzAsMzggKzEzNSw0MSBAQCBzdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcHRlX3BvcHVsYXRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wbWRfcG9wdWxhdGUocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSlcbitcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgYm9vbCBlYXJseSxcbitcdFx0XHRcdCAgICAgIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbi1cdHBtZF90ICpwbWRwID0ga2FzYW5fcG1kX29mZnNldChwdWRwLCBhZGRyLCBub2RlLCBlYXJseSk7XG4rXHRwbWRfdCAqcG1kcCA9IGthc2FuX3BtZF9vZmZzZXQocHVkcCwgYWRkciwgbm9kZSwgZWFybHksIG1hc2spO1xuIFxuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7XG4rXHRcdGthc2FuX3B0ZV9wb3B1bGF0ZShwbWRwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgbWFzayk7XG4gXHR9IHdoaWxlIChwbWRwKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCBcdTAwMjZcdTAwMjYgcG1kX25vbmUoUkVBRF9PTkNFKCpwbWRwKSkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQga2FzYW5fcHVkX3BvcHVsYXRlKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHkpXG4rXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgaW50IG5vZGUsIGJvb2wgZWFybHksXG4rXHRcdFx0XHQgICAgICBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4tXHRwdWRfdCAqcHVkcCA9IGthc2FuX3B1ZF9vZmZzZXQocDRkcCwgYWRkciwgbm9kZSwgZWFybHkpO1xuK1x0cHVkX3QgKnB1ZHAgPSBrYXNhbl9wdWRfb2Zmc2V0KHA0ZHAsIGFkZHIsIG5vZGUsIGVhcmx5LCBtYXNrKTtcbiBcbiBcdGRvIHtcbiBcdFx0bmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuLVx0XHRrYXNhbl9wbWRfcG9wdWxhdGUocHVkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHkpO1xuK1x0XHRrYXNhbl9wbWRfcG9wdWxhdGUocHVkcCwgYWRkciwgbmV4dCwgbm9kZSwgZWFybHksIG1hc2spO1xuIFx0fSB3aGlsZSAocHVkcCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQgXHUwMDI2XHUwMDI2IHB1ZF9ub25lKFJFQURfT05DRSgqcHVkcCkpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IGthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RfdCAqcGdkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5KVxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBib29sIGVhcmx5LFxuK1x0XHRcdFx0ICAgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuLVx0cDRkX3QgKnA0ZHAgPSBrYXNhbl9wNGRfb2Zmc2V0KHBnZHAsIGFkZHIsIG5vZGUsIGVhcmx5KTtcbitcdHA0ZF90ICpwNGRwID0ga2FzYW5fcDRkX29mZnNldChwZ2RwLCBhZGRyLCBub2RlLCBlYXJseSwgbWFzayk7XG4gXG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwNGRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbi1cdFx0a2FzYW5fcHVkX3BvcHVsYXRlKHA0ZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5KTtcbitcdFx0a2FzYW5fcHVkX3BvcHVsYXRlKHA0ZHAsIGFkZHIsIG5leHQsIG5vZGUsIGVhcmx5LCBtYXNrKTtcbiBcdH0gd2hpbGUgKHA0ZHArKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kIFx1MDAyNlx1MDAyNiBwNGRfbm9uZShSRUFEX09OQ0UoKnA0ZHApKSk7XG4gfVxuIFxuQEAgLTE3MCwxMiArMTc4LDE3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9wZ2RfcG9wdWxhdGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5leHQ7XG4gXHRwZ2RfdCAqcGdkcDtcbitcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7XG4gXG4gXHRwZ2RwID0gcGdkX29mZnNldF9rKGFkZHIpO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4tXHRcdGthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSk7XG4rXHRcdGthc2FuX3A0ZF9wb3B1bGF0ZShwZ2RwLCBhZGRyLCBuZXh0LCBub2RlLCBlYXJseSwgXHUwMDI2bWFzayk7XG4gXHR9IHdoaWxlIChwZ2RwKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG4rXG4rXHRpZiAobWFzayBcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcbitcdFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgZW5kKTtcbiB9XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX0FSTTY0XzY0S19QQUdFUykgfHwgQ09ORklHX1BHVEFCTEVfTEVWRUxTIFx1MDAzZSA0XG5AQCAtMzExLDcgKzMyNCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBrYXNhbl9pbml0X3NoYWRvdyh2b2lkKVxuIFxuIFx0bW9kX3NoYWRvd19zdGFydCA9ICh1NjQpa2FzYW5fbWVtX3RvX3NoYWRvdygodm9pZCAqKU1PRFVMRVNfVkFERFIpO1xuIFxuLVx0dm1hbGxvY19zaGFkb3dfZW5kID0gKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopVk1BTExPQ19FTkQpO1xuK1x0dm1hbGxvY19zaGFkb3dfZW5kID0gKHU2NClrYXNhbl9tZW1fdG9fc2hhZG93KCh2b2lkICopTE9DQUxfUEVSQ1BVX0VORCk7XG4gXG4gXHQvKlxuIFx0ICogV2UgYXJlIGdvaW5nIHRvIHBlcmZvcm0gcHJvcGVyIHNldHVwIG9mIHNoYWRvdyBtZW1vcnkuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbmluZGV4IGYyYmU1MDE0NjhjZTVhLi5lZTRhYjAzMWViZjhkNyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmNcbisrKyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbkBAIC02Nyw2ICs2Nyw2MyBAQCBsb25nIF9fc2VjdGlvbihcIi5tbXVvZmYuZGF0YS53cml0ZVwiKSBfX2Vhcmx5X2NwdV9ib290X3N0YXR1cztcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN3YXBwZXJfcGdkaXJfbG9jayk7XG4gc3RhdGljIERFRklORV9NVVRFWChmaXhtYXBfbG9jayk7XG4gXG4rcGdkX3QgKnBlcmNwdV9wZ2RbTlJfQ1BVU10gX19yb19hZnRlcl9pbml0O1xuK2Jvb2wgcGVyY3B1X3BnZF9zZXR1cF9kb25lIF9fcm9fYWZ0ZXJfaW5pdCA9IGZhbHNlO1xuK1xuK3ZvaWQgX19pbml0IHNldHVwX3BlcmNwdV9wZ2Qodm9pZClcbit7XG4rXHRpbnQgY3B1O1xuK1xuK1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuK1x0XHR2b2lkICphZGRyO1xuK1xuK1x0XHRpZiAoY3B1ID09IDApIHtcbitcdFx0XHRwZXJjcHVfcGdkW2NwdV0gPSBzd2FwcGVyX3BnX2RpcjtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRhZGRyID0gbWVtYmxvY2tfYWxsb2MoUEFHRV9TSVpFLCBQQUdFX1NJWkUpO1xuK1x0XHRpZiAoIWFkZHIpXG4rXHRcdFx0cGFuaWMoXCJDYW4ndCBhbGxvYyBwZXJjcHUgcGdkXFxuXCIpO1xuK1xuK1x0XHRtZW1jcHkoYWRkciwgKHZvaWQgKilzd2FwcGVyX3BnX2RpciwgUEFHRV9TSVpFKTtcbitcdFx0cGVyY3B1X3BnZFtjcHVdID0gKHBnZF90ICopYWRkcjtcbitcdH1cbitcbitcdGRzYihpc2hzdCk7XG4rXG4rXHRwZXJjcHVfcGdkX3NldHVwX2RvbmUgPSB0cnVlO1xuK31cbitcbit2b2lkIGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyLCBuZXh0O1xuK1x0aW50IGNwdTtcbitcdHBnZF90ICpwZ2RwID0gcGdkX29mZnNldF9rKHN0YXJ0KTtcbitcdHBnZF90IHBnZDtcbitcdHVuc2lnbmVkIGludCBpbmRleCA9IHBnZF9pbmRleChzdGFydCk7XG4rXG4rXHRCVUdfT04oc3RhcnQgXHUwMDNlIGVuZCk7XG4rXG4rXHRpZiAoIXBlcmNwdV9wZ2Rfc2V0dXBfZG9uZSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogRG9uJ3Qgc3luYyBsb2NhbCBwZXJjcHUgYXJlYSBwYWdlIHRhYmxlICovXG4rXHRpZiAoc3RhcnQgXHUwMDNlPSBMT0NBTF9QRVJDUFVfU1RBUlQgXHUwMDI2XHUwMDI2IGVuZCBcdTAwM2MgTE9DQUxfUEVSQ1BVX0VORClcbitcdFx0cmV0dXJuO1xuK1xuK1x0YWRkciA9IHN0YXJ0O1xuK1x0ZG8ge1xuK1x0XHRwZ2QgPSBSRUFEX09OQ0UoKnBnZHApO1xuK1x0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4rXHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbitcdFx0XHRpZiAoY3B1ID09IDApXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRzZXRfcGdkKHBlcmNwdV9wZ2RbY3B1XSArIGluZGV4LCBwZ2QpO1xuK1x0XHR9XG4rXHR9IHdoaWxlIChwZ2RwKyssIGluZGV4KyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7XG4rfVxuK1xuIHZvaWQgbm9pbnN0ciBzZXRfc3dhcHBlcl9wZ2QocGdkX3QgKnBnZHAsIHBnZF90IHBnZClcbiB7XG4gXHRwZ2RfdCAqZml4bWFwX3BnZHA7XG5AQCAtMTYxLDcgKzIxOCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfY2xlYXJfcGd0YWJsZSh2b2lkICp0YWJsZSlcbiB9XG4gXG4gc3RhdGljIHZvaWQgaW5pdF9wdGUocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tXHRcdCAgICAgcGh5c19hZGRyX3QgcGh5cywgcGdwcm90X3QgcHJvdClcbitcdFx0ICAgICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRkbyB7XG4gXHRcdHB0ZV90IG9sZF9wdGUgPSBfX3B0ZXBfZ2V0KHB0ZXApO1xuQEAgLTE3MSw2ICsyMjgsNyBAQCBzdGF0aWMgdm9pZCBpbml0X3B0ZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0ICogYXJlIGRlZmVycmVkIHRvIHRoZSBlbmQgb2YgYWxsb2NfaW5pdF9jb250X3B0ZSgpLlxuIFx0XHQgKi9cbiBcdFx0X19zZXRfcHRlX25vc3luYyhwdGVwLCBwZm5fcHRlKF9fcGh5c190b19wZm4ocGh5cyksIHByb3QpKTtcbitcdFx0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBBZnRlciB0aGUgUFRFIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZVxuQEAgLTE5OCw3ICsyNTYsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfY29udF9wdGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXMsXG4gXHRcdFx0ICAgICAgIHBncHJvdF90IHByb3QsXG4gXHRcdFx0ICAgICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSxcbi1cdFx0XHQgICAgICAgaW50IGZsYWdzKVxuK1x0XHRcdCAgICAgICBpbnQgZmxhZ3MsIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbiBcdHBtZF90IHBtZCA9IFJFQURfT05DRSgqcG1kcCk7XG5AQCAtMjE5LDYgKzI3Nyw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRpbml0X2NsZWFyX3BndGFibGUocHRlcCk7XG4gXHRcdHB0ZXAgKz0gcHRlX2luZGV4KGFkZHIpO1xuIFx0XHRfX3BtZF9wb3B1bGF0ZShwbWRwLCBwdGVfcGh5cywgcG1kdmFsKTtcbitcdFx0Km1hc2sgfD0gUEdUQkxfUE1EX01PRElGSUVEO1xuIFx0fSBlbHNlIHtcbiBcdFx0QlVHX09OKHBtZF9iYWQocG1kKSk7XG4gXHRcdHB0ZXAgPSBwdGVfc2V0X2ZpeG1hcF9vZmZzZXQocG1kcCwgYWRkcik7XG5AQCAtMjM1LDcgKzI5NCw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3B0ZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHQgICAgIXB0ZV9yYW5nZV9oYXNfdmFsaWRfbm9uY29udChwdGVwKSlcbiBcdFx0XHRfX3Byb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwgUFRFX0NPTlQpO1xuIFxuLVx0XHRpbml0X3B0ZShwdGVwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QpO1xuK1x0XHRpbml0X3B0ZShwdGVwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsIG1hc2spO1xuIFxuIFx0XHRwdGVwICs9IHB0ZV9pbmRleChuZXh0KSAtIHB0ZV9pbmRleChhZGRyKTtcbiBcdFx0cGh5cyArPSBuZXh0IC0gYWRkcjtcbkBAIC0yNTMsNyArMzEyLDggQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcHRlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXG4gc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0ICAgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QsXG4tXHRcdCAgICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksIGludCBmbGFncylcbitcdFx0ICAgIHBoeXNfYWRkcl90ICgqcGd0YWJsZV9hbGxvYykoZW51bSBwZ3RhYmxlX2xldmVsKSwgaW50IGZsYWdzLFxuK1x0XHQgICAgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuIFxuQEAgLTI2Niw3ICszMjYsMTAgQEAgc3RhdGljIGludCBpbml0X3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0aWYgKCgoYWRkciB8IG5leHQgfCBwaHlzKSBcdTAwMjYgflBNRF9NQVNLKSA9PSAwIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKGZsYWdzIFx1MDAyNiBOT19CTE9DS19NQVBQSU5HUykgPT0gMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFwbWRfdGFibGUob2xkX3BtZCkpIHtcbi1cdFx0XHRXQVJOX09OKCFwbWRfc2V0X2h1Z2UocG1kcCwgcGh5cywgcHJvdCkpO1xuK1x0XHRcdGlmIChwbWRfc2V0X2h1Z2UocG1kcCwgcGh5cywgcHJvdCkpXG4rXHRcdFx0XHQqbWFzayB8PSBQR1RCTF9QTURfTU9ESUZJRUQ7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0V0FSTl9PTigxKTtcbiBcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIEFmdGVyIHRoZSBQTUQgZW50cnkgaGFzIGJlZW4gcG9wdWxhdGVkIG9uY2UsIHdlXG5AQCAtMjc4LDcgKzM0MSw3IEBAIHN0YXRpYyBpbnQgaW5pdF9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0aW50IHJldDtcbiBcbiBcdFx0XHRyZXQgPSBhbGxvY19pbml0X2NvbnRfcHRlKHBtZHAsIGFkZHIsIG5leHQsIHBoeXMsIHByb3QsXG4tXHRcdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XG4rXHRcdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMzA2LDcgKzM2OSw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9jb250X3BtZChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgcGh5c19hZGRyX3QgcGh5cyxcbiBcdFx0XHQgICAgICAgcGdwcm90X3QgcHJvdCxcbiBcdFx0XHQgICAgICAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxuLVx0XHRcdCAgICAgICBpbnQgZmxhZ3MpXG4rXHRcdFx0ICAgICAgIGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0aW50IHJldDtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbkBAIC0zMzEsNiArMzk0LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdGluaXRfY2xlYXJfcGd0YWJsZShwbWRwKTtcbiBcdFx0cG1kcCArPSBwbWRfaW5kZXgoYWRkcik7XG4gXHRcdF9fcHVkX3BvcHVsYXRlKHB1ZHAsIHBtZF9waHlzLCBwdWR2YWwpO1xuK1x0XHQqbWFzayB8PSBQR1RCTF9QVURfTU9ESUZJRUQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRCVUdfT04ocHVkX2JhZChwdWQpKTtcbiBcdFx0cG1kcCA9IHBtZF9zZXRfZml4bWFwX29mZnNldChwdWRwLCBhZGRyKTtcbkBAIC0zNDcsNyArNDExLDggQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdCAgICAhcG1kX3JhbmdlX2hhc192YWxpZF9ub25jb250KHBtZHApKVxuIFx0XHRcdF9fcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBQVEVfQ09OVCk7XG4gXG4tXHRcdHJldCA9IGluaXRfcG1kKHBtZHAsIGFkZHIsIG5leHQsIHBoeXMsIF9fcHJvdCwgcGd0YWJsZV9hbGxvYywgZmxhZ3MpO1xuK1x0XHRyZXQgPSBpbml0X3BtZChwbWRwLCBhZGRyLCBuZXh0LCBwaHlzLCBfX3Byb3QsIHBndGFibGVfYWxsb2MsIGZsYWdzLFxuK1x0XHRcdCAgICAgICBtYXNrKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dDtcbiBcbkBAIC0zNjQsNyArNDI5LDcgQEAgc3RhdGljIGludCBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gc3RhdGljIGludCBhbGxvY19pbml0X3B1ZChwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHQgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IHByb3QsXG4gXHRcdFx0ICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksXG4tXHRcdFx0ICBpbnQgZmxhZ3MpXG4rXHRcdFx0ICBpbnQgZmxhZ3MsIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuQEAgLTM4NSw2ICs0NTAsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRpbml0X2NsZWFyX3BndGFibGUocHVkcCk7XG4gXHRcdHB1ZHAgKz0gcHVkX2luZGV4KGFkZHIpO1xuIFx0XHRfX3A0ZF9wb3B1bGF0ZShwNGRwLCBwdWRfcGh5cywgcDRkdmFsKTtcbitcdFx0Km1hc2sgfD0gUEdUQkxfUDREX01PRElGSUVEO1xuIFx0fSBlbHNlIHtcbiBcdFx0QlVHX09OKHA0ZF9iYWQocDRkKSk7XG4gXHRcdHB1ZHAgPSBwdWRfc2V0X2ZpeG1hcF9vZmZzZXQocDRkcCwgYWRkcik7XG5AQCAtNDAyLDcgKzQ2OCwxMCBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHQgICAoKGFkZHIgfCBuZXh0IHwgcGh5cykgXHUwMDI2IH5QVURfTUFTSykgPT0gMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChmbGFncyBcdTAwMjYgTk9fQkxPQ0tfTUFQUElOR1MpID09IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhcHVkX3RhYmxlKG9sZF9wdWQpKSB7XG4tXHRcdFx0V0FSTl9PTighcHVkX3NldF9odWdlKHB1ZHAsIHBoeXMsIHByb3QpKTtcbitcdFx0XHRpZiAocHVkX3NldF9odWdlKHB1ZHAsIHBoeXMsIHByb3QpKVxuK1x0XHRcdFx0Km1hc2sgfD0gUEdUQkxfUFVEX01PRElGSUVEO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdFdBUk5fT04oMSk7XG4gXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBBZnRlciB0aGUgUFVEIGVudHJ5IGhhcyBiZWVuIHBvcHVsYXRlZCBvbmNlLCB3ZVxuQEAgLTQxMiw3ICs0ODEsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdFx0XHRcdCAgICAgIFJFQURfT05DRShwdWRfdmFsKCpwdWRwKSkpKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRyZXQgPSBhbGxvY19pbml0X2NvbnRfcG1kKHB1ZHAsIGFkZHIsIG5leHQsIHBoeXMsIHByb3QsXG4tXHRcdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XG4rXHRcdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFxuQEAgLTQzMSw3ICs1MDAsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcHVkKHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wNGQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0ICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LFxuIFx0XHRcdCAgcGh5c19hZGRyX3QgKCpwZ3RhYmxlX2FsbG9jKShlbnVtIHBndGFibGVfbGV2ZWwpLFxuLVx0XHRcdCAgaW50IGZsYWdzKVxuK1x0XHRcdCAgaW50IGZsYWdzLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRpbnQgcmV0O1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuQEAgLTQ1Miw2ICs1MjEsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2luaXRfcDRkKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRpbml0X2NsZWFyX3BndGFibGUocDRkcCk7XG4gXHRcdHA0ZHAgKz0gcDRkX2luZGV4KGFkZHIpO1xuIFx0XHRfX3BnZF9wb3B1bGF0ZShwZ2RwLCBwNGRfcGh5cywgcGdkdmFsKTtcbitcdFx0Km1hc2sgfD0gUEdUQkxfUEdEX01PRElGSUVEO1xuIFx0fSBlbHNlIHtcbiBcdFx0QlVHX09OKHBnZF9iYWQocGdkKSk7XG4gXHRcdHA0ZHAgPSBwNGRfc2V0X2ZpeG1hcF9vZmZzZXQocGdkcCwgYWRkcik7XG5AQCAtNDYzLDcgKzUzMyw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfaW5pdF9wNGQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdG5leHQgPSBwNGRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcbiBcdFx0cmV0ID0gYWxsb2NfaW5pdF9wdWQocDRkcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCxcbi1cdFx0XHRcdCAgICAgcGd0YWJsZV9hbGxvYywgZmxhZ3MpO1xuK1x0XHRcdFx0ICAgICBwZ3RhYmxlX2FsbG9jLCBmbGFncywgbWFzayk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG5AQCAtNDgzLDcgKzU1Myw3IEBAIHN0YXRpYyBpbnQgX19jcmVhdGVfcGdkX21hcHBpbmdfbG9ja2VkKHBnZF90ICpwZ2RpciwgcGh5c19hZGRyX3QgcGh5cyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHZpcnQsIHBoeXNfYWRkcl90IHNpemUsXG4gXHRcdFx0XHQgICAgICAgcGdwcm90X3QgcHJvdCxcbiBcdFx0XHRcdCAgICAgICBwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksXG4tXHRcdFx0XHQgICAgICAgaW50IGZsYWdzKVxuK1x0XHRcdFx0ICAgICAgIGludCBmbGFncywgcGd0YmxfbW9kX21hc2sgKm1hc2spXG4ge1xuIFx0aW50IHJldDtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciwgZW5kLCBuZXh0O1xuQEAgLTUwMyw3ICs1NzMsNyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nX2xvY2tlZChwZ2RfdCAqcGdkaXIsIHBoeXNfYWRkcl90IHBoeXMsXG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0cmV0ID0gYWxsb2NfaW5pdF9wNGQocGdkcCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCwgcGd0YWJsZV9hbGxvYyxcbi1cdFx0XHRcdCAgICAgZmxhZ3MpO1xuK1x0XHRcdFx0ICAgICBmbGFncywgbWFzayk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0cGh5cyArPSBuZXh0IC0gYWRkcjtcbkBAIC01MTYsMTMgKzU4NiwxMyBAQCBzdGF0aWMgaW50IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHBnZF90ICpwZ2RpciwgcGh5c19hZGRyX3QgcGh5cyxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgdmlydCwgcGh5c19hZGRyX3Qgc2l6ZSxcbiBcdFx0XHRcdHBncHJvdF90IHByb3QsXG4gXHRcdFx0XHRwaHlzX2FkZHJfdCAoKnBndGFibGVfYWxsb2MpKGVudW0gcGd0YWJsZV9sZXZlbCksXG4tXHRcdFx0XHRpbnQgZmxhZ3MpXG4rXHRcdFx0XHRpbnQgZmxhZ3MsIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdGludCByZXQ7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmZpeG1hcF9sb2NrKTtcbiBcdHJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nX2xvY2tlZChwZ2RpciwgcGh5cywgdmlydCwgc2l6ZSwgcHJvdCxcbi1cdFx0XHRcdFx0ICBwZ3RhYmxlX2FsbG9jLCBmbGFncyk7XG4rXHRcdFx0XHRcdCAgcGd0YWJsZV9hbGxvYywgZmxhZ3MsIG1hc2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZpeG1hcF9sb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtNTM1LDkgKzYwNSwxMCBAQCBzdGF0aWMgdm9pZCBlYXJseV9jcmVhdGVfcGdkX21hcHBpbmcocGdkX3QgKnBnZGlyLCBwaHlzX2FkZHJfdCBwaHlzLFxuIFx0XHRcdFx0ICAgICBpbnQgZmxhZ3MpXG4ge1xuIFx0aW50IHJldDtcbitcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xuIFxuIFx0cmV0ID0gX19jcmVhdGVfcGdkX21hcHBpbmcocGdkaXIsIHBoeXMsIHZpcnQsIHNpemUsIHByb3QsIHBndGFibGVfYWxsb2MsXG4tXHRcdFx0XHQgICBmbGFncyk7XG4rXHRcdFx0XHQgICBmbGFncywgXHUwMDI2bWFzayk7XG4gXHRpZiAocmV0KVxuIFx0XHRwYW5pYyhcIkZhaWxlZCB0byBjcmVhdGUgcGFnZSB0YWJsZXNcXG5cIik7XG4gfVxuQEAgLTEwMDksNiArMTA4MCwyOSBAQCB2b2lkIF9faW5pdCBsaW5lYXJfbWFwX21heWJlX3NwbGl0X3RvX3B0ZXModm9pZClcbiBcdH1cbiB9XG4gXG4rI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4rdm9pZCBfX2luaXQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsXG4rXHRcdFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucilcbit7XG4rXHRpbnQgaSwgcmV0O1xuK1x0cGd0YmxfbW9kX21hc2sgbWFzayA9IDA7XG4rXG4rXHRhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yOyBpKyspIHtcbitcdFx0cGh5c19hZGRyX3QgcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSk7XG4rXHRcdHJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHBlcmNwdV9wZ2RbY3B1XSwgcGh5cywgdmlydCwgUEFHRV9TSVpFLCBQQUdFX0tFUk5FTCxcbitcdFx0XHRcdFx0ICAgZWFybHlfcGd0YWJsZV9hbGxvYywgTk9fRVhFQ19NQVBQSU5HUywgXHUwMDI2bWFzayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cGFuaWMoXCJGYWlsZWQgdG8gY3JlYXRlIGxvY2FsIHBlcmNwdSBmaXJzdCBjaHVua1xcblwiKTtcbitcbitcdFx0dmlydCArPSBQQUdFX1NJWkU7XG4rXHR9XG4rXG4rXHRhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTtcbit9XG4rI2VuZGlmXG4rXG4gLypcbiAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgdG8gbW9kaWZ5IGV4aXN0aW5nIHRhYmxlIGVudHJpZXMsXG4gICogd2l0aG91dCBhbGxvY2F0aW5nIG5ldyBsZXZlbHMgb2YgdGFibGUuIE5vdGUgdGhhdCB0aGlzIHBlcm1pdHMgdGhlXG5AQCAtMTI3OSw2ICsxMzczLDcgQEAgc3RhdGljIGludCBfX2luaXQgX19rcHRpX2luc3RhbGxfbmdfbWFwcGluZ3Modm9pZCAqX191bnVzZWQpXG4gXG4gXHRpZiAoIWNwdSkge1xuIFx0XHRpbnQgcmV0O1xuK1x0XHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiBcbiBcdFx0YWxsb2MgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMgfCBfX0dGUF9aRVJPLCBvcmRlcik7XG4gXHRcdGtwdGlfbmdfdGVtcF9wZ2QgPSAocGdkX3QgKikoYWxsb2MgKyAobGV2ZWxzIC0gMSkgKiBQQUdFX1NJWkUpO1xuQEAgLTEzMDIsNyArMTM5Nyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fa3B0aV9pbnN0YWxsX25nX21hcHBpbmdzKHZvaWQgKl9fdW51c2VkKVxuIFx0XHQvL1xuIFx0XHRyZXQgPSBfX2NyZWF0ZV9wZ2RfbWFwcGluZ19sb2NrZWQoa3B0aV9uZ190ZW1wX3BnZCwgX19wYShhbGxvYyksXG4gXHRcdFx0XHRcdFx0ICBLUFRJX05HX1RFTVBfVkEsIFBBR0VfU0laRSwgUEFHRV9LRVJORUwsXG4tXHRcdFx0XHRcdFx0ICBrcHRpX25nX3BnZF9hbGxvYywgMCk7XG4rXHRcdFx0XHRcdFx0ICBrcHRpX25nX3BnZF9hbGxvYywgMCwgXHUwMDI2bWFzayk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cGFuaWMoXCJGYWlsZWQgdG8gY3JlYXRlIHBhZ2UgdGFibGVzXFxuXCIpO1xuIFx0fVxuQEAgLTE2MDgsNyArMTcwMyw3IEBAIHN0YXRpYyB2b2lkIHVubWFwX2hvdHBsdWdfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcbiBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGZsb29yLFxuLVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZylcbitcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcsIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdHB0ZV90ICpwdGVwLCBwdGU7XG4gXHR1bnNpZ25lZCBsb25nIGksIHN0YXJ0ID0gYWRkcjtcbkBAIC0xNjI0LDYgKzE3MTksNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRXQVJOX09OKCFwdGVfbm9uZShwdGUpKTtcbiBcdH0gd2hpbGUgKGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyIFx1MDAzYyBlbmQpO1xuIFxuK1x0Km1hc2sgfD0gUEdUQkxfUFRFX01PRElGSUVEO1xuIFx0aWYgKCFwZ3RhYmxlX3JhbmdlX2FsaWduZWQoc3RhcnQsIGVuZCwgZmxvb3IsIGNlaWxpbmcsIFBNRF9NQVNLKSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTE2MzksMTMgKzE3MzUsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdGVfdGFibGUocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdH1cbiBcbiBcdHBtZF9jbGVhcihwbWRwKTtcbitcdCptYXNrIHw9IFBHVEJMX1BNRF9NT0RJRklFRDtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKHN0YXJ0KTtcbiBcdGZyZWVfaG90cGx1Z19wZ3RhYmxlX3BhZ2UodmlydF90b19wYWdlKHB0ZXApKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wbWRfdGFibGUocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcbi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcpXG4rXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBjZWlsaW5nLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRwbWRfdCAqcG1kcCwgcG1kO1xuIFx0dW5zaWduZWQgbG9uZyBpLCBuZXh0LCBzdGFydCA9IGFkZHI7XG5AQCAtMTY1OCw3ICsxNzU1LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wbWRfdGFibGUocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0V0FSTl9PTighcG1kX3ByZXNlbnQocG1kKSB8fCAhcG1kX3RhYmxlKHBtZCkpO1xuLVx0XHRmcmVlX2VtcHR5X3B0ZV90YWJsZShwbWRwLCBhZGRyLCBuZXh0LCBmbG9vciwgY2VpbGluZyk7XG4rXHRcdGZyZWVfZW1wdHlfcHRlX3RhYmxlKHBtZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nLCBtYXNrKTtcbiBcdH0gd2hpbGUgKGFkZHIgPSBuZXh0LCBhZGRyIFx1MDAzYyBlbmQpO1xuIFxuIFx0aWYgKENPTkZJR19QR1RBQkxFX0xFVkVMUyBcdTAwM2M9IDIpXG5AQCAtMTY3OSwxMyArMTc3NiwxNCBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3BtZF90YWJsZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0fVxuIFxuIFx0cHVkX2NsZWFyKHB1ZHApO1xuK1x0Km1hc2sgfD0gUEdUQkxfUFVEX01PRElGSUVEO1xuIFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoc3RhcnQpO1xuIFx0ZnJlZV9ob3RwbHVnX3BndGFibGVfcGFnZSh2aXJ0X3RvX3BhZ2UocG1kcCkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B1ZF90YWJsZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGZsb29yLFxuLVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgY2VpbGluZylcbitcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcsIHBndGJsX21vZF9tYXNrICptYXNrKVxuIHtcbiBcdHB1ZF90ICpwdWRwLCBwdWQ7XG4gXHR1bnNpZ25lZCBsb25nIGksIG5leHQsIHN0YXJ0ID0gYWRkcjtcbkBAIC0xNjk4LDcgKzE3OTYsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2VtcHR5X3B1ZF90YWJsZShwNGRfdCAqcDRkcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRXQVJOX09OKCFwdWRfcHJlc2VudChwdWQpIHx8ICFwdWRfdGFibGUocHVkKSk7XG4tXHRcdGZyZWVfZW1wdHlfcG1kX3RhYmxlKHB1ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTtcbitcdFx0ZnJlZV9lbXB0eV9wbWRfdGFibGUocHVkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIG1hc2spO1xuIFx0fSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgXHUwMDNjIGVuZCk7XG4gXG4gXHRpZiAoIXBndGFibGVfbDRfZW5hYmxlZCgpKVxuQEAgLTE3MTksMTMgKzE4MTcsMTQgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdH1cbiBcbiBcdHA0ZF9jbGVhcihwNGRwKTtcbitcdCptYXNrIHw9IFBHVEJMX1A0RF9NT0RJRklFRDtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKHN0YXJ0KTtcbiBcdGZyZWVfaG90cGx1Z19wZ3RhYmxlX3BhZ2UodmlydF90b19wYWdlKHB1ZHApKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wNGRfdGFibGUocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vcixcbi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGNlaWxpbmcpXG4rXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBjZWlsaW5nLCBwZ3RibF9tb2RfbWFzayAqbWFzaylcbiB7XG4gXHRwNGRfdCAqcDRkcCwgcDRkO1xuIFx0dW5zaWduZWQgbG9uZyBpLCBuZXh0LCBzdGFydCA9IGFkZHI7XG5AQCAtMTczOCw3ICsxODM3LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV9wNGRfdGFibGUocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0V0FSTl9PTighcDRkX3ByZXNlbnQocDRkKSk7XG4tXHRcdGZyZWVfZW1wdHlfcHVkX3RhYmxlKHA0ZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTtcbitcdFx0ZnJlZV9lbXB0eV9wdWRfdGFibGUocDRkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIG1hc2spO1xuIFx0fSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgXHUwMDNjIGVuZCk7XG4gXG4gXHRpZiAoIXBndGFibGVfbDVfZW5hYmxlZCgpKVxuQEAgLTE3NTksNiArMTg1OCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHR9XG4gXG4gXHRwZ2RfY2xlYXIocGdkcCk7XG4rXHQqbWFzayB8PSBQR1RCTF9QR0RfTU9ESUZJRUQ7XG4gXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShzdGFydCk7XG4gXHRmcmVlX2hvdHBsdWdfcGd0YWJsZV9wYWdlKHZpcnRfdG9fcGFnZShwNGRwKSk7XG4gfVxuQEAgLTE3NjgsNiArMTg2OCw4IEBAIHN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfdGFibGVzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuZXh0O1xuIFx0cGdkX3QgKnBnZHAsIHBnZDtcbitcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCA9IGFkZHI7XG4gXG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbkBAIC0xNzc3LDggKzE4NzksMTEgQEAgc3RhdGljIHZvaWQgZnJlZV9lbXB0eV90YWJsZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0V0FSTl9PTighcGdkX3ByZXNlbnQocGdkKSk7XG4tXHRcdGZyZWVfZW1wdHlfcDRkX3RhYmxlKHBnZHAsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTtcbitcdFx0ZnJlZV9lbXB0eV9wNGRfdGFibGUocGdkcCwgYWRkciwgbmV4dCwgZmxvb3IsIGNlaWxpbmcsIFx1MDAyNm1hc2spO1xuIFx0fSB3aGlsZSAoYWRkciA9IG5leHQsIGFkZHIgXHUwMDNjIGVuZCk7XG4rXG4rXHRpZiAobWFzayBcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcbitcdFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgZW5kKTtcbiB9XG4gI2VuZGlmXG4gXG5AQCAtMTk4Niw2ICsyMDkxLDcgQEAgaW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxuIFx0XHQgICAgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRpbnQgcmV0LCBmbGFncyA9IE5PX0VYRUNfTUFQUElOR1M7XG4rXHRwZ3RibF9tb2RfbWFzayBtYXNrID0gMDtcbiBcbiBcdFZNX0JVR19PTighbWhwX3JhbmdlX2FsbG93ZWQoc3RhcnQsIHNpemUsIHRydWUpKTtcbiBcbkBAIC0xOTk0LDEwICsyMTAwLDEzIEBAIGludCBhcmNoX2FkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcbiBcbiBcdHJldCA9IF9fY3JlYXRlX3BnZF9tYXBwaW5nKHN3YXBwZXJfcGdfZGlyLCBzdGFydCwgX19waHlzX3RvX3ZpcnQoc3RhcnQpLFxuIFx0XHRcdFx0ICAgc2l6ZSwgcGFyYW1zLVx1MDAzZXBncHJvdCwgcGdkX3BndGFibGVfYWxsb2NfaW5pdF9tbSxcbi1cdFx0XHRcdCAgIGZsYWdzKTtcbitcdFx0XHRcdCAgIGZsYWdzLCBcdTAwMjZtYXNrKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZXJyO1xuIFxuK1x0aWYgKG1hc2sgXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXG4rXHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3Moc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7XG4rXG4gXHRtZW1ibG9ja19jbGVhcl9ub21hcChzdGFydCwgc2l6ZSk7XG4gXG4gXHRyZXQgPSBfX2FkZF9wYWdlcyhuaWQsIHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uZGQyOTMzMTk4MjNlM2MgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4rKysgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMzg5LDYgKzM4OSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBwdGR1bXBfaW5pdCh2b2lkKVxuIFx0XHR7IE1PRFVMRVNfRU5ELFx0XHRcIk1vZHVsZXMgZW5kXCIgfSxcbiBcdFx0eyBWTUFMTE9DX1NUQVJULFx0XCJ2bWFsbG9jKCkgYXJlYVwiIH0sXG4gXHRcdHsgVk1BTExPQ19FTkQsXHRcdFwidm1hbGxvYygpIGVuZFwiIH0sXG4rXHRcdHsgUEVSQ1BVX1NUQVJULFx0XHRcIkdsb2JhbCBwZXJjcHUgc3RhcnRcIiB9LFxuK1x0XHR7IFBFUkNQVV9FTkQsXHRcdFwiR2xvYmFsIHBlcmNwdSBlbmRcIiB9LFxuK1x0XHR7IExPQ0FMX1BFUkNQVV9TVEFSVCxcdFwiTG9jYWwgcGVyY3B1IHN0YXJ0XCIgfSxcbitcdFx0eyBMT0NBTF9QRVJDUFVfRU5ELFx0XCJMb2NhbCBwZXJjcHUgZW5kXCIgfSxcbiBcdFx0eyB2bWVtbWFwX3N0YXJ0LFx0XCJ2bWVtbWFwIHN0YXJ0XCIgfSxcbiBcdFx0eyBWTUVNTUFQX0VORCxcdFx0XCJ2bWVtbWFwIGVuZFwiIH0sXG4gXHRcdHsgUENJX0lPX1NUQVJULFx0XHRcIlBDSSBJL08gc3RhcnRcIiB9LFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcC5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc21wLmNcbmluZGV4IGZhNjZmOWM5N2Q3NDhkLi5kNDIwZmY5ZGNmNGZjOCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcC5jXG4rKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zbXAuY1xuQEAgLTM2NCwzICszNjQsNTQgQEAgdm9pZCBrZ2RiX3JvdW5kdXBfY3B1cyh2b2lkKVxuIFx0fVxuIH1cbiAjZW5kaWZcbitcbisjaWZkZWYgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4rZXh0ZXJuIGludCBjcHVfdG9fbm9kZV9tYXBbTlJfQ1BVU107XG4rXG4rdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfb2Zmc2V0W05SX0NQVVNdIF9fcmVhZF9tb3N0bHk7XG4rRVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfb2Zmc2V0KTtcbitcbitpbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSlcbit7XG4rXHRyZXR1cm4gY3B1X3RvX25vZGVfbWFwW2NwdV07XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IHBjcHVfY3B1X2Rpc3RhbmNlKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pXG4re1xuK1x0cmV0dXJuIG5vZGVfZGlzdGFuY2UoZWFybHlfY3B1X3RvX25vZGUoZnJvbSksIGVhcmx5X2NwdV90b19ub2RlKHRvKSk7XG4rfVxuK1xuK3ZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGRlbHRhO1xuK1x0dW5zaWduZWQgaW50IGNwdTtcbitcdGludCByYyA9IC1FSU5WQUw7XG4rXG4rXHRpZiAocGNwdV9jaG9zZW5fZmMgIT0gUENQVV9GQ19QQUdFKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEFsd2F5cyByZXNlcnZlIGFyZWEgZm9yIG1vZHVsZSBwZXJjcHUgdmFyaWFibGVzLiAgVGhhdCdzXG4rXHRcdCAqIHdoYXQgdGhlIGxlZ2FjeSBhbGxvY2F0b3IgZGlkLlxuK1x0XHQgKi9cbitcdFx0cmMgPSBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSxcbitcdFx0XHRcdFx0ICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUsIFBBR0VfU0laRSxcbitcdFx0XHRcdFx0ICAgIHBjcHVfY3B1X2Rpc3RhbmNlLFxuK1x0XHRcdFx0XHQgICAgZWFybHlfY3B1X3RvX25vZGUpO1xuKyNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbitcdFx0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRcdHByX3dhcm4oXCJQRVJDUFU6ICVzIGFsbG9jYXRvciBmYWlsZWQgKCVkKSwgZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxcblwiLFxuK1x0XHRcdFx0ICAgcGNwdV9mY19uYW1lc1twY3B1X2Nob3Nlbl9mY10sIHJjKTtcbisjZW5kaWZcbitcdH1cbitcbisjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdHJjID0gcGNwdV9wYWdlX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwgZWFybHlfY3B1X3RvX25vZGUpO1xuKyNlbmRpZlxuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRwYW5pYyhcIkZhaWxlZCB0byBpbml0aWFsaXplIHBlcmNwdSBhcmVhcyAoZXJyPSVkKS5cIiwgcmMpO1xuK1xuK1x0ZGVsdGEgPSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkciAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDtcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXG4rXHRcdF9fcGVyX2NwdV9vZmZzZXRbY3B1XSA9IGRlbHRhICsgcGNwdV91bml0X29mZnNldHNbY3B1XTtcbit9XG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jIGIvZHJpdmVycy9iYXNlL2FyY2hfbnVtYS5jXG5pbmRleCBjOTlmMmFiMTA1ZTViNy4uYjNiOTFjZWVkNmE5MGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvYXJjaF9udW1hLmNcbisrKyBiL2RyaXZlcnMvYmFzZS9hcmNoX251bWEuY1xuQEAgLTE2LDcgKzE2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2VjdGlvbnMuaFx1MDAzZVxuIFxuLXN0YXRpYyBpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IE5VTUFfTk9fTk9ERSB9O1xuK2ludCBjcHVfdG9fbm9kZV9tYXBbTlJfQ1BVU10gPSB7IFswIC4uLiBOUl9DUFVTLTFdID0gTlVNQV9OT19OT0RFIH07XG4gXG4gYm9vbCBudW1hX29mZjtcbiBcbkBAIC0xNDAsNTUgKzE0MCw2IEBAIHZvaWQgX19pbml0IGVhcmx5X21hcF9jcHVfdG9fbm9kZSh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgbmlkKVxuIFx0XHRzZXRfY3B1X251bWFfbm9kZShjcHUsIG5pZCk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUFcbi11bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseTtcbi1FWFBPUlRfU1lNQk9MKF9fcGVyX2NwdV9vZmZzZXQpO1xuLVxuLWludCBlYXJseV9jcHVfdG9fbm9kZShpbnQgY3B1KVxuLXtcbi1cdHJldHVybiBjcHVfdG9fbm9kZV9tYXBbY3B1XTtcbi19XG4tXG4tc3RhdGljIGludCBfX2luaXQgcGNwdV9jcHVfZGlzdGFuY2UodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCB0bylcbi17XG4tXHRyZXR1cm4gbm9kZV9kaXN0YW5jZShlYXJseV9jcHVfdG9fbm9kZShmcm9tKSwgZWFybHlfY3B1X3RvX25vZGUodG8pKTtcbi19XG4tXG4tdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgZGVsdGE7XG4tXHR1bnNpZ25lZCBpbnQgY3B1O1xuLVx0aW50IHJjID0gLUVJTlZBTDtcbi1cbi1cdGlmIChwY3B1X2Nob3Nlbl9mYyAhPSBQQ1BVX0ZDX1BBR0UpIHtcbi1cdFx0Lypcbi1cdFx0ICogQWx3YXlzIHJlc2VydmUgYXJlYSBmb3IgbW9kdWxlIHBlcmNwdSB2YXJpYWJsZXMuICBUaGF0J3Ncbi1cdFx0ICogd2hhdCB0aGUgbGVnYWN5IGFsbG9jYXRvciBkaWQuXG4tXHRcdCAqL1xuLVx0XHRyYyA9IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLFxuLVx0XHRcdFx0XHQgICAgUEVSQ1BVX0RZTkFNSUNfUkVTRVJWRSwgUEFHRV9TSVpFLFxuLVx0XHRcdFx0XHQgICAgcGNwdV9jcHVfZGlzdGFuY2UsXG4tXHRcdFx0XHRcdCAgICBlYXJseV9jcHVfdG9fbm9kZSk7XG4tI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuLVx0XHRpZiAocmMgXHUwMDNjIDApXG4tXHRcdFx0cHJfd2FybihcIlBFUkNQVTogJXMgYWxsb2NhdG9yIGZhaWxlZCAoJWQpLCBmYWxsaW5nIGJhY2sgdG8gcGFnZSBzaXplXFxuXCIsXG4tXHRcdFx0XHQgICBwY3B1X2ZjX25hbWVzW3BjcHVfY2hvc2VuX2ZjXSwgcmMpO1xuLSNlbmRpZlxuLVx0fVxuLVxuLSNpZmRlZiBDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbi1cdGlmIChyYyBcdTAwM2MgMClcbi1cdFx0cmMgPSBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLCBlYXJseV9jcHVfdG9fbm9kZSk7XG4tI2VuZGlmXG4tXHRpZiAocmMgXHUwMDNjIDApXG4tXHRcdHBhbmljKFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcGVyY3B1IGFyZWFzIChlcnI9JWQpLlwiLCByYyk7XG4tXG4tXHRkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0O1xuLVx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbi1cdFx0X19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgKyBwY3B1X3VuaXRfb2Zmc2V0c1tjcHVdO1xuLX1cbi0jZW5kaWZcbi1cbiAvKlxuICAqIEluaXRpYWxpemUgTk9ERV9EQVRBIGZvciBhIG5vZGUgb24gdGhlIGxvY2FsIG1lbW9yeVxuICAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLmM4YzM4MDBmYmQ5ZmEwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0xODU4LDYgKzE4NTgsMTcgQEAgdW5zaWduZWQgbG9uZyB2bWFsbG9jX3RvX3Bmbihjb25zdCB2b2lkICphZGRyKTtcbiAjaWZkZWYgQ09ORklHX01NVVxuIGV4dGVybiBib29sIGlzX3ZtYWxsb2NfYWRkcihjb25zdCB2b2lkICp4KTtcbiBleHRlcm4gaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCk7XG4rI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4rc3RhdGljIGlubGluZSBib29sIGlzX3BlcmNwdV9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbit7XG4rXHRyZXR1cm4gYWRkciBcdTAwM2U9IFBFUkNQVV9TVEFSVCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2MgTE9DQUxfUEVSQ1BVX0VORDtcbit9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGVyY3B1X2FkZHIodW5zaWduZWQgbG9uZyBhZGRyKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rI2VuZGlmXG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdm1hbGxvY19hZGRyKGNvbnN0IHZvaWQgKngpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oXG5pbmRleCA0ZjM2Yjg1ODU5OTVjNS4uNWEyNzAzMWRmZjFhNWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oXG5AQCAtNzUsNiArNzUsOCBAQFxuIFxuIGV4dGVybiB2b2lkICpwY3B1X2Jhc2VfYWRkcjtcbiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyAqcGNwdV91bml0X29mZnNldHM7XG4rLyogcGVyY3B1IGxvY2FsIG1hcHBpbmcgYmFzZSAqL1xuK2V4dGVybiB2b2lkICpwY3B1X2xvY2FsX2Jhc2U7XG4gXG4gc3RydWN0IHBjcHVfZ3JvdXBfaW5mbyB7XG4gXHRpbnRcdFx0XHRucl91bml0cztcdC8qIGFsaWduZWQgIyBvZiB1bml0cyAqL1xuQEAgLTExNCw3ICsxMTYsNyBAQCBleHRlcm4gc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqIF9faW5pdCBwY3B1X2FsbG9jX2FsbG9jX2luZm8oaW50IG5yX2dyb3VwcyxcbiBleHRlcm4gdm9pZCBfX2luaXQgcGNwdV9mcmVlX2FsbG9jX2luZm8oc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWkpO1xuIFxuIGV4dGVybiB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLFxuLVx0XHRcdFx0XHQgdm9pZCAqYmFzZV9hZGRyKTtcbitcdFx0XHRcdFx0IHZvaWQgKmJhc2VfYWRkciwgdm9pZCAqbG9jYWxfYmFzZSk7XG4gXG4gZXh0ZXJuIGludCBfX2luaXQgcGNwdV9lbWJlZF9maXJzdF9jaHVuayhzaXplX3QgcmVzZXJ2ZWRfc2l6ZSwgc2l6ZV90IGR5bl9zaXplLFxuIFx0XHRcdFx0c2l6ZV90IGF0b21fc2l6ZSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvcGdhbGxvYy5oXG5pbmRleCA5MTc0ZmE1OWJiYzU0ZC4uMDYyYzY0YTVkNGJkMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wZ2FsbG9jLmhcbkBAIC0yNiw0ICsyNiwxNyBAQFxuIFx0XHRcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XHRcdFxcXG4gXHR9IHdoaWxlICgwKVxuIFxuKyNpZm5kZWYgQ09ORklHX0FSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXG4rI2RlZmluZSBwdWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwdWQsIHBtZClcdFx0XHRcdFxcXG4rXHRkbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdHB1ZF9wb3B1bGF0ZShcdTAwMjZpbml0X21tLCBwdWQsIHBtZCk7XHRcdFx0XFxcbitcdH0gd2hpbGUgKDApXG4rI2VuZGlmXG4rXG4rI2lmbmRlZiBDT05GSUdfQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcbisjZGVmaW5lIHBtZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHBtZCwgcHRlKVx0XHRcdFx0XFxcbitcdGRvIHtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWQsIHB0ZSk7XHRcdFxcXG4rXHR9IHdoaWxlICgwKVxuKyNlbmRpZlxuICNlbmRpZiAvKiBfTElOVVhfUEdBTExPQ19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaFxuaW5kZXggZDg3ZGM3Zjc3ZjRlOGEuLmRhZjk5NjVhMTExZDFmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oXG5AQCAtMzEzLDYgKzMxMyw5IEBAIHN0cnVjdCB2bV9zdHJ1Y3QgKipwY3B1X2dldF92bV9hcmVhcyhjb25zdCB1bnNpZ25lZCBsb25nICpvZmZzZXRzLFxuIFx0XHRcdFx0ICAgICBzaXplX3QgYWxpZ24pO1xuIFxuIHZvaWQgcGNwdV9mcmVlX3ZtX2FyZWFzKHN0cnVjdCB2bV9zdHJ1Y3QgKip2bXMsIGludCBucl92bXMpO1xuK3N0cnVjdCB2bV9zdHJ1Y3QgKnBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBoaW50LFxuK1x0XHRcdFx0ICAgICBpbnQgdW5pdF9zaXplLCBzaXplX3QgYWxpZ24pO1xuK1xuICMgZWxzZVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZtX3N0cnVjdCAqKlxuIHBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWdcbmluZGV4IDllMGNhNDgyNDkwNTRmLi5lMTkxMGMzMzI2Mzg1MSAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbisrKyBiL21tL0tjb25maWdcbkBAIC0xMDYxLDYgKzEwNjEsOSBAQCBjb25maWcgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktcbiBjb25maWcgVVNFX1BFUkNQVV9OVU1BX05PREVfSURcbiBcdGJvb2xcbiBcbitjb25maWcgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuK1x0Ym9vbFxuK1xuIGNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxuIFx0Ym9vbFxuIFxuQEAgLTE1MDksNiArMTUxMiwxMiBAQCBjb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXG4gXG4gXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gXG4rY29uZmlnIEFSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DXG4rXHRib29sXG4rXG4rY29uZmlnIEFSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXG4rXHRib29sXG4rXG4gc291cmNlIFwibW0vZGFtb24vS2NvbmZpZ1wiXG4gXG4gZW5kbWVudVxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAxODFlNzlmMWQ2YTIwNy4uOWQ5ZjA4Y2IyNmExMTQgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMTU1MiwxMCArMTU1MiwxMyBAQCB2b2lkIGNsZWFyX3ZtX3VuaW5pdGlhbGl6ZWRfZmxhZyhzdHJ1Y3Qgdm1fc3RydWN0ICp2bSk7XG4gaW50IF9fbXVzdF9jaGVjayBfX3ZtYXBfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBwZ3Byb3RfdCBwcm90LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9zaGlmdCk7XG4raW50IF9fbXVzdF9jaGVjayB2bWFwX3JhbmdlX25vZmx1c2gocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXNfYWRkcixcbitcdFx0XHRwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpO1xuIFxuIHZvaWQgdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuIFxuLXZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XG4rdm9pZCBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHBnZF90ICpwZ2RpciwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfc2luZ2xlX3RocmVhZGVkX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuZGlmZiAtLWdpdCBhL21tL2ttc2FuL2hvb2tzLmMgYi9tbS9rbXNhbi9ob29rcy5jXG5pbmRleCA4ZjIyZDFmMjI5ODEzZi4uZTJhMGZhZjM0NGI5MWIgMTAwNjQ0XG4tLS0gYS9tbS9rbXNhbi9ob29rcy5jXG4rKysgYi9tbS9rbXNhbi9ob29rcy5jXG5AQCAtMTM1LDggKzEzNSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZtYWxsb2Nfb3JpZ2luKHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcbiB2b2lkIGttc2FuX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbi1cdF9fdnVubWFwX3JhbmdlX25vZmx1c2godm1hbGxvY19zaGFkb3coc3RhcnQpLCB2bWFsbG9jX3NoYWRvdyhlbmQpKTtcbi1cdF9fdnVubWFwX3JhbmdlX25vZmx1c2godm1hbGxvY19vcmlnaW4oc3RhcnQpLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcbitcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIHZtYWxsb2Nfc2hhZG93KHN0YXJ0KSwgdm1hbGxvY19zaGFkb3coZW5kKSk7XG4rXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2bWFsbG9jX29yaWdpbihzdGFydCksIHZtYWxsb2Nfb3JpZ2luKGVuZCkpO1xuIFx0Zmx1c2hfY2FjaGVfdm1hcCh2bWFsbG9jX3NoYWRvdyhzdGFydCksIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xuIFx0Zmx1c2hfY2FjaGVfdm1hcCh2bWFsbG9jX29yaWdpbihzdGFydCksIHZtYWxsb2Nfb3JpZ2luKGVuZCkpO1xuIH1cbkBAIC0xODEsNyArMTgxLDcgQEAgaW50IGttc2FuX2lvcmVtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHR2bWFsbG9jX29yaWdpbihzdGFydCArIG9mZiArIFBBR0VfU0laRSksIHByb3QsIFx1MDAyNm9yaWdpbixcbiBcdFx0XHRQQUdFX1NISUZUKTtcbiBcdFx0aWYgKG1hcHBlZCkge1xuLVx0XHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goXG4rXHRcdFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCxcbiBcdFx0XHRcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0ICsgb2ZmKSxcbiBcdFx0XHRcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0ICsgb2ZmICsgUEFHRV9TSVpFKSk7XG4gXHRcdFx0ZXJyID0gbWFwcGVkO1xuQEAgLTIwMywxMCArMjAzLDEwIEBAIGludCBrbXNhbl9pb3JlbWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0X19mcmVlX3BhZ2VzKHNoYWRvdywgMSk7XG4gXHRcdGlmIChvcmlnaW4pXG4gXHRcdFx0X19mcmVlX3BhZ2VzKG9yaWdpbiwgMSk7XG4tXHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goXG4rXHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsXG4gXHRcdFx0dm1hbGxvY19zaGFkb3coc3RhcnQpLFxuIFx0XHRcdHZtYWxsb2Nfc2hhZG93KHN0YXJ0ICsgY2xlYW4gKiBQQUdFX1NJWkUpKTtcbi1cdFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChcbitcdFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCxcbiBcdFx0XHR2bWFsbG9jX29yaWdpbihzdGFydCksXG4gXHRcdFx0dm1hbGxvY19vcmlnaW4oc3RhcnQgKyBjbGVhbiAqIFBBR0VfU0laRSkpO1xuIFx0fVxuQEAgLTIzMyw4ICsyMzMsOCBAQCB2b2lkIGttc2FuX2lvdW5tYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiBcdCAgICAgaSsrLCB2X3NoYWRvdyArPSBQQUdFX1NJWkUsIHZfb3JpZ2luICs9IFBBR0VfU0laRSkge1xuIFx0XHRzaGFkb3cgPSBrbXNhbl92bWFsbG9jX3RvX3BhZ2Vfb3JfbnVsbCgodm9pZCAqKXZfc2hhZG93KTtcbiBcdFx0b3JpZ2luID0ga21zYW5fdm1hbGxvY190b19wYWdlX29yX251bGwoKHZvaWQgKil2X29yaWdpbik7XG4tXHRcdF9fdnVubWFwX3JhbmdlX25vZmx1c2godl9zaGFkb3csIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xuLVx0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHZfb3JpZ2luLCB2bWFsbG9jX29yaWdpbihlbmQpKTtcbitcdFx0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChpbml0X21tLnBnZCwgdl9zaGFkb3csIHZtYWxsb2Nfc2hhZG93KGVuZCkpO1xuK1x0XHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCB2X29yaWdpbiwgdm1hbGxvY19vcmlnaW4oZW5kKSk7XG4gXHRcdGlmIChzaGFkb3cpXG4gXHRcdFx0X19mcmVlX3BhZ2VzKHNoYWRvdywgMSk7XG4gXHRcdGlmIChvcmlnaW4pXG5kaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LWludGVybmFsLmggYi9tbS9wZXJjcHUtaW50ZXJuYWwuaFxuaW5kZXggOGNiZTAzOWJmODQ3YWMuLjRkNDYxMzA1MjQzYmYwIDEwMDY0NFxuLS0tIGEvbW0vcGVyY3B1LWludGVybmFsLmhcbisrKyBiL21tL3BlcmNwdS1pbnRlcm5hbC5oXG5AQCAtNjMsMTEgKzYzLDE0IEBAIHN0cnVjdCBwY3B1X2NodW5rIHtcbiBcdCAqIGNodW5rX21kLlxuIFx0ICovXG4gXHR2b2lkXHRcdFx0KmJhc2VfYWRkciBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuK1x0LyogcGVyY3B1IGxvY2FsIGJhc2UgYWRkcmVzcyBvZiB0aGUgY2h1bmsgKi9cbitcdHZvaWQgICAgICAgICAgICAgICAgICAgICpsb2NhbF9iYXNlO1xuIFxuIFx0dW5zaWduZWQgbG9uZ1x0XHQqYWxsb2NfbWFwO1x0LyogYWxsb2NhdGlvbiBtYXAgKi9cbiBcdHN0cnVjdCBwY3B1X2Jsb2NrX21kXHQqbWRfYmxvY2tzO1x0LyogbWV0YWRhdGEgYmxvY2tzICovXG4gXG4gXHR2b2lkXHRcdFx0KmRhdGE7XHRcdC8qIGNodW5rIGRhdGEgKi9cbitcdHZvaWRcdFx0XHQqbG9jYWxfZGF0YTtcdC8qIGNodW5rIGxvY2FsIHZtICovXG4gXHRib29sXHRcdFx0aW1tdXRhYmxlO1x0Lyogbm8gW2RlXXBvcHVsYXRpb24gYWxsb3dlZCAqL1xuIFx0Ym9vbFx0XHRcdGlzb2xhdGVkO1x0LyogaXNvbGF0ZWQgZnJvbSBhY3RpdmUgY2h1bmtcbiBcdFx0XHRcdFx0XHQgICBzbG90cyAqL1xuQEAgLTE2Miw2ICsxNjUsMTcgQEAgc3RhdGljIGlubGluZSBzaXplX3QgcGNwdV9vYmpfZnVsbF9zaXplKHNpemVfdCBzaXplKVxuIFx0cmV0dXJuIHNpemUgKiBudW1fcG9zc2libGVfY3B1cygpICsgZXh0cmFfc2l6ZTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4rZXh0ZXJuIHZvaWQgX19pbml0IG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IG5yKVxuK3tcbitcdHJldHVybjtcbit9XG4rI2VuZGlmXG4rXG4gI2lmZGVmIENPTkZJR19QRVJDUFVfU1RBVFNcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvbW0vcGVyY3B1LXZtLmMgYi9tbS9wZXJjcHUtdm0uY1xuaW5kZXggNGY1OTM3MDkwNTkwZDguLjVkZWNhYWQ3NjQwZmRjIDEwMDY0NFxuLS0tIGEvbW0vcGVyY3B1LXZtLmNcbisrKyBiL21tL3BlcmNwdS12bS5jXG5AQCAtMTEyLDYgKzExMiwxMCBAQCBzdGF0aWMgaW50IHBjcHVfYWxsb2NfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuK2V4dGVybiBwZ2RfdCAqcGVyY3B1X3BnZFtOUl9DUFVTXTtcbisjZW5kaWZcbitcbiAvKipcbiAgKiBwY3B1X3ByZV91bm1hcF9mbHVzaCAtIGZsdXNoIGNhY2hlIHByaW9yIHRvIHVubWFwcGluZ1xuICAqIEBjaHVuazogY2h1bmsgdGhlIHJlZ2lvbnMgdG8gYmUgZmx1c2hlZCBiZWxvbmdzIHRvXG5AQCAtMTMwLDYgKzEzNCwxMSBAQCBzdGF0aWMgdm9pZCBwY3B1X3ByZV91bm1hcF9mbHVzaChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXG4gXHRmbHVzaF9jYWNoZV92dW5tYXAoXG4gXHRcdHBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9sb3dfdW5pdF9jcHUsIHBhZ2Vfc3RhcnQpLFxuIFx0XHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfaGlnaF91bml0X2NwdSwgcGFnZV9lbmQpKTtcbitcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitcdGZsdXNoX2NhY2hlX3Z1bm1hcCgodW5zaWduZWQgbG9uZyljaHVuay1cdTAwM2Vsb2NhbF9iYXNlICsgKHBhZ2Vfc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxuK1x0XHRcdCh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgKyAocGFnZV9lbmQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbisjZW5kaWZcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5yX3BhZ2VzKVxuQEAgLTEzNyw2ICsxNDYsMjAgQEAgc3RhdGljIHZvaWQgX19wY3B1X3VubWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5yX3BhZ2VzKVxuIFx0dnVubWFwX3JhbmdlX25vZmx1c2goYWRkciwgYWRkciArIChucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitzdGF0aWMgdm9pZCBfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxuK1x0XHRcdCAgICBpbnQgbnJfcGFnZXMpXG4re1xuK1x0X192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZXJjcHVfcGdkW2NwdV0sIHZpcnQsIHZpcnQgKyAobnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgdm9pZCBfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LFxuK1x0XHRcdCAgICBpbnQgbnJfcGFnZXMpXG4re1xuK1x0cmV0dXJuO1xuK31cbisjZW5kaWZcbitcbiAvKipcbiAgKiBwY3B1X3VubWFwX3BhZ2VzIC0gdW5tYXAgcGFnZXMgb3V0IG9mIGEgcGNwdV9jaHVua1xuICAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3RcbkBAIC0xNjYsNiArMTg5LDEwIEBAIHN0YXRpYyB2b2lkIHBjcHVfdW5tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0XHR9XG4gXHRcdF9fcGNwdV91bm1hcF9wYWdlcyhwY3B1X2NodW5rX2FkZHIoY2h1bmssIGNwdSwgcGFnZV9zdGFydCksXG4gXHRcdFx0XHQgICBwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpO1xuK1xuK1x0XHRfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwoY3B1LFxuK1x0XHRcdFx0XHQodW5zaWduZWQgbG9uZyljaHVuay1cdTAwM2Vsb2NhbF9iYXNlICsgKHBhZ2Vfc3RhcnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxuK1x0XHRcdFx0XHRwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpO1xuIFx0fVxuIH1cbiBcbkBAIC0xODgsNiArMjE1LDEyIEBAIHN0YXRpYyB2b2lkIHBjcHVfcG9zdF91bm1hcF90bGJfZmx1c2goc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShcbiBcdFx0cGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2xvd191bml0X2NwdSwgcGFnZV9zdGFydCksXG4gXHRcdHBjcHVfY2h1bmtfYWRkcihjaHVuaywgcGNwdV9oaWdoX3VuaXRfY3B1LCBwYWdlX2VuZCkpO1xuK1xuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuK1x0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShcbitcdFx0KHVuc2lnbmVkIGxvbmcpY2h1bmstXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX3N0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbitcdFx0KHVuc2lnbmVkIGxvbmcpY2h1bmstXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX2VuZCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuKyNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuQEAgLTE5Nyw2ICsyMzAsMzIgQEAgc3RhdGljIGludCBfX3BjcHVfbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbiBcdFx0XHRQQUdFX0tFUk5FTCwgcGFnZXMsIFBBR0VfU0hJRlQsIEdGUF9LRVJORUwpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitzdGF0aWMgaW50IF9fcGNwdV9tYXBfcGFnZXNfbG9jYWwodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB2aXJ0LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuK1x0XHRcdCAgICBpbnQgbnJfcGFnZXMpXG4re1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcbitcdFx0ZXJyID0gdm1hcF9yYW5nZV9ub2ZsdXNoKHBlcmNwdV9wZ2RbY3B1XSwgdmlydCwgdmlydCArIFBBR0VfU0laRSxcbitcdFx0XHRcdHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIFBBR0VfS0VSTkVMLCBQQUdFX1NISUZUKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1xuK1x0XHR2aXJ0ICs9IFBBR0VfU0laRTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGludCBfX3BjcHVfbWFwX3BhZ2VzX2xvY2FsKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbitcdFx0XHQgICAgaW50IG5yX3BhZ2VzKVxuK3tcbitcdHJldHVybiAwO1xuK31cbisjZW5kaWZcbitcbiAvKipcbiAgKiBwY3B1X21hcF9wYWdlcyAtIG1hcCBwYWdlcyBpbnRvIGEgcGNwdV9jaHVua1xuICAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3RcbkBAIC0yMjQsNiArMjgzLDEzIEBAIHN0YXRpYyBpbnQgcGNwdV9tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gZXJyO1xuIFxuK1x0XHRlcnIgPSBfX3BjcHVfbWFwX3BhZ2VzX2xvY2FsKGNwdSxcbitcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcpY2h1bmstXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX3N0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbitcdFx0XHRcdFx0XHUwMDI2cGFnZXNbcGNwdV9wYWdlX2lkeChjcHUsIHBhZ2Vfc3RhcnQpXSxcbitcdFx0XHRcdFx0cGFnZV9lbmQgLSBwYWdlX3N0YXJ0KTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcbiBcdFx0Zm9yIChpID0gcGFnZV9zdGFydDsgaSBcdTAwM2MgcGFnZV9lbmQ7IGkrKylcbiBcdFx0XHRwY3B1X3NldF9wYWdlX2NodW5rKHBhZ2VzW3BjcHVfcGFnZV9pZHgoY3B1LCBpKV0sXG4gXHRcdFx0XHRcdCAgICBjaHVuayk7XG5AQCAtMjMzLDYgKzI5OSw5IEBAIHN0YXRpYyBpbnQgcGNwdV9tYXBfcGFnZXMoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KHRjcHUpIHtcbiBcdFx0X19wY3B1X3VubWFwX3BhZ2VzKHBjcHVfY2h1bmtfYWRkcihjaHVuaywgdGNwdSwgcGFnZV9zdGFydCksXG4gXHRcdFx0XHQgICBwYWdlX2VuZCAtIHBhZ2Vfc3RhcnQpO1xuK1x0XHRfX3BjcHVfdW5tYXBfcGFnZXNfbG9jYWwodGNwdSxcbitcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcpY2h1bmstXHUwMDNlbG9jYWxfYmFzZSArIChwYWdlX3N0YXJ0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSxcbitcdFx0XHRcdFx0cGFnZV9lbmQgLSBwYWdlX3N0YXJ0KTtcbiBcdFx0aWYgKHRjcHUgPT0gY3B1KVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTI1OCw2ICszMjcsMTEgQEAgc3RhdGljIHZvaWQgcGNwdV9wb3N0X21hcF9mbHVzaChzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssXG4gXHRmbHVzaF9jYWNoZV92bWFwKFxuIFx0XHRwY3B1X2NodW5rX2FkZHIoY2h1bmssIHBjcHVfbG93X3VuaXRfY3B1LCBwYWdlX3N0YXJ0KSxcbiBcdFx0cGNwdV9jaHVua19hZGRyKGNodW5rLCBwY3B1X2hpZ2hfdW5pdF9jcHUsIHBhZ2VfZW5kKSk7XG4rXG4rI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4rXHRmbHVzaF9jYWNoZV92bWFwKCh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgKyAocGFnZV9zdGFydCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksXG4rXHRcdFx0ICh1bnNpZ25lZCBsb25nKWNodW5rLVx1MDAzZWxvY2FsX2Jhc2UgKyAocGFnZV9lbmQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbisjZW5kaWZcbiB9XG4gXG4gLyoqXG5AQCAtMzQ5LDYgKzQyMywyNCBAQCBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY3JlYXRlX2NodW5rKGdmcF90IGdmcClcbiBcdGNodW5rLVx1MDAzZWRhdGEgPSB2bXM7XG4gXHRjaHVuay1cdTAwM2ViYXNlX2FkZHIgPSB2bXNbMF0tXHUwMDNlYWRkciAtIHBjcHVfZ3JvdXBfb2Zmc2V0c1swXTtcbiBcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitcdHVuc2lnbmVkIGxvbmcgZGVsdGEgPSAodW5zaWduZWQgbG9uZyljaHVuay1cdTAwM2ViYXNlX2FkZHIgLSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgaGludCA9IGRlbHRhICsgKHVuc2lnbmVkIGxvbmcpcGNwdV9sb2NhbF9iYXNlO1xuK1x0c3RydWN0IHZtX3N0cnVjdCAqbG9jYWxfdm0gPSBwY3B1X2dldF9sb2NhbF92bV9hcmVhKGhpbnQsXG4rXHRcdFx0XHRcdHBjcHVfdW5pdF9zaXplLCBwY3B1X2F0b21fc2l6ZSk7XG4rXHRpZiAoIWxvY2FsX3ZtKSB7XG4rXHRcdHBjcHVfZnJlZV92bV9hcmVhcyh2bXMsIHBjcHVfbnJfZ3JvdXBzKTtcbitcdFx0cGNwdV9mcmVlX2NodW5rKGNodW5rKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRjaHVuay1cdTAwM2Vsb2NhbF9iYXNlID0gbG9jYWxfdm0tXHUwMDNlYWRkcjtcbitcdGNodW5rLVx1MDAzZWxvY2FsX2RhdGEgPSAodm9pZCAqKWxvY2FsX3ZtO1xuKyNlbHNlXG4rXHRjaHVuay1cdTAwM2Vsb2NhbF9iYXNlID0gMDtcbitcdGNodW5rLVx1MDAzZWxvY2FsX2RhdGEgPSBOVUxMO1xuKyNlbmRpZlxuK1xuIFx0cGNwdV9zdGF0c19jaHVua19hbGxvYygpO1xuIFx0dHJhY2VfcGVyY3B1X2NyZWF0ZV9jaHVuayhjaHVuay1cdTAwM2ViYXNlX2FkZHIpO1xuIFxuQEAgLTM2NSw2ICs0NTcsOCBAQCBzdGF0aWMgdm9pZCBwY3B1X2Rlc3Ryb3lfY2h1bmsoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rKVxuIFxuIFx0aWYgKGNodW5rLVx1MDAzZWRhdGEpXG4gXHRcdHBjcHVfZnJlZV92bV9hcmVhcyhjaHVuay1cdTAwM2VkYXRhLCBwY3B1X25yX2dyb3Vwcyk7XG4rXHRpZiAoY2h1bmstXHUwMDNlbG9jYWxfZGF0YSlcbitcdFx0ZnJlZV92bV9hcmVhKChzdHJ1Y3Qgdm1fc3RydWN0ICopY2h1bmstXHUwMDNlbG9jYWxfZGF0YSk7XG4gXHRwY3B1X2ZyZWVfY2h1bmsoY2h1bmspO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9wZXJjcHUuYyBiL21tL3BlcmNwdS5jXG5pbmRleCBiMDY3NmI4MDU0ZWQwOS4uOGIyNzNlZDhlNWE4YmIgMTAwNjQ0XG4tLS0gYS9tbS9wZXJjcHUuY1xuKysrIGIvbW0vcGVyY3B1LmNcbkBAIC0xNDUsNiArMTQ1LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBwY3B1X2hpZ2hfdW5pdF9jcHUgX19yb19hZnRlcl9pbml0O1xuIFxuIC8qIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBjaHVuayB3aGljaCBzdGFydHMgd2l0aCB0aGUga2VybmVsIHN0YXRpYyBhcmVhICovXG4gdm9pZCAqcGNwdV9iYXNlX2FkZHIgX19yb19hZnRlcl9pbml0O1xuKy8qIFRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBjaHVuayBsb2NhbCBtYXBwaW5nICovXG4rdm9pZCAqcGNwdV9sb2NhbF9iYXNlIF9fcm9fYWZ0ZXJfaW5pdDtcbiBcbiBzdGF0aWMgY29uc3QgaW50ICpwY3B1X3VuaXRfbWFwIF9fcm9fYWZ0ZXJfaW5pdDtcdFx0LyogY3B1IC1cdTAwM2UgdW5pdCAqL1xuIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnBjcHVfdW5pdF9vZmZzZXRzIF9fcm9fYWZ0ZXJfaW5pdDtcdC8qIGNwdSAtXHUwMDNlIHVuaXQgb2Zmc2V0ICovXG5AQCAtMTMzOCw2ICsxMzQwLDcgQEAgc3RhdGljIHZvaWQgcGNwdV9pbml0X21kX2Jsb2NrcyhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmspXG4gLyoqXG4gICogcGNwdV9hbGxvY19maXJzdF9jaHVuayAtIGNyZWF0ZXMgY2h1bmtzIHRoYXQgc2VydmUgdGhlIGZpcnN0IGNodW5rXG4gICogQHRtcF9hZGRyOiB0aGUgc3RhcnQgb2YgdGhlIHJlZ2lvbiBzZXJ2ZWRcbisgKiBAbG9jYWxfdG1wOiB0aGUgc3RhcnQgb2YgdGhlIGxvY2FsIHBlcmNwdSByZWdpb24gc2VydmVkXG4gICogQG1hcF9zaXplOiBzaXplIG9mIHRoZSByZWdpb24gc2VydmVkXG4gICpcbiAgKiBUaGlzIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgY2h1bmtzIHRoYXQgc2VydmUgdGhlIGZpcnN0IGNodW5rLiAgVGhlXG5AQCAtMTM0OSwxNSArMTM1MiwxNiBAQCBzdGF0aWMgdm9pZCBwY3B1X2luaXRfbWRfYmxvY2tzKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaylcbiAgKiBDaHVuayBzZXJ2aW5nIHRoZSByZWdpb24gYXQgQHRtcF9hZGRyIG9mIEBtYXBfc2l6ZS5cbiAgKi9cbiBzdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKiBfX2luaXQgcGNwdV9hbGxvY19maXJzdF9jaHVuayh1bnNpZ25lZCBsb25nIHRtcF9hZGRyLFxuLVx0XHRcdFx0XHRcdFx0IGludCBtYXBfc2l6ZSlcbitcdFx0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGxvY2FsX3RtcCwgaW50IG1hcF9zaXplKVxuIHtcbiBcdHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaztcbi1cdHVuc2lnbmVkIGxvbmcgYWxpZ25lZF9hZGRyO1xuK1x0dW5zaWduZWQgbG9uZyBhbGlnbmVkX2FkZHIsIGFsaWduZWRfbG9jYWw7XG4gXHRpbnQgc3RhcnRfb2Zmc2V0LCBvZmZzZXRfYml0cywgcmVnaW9uX3NpemUsIHJlZ2lvbl9iaXRzO1xuIFx0c2l6ZV90IGFsbG9jX3NpemU7XG4gXG4gXHQvKiByZWdpb24gY2FsY3VsYXRpb25zICovXG4gXHRhbGlnbmVkX2FkZHIgPSB0bXBfYWRkciBcdTAwMjYgUEFHRV9NQVNLO1xuK1x0YWxpZ25lZF9sb2NhbCA9IGxvY2FsX3RtcCBcdTAwMjYgUEFHRV9NQVNLO1xuIFxuIFx0c3RhcnRfb2Zmc2V0ID0gdG1wX2FkZHIgLSBhbGlnbmVkX2FkZHI7XG4gXHRyZWdpb25fc2l6ZSA9IEFMSUdOKHN0YXJ0X29mZnNldCArIG1hcF9zaXplLCBQQUdFX1NJWkUpO1xuQEAgLTEzNzAsNiArMTM3NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqIF9faW5pdCBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHVuc2lnbmVkIGxvbmcgdG1wX2FkZHIsXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjaHVuay1cdTAwM2VsaXN0KTtcbiBcbiBcdGNodW5rLVx1MDAzZWJhc2VfYWRkciA9ICh2b2lkICopYWxpZ25lZF9hZGRyO1xuK1x0Y2h1bmstXHUwMDNlbG9jYWxfYmFzZSA9ICh2b2lkICopYWxpZ25lZF9sb2NhbDtcbiBcdGNodW5rLVx1MDAzZXN0YXJ0X29mZnNldCA9IHN0YXJ0X29mZnNldDtcbiBcdGNodW5rLVx1MDAzZWVuZF9vZmZzZXQgPSByZWdpb25fc2l6ZSAtIGNodW5rLVx1MDAzZXN0YXJ0X29mZnNldCAtIG1hcF9zaXplO1xuIFxuQEAgLTI1NjIsNyArMjU2Nyw3IEBAIHN0YXRpYyB2b2lkIHBjcHVfZHVtcF9hbGxvY19pbmZvKGNvbnN0IGNoYXIgKmx2bCxcbiAgKiBhbmQgYXZhaWxhYmxlIGZvciBkeW5hbWljIGFsbG9jYXRpb24gbGlrZSBhbnkgb3RoZXIgY2h1bmsuXG4gICovXG4gdm9pZCBfX2luaXQgcGNwdV9zZXR1cF9maXJzdF9jaHVuayhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSxcbi1cdFx0XHRcdCAgIHZvaWQgKmJhc2VfYWRkcilcbitcdFx0XHRcdCAgIHZvaWQgKmJhc2VfYWRkciwgdm9pZCAqbG9jYWxfYmFzZSlcbiB7XG4gXHRzaXplX3Qgc2l6ZV9zdW0gPSBhaS1cdTAwM2VzdGF0aWNfc2l6ZSArIGFpLVx1MDAzZXJlc2VydmVkX3NpemUgKyBhaS1cdTAwM2VkeW5fc2l6ZTtcbiBcdHNpemVfdCBzdGF0aWNfc2l6ZSwgZHluX3NpemU7XG5AQCAtMjU3Miw3ICsyNTc3LDcgQEAgdm9pZCBfX2luaXQgcGNwdV9zZXR1cF9maXJzdF9jaHVuayhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSxcbiBcdHVuc2lnbmVkIGludCBjcHU7XG4gXHRpbnQgKnVuaXRfbWFwO1xuIFx0aW50IGdyb3VwLCB1bml0LCBpO1xuLVx0dW5zaWduZWQgbG9uZyB0bXBfYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgdG1wX2FkZHIsIGxvY2FsX3RtcCA9IDA7XG4gXHRzaXplX3QgYWxsb2Nfc2l6ZTtcbiBcbiAjZGVmaW5lIFBDUFVfU0VUVVBfQlVHX09OKGNvbmQpXHRkbyB7XHRcdFx0XHRcdFxcXG5AQCAtMjcxMywxMSArMjcxOCwxNSBAQCB2b2lkIF9faW5pdCBwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGNvbnN0IHN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpLFxuIFx0ICogICBjaHVuay5cbiBcdCAqL1xuIFx0dG1wX2FkZHIgPSAodW5zaWduZWQgbG9uZyliYXNlX2FkZHIgKyBzdGF0aWNfc2l6ZTtcbitcdGlmIChsb2NhbF9iYXNlKVxuK1x0XHRsb2NhbF90bXAgPSAodW5zaWduZWQgbG9uZylsb2NhbF9iYXNlICsgc3RhdGljX3NpemU7XG4gXHRpZiAoYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZSlcbi1cdFx0cGNwdV9yZXNlcnZlZF9jaHVuayA9IHBjcHVfYWxsb2NfZmlyc3RfY2h1bmsodG1wX2FkZHIsXG4rXHRcdHBjcHVfcmVzZXJ2ZWRfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLCBsb2NhbF90bXAsXG4gXHRcdFx0XHRcdFx0YWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZSk7XG4gXHR0bXBfYWRkciA9ICh1bnNpZ25lZCBsb25nKWJhc2VfYWRkciArIHN0YXRpY19zaXplICsgYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZTtcbi1cdHBjcHVfZmlyc3RfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLCBkeW5fc2l6ZSk7XG4rXHRpZiAobG9jYWxfYmFzZSlcbitcdFx0bG9jYWxfdG1wID0gKHVuc2lnbmVkIGxvbmcpbG9jYWxfYmFzZSArIHN0YXRpY19zaXplICsgYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZTtcbitcdHBjcHVfZmlyc3RfY2h1bmsgPSBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rKHRtcF9hZGRyLCBsb2NhbF90bXAsIGR5bl9zaXplKTtcbiBcbiBcdHBjcHVfbnJfZW1wdHlfcG9wX3BhZ2VzID0gcGNwdV9maXJzdF9jaHVuay1cdTAwM2Vucl9lbXB0eV9wb3BfcGFnZXM7XG4gXHRwY3B1X2NodW5rX3JlbG9jYXRlKHBjcHVfZmlyc3RfY2h1bmssIC0xKTtcbkBAIC0zMTA4LDcgKzMxMTcsNyBAQCBpbnQgX19pbml0IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHNpemVfdCBkeW5fc2l6ZSxcbiBcdFx0UEZOX0RPV04oc2l6ZV9zdW0pLCBhaS1cdTAwM2VzdGF0aWNfc2l6ZSwgYWktXHUwMDNlcmVzZXJ2ZWRfc2l6ZSxcbiBcdFx0YWktXHUwMDNlZHluX3NpemUsIGFpLVx1MDAzZXVuaXRfc2l6ZSk7XG4gXG4tXHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCBiYXNlKTtcbitcdHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIGJhc2UsIE5VTEwpO1xuIFx0Z290byBvdXRfZnJlZTtcbiBcbiBvdXRfZnJlZV9hcmVhczpcbkBAIC0zMTYzLDcgKzMxNzIsNyBAQCB2b2lkIF9faW5pdCBfX3dlYWsgcGNwdV9wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9uZyBhZGRyKVxuIFx0cHVkID0gcHVkX29mZnNldChwNGQsIGFkZHIpO1xuIFx0aWYgKHB1ZF9ub25lKCpwdWQpKSB7XG4gXHRcdHBtZCA9IG1lbWJsb2NrX2FsbG9jX29yX3BhbmljKFBNRF9UQUJMRV9TSVpFLCBQTURfVEFCTEVfU0laRSk7XG4tXHRcdHB1ZF9wb3B1bGF0ZShcdTAwMjZpbml0X21tLCBwdWQsIHBtZCk7XG4rXHRcdHB1ZF9wb3B1bGF0ZV9zeW5jKGFkZHIsIHB1ZCwgcG1kKTtcbiBcdH1cbiBcbiBcdHBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTtcbkBAIC0zMTcxLDcgKzMxODAsNyBAQCB2b2lkIF9faW5pdCBfX3dlYWsgcGNwdV9wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9uZyBhZGRyKVxuIFx0XHRwdGVfdCAqbmV3O1xuIFxuIFx0XHRuZXcgPSBtZW1ibG9ja19hbGxvY19vcl9wYW5pYyhQVEVfVEFCTEVfU0laRSwgUFRFX1RBQkxFX1NJWkUpO1xuLVx0XHRwbWRfcG9wdWxhdGVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHBtZCwgbmV3KTtcbitcdFx0cG1kX3BvcHVsYXRlX3N5bmMoYWRkciwgcG1kLCBuZXcpO1xuIFx0fVxuIFxuIFx0cmV0dXJuO1xuQEAgLTMxOTQsNiArMzIwMyw3IEBAIHZvaWQgX19pbml0IF9fd2VhayBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpXG4gaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdCBjcHVfdG9fbmRfZm4pXG4ge1xuIFx0c3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3Qgdm07XG4rXHRzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCBwY3B1X3ZtO1xuIFx0c3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWk7XG4gXHRjaGFyIHBzaXplX3N0clsxNl07XG4gXHRpbnQgdW5pdF9wYWdlcztcbkBAIC0zMjQzLDExICszMjUzLDI4IEBAIGludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3RcbiBcdH1cbiBcbiBcdC8qIGFsbG9jYXRlIHZtIGFyZWEsIG1hcCB0aGUgcGFnZXMgYW5kIGNvcHkgc3RhdGljIGRhdGEgKi9cbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitcdHZtLmZsYWdzID0gVk1fQUxMT0M7XG4rXHR2bS5hZGRyID0gKHZvaWQgKilBTElHTihQRVJDUFVfU1RBUlQsIFBBR0VfU0laRSk7XG4rXHR2bS5zaXplID0gbnVtX3Bvc3NpYmxlX2NwdXMoKSAqIGFpLVx1MDAzZXVuaXRfc2l6ZTtcbitcdHZtX2FyZWFfYWRkX2Vhcmx5KFx1MDAyNnZtKTtcbitcdGthc2FuX3BvcHVsYXRlX2Vhcmx5X3ZtX2FyZWFfc2hhZG93KHZtLmFkZHIsIHZtLnNpemUpO1xuK1xuK1x0cGNwdV92bS5mbGFncyA9IFZNX0FMTE9DO1xuK1x0cGNwdV92bS5hZGRyID0gKHZvaWQgKilBTElHTihMT0NBTF9QRVJDUFVfU1RBUlQsIFBBR0VfU0laRSk7XG4rXHRwY3B1X3ZtLnNpemUgPSBhaS1cdTAwM2V1bml0X3NpemU7XG4rXHR2bV9hcmVhX2FkZF9lYXJseShcdTAwMjZwY3B1X3ZtKTtcbitcdGthc2FuX3BvcHVsYXRlX2Vhcmx5X3ZtX2FyZWFfc2hhZG93KHBjcHVfdm0uYWRkciwgcGNwdV92bS5zaXplKTtcbisjZWxzZVxuIFx0dm0uZmxhZ3MgPSBWTV9BTExPQztcbiBcdHZtLnNpemUgPSBudW1fcG9zc2libGVfY3B1cygpICogYWktXHUwMDNldW5pdF9zaXplO1xuIFx0dm1fYXJlYV9yZWdpc3Rlcl9lYXJseShcdTAwMjZ2bSwgUEFHRV9TSVpFKTtcbiBcbitcdHBjcHVfdm0uYWRkciA9IE5VTEw7XG4rI2VuZGlmXG4rXG4gXHRmb3IgKHVuaXQgPSAwOyB1bml0IFx1MDAzYyBudW1fcG9zc2libGVfY3B1cygpOyB1bml0KyspIHtcbitcdFx0dW5zaWduZWQgaW50IGNwdSA9IGFpLVx1MDAzZWdyb3Vwc1swXS5jcHVfbWFwW3VuaXRdO1xuIFx0XHR1bnNpZ25lZCBsb25nIHVuaXRfYWRkciA9XG4gXHRcdFx0KHVuc2lnbmVkIGxvbmcpdm0uYWRkciArIHVuaXQgKiBhaS1cdTAwM2V1bml0X3NpemU7XG4gXG5AQCAtMzI2NCw2ICszMjkxLDE0IEBAIGludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3RcbiBcbiBcdFx0LyogY29weSBzdGF0aWMgZGF0YSAqL1xuIFx0XHRtZW1jcHkoKHZvaWQgKil1bml0X2FkZHIsIF9fcGVyX2NwdV9zdGFydCwgYWktXHUwMDNlc3RhdGljX3NpemUpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBNYXAgcGVyY3B1IGRhdGEgdG8gUEVSQ1BVIG1hcC5cbitcdFx0ICpcbitcdFx0ICogUENQVV9GQ19FTUJFRCBjYW4ndCBzdXBwb3J0IGl0LlxuK1x0XHQgKi9cbitcdFx0bWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayhjcHUsICh1bnNpZ25lZCBsb25nKXBjcHVfdm0uYWRkcixcbitcdFx0XHRcdFx1MDAyNnBhZ2VzW3VuaXQgKiB1bml0X3BhZ2VzXSwgdW5pdF9wYWdlcyk7XG4gXHR9XG4gXG4gXHQvKiB3ZSdyZSByZWFkeSwgY29tbWl0ICovXG5AQCAtMzI3MSw3ICszMzA2LDggQEAgaW50IF9faW5pdCBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoc2l6ZV90IHJlc2VydmVkX3NpemUsIHBjcHVfZmNfY3B1X3RvX25vZGVfZm5fdFxuIFx0XHR1bml0X3BhZ2VzLCBwc2l6ZV9zdHIsIGFpLVx1MDAzZXN0YXRpY19zaXplLFxuIFx0XHRhaS1cdTAwM2VyZXNlcnZlZF9zaXplLCBhaS1cdTAwM2VkeW5fc2l6ZSk7XG4gXG4tXHRwY3B1X3NldHVwX2ZpcnN0X2NodW5rKGFpLCB2bS5hZGRyKTtcbitcdHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoYWksIHZtLmFkZHIsIHBjcHVfdm0uYWRkcik7XG4rXHRwY3B1X2xvY2FsX2Jhc2UgPSBwY3B1X3ZtLmFkZHI7XG4gXHRnb3RvIG91dF9mcmVlX2FyO1xuIFxuIGVub21lbTpcbkBAIC0zMzUzLDcgKzMzODksNyBAQCB2b2lkIF9faW5pdCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpXG4gXHRhaS1cdTAwM2Vncm91cHNbMF0ubnJfdW5pdHMgPSAxO1xuIFx0YWktXHUwMDNlZ3JvdXBzWzBdLmNwdV9tYXBbMF0gPSAwO1xuIFxuLVx0cGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgZmMpO1xuK1x0cGNwdV9zZXR1cF9maXJzdF9jaHVuayhhaSwgZmMsIE5VTEwpO1xuIFx0cGNwdV9mcmVlX2FsbG9jX2luZm8oYWkpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zcGFyc2Utdm1lbW1hcC5jIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xuaW5kZXggOTllMmJlMzk2NzFiNjMuLjQ2M2MyZjhiNjExYzAzIDEwMDY0NFxuLS0tIGEvbW0vc3BhcnNlLXZtZW1tYXAuY1xuKysrIGIvbW0vc3BhcnNlLXZtZW1tYXAuY1xuQEAgLTE5OCw3ICsxOTgsNyBAQCBzdGF0aWMgcG1kX3QgKiBfX21lbWluaXQgdm1lbW1hcF9wbWRfcG9wdWxhdGUocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpblxuIFx0XHRpZiAoIXApXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHRcdGtlcm5lbF9wdGVfaW5pdChwKTtcbi1cdFx0cG1kX3BvcHVsYXRlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwbWQsIHApO1xuK1x0XHRwbWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwbWQsIHApO1xuIFx0fVxuIFx0cmV0dXJuIHBtZDtcbiB9XG5AQCAtMjExLDcgKzIxMSw3IEBAIHN0YXRpYyBwdWRfdCAqIF9fbWVtaW5pdCB2bWVtbWFwX3B1ZF9wb3B1bGF0ZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGluXG4gXHRcdGlmICghcClcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0cG1kX2luaXQocCk7XG4tXHRcdHB1ZF9wb3B1bGF0ZShcdTAwMjZpbml0X21tLCBwdWQsIHApO1xuK1x0XHRwdWRfcG9wdWxhdGVfc3luYyhhZGRyLCBwdWQsIHApO1xuIFx0fVxuIFx0cmV0dXJuIHB1ZDtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uM2Q5NGNhNGJiZDE3YjEgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbisrKyBiL21tL3ZtYWxsb2MuY1xuQEAgLTgwLDYgKzgwLDkgQEAgYm9vbCBpc192bWFsbG9jX2FkZHIoY29uc3Qgdm9pZCAqeClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcoeCk7XG4gXG4rXHRpZiAoaXNfcGVyY3B1X2FkZHIoYWRkcikpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuIFx0cmV0dXJuIGFkZHIgXHUwMDNlPSBWTUFMTE9DX1NUQVJUIFx1MDAyNlx1MDAyNiBhZGRyIFx1MDAzYyBWTUFMTE9DX0VORDtcbiB9XG4gRVhQT1JUX1NZTUJPTChpc192bWFsbG9jX2FkZHIpO1xuQEAgLTI5NSw5ICsyOTgsOSBAQCBzdGF0aWMgaW50IHZtYXBfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZtYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLVx0XHRcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcbi1cdFx0XHR1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXG4raW50IHZtYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4rXHRcdCAgICAgICBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3BhZ2Vfc2hpZnQpXG4ge1xuIFx0cGdkX3QgKnBnZDtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQ7XG5AQCAtMzE0LDcgKzMxNyw3IEBAIHN0YXRpYyBpbnQgdm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRCVUdfT04oYWRkciBcdTAwM2U9IGVuZCk7XG4gXG4gXHRzdGFydCA9IGFkZHI7XG4tXHRwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7XG4rXHRwZ2QgPSBwZ2Rfb2Zmc2V0X3BnZChwZ2RpciwgYWRkcik7XG4gXHRkbyB7XG4gXHRcdG5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiBcdFx0ZXJyID0gdm1hcF9wNGRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwaHlzX2FkZHIsIHByb3QsXG5AQCAtMzM0LDggKzMzNyw4IEBAIGludCB2bWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gdm1hcF9yYW5nZV9ub2ZsdXNoKGFkZHIsIGVuZCwgcGh5c19hZGRyLCBwZ3Byb3RfbngocHJvdCksXG4tXHRcdFx0XHQgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdCk7XG4rXHRlcnIgPSB2bWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIGFkZHIsIGVuZCwgcGh5c19hZGRyLFxuK1x0XHRcdFx0IHBncHJvdF9ueChwcm90KSwgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdCk7XG4gXHRmbHVzaF9jYWNoZV92bWFwKGFkZHIsIGVuZCk7XG4gXHRpZiAoIWVycilcbiBcdFx0ZXJyID0ga21zYW5faW9yZW1hcF9wYWdlX3JhbmdlKGFkZHIsIGVuZCwgcGh5c19hZGRyLCBwcm90LFxuQEAgLTQ3OCw3ICs0ODEsNyBAQCBzdGF0aWMgdm9pZCB2dW5tYXBfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gICpcbiAgKiBUaGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uIG9ubHkuIERvIG5vdCB1c2Ugb3V0c2lkZSBtbS8uXG4gICovXG4tdm9pZCBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuK3ZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV4dDtcbiBcdHBnZF90ICpwZ2Q7XG5AQCAtNDg2LDcgKzQ4OSw3IEBAIHZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiBcdHBndGJsX21vZF9tYXNrIG1hc2sgPSAwO1xuIFxuIFx0QlVHX09OKGFkZHIgXHUwMDNlPSBlbmQpO1xuLVx0cGdkID0gcGdkX29mZnNldF9rKGFkZHIpO1xuK1x0cGdkID0gcGdkX29mZnNldF9wZ2QocGdkaXIsIGFkZHIpO1xuIFx0ZG8ge1xuIFx0XHRuZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7XG4gXHRcdGlmIChwZ2RfYmFkKCpwZ2QpKVxuQEAgLTUwMyw3ICs1MDYsNyBAQCB2b2lkIF9fdnVubWFwX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gdm9pZCB2dW5tYXBfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbiB7XG4gXHRrbXNhbl92dW5tYXBfcmFuZ2Vfbm9mbHVzaChzdGFydCwgZW5kKTtcbi1cdF9fdnVubWFwX3JhbmdlX25vZmx1c2goc3RhcnQsIGVuZCk7XG4rXHRfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoKGluaXRfbW0ucGdkLCBzdGFydCwgZW5kKTtcbiB9XG4gXG4gLyoqXG5AQCAtNjcwLDkgKzY3MywxMCBAQCBpbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yOyBpICs9IDFVIFx1MDAzY1x1MDAzYyAocGFnZV9zaGlmdCAtIFBBR0VfU0hJRlQpKSB7XG4gXHRcdGludCBlcnI7XG4gXG4tXHRcdGVyciA9IHZtYXBfcmFuZ2Vfbm9mbHVzaChhZGRyLCBhZGRyICsgKDFVTCBcdTAwM2NcdTAwM2MgcGFnZV9zaGlmdCksXG4tXHRcdFx0XHRcdHBhZ2VfdG9fcGh5cyhwYWdlc1tpXSksIHByb3QsXG4tXHRcdFx0XHRcdHBhZ2Vfc2hpZnQpO1xuK1x0XHRlcnIgPSB2bWFwX3JhbmdlX25vZmx1c2goaW5pdF9tbS5wZ2QsIGFkZHIsXG4rXHRcdFx0XHRcdCBhZGRyICsgKDFVTCBcdTAwM2NcdTAwM2MgcGFnZV9zaGlmdCksXG4rXHRcdFx0XHRcdCBwYWdlX3RvX3BoeXMocGFnZXNbaV0pLCBwcm90LFxuK1x0XHRcdFx0XHQgcGFnZV9zaGlmdCk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcbkBAIC00OTE5LDE1ICs0OTIzLDI1IEBAIHB2bV9maW5kX3ZhX2VuY2xvc2VfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpXG4gICogICBpbiAtIHRoZSBWQSB3ZSBzdGFydCB0aGUgc2VhcmNoKHJldmVyc2Ugb3JkZXIpO1xuICAqICAgb3V0IC0gdGhlIFZBIHdpdGggdGhlIGhpZ2hlc3QgYWxpZ25lZCBlbmQgYWRkcmVzcy5cbiAgKiBAYWxpZ246IGFsaWdubWVudCBmb3IgcmVxdWlyZWQgaGlnaGVzdCBhZGRyZXNzXG4rICogQHBjcHU6IHdoZXRoZXIgcmVxdWVzdCBhbGxvY2F0aW9uIGZyb20gbG9jYWwgcGVyY3B1IGFyZWFcbiAgKlxuICAqIFJldHVybnM6IGRldGVybWluZWQgZW5kIGFkZHJlc3Mgd2l0aGluIHZtYXBfYXJlYVxuICAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nXG4tcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKHN0cnVjdCB2bWFwX2FyZWEgKip2YSwgdW5zaWduZWQgbG9uZyBhbGlnbilcbitwdm1fZGV0ZXJtaW5lX2VuZF9mcm9tX3JldmVyc2Uoc3RydWN0IHZtYXBfYXJlYSAqKnZhLCB1bnNpZ25lZCBsb25nIGFsaWduLCBib29sIHBjcHUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZCA9IFZNQUxMT0NfRU5EIFx1MDAyNiB+KGFsaWduIC0gMSk7XG4rXHR1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFxuKyNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxuK1x0aWYgKHBjcHUpXG4rXHRcdHZtYWxsb2NfZW5kID0gTE9DQUxfUEVSQ1BVX0VORCBcdTAwMjYgfihhbGlnbiAtIDEpO1xuK1x0ZWxzZVxuK1x0XHR2bWFsbG9jX2VuZCA9IFBFUkNQVV9FTkQgXHUwMDI2IH4oYWxpZ24gLSAxKTtcbisjZWxzZVxuK1x0dm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCBcdTAwMjYgfihhbGlnbiAtIDEpO1xuKyNlbmRpZlxuK1xuIFx0aWYgKGxpa2VseSgqdmEpKSB7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yZXZlcnNlKCgqdmEpLFxuIFx0XHRcdFx0XHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCwgbGlzdCkge1xuQEAgLTQ5NjgsMTQgKzQ5ODIsMjIgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHNpemVfdCAqc2l6ZXMsIGludCBucl92bXMsXG4gXHRcdFx0XHQgICAgIHNpemVfdCBhbGlnbilcbiB7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIHZtYWxsb2Nfc3RhcnQgPSBBTElHTihWTUFMTE9DX1NUQVJULCBhbGlnbik7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIHZtYWxsb2NfZW5kID0gVk1BTExPQ19FTkQgXHUwMDI2IH4oYWxpZ24gLSAxKTtcbitcdHVuc2lnbmVkIGxvbmcgdm1hbGxvY19zdGFydDtcbitcdHVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQ7XG4gXHRzdHJ1Y3Qgdm1hcF9hcmVhICoqdmFzLCAqdmE7XG4gXHRzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zO1xuIFx0aW50IGFyZWEsIGFyZWEyLCBsYXN0X2FyZWEsIHRlcm1fYXJlYTtcbiBcdHVuc2lnbmVkIGxvbmcgYmFzZSwgc3RhcnQsIHNpemUsIGVuZCwgbGFzdF9lbmQsIG9yaWdfc3RhcnQsIG9yaWdfZW5kO1xuIFx0Ym9vbCBwdXJnZWQgPSBmYWxzZTtcbiBcbisjaWZkZWYgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBcbitcdHZtYWxsb2Nfc3RhcnQgPSBBTElHTihQRVJDUFVfU1RBUlQsIGFsaWduKTtcbitcdHZtYWxsb2NfZW5kID0gUEVSQ1BVX0VORCBcdTAwMjYgfihhbGlnbiAtIDEpO1xuKyNlbHNlXG4rXHR2bWFsbG9jX3N0YXJ0ID0gQUxJR04oVk1BTExPQ19TVEFSVCwgYWxpZ24pO1xuK1x0dm1hbGxvY19lbmQgPSBWTUFMTE9DX0VORCBcdTAwMjYgfihhbGlnbiAtIDEpO1xuKyNlbmRpZlxuK1xuIFx0LyogdmVyaWZ5IHBhcmFtZXRlcnMgYW5kIGFsbG9jYXRlIGRhdGEgc3RydWN0dXJlcyAqL1xuIFx0QlVHX09OKG9mZnNldF9pbl9wYWdlKGFsaWduKSB8fCAhaXNfcG93ZXJfb2ZfMihhbGlnbikpO1xuIFx0Zm9yIChsYXN0X2FyZWEgPSAwLCBhcmVhID0gMDsgYXJlYSBcdTAwM2MgbnJfdm1zOyBhcmVhKyspIHtcbkBAIC01MDI0LDcgKzUwNDYsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbiBcdGVuZCA9IHN0YXJ0ICsgc2l6ZXNbYXJlYV07XG4gXG4gXHR2YSA9IHB2bV9maW5kX3ZhX2VuY2xvc2VfYWRkcih2bWFsbG9jX2VuZCk7XG4tXHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnZhLCBhbGlnbikgLSBlbmQ7XG4rXHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnZhLCBhbGlnbiwgZmFsc2UpIC0gZW5kO1xuIFxuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0LypcbkBAIC01MDQ1LDcgKzUwNjcsNyBAQCBzdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbiBcdFx0ICogYmFzZSBkb3dud2FyZHMgYW5kIHRoZW4gcmVjaGVjay5cbiBcdFx0ICovXG4gXHRcdGlmIChiYXNlICsgZW5kIFx1MDAzZSB2YS1cdTAwM2V2YV9lbmQpIHtcbi1cdFx0XHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnZhLCBhbGlnbikgLSBlbmQ7XG4rXHRcdFx0YmFzZSA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShcdTAwMjZ2YSwgYWxpZ24sIGZhbHNlKSAtIGVuZDtcbiBcdFx0XHR0ZXJtX2FyZWEgPSBhcmVhO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtNTA1NSw3ICs1MDc3LDcgQEAgc3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsXG4gXHRcdCAqL1xuIFx0XHRpZiAoYmFzZSArIHN0YXJ0IFx1MDAzYyB2YS1cdTAwM2V2YV9zdGFydCkge1xuIFx0XHRcdHZhID0gbm9kZV90b192YShyYl9wcmV2KFx1MDAyNnZhLVx1MDAzZXJiX25vZGUpKTtcbi1cdFx0XHRiYXNlID0gcHZtX2RldGVybWluZV9lbmRfZnJvbV9yZXZlcnNlKFx1MDAyNnZhLCBhbGlnbikgLSBlbmQ7XG4rXHRcdFx0YmFzZSA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShcdTAwMjZ2YSwgYWxpZ24sIGZhbHNlKSAtIGVuZDtcbiBcdFx0XHR0ZXJtX2FyZWEgPSBhcmVhO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtNTIxOCw2ICs1MjQwLDg0IEBAIHZvaWQgcGNwdV9mcmVlX3ZtX2FyZWFzKHN0cnVjdCB2bV9zdHJ1Y3QgKip2bXMsIGludCBucl92bXMpXG4gXHRcdGZyZWVfdm1fYXJlYSh2bXNbaV0pO1xuIFx0a2ZyZWUodm1zKTtcbiB9XG4rXG4rI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXG4rLyogRmluZCBmcmVlIHZtIGFyZWEgc3RhcnRzIGZyb20gaGludCAqL1xuK3N0cnVjdCB2bV9zdHJ1Y3QgKnBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBoaW50LFxuK1x0XHRcdFx0ICAgICBpbnQgdW5pdF9zaXplLCBzaXplX3QgYWxpZ24pXG4re1xuK1x0c3RydWN0IHZtYXBfYXJlYSAqdG1wX3ZhLCAqdmE7XG4rXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcbitcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xuK1x0dW5zaWduZWQgbG9uZyBlbmQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0dmEgPSBrbWVtX2NhY2hlX3phbGxvYyh2bWFwX2FyZWFfY2FjaGVwLCBHRlBfS0VSTkVMKTtcbitcdHZtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZtX3N0cnVjdCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCF2YSB8fCAhdm0pXG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4rXG4rXHR0bXBfdmEgPSBwdm1fZmluZF92YV9lbmNsb3NlX2FkZHIoaGludCk7XG4rXHRpZiAoIXRtcF92YSkge1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcbitcdFx0Z290byBlcnJfZnJlZTtcbitcdH1cbitcbitcdGVuZCA9IHB2bV9kZXRlcm1pbmVfZW5kX2Zyb21fcmV2ZXJzZShcdTAwMjZ0bXBfdmEsIGFsaWduLCB0cnVlKTtcbitcbitcdGlmIChoaW50ICsgdW5pdF9zaXplIFx1MDAzZSBlbmQpIHtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4rXHR9XG4rXG4rXHRyZXQgPSB2YV9jbGlwKFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsXG4rXHRcdFx0XHUwMDI2ZnJlZV92bWFwX2FyZWFfbGlzdCwgdG1wX3ZhLCBoaW50LCB1bml0X3NpemUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcbitcdFx0Z290byBlcnJfZnJlZTtcbitcdH1cbitcbitcdHZhLVx1MDAzZXZhX3N0YXJ0ID0gaGludDtcbitcdHZhLVx1MDAzZXZhX2VuZCA9IGhpbnQgKyB1bml0X3NpemU7XG4rXG4rXHRzcGluX3VubG9jayhcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrKTtcbitcbitcdGlmIChrYXNhbl9wb3B1bGF0ZV92bWFsbG9jKHZhLVx1MDAzZXZhX3N0YXJ0LCB1bml0X3NpemUsIEdGUF9LRVJORUwpKVxuK1x0XHRnb3RvIGVycl9mcmVlX3NoYWRvdztcbitcbitcdHZuID0gYWRkcl90b19ub2RlKHZhLVx1MDAzZXZhX3N0YXJ0KTtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZ2bi1cdTAwM2VidXN5LmxvY2spO1xuK1x0aW5zZXJ0X3ZtYXBfYXJlYSh2YSwgXHUwMDI2dm4tXHUwMDNlYnVzeS5yb290LCBcdTAwMjZ2bi1cdTAwM2VidXN5LmhlYWQpO1xuK1x0c2V0dXBfdm1hbGxvY192bSh2bSwgdmEsIFZNX0FMTE9DLFxuK1x0XHRcdCBwY3B1X2dldF9sb2NhbF92bV9hcmVhKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnZuLVx1MDAzZWJ1c3kubG9jayk7XG4rXG4rXHRrYXNhbl91bnBvaXNvbl92bWFwX2FyZWFzKFx1MDAyNnZtLCAxLCBLQVNBTl9WTUFMTE9DX1BST1RfTk9STUFMKTtcbitcbitcdHJldHVybiB2bTtcbitcbitlcnJfZnJlZTpcbitcdGttZW1fY2FjaGVfZnJlZSh2bWFwX2FyZWFfY2FjaGVwLCB2YSk7XG4rXHRrZnJlZSh2bSk7XG4rXG4rXHRyZXR1cm4gTlVMTDtcbitcbitlcnJfZnJlZV9zaGFkb3c6XG4rXHRzcGluX2xvY2soXHUwMDI2ZnJlZV92bWFwX2FyZWFfbG9jayk7XG4rXHR2YSA9IG1lcmdlX29yX2FkZF92bWFwX2FyZWFfYXVnbWVudCh2YSwgXHUwMDI2ZnJlZV92bWFwX2FyZWFfcm9vdCxcbitcdFx0XHRcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0KTtcbitcdGlmICh2YSlcbitcdFx0a2FzYW5fcmVsZWFzZV92bWFsbG9jKHZhLVx1MDAzZXZhX3N0YXJ0LCB2YS1cdTAwM2V2YV9lbmQsIHZhLVx1MDAzZXZhX3N0YXJ0LCB2YS1cdTAwM2V2YV9lbmQsXG4rXHRcdFx0ICAgICAgIEtBU0FOX1ZNQUxMT0NfUEFHRV9SQU5HRSB8IEtBU0FOX1ZNQUxMT0NfVExCX0ZMVVNIKTtcbitcdGtmcmVlKHZtKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xvY2spO1xuK1x0cmV0dXJuIE5VTEw7XG4rXG4rfVxuKyNlbmRpZlxuICNlbmRpZlx0LyogQ09ORklHX1NNUCAqL1xuIFxuICNpZmRlZiBDT05GSUdfUFJJTlRLXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMjo0MDoyNS43OTk2NjE0MDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI5MjkyNTYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogTG9jYWwgUGVyLUNQVSBNYXBwaW5nIGZvciBBUk02NCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgYmFzZWQgb24gdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmU6IGBIQVZFX0xPQ0FMX1BFUl9DUFVfTUFQYC4gSXQgdG91Y2hlcyBjb3JlIGtlcm5lbCBjb21wb25lbnRzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgKHBlcmNwdSwgcGFnZSB0YWJsZXMpIG9uIEFSTTY0LCBhbmQgdGhpcyAqZGVmaW5pdGVseSogdHJpZ2dlcnMgbXkgZnV6emluZyBpbnN0aW5jdHMuIEFueXRoaW5nIHRoYXQgbWVzc2VzIHdpdGggbWVtb3J5IG1hcHBpbmcgaXMgYSBwb3RlbnRpYWwgZ29sZG1pbmUgZm9yIGZpbmRpbmcgc3VidGxlIGJ1Z3MuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGUgZmlsZXMgYmVpbmcgdG91Y2hlZDogYGFyY2gvYXJtNjQvLi4uYCwgYGluY2x1ZGUvLi4uYCwgYW5kIGBtbS8uLi5gLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHBlcmNwdWAsIGBtbWAgYW5kIHBhZ2UgdGFibGUgcmVsYXRlZCBmaWxlcy5cblxuVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhZGRpbmcgbG9jYWwgcGVyLWNwdSBtYXBwaW5nIHN1cHBvcnQgZm9yIEFSTTY0LiBUaGF0IHNjcmVhbXMgXCJmdW5jdGlvbmFsIGNoYW5nZVwiIHRvIG1lLCBhbmQgaXQgbW9kaWZpZXMgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFdlIGhhdmUgdG8gZnV6eiB0aGlzLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIEknbSBzZWVpbmc6IGBzZXR1cF9wZXJjcHVfcGdkYCwgYG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtgLCBgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc2AsIGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCwgYHBjcHVfYWxsb2NfZmlyc3RfY2h1bmtgLCBgcGNwdV9zZXR1cF9maXJzdF9jaHVua2AsIGBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgLCBgdm1hcF9yYW5nZV9ub2ZsdXNoYCwgYW5kIGBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSB3YW50IHRvIHRhcmdldCB3aXRoIGZ1enppbmcuXG5cbkknbGwgY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIG5vdy4gYEhBVkVfTE9DQUxfUEVSX0NQVV9NQVBgIGlzIGEgYGRlZl9ib29sIHlgIGRlcGVuZGluZyBvbiBBUk02NCBwYWdlIHNpemVzIHdoaWNoIG1lYW5zIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgZXhwbGljaXRseSBlbmFibGVkLiBUaGF0IHNhaWQsIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBsaXN0IHRoaXMgY29uZmlnIGluIG91ciBmdXp6aW5nIGxpc3QuIEkgc2VlIHRoYXQgYE5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LYCBpcyBzZWxlY3RlZCBieSBBUk02NCBub3cuIEFsc28sIGBBUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQ2AgYW5kIGBBUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQ2AgYXJlIHNlbGVjdGVkIGJ5IEFSTTY0LiBHb29kIHRvIGtub3cuXG5cblRoZXJlZm9yZSwgbXkgaW5pdGlhbCBsaXN0IG9mIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBmb3IgZnV6emluZyBhcmU6IGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCwgYHBjcHVfYWxsb2NfZmlyc3RfY2h1bmtgLCBgcGNwdV9zZXR1cF9maXJzdF9jaHVua2AsIGBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgLCBgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVua2AsIGBzZXR1cF9wZXJjcHVfcGdkYCBhbmQgYGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NgLiBOb3csIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgZXhpc3QgYW5kIGFyZSBwYXJ0IG9mIHRoZSB0YXJnZXQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkxODIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMjo0MDozNi4wOTI1OTAzNzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyNDM4NDgyMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxzdHJ1Y3Qgdm1fc3RydWN0IFxcXFwqKSAuKnBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIyOjQwOjQ1LjAxNjk4NTg1NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjU3ODUyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlJlZmluaW5nIE15IEFwcHJvYWNoKipcblxuUmlnaHQsIGhvbGQgb24gYSBzZWNvbmQuIEknbSB0YWtpbmcgYW5vdGhlciBsb29rIGF0IHRoaXMuIFRoZSBjdXJyZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBpc24ndCBxdWl0ZSBhcyByb2J1c3QgYXMgaXQgbmVlZHMgdG8gYmUuIEkgY2FuIHNlZSBhIHBvdGVudGlhbCBlZGdlIGNhc2Ugb3IgdHdvIHRoYXQgaXQncyBnb2luZyB0byBtaXNzLCBhbmQgdGhhdCdzIG5vdCBhY2NlcHRhYmxlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBzY2FsZSBJJ20gd29ya2luZyBhdC4gSSBuZWVkIHRvIHRpZ2h0ZW4gdGhpbmdzIHVwLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkaXZlIGJhY2sgaW4gYW5kIHJlZmluZSB0aGUgcGF0dGVybi4gSXQncyBhYm91dCBiZWluZyBwcmVjaXNlOyBsZWF2aW5nIG5vIHJvb20gZm9yIGFtYmlndWl0eS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGdldHRpbmcgKmEqIG1hdGNoOyBpdCdzIGFib3V0IGdldHRpbmcgKnRoZSByaWdodCogbWF0Y2ggZXZlcnkgc2luZ2xlIHRpbWUuIFRpbWUgZm9yIGEgbW9yZSBlbGVnYW50IGFuZCBjb21wcmVoZW5zaXZlIHNvbHV0aW9uLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgbG9va2Fyb3VuZHMsIHBlcmhhcHMgZXZlbiBhIHJlY3Vyc2l2ZSBwYXR0ZXJuLCBkZXBlbmRpbmcgb24gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHNvdXJjZSBkYXRhLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2ODcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQyMjo0MDo0OC40NDI3OTkzMDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3ODE1OTkxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY3B1X2dldF9sb2NhbF92bV9hcmVhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTMxNT12b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKTtcXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDozMTY6c3RydWN0IHZtX3N0cnVjdCAqcGNwdV9nZXRfbG9jYWxfdm1fYXJlYSh1bnNpZ25lZCBsb25nIGhpbnQsXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMzE3LVxcdFxcdFxcdFxcdCAgICAgaW50IHVuaXRfc2l6ZSwgc2l6ZV90IGFsaWduKTtcXG4tLVxcbm1tL3BlcmNwdS12bS5jPTQwNz1zdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY3JlYXRlX2NodW5rKGdmcF90IGdmcClcXG4tLVxcbm1tL3BlcmNwdS12bS5jLTQyOC1cXHR1bnNpZ25lZCBsb25nIGhpbnQgPSBkZWx0YSArICh1bnNpZ25lZCBsb25nKXBjcHVfbG9jYWxfYmFzZTtcXG5tbS9wZXJjcHUtdm0uYzo0Mjk6XFx0c3RydWN0IHZtX3N0cnVjdCAqbG9jYWxfdm0gPSBwY3B1X2dldF9sb2NhbF92bV9hcmVhKGhpbnQsXFxubW0vcGVyY3B1LXZtLmMtNDMwLVxcdFxcdFxcdFxcdFxcdHBjcHVfdW5pdF9zaXplLCBwY3B1X2F0b21fc2l6ZSk7XFxuLS1cXG5tbS92bWFsbG9jLmM9NTIzNT12b2lkIHBjcHVfZnJlZV92bV9hcmVhcyhzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1zLCBpbnQgbnJfdm1zKVxcbi0tXFxubW0vdm1hbGxvYy5jLTUyNDUtLyogRmluZCBmcmVlIHZtIGFyZWEgc3RhcnRzIGZyb20gaGludCAqL1xcbm1tL3ZtYWxsb2MuYzo1MjQ2OnN0cnVjdCB2bV9zdHJ1Y3QgKnBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWEodW5zaWduZWQgbG9uZyBoaW50LFxcbm1tL3ZtYWxsb2MuYy01MjQ3LVxcdFxcdFxcdFxcdCAgICAgaW50IHVuaXRfc2l6ZSwgc2l6ZV90IGFsaWduKVxcbi0tXFxubW0vdm1hbGxvYy5jLTUyOTQtXFx0c2V0dXBfdm1hbGxvY192bSh2bSwgdmEsIFZNX0FMTE9DLFxcbm1tL3ZtYWxsb2MuYzo1Mjk1OlxcdFxcdFxcdCBwY3B1X2dldF9sb2NhbF92bV9hcmVhKTtcXG5tbS92bWFsbG9jLmMtNTI5Ni1cXHRzcGluX3VubG9jayhcXHUwMDI2dm4tXFx1MDAzZWJ1c3kubG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIyOjQwOjUzLjAyMDk2NzczNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjgzNzA5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBQZXItQ1BVIFZpcnR1YWwgTWVtb3J5IExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIGBwY3B1X2dldF9sb2NhbF92bV9hcmVhYCBpcyBkZWZpbml0ZWx5IHByZXNlbnQgYW5kIGFjY291bnRlZCBmb3IuIFRoYXQncyBnb29kLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgc3lzdGVtIGlzIGFjdHVhbGx5IG1hbmFnaW5nIGFuZCBtYXBwaW5nIHRoZXNlIGxvY2FsIHBlci1DUFUgdmlydHVhbCBtZW1vcnkgYXJlYXMsIEkgbmVlZCB0byBkaXZlIGludG8gYG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGZpZ3VyZSBvdXQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBMZXQncyBzZWUgaG93IHRoYXQgZnVuY3Rpb24gd29ya3MgYW5kIGZpZ3VyZSBvdXQgd2hhdCB0aGUga2VybmVsJ3MgZG9pbmcgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzU3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjI6NDA6NTYuMjQ5MzQyMTg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTY1NzExMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVua1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oPTc1PWV4dGVybiB2b2lkIGxpbmVhcl9tYXBfbWF5YmVfc3BsaXRfdG9fcHRlcyh2b2lkKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oLTc2LSNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11Lmg6Nzc6ZXh0ZXJuIHZvaWQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaC03OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpO1xcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYz0xMDc1PXZvaWQgX19pbml0IGxpbmVhcl9tYXBfbWF5YmVfc3BsaXRfdG9fcHRlcyh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xMDgzLSNpZmRlZiBDT05GSUdfSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFxcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTA4NDp2b2lkIF9faW5pdCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcXG5hcmNoL2FybTY0L21tL21tdS5jLTEwODUtXFx0XFx0XFx0ICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucilcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oPTE1Nj1zdGF0aWMgaW5saW5lIHNpemVfdCBwY3B1X29ial9mdWxsX3NpemUoc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNjgtI2lmZGVmIENPTkZJR19IQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXFxubW0vcGVyY3B1LWludGVybmFsLmg6MTY5OmV4dGVybiB2b2lkIF9faW5pdCBtYXBfbG9jYWxfcGVyY3B1X2ZpcnN0X2NodW5rKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdmlydCxcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNzAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBucik7XFxubW0vcGVyY3B1LWludGVybmFsLmgtMTcxLSNlbHNlXFxubW0vcGVyY3B1LWludGVybmFsLmg6MTcyOnN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVuayh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHZpcnQsXFxubW0vcGVyY3B1LWludGVybmFsLmgtMTczLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5tbS9wZXJjcHUuYz0zMjAzPWludCBfX2luaXQgcGNwdV9wYWdlX2ZpcnN0X2NodW5rKHNpemVfdCByZXNlcnZlZF9zaXplLCBwY3B1X2ZjX2NwdV90b19ub2RlX2ZuX3QgY3B1X3RvX25kX2ZuKVxcbi0tXFxubW0vcGVyY3B1LmMtMzI5OS1cXHRcXHQgKi9cXG5tbS9wZXJjcHUuYzozMzAwOlxcdFxcdG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmsoY3B1LCAodW5zaWduZWQgbG9uZylwY3B1X3ZtLmFkZHIsXFxubW0vcGVyY3B1LmMtMzMwMS1cXHRcXHRcXHRcXHRcXHUwMDI2cGFnZXNbdW5pdCAqIHVuaXRfcGFnZXNdLCB1bml0X3BhZ2VzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjI6NDE6MDAuOTY1OTE5NTk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2MjI1OTU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyIGFuZCB0aGUgdGV4dCByZWZlcnMgdG8gZXhhbWluaW5nIGtlcm5lbCBjb2RlOlxuXG4qKkNoZWNraW5nIGBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgZ29lcyB0byB0aGUgcG90ZW50aWFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBudWFuY2VzIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMuIFRoaXMgaXNuJ3QganVzdCBhIGdlbmVyaWMgbWVtb3J5IHN5bmNocm9uaXphdGlvbiByb3V0aW5lOyB0aGUgXCJhcmNoXCIgcHJlZml4IHNjcmVhbXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZGV0YWlscy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBhcmNoaXRlY3R1cmFsIGNvbnRleHQgdGhpcyBhcHBsaWVzIHRvLiBJcyBpdCB4ODYsIEFSTSwgUklTQy1WLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGFyY2hpdGVjdHVyZSB3aWxsIGRpY3RhdGUgdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1vZGVscywgY2FjaGUgY29oZXJlbmN5IHByb3RvY29scywgYW5kIG1lbW9yeSBiYXJyaWVycyB0aGF0IGFyZSByZWxldmFudCBoZXJlLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb24gaG93IHRoZSBmdW5jdGlvbiBzeW5jaHJvbml6ZXMgdGhlIGtlcm5lbCdzIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmdzLiBXZSdyZSB0YWxraW5nIGFib3V0IGVuc3VyaW5nIGNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB2aXNpYmxlIHRvIHRoZSBrZXJuZWwgYW5kIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIG1lbW9yeS4gV2hhdCdzIHRoZSBzcGVjaWZpYyBzY2VuYXJpbz8gSXMgaXQgcmVsYXRlZCB0byBoYW5kbGluZyBUTEIgZmx1c2hlcz8gUGFnZSB0YWJsZSB1cGRhdGVzPyBPciBwb3NzaWJseSBjYWNoZSBpbnZhbGlkYXRpb24gZm9yIG1lbW9yeSByZWdpb25zIHNoYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBwcm9jZXNzZXMgb3IgZGV2aWNlcz8gVGhlIGNvbW1lbnRzIHdpdGhpbiB0aGUgZnVuY3Rpb24gaXRzZWxmIHNob3VsZCBiZSBteSBmaXJzdCBwb3J0IG9mIGNhbGwsIGJ1dCBJIGFudGljaXBhdGUgbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaXRzIHNwZWNpZmljIHVzZSBjYXNlcyBhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBpdHMgcm9sZSBpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gaXRzIGVmZmljaWVuY3ksIEkgd2lsbCBoYXZlIHRvIGxvb2sgdG8gc2VlIGlmIHRoaXMgb3BlcmF0aW9uIGhhcyBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTc3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMjI6NDE6MDUuMDI4MTgzNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzkzNDMzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9rZXJuZWwvdHJhcHMuYz05MjE9YXNtbGlua2FnZSB2b2lkIGhhbmRsZV9iYWRfc3RhY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdHJhcHMuYy05NTgtICovXFxuYXJjaC9hcm0va2VybmVsL3RyYXBzLmM6OTU5OnZvaWQgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5hcmNoL2FybS9rZXJuZWwvdHJhcHMuYy05NjAte1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg9Mzg9c3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgtNDEtXFx0aWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgXFx1MDAyNiBQR1RCTF9QVURfTU9ESUZJRUQpXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6NDI6XFx0XFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaC00My19XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BnYWxsb2MuaD0xNDE9c3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9zeW5jKHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHAsIHB0ZV90ICpwdGVwKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgtMTQ0LVxcdGlmIChBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLIFxcdTAwMjYgUEdUQkxfUE1EX01PRElGSUVEKVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjE0NTpcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKGFkZHIsIGFkZHIpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTE0Ni19XFxuLS1cXG5hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYz0xNzY9c3RhdGljIHZvaWQgX19pbml0IGthc2FuX3BnZF9wb3B1bGF0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxuYXJjaC9hcm02NC9tbS9rYXNhbl9pbml0LmMtMTkwLVxcdGlmIChtYXNrIFxcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcXG5hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYzoxOTE6XFx0XFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgZW5kKTtcXG5hcmNoL2FybTY0L21tL2thc2FuX2luaXQuYy0xOTItfVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYz03Mz12b2lkIF9faW5pdCBzZXR1cF9wZXJjcHVfcGdkKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jLTk3LVxcbmFyY2gvYXJtNjQvbW0vbW11LmM6OTg6dm9pZCBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtOTkte1xcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYz0xODY2PXN0YXRpYyB2b2lkIGZyZWVfZW1wdHlfdGFibGVzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jLTE4ODUtXFx0aWYgKG1hc2sgXFx1MDAyNiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLKVxcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTg4NjpcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg4Ny19XFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jPTIwOTA9aW50IGFyY2hfYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLFxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMTA3LVxcdGlmIChtYXNrIFxcdTAwMjYgQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSylcXG5hcmNoL2FybTY0L21tL21tdS5jOjIxMDg6XFx0XFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhzdGFydCwgc3RhcnQgKyBzaXplKTtcXG5hcmNoL2FybTY0L21tL21tdS5jLTIxMDktXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmM9MTExPXZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYy0yMjAtXFx0ICogc2V0dXBfYXJjaCgpLCBidXQgcGVyY3B1IGRhdGEgYWxzbyBuZWVkcyB0byBiZSBhdmFpbGFibGUgaW5cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmM6MjIxOlxcdCAqIHRoZSBzbXBib290IGFzbSBhbmQgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncygpIGRvZXNuJ3Qgc3luYyB0b1xcbmFyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYy0yMjItXFx0ICogc3dhcHBlcl9wZ19kaXIgb24gMzItYml0LiBUaGUgcGVyLWNwdSBtYXBwaW5ncyBuZWVkIHRvIGJlIGF2YWlsYWJsZVxcbi0tXFxuYXJjaC94ODYvbW0vZmF1bHQuYz0yNjk9Tk9LUFJPQkVfU1lNQk9MKHZtYWxsb2NfZmF1bHQpO1xcbmFyY2gveDg2L21tL2ZhdWx0LmMtMjcwLVxcbmFyY2gveDg2L21tL2ZhdWx0LmM6MjcxOnZvaWQgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTI3Mi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9MjE4PXN0YXRpYyB2b2lkIHN5bmNfZ2xvYmFsX3BnZHModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtMjM4LSAqL1xcbmFyY2gveDg2L21tL2luaXRfNjQuYzoyMzk6dm9pZCBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy0yNDAte1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZ2FsbG9jLmgtMTgtXFx0XFx0aWYgKEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0sgXFx1MDAyNiBQR1RCTF9QR0RfTU9ESUZJRUQpXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGdhbGxvYy5oOjE5OlxcdFxcdFxcdGFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3MoYWRkciwgYWRkcik7XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGdhbGxvYy5oLTIwLVxcdH0gd2hpbGUgKDApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BnYWxsb2MuaC0yNS1cXHRcXHRpZiAoQVJDSF9QQUdFX1RBQkxFX1NZTkNfTUFTSyBcXHUwMDI2IFBHVEJMX1A0RF9NT0RJRklFRClcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wZ2FsbG9jLmg6MjY6XFx0XFx0XFx0YXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncyhhZGRyLCBhZGRyKTtcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wZ2FsbG9jLmgtMjctXFx0fSB3aGlsZSAoMClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTE3Mjg9c3RhdGljIGlubGluZSB2b2lkIG1vZGlmeV9wcm90X2NvbW1pdF9wdGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xNzQ1LSAqIGFuZCBsZXQgZ2VuZXJpYyB2bWFsbG9jLCBpb3JlbWFwIGFuZCBwYWdlIHRhYmxlIHVwZGF0ZSBjb2RlIGtub3cgd2hlblxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjE3NDY6ICogYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncygpIG5lZWRzIHRvIGJlIGNhbGxlZC5cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xNzQ3LSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTc1Mi0vKlxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjE3NTM6ICogVGhlcmUgaXMgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5ncygpLiBJdCBpc1xcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTE3NTQtICogcmVsaWVkIHVwb24gdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGNhbGxzIG91dCBpZiBBUkNIX1BBR0VfVEFCTEVfU1lOQ19NQVNLXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xNzU2LSAqL1xcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjE3NTc6dm9pZCBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xNzU4LVxcbi0tXFxubW0vbWVtb3J5LmM9MzQ2Mz1zdGF0aWMgaW50IF9fYXBwbHlfdG9fcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmMtMzQ5Ni1cXHRpZiAobWFzayBcXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXFxubW0vbWVtb3J5LmM6MzQ5NzpcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBzdGFydCArIHNpemUpO1xcbm1tL21lbW9yeS5jLTM0OTgtXFxuLS1cXG5tbS92bWFsbG9jLmM9MzAxPWludCB2bWFwX3JhbmdlX25vZmx1c2gocGdkX3QgKnBnZGlyLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTMyOS1cXHRpZiAobWFzayBcXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXFxubW0vdm1hbGxvYy5jOjMzMDpcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xcbm1tL3ZtYWxsb2MuYy0zMzEtXFxuLS1cXG5tbS92bWFsbG9jLmM9NDg0PXZvaWQgX192dW5tYXBfcmFuZ2Vfbm9mbHVzaChwZ2RfdCAqcGdkaXIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxubW0vdm1hbGxvYy5jLTUwMi1cXHRpZiAobWFzayBcXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXFxubW0vdm1hbGxvYy5jOjUwMzpcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xcbm1tL3ZtYWxsb2MuYy01MDQtfVxcbi0tXFxubW0vdm1hbGxvYy5jPTYyNj1zdGF0aWMgaW50IHZtYXBfc21hbGxfcGFnZXNfcmFuZ2Vfbm9mbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTY0Ny1cXHRpZiAobWFzayBcXHUwMDI2IEFSQ0hfUEFHRV9UQUJMRV9TWU5DX01BU0spXFxubW0vdm1hbGxvYy5jOjY0ODpcXHRcXHRhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzKHN0YXJ0LCBlbmQpO1xcbm1tL3ZtYWxsb2MuYy02NDktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIyOjQxOjEwLjc2NzU1MTI0OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjEyNzE5OTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIEV4cGxvcmF0aW9uIG9mIFBlci1DUFUgTWFwcGluZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBlci1DUFUgbWFwcGluZyBzdHVmZi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGEgZmV3IGtleSBmdW5jdGlvbnM6IGBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzYCwgYHNldHVwX3BlcmNwdV9wZ2RgLCBgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVua2AsIGFuZCBgcGNwdV9nZXRfbG9jYWxfdm1fYXJlYWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIHRoaXMgZmVhdHVyZSwgYW5kIGxpa2VseSBjb250YWluIHRoZSBtb3N0IGludGVyZXN0aW5nIGxvZ2ljLlxuXG5GaXJzdCwgSSB3YW50IHRvIHBpbiBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhpcyBmZWF0dXJlJ3MgZW5hYmxlbWVudC4gTGV0J3Mgc3RhcnQgd2l0aCBgSEFWRV9MT0NBTF9QRVJfQ1BVX01BUGAuIFF1aWNrbHkgY2hlY2tpbmcgYGFyY2gvYXJtNjQvS2NvbmZpZ2AsIEkgc2VlIGl0J3MgYSBgZGVmX2Jvb2wgeWAgd2hpY2ggbWVhbnMgaXQncyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgdGhlIGRlcGVuZGVuY2llcyAoQVJNNjQgd2l0aCBzcGVjaWZpYyBWQSBiaXQgc2l6ZXMgYW5kIHBhZ2Ugc2l6ZXMpIGFyZSBtZXQuIFRoaXMgbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byBtYW51YWxseSBlbmFibGUgaXQuIEhvd2V2ZXIsIGl0J3Mgc3RpbGwgd29ydGh3aGlsZSB0byBkb2N1bWVudCB0aGF0IGl0J3MgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuXG5cblRoZW4sIEknbGwgbW92ZSBvbiB0byBgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktgLiBBIHF1aWNrIGNoZWNrIGluIGBhcmNoL2FybTY0L0tjb25maWdgIHJldmVhbHMgdGhhdCBBUk02NCAqc2VsZWN0cyogdGhpcyBjb25maWcsIG1lYW5pbmcgaXQncyBhbHdheXMgZW5hYmxlZCB3aGVuIEFSTTY0IGlzIGFjdGl2ZS5cblxuTmV4dCwgSSdsbCB2ZXJpZnkgd2hhdCBJIHRoaW5rOiBgQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNgIGFuZCBgQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNgIGFyZSBhbHNvIHNlbGVjdGVkIGJ5IEFSTTY0LiBDb25maXJtZWQuXG5cbk5vdywgbGV0J3MganVtcCB0byB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiwgYEhBVkVfTE9DQUxfUEVSX0NQVV9NQVBgIGFuZCBzZWUgaXQncyBhIGBib29sYCBpbiBgbW0vS2NvbmZpZ2AuXG5cbk5vdywgSSB3YW50IHRvIHZlcmlmeSBpZiB0aGUgZnVuY3Rpb25zIEkgaW5pdGlhbGx5IGxpc3RlZCBhcmUgZ29vZCB0YXJnZXRzIGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5gcGNwdV9nZXRfbG9jYWxfdm1fYXJlYWAgZnJvbSBgbW0vdm1hbGxvYy5jYCBpcyBlbmFibGVkIGJ5IHRoZSBgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBgLCBzbyBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuYG1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtgIGZyb20gYGFyY2gvYXJtNjQvbW0vbW11LmNgIGlzIGFsc28gZW5hYmxlZCBieSBgQ09ORklHX0hBVkVfTE9DQUxfUEVSX0NQVV9NQVBgLCBzbyBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuYHNldHVwX3BlcmNwdV9wZ2RgIGZyb20gYGFyY2gvYXJtNjQvbW0vbW11LmNgIGlzIGFsc28gYSBrZXkgZnVuY3Rpb24uXG5cbmBhcmNoX3N5bmNfa2VybmVsX21hcHBpbmdzYCBmcm9tIGBhcmNoL2FybTY0L21tL21tdS5jYCBpcyBhIG5ldyBmdW5jdGlvbiBhbmQgaXMgYWxzbyBhIGtleSBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBsb29rIGF0IGEgZmV3IG1vcmUgZnVuY3Rpb25zLlxuXG5gdm1hcF9yYW5nZV9ub2ZsdXNoYCBpbiBgbW0vdm1hbGxvYy5jYCBhbmQgYF9fdnVubWFwX3JhbmdlX25vZmx1c2hgIGFsc28gaW4gYG1tL3ZtYWxsb2MuY2AgaGF2ZSBiZWVuIGNoYW5nZWQgd2l0aCBhIG5ldyBwYXJhbWV0ZXIuIExldCdzIGtlZXAgaW4gbWluZCB0aGF0IHRoZXkgYXJlIG5vdCBuZXcsIGJ1dCBoYXZlIGJlZW4gZXh0ZW5kZWQuIEhvd2V2ZXIsIGxldCdzIGtlZXAgdGhlbSBvbiB0aGUgbGlzdCBqdXN0IGluIGNhc2UuXG5cbmBwY3B1X2FsbG9jX2ZpcnN0X2NodW5rYCBpbiBgbW0vcGVyY3B1LmNgXG5cbmBwY3B1X3NldHVwX2ZpcnN0X2NodW5rYCBpbiBgbW0vcGVyY3B1LmNgXG5cbmBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgIGluIGBtbS9wZXJjcHUuY2BcblxuT2theSwgc28gSSBoYXZlIGEgbW9yZSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHJldmlldywgdGhvdWdoIEkgY2FuIHByaW9yaXRpemUgYmFzZWQgb24gbm92ZWx0eSBhbmQgc3BlY2lmaWNpdHkgdG8gdGhpcyBwZXItQ1BVIGZlYXR1cmU6XG5cbkJhc2VkIG9uIHRoZSBpbnZlc3RpZ2F0aW9uLCBJIGhhdmUgdGhlIGZvbGxvd2luZyBzZXQgb2Yga2V5IHN5bWJvbHM6XG5cbi0gICBgcGNwdV9nZXRfbG9jYWxfdm1fYXJlYWBcbi0gICBgbWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVua2Bcbi0gICBgc2V0dXBfcGVyY3B1X3BnZGBcbi0gICBgYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc2Bcbi0gICBgdm1hcF9yYW5nZV9ub2ZsdXNoYCAoZXh0ZW5kZWQpXG4tICAgYF9fdnVubWFwX3JhbmdlX25vZmx1c2hgIChleHRlbmRlZClcbi0gICBgcGNwdV9hbGxvY19maXJzdF9jaHVua2Bcbi0gICBgcGNwdV9zZXR1cF9maXJzdF9jaHVua2Bcbi0gICBgcGNwdV9wYWdlX2ZpcnN0X2NodW5rYFxuXG5BbmQgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlOlxuXG4tICAgYEhBVkVfTE9DQUxfUEVSX0NQVV9NQVBgXG4tICAgYEFSQ0hfSEFTX1BNRF9QT1BVTEFURV9TWU5DYFxuLSAgIGBBUkNIX0hBU19QVURfUE9QVUxBVEVfU1lOQ2Bcbi0gICBgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTktgXG5cblNpbmNlIHRoZSBvdGhlciBmdW5jdGlvbnMgYHZtYXBfcmFuZ2Vfbm9mbHVzaGAsIGBfX3Z1bm1hcF9yYW5nZV9ub2ZsdXNoYCwgYHBjcHVfYWxsb2NfZmlyc3RfY2h1bmtgLCBgcGNwdV9zZXR1cF9maXJzdF9jaHVua2AgYW5kIGBwY3B1X3BhZ2VfZmlyc3RfY2h1bmtgIGFyZSBnZW5lcmljLCBpdCdzIGNsZWFyXG5cbiIsIklucHV0VG9rZW5zIjozNDY1MCwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDIyOjQxOjI2Ljg5NDc1Njc5OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjA4MjAwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEFWRV9MT0NBTF9QRVJfQ1BVX01BUFwiLFxuICAgIFwiQVJDSF9IQVNfUE1EX1BPUFVMQVRFX1NZTkNcIixcbiAgICBcIkFSQ0hfSEFTX1BVRF9QT1BVTEFURV9TWU5DXCIsXG4gICAgXCJORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBjcHVfZ2V0X2xvY2FsX3ZtX2FyZWFcIixcbiAgICBcIm1hcF9sb2NhbF9wZXJjcHVfZmlyc3RfY2h1bmtcIixcbiAgICBcInNldHVwX3BlcmNwdV9wZ2RcIixcbiAgICBcImFyY2hfc3luY19rZXJuZWxfbWFwcGluZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBsb2NhbCBwZXItY3B1IG1hcHBpbmcgc3VwcG9ydCBmb3IgQVJNNjQsIG1vZGlmeWluZyBjb3JlIGtlcm5lbCBsb2dpYyBmb3IgcGVyY3B1IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIQVZFX0xPQ0FMX1BFUl9DUFVfTUFQXCIsXG4gICAgXCJBUkNIX0hBU19QTURfUE9QVUxBVEVfU1lOQ1wiLFxuICAgIFwiQVJDSF9IQVNfUFVEX1BPUFVMQVRFX1NZTkNcIixcbiAgICBcIk5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGNwdV9nZXRfbG9jYWxfdm1fYXJlYVwiLFxuICAgIFwibWFwX2xvY2FsX3BlcmNwdV9maXJzdF9jaHVua1wiLFxuICAgIFwic2V0dXBfcGVyY3B1X3BnZFwiLFxuICAgIFwiYXJjaF9zeW5jX2tlcm5lbF9tYXBwaW5nc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGxvY2FsIHBlci1jcHUgbWFwcGluZyBzdXBwb3J0IGZvciBBUk02NCwgbW9kaWZ5aW5nIGNvcmUga2VybmVsIGxvZ2ljIGZvciBwZXJjcHUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdGFibGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbbhl[1] Phase: Succeeded StartedAt: 2026-07-15 22:41:39 +0000 UTC FinishedAt: 2026-07-15 22:41:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-15 22:41:39 +0000 UTC FinishedAt: 2026-07-15 22:41:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2] Phase: Succeeded StartedAt: 2026-07-15 22:41:39 +0000 UTC FinishedAt: 2026-07-16 02:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-15 22:41:39 +0000 UTC FinishedAt: 2026-07-16 02:50:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-15 22:41:39 +0000 UTC FinishedAt: 2026-07-15 22:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-15 22:41:39 +0000 UTC FinishedAt: 2026-07-15 22:42:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"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-workflowfbbhl/series-workflowfbbhl-convert-artifact-1798902904/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-15 22:42:33 +0000 UTC FinishedAt: 2026-07-15 23:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-15 22:42:33 +0000 UTC FinishedAt: 2026-07-15 23:16:03 +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:*a42c11ba-4ec5-42e5-ae44-113b143d5c22,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-workflowfbbhl/series-workflowfbbhl-convert-artifact-1798902904/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": "e4d1db7e-30f2-4647-a50e-6fd8e0c28aaf", "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-workflowfbbhl/series-workflowfbbhl-build-action-1135532334/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-15 22:42:34 +0000 UTC FinishedAt: 2026-07-15 23:15:53 +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:*a42c11ba-4ec5-42e5-ae44-113b143d5c22,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-workflowfbbhl/series-workflowfbbhl-convert-artifact-1798902904/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": "e4d1db7e-30f2-4647-a50e-6fd8e0c28aaf", "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-workflowfbbhl/series-workflowfbbhl-build-action-1135532334/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-15 23:16:03 +0000 UTC FinishedAt: 2026-07-15 23:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-15 23:16:03 +0000 UTC FinishedAt: 2026-07-15 23:16:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-15 23:16:03 +0000 UTC FinishedAt: 2026-07-15 23:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-15 23:16:03 +0000 UTC FinishedAt: 2026-07-15 23:16:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","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-workflowfbbhl/series-workflowfbbhl-convert-artifact-1848960991/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-15 23:16:23 +0000 UTC FinishedAt: 2026-07-15 23:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-15 23:16:23 +0000 UTC FinishedAt: 2026-07-15 23:18:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e4d1db7e-30f2-4647-a50e-6fd8e0c28aaf,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-workflowfbbhl/series-workflowfbbhl-build-action-1135532334/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-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-15 23:18:35 +0000 UTC FinishedAt: 2026-07-15 23:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-15 23:18:35 +0000 UTC FinishedAt: 2026-07-15 23:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-15 23:18:35 +0000 UTC FinishedAt: 2026-07-15 23:46:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-15 23:18:35 +0000 UTC FinishedAt: 2026-07-15 23:46:05 +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:*a42c11ba-4ec5-42e5-ae44-113b143d5c22,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-workflowfbbhl/series-workflowfbbhl-convert-artifact-1848960991/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": "33f134bf-4557-4625-a444-057cb7eed108", "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-workflowfbbhl/series-workflowfbbhl-build-action-3188028787/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-15 23:18:35 +0000 UTC FinishedAt: 2026-07-15 23:45:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a42c11ba-4ec5-42e5-ae44-113b143d5c22,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-workflowfbbhl/series-workflowfbbhl-convert-artifact-1848960991/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": "33f134bf-4557-4625-a444-057cb7eed108", "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-workflowfbbhl/series-workflowfbbhl-build-action-3188028787/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-15 23:46:05 +0000 UTC FinishedAt: 2026-07-15 23:46:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-15 23:46:05 +0000 UTC FinishedAt: 2026-07-15 23:46:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-15 23:46:05 +0000 UTC FinishedAt: 2026-07-15 23:48:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-15 23:46:05 +0000 UTC FinishedAt: 2026-07-15 23:48:03 +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:*33f134bf-4557-4625-a444-057cb7eed108,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-workflowfbbhl/series-workflowfbbhl-build-action-3188028787/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-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-15 23:48:15 +0000 UTC FinishedAt: 2026-07-16 02:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-15 23:48:15 +0000 UTC FinishedAt: 2026-07-15 23:48:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-15 23:48:15 +0000 UTC FinishedAt: 2026-07-15 23:48:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-15 23:48:16 +0000 UTC FinishedAt: 2026-07-16 02:50:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"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:*e4d1db7e-30f2-4647-a50e-6fd8e0c28aaf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*33f134bf-4557-4625-a444-057cb7eed108,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-workflowfbbhl/series-workflowfbbhl-build-action-1135532334/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-workflowfbbhl/series-workflowfbbhl-build-action-3188028787/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-15 23:48:16 +0000 UTC FinishedAt: 2026-07-15 23:48:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-15 23:48:16 +0000 UTC FinishedAt: 2026-07-15 23:48:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"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-workflowfbbhl/series-workflowfbbhl-convert-artifact-528542456/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-15 23:48:16 +0000 UTC FinishedAt: 2026-07-15 23:48:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-15 23:48:30 +0000 UTC FinishedAt: 2026-07-16 02:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbbhl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pcpu_get_local_vm_area","map_local_percpu_first_chunk","setup_percpu_pgd","arch_sync_kernel_mappings"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"32bfe6d6b85e3c11a710eb40b9771f715e3c612f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HAVE_LOCAL_PER_CPU_MAP","ARCH_HAS_PMD_POPULATE_SYNC","ARCH_HAS_PUD_POPULATE_SYNC","NEED_PER_CPU_PAGE_FIRST_CHUNK"],"series_id":"8eceab8c-9d59-4750-8e5c-2e43f68d1776","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-15 23:48:30 +0000 UTC FinishedAt: 2026-07-16 02:49:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e4d1db7e-30f2-4647-a50e-6fd8e0c28aaf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*33f134bf-4557-4625-a444-057cb7eed108,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-workflowfbbhl/series-workflowfbbhl-build-action-1135532334/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-workflowfbbhl/series-workflowfbbhl-build-action-3188028787/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-workflowfbbhl/series-workflowfbbhl-convert-artifact-528542456/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,}