Name: series-workflow447tc Phase: Succeeded StartedAt: 2026-07-11 06:22:24 +0000 UTC FinishedAt: 2026-07-11 10:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[0] Phase: Succeeded StartedAt: 2026-07-11 06:22:24 +0000 UTC FinishedAt: 2026-07-11 06:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 06:22:24 +0000 UTC FinishedAt: 2026-07-11 06:38:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS", "DEBUG_WX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS", "DEBUG_WX" ], "series_id": "e62d668d-1c91-46bd-9e40-c96a8eb723d4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vmap_try_huge_pmd", "vmap_try_huge_pud", "vmap_try_huge_p4d", "walk_page_range_debug", "pmd_free_pte_page", "pud_free_pmd_page" ], "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+CgkJCTx0ZD4yMDI2LzA3LzExIDA2OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0RFQlVHX1dYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wdWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wNGQmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDssCiAgICAmIzM0O3BtZF9mcmVlX3B0ZV9wYWdlJiMzNDssCiAgICAmIzM0O3B1ZF9mcmVlX3BtZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGxvZ2ljIGZvciBmcmVlaW5nIHBhZ2UgdGFibGVzIGR1cmluZyBodWdlIHZtYWxsb2MgbWFwcGluZ3MsIHJlcGxhY2luZyBhbiBhcm02NC1zcGVjaWZpYyBzdGF0aWMga2V5IHdpdGggYSBnZW5lcmljIG1tYXBfcmVhZF9sb2NrX3RyeSBpbiBjb3JlIHZtYWxsb2MgY29kZS4gSXQgYWxzbyBhZGRzIGFuIG1tYXAgd3JpdGUgbG9jayBhc3NlcnRpb24gaW4gd2Fsa19wYWdlX3JhbmdlX2RlYnVnLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgY29uY3VycmVudCB2bWFsbG9jIGFuZCBwdGR1bXAgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNjozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc5ZWVkMTg1MWZlZmY3NzI2NTViMWFkNGM4ZDQxOWY5MzllMDBmZjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAwNjozNzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuaW5kZXggNWIzNzRhNmFiMzRhNGUuLjUwYTE5NWVkYThlZDIyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuQEAgLTcsOCAmIzQzOzcsNiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0ZHVtcC5oXHUwMDNlXG4gXG4tREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tXG4gI2lmZGVmIENPTkZJR19QVERVTVBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbmluZGV4IGYyYmU1MDE0NjhjZTVhLi5mNzIzYmNmNjgxNzRmYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbkBAIC00OSw4ICYjNDM7NDksNiBAQFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1x0QklUKDEpXG4gI2RlZmluZSBOT19FWEVDX01BUFBJTkdTXHRCSVQoMilcdC8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovXG4gXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiB1NjQga2ltYWdlX3ZvZmZzZXQgX19yb19hZnRlcl9pbml0O1xuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xuIFxuQEAgLTE4NTcsOCAmIzQzOzE4NTUsNyBAQCBpbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgIGJvb2wgYWNxdWlyZV9tbWFwX2xvY2spXG4mIzQzO2ludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHB0ZV90ICp0YWJsZTtcbiBcdHBtZF90IHBtZDtcbkBAIC0xODcwLDI1ICYjNDM7MTg2NywxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4tXHQvKiBTZWUgY29tbWVudCBpbiBwdWRfZnJlZV9wbWRfcGFnZSBmb3Igc3RhdGljIGtleSBsb2dpYyAqL1xuIFx0dGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTtcbiBcdHBtZF9jbGVhcihwbWRwKTtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSBcdTAwMjZcdTAwMjYgYWNxdWlyZV9tbWFwX2xvY2spIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHR9XG4tXG4gXHRwdGVfZnJlZV9rZXJuZWwoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdC8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovXG4tXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xuLX1cbi1cbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwbWRfdCAqdGFibGU7XG5AQCAtMTkwNCwzNiAmIzQzOzE4ODksMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHR9XG4gXG4gXHR0YWJsZSA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4tXG4tXHQvKlxuLVx0ICogT3VyIG9iamVjdGl2ZSBpcyB0byBwcmV2ZW50IHB0ZHVtcCBmcm9tIHJlYWRpbmcgYSBQTUQgdGFibGUgd2hpY2ggaGFzXG4tXHQgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb25cbi1cdCAqICh3aGljaCBnb3QgZmxpcHBlZCBieSBwdGR1bXApIHRoZW4gdGhlIG1tYXAgbG9jayBzZXF1ZW5jZSBoZXJlIHdpbGwsXG4tXHQgKiBhcyBhIHJlc3VsdCBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrL3VubG9jayBzZXF1ZW5jZSBpbiBwdGR1bXAsIGdpdmVcbi1cdCAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhc1xuLVx0ICogeWV0IG5vdCBzdGFydGVkIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMgLSB0aGUgc2VxdWVuY2Ugb2YgYmFycmllcnNcbi1cdCAqIGlzc3VlZCBieSBfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZSgpIGd1YXJhbnRlZXMgdGhhdCBwdGR1bXAgd2lsbFxuLVx0ICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuXG4tXHQgKi9cbi1cdHB1ZF9jbGVhcihwdWRwKTtcbi1cdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbi1cdH1cbi1cbiBcdHBtZHAgPSB0YWJsZTtcbiBcdG5leHQgPSBhZGRyO1xuIFx0ZW5kID0gYWRkciAmIzQzOyBQVURfU0laRTtcbiBcdGRvIHtcbiBcdFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbiYjMzk7dCBzZWUgaXQuIE5vXG4tXHRcdFx0ICogbmVlZCB0byBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7XG4mIzQzO1x0XHRcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xuIFx0fSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XG4gXG4mIzQzO1x0cHVkX2NsZWFyKHB1ZHApO1xuJiM0MztcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuIFx0cG1kX2ZyZWUoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMjgzLDEzICYjNDM7MjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXG4gXHRub3RlX3BhZ2UocHRfc3QsIDAsIC0xLCBwdGVfdmFsKHB0ZV96ZXJvKSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFybTY0X3B0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4te1xuLVx0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cdHB0ZHVtcF93YWxrX3BnZChzdCwgbW0sIE5VTEwpO1xuLVx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi19XG4tXG4gdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGVuZCA9IH4wVUw7XG5AQCAtMzE4LDcgJiM0MzszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSk7XG4mIzQzO1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxuQEAgLTM2MCw3ICYjNDM7MzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbiBcdFx0fVxuIFx0fTtcbiBcbi1cdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0pO1xuJiM0MztcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuIFxuIFx0aWYgKHN0Lnd4X3BhZ2VzIHx8IHN0LnV4bl9wYWdlcykge1xuIFx0XHRwcl93YXJuKFwmIzM0O0NoZWNrZWQgVyYjNDM7WCBtYXBwaW5nczogRkFJTEVELCAlbHUgVyYjNDM7WCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDA0YjhmNjFlY2U1ZDhlLi42YjVjMjM5MGNjMzAxZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbkBAIC02MjEsNiAmIzQzOzYyMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxuIFx0ICAgICBtbWFwX3JlYWRfbG9jayhfVCksIG1tYXBfcmVhZF91bmxvY2soX1QpKVxuJiM0MztERUZJTkVfR1VBUkRfQ09ORChtbWFwX3JlYWRfbG9jaywgX3RyeSwgbW1hcF9yZWFkX3RyeWxvY2soX1QpKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcbmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li5iYmNmZDY4ZDA5MDdkZiAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2V3YWxrLmNcbkBAIC02NzgsNiAmIzQzOzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kXG4gICogd2lsbCBhbHNvIG5vdCBsb2NrIHRoZSBQVEVzIGZvciB0aGUgcHRlX2VudHJ5KCkgY2FsbGJhY2suXG4gICpcbiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuXG4gICovXG4gaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbkBAIC02OTEsNiAmIzQzOzY5MywxNiBAQCBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHQubm9fdm1hXHRcdD0gdHJ1ZVxuIFx0fTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdoZW4gd2Fsa2luZyB1c2VybGFuZCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZCB0b1xuJiM0MztcdCAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZ1xuJiM0MztcdCAqIGRvd24gcGFnZSB0YWJsZXMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGRcbiYjNDM7XHQgKiB0byBhY2NvdW50IGZvciBwYWdlIHRhYmxlIGZyZWVpbmcgb24gdm1hcCBodWdlIHBhZ2UgbWFwcGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuJiM0MztcbiBcdC8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi9cbiBcdGlmIChtbSA9PSBcdTAwMjZpbml0X21tKVxuIFx0XHRyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsXG5AQCAtNzAwLDE2ICYjNDM7NzEyLDYgQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHQvKlxuLVx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXG4tXHQgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG9cbi1cdCAqIHByb3RlY3QgdGhvc2UgYXJlYXMgd2hpY2ggZG9uJiMzOTt0IGhhdmUgYSBWTUEgYXMgbXVubWFwKCkgZGV0YWNoZXNcbi1cdCAqIHRoZSBWTUFzIGJlZm9yZSBkb3duZ3JhZGluZyB0byBhIHJlYWQgbG9jayBhbmQgYWN0dWFsbHkgdGVhcmluZ1xuLVx0ICogZG93biBQVEVzL3BhZ2UgdGFibGVzLiBJbiB3aGljaCBjYXNlLCB0aGUgbW1hcCB3cml0ZSBsb2NrIHNob3VsZFxuLVx0ICogYmUgaGVsZC5cbi1cdCAqL1xuLVx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcbi1cbiBcdHJldHVybiB3YWxrX3BnZF9yYW5nZShzdGFydCwgZW5kLCBcdTAwMjZ3YWxrKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uNTM3ZmY3YjNjNDEyNzAgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYWxsb2MuY1xuQEAgLTQzLDYgJiM0Mzs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2htcGFyYW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2Vfb3duZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMTU4LDEwICYjNDM7MTU5LDIyIEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBNRF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocG1kX3ByZXNlbnQoKnBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIXBtZF9wcmVzZW50KCpwbWQpKVxuJiM0MztcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEtlcm5lbCBwYWdlIHRhYmxlIHdhbGtlcnMgZWl0aGVyIHdhbGsgcmFuZ2VzIHRoZXkgb3duIGV4Y2x1c2l2ZWx5XG4mIzQzO1x0ICogdXNpbmcgdGhlIG1tYXAgbG9jayBmb3IgbXV0dWFsIGV4Y2x1c2lvbiwgb3IgaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrXG4mIzQzO1x0ICogb24gaW5pdF9tbSAocHRkdW1wIGJlaW5nIHRoZSBtb3RpdmF0aW5nIGNhc2UpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlcmVmb3JlLCBhY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHdoZW5cbiYjNDM7XHQgKiBmcmVlaW5nIHBhZ2UgdGFibGVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbiYjNDM7XHRcdGlmICghcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC0yMTAsMTAgJiM0MzsyMjMsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUFVEX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwdWRfcHJlc2VudCgqcHVkKSBcdTAwMjZcdTAwMjYgIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXG4mIzQzO1x0XHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG4mIzQzO1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuJiM0MztcdFx0aWYgKCFwdWRfZnJlZV9wbWRfcGFnZShwdWQsIGFkZHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTI2MiwxMCAmIzQzOzI4MCwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQNERfU0laRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHA0ZF9wcmVzZW50KCpwNGQpIFx1MDAyNlx1MDAyNiAhcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcbiYjNDM7XHRcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuIFxuLVx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbiYjNDM7XHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4mIzQzO1x0XHRpZiAoIXA0ZF9mcmVlX3B1ZF9wYWdlKHA0ZCwgYWRkcikpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDY6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFREVU1QX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7REVCVUdfV1gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFwX3RyeV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDt2bWFwX3RyeV9odWdlX3B1ZCYjMzQ7LAogICAgJiMzNDt2bWFwX3RyeV9odWdlX3A0ZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OywKICAgICYjMzQ7cG1kX2ZyZWVfcHRlX3BhZ2UmIzM0OywKICAgICYjMzQ7cHVkX2ZyZWVfcG1kX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgbG9naWMgZm9yIGZyZWVpbmcgcGFnZSB0YWJsZXMgZHVyaW5nIGh1Z2Ugdm1hbGxvYyBtYXBwaW5ncywgcmVwbGFjaW5nIGFuIGFybTY0LXNwZWNpZmljIHN0YXRpYyBrZXkgd2l0aCBhIGdlbmVyaWMgbW1hcF9yZWFkX2xvY2tfdHJ5IGluIGNvcmUgdm1hbGxvYyBjb2RlLiBJdCBhbHNvIGFkZHMgYW4gbW1hcCB3cml0ZSBsb2NrIGFzc2VydGlvbiBpbiB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBhbmQgYXJjaGl0ZWN0dXJlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyBjb25jdXJyZW50IHZtYWxsb2MgYW5kIHB0ZHVtcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OWVlZDE4NTFmZWZmNzcyNjU1YjFhZDRjOGQ0MTlmOTM5ZTAwZmY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMDY6Mzc6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaAppbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaApAQCAtNyw4ICYjNDM7Nyw2IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9wdGR1bXAuaCZndDsKIAotREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci0KICNpZmRlZiBDT05GSUdfUFREVU1QCiAKICNpbmNsdWRlICZsdDtsaW51eC9tbV90eXBlcy5oJmd0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKaW5kZXggZjJiZTUwMTQ2OGNlNWEuLmY3MjNiY2Y2ODE3NGZiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKQEAgLTQ5LDggJiM0Mzs0OSw2IEBACiAjZGVmaW5lIE5PX0NPTlRfTUFQUElOR1MJQklUKDEpCiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1MJQklUKDIpCS8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovCiAKLURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci0KIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7CiBFWFBPUlRfU1lNQk9MKGtpbWFnZV92b2Zmc2V0KTsKIApAQCAtMTg1Nyw4ICYjNDM7MTg1NSw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcCkKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaykKJiM0MztpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwdGVfdCAqdGFibGU7CiAJcG1kX3QgcG1kOwpAQCAtMTg3MCwyNSAmIzQzOzE4NjcsMTMgQEAgc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAxOwogCX0KIAotCS8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovCiAJdGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTsKIAlwbWRfY2xlYXIocG1kcCk7CiAJX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7Ci0JaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDthcm02NF9wdGR1bXBfbG9ja19rZXkpICZhbXA7JmFtcDsgYWNxdWlyZV9tbWFwX2xvY2spIHsKLQkJbW1hcF9yZWFkX2xvY2soJmFtcDtpbml0X21tKTsKLQkJbW1hcF9yZWFkX3VubG9jaygmYW1wO2luaXRfbW0pOwotCX0KLQogCXB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7CiAJcmV0dXJuIDE7CiB9CiAKLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCS8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovCi0JcmV0dXJuIF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgYWRkciwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyB0cnVlKTsKLX0KLQogaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcG1kX3QgKnRhYmxlOwpAQCAtMTkwNCwzNiAmIzQzOzE4ODksMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiAJfQogCiAJdGFibGUgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpOwotCi0JLyoKLQkgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXMKLQkgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb24KLQkgKiAod2hpY2ggZ290IGZsaXBwZWQgYnkgcHRkdW1wKSB0aGVuIHRoZSBtbWFwIGxvY2sgc2VxdWVuY2UgaGVyZSB3aWxsLAotCSAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZQotCSAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhcwotCSAqIHlldCBub3Qgc3RhcnRlZCB3YWxraW5nIHRoZSBwYWdldGFibGVzIC0gdGhlIHNlcXVlbmNlIG9mIGJhcnJpZXJzCi0JICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsCi0JICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuCi0JICovCi0JcHVkX2NsZWFyKHB1ZHApOwotCV9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpOwotCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkgewotCQltbWFwX3JlYWRfbG9jaygmYW1wO2luaXRfbW0pOwotCQltbWFwX3JlYWRfdW5sb2NrKCZhbXA7aW5pdF9tbSk7Ci0JfQotCiAJcG1kcCA9IHRhYmxlOwogCW5leHQgPSBhZGRyOwogCWVuZCA9IGFkZHIgJiM0MzsgUFVEX1NJWkU7CiAJZG8gewogCQlpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKQotCQkJLyoKLQkJCSAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbiYjMzk7dCBzZWUgaXQuIE5vCi0JCQkgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suCi0JCQkgKi8KLQkJCV9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7CiYjNDM7CQkJcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7CiAJfSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7CiAKJiM0MzsJcHVkX2NsZWFyKHB1ZHApOwomIzQzOwlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTsKIAlwbWRfZnJlZShOVUxMLCB0YWJsZSk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwppbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwpAQCAtMjgzLDEzICYjNDM7MjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpCiAJbm90ZV9wYWdlKHB0X3N0LCAwLCAtMSwgcHRlX3ZhbChwdGVfemVybykpOwogfQogCi1zdGF0aWMgdm9pZCBhcm02NF9wdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXN0YXRpY19icmFuY2hfaW5jKCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTsKLQlwdGR1bXBfd2Fsa19wZ2Qoc3QsIG1tLCBOVUxMKTsKLQlzdGF0aWNfYnJhbmNoX2RlYygmYW1wO2FybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci19Ci0KIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBlbmQgPSB+MFVMOwpAQCAtMzE4LDcgJiM0MzszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKQogCQl9CiAJfTsKIAotCWFybTY0X3B0ZHVtcF93YWxrX3BnZCgmYW1wO3N0LnB0ZHVtcCwgaW5mby0mZ3Q7bW0pOwomIzQzOwlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsIGluZm8tJmd0O21tLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHB0ZHVtcF9pbml0aWFsaXplKHZvaWQpCkBAIC0zNjAsNyAmIzQzOzM1Myw3IEBAIGJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpCiAJCX0KIAl9OwogCi0JYXJtNjRfcHRkdW1wX3dhbGtfcGdkKCZhbXA7c3QucHRkdW1wLCAmYW1wO2luaXRfbW0pOwomIzQzOwlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsICZhbXA7aW5pdF9tbSwgTlVMTCk7CiAKIAlpZiAoc3Qud3hfcGFnZXMgfHwgc3QudXhuX3BhZ2VzKSB7CiAJCXByX3dhcm4oJiMzNDtDaGVja2VkIFcmIzQzO1ggbWFwcGluZ3M6IEZBSUxFRCwgJWx1IFcmIzQzO1ggcGFnZXMgZm91bmQsICVsdSBub24tVVhOIHBhZ2VzIGZvdW5kXG4mIzM0OywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCmluZGV4IDA0YjhmNjFlY2U1ZDhlLi42YjVjMjM5MGNjMzAxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCkBAIC02MjEsNiAmIzQzOzYyMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKiwKIAkgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpCiYjNDM7REVGSU5FX0dVQVJEX0NPTkQobW1hcF9yZWFkX2xvY2ssIF90cnksIG1tYXBfcmVhZF90cnlsb2NrKF9UKSkKIAogc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewpkaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmMKaW5kZXggM2FlMjU4NmZmNDViNDQuLmJiY2ZkNjhkMDkwN2RmIDEwMDY0NAotLS0gYS9tbS9wYWdld2Fsay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2V3YWxrLmMKQEAgLTY3OCw2ICYjNDM7Njc4LDggQEAgaW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQKICAqIHdpbGwgYWxzbyBub3QgbG9jayB0aGUgUFRFcyBmb3IgdGhlIHB0ZV9lbnRyeSgpIGNhbGxiYWNrLgogICoKICAqIFRoaXMgaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBPTkxZLgomIzQzOyAqCiYjNDM7ICogVGhlIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuCiAgKi8KIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcywKQEAgLTY5MSw2ICYjNDM7NjkzLDE2IEBAIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCS5ub192bWEJCT0gdHJ1ZQogCX07CiAKJiM0MzsJLyoKJiM0MzsJICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvCiYjNDM7CSAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZwomIzQzOwkgKiBkb3duIHBhZ2UgdGFibGVzLgomIzQzOwkgKgomIzQzOwkgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGQKJiM0MzsJICogdG8gYWNjb3VudCBmb3IgcGFnZSB0YWJsZSBmcmVlaW5nIG9uIHZtYXAgaHVnZSBwYWdlIG1hcHBpbmcuCiYjNDM7CSAqLwomIzQzOwltbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pOwomIzQzOwogCS8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi8KIAlpZiAobW0gPT0gJmFtcDtpbml0X21tKQogCQlyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsCkBAIC03MDAsMTYgJiM0Mzs3MTIsNiBAQCBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCWlmICghY2hlY2tfb3BzX3NhZmUob3BzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKgotCSAqIFRoZSBtbWFwIGxvY2sgcHJvdGVjdHMgdGhlIHBhZ2Ugd2Fsa2VyIGZyb20gY2hhbmdlcyB0byB0aGUgcGFnZQotCSAqIHRhYmxlcyBkdXJpbmcgdGhlIHdhbGsuICBIb3dldmVyIGEgcmVhZCBsb2NrIGlzIGluc3VmZmljaWVudCB0bwotCSAqIHByb3RlY3QgdGhvc2UgYXJlYXMgd2hpY2ggZG9uJiMzOTt0IGhhdmUgYSBWTUEgYXMgbXVubWFwKCkgZGV0YWNoZXMKLQkgKiB0aGUgVk1BcyBiZWZvcmUgZG93bmdyYWRpbmcgdG8gYSByZWFkIGxvY2sgYW5kIGFjdHVhbGx5IHRlYXJpbmcKLQkgKiBkb3duIFBURXMvcGFnZSB0YWJsZXMuIEluIHdoaWNoIGNhc2UsIHRoZSBtbWFwIHdyaXRlIGxvY2sgc2hvdWxkCi0JICogYmUgaGVsZC4KLQkgKi8KLQltbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pOwotCiAJcmV0dXJuIHdhbGtfcGdkX3JhbmdlKHN0YXJ0LCBlbmQsICZhbXA7d2Fsayk7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAxYWZjYTM1NjhiOWI2NS4uNTM3ZmY3YjNjNDEyNzAgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL3RsYmZsdXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NobXBhcmFtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZV9vd25lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy92bWFsbG9jLmgmZ3Q7CkBAIC0xNTgsMTAgJiM0MzsxNTksMjIgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBNRF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocG1kX3ByZXNlbnQoKnBtZCkgJmFtcDsmYW1wOyAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCiYjNDM7CQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKgomIzQzOwkgKiBLZXJuZWwgcGFnZSB0YWJsZSB3YWxrZXJzIGVpdGhlciB3YWxrIHJhbmdlcyB0aGV5IG93biBleGNsdXNpdmVseQomIzQzOwkgKiB1c2luZyB0aGUgbW1hcCBsb2NrIGZvciBtdXR1YWwgZXhjbHVzaW9uLCBvciBob2xkIHRoZSBtbWFwIHdyaXRlIGxvY2sKJiM0MzsJICogb24gaW5pdF9tbSAocHRkdW1wIGJlaW5nIHRoZSBtb3RpdmF0aW5nIGNhc2UpLgomIzQzOwkgKgomIzQzOwkgKiBUaGVyZWZvcmUsIGFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgd2hlbgomIzQzOwkgKiBmcmVlaW5nIHBhZ2UgdGFibGVzLgomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgJmFtcDtpbml0X21tKSB7CiYjNDM7CQlpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCkBAIC0yMTAsMTAgJiM0MzsyMjMsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocHVkX3ByZXNlbnQoKnB1ZCkgJmFtcDsmYW1wOyAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpCiYjNDM7CQlyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqLwomIzQzOwlzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCAmYW1wO2luaXRfbW0pIHsKJiM0MzsJCWlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKQEAgLTI2MiwxMCAmIzQzOzI4MCwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJaWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKQogCQlyZXR1cm4gMDsKIAotCWlmIChwNGRfcHJlc2VudCgqcDRkKSAmYW1wOyZhbXA7ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKQotCQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFwNGRfcHJlc2VudCgqcDRkKSkKJiM0MzsJCXJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpOwogCi0JcmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CS8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovCiYjNDM7CXNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsICZhbXA7aW5pdF9tbSkgewomIzQzOwkJaWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CX0KIH0KIAogc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTAwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBIdWdlIFBhZ2VzIGFuZCB2bWFsbG9jKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIGl0JiMzOTtzIG1lc3Npbmcgd2l0aCBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIGB2bWFsbG9jYCBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGh1Z2UgcGFnZXMgYW5kIGxvY2tpbmcuJiMzNDsgVGhlIHBhdGNoIGxvb2tzIGxpa2UgaXQmIzM5O3MgdGFraW5nIG91dCB0aGUgYGFybTY0X3B0ZHVtcF9sb2NrX2tleWAgc3RhdGljIGtleSBsb2dpYyBmcm9tIHRoZSBgYXJtNjRgIGFyY2hpdGVjdHVyZSYjMzk7cyBgbW11LmNgIGFuZCBgcHRkdW1wLmNgIGZpbGVzLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBJIHdvbmRlciB3aHkgdGhleSYjMzk7cmUgZG9pbmcgdGhhdC4gSW5zdGVhZCwgaXQmIzM5O3MgaW50cm9kdWNpbmcgYG1tYXBfcmVhZF9sb2NrX3RyeWAgY2FsbHMgd2l0aGluIGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGFuZCBgdm1hcF90cnlfaHVnZV9wNGRgIGZ1bmN0aW9ucyBpbiBgbW0vdm1hbGxvYy5jYC4gQW5kIGl0IGFsc28gdG91Y2hlcyBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCBpbiBgbW0vcGFnZXdhbGsuY2AsIG1ha2luZyBpdCBhc3NlcnQgYG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSlgIGZvciBrZXJuZWwgcGFnZSB0YWJsZXMuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICYjMzQ7SXMgdGhpcyBmdW5jdGlvbmFsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXMgaXQgYWN0dWFsbHkgKnJlYWNoYWJsZSo/JiMzNDsgTGV0JiMzOTtzIHNlZS4uLiBgdm1hcF90cnlfaHVnZV9wbWRgIGlzIGNhbGxlZCBmcm9tIGB2bWFwX3BtZF9yYW5nZWAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGB2bWFsbG9jYCBwYXRoLiBPa2F5LCB0aGF0IGNvbmZpcm1zIHRoYXQgYHZtYWxsb2NgIGl0c2VsZiBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhbHRlcmluZyBob3cgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIHdoZW4gd2UmIzM5O3JlIGNyZWF0aW5nIHRob3NlIGh1Z2UgbWFwcGluZ3MgaW5zaWRlIGB2bWFsbG9jYC4gSXQmIzM5O3MgdXNpbmcgYHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsICZhbXA7aW5pdF9tbSlgIHRvIGdldCB0aGUgYG1tYXBgIHJlYWQgbG9jay4gSWYgdGhlIGxvY2sgYWNxdWlzaXRpb24gZmFpbHMsIGl0IHJldHVybnMgMCwgd2hpY2ggbGlrZWx5IHNpZ25hbHMgYSBmYWxsYmFjayB0byBub24taHVnZSBtYXBwaW5nLCBvciBwZXJoYXBzIGEgZmFpbHVyZSBhbHRvZ2V0aGVyLgoKTm93IEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2FpdCBhIHNlY29uZCwgdGhpcyBpcyB0b3VjaGluZyBgbW0vdm1hbGxvYy5jYC4uLiB0aGF0JiMzOTtzIGNvcmUga2VybmVsIGNvZGUuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIGxvb2sgYXQgY2FyZWZ1bGx5LiYjMzQ7IEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYHZtYXBfdHJ5X2h1Z2VfcG1kYCBpbiBgbW0vdm1hbGxvYy5jYCBub3cgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4gT2theSwgc28gaHVnZSBwYWdlIHZtYWxsb2MgKmlzKiByZWFjaGFibGUg4oCTIHRoYXQgY29uZmlybXMgaXQuIE5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCwgYW55dGhpbmcgdGhhdCB0aGlzIGRlcGVuZHMgb24uIFBlcmhhcHMgc29tZXRoaW5nIGxpa2UgYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYD8gSSBzaG91bGQgcHJvYmFibHkgZ3JlcCBmb3IgYHZtYXBfdHJ5X2h1Z2VfcG1kYCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIHJlbGV2YW50IGluIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTk1PXN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMTQyLVxubW0vdm1hbGxvYy5jOjE0MzpzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5tbS92bWFsbG9jLmMtMTQ0LVx0XHRcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcbi0tXG5tbS92bWFsbG9jLmM9MTgwPXN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMTkzLVxubW0vdm1hbGxvYy5jOjE5NDpcdFx0aWYgKHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90LFxubW0vdm1hbGxvYy5jLTE5NS1cdFx0XHRcdFx0bWF4X3BhZ2Vfc2hpZnQpKSB7XG4tLVxubW0vdm1hbGxvYy5jPTIwNz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTIyOC1cbm1tL3ZtYWxsb2MuYzoyMjk6XHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xubW0vdm1hbGxvYy5jLTIzMC1cdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbi0tXG5tbS92bWFsbG9jLmM9MjY0PXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMjg1LVxubW0vdm1hbGxvYy5jOjI4NjpcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG5tbS92bWFsbG9jLmMtMjg3LVx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSB2bWFsbG9jIHJlZ2lvbiBjb3JyZWN0bHksIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBodWdlIHBhZ2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB3ZSYjMzk7cmUgdXNpbmcgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gbWFjcm8uIExldCYjMzk7cyBzZWUuLi4gaXMgYEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIHRoZSBhcHByb3ByaWF0ZSBmbGFnIHRvIGRldGVybWluZSBpZiB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIGFuZCB1dGlsaXplcyBodWdlIHZtYWxsb2MgcmVnaW9ucz8gSXQmIzM5O3MgY3J1Y2lhbCB0byBnZXQgdGhpcyByaWdodC4gV2UgbmVlZCB0aGlzIHNvIHRoYXQgdGhlIGtlcm5lbCBjYW4gYWxsb2NhdGUgbGFyZ2UgY29udGlndW91cyB2aXJ0dWFsIG1lbW9yeSByZWdpb25zIGZvciBjZXJ0YWluIG9wZXJhdGlvbnMuIElmIGl0JiMzOTtzIG5vdCBzZXQgY29ycmVjdGx5LCB3ZSBtaWdodCBiZSB1c2luZyBzdWJvcHRpbWFsIGFsbG9jYXRpb25zLCBvciB3b3JzZSwgY2F1c2luZyBzdGFiaWxpdHkgaXNzdWVzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IGFyY2hpdGVjdHVyZSBjb2RlIGFuZCBLY29uZmlnIGZpbGVzIHRvIGNvbmZpcm0gdGhpcyBpcyB0aGUgZGVmaW5pdGl2ZSBjaGVjayBhbmQgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGZhY3RvcnMgaW5mbHVlbmNpbmcgdGhlIGJlaGF2aW9yIG9mIHZtYWxsb2MgYW5kIGh1Z2UgcGFnZXMuIExldCYjMzk7cyBzdGFydCBieSB0cmFjaW5nIHRoZSB1c2FnZXMgb2YgdGhpcyBtYWNybyBhbmQgaG93IGl0IGFmZmVjdHMgdGhlIHZtYWxsb2MgaW1wbGVtZW50YXRpb24gaW4gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgY2xhcmlmeSBpZiBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgb3IgaWYgdGhlcmUgYXJlIG90aGVyLCBwb3NzaWJseSBwbGF0Zm9ybS1zcGVjaWZpYywgY29uc2lkZXJhdGlvbnMgdG8gYWNjb3VudCBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9BUkNIX0hVR0VfVk1BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTA5Mj1jb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxuLS1cbmFyY2gvS2NvbmZpZy0xMDk5LSNcbmFyY2gvS2NvbmZpZzoxMTAwOmNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5hcmNoL0tjb25maWctMTEwMS1cdGRlcGVuZHMgb24gSEFWRV9BUkNIX0hVR0VfVk1BUFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTMtXHRzZWxlY3QgSEFWRV9BUkNIX0NPTVBJTEVSX0hcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNTQ6XHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xuYXJjaC9hcm02NC9LY29uZmlnLTE1NS1cdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yMTgtXHRzZWxlY3QgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MjE5Olx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcdFx0aWYgSEFWRV9BUkNIX0hVR0VfVk1BUFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjIwLVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcdFx0aWYgUFBDX1JBRElYX01NVSB8fCBQUENfOHh4XG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xMzEtXHRzZWxlY3QgSEFWRV9BUkNIX0JJVFJFVkVSU0UgaWYgUklTQ1ZfSVNBX1pCS0IgXHUwMDI2XHUwMDI2IEJJVFJFVkVSU0VcbmFyY2gvcmlzY3YvS2NvbmZpZzoxMzI6XHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQyBpZiBIQVZFX0FSQ0hfSFVHRV9WTUFQXG5hcmNoL3Jpc2N2L0tjb25maWctMTMzLVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVAgaWYgTU1VIFx1MDAyNlx1MDAyNiA2NEJJVFxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTkyLVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcdFx0aWYgWDg2XzY0IHx8IFg4Nl9QQUVcbmFyY2gveDg2L0tjb25maWc6MTkzOlx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcdFx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTE5NC1cdHNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTFxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTE5PXN0cnVjdCBpb3ZfaXRlcjtcdFx0LyogaW4gdWlvLmggKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0zMS0jZGVmaW5lIFZNX01BUF9QVVRfUEFHRVNcdDB4MDAwMDAyMDBcdC8qIHB1dCBwYWdlcyBhbmQgZnJlZSBhcnJheSBpbiB2ZnJlZSAqL1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MzI6I2RlZmluZSBWTV9BTExPV19IVUdFX1ZNQVBcdDB4MDAwMDA0MDAgICAgICAvKiBBbGxvdyBmb3IgaHVnZSBwYWdlcyBvbiBhcmNocyB3aXRoIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgKi9cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTMzLVxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTUyPXN0cnVjdCB2bV9zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTYxLVx0c3RydWN0IHBhZ2VcdFx0KipwYWdlcztcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjYyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtNjMtXHR1bnNpZ25lZCBpbnRcdFx0cGFnZV9vcmRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0yNTg9c3RhdGljIGlubGluZSBib29sIGlzX3ZtX2FyZWFfaHVnZXBhZ2VzKGNvbnN0IHZvaWQgKmFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjY2LVx0ICovXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDoyNjc6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0yNjgtXHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhID0gZmluZF92bV9hcmVhKGFkZHIpO1xuLS1cbm1tL3ZtYWxsb2MuYz02ND1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlvcmVtYXBfbWF4X3BhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xuLS1cbm1tL3ZtYWxsb2MuYy02Ni1cbm1tL3ZtYWxsb2MuYzo2NzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0Ncbm1tL3ZtYWxsb2MuYy02OC1zdGF0aWMgYm9vbCBfX3JvX2FmdGVyX2luaXQgdm1hcF9hbGxvd19odWdlID0gdHJ1ZTtcbi0tXG5tbS92bWFsbG9jLmM9NzU9ZWFybHlfcGFyYW0oXCYjMzQ7bm9odWdldm1hbGxvY1wmIzM0Oywgc2V0X25vaHVnZXZtYWxsb2MpO1xubW0vdm1hbGxvYy5jOjc2OiNlbHNlIC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DICovXG5tbS92bWFsbG9jLmMtNzctc3RhdGljIGNvbnN0IGJvb2wgdm1hcF9hbGxvd19odWdlID0gZmFsc2U7XG5tbS92bWFsbG9jLmM6Nzg6I2VuZGlmXHQvKiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQyAqL1xubW0vdm1hbGxvYy5jLTc5LVxuLS1cbm1tL3ZtYWxsb2MuYz02ODI9aW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTY4OC1cbm1tL3ZtYWxsb2MuYzo2ODk6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpIHx8XG5tbS92bWFsbG9jLmMtNjkwLVx0XHRcdHBhZ2Vfc2hpZnQgPT0gUEFHRV9TSElGVClcbi0tXG5tbS92bWFsbG9jLmM9MzEyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0pXG5tbS92bWFsbG9jLmMtMzEyOS17XG5tbS92bWFsbG9jLmM6MzEzMDojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0Ncbm1tL3ZtYWxsb2MuYy0zMTMxLVx0cmV0dXJuIHZtLVx1MDAzZXBhZ2Vfb3JkZXI7XG4tLVxubW0vdm1hbGxvYy5jPTMxNDI9c3RhdGljIGlubGluZSB2b2lkIHNldF92bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3ZtYWxsb2MuYy0zMTQzLXtcbm1tL3ZtYWxsb2MuYzozMTQ0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xubW0vdm1hbGxvYy5jLTMxNDUtXHR2bS1cdTAwM2VwYWdlX29yZGVyID0gb3JkZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1MwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEEgTG9jay1Eb3duIG9uIEh1Z2Ugdm1hbGxvYyBQYWdlIFRhYmxlIFJhY2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY2hhbmdlcyB0byBgbW0vdm1hbGxvYy5jYCwgc3BlY2lmaWNhbGx5IHRob3NlIGFsdGVyYXRpb25zIHRvIGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGFuZCBgdm1hcF90cnlfaHVnZV9wNGRgLiBUaGVzZSBhcmUgY2FsbGVkIGJ5IHRoZSByYW5nZS1iYXNlZCBmdW5jdGlvbnMsIG1lYW5pbmcgdGhleSYjMzk7cmUgY2VudHJhbCB0byBlbmFibGluZyBodWdlIHZtYWxsb2MgbWFwcGluZ3Mg4oCTIHNvLCB3ZSYjMzk7cmUgdGFsa2luZyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIGhlcmUuIEkgc2VlIHRoZXkmIzM5O3JlIGFsc28gdG91Y2hpbmcgYGFyY2gvYXJtNjQvbW0vbW11LmNgIGFuZCBgYXJjaC9hcm02NC9tbS9wdGR1bXAuY2AsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBjbG9zZSBhdHRlbnRpb24sIHNpbmNlIEFSTTY0IGlzIGEga2V5IHRhcmdldC4gU3BlY2lmaWNhbGx5LCBjaGFuZ2VzIHRvIGBwbWRfZnJlZV9wdGVfcGFnZWAsIGBwdWRfZnJlZV9wbWRfcGFnZWAgZXQgY2V0ZXJhLCBoaW50IGF0IG1vZGlmaWNhdGlvbnMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMg4oCTIHN0YW5kYXJkIHRlcnJpdG9yeS4gQWxzbyBgcHRkdW1wX3dhbGtgIGFuZCBgcHRkdW1wX2NoZWNrX3d4YCwgdGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBjb21iaW5hdGlvbiB3aXRoIHRoZSB2bWFsbG9jIGNoYW5nZXMuCgpBaCwgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB0aGUgcGF0Y2ggKnJlbW92ZXMqIGBhcm02NF9wdGR1bXBfbG9ja19rZXlgIGFuZCBhZGRzIGBtbWFwX3JlYWRfbG9ja190cnlgIHdpdGhpbiBgdm1hcF90cnlfaHVnZV9wbWRgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSwgbm90IGp1c3QgYSBjbGVhbnVwLiBJdCYjMzk7cyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24hIEkmIzM5O20gYmV0dGluZyB0aGF0IHRoZSByYWNlIGlzIGJldHdlZW4gZnJlZWluZyB2bWFsbG9jIGh1Z2UgcGFnZSB0YWJsZXMgYW5kIGBwdGR1bXBgIHdhbGtpbmcgdGhvc2UgdGFibGVzLiBUaGlzIGxvY2tzIGl0IGRvd24uCgpOb3csIHRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyB0aGlzIHBhdGNoIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvY2tpbmcgcHJpbWl0aXZlcyBpbiB2bWFsbG9jIGFuZCBwYWdlIHRhYmxlIHdhbGtpbmcsIHNvIHRoaXMgaXMgY3JpdGljYWwuIEEgZnV6emluZyBjYW1wYWlnbiBoZXJlIGlzIGRlZmluaXRlbHkgYSBnb29kIGlkZWEsIHBhcnRpY3VsYXJseSBnaXZlbiBpdCBpbXBhY3RzIGEgdmFyaWV0eSBvZiBBUk02NCBjb25maWd1cmF0aW9ucy4KCkFzIGZvciBjb25maWd1cmF0aW9ucywgd2VsbCBgQ09ORklHX1BURFVNUF9DT1JFYCBvciBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBhcmUgdGhlIG9idmlvdXMgb25lcyBmb3IgYHB0ZHVtcGAuIFNpbmNlIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AgaXMgYXJjaGl0ZWN0dXJlLXNlbGVjdGVkLCBubyBuZWVkIHRvIHdvcnJ5IHRoZXJlLCBidXQgYENPTkZJR19ERUJVR19XWGAgb3IgYENPTkZJR19QVERVTVBfREVCVUdGU2AgbWF5IGJlIHVzZWZ1bC4gVGltZSB0byBjaGVjayBgQ09ORklHX1BURFVNUGAgaW4gYGFyY2gvYXJtNjQvS2NvbmZpZ2AgZm9yIHJlbGF0ZWQgY29uZmlnIGRlcGVuZGVuY2llcyBvciBhbnkgcmVsZXZhbnQgZGV0YWlscyBJIG1pZ2h0IGhhdmUgbWlzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BURFVNUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvcHRkdW1wLnJzdD0yMz1jb25maWd1cmF0aW9ucyBhbmQgbW91bnQgZGVidWdmczo6XG5Eb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvcHRkdW1wLnJzdC0yNC1cbkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9wdGR1bXAucnN0OjI1OiBDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L3B0ZHVtcC5yc3QtMjYtXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zy0yLVxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZzozOmNvbmZpZyBBUk1fUFREVU1QX0NPUkVcbmFyY2gvYXJtL0tjb25maWcuZGVidWctNC1cdGRlZl9ib29sIG5cbmFyY2gvYXJtL0tjb25maWcuZGVidWctNS1cbmFyY2gvYXJtL0tjb25maWcuZGVidWc6Njpjb25maWcgQVJNX1BURFVNUF9ERUJVR0ZTXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTctXHRib29sIFwmIzM0O0V4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcJiMzNDtcbi0tXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTktXHRkZXBlbmRzIG9uIE1NVVxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZzoxMDpcdHNlbGVjdCBBUk1fUFREVU1QX0NPUkVcbmFyY2gvYXJtL0tjb25maWcuZGVidWctMTEtXHRzZWxlY3QgREVCVUdfRlNcbi0tXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnPTIwPWNvbmZpZyBBUk1fREVCVUdfV1hcbi0tXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTIyLVx0ZGVwZW5kcyBvbiBNTVVcbmFyY2gvYXJtL0tjb25maWcuZGVidWc6MjM6XHRzZWxlY3QgQVJNX1BURFVNUF9DT1JFXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTI0LVx0aGVscFxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTItLyogQ29weXJpZ2h0IChDKSAyMDE0IEFSTSBMdGQuICovXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaDozOiNpZm5kZWYgX19BU01fUFREVU1QX0hcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjQ6I2RlZmluZSBfX0FTTV9QVERVTVBfSFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtNS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjY6I2lmZGVmIENPTkZJR19BUk1fUFREVU1QX0NPUkVcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTctXG4tLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MjI9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pO1xuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6MjM6I2lmZGVmIENPTkZJR19BUk1fUFREVU1QX0RFQlVHRlNcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTI0LSNkZWZpbmUgRUZJX1JVTlRJTUVfTUFQX0VORFx0U1pfMUdcbi0tXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaD0yNz1zdGF0aWMgaW5saW5lIHZvaWQgcHRkdW1wX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvLFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjgtXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm5hbWUpIHsgfVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6Mjk6I2VuZGlmIC8qIENPTkZJR19BUk1fUFREVU1QX0RFQlVHRlMgKi9cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTMwLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MzE9dm9pZCBwdGR1bXBfY2hlY2tfd3godm9pZCk7XG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zMi1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjMzOiNlbmRpZiAvKiBDT05GSUdfQVJNX1BURFVNUF9DT1JFICovXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zNC1cbi0tXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC00MC1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjQxOiNlbmRpZiAvKiBfX0FTTV9QVERVTVBfSCAqL1xuLS1cbmFyY2gvYXJtL21tL01ha2VmaWxlPTE1PWVuZGlmXG5hcmNoL2FybS9tbS9NYWtlZmlsZS0xNi1cbmFyY2gvYXJtL21tL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19BUk1fUFREVU1QX0NPUkUpXHQmIzQzOz0gZHVtcC5vXG5hcmNoL2FybS9tbS9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTKVx0JiM0Mzs9IHB0ZHVtcF9kZWJ1Z2ZzLm9cbmFyY2gvYXJtL21tL01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19NT0RVTEVTKVx0XHQmIzQzOz0gcHJvYy1zeW1zLm9cbi0tXG5hcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcbi0tXG5hcmNoL2FybTY0L0tjb25maWctNDQtXHRzZWxlY3QgQVJDSF9IQVNfUFJFRU1QVF9MQVpZXG5hcmNoL2FybTY0L0tjb25maWc6NDU6XHRzZWxlY3QgQVJDSF9IQVNfUFREVU1QXG5hcmNoL2FybTY0L0tjb25maWctNDYtXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTUzPXN0cnVjdCBrdm1fczJfbW11IHtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjE5LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjIyMDojaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGU1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIyMS1cdHN0cnVjdCBkZW50cnkgKnNoYWRvd19wdF9kZWJ1Z2ZzX2RlbnRyeTtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MzA5PXN0cnVjdCBrdm1fYXJjaCB7XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTQyMi1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDo0MjM6I2lmZGVmIENPTkZJR19QVERVTVBfU1RBR0UyX0RFQlVHRlNcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC00MjQtXHQvKiBOZXN0ZWQgdmlydHVhbGl6YXRpb24gaW5mbyAqL1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oPTM4Nz1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX3N1cHBvcnRzX2NhY2hlYWJsZV9wZm5tYXAodm9pZClcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaC0zOTItXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaDozOTM6I2lmZGVmIENPTkZJR19QVERVTVBfU1RBR0UyX0RFQlVHRlNcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oLTM5NC12b2lkIGt2bV9zMl9wdGR1bXBfY3JlYXRlX2RlYnVnZnMoc3RydWN0IGt2bSAqa3ZtKTtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaD00MDA9c3RhdGljIGlubGluZSB2b2lkIGt2bV9uZXN0ZWRfczJfcHRkdW1wX3JlbW92ZV9kZWJ1Z2ZzKHN0cnVjdCBrdm1fczJfbW11ICptbXUpIHt9XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaDo0MDE6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfU1RBR0UyX0RFQlVHRlMgKi9cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oLTQwMi1cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTQtICovXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjU6I2lmbmRlZiBfX0FTTV9QVERVTVBfSFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo2OiNkZWZpbmUgX19BU01fUFREVU1QX0hcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtNy1cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTktXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjEwOiNpZmRlZiBDT05GSUdfUFREVU1QXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTExLVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg9Njg9dm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo2OTojaWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTcwLSNkZWZpbmUgRUZJX1JVTlRJTUVfTUFQX0VORFx0REVGQVVMVF9NQVBfV0lORE9XXzY0XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaD03Mz1zdGF0aWMgaW5saW5lIHZvaWQgcHRkdW1wX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvLFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC03NC1cdFx0XHRcdFx0ICAgY29uc3QgY2hhciAqbmFtZSkgeyB9XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjc1OiNlbmRpZiAvKiBDT05GSUdfUFREVU1QX0RFQlVHRlMgKi9cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtNzYtI2Vsc2Vcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oPTg0PXN0YXRpYyBpbmxpbmUgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QpIHsgfVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo4NTojZW5kaWYgLyogQ09ORklHX1BURFVNUCAqL1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC04Ni1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg6ODc6I2VuZGlmIC8qIF9fQVNNX1BURFVNUF9IICovXG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZz00NT1pZiBLVk1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDYtXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBQVERVTVBfU1RBR0UyX0RFQlVHRlNcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ByZXNlbnQgdGhlIHN0YWdlLTIgcGFnZXRhYmxlcyB0byBkZWJ1Z2ZzXCYjMzQ7XG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy01MC1cdGRlcGVuZHMgb24gREVCVUdfRlNcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6NTE6XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzo1MjpcdHNlbGVjdCBQVERVTVBcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNTMtXHRkZWZhdWx0IG5cbi0tXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZT0zMD1rdm0tJChDT05GSUdfQVJNNjRfUFRSX0FVVEgpICAmIzQzOz0gcGF1dGgub1xuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MzE6a3ZtLSQoQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGUykgJiM0Mzs9IHB0ZHVtcC5vXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0zMi1cbi0tXG5hcmNoL2FybTY0L21tL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcdCYjNDM7PSBodWdldGxicGFnZS5vXG5hcmNoL2FybTY0L21tL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1BURFVNUClcdFx0JiM0Mzs9IHB0ZHVtcC5vXG5hcmNoL2FybTY0L21tL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX1BURFVNUF9ERUJVR0ZTKVx0JiM0Mzs9IHB0ZHVtcF9kZWJ1Z2ZzLm9cbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX1RSQU5TX1RBQkxFKVx0JiM0Mzs9IHRyYW5zX3BnZC5vXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNDktXHRzZWxlY3QgQVJDSF9IQVNfUFJFRU1QVF9MQVpZXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxNTA6XHRzZWxlY3QgQVJDSF9IQVNfUFREVU1QXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNTEtXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZz03OT1DT05GSUdfUFBDX0VBUkxZX0RFQlVHPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnOjgwOkNPTkZJR19QVERVTVBfREVCVUdGUz15XG4tLVxuYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19QUENfQ09QUk9fQkFTRSlcdCYjNDM7PSBjb3Byb19mYXVsdC5vXG5hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX1BURFVNUClcdFx0JiM0Mzs9IHB0ZHVtcC9cbmFyY2gvcG93ZXJwYy9tbS9NYWtlZmlsZS0xOS1vYmotJChDT05GSUdfS0FTQU4pXHRcdCYjNDM7PSBrYXNhbi9cbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX1BQQ19CT09LM1NfNjQpXHQmIzQzOz0gYm9vazNzNjQub1xuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9NYWtlZmlsZS0xMC1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvTWFrZWZpbGU6MTE6aWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19QUENfQk9PSzNTXzMyKVx0JiM0Mzs9IGJhdHMubyBzZWdtZW50X3JlZ3Mub1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM9NDA2PXN0YXRpYyBpbnQgX19pbml0IHB0ZHVtcF9pbml0KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy00MTktXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjQyMDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19QVERVTVBfREVCVUdGUykpXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTQyMS1cdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtrZXJuZWxfcGFnZV90YWJsZXNcJiMzNDssIDA0MDAsIE5VTEwsIE5VTEwsIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTQ2LVx0c2VsZWN0IEFSQ0hfSEFTX1BSRVBBUkVfU1lOQ19DT1JFX0NNRFxuYXJjaC9yaXNjdi9LY29uZmlnOjQ3Olx0c2VsZWN0IEFSQ0hfSEFTX1BURFVNUCBpZiBNTVVcbmFyY2gvcmlzY3YvS2NvbmZpZy00OC1cdHNlbGVjdCBBUkNIX0hBU19QVEVfU1BFQ0lBTFxuLS1cbmFyY2gvcmlzY3YvbW0vTWFrZWZpbGU9MjE9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgJiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvcmlzY3YvbW0vTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX1BURFVNUCkgJiM0Mzs9IHB0ZHVtcC5vXG5hcmNoL3Jpc2N2L21tL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19LQVNBTikgICAmIzQzOz0ga2FzYW5faW5pdC5vXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0xMDMtXHRzZWxlY3QgQVJDSF9IQVNfUFJFRU1QVF9MQVpZXG5hcmNoL3MzOTAvS2NvbmZpZzoxMDQ6XHRzZWxlY3QgQVJDSF9IQVNfUFREVU1QXG5hcmNoL3MzOTAvS2NvbmZpZy0xMDUtXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODQyPUNPTkZJR19ERUJVR19XWD15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6ODQzOkNPTkZJR19QVERVTVBfREVCVUdGUz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctODQ0LUNPTkZJR19ERUJVR19PQkpFQ1RTPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9ODIxPUNPTkZJR19ERUJVR19XWD15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6ODIyOkNPTkZJR19QVERVTVBfREVCVUdGUz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctODIzLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15XG4tLVxuYXJjaC9zMzkwL21tL01ha2VmaWxlPTExPW9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpXHQmIzQzOz0gaHVnZXRsYnBhZ2Uub1xuYXJjaC9zMzkwL21tL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QVERVTVApXHRcdCYjNDM7PSBkdW1wX3BhZ2V0YWJsZXMub1xuYXJjaC9zMzkwL21tL01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19QRkFVTFQpXHRcdCYjNDM7PSBwZmF1bHQub1xuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0xODI9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbi0tXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjI0LVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjIyNTojaWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjI2LXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0yNTU9REVGSU5FX1NIT1dfQVRUUklCVVRFKHB0ZHVtcCk7XG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MjU2OiNlbmRpZiAvKiBDT05GSUdfUFREVU1QX0RFQlVHRlMgKi9cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTctXG4tLVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jPTMxNT1zdGF0aWMgaW50IHB0X2R1bXBfaW5pdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNTUtXHRzb3J0KFx1MDAyNm1hcmtlcnNbMV0sIG1hcmtlcnNfY250IC0gMSwgc2l6ZW9mKCptYXJrZXJzKSwgcHRkdW1wX2NtcCwgTlVMTCk7XG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MzU2OiNpZmRlZiBDT05GSUdfUFREVU1QX0RFQlVHRlNcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNTctXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2tlcm5lbF9wYWdlX3RhYmxlc1wmIzM0OywgMDQwMCwgTlVMTCwgTlVMTCwgXHUwMDI2cHRkdW1wX2ZvcHMpO1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM1ODojZW5kaWYgLyogQ09ORklHX1BURFVNUF9ERUJVR0ZTICovXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMzU5LVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy05OC1cdHNlbGVjdCBBUkNIX0hBU19QUkVFTVBUX0xBWllcbmFyY2gveDg2L0tjb25maWc6OTk6XHRzZWxlY3QgQVJDSF9IQVNfUFREVU1QXG5hcmNoL3g4Ni9LY29uZmlnLTEwMC1cdHNlbGVjdCBBUkNIX0hBU19QVEVfU1BFQ0lBTFxuLS1cbmFyY2gveDg2L0tjb25maWcuZGVidWc9NTk9Y29uZmlnIEVGSV9QR1RfRFVNUFxuLS1cbmFyY2gveDg2L0tjb25maWcuZGVidWctNjEtXHRkZXBlbmRzIG9uIEVGSVxuYXJjaC94ODYvS2NvbmZpZy5kZWJ1Zzo2MjpcdHNlbGVjdCBQVERVTVBcbmFyY2gveDg2L0tjb25maWcuZGVidWctNjMtXHRoZWxwXG4tLVxuYXJjaC94ODYvbW0vTWFrZWZpbGU9MzY9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcdCYjNDM7PSBodWdldGxicGFnZS5vXG5hcmNoL3g4Ni9tbS9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfUFREVU1QKVx0XHQmIzQzOz0gZHVtcF9wYWdldGFibGVzLm9cbmFyY2gveDg2L21tL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19QVERVTVBfREVCVUdGUylcdCYjNDM7PSBkZWJ1Z19wYWdldGFibGVzLm9cbmFyY2gveDg2L21tL01ha2VmaWxlLTM5LVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2FybS1ydW50aW1lLmMtMjctXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9hcm0tcnVudGltZS5jOjI4OiNpZiBkZWZpbmVkKENPTkZJR19QVERVTVBfREVCVUdGUykgfHwgZGVmaW5lZChDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTKVxuZHJpdmVycy9maXJtd2FyZS9lZmkvYXJtLXJ1bnRpbWUuYy0yOS0jaW5jbHVkZSBcdTAwM2Nhc20vcHRkdW1wLmhcdTAwM2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTItXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjM6I2lmbmRlZiBfTElOVVhfUFREVU1QX0hcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6NDojZGVmaW5lIF9MSU5VWF9QVERVTVBfSFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC01LVxuLS1cbmluY2x1ZGUvbGludXgvcHRkdW1wLmg9MzQ9c3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2NoZWNrd3godm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTM5LVxuaW5jbHVkZS9saW51eC9wdGR1bXAuaDo0MDojZW5kaWYgLyogX0xJTlVYX1BURFVNUF9IICovXG4tLVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnPTc4PUNPTkZJR19LQVNBTl9WTUFMTE9DPXlcbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZzo3OTpDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTgwLUNPTkZJR19TQ0hFRF9TVEFDS19FTkRfQ0hFQ0s9eVxuLS1cbm1tL0tjb25maWcuZGVidWc9MTg2PWNvbmZpZyBERUJVR19XWFxuLS1cbm1tL0tjb25maWcuZGVidWctMTg4LVx0ZGVwZW5kcyBvbiBBUkNIX0hBU19ERUJVR19XWFxubW0vS2NvbmZpZy5kZWJ1ZzoxODk6XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxubW0vS2NvbmZpZy5kZWJ1Zy0xOTAtXHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZy5kZWJ1ZzoxOTE6XHRzZWxlY3QgUFREVU1QXG5tbS9LY29uZmlnLmRlYnVnLTE5Mi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTIxNS1cbm1tL0tjb25maWcuZGVidWc6MjE2OmNvbmZpZyBBUkNIX0hBU19QVERVTVBcbm1tL0tjb25maWcuZGVidWctMjE3LVx0Ym9vbFxubW0vS2NvbmZpZy5kZWJ1Zy0yMTgtXG5tbS9LY29uZmlnLmRlYnVnOjIxOTpjb25maWcgUFREVU1QXG5tbS9LY29uZmlnLmRlYnVnLTIyMC1cdGJvb2xcbm1tL0tjb25maWcuZGVidWctMjIxLVxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cdGJvb2wgXCYjMzQ7RXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1wmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWctMjI1LVx0ZGVwZW5kcyBvbiBERUJVR19GU1xubW0vS2NvbmZpZy5kZWJ1ZzoyMjY6XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjc6XHRzZWxlY3QgUFREVU1QXG5tbS9LY29uZmlnLmRlYnVnLTIyOC1cdGhlbHBcbi0tXG5tbS9NYWtlZmlsZT0xNDE9b2JqLSQoQ09ORklHX01BUFBJTkdfRElSVFlfSEVMUEVSUykgJiM0Mzs9IG1hcHBpbmdfZGlydHlfaGVscGVycy5vXG5tbS9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX1BURFVNUCkgJiM0Mzs9IHB0ZHVtcC5vXG5tbS9NYWtlZmlsZS0xNDMtb2JqLSQoQ09ORklHX1BBR0VfUkVQT1JUSU5HKSAmIzQzOz0gcGFnZV9yZXBvcnRpbmcub1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND0xMTQ9Q09ORklHX1BST1ZFX0xPQ0tJTkc9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0OjExNTpDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0LTExNi1DT05GSUdfUkNfREVWSUNFUz15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweD05NT1DT05GSUdfUFJPVkVfTE9DS0lORz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4Ojk2OkNPTkZJR19QVERVTVBfREVCVUdGUz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTk3LUNPTkZJR19SQ19ERVZJQ0VTPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUFREVU1QIENvbmZpZ3VyYXRpb24gYW5kIFZNQUxMT0MgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjb25uZWN0aW9uIHRvIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIG9idmlvdXMuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZW5hYmxlciBoZXJlLiBCdXQsIGludGVyZXN0aW5nbHksIGBDT05GSUdfREVCVUdfV1hgIGFsc28gdHJpZ2dlcnMgcHRkdW1wIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aG9zZSBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnMgd2l0aGluIGBtbS92bWFsbG9jLmNgIOKAkyBzcGVjaWZpY2FsbHkgYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAuCgpJIGtub3cgdGhlc2UgYXJlIG9ubHkgcmVsZXZhbnQgd2hlbiBgdm1hcF9hbGxvd19odWdlYCBpcyB0cnVlLCB3aGljaCwgaW4gdHVybiwgaXMgZGlyZWN0bHkgdGllZCB0byB3aGV0aGVyIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AgaXMgZW5hYmxlZC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSWYgd2Ugd2FudCBwdGR1bXAgZm9yIHRoaXMsIHdlJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgUFREVU1QX0RFQlVHRlNgLiBObyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwgSSYjMzk7bSB0aGlua2luZywgYERFQlVHX1dYYCBpcyBhbm90aGVyIHNvbGlkIG9wdGlvbiB0byBjb25zaWRlciBmb3IgdGhpcyBjb25maWd1cmF0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBkZWVwZXIgYW5kIHBpbnBvaW50IGFueSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBnb29kIGNhbmRpZGF0ZXMgdG8gbW9uaXRvci4gQmV5b25kIHRob3NlIGB2bWFwX3RyeV9odWdlXypgIGZ1bmN0aW9ucywgdGhlIGNvZGUgbWVudGlvbnMgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AsIGBwbWRfZnJlZV9wdGVfcGFnZWAsIGFuZCBgcHVkX2ZyZWVfcG1kX3BhZ2VgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBpbiBvdXIgc2V0dXAuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHBhdGhzIGhlcmUgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBnZXR0aW5nIHdoYXQgd2UgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9MzgyPVdlIGFsc28gcGVybWl0IGEgdHJ1bHkgdW51c3VhbCBjYXNlIGlzIHRoZSB0cmF2ZXJzYWwgb2Ygbm9uLVZNQSByYW5nZXMgaW5cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6MzgzOioqdXNlcmxhbmQqKiByYW5nZXMsIGFzIHByb3ZpZGVkIGZvciBieSA6YzpmdW5jOmAhd2Fsa19wYWdlX3JhbmdlX2RlYnVnYC5cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtMzg0LVxuLS1cbm1tL2ludGVybmFsLmg9MTg0MD1pbnQgd2Fsa19wYWdlX3JhbmdlX3ZtYV91bnNhZmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vaW50ZXJuYWwuaC0xODQyLVx0XHR2b2lkICpwcml2YXRlKTtcbm1tL2ludGVybmFsLmg6MTg0MzppbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vaW50ZXJuYWwuaC0xODQ0LVx0XHRcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxuLS1cbm1tL3BhZ2V3YWxrLmM9NjQ4PWludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2V3YWxrLmMtNjY3LS8qKlxubW0vcGFnZXdhbGsuYzo2Njg6ICogd2Fsa19wYWdlX3JhbmdlX2RlYnVnIC0gd2FsayBhIHJhbmdlIG9mIHBhZ2V0YWJsZXMgbm90IGJhY2tlZCBieSBhIHZtYVxubW0vcGFnZXdhbGsuYy02NjktICogQG1tOlx0XHRtbV9zdHJ1Y3QgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgcHJvY2VzcyBvZiBwYWdlIHRhYmxlIHdhbGtcbi0tXG5tbS9wYWdld2Fsay5jLTY4My0gKi9cbm1tL3BhZ2V3YWxrLmM6Njg0OmludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9wYWdld2Fsay5jLTY4NS1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbi0tXG5tbS9wdGR1bXAuYz0xNzU9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKVxuLS1cbm1tL3B0ZHVtcC5jLTE4MS1cdHdoaWxlIChyYW5nZS1cdTAwM2VzdGFydCAhPSByYW5nZS1cdTAwM2VlbmQpIHtcbm1tL3B0ZHVtcC5jOjE4MjpcdFx0d2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLFxubW0vcHRkdW1wLmMtMTgzLVx0XHRcdFx0ICAgICAgXHUwMDI2cHRkdW1wX29wcywgcGdkLCBzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODc4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIGBwdGR1bXBgIGlzIHRoZSBjZW50cmFsIHBpZWNlIGhlcmUsIHdoaWNoIGNhbGxzIGBwdGR1bXBfd2Fsa2AgYW5kIGBwdGR1bXBfY2hlY2tfd3hgLCBhbmQgdGhvc2UgaW4gdHVybiBjYWxsIGBwdGR1bXBfd2Fsa19wZ2RgLiBUaGVuLCBgcHRkdW1wX3dhbGtfcGdkYCBtYWtlcyBhIGNhbGwgdG8gYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuIFNvLCBgcHRkdW1wYCBpcyB0aGUgcHJpbWFyeSBkcml2ZXIsIGNvbmZpcm1lZC4KClRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgdHdlYWtpbmcgYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgY29tZXMgaW50byBwbGF5IGR1cmluZyBgdm1hbGxvY2Agb3BlcmF0aW9ucy4gS25vd2luZyB0aGF0LCBteSBmb2N1cyBzaG91bGQgZGVmaW5pdGVseSBiZSBvbiB0aGUgYHZtYXBfdHJ5X2h1Z2VfKmAgZnVuY3Rpb25zOiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBhbmQgYHZtYXBfdHJ5X2h1Z2VfcDRkYC4gQW5kIG9mIGNvdXJzZSwgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgSSB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGlzIGZyZWVkLCBzbyBgcG1kX2ZyZWVfcHRlX3BhZ2VgIGFuZCBgcHVkX2ZyZWVfcG1kX3BhZ2VgIG5lZWQgdG8gYmUgY2hlY2tlZCBhcyB3ZWxsLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRob3NlIGxhc3QgdHdvOyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBpbXBvcnRhbnQgaW4gdGhlaXIgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZF9mcmVlX3B0ZV9wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbW0vbW11LmM9MTg1MD1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYy0xODU3LVxuYXJjaC9hcm02NC9tbS9tbXUuYzoxODU4OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC9hcm02NC9tbS9tbXUuYy0xODU5LXtcbi0tXG5hcmNoL2FybTY0L21tL21tdS5jPTE4Nzc9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYy0xODk2LVx0XHRpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKVxuYXJjaC9hcm02NC9tbS9tbXUuYzoxODk3Olx0XHRcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xuYXJjaC9hcm02NC9tbS9tbXUuYy0xODk4LVx0fSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYz0xNjc1PWludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmMtMTY4NC1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmM6MTY4NTppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy0xNjg2LXtcbi0tXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYz0xMTc9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWQpXG4tLVxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMtMTI0LVxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmM6MTI1OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYy0xMjYte1xuLS1cbmFyY2gveDg2L21tL3BndGFibGUuYz03MTg9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzU0LS8qKlxuYXJjaC94ODYvbW0vcGd0YWJsZS5jOjc1NTogKiBwbWRfZnJlZV9wdGVfcGFnZSAtIENsZWFyIFBNRCBlbnRyeSBhbmQgZnJlZSBQVEUgcGFnZS5cbmFyY2gveDg2L21tL3BndGFibGUuYy03NTYtICogQHBtZDogUG9pbnRlciB0byB0aGUgUE1EXG4tLVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc2MS0gKi9cbmFyY2gveDg2L21tL3BndGFibGUuYzo3NjI6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gveDg2L21tL3BndGFibGUuYy03NjMte1xuLS1cbmFyY2gveDg2L21tL3BndGFibGUuYy03ODItICovXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NzgzOmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzg0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0yMTc2PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjE3NzppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIxNzgtI2Vsc2VcdC8qICFDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUCAqL1xuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIyMDQ9c3RhdGljIGlubGluZSBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIyMDctfVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjIwODpzdGF0aWMgaW5saW5lIGludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMjA5LXtcbi0tXG5tbS92bWFsbG9jLmM9MTQzPXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMTczLVx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xubW0vdm1hbGxvYy5jOjE3NDpcdFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxubW0vdm1hbGxvYy5jLTE3NS1cdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NTAKCQkJCQkJCW91dHB1dDogMjEwCgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYGFyY2gvYXJtNjQvbW0vbW11LmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHBtZF9mcmVlX3B0ZV9wYWdlYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZTogdGhleSYjMzk7cmUgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgYF9fcG1kX2ZyZWVfcHRlX3BhZ2VgIGFuZCBqdXN0IHJlbmFtaW5nIGl0LiBUaGUgb3RoZXIgc2lnbmlmaWNhbnQgcmVtb3ZhbCBpcyB0aGUgYHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDthcm02NF9wdGR1bXBfbG9ja19rZXkpYCBzdHVmZi4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGNvcmUga2VybmVsIGNvZGUsIGFyY2hpdGVjdHVyZSBzcGVjaWZpYywgYW5kIGl0ICppcyogcmVhY2hhYmxlIOKAkyB0aGF0JiMzOTtzIGEga2V5IGRldGFpbCBmb3IgbXkgYXNzZXNzbWVudC4KCkkgc2hvdWxkIHZlcmlmeSBhbnkgY29uZmlnIGRlcGVuZGVuY2llcy4gTG9va3MgbGlrZSBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGFuZCBgQ09ORklHX0RFQlVHX1dYYCBpcyBhbm90aGVyLCB0aG91Z2ggYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBpcyBhcmNoaXRlY3R1cmUtc2VsZWN0ZWQuIFNvIEkganVzdCBuZWVkIHRvIHNwZWNpZnkgdGhlIGZvcm1lci4gTm8gbmVlZCB0byBzcGVjaWZ5IHRoZSBsYXR0ZXIuCgpOb3csIHB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyIGZvciBmdXp6aW5nLCBJJiMzOTttIHRoaW5raW5nOgoKKiAgICoqV29ydGhGdXp6aW5nKio6IEFic29sdXRlbHkuIFRoaXMgaGl0cyB0aGUgc3dlZXQgc3BvdCBmb3IgZnV6emluZyBjb25zaWRlcmF0aW9uLgoqICAgKipGb2N1c1N5bWJvbHMqKjogIEkmIzM5O2xsIHdhbnQgdG8gdGFyZ2V0IHRoZXNlIGZ1bmN0aW9ucywgYmVjYXVzZSB0aGV5JiMzOTtyZSByZWxhdGVkIHRvIGh1Z2Ugdm1hbGxvYyBtYXBwaW5ncyBhbmQgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb246CiAgICAqICAgYHZtYXBfdHJ5X2h1Z2VfcG1kYAogICAgKiAgIGB2bWFwX3RyeV9odWdlX3B1ZGAKICAgICogICBgdm1hcF90cnlfaHVnZV9wNGRgCiAgICAqICAgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AKICAgICogICBgcG1kX2ZyZWVfcHRlX3BhZ2VgCiAgICAqICAgYHB1ZF9mcmVlX3BtZF9wYWdlYAoqICAgKipFbmFibGVDb25maWdzKio6CiAgICAqICAgYFBURFVNUF9ERUJVR0ZTYAogICAgKiAgIGBERUJVR19XWGAKCk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIHRoZSBsb2NraW5nIGxvZ2ljIGZvciBmcmVlaW5nIHBhZ2UgdGFibGVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGh1Z2Ugdm1hbGxvYyBtYXBwaW5ncy4gVGhleSYjMzk7cmUgcmVwbGFjaW5nIGEgc3BlY2lmaWMgc3RhdGljIGtleSBmb3IgYXJtNjQgd2l0aCBhIG1vcmUgZ2VuZXJpYyBsb2NrLiBJIGFsc28gc2F3IHRoZSBhZGRpdGlvbiBvZiBtbWFwIHdyaXRlIGxvY2sgYXNzZXJ0aW9ucyBpbiBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYC4gVGhpcyBzb3J0IG9mIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUgY29kZSwgZGVhbGluZyB3aXRoIGNvbmN1cnJlbmN5ICh2bWFsbG9jIGFuZCBwdGR1bXAgc3BlY2lmaWNhbGx5KSBkZW1hbmRzIHJpZ29yb3VzIGZ1enppbmcuIEkgbmVlZCB0byBleHBvc2UgcG90ZW50aWFsIGRlYWRsb2NrcyBvciwgZXZlbiB3b3JzZSwgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdGhlIGNoYW5nZXMgaW4gbG9jayBoYW5kbGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHJvYnVzdCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgdm1hbGxvYyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFREVU1QX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7REVCVUdfV1gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFwX3RyeV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDt2bWFwX3RyeV9odWdlX3B1ZCYjMzQ7LAogICAgJiMzNDt2bWFwX3RyeV9odWdlX3A0ZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OywKICAgICYjMzQ7cG1kX2ZyZWVfcHRlX3BhZ2UmIzM0OywKICAgICYjMzQ7cHVkX2ZyZWVfcG1kX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgbG9naWMgZm9yIGZyZWVpbmcgcGFnZSB0YWJsZXMgZHVyaW5nIGh1Z2Ugdm1hbGxvYyBtYXBwaW5ncywgcmVwbGFjaW5nIGFuIGFybTY0LXNwZWNpZmljIHN0YXRpYyBrZXkgd2l0aCBhIGdlbmVyaWMgbW1hcF9yZWFkX2xvY2tfdHJ5IGluIGNvcmUgdm1hbGxvYyBjb2RlLiBJdCBhbHNvIGFkZHMgYW4gbW1hcCB3cml0ZSBsb2NrIGFzc2VydGlvbiBpbiB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBhbmQgYXJjaGl0ZWN0dXJlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyBjb25jdXJyZW50IHZtYWxsb2MgYW5kIHB0ZHVtcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7LAogICAgJiMzNDtERUJVR19XWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O3dhbGtfcGFnZV9yYW5nZV9kZWJ1ZyYjMzQ7LAogICAgJiMzNDtwbWRfZnJlZV9wdGVfcGFnZSYjMzQ7LAogICAgJiMzNDtwdWRfZnJlZV9wbWRfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBsb2dpYyBmb3IgZnJlZWluZyBwYWdlIHRhYmxlcyBkdXJpbmcgaHVnZSB2bWFsbG9jIG1hcHBpbmdzLCByZXBsYWNpbmcgYW4gYXJtNjQtc3BlY2lmaWMgc3RhdGljIGtleSB3aXRoIGEgZ2VuZXJpYyBtbWFwX3JlYWRfbG9ja190cnkgaW4gY29yZSB2bWFsbG9jIGNvZGUuIEl0IGFsc28gYWRkcyBhbiBtbWFwIHdyaXRlIGxvY2sgYXNzZXJ0aW9uIGluIHdhbGtfcGFnZV9yYW5nZV9kZWJ1Zy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIgZHVyaW5nIGNvbmN1cnJlbnQgdm1hbGxvYyBhbmQgcHRkdW1wIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNjozNzo0MS4xNDQ4NTQxMzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM4NDE4MjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQVERVTVBfREVCVUdGU1wiLFxuICAgIFwiREVCVUdfV1hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwX3RyeV9odWdlX3BtZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wdWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcDRkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIixcbiAgICBcInBtZF9mcmVlX3B0ZV9wYWdlXCIsXG4gICAgXCJwdWRfZnJlZV9wbWRfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGxvZ2ljIGZvciBmcmVlaW5nIHBhZ2UgdGFibGVzIGR1cmluZyBodWdlIHZtYWxsb2MgbWFwcGluZ3MsIHJlcGxhY2luZyBhbiBhcm02NC1zcGVjaWZpYyBzdGF0aWMga2V5IHdpdGggYSBnZW5lcmljIG1tYXBfcmVhZF9sb2NrX3RyeSBpbiBjb3JlIHZtYWxsb2MgY29kZS4gSXQgYWxzbyBhZGRzIGFuIG1tYXAgd3JpdGUgbG9jayBhc3NlcnRpb24gaW4gd2Fsa19wYWdlX3JhbmdlX2RlYnVnLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgY29uY3VycmVudCB2bWFsbG9jIGFuZCBwdGR1bXAgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDY6Mzc6NDEuMTQ0ODU5ODMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU3OTU4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OWVlZDE4NTFmZWZmNzcyNjU1YjFhZDRjOGQ0MTlmOTM5ZTAwZmY4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDExIDA2OjM3OjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXFxuaW5kZXggNWIzNzRhNmFiMzRhNGUuLjUwYTE5NWVkYThlZDIyIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXFxuQEAgLTcsOCArNyw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRkdW1wLmhcXHUwMDNlXFxuIFxcbi1ERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcXG4tXFxuICNpZmRlZiBDT05GSUdfUFREVU1QXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1fdHlwZXMuaFxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcXG5pbmRleCBmMmJlNTAxNDY4Y2U1YS4uZjcyM2JjZjY4MTc0ZmIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9tbS9tbXUuY1xcbisrKyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcXG5AQCAtNDksOCArNDksNiBAQFxcbiAjZGVmaW5lIE5PX0NPTlRfTUFQUElOR1NcXHRCSVQoMSlcXG4gI2RlZmluZSBOT19FWEVDX01BUFBJTkdTXFx0QklUKDIpXFx0LyogYXNzdW1lcyBGRUFUX0hQRFMgaXMgbm90IHVzZWQgKi9cXG4gXFxuLURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XFxuLVxcbiB1NjQga2ltYWdlX3ZvZmZzZXQgX19yb19hZnRlcl9pbml0O1xcbiBFWFBPUlRfU1lNQk9MKGtpbWFnZV92b2Zmc2V0KTtcXG4gXFxuQEAgLTE4NTcsOCArMTg1NSw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcClcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgX19wbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHQgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaylcXG4raW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIHtcXG4gXFx0cHRlX3QgKnRhYmxlO1xcbiBcXHRwbWRfdCBwbWQ7XFxuQEAgLTE4NzAsMjUgKzE4NjcsMTMgQEAgc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBTZWUgY29tbWVudCBpbiBwdWRfZnJlZV9wbWRfcGFnZSBmb3Igc3RhdGljIGtleSBsb2dpYyAqL1xcbiBcXHR0YWJsZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIpO1xcbiBcXHRwbWRfY2xlYXIocG1kcCk7XFxuIFxcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xcbi1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSBcXHUwMDI2XFx1MDAyNiBhY3F1aXJlX21tYXBfbG9jaykge1xcbi1cXHRcXHRtbWFwX3JlYWRfbG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2soXFx1MDAyNmluaXRfbW0pO1xcbi1cXHR9XFxuLVxcbiBcXHRwdGVfZnJlZV9rZXJuZWwoTlVMTCwgdGFibGUpO1xcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4taW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLXtcXG4tXFx0LyogSWYgcHRkdW1wIGlzIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMsIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2sgKi9cXG4tXFx0cmV0dXJuIF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgYWRkciwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyB0cnVlKTtcXG4tfVxcbi1cXG4gaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIHtcXG4gXFx0cG1kX3QgKnRhYmxlO1xcbkBAIC0xOTA0LDM2ICsxODg5LDE2IEBAIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiBcXHR9XFxuIFxcbiBcXHR0YWJsZSA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXNcXG4tXFx0ICogYmVlbiBmcmVlZC4gSW4gdGhpcyByYWNlLCBpZiBwdWRfZnJlZV9wbWRfcGFnZSBvYnNlcnZlcyB0aGUga2V5IG9uXFxuLVxcdCAqICh3aGljaCBnb3QgZmxpcHBlZCBieSBwdGR1bXApIHRoZW4gdGhlIG1tYXAgbG9jayBzZXF1ZW5jZSBoZXJlIHdpbGwsXFxuLVxcdCAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZVxcbi1cXHQgKiB1cyB0aGUgY29ycmVjdCBzeW5jaHJvbml6YXRpb24uIElmIG5vdCwgdGhpcyBtZWFucyB0aGF0IHB0ZHVtcCBoYXNcXG4tXFx0ICogeWV0IG5vdCBzdGFydGVkIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMgLSB0aGUgc2VxdWVuY2Ugb2YgYmFycmllcnNcXG4tXFx0ICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsXFxuLVxcdCAqIG9ic2VydmUgYW4gZW1wdHkgUFVELlxcbi1cXHQgKi9cXG4tXFx0cHVkX2NsZWFyKHB1ZHApO1xcbi1cXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTtcXG4tXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSkpIHtcXG4tXFx0XFx0bW1hcF9yZWFkX2xvY2soXFx1MDAyNmluaXRfbW0pO1xcbi1cXHRcXHRtbWFwX3JlYWRfdW5sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4tXFx0fVxcbi1cXG4gXFx0cG1kcCA9IHRhYmxlO1xcbiBcXHRuZXh0ID0gYWRkcjtcXG4gXFx0ZW5kID0gYWRkciArIFBVRF9TSVpFO1xcbiBcXHRkbyB7XFxuIFxcdFxcdGlmIChwbWRfcHJlc2VudChwbWRwX2dldChwbWRwKSkpXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbid0IHNlZSBpdC4gTm9cXG4tXFx0XFx0XFx0ICogbmVlZCB0byBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0X19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0LCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIGZhbHNlKTtcXG4rXFx0XFx0XFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XFxuIFxcdH0gd2hpbGUgKHBtZHArKywgbmV4dCArPSBQTURfU0laRSwgbmV4dCAhPSBlbmQpO1xcbiBcXG4rXFx0cHVkX2NsZWFyKHB1ZHApO1xcbitcXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTtcXG4gXFx0cG1kX2ZyZWUoTlVMTCwgdGFibGUpO1xcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xcbmluZGV4IDFjMjAxNDQ3MDBkN2Q3Li41YTc2YzU5YjVhZGE1NSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXFxuKysrIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xcbkBAIC0yODMsMTMgKzI4Myw2IEBAIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxcbiBcXHRub3RlX3BhZ2UocHRfc3QsIDAsIC0xLCBwdGVfdmFsKHB0ZV96ZXJvKSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGFybTY0X3B0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLXtcXG4tXFx0c3RhdGljX2JyYW5jaF9pbmMoXFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XFxuLVxcdHB0ZHVtcF93YWxrX3BnZChzdCwgbW0sIE5VTEwpO1xcbi1cXHRzdGF0aWNfYnJhbmNoX2RlYyhcXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcXG4tfVxcbi1cXG4gdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGVuZCA9IH4wVUw7XFxuQEAgLTMxOCw3ICszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxcbiBcXHRcXHR9XFxuIFxcdH07XFxuIFxcbi1cXHRhcm02NF9wdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cXHUwMDNlbW0pO1xcbitcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cXHUwMDNlbW0sIE5VTEwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2luaXQgcHRkdW1wX2luaXRpYWxpemUodm9pZClcXG5AQCAtMzYwLDcgKzM1Myw3IEBAIGJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuIFxcdFxcdH1cXG4gXFx0fTtcXG4gXFxuLVxcdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBcXHUwMDI2aW5pdF9tbSk7XFxuK1xcdHB0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBcXHUwMDI2aW5pdF9tbSwgTlVMTCk7XFxuIFxcbiBcXHRpZiAoc3Qud3hfcGFnZXMgfHwgc3QudXhuX3BhZ2VzKSB7XFxuIFxcdFxcdHByX3dhcm4oXFxcIkNoZWNrZWQgVytYIG1hcHBpbmdzOiBGQUlMRUQsICVsdSBXK1ggcGFnZXMgZm91bmQsICVsdSBub24tVVhOIHBhZ2VzIGZvdW5kXFxcXG5cXFwiLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbmluZGV4IDA0YjhmNjFlY2U1ZDhlLi42YjVjMjM5MGNjMzAxZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbkBAIC02MjEsNiArNjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIFxcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcXG4gXFx0ICAgICBtbWFwX3JlYWRfbG9jayhfVCksIG1tYXBfcmVhZF91bmxvY2soX1QpKVxcbitERUZJTkVfR1VBUkRfQ09ORChtbWFwX3JlYWRfbG9jaywgX3RyeSwgbW1hcF9yZWFkX3RyeWxvY2soX1QpKVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXFxuaW5kZXggM2FlMjU4NmZmNDViNDQuLmJiY2ZkNjhkMDkwN2RmIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2V3YWxrLmNcXG4rKysgYi9tbS9wYWdld2Fsay5jXFxuQEAgLTY3OCw2ICs2NzgsOCBAQCBpbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZFxcbiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay5cXG4gICpcXG4gICogVGhpcyBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIE9OTFkuXFxuKyAqXFxuKyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLlxcbiAgKi9cXG4gaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuQEAgLTY5MSw2ICs2OTMsMTYgQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0Lm5vX3ZtYVxcdFxcdD0gdHJ1ZVxcbiBcXHR9O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXFxuK1xcdCAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZ1xcbitcXHQgKiBkb3duIHBhZ2UgdGFibGVzLlxcbitcXHQgKlxcbitcXHQgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGRcXG4rXFx0ICogdG8gYWNjb3VudCBmb3IgcGFnZSB0YWJsZSBmcmVlaW5nIG9uIHZtYXAgaHVnZSBwYWdlIG1hcHBpbmcuXFxuK1xcdCAqL1xcbitcXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xcbitcXG4gXFx0LyogRm9yIGNvbnZlbmllbmNlLCB3ZSBhbGxvdyB0cmF2ZXJzYWwgb2Yga2VybmVsIG1hcHBpbmdzLiAqL1xcbiBcXHRpZiAobW0gPT0gXFx1MDAyNmluaXRfbW0pXFxuIFxcdFxcdHJldHVybiB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlKHN0YXJ0LCBlbmQsIG9wcyxcXG5AQCAtNzAwLDE2ICs3MTIsNiBAQCBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXFxuLVxcdCAqIHRhYmxlcyBkdXJpbmcgdGhlIHdhbGsuICBIb3dldmVyIGEgcmVhZCBsb2NrIGlzIGluc3VmZmljaWVudCB0b1xcbi1cXHQgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbid0IGhhdmUgYSBWTUEgYXMgbXVubWFwKCkgZGV0YWNoZXNcXG4tXFx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXFxuLVxcdCAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGRcXG4tXFx0ICogYmUgaGVsZC5cXG4tXFx0ICovXFxuLVxcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSk7XFxuLVxcbiBcXHRyZXR1cm4gd2Fsa19wZ2RfcmFuZ2Uoc3RhcnQsIGVuZCwgXFx1MDAyNndhbGspO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uNTM3ZmY3YjNjNDEyNzAgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hbGxvYy5jXFxuKysrIGIvbW0vdm1hbGxvYy5jXFxuQEAgLTQzLDYgKzQzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS90bGJmbHVzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3NobXBhcmFtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy92bWFsbG9jLmhcXHUwMDNlXFxuQEAgLTE1OCwxMCArMTU5LDIyIEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcXHUwMDI2XFx1MDAyNiAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXFxuK1xcdFxcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qXFxuK1xcdCAqIEtlcm5lbCBwYWdlIHRhYmxlIHdhbGtlcnMgZWl0aGVyIHdhbGsgcmFuZ2VzIHRoZXkgb3duIGV4Y2x1c2l2ZWx5XFxuK1xcdCAqIHVzaW5nIHRoZSBtbWFwIGxvY2sgZm9yIG11dHVhbCBleGNsdXNpb24sIG9yIGhvbGQgdGhlIG1tYXAgd3JpdGUgbG9ja1xcbitcXHQgKiBvbiBpbml0X21tIChwdGR1bXAgYmVpbmcgdGhlIG1vdGl2YXRpbmcgY2FzZSkuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZXJlZm9yZSwgYWNxdWlyZSB0aGUgbW1hcCByZWFkIGxvY2sgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSB3aGVuXFxuK1xcdCAqIGZyZWVpbmcgcGFnZSB0YWJsZXMuXFxuK1xcdCAqL1xcbitcXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbitcXHRcXHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuQEAgLTIxMCwxMCArMjIzLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUFVEX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwdWRfcHJlc2VudCgqcHVkKSBcXHUwMDI2XFx1MDAyNiAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXFxuK1xcdFxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXFxuK1xcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuK1xcdFxcdGlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5AQCAtMjYyLDEwICsyODAsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQNERfU0laRSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKHA0ZF9wcmVzZW50KCpwNGQpIFxcdTAwMjZcXHUwMDI2ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcXG4rXFx0XFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuIFxcbi1cXHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG4rXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG4rXFx0XFx0aWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNjozNzo0MS42NjEzNTA4MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4Njc2NzY1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIkRFQlVHX1dYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hcF90cnlfaHVnZV9wbWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcHVkXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3A0ZFwiLFxuICAgIFwid2Fsa19wYWdlX3JhbmdlX2RlYnVnXCIsXG4gICAgXCJwbWRfZnJlZV9wdGVfcGFnZVwiLFxuICAgIFwicHVkX2ZyZWVfcG1kX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBsb2dpYyBmb3IgZnJlZWluZyBwYWdlIHRhYmxlcyBkdXJpbmcgaHVnZSB2bWFsbG9jIG1hcHBpbmdzLCByZXBsYWNpbmcgYW4gYXJtNjQtc3BlY2lmaWMgc3RhdGljIGtleSB3aXRoIGEgZ2VuZXJpYyBtbWFwX3JlYWRfbG9ja190cnkgaW4gY29yZSB2bWFsbG9jIGNvZGUuIEl0IGFsc28gYWRkcyBhbiBtbWFwIHdyaXRlIGxvY2sgYXNzZXJ0aW9uIGluIHdhbGtfcGFnZV9yYW5nZV9kZWJ1Zy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIgZHVyaW5nIGNvbmN1cnJlbnQgdm1hbGxvYyBhbmQgcHRkdW1wIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzllZWQxODUxZmVmZjc3MjY1NWIxYWQ0YzhkNDE5ZjkzOWUwMGZmOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDA2OjM3OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcbmluZGV4IDViMzc0YTZhYjM0YTRlLi41MGExOTVlZGE4ZWQyMiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcbkBAIC03LDggKzcsNiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0ZHVtcC5oXHUwMDNlXG4gXG4tREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tXG4gI2lmZGVmIENPTkZJR19QVERVTVBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbmluZGV4IGYyYmU1MDE0NjhjZTVhLi5mNzIzYmNmNjgxNzRmYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmNcbisrKyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbkBAIC00OSw4ICs0OSw2IEBAXG4gI2RlZmluZSBOT19DT05UX01BUFBJTkdTXHRCSVQoMSlcbiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1NcdEJJVCgyKVx0LyogYXNzdW1lcyBGRUFUX0hQRFMgaXMgbm90IHVzZWQgKi9cbiBcbi1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVxuIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7XG4gRVhQT1JUX1NZTUJPTChraW1hZ2Vfdm9mZnNldCk7XG4gXG5AQCAtMTg1Nyw4ICsxODU1LDcgQEAgaW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19wbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgICAgICBib29sIGFjcXVpcmVfbW1hcF9sb2NrKVxuK2ludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHB0ZV90ICp0YWJsZTtcbiBcdHBtZF90IHBtZDtcbkBAIC0xODcwLDI1ICsxODY3LDEzIEBAIHN0YXRpYyBpbnQgX19wbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcbi1cdC8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovXG4gXHR0YWJsZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIpO1xuIFx0cG1kX2NsZWFyKHBtZHApO1xuIFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4tXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpIFx1MDAyNlx1MDAyNiBhY3F1aXJlX21tYXBfbG9jaykge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbi1cdH1cbi1cbiBcdHB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7XG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4taW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4te1xuLVx0LyogSWYgcHRkdW1wIGlzIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMsIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2sgKi9cbi1cdHJldHVybiBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIGFkZHIsIC8qIGFjcXVpcmVfbW1hcF9sb2NrID0gKi8gdHJ1ZSk7XG4tfVxuLVxuIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHBtZF90ICp0YWJsZTtcbkBAIC0xOTA0LDM2ICsxODg5LDE2IEBAIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIFx0fVxuIFxuIFx0dGFibGUgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuLVxuLVx0Lypcbi1cdCAqIE91ciBvYmplY3RpdmUgaXMgdG8gcHJldmVudCBwdGR1bXAgZnJvbSByZWFkaW5nIGEgUE1EIHRhYmxlIHdoaWNoIGhhc1xuLVx0ICogYmVlbiBmcmVlZC4gSW4gdGhpcyByYWNlLCBpZiBwdWRfZnJlZV9wbWRfcGFnZSBvYnNlcnZlcyB0aGUga2V5IG9uXG4tXHQgKiAod2hpY2ggZ290IGZsaXBwZWQgYnkgcHRkdW1wKSB0aGVuIHRoZSBtbWFwIGxvY2sgc2VxdWVuY2UgaGVyZSB3aWxsLFxuLVx0ICogYXMgYSByZXN1bHQgb2YgdGhlIG1tYXAgd3JpdGUgbG9jay91bmxvY2sgc2VxdWVuY2UgaW4gcHRkdW1wLCBnaXZlXG4tXHQgKiB1cyB0aGUgY29ycmVjdCBzeW5jaHJvbml6YXRpb24uIElmIG5vdCwgdGhpcyBtZWFucyB0aGF0IHB0ZHVtcCBoYXNcbi1cdCAqIHlldCBub3Qgc3RhcnRlZCB3YWxraW5nIHRoZSBwYWdldGFibGVzIC0gdGhlIHNlcXVlbmNlIG9mIGJhcnJpZXJzXG4tXHQgKiBpc3N1ZWQgYnkgX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoKSBndWFyYW50ZWVzIHRoYXQgcHRkdW1wIHdpbGxcbi1cdCAqIG9ic2VydmUgYW4gZW1wdHkgUFVELlxuLVx0ICovXG4tXHRwdWRfY2xlYXIocHVkcCk7XG4tXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTtcbi1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSkpIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHR9XG4tXG4gXHRwbWRwID0gdGFibGU7XG4gXHRuZXh0ID0gYWRkcjtcbiBcdGVuZCA9IGFkZHIgKyBQVURfU0laRTtcbiBcdGRvIHtcbiBcdFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbid0IHNlZSBpdC4gTm9cbi1cdFx0XHQgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suXG4tXHRcdFx0ICovXG4tXHRcdFx0X19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0LCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIGZhbHNlKTtcbitcdFx0XHRwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTtcbiBcdH0gd2hpbGUgKHBtZHArKywgbmV4dCArPSBQTURfU0laRSwgbmV4dCAhPSBlbmQpO1xuIFxuK1x0cHVkX2NsZWFyKHB1ZHApO1xuK1x0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4gXHRwbWRfZnJlZShOVUxMLCB0YWJsZSk7XG4gXHRyZXR1cm4gMTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9wdGR1bXAuYyBiL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcbmluZGV4IDFjMjAxNDQ3MDBkN2Q3Li41YTc2YzU5YjVhZGE1NSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcbisrKyBiL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcbkBAIC0yODMsMTMgKzI4Myw2IEBAIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxuIFx0bm90ZV9wYWdlKHB0X3N0LCAwLCAtMSwgcHRlX3ZhbChwdGVfemVybykpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhcm02NF9wdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLXtcbi1cdHN0YXRpY19icmFuY2hfaW5jKFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tXHRwdGR1bXBfd2Fsa19wZ2Qoc3QsIG1tLCBOVUxMKTtcbi1cdHN0YXRpY19icmFuY2hfZGVjKFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tfVxuLVxuIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBlbmQgPSB+MFVMO1xuQEAgLTMxOCw3ICszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSk7XG4rXHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBpbmZvLVx1MDAzZW1tLCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IHB0ZHVtcF9pbml0aWFsaXplKHZvaWQpXG5AQCAtMzYwLDcgKzM1Myw3IEBAIGJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXG4gXHRcdH1cbiBcdH07XG4gXG4tXHRhcm02NF9wdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tKTtcbitcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuIFxuIFx0aWYgKHN0Lnd4X3BhZ2VzIHx8IHN0LnV4bl9wYWdlcykge1xuIFx0XHRwcl93YXJuKFwiQ2hlY2tlZCBXK1ggbWFwcGluZ3M6IEZBSUxFRCwgJWx1IFcrWCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcXG5cIixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuaW5kZXggMDRiOGY2MWVjZTVkOGUuLjZiNWMyMzkwY2MzMDFmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuQEAgLTYyMSw2ICs2MjEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiBcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcbitERUZJTkVfR1VBUkRfQ09ORChtbWFwX3JlYWRfbG9jaywgX3RyeSwgbW1hcF9yZWFkX3RyeWxvY2soX1QpKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcbmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li5iYmNmZDY4ZDA5MDdkZiAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbisrKyBiL21tL3BhZ2V3YWxrLmNcbkBAIC02NzgsNiArNjc4LDggQEAgaW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmRcbiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay5cbiAgKlxuICAqIFRoaXMgaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBPTkxZLlxuKyAqXG4rICogVGhlIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuXG4gICovXG4gaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbkBAIC02OTEsNiArNjkzLDE2IEBAIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdC5ub192bWFcdFx0PSB0cnVlXG4gXHR9O1xuIFxuK1x0LypcbitcdCAqIFdoZW4gd2Fsa2luZyB1c2VybGFuZCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZCB0b1xuK1x0ICogYWNjb3VudCBmb3IgbXVubWFwKCkgZG93bmdyYWRpbmcgdG8gYW4gbW1hcCByZWFkIGxvY2sgd2hlbiB0ZWFyaW5nXG4rXHQgKiBkb3duIHBhZ2UgdGFibGVzLlxuK1x0ICpcbitcdCAqIFdoZW4gd2Fsa2luZyBrZXJuZWwgcGFnZSB0YWJsZXMsIGFuIG1tYXAgd3JpdGUgbG9jayBtdXN0IGFsc28gYmUgaGVsZFxuK1x0ICogdG8gYWNjb3VudCBmb3IgcGFnZSB0YWJsZSBmcmVlaW5nIG9uIHZtYXAgaHVnZSBwYWdlIG1hcHBpbmcuXG4rXHQgKi9cbitcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSk7XG4rXG4gXHQvKiBGb3IgY29udmVuaWVuY2UsIHdlIGFsbG93IHRyYXZlcnNhbCBvZiBrZXJuZWwgbWFwcGluZ3MuICovXG4gXHRpZiAobW0gPT0gXHUwMDI2aW5pdF9tbSlcbiBcdFx0cmV0dXJuIHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2Uoc3RhcnQsIGVuZCwgb3BzLFxuQEAgLTcwMCwxNiArNzEyLDYgQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHQvKlxuLVx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXG4tXHQgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG9cbi1cdCAqIHByb3RlY3QgdGhvc2UgYXJlYXMgd2hpY2ggZG9uJ3QgaGF2ZSBhIFZNQSBhcyBtdW5tYXAoKSBkZXRhY2hlc1xuLVx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXG4tXHQgKiBkb3duIFBURXMvcGFnZSB0YWJsZXMuIEluIHdoaWNoIGNhc2UsIHRoZSBtbWFwIHdyaXRlIGxvY2sgc2hvdWxkXG4tXHQgKiBiZSBoZWxkLlxuLVx0ICovXG4tXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuLVxuIFx0cmV0dXJuIHdhbGtfcGdkX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li41MzdmZjdiM2M0MTI3MCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuKysrIGIvbW0vdm1hbGxvYy5jXG5AQCAtNDMsNiArNDMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NobXBhcmFtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMTU4LDEwICsxNTksMjIgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCFwbWRfcHJlc2VudCgqcG1kKSlcbitcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdC8qXG4rXHQgKiBLZXJuZWwgcGFnZSB0YWJsZSB3YWxrZXJzIGVpdGhlciB3YWxrIHJhbmdlcyB0aGV5IG93biBleGNsdXNpdmVseVxuK1x0ICogdXNpbmcgdGhlIG1tYXAgbG9jayBmb3IgbXV0dWFsIGV4Y2x1c2lvbiwgb3IgaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrXG4rXHQgKiBvbiBpbml0X21tIChwdGR1bXAgYmVpbmcgdGhlIG1vdGl2YXRpbmcgY2FzZSkuXG4rXHQgKlxuK1x0ICogVGhlcmVmb3JlLCBhY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHdoZW5cbitcdCAqIGZyZWVpbmcgcGFnZSB0YWJsZXMuXG4rXHQgKi9cbitcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbitcdFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTIxMCwxMCArMjIzLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocHVkX3ByZXNlbnQoKnB1ZCkgXHUwMDI2XHUwMDI2ICFwdWRfZnJlZV9wbWRfcGFnZShwdWQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbitcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXG4rXHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuIFxuLVx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xuK1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuK1x0XHRpZiAoIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMjYyLDEwICsyODAsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwNGRfcHJlc2VudCgqcDRkKSBcdTAwMjZcdTAwMjYgIXA0ZF9mcmVlX3B1ZF9wYWdlKHA0ZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcbitcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG4rXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4rXHRcdGlmICghcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA2OjM3OjQxLjY2MTM1MjM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY3MjA2MTgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogSHVnZSBQYWdlcyBhbmQgdm1hbGxvYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgaXQncyBtZXNzaW5nIHdpdGggcGFnZSB0YWJsZSBkdW1waW5nIGFuZCBgdm1hbGxvY2AgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBodWdlIHBhZ2VzIGFuZCBsb2NraW5nLlwiIFRoZSBwYXRjaCBsb29rcyBsaWtlIGl0J3MgdGFraW5nIG91dCB0aGUgYGFybTY0X3B0ZHVtcF9sb2NrX2tleWAgc3RhdGljIGtleSBsb2dpYyBmcm9tIHRoZSBgYXJtNjRgIGFyY2hpdGVjdHVyZSdzIGBtbXUuY2AgYW5kIGBwdGR1bXAuY2AgZmlsZXMuIFRoYXQncyBpbnRlcmVzdGluZywgSSB3b25kZXIgd2h5IHRoZXkncmUgZG9pbmcgdGhhdC4gSW5zdGVhZCwgaXQncyBpbnRyb2R1Y2luZyBgbW1hcF9yZWFkX2xvY2tfdHJ5YCBjYWxscyB3aXRoaW4gYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAgZnVuY3Rpb25zIGluIGBtbS92bWFsbG9jLmNgLiBBbmQgaXQgYWxzbyB0b3VjaGVzIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIGluIGBtbS9wYWdld2Fsay5jYCwgbWFraW5nIGl0IGFzc2VydCBgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKWAgZm9yIGtlcm5lbCBwYWdlIHRhYmxlcy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBcIklzIHRoaXMgZnVuY3Rpb25hbCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGlzIGl0IGFjdHVhbGx5ICpyZWFjaGFibGUqP1wiIExldCdzIHNlZS4uLiBgdm1hcF90cnlfaHVnZV9wbWRgIGlzIGNhbGxlZCBmcm9tIGB2bWFwX3BtZF9yYW5nZWAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGB2bWFsbG9jYCBwYXRoLiBPa2F5LCB0aGF0IGNvbmZpcm1zIHRoYXQgYHZtYWxsb2NgIGl0c2VsZiBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhbHRlcmluZyBob3cgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIHdoZW4gd2UncmUgY3JlYXRpbmcgdGhvc2UgaHVnZSBtYXBwaW5ncyBpbnNpZGUgYHZtYWxsb2NgLiBJdCdzIHVzaW5nIGBzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKWAgdG8gZ2V0IHRoZSBgbW1hcGAgcmVhZCBsb2NrLiBJZiB0aGUgbG9jayBhY3F1aXNpdGlvbiBmYWlscywgaXQgcmV0dXJucyAwLCB3aGljaCBsaWtlbHkgc2lnbmFscyBhIGZhbGxiYWNrIHRvIG5vbi1odWdlIG1hcHBpbmcsIG9yIHBlcmhhcHMgYSBmYWlsdXJlIGFsdG9nZXRoZXIuXG5cbk5vdyBJJ20gdGhpbmtpbmcsIFwiV2FpdCBhIHNlY29uZCwgdGhpcyBpcyB0b3VjaGluZyBgbW0vdm1hbGxvYy5jYC4uLiB0aGF0J3MgY29yZSBrZXJuZWwgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gbG9vayBhdCBjYXJlZnVsbHkuXCIgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGB2bWFwX3RyeV9odWdlX3BtZGAgaW4gYG1tL3ZtYWxsb2MuY2Agbm93IHRvIHNlZSB3aGF0J3Mgd2hhdC4gT2theSwgc28gaHVnZSBwYWdlIHZtYWxsb2MgKmlzKiByZWFjaGFibGUg4oCTIHRoYXQgY29uZmlybXMgaXQuIE5vdywgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLCBhbnl0aGluZyB0aGF0IHRoaXMgZGVwZW5kcyBvbi4gUGVyaGFwcyBzb21ldGhpbmcgbGlrZSBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgPyBJIHNob3VsZCBwcm9iYWJseSBncmVwIGZvciBgdm1hcF90cnlfaHVnZV9wbWRgIGp1c3QgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyByZWxldmFudCBpbiB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTAwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDY6Mzc6NDguMzMzNDE2MTkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mzg0NDcyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hcF90cnlfaHVnZV9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTk1PXN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xNDItXFxubW0vdm1hbGxvYy5jOjE0MzpzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1hbGxvYy5jLTE0NC1cXHRcXHRcXHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXFxuLS1cXG5tbS92bWFsbG9jLmM9MTgwPXN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xOTMtXFxubW0vdm1hbGxvYy5jOjE5NDpcXHRcXHRpZiAodm1hcF90cnlfaHVnZV9wbWQocG1kLCBhZGRyLCBuZXh0LCBwaHlzX2FkZHIsIHByb3QsXFxubW0vdm1hbGxvYy5jLTE5NS1cXHRcXHRcXHRcXHRcXHRtYXhfcGFnZV9zaGlmdCkpIHtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0yMDc9c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTIyOC1cXG5tbS92bWFsbG9jLmM6MjI5OlxcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXFxubW0vdm1hbGxvYy5jLTIzMC1cXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbi0tXFxubW0vdm1hbGxvYy5jPTI2ND1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMjg1LVxcbm1tL3ZtYWxsb2MuYzoyODY6XFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG5tbS92bWFsbG9jLmMtMjg3LVxcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA2OjM3OjUwLjE3MTg3MzY3M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjM2MDI1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgaGFuZGxpbmcgdGhlIHZtYWxsb2MgcmVnaW9uIGNvcnJlY3RseSwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGh1Z2UgcGFnZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHdlJ3JlIHVzaW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG1hY3JvLiBMZXQncyBzZWUuLi4gaXMgYEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIHRoZSBhcHByb3ByaWF0ZSBmbGFnIHRvIGRldGVybWluZSBpZiB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIGFuZCB1dGlsaXplcyBodWdlIHZtYWxsb2MgcmVnaW9ucz8gSXQncyBjcnVjaWFsIHRvIGdldCB0aGlzIHJpZ2h0LiBXZSBuZWVkIHRoaXMgc28gdGhhdCB0aGUga2VybmVsIGNhbiBhbGxvY2F0ZSBsYXJnZSBjb250aWd1b3VzIHZpcnR1YWwgbWVtb3J5IHJlZ2lvbnMgZm9yIGNlcnRhaW4gb3BlcmF0aW9ucy4gSWYgaXQncyBub3Qgc2V0IGNvcnJlY3RseSwgd2UgbWlnaHQgYmUgdXNpbmcgc3Vib3B0aW1hbCBhbGxvY2F0aW9ucywgb3Igd29yc2UsIGNhdXNpbmcgc3RhYmlsaXR5IGlzc3Vlcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBhcmNoaXRlY3R1cmUgY29kZSBhbmQgS2NvbmZpZyBmaWxlcyB0byBjb25maXJtIHRoaXMgaXMgdGhlIGRlZmluaXRpdmUgY2hlY2sgYW5kIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZhY3RvcnMgaW5mbHVlbmNpbmcgdGhlIGJlaGF2aW9yIG9mIHZtYWxsb2MgYW5kIGh1Z2UgcGFnZXMuIExldCdzIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIHVzYWdlcyBvZiB0aGlzIG1hY3JvIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgdm1hbGxvYyBpbXBsZW1lbnRhdGlvbiBpbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGNvZGUuIFRoaXMgd2lsbCBjbGFyaWZ5IGlmIGl0J3MgdGhlIGdhdGVrZWVwZXIsIG9yIGlmIHRoZXJlIGFyZSBvdGhlciwgcG9zc2libHkgcGxhdGZvcm0tc3BlY2lmaWMsIGNvbnNpZGVyYXRpb25zIHRvIGFjY291bnQgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTYzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDY6Mzc6NTMuMjk1NDc4MjE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzkzNzUwNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9MTA5Mj1jb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbi0tXFxuYXJjaC9LY29uZmlnLTEwOTktI1xcbmFyY2gvS2NvbmZpZzoxMTAwOmNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxuYXJjaC9LY29uZmlnLTExMDEtXFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTMtXFx0c2VsZWN0IEhBVkVfQVJDSF9DT01QSUxFUl9IXFxuYXJjaC9hcm02NC9LY29uZmlnOjE1NDpcXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTUtXFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnPTExOD1jb25maWcgUFBDXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yMTgtXFx0c2VsZWN0IEhBVkVfQVJDSF9BVURJVFNZU0NBTExcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoyMTk6XFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXHRcXHRpZiBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjIwLVxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQXFx0XFx0aWYgUFBDX1JBRElYX01NVSB8fCBQUENfOHh4XFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMTMxLVxcdHNlbGVjdCBIQVZFX0FSQ0hfQklUUkVWRVJTRSBpZiBSSVNDVl9JU0FfWkJLQiBcXHUwMDI2XFx1MDAyNiBCSVRSRVZFUlNFXFxuYXJjaC9yaXNjdi9LY29uZmlnOjEzMjpcXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQyBpZiBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuYXJjaC9yaXNjdi9LY29uZmlnLTEzMy1cXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUCBpZiBNTVUgXFx1MDAyNlxcdTAwMjYgNjRCSVRcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xOTItXFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcXHRcXHRpZiBYODZfNjQgfHwgWDg2X1BBRVxcbmFyY2gveDg2L0tjb25maWc6MTkzOlxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFx0XFx0aWYgWDg2XzY0XFxuYXJjaC94ODYvS2NvbmZpZy0xOTQtXFx0c2VsZWN0IEhBVkVfQVJDSF9KVU1QX0xBQkVMXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0xOT1zdHJ1Y3QgaW92X2l0ZXI7XFx0XFx0LyogaW4gdWlvLmggKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTMxLSNkZWZpbmUgVk1fTUFQX1BVVF9QQUdFU1xcdDB4MDAwMDAyMDBcXHQvKiBwdXQgcGFnZXMgYW5kIGZyZWUgYXJyYXkgaW4gdmZyZWUgKi9cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDozMjojZGVmaW5lIFZNX0FMTE9XX0hVR0VfVk1BUFxcdDB4MDAwMDA0MDAgICAgICAvKiBBbGxvdyBmb3IgaHVnZSBwYWdlcyBvbiBhcmNocyB3aXRoIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgKi9cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0zMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTUyPXN0cnVjdCB2bV9zdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtNjEtXFx0c3RydWN0IHBhZ2VcXHRcXHQqKnBhZ2VzO1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjYyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTYzLVxcdHVuc2lnbmVkIGludFxcdFxcdHBhZ2Vfb3JkZXI7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0yNTg9c3RhdGljIGlubGluZSBib29sIGlzX3ZtX2FyZWFfaHVnZXBhZ2VzKGNvbnN0IHZvaWQgKmFkZHIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0yNjYtXFx0ICovXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MjY3OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTI2OC1cXHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhID0gZmluZF92bV9hcmVhKGFkZHIpO1xcbi0tXFxubW0vdm1hbGxvYy5jPTY0PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7XFxuLS1cXG5tbS92bWFsbG9jLmMtNjYtXFxubW0vdm1hbGxvYy5jOjY3OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbm1tL3ZtYWxsb2MuYy02OC1zdGF0aWMgYm9vbCBfX3JvX2FmdGVyX2luaXQgdm1hcF9hbGxvd19odWdlID0gdHJ1ZTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz03NT1lYXJseV9wYXJhbShcXFwibm9odWdldm1hbGxvY1xcXCIsIHNldF9ub2h1Z2V2bWFsbG9jKTtcXG5tbS92bWFsbG9jLmM6NzY6I2Vsc2UgLyogQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgKi9cXG5tbS92bWFsbG9jLmMtNzctc3RhdGljIGNvbnN0IGJvb2wgdm1hcF9hbGxvd19odWdlID0gZmFsc2U7XFxubW0vdm1hbGxvYy5jOjc4OiNlbmRpZlxcdC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DICovXFxubW0vdm1hbGxvYy5jLTc5LVxcbi0tXFxubW0vdm1hbGxvYy5jPTY4Mj1pbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy02ODgtXFxubW0vdm1hbGxvYy5jOjY4OTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpIHx8XFxubW0vdm1hbGxvYy5jLTY5MC1cXHRcXHRcXHRwYWdlX3NoaWZ0ID09IFBBR0VfU0hJRlQpXFxuLS1cXG5tbS92bWFsbG9jLmM9MzEyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0pXFxubW0vdm1hbGxvYy5jLTMxMjkte1xcbm1tL3ZtYWxsb2MuYzozMTMwOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbm1tL3ZtYWxsb2MuYy0zMTMxLVxcdHJldHVybiB2bS1cXHUwMDNlcGFnZV9vcmRlcjtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zMTQyPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdm1fYXJlYV9wYWdlX29yZGVyKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxubW0vdm1hbGxvYy5jLTMxNDMte1xcbm1tL3ZtYWxsb2MuYzozMTQ0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbm1tL3ZtYWxsb2MuYy0zMTQ1LVxcdHZtLVxcdTAwM2VwYWdlX29yZGVyID0gb3JkZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA2OjM3OjU1LjI3NDg1OTcxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDIxOTIwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBBIExvY2stRG93biBvbiBIdWdlIHZtYWxsb2MgUGFnZSBUYWJsZSBSYWNlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2VzIHRvIGBtbS92bWFsbG9jLmNgLCBzcGVjaWZpY2FsbHkgdGhvc2UgYWx0ZXJhdGlvbnMgdG8gYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAuIFRoZXNlIGFyZSBjYWxsZWQgYnkgdGhlIHJhbmdlLWJhc2VkIGZ1bmN0aW9ucywgbWVhbmluZyB0aGV5J3JlIGNlbnRyYWwgdG8gZW5hYmxpbmcgaHVnZSB2bWFsbG9jIG1hcHBpbmdzIOKAkyBzbywgd2UncmUgdGFsa2luZyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIGhlcmUuIEkgc2VlIHRoZXkncmUgYWxzbyB0b3VjaGluZyBgYXJjaC9hcm02NC9tbS9tbXUuY2AgYW5kIGBhcmNoL2FybTY0L21tL3B0ZHVtcC5jYCwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGNsb3NlIGF0dGVudGlvbiwgc2luY2UgQVJNNjQgaXMgYSBrZXkgdGFyZ2V0LiBTcGVjaWZpY2FsbHksIGNoYW5nZXMgdG8gYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYHB1ZF9mcmVlX3BtZF9wYWdlYCBldCBjZXRlcmEsIGhpbnQgYXQgbW9kaWZpY2F0aW9ucyB0byBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyDigJMgc3RhbmRhcmQgdGVycml0b3J5LiBBbHNvIGBwdGR1bXBfd2Fsa2AgYW5kIGBwdGR1bXBfY2hlY2tfd3hgLCB0aGF0J3MgYW4gaW50ZXJlc3RpbmcgY29tYmluYXRpb24gd2l0aCB0aGUgdm1hbGxvYyBjaGFuZ2VzLlxuXG5BaCwgaGVyZSdzIHRoZSBraWNrZXI6IHRoZSBwYXRjaCAqcmVtb3ZlcyogYGFybTY0X3B0ZHVtcF9sb2NrX2tleWAgYW5kIGFkZHMgYG1tYXBfcmVhZF9sb2NrX3RyeWAgd2l0aGluIGB2bWFwX3RyeV9odWdlX3BtZGAuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlLCBub3QganVzdCBhIGNsZWFudXAuIEl0J3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uISBJJ20gYmV0dGluZyB0aGF0IHRoZSByYWNlIGlzIGJldHdlZW4gZnJlZWluZyB2bWFsbG9jIGh1Z2UgcGFnZSB0YWJsZXMgYW5kIGBwdGR1bXBgIHdhbGtpbmcgdGhvc2UgdGFibGVzLiBUaGlzIGxvY2tzIGl0IGRvd24uXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlzIHRoaXMgcGF0Y2ggZnV6emFibGU/IEFic29sdXRlbHkuIEl0IHRvdWNoZXMgY29yZSBrZXJuZWwgbG9ja2luZyBwcmltaXRpdmVzIGluIHZtYWxsb2MgYW5kIHBhZ2UgdGFibGUgd2Fsa2luZywgc28gdGhpcyBpcyBjcml0aWNhbC4gQSBmdXp6aW5nIGNhbXBhaWduIGhlcmUgaXMgZGVmaW5pdGVseSBhIGdvb2QgaWRlYSwgcGFydGljdWxhcmx5IGdpdmVuIGl0IGltcGFjdHMgYSB2YXJpZXR5IG9mIEFSTTY0IGNvbmZpZ3VyYXRpb25zLlxuXG5BcyBmb3IgY29uZmlndXJhdGlvbnMsIHdlbGwgYENPTkZJR19QVERVTVBfQ09SRWAgb3IgYENPTkZJR19QVERVTVBfREVCVUdGU2AgYXJlIHRoZSBvYnZpb3VzIG9uZXMgZm9yIGBwdGR1bXBgLiBTaW5jZSBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGlzIGFyY2hpdGVjdHVyZS1zZWxlY3RlZCwgbm8gbmVlZCB0byB3b3JyeSB0aGVyZSwgYnV0IGBDT05GSUdfREVCVUdfV1hgIG9yIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIG1heSBiZSB1c2VmdWwuIFRpbWUgdG8gY2hlY2sgYENPTkZJR19QVERVTVBgIGluIGBhcmNoL2FybTY0L0tjb25maWdgIGZvciByZWxhdGVkIGNvbmZpZyBkZXBlbmRlbmNpZXMgb3IgYW55IHJlbGV2YW50IGRldGFpbHMgSSBtaWdodCBoYXZlIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNjozODowMi4xMTcwNTM3NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMzQyMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBURFVNUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvcHRkdW1wLnJzdD0yMz1jb25maWd1cmF0aW9ucyBhbmQgbW91bnQgZGVidWdmczo6XFxuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L3B0ZHVtcC5yc3QtMjQtXFxuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L3B0ZHVtcC5yc3Q6MjU6IENPTkZJR19QVERVTVBfREVCVUdGUz15XFxuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L3B0ZHVtcC5yc3QtMjYtXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTItXFxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZzozOmNvbmZpZyBBUk1fUFREVU1QX0NPUkVcXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTQtXFx0ZGVmX2Jvb2wgblxcbmFyY2gvYXJtL0tjb25maWcuZGVidWctNS1cXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnOjY6Y29uZmlnIEFSTV9QVERVTVBfREVCVUdGU1xcbmFyY2gvYXJtL0tjb25maWcuZGVidWctNy1cXHRib29sIFxcXCJFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXFxcIlxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zy05LVxcdGRlcGVuZHMgb24gTU1VXFxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZzoxMDpcXHRzZWxlY3QgQVJNX1BURFVNUF9DT1JFXFxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zy0xMS1cXHRzZWxlY3QgREVCVUdfRlNcXG4tLVxcbmFyY2gvYXJtL0tjb25maWcuZGVidWc9MjA9Y29uZmlnIEFSTV9ERUJVR19XWFxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zy0yMi1cXHRkZXBlbmRzIG9uIE1NVVxcbmFyY2gvYXJtL0tjb25maWcuZGVidWc6MjM6XFx0c2VsZWN0IEFSTV9QVERVTVBfQ09SRVxcbmFyY2gvYXJtL0tjb25maWcuZGVidWctMjQtXFx0aGVscFxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMi0vKiBDb3B5cmlnaHQgKEMpIDIwMTQgQVJNIEx0ZC4gKi9cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaDozOiNpZm5kZWYgX19BU01fUFREVU1QX0hcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaDo0OiNkZWZpbmUgX19BU01fUFREVU1QX0hcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC01LVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjY6I2lmZGVmIENPTkZJR19BUk1fUFREVU1QX0NPUkVcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC03LVxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MjI9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pO1xcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjIzOiNpZmRlZiBDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjQtI2RlZmluZSBFRklfUlVOVElNRV9NQVBfRU5EXFx0U1pfMUdcXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oPTI3PXN0YXRpYyBpbmxpbmUgdm9pZCBwdGR1bXBfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8sXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqbmFtZSkgeyB9XFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6Mjk6I2VuZGlmIC8qIENPTkZJR19BUk1fUFREVU1QX0RFQlVHRlMgKi9cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zMC1cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaD0zMT12b2lkIHB0ZHVtcF9jaGVja193eCh2b2lkKTtcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zMi1cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaDozMzojZW5kaWYgLyogQ09ORklHX0FSTV9QVERVTVBfQ09SRSAqL1xcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTM0LVxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtNDAtXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6NDE6I2VuZGlmIC8qIF9fQVNNX1BURFVNUF9IICovXFxuLS1cXG5hcmNoL2FybS9tbS9NYWtlZmlsZT0xNT1lbmRpZlxcbmFyY2gvYXJtL21tL01ha2VmaWxlLTE2LVxcbmFyY2gvYXJtL21tL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19BUk1fUFREVU1QX0NPUkUpXFx0Kz0gZHVtcC5vXFxuYXJjaC9hcm0vbW0vTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0FSTV9QVERVTVBfREVCVUdGUylcXHQrPSBwdGR1bXBfZGVidWdmcy5vXFxuYXJjaC9hcm0vbW0vTWFrZWZpbGUtMTktb2JqLSQoQ09ORklHX01PRFVMRVMpXFx0XFx0Kz0gcHJvYy1zeW1zLm9cXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTQ0LVxcdHNlbGVjdCBBUkNIX0hBU19QUkVFTVBUX0xBWllcXG5hcmNoL2FybTY0L0tjb25maWc6NDU6XFx0c2VsZWN0IEFSQ0hfSEFTX1BURFVNUFxcbmFyY2gvYXJtNjQvS2NvbmZpZy00Ni1cXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xNTM9c3RydWN0IGt2bV9zMl9tbXUge1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIxOS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjIwOiNpZmRlZiBDT05GSUdfUFREVU1QX1NUQUdFMl9ERUJVR0ZTXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIyMS1cXHRzdHJ1Y3QgZGVudHJ5ICpzaGFkb3dfcHRfZGVidWdmc19kZW50cnk7XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MzA5PXN0cnVjdCBrdm1fYXJjaCB7XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNDIyLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDo0MjM6I2lmZGVmIENPTkZJR19QVERVTVBfU1RBR0UyX0RFQlVHRlNcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNDI0LVxcdC8qIE5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbmZvICovXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaD0zODc9c3RhdGljIGlubGluZSBib29sIGt2bV9zdXBwb3J0c19jYWNoZWFibGVfcGZubWFwKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaC0zOTItXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbW11Lmg6MzkzOiNpZmRlZiBDT05GSUdfUFREVU1QX1NUQUdFMl9ERUJVR0ZTXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbW11LmgtMzk0LXZvaWQga3ZtX3MyX3B0ZHVtcF9jcmVhdGVfZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbW11Lmg9NDAwPXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbmVzdGVkX3MyX3B0ZHVtcF9yZW1vdmVfZGVidWdmcyhzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KSB7fVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oOjQwMTojZW5kaWYgLyogQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGUyAqL1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oLTQwMi1cXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtNC0gKi9cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjU6I2lmbmRlZiBfX0FTTV9QVERVTVBfSFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg6NjojZGVmaW5lIF9fQVNNX1BURFVNUF9IXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC03LVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC05LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg6MTA6I2lmZGVmIENPTkZJR19QVERVTVBcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTExLVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaD02OD12b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo2OTojaWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC03MC0jZGVmaW5lIEVGSV9SVU5USU1FX01BUF9FTkRcXHRERUZBVUxUX01BUF9XSU5ET1dfNjRcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg9NzM9c3RhdGljIGlubGluZSB2b2lkIHB0ZHVtcF9kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbyxcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTc0LVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKm5hbWUpIHsgfVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg6NzU6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtNzYtI2Vsc2VcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg9ODQ9c3RhdGljIGlubGluZSB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCkgeyB9XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo4NTojZW5kaWYgLyogQ09ORklHX1BURFVNUCAqL1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtODYtXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo4NzojZW5kaWYgLyogX19BU01fUFREVU1QX0ggKi9cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc9NDU9aWYgS1ZNXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBQVERVTVBfU1RBR0UyX0RFQlVHRlNcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlByZXNlbnQgdGhlIHN0YWdlLTIgcGFnZXRhYmxlcyB0byBkZWJ1Z2ZzXFxcIlxcbi0tXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy01MC1cXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzo1MTpcXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6NTI6XFx0c2VsZWN0IFBURFVNUFxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNTMtXFx0ZGVmYXVsdCBuXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZT0zMD1rdm0tJChDT05GSUdfQVJNNjRfUFRSX0FVVEgpICArPSBwYXV0aC5vXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MzE6a3ZtLSQoQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGUykgKz0gcHRkdW1wLm9cXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0zMi1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVxcdCs9IGh1Z2V0bGJwYWdlLm9cXG5hcmNoL2FybTY0L21tL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1BURFVNUClcXHRcXHQrPSBwdGR1bXAub1xcbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfUFREVU1QX0RFQlVHRlMpXFx0Kz0gcHRkdW1wX2RlYnVnZnMub1xcbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX1RSQU5TX1RBQkxFKVxcdCs9IHRyYW5zX3BnZC5vXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTQ5LVxcdHNlbGVjdCBBUkNIX0hBU19QUkVFTVBUX0xBWllcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxNTA6XFx0c2VsZWN0IEFSQ0hfSEFTX1BURFVNUFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE1MS1cXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnPTc5PUNPTkZJR19QUENfRUFSTFlfREVCVUc9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnOjgwOkNPTkZJR19QVERVTVBfREVCVUdGUz15XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX1BQQ19DT1BST19CQVNFKVxcdCs9IGNvcHJvX2ZhdWx0Lm9cXG5hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX1BURFVNUClcXHRcXHQrPSBwdGR1bXAvXFxuYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19LQVNBTilcXHRcXHQrPSBrYXNhbi9cXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfUFBDX0JPT0szU182NClcXHQrPSBib29rM3M2NC5vXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9NYWtlZmlsZS0xMC1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL01ha2VmaWxlOjExOmlmZGVmIENPTkZJR19QVERVTVBfREVCVUdGU1xcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX1BQQ19CT09LM1NfMzIpXFx0Kz0gYmF0cy5vIHNlZ21lbnRfcmVncy5vXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jPTQwNj1zdGF0aWMgaW50IF9faW5pdCBwdGR1bXBfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy00MTktXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYzo0MjA6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BURFVNUF9ERUJVR0ZTKSlcXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTQyMS1cXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJrZXJuZWxfcGFnZV90YWJsZXNcXFwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcXHUwMDI2cHRkdW1wX2ZvcHMpO1xcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQ2LVxcdHNlbGVjdCBBUkNIX0hBU19QUkVQQVJFX1NZTkNfQ09SRV9DTURcXG5hcmNoL3Jpc2N2L0tjb25maWc6NDc6XFx0c2VsZWN0IEFSQ0hfSEFTX1BURFVNUCBpZiBNTVVcXG5hcmNoL3Jpc2N2L0tjb25maWctNDgtXFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9TUEVDSUFMXFxuLS1cXG5hcmNoL3Jpc2N2L21tL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpICs9IGh1Z2V0bGJwYWdlLm9cXG5hcmNoL3Jpc2N2L21tL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19QVERVTVApICs9IHB0ZHVtcC5vXFxuYXJjaC9yaXNjdi9tbS9NYWtlZmlsZS0yMy1vYmotJChDT05GSUdfS0FTQU4pICAgKz0ga2FzYW5faW5pdC5vXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz03NT1jb25maWcgUzM5MFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctMTAzLVxcdHNlbGVjdCBBUkNIX0hBU19QUkVFTVBUX0xBWllcXG5hcmNoL3MzOTAvS2NvbmZpZzoxMDQ6XFx0c2VsZWN0IEFSQ0hfSEFTX1BURFVNUFxcbmFyY2gvczM5MC9LY29uZmlnLTEwNS1cXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz04NDI9Q09ORklHX0RFQlVHX1dYPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6ODQzOkNPTkZJR19QVERVTVBfREVCVUdGUz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTg0NC1DT05GSUdfREVCVUdfT0JKRUNUUz15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9ODIxPUNPTkZJR19ERUJVR19XWD15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjgyMjpDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy04MjMtQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXlcXG4tLVxcbmFyY2gvczM5MC9tbS9NYWtlZmlsZT0xMT1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVxcdCs9IGh1Z2V0bGJwYWdlLm9cXG5hcmNoL3MzOTAvbW0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BURFVNUClcXHRcXHQrPSBkdW1wX3BhZ2V0YWJsZXMub1xcbmFyY2gvczM5MC9tbS9NYWtlZmlsZS0xMy1vYmotJChDT05GSUdfUEZBVUxUKVxcdFxcdCs9IHBmYXVsdC5vXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MTgyPWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjI0LVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyMjU6I2lmZGVmIENPTkZJR19QVERVTVBfREVCVUdGU1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMjYtc3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MjU1PURFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXApO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNTY6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTctXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MzE1PXN0YXRpYyBpbnQgcHRfZHVtcF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMzU1LVxcdHNvcnQoXFx1MDAyNm1hcmtlcnNbMV0sIG1hcmtlcnNfY250IC0gMSwgc2l6ZW9mKCptYXJrZXJzKSwgcHRkdW1wX2NtcCwgTlVMTCk7XFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM1NjojaWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTM1Ny1cXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJrZXJuZWxfcGFnZV90YWJsZXNcXFwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcXHUwMDI2cHRkdW1wX2ZvcHMpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNTg6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNTktXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctOTgtXFx0c2VsZWN0IEFSQ0hfSEFTX1BSRUVNUFRfTEFaWVxcbmFyY2gveDg2L0tjb25maWc6OTk6XFx0c2VsZWN0IEFSQ0hfSEFTX1BURFVNUFxcbmFyY2gveDg2L0tjb25maWctMTAwLVxcdHNlbGVjdCBBUkNIX0hBU19QVEVfU1BFQ0lBTFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy5kZWJ1Zz01OT1jb25maWcgRUZJX1BHVF9EVU1QXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLmRlYnVnLTYxLVxcdGRlcGVuZHMgb24gRUZJXFxuYXJjaC94ODYvS2NvbmZpZy5kZWJ1Zzo2MjpcXHRzZWxlY3QgUFREVU1QXFxuYXJjaC94ODYvS2NvbmZpZy5kZWJ1Zy02My1cXHRoZWxwXFxuLS1cXG5hcmNoL3g4Ni9tbS9NYWtlZmlsZT0zNj1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVxcdCs9IGh1Z2V0bGJwYWdlLm9cXG5hcmNoL3g4Ni9tbS9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfUFREVU1QKVxcdFxcdCs9IGR1bXBfcGFnZXRhYmxlcy5vXFxuYXJjaC94ODYvbW0vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX1BURFVNUF9ERUJVR0ZTKVxcdCs9IGRlYnVnX3BhZ2V0YWJsZXMub1xcbmFyY2gveDg2L21tL01ha2VmaWxlLTM5LVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvYXJtLXJ1bnRpbWUuYy0yNy1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9hcm0tcnVudGltZS5jOjI4OiNpZiBkZWZpbmVkKENPTkZJR19QVERVTVBfREVCVUdGUykgfHwgZGVmaW5lZChDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTKVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2FybS1ydW50aW1lLmMtMjktI2luY2x1ZGUgXFx1MDAzY2FzbS9wdGR1bXAuaFxcdTAwM2VcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRkdW1wLmgtMi1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjM6I2lmbmRlZiBfTElOVVhfUFREVU1QX0hcXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjQ6I2RlZmluZSBfTElOVVhfUFREVU1QX0hcXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oPTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19jaGVja3d4KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTM5LVxcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6NDA6I2VuZGlmIC8qIF9MSU5VWF9QVERVTVBfSCAqL1xcbi0tXFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnPTc4PUNPTkZJR19LQVNBTl9WTUFMTE9DPXlcXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc6Nzk6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctODAtQ09ORklHX1NDSEVEX1NUQUNLX0VORF9DSEVDSz15XFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnPTE4Nj1jb25maWcgREVCVUdfV1hcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTg4LVxcdGRlcGVuZHMgb24gQVJDSF9IQVNfREVCVUdfV1hcXG5tbS9LY29uZmlnLmRlYnVnOjE4OTpcXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxcbm1tL0tjb25maWcuZGVidWctMTkwLVxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy5kZWJ1ZzoxOTE6XFx0c2VsZWN0IFBURFVNUFxcbm1tL0tjb25maWcuZGVidWctMTkyLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjE1LVxcbm1tL0tjb25maWcuZGVidWc6MjE2OmNvbmZpZyBBUkNIX0hBU19QVERVTVBcXG5tbS9LY29uZmlnLmRlYnVnLTIxNy1cXHRib29sXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMTgtXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMTk6Y29uZmlnIFBURFVNUFxcbm1tL0tjb25maWcuZGVidWctMjIwLVxcdGJvb2xcXG5tbS9LY29uZmlnLmRlYnVnLTIyMS1cXG5tbS9LY29uZmlnLmRlYnVnOjIyMjpjb25maWcgUFREVU1QX0RFQlVHRlNcXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cXHRib29sIFxcXCJFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjUtXFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbm1tL0tjb25maWcuZGVidWc6MjI2OlxcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjc6XFx0c2VsZWN0IFBURFVNUFxcbm1tL0tjb25maWcuZGVidWctMjI4LVxcdGhlbHBcXG4tLVxcbm1tL01ha2VmaWxlPTE0MT1vYmotJChDT05GSUdfTUFQUElOR19ESVJUWV9IRUxQRVJTKSArPSBtYXBwaW5nX2RpcnR5X2hlbHBlcnMub1xcbm1tL01ha2VmaWxlOjE0MjpvYmotJChDT05GSUdfUFREVU1QKSArPSBwdGR1bXAub1xcbm1tL01ha2VmaWxlLTE0My1vYmotJChDT05GSUdfUEFHRV9SRVBPUlRJTkcpICs9IHBhZ2VfcmVwb3J0aW5nLm9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND0xMTQ9Q09ORklHX1BST1ZFX0xPQ0tJTkc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2NDoxMTU6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQtMTE2LUNPTkZJR19SQ19ERVZJQ0VTPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg9OTU9Q09ORklHX1BST1ZFX0xPQ0tJTkc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg6OTY6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTk3LUNPTkZJR19SQ19ERVZJQ0VTPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDY6Mzg6MDMuNzcwNDAxMDIxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4NjM1OTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUFREVU1QIENvbmZpZ3VyYXRpb24gYW5kIFZNQUxMT0MgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgY29ubmVjdGlvbiB0byBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBpcyBvYnZpb3VzLiBUaGF0J3MgdGhlIHByaW1hcnkgZW5hYmxlciBoZXJlLiBCdXQsIGludGVyZXN0aW5nbHksIGBDT05GSUdfREVCVUdfV1hgIGFsc28gdHJpZ2dlcnMgcHRkdW1wIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aG9zZSBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnMgd2l0aGluIGBtbS92bWFsbG9jLmNgIOKAkyBzcGVjaWZpY2FsbHkgYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAuXG5cbkkga25vdyB0aGVzZSBhcmUgb25seSByZWxldmFudCB3aGVuIGB2bWFwX2FsbG93X2h1Z2VgIGlzIHRydWUsIHdoaWNoLCBpbiB0dXJuLCBpcyBkaXJlY3RseSB0aWVkIHRvIHdoZXRoZXIgYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBpcyBlbmFibGVkLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJZiB3ZSB3YW50IHB0ZHVtcCBmb3IgdGhpcywgd2UnbGwgbmVlZCB0byBlbmFibGUgYFBURFVNUF9ERUJVR0ZTYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBBbmQsIEknbSB0aGlua2luZywgYERFQlVHX1dYYCBpcyBhbm90aGVyIHNvbGlkIG9wdGlvbiB0byBjb25zaWRlciBmb3IgdGhpcyBjb25maWd1cmF0aW9uLlxuXG5Ob3csIGxldCdzIGRpdmUgZGVlcGVyIGFuZCBwaW5wb2ludCBhbnkgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgZ29vZCBjYW5kaWRhdGVzIHRvIG1vbml0b3IuIEJleW9uZCB0aG9zZSBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnMsIHRoZSBjb2RlIG1lbnRpb25zIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLCBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCBhbmQgYHB1ZF9mcmVlX3BtZF9wYWdlYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBpbiBvdXIgc2V0dXAuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgcGF0aHMgaGVyZSB0byBtYWtlIHN1cmUgd2UncmUgZ2V0dGluZyB3aGF0IHdlIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzE3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA2OjM4OjA5LjE1Njc2MjIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUwNjUzMDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhbGtfcGFnZV9yYW5nZV9kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTM4Mj1XZSBhbHNvIHBlcm1pdCBhIHRydWx5IHVudXN1YWwgY2FzZSBpcyB0aGUgdHJhdmVyc2FsIG9mIG5vbi1WTUEgcmFuZ2VzIGluXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDozODM6Kip1c2VybGFuZCoqIHJhbmdlcywgYXMgcHJvdmlkZWQgZm9yIGJ5IDpjOmZ1bmM6YCF3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLlxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtMzg0LVxcbi0tXFxubW0vaW50ZXJuYWwuaD0xODQwPWludCB3YWxrX3BhZ2VfcmFuZ2Vfdm1hX3Vuc2FmZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2ludGVybmFsLmgtMTg0Mi1cXHRcXHR2b2lkICpwcml2YXRlKTtcXG5tbS9pbnRlcm5hbC5oOjE4NDM6aW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9pbnRlcm5hbC5oLTE4NDQtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuLS1cXG5tbS9wYWdld2Fsay5jPTY0OD1pbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtNjY3LS8qKlxcbm1tL3BhZ2V3YWxrLmM6NjY4OiAqIHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyAtIHdhbGsgYSByYW5nZSBvZiBwYWdldGFibGVzIG5vdCBiYWNrZWQgYnkgYSB2bWFcXG5tbS9wYWdld2Fsay5jLTY2OS0gKiBAbW06XFx0XFx0bW1fc3RydWN0IHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IHByb2Nlc3Mgb2YgcGFnZSB0YWJsZSB3YWxrXFxuLS1cXG5tbS9wYWdld2Fsay5jLTY4My0gKi9cXG5tbS9wYWdld2Fsay5jOjY4NDppbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL3BhZ2V3YWxrLmMtNjg1LVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxcbi0tXFxubW0vcHRkdW1wLmM9MTc1PXZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcXG4tLVxcbm1tL3B0ZHVtcC5jLTE4MS1cXHR3aGlsZSAocmFuZ2UtXFx1MDAzZXN0YXJ0ICE9IHJhbmdlLVxcdTAwM2VlbmQpIHtcXG5tbS9wdGR1bXAuYzoxODI6XFx0XFx0d2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxubW0vcHRkdW1wLmMtMTgzLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZwdGR1bXBfb3BzLCBwZ2QsIHN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDY6Mzg6MTAuODA3NDIyMzQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MTY3MDc1MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIGBwdGR1bXBgIGlzIHRoZSBjZW50cmFsIHBpZWNlIGhlcmUsIHdoaWNoIGNhbGxzIGBwdGR1bXBfd2Fsa2AgYW5kIGBwdGR1bXBfY2hlY2tfd3hgLCBhbmQgdGhvc2UgaW4gdHVybiBjYWxsIGBwdGR1bXBfd2Fsa19wZ2RgLiBUaGVuLCBgcHRkdW1wX3dhbGtfcGdkYCBtYWtlcyBhIGNhbGwgdG8gYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuIFNvLCBgcHRkdW1wYCBpcyB0aGUgcHJpbWFyeSBkcml2ZXIsIGNvbmZpcm1lZC5cblxuVGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byBiZSB0d2Vha2luZyBgdm1hcF90cnlfaHVnZV9wbWRgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBjb21lcyBpbnRvIHBsYXkgZHVyaW5nIGB2bWFsbG9jYCBvcGVyYXRpb25zLiBLbm93aW5nIHRoYXQsIG15IGZvY3VzIHNob3VsZCBkZWZpbml0ZWx5IGJlIG9uIHRoZSBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnM6IGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGFuZCBgdm1hcF90cnlfaHVnZV9wNGRgLiBBbmQgb2YgY291cnNlLCBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgaXMgZnJlZWQsIHNvIGBwbWRfZnJlZV9wdGVfcGFnZWAgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAgbmVlZCB0byBiZSBjaGVja2VkIGFzIHdlbGwuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aG9zZSBsYXN0IHR3bzsgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBpbXBvcnRhbnQgaW4gdGhlaXIgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODc4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA2OjM4OjE2LjQyNDEzMTgzN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NjMyNzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbWRfZnJlZV9wdGVfcGFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L21tL21tdS5jPTE4NTA9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xODU3LVxcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTg1ODppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL2FybTY0L21tL21tdS5jLTE4NTkte1xcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYz0xODc3PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xODk2LVxcdFxcdGlmIChwbWRfcHJlc2VudChwbWRwX2dldChwbWRwKSkpXFxuYXJjaC9hcm02NC9tbS9tbXUuYzoxODk3OlxcdFxcdFxcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg5OC1cXHR9IHdoaWxlIChwbWRwKyssIG5leHQgKz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmM9MTY3NT1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmMtMTY4NC1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jOjE2ODU6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jLTE2ODYte1xcbi0tXFxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmM9MTE3PWludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kKVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMtMTI0LVxcbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jOjEyNTppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jLTEyNi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM9NzE4PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzU0LS8qKlxcbmFyY2gveDg2L21tL3BndGFibGUuYzo3NTU6ICogcG1kX2ZyZWVfcHRlX3BhZ2UgLSBDbGVhciBQTUQgZW50cnkgYW5kIGZyZWUgUFRFIHBhZ2UuXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc1Ni0gKiBAcG1kOiBQb2ludGVyIHRvIHRoZSBQTURcXG4tLVxcbmFyY2gveDg2L21tL3BndGFibGUuYy03NjEtICovXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jOjc2MjppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gveDg2L21tL3BndGFibGUuYy03NjMte1xcbi0tXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc4Mi0gKi9cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NzgzOmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc4NC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0yMTc2PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIxNzc6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjE3OC0jZWxzZVxcdC8qICFDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjIwND1zdGF0aWMgaW5saW5lIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMjA3LX1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMjA4OnN0YXRpYyBpbmxpbmUgaW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMjA5LXtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0xNDM9c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTE3My1cXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbm1tL3ZtYWxsb2MuYzoxNzQ6XFx0XFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxcbm1tL3ZtYWxsb2MuYy0xNzUtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA2OjM4OjE4LjE3MDQ2NjU2M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjgzNDI2OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbiBgYXJjaC9hcm02NC9tbS9tbXUuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgcG1kX2ZyZWVfcHRlX3BhZ2VgLiBJdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2U6IHRoZXkncmUgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgYF9fcG1kX2ZyZWVfcHRlX3BhZ2VgIGFuZCBqdXN0IHJlbmFtaW5nIGl0LiBUaGUgb3RoZXIgc2lnbmlmaWNhbnQgcmVtb3ZhbCBpcyB0aGUgYHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KWAgc3R1ZmYuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBjb3JlIGtlcm5lbCBjb2RlLCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMsIGFuZCBpdCAqaXMqIHJlYWNoYWJsZSDigJMgdGhhdCdzIGEga2V5IGRldGFpbCBmb3IgbXkgYXNzZXNzbWVudC5cblxuSSBzaG91bGQgdmVyaWZ5IGFueSBjb25maWcgZGVwZW5kZW5jaWVzLiBMb29rcyBsaWtlIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBwcmltYXJ5IG9uZSwgYW5kIGBDT05GSUdfREVCVUdfV1hgIGlzIGFub3RoZXIsIHRob3VnaCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGlzIGFyY2hpdGVjdHVyZS1zZWxlY3RlZC4gU28gSSBqdXN0IG5lZWQgdG8gc3BlY2lmeSB0aGUgZm9ybWVyLiBObyBuZWVkIHRvIHNwZWNpZnkgdGhlIGxhdHRlci5cblxuTm93LCBwdXR0aW5nIGl0IGFsbCB0b2dldGhlciBmb3IgZnV6emluZywgSSdtIHRoaW5raW5nOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseS4gVGhpcyBoaXRzIHRoZSBzd2VldCBzcG90IGZvciBmdXp6aW5nIGNvbnNpZGVyYXRpb24uXG4qICAgKipGb2N1c1N5bWJvbHMqKjogIEknbGwgd2FudCB0byB0YXJnZXQgdGhlc2UgZnVuY3Rpb25zLCBiZWNhdXNlIHRoZXkncmUgcmVsYXRlZCB0byBodWdlIHZtYWxsb2MgbWFwcGluZ3MgYW5kIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uOlxuICAgICogICBgdm1hcF90cnlfaHVnZV9wbWRgXG4gICAgKiAgIGB2bWFwX3RyeV9odWdlX3B1ZGBcbiAgICAqICAgYHZtYXBfdHJ5X2h1Z2VfcDRkYFxuICAgICogICBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYFxuICAgICogICBgcG1kX2ZyZWVfcHRlX3BhZ2VgXG4gICAgKiAgIGBwdWRfZnJlZV9wbWRfcGFnZWBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjpcbiAgICAqICAgYFBURFVNUF9ERUJVR0ZTYFxuICAgICogICBgREVCVUdfV1hgXG5cbk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIHRoZSBsb2NraW5nIGxvZ2ljIGZvciBmcmVlaW5nIHBhZ2UgdGFibGVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGh1Z2Ugdm1hbGxvYyBtYXBwaW5ncy4gVGhleSdyZSByZXBsYWNpbmcgYSBzcGVjaWZpYyBzdGF0aWMga2V5IGZvciBhcm02NCB3aXRoIGEgbW9yZSBnZW5lcmljIGxvY2suIEkgYWxzbyBzYXcgdGhlIGFkZGl0aW9uIG9mIG1tYXAgd3JpdGUgbG9jayBhc3NlcnRpb25zIGluIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLiBUaGlzIHNvcnQgb2YgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZSBjb2RlLCBkZWFsaW5nIHdpdGggY29uY3VycmVuY3kgKHZtYWxsb2MgYW5kIHB0ZHVtcCBzcGVjaWZpY2FsbHkpIGRlbWFuZHMgcmlnb3JvdXMgZnV6emluZy4gSSBuZWVkIHRvIGV4cG9zZSBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yLCBldmVuIHdvcnNlLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHRoYXQgY291bGQgYXJpc2UgZnJvbSB0aGUgY2hhbmdlcyBpbiBsb2NrIGhhbmRsaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcm9idXN0LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSB2bWFsbG9jIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTUwLCJPdXRwdXRUb2tlbnMiOjIxMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNjozODoyNi40NTM4OTcxMjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTEyNTk1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIkRFQlVHX1dYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hcF90cnlfaHVnZV9wbWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcHVkXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3A0ZFwiLFxuICAgIFwid2Fsa19wYWdlX3JhbmdlX2RlYnVnXCIsXG4gICAgXCJwbWRfZnJlZV9wdGVfcGFnZVwiLFxuICAgIFwicHVkX2ZyZWVfcG1kX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBsb2dpYyBmb3IgZnJlZWluZyBwYWdlIHRhYmxlcyBkdXJpbmcgaHVnZSB2bWFsbG9jIG1hcHBpbmdzLCByZXBsYWNpbmcgYW4gYXJtNjQtc3BlY2lmaWMgc3RhdGljIGtleSB3aXRoIGEgZ2VuZXJpYyBtbWFwX3JlYWRfbG9ja190cnkgaW4gY29yZSB2bWFsbG9jIGNvZGUuIEl0IGFsc28gYWRkcyBhbiBtbWFwIHdyaXRlIGxvY2sgYXNzZXJ0aW9uIGluIHdhbGtfcGFnZV9yYW5nZV9kZWJ1Zy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIgZHVyaW5nIGNvbmN1cnJlbnQgdm1hbGxvYyBhbmQgcHRkdW1wIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIkRFQlVHX1dYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hcF90cnlfaHVnZV9wbWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcHVkXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3A0ZFwiLFxuICAgIFwid2Fsa19wYWdlX3JhbmdlX2RlYnVnXCIsXG4gICAgXCJwbWRfZnJlZV9wdGVfcGFnZVwiLFxuICAgIFwicHVkX2ZyZWVfcG1kX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBsb2dpYyBmb3IgZnJlZWluZyBwYWdlIHRhYmxlcyBkdXJpbmcgaHVnZSB2bWFsbG9jIG1hcHBpbmdzLCByZXBsYWNpbmcgYW4gYXJtNjQtc3BlY2lmaWMgc3RhdGljIGtleSB3aXRoIGEgZ2VuZXJpYyBtbWFwX3JlYWRfbG9ja190cnkgaW4gY29yZSB2bWFsbG9jIGNvZGUuIEl0IGFsc28gYWRkcyBhbiBtbWFwIHdyaXRlIGxvY2sgYXNzZXJ0aW9uIGluIHdhbGtfcGFnZV9yYW5nZV9kZWJ1Zy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIgZHVyaW5nIGNvbmN1cnJlbnQgdm1hbGxvYyBhbmQgcHRkdW1wIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow447tc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 06:22:24 +0000 UTC FinishedAt: 2026-07-11 06:38:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS", "DEBUG_WX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS", "DEBUG_WX" ], "series_id": "e62d668d-1c91-46bd-9e40-c96a8eb723d4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vmap_try_huge_pmd", "vmap_try_huge_pud", "vmap_try_huge_p4d", "walk_page_range_debug", "pmd_free_pte_page", "pud_free_pmd_page" ], "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+CgkJCTx0ZD4yMDI2LzA3LzExIDA2OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0RFQlVHX1dYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wdWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wNGQmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDssCiAgICAmIzM0O3BtZF9mcmVlX3B0ZV9wYWdlJiMzNDssCiAgICAmIzM0O3B1ZF9mcmVlX3BtZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGxvZ2ljIGZvciBmcmVlaW5nIHBhZ2UgdGFibGVzIGR1cmluZyBodWdlIHZtYWxsb2MgbWFwcGluZ3MsIHJlcGxhY2luZyBhbiBhcm02NC1zcGVjaWZpYyBzdGF0aWMga2V5IHdpdGggYSBnZW5lcmljIG1tYXBfcmVhZF9sb2NrX3RyeSBpbiBjb3JlIHZtYWxsb2MgY29kZS4gSXQgYWxzbyBhZGRzIGFuIG1tYXAgd3JpdGUgbG9jayBhc3NlcnRpb24gaW4gd2Fsa19wYWdlX3JhbmdlX2RlYnVnLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgY29uY3VycmVudCB2bWFsbG9jIGFuZCBwdGR1bXAgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNjozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc5ZWVkMTg1MWZlZmY3NzI2NTViMWFkNGM4ZDQxOWY5MzllMDBmZjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAwNjozNzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuaW5kZXggNWIzNzRhNmFiMzRhNGUuLjUwYTE5NWVkYThlZDIyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuQEAgLTcsOCAmIzQzOzcsNiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0ZHVtcC5oXHUwMDNlXG4gXG4tREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tXG4gI2lmZGVmIENPTkZJR19QVERVTVBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbmluZGV4IGYyYmU1MDE0NjhjZTVhLi5mNzIzYmNmNjgxNzRmYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbkBAIC00OSw4ICYjNDM7NDksNiBAQFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1x0QklUKDEpXG4gI2RlZmluZSBOT19FWEVDX01BUFBJTkdTXHRCSVQoMilcdC8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovXG4gXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiB1NjQga2ltYWdlX3ZvZmZzZXQgX19yb19hZnRlcl9pbml0O1xuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xuIFxuQEAgLTE4NTcsOCAmIzQzOzE4NTUsNyBAQCBpbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgIGJvb2wgYWNxdWlyZV9tbWFwX2xvY2spXG4mIzQzO2ludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHB0ZV90ICp0YWJsZTtcbiBcdHBtZF90IHBtZDtcbkBAIC0xODcwLDI1ICYjNDM7MTg2NywxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4tXHQvKiBTZWUgY29tbWVudCBpbiBwdWRfZnJlZV9wbWRfcGFnZSBmb3Igc3RhdGljIGtleSBsb2dpYyAqL1xuIFx0dGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTtcbiBcdHBtZF9jbGVhcihwbWRwKTtcbiBcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSBcdTAwMjZcdTAwMjYgYWNxdWlyZV9tbWFwX2xvY2spIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHR9XG4tXG4gXHRwdGVfZnJlZV9rZXJuZWwoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdC8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovXG4tXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xuLX1cbi1cbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwbWRfdCAqdGFibGU7XG5AQCAtMTkwNCwzNiAmIzQzOzE4ODksMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHR9XG4gXG4gXHR0YWJsZSA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4tXG4tXHQvKlxuLVx0ICogT3VyIG9iamVjdGl2ZSBpcyB0byBwcmV2ZW50IHB0ZHVtcCBmcm9tIHJlYWRpbmcgYSBQTUQgdGFibGUgd2hpY2ggaGFzXG4tXHQgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb25cbi1cdCAqICh3aGljaCBnb3QgZmxpcHBlZCBieSBwdGR1bXApIHRoZW4gdGhlIG1tYXAgbG9jayBzZXF1ZW5jZSBoZXJlIHdpbGwsXG4tXHQgKiBhcyBhIHJlc3VsdCBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrL3VubG9jayBzZXF1ZW5jZSBpbiBwdGR1bXAsIGdpdmVcbi1cdCAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhc1xuLVx0ICogeWV0IG5vdCBzdGFydGVkIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMgLSB0aGUgc2VxdWVuY2Ugb2YgYmFycmllcnNcbi1cdCAqIGlzc3VlZCBieSBfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZSgpIGd1YXJhbnRlZXMgdGhhdCBwdGR1bXAgd2lsbFxuLVx0ICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuXG4tXHQgKi9cbi1cdHB1ZF9jbGVhcihwdWRwKTtcbi1cdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbi1cdH1cbi1cbiBcdHBtZHAgPSB0YWJsZTtcbiBcdG5leHQgPSBhZGRyO1xuIFx0ZW5kID0gYWRkciAmIzQzOyBQVURfU0laRTtcbiBcdGRvIHtcbiBcdFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbiYjMzk7dCBzZWUgaXQuIE5vXG4tXHRcdFx0ICogbmVlZCB0byBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7XG4mIzQzO1x0XHRcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xuIFx0fSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XG4gXG4mIzQzO1x0cHVkX2NsZWFyKHB1ZHApO1xuJiM0MztcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuIFx0cG1kX2ZyZWUoTlVMTCwgdGFibGUpO1xuIFx0cmV0dXJuIDE7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5pbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXG5AQCAtMjgzLDEzICYjNDM7MjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXG4gXHRub3RlX3BhZ2UocHRfc3QsIDAsIC0xLCBwdGVfdmFsKHB0ZV96ZXJvKSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFybTY0X3B0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4te1xuLVx0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cdHB0ZHVtcF93YWxrX3BnZChzdCwgbW0sIE5VTEwpO1xuLVx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi19XG4tXG4gdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGVuZCA9IH4wVUw7XG5AQCAtMzE4LDcgJiM0MzszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSk7XG4mIzQzO1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSwgTlVMTCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxuQEAgLTM2MCw3ICYjNDM7MzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbiBcdFx0fVxuIFx0fTtcbiBcbi1cdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0pO1xuJiM0MztcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuIFxuIFx0aWYgKHN0Lnd4X3BhZ2VzIHx8IHN0LnV4bl9wYWdlcykge1xuIFx0XHRwcl93YXJuKFwmIzM0O0NoZWNrZWQgVyYjNDM7WCBtYXBwaW5nczogRkFJTEVELCAlbHUgVyYjNDM7WCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDA0YjhmNjFlY2U1ZDhlLi42YjVjMjM5MGNjMzAxZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbkBAIC02MjEsNiAmIzQzOzYyMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxuIFx0ICAgICBtbWFwX3JlYWRfbG9jayhfVCksIG1tYXBfcmVhZF91bmxvY2soX1QpKVxuJiM0MztERUZJTkVfR1VBUkRfQ09ORChtbWFwX3JlYWRfbG9jaywgX3RyeSwgbW1hcF9yZWFkX3RyeWxvY2soX1QpKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcbmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li5iYmNmZDY4ZDA5MDdkZiAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2V3YWxrLmNcbkBAIC02NzgsNiAmIzQzOzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kXG4gICogd2lsbCBhbHNvIG5vdCBsb2NrIHRoZSBQVEVzIGZvciB0aGUgcHRlX2VudHJ5KCkgY2FsbGJhY2suXG4gICpcbiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuXG4gICovXG4gaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbkBAIC02OTEsNiAmIzQzOzY5MywxNiBAQCBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHQubm9fdm1hXHRcdD0gdHJ1ZVxuIFx0fTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdoZW4gd2Fsa2luZyB1c2VybGFuZCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZCB0b1xuJiM0MztcdCAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZ1xuJiM0MztcdCAqIGRvd24gcGFnZSB0YWJsZXMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGRcbiYjNDM7XHQgKiB0byBhY2NvdW50IGZvciBwYWdlIHRhYmxlIGZyZWVpbmcgb24gdm1hcCBodWdlIHBhZ2UgbWFwcGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuJiM0MztcbiBcdC8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi9cbiBcdGlmIChtbSA9PSBcdTAwMjZpbml0X21tKVxuIFx0XHRyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsXG5AQCAtNzAwLDE2ICYjNDM7NzEyLDYgQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHQvKlxuLVx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXG4tXHQgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG9cbi1cdCAqIHByb3RlY3QgdGhvc2UgYXJlYXMgd2hpY2ggZG9uJiMzOTt0IGhhdmUgYSBWTUEgYXMgbXVubWFwKCkgZGV0YWNoZXNcbi1cdCAqIHRoZSBWTUFzIGJlZm9yZSBkb3duZ3JhZGluZyB0byBhIHJlYWQgbG9jayBhbmQgYWN0dWFsbHkgdGVhcmluZ1xuLVx0ICogZG93biBQVEVzL3BhZ2UgdGFibGVzLiBJbiB3aGljaCBjYXNlLCB0aGUgbW1hcCB3cml0ZSBsb2NrIHNob3VsZFxuLVx0ICogYmUgaGVsZC5cbi1cdCAqL1xuLVx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcbi1cbiBcdHJldHVybiB3YWxrX3BnZF9yYW5nZShzdGFydCwgZW5kLCBcdTAwMjZ3YWxrKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uNTM3ZmY3YjNjNDEyNzAgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYWxsb2MuY1xuQEAgLTQzLDYgJiM0Mzs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2htcGFyYW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2Vfb3duZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMTU4LDEwICYjNDM7MTU5LDIyIEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBNRF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocG1kX3ByZXNlbnQoKnBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIXBtZF9wcmVzZW50KCpwbWQpKVxuJiM0MztcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEtlcm5lbCBwYWdlIHRhYmxlIHdhbGtlcnMgZWl0aGVyIHdhbGsgcmFuZ2VzIHRoZXkgb3duIGV4Y2x1c2l2ZWx5XG4mIzQzO1x0ICogdXNpbmcgdGhlIG1tYXAgbG9jayBmb3IgbXV0dWFsIGV4Y2x1c2lvbiwgb3IgaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrXG4mIzQzO1x0ICogb24gaW5pdF9tbSAocHRkdW1wIGJlaW5nIHRoZSBtb3RpdmF0aW5nIGNhc2UpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlcmVmb3JlLCBhY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHdoZW5cbiYjNDM7XHQgKiBmcmVlaW5nIHBhZ2UgdGFibGVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbiYjNDM7XHRcdGlmICghcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC0yMTAsMTAgJiM0MzsyMjMsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUFVEX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwdWRfcHJlc2VudCgqcHVkKSBcdTAwMjZcdTAwMjYgIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXG4mIzQzO1x0XHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG4mIzQzO1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuJiM0MztcdFx0aWYgKCFwdWRfZnJlZV9wbWRfcGFnZShwdWQsIGFkZHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTI2MiwxMCAmIzQzOzI4MCwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQNERfU0laRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHA0ZF9wcmVzZW50KCpwNGQpIFx1MDAyNlx1MDAyNiAhcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcbiYjNDM7XHRcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuIFxuLVx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbiYjNDM7XHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4mIzQzO1x0XHRpZiAoIXA0ZF9mcmVlX3B1ZF9wYWdlKHA0ZCwgYWRkcikpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDY6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFREVU1QX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7REVCVUdfV1gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFwX3RyeV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDt2bWFwX3RyeV9odWdlX3B1ZCYjMzQ7LAogICAgJiMzNDt2bWFwX3RyeV9odWdlX3A0ZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OywKICAgICYjMzQ7cG1kX2ZyZWVfcHRlX3BhZ2UmIzM0OywKICAgICYjMzQ7cHVkX2ZyZWVfcG1kX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgbG9naWMgZm9yIGZyZWVpbmcgcGFnZSB0YWJsZXMgZHVyaW5nIGh1Z2Ugdm1hbGxvYyBtYXBwaW5ncywgcmVwbGFjaW5nIGFuIGFybTY0LXNwZWNpZmljIHN0YXRpYyBrZXkgd2l0aCBhIGdlbmVyaWMgbW1hcF9yZWFkX2xvY2tfdHJ5IGluIGNvcmUgdm1hbGxvYyBjb2RlLiBJdCBhbHNvIGFkZHMgYW4gbW1hcCB3cml0ZSBsb2NrIGFzc2VydGlvbiBpbiB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBhbmQgYXJjaGl0ZWN0dXJlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyBjb25jdXJyZW50IHZtYWxsb2MgYW5kIHB0ZHVtcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OWVlZDE4NTFmZWZmNzcyNjU1YjFhZDRjOGQ0MTlmOTM5ZTAwZmY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMDY6Mzc6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaAppbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaApAQCAtNyw4ICYjNDM7Nyw2IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9wdGR1bXAuaCZndDsKIAotREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci0KICNpZmRlZiBDT05GSUdfUFREVU1QCiAKICNpbmNsdWRlICZsdDtsaW51eC9tbV90eXBlcy5oJmd0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKaW5kZXggZjJiZTUwMTQ2OGNlNWEuLmY3MjNiY2Y2ODE3NGZiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKQEAgLTQ5LDggJiM0Mzs0OSw2IEBACiAjZGVmaW5lIE5PX0NPTlRfTUFQUElOR1MJQklUKDEpCiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1MJQklUKDIpCS8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovCiAKLURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci0KIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7CiBFWFBPUlRfU1lNQk9MKGtpbWFnZV92b2Zmc2V0KTsKIApAQCAtMTg1Nyw4ICYjNDM7MTg1NSw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcCkKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaykKJiM0MztpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwdGVfdCAqdGFibGU7CiAJcG1kX3QgcG1kOwpAQCAtMTg3MCwyNSAmIzQzOzE4NjcsMTMgQEAgc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAxOwogCX0KIAotCS8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovCiAJdGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTsKIAlwbWRfY2xlYXIocG1kcCk7CiAJX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7Ci0JaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDthcm02NF9wdGR1bXBfbG9ja19rZXkpICZhbXA7JmFtcDsgYWNxdWlyZV9tbWFwX2xvY2spIHsKLQkJbW1hcF9yZWFkX2xvY2soJmFtcDtpbml0X21tKTsKLQkJbW1hcF9yZWFkX3VubG9jaygmYW1wO2luaXRfbW0pOwotCX0KLQogCXB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7CiAJcmV0dXJuIDE7CiB9CiAKLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCS8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovCi0JcmV0dXJuIF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgYWRkciwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyB0cnVlKTsKLX0KLQogaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcG1kX3QgKnRhYmxlOwpAQCAtMTkwNCwzNiAmIzQzOzE4ODksMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiAJfQogCiAJdGFibGUgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpOwotCi0JLyoKLQkgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXMKLQkgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb24KLQkgKiAod2hpY2ggZ290IGZsaXBwZWQgYnkgcHRkdW1wKSB0aGVuIHRoZSBtbWFwIGxvY2sgc2VxdWVuY2UgaGVyZSB3aWxsLAotCSAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZQotCSAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhcwotCSAqIHlldCBub3Qgc3RhcnRlZCB3YWxraW5nIHRoZSBwYWdldGFibGVzIC0gdGhlIHNlcXVlbmNlIG9mIGJhcnJpZXJzCi0JICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsCi0JICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuCi0JICovCi0JcHVkX2NsZWFyKHB1ZHApOwotCV9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpOwotCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkgewotCQltbWFwX3JlYWRfbG9jaygmYW1wO2luaXRfbW0pOwotCQltbWFwX3JlYWRfdW5sb2NrKCZhbXA7aW5pdF9tbSk7Ci0JfQotCiAJcG1kcCA9IHRhYmxlOwogCW5leHQgPSBhZGRyOwogCWVuZCA9IGFkZHIgJiM0MzsgUFVEX1NJWkU7CiAJZG8gewogCQlpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKQotCQkJLyoKLQkJCSAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbiYjMzk7dCBzZWUgaXQuIE5vCi0JCQkgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suCi0JCQkgKi8KLQkJCV9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7CiYjNDM7CQkJcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7CiAJfSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7CiAKJiM0MzsJcHVkX2NsZWFyKHB1ZHApOwomIzQzOwlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTsKIAlwbWRfZnJlZShOVUxMLCB0YWJsZSk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwppbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwpAQCAtMjgzLDEzICYjNDM7MjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpCiAJbm90ZV9wYWdlKHB0X3N0LCAwLCAtMSwgcHRlX3ZhbChwdGVfemVybykpOwogfQogCi1zdGF0aWMgdm9pZCBhcm02NF9wdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXN0YXRpY19icmFuY2hfaW5jKCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTsKLQlwdGR1bXBfd2Fsa19wZ2Qoc3QsIG1tLCBOVUxMKTsKLQlzdGF0aWNfYnJhbmNoX2RlYygmYW1wO2FybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci19Ci0KIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBlbmQgPSB+MFVMOwpAQCAtMzE4LDcgJiM0MzszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKQogCQl9CiAJfTsKIAotCWFybTY0X3B0ZHVtcF93YWxrX3BnZCgmYW1wO3N0LnB0ZHVtcCwgaW5mby0mZ3Q7bW0pOwomIzQzOwlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsIGluZm8tJmd0O21tLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHB0ZHVtcF9pbml0aWFsaXplKHZvaWQpCkBAIC0zNjAsNyAmIzQzOzM1Myw3IEBAIGJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpCiAJCX0KIAl9OwogCi0JYXJtNjRfcHRkdW1wX3dhbGtfcGdkKCZhbXA7c3QucHRkdW1wLCAmYW1wO2luaXRfbW0pOwomIzQzOwlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsICZhbXA7aW5pdF9tbSwgTlVMTCk7CiAKIAlpZiAoc3Qud3hfcGFnZXMgfHwgc3QudXhuX3BhZ2VzKSB7CiAJCXByX3dhcm4oJiMzNDtDaGVja2VkIFcmIzQzO1ggbWFwcGluZ3M6IEZBSUxFRCwgJWx1IFcmIzQzO1ggcGFnZXMgZm91bmQsICVsdSBub24tVVhOIHBhZ2VzIGZvdW5kXG4mIzM0OywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCmluZGV4IDA0YjhmNjFlY2U1ZDhlLi42YjVjMjM5MGNjMzAxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCkBAIC02MjEsNiAmIzQzOzYyMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKiwKIAkgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpCiYjNDM7REVGSU5FX0dVQVJEX0NPTkQobW1hcF9yZWFkX2xvY2ssIF90cnksIG1tYXBfcmVhZF90cnlsb2NrKF9UKSkKIAogc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewpkaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmMKaW5kZXggM2FlMjU4NmZmNDViNDQuLmJiY2ZkNjhkMDkwN2RmIDEwMDY0NAotLS0gYS9tbS9wYWdld2Fsay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2V3YWxrLmMKQEAgLTY3OCw2ICYjNDM7Njc4LDggQEAgaW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQKICAqIHdpbGwgYWxzbyBub3QgbG9jayB0aGUgUFRFcyBmb3IgdGhlIHB0ZV9lbnRyeSgpIGNhbGxiYWNrLgogICoKICAqIFRoaXMgaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBPTkxZLgomIzQzOyAqCiYjNDM7ICogVGhlIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuCiAgKi8KIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcywKQEAgLTY5MSw2ICYjNDM7NjkzLDE2IEBAIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCS5ub192bWEJCT0gdHJ1ZQogCX07CiAKJiM0MzsJLyoKJiM0MzsJICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvCiYjNDM7CSAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZwomIzQzOwkgKiBkb3duIHBhZ2UgdGFibGVzLgomIzQzOwkgKgomIzQzOwkgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGQKJiM0MzsJICogdG8gYWNjb3VudCBmb3IgcGFnZSB0YWJsZSBmcmVlaW5nIG9uIHZtYXAgaHVnZSBwYWdlIG1hcHBpbmcuCiYjNDM7CSAqLwomIzQzOwltbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pOwomIzQzOwogCS8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi8KIAlpZiAobW0gPT0gJmFtcDtpbml0X21tKQogCQlyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsCkBAIC03MDAsMTYgJiM0Mzs3MTIsNiBAQCBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCWlmICghY2hlY2tfb3BzX3NhZmUob3BzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKgotCSAqIFRoZSBtbWFwIGxvY2sgcHJvdGVjdHMgdGhlIHBhZ2Ugd2Fsa2VyIGZyb20gY2hhbmdlcyB0byB0aGUgcGFnZQotCSAqIHRhYmxlcyBkdXJpbmcgdGhlIHdhbGsuICBIb3dldmVyIGEgcmVhZCBsb2NrIGlzIGluc3VmZmljaWVudCB0bwotCSAqIHByb3RlY3QgdGhvc2UgYXJlYXMgd2hpY2ggZG9uJiMzOTt0IGhhdmUgYSBWTUEgYXMgbXVubWFwKCkgZGV0YWNoZXMKLQkgKiB0aGUgVk1BcyBiZWZvcmUgZG93bmdyYWRpbmcgdG8gYSByZWFkIGxvY2sgYW5kIGFjdHVhbGx5IHRlYXJpbmcKLQkgKiBkb3duIFBURXMvcGFnZSB0YWJsZXMuIEluIHdoaWNoIGNhc2UsIHRoZSBtbWFwIHdyaXRlIGxvY2sgc2hvdWxkCi0JICogYmUgaGVsZC4KLQkgKi8KLQltbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pOwotCiAJcmV0dXJuIHdhbGtfcGdkX3JhbmdlKHN0YXJ0LCBlbmQsICZhbXA7d2Fsayk7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAxYWZjYTM1NjhiOWI2NS4uNTM3ZmY3YjNjNDEyNzAgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL3RsYmZsdXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NobXBhcmFtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZV9vd25lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy92bWFsbG9jLmgmZ3Q7CkBAIC0xNTgsMTAgJiM0MzsxNTksMjIgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBNRF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocG1kX3ByZXNlbnQoKnBtZCkgJmFtcDsmYW1wOyAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCiYjNDM7CQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKgomIzQzOwkgKiBLZXJuZWwgcGFnZSB0YWJsZSB3YWxrZXJzIGVpdGhlciB3YWxrIHJhbmdlcyB0aGV5IG93biBleGNsdXNpdmVseQomIzQzOwkgKiB1c2luZyB0aGUgbW1hcCBsb2NrIGZvciBtdXR1YWwgZXhjbHVzaW9uLCBvciBob2xkIHRoZSBtbWFwIHdyaXRlIGxvY2sKJiM0MzsJICogb24gaW5pdF9tbSAocHRkdW1wIGJlaW5nIHRoZSBtb3RpdmF0aW5nIGNhc2UpLgomIzQzOwkgKgomIzQzOwkgKiBUaGVyZWZvcmUsIGFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgd2hlbgomIzQzOwkgKiBmcmVlaW5nIHBhZ2UgdGFibGVzLgomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgJmFtcDtpbml0X21tKSB7CiYjNDM7CQlpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCkBAIC0yMTAsMTAgJiM0MzsyMjMsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocHVkX3ByZXNlbnQoKnB1ZCkgJmFtcDsmYW1wOyAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpCiYjNDM7CQlyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqLwomIzQzOwlzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCAmYW1wO2luaXRfbW0pIHsKJiM0MzsJCWlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKQEAgLTI2MiwxMCAmIzQzOzI4MCwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJaWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKQogCQlyZXR1cm4gMDsKIAotCWlmIChwNGRfcHJlc2VudCgqcDRkKSAmYW1wOyZhbXA7ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKQotCQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFwNGRfcHJlc2VudCgqcDRkKSkKJiM0MzsJCXJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpOwogCi0JcmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CS8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovCiYjNDM7CXNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsICZhbXA7aW5pdF9tbSkgewomIzQzOwkJaWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CX0KIH0KIAogc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTAwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBIdWdlIFBhZ2VzIGFuZCB2bWFsbG9jKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIGl0JiMzOTtzIG1lc3Npbmcgd2l0aCBwYWdlIHRhYmxlIGR1bXBpbmcgYW5kIGB2bWFsbG9jYCBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGh1Z2UgcGFnZXMgYW5kIGxvY2tpbmcuJiMzNDsgVGhlIHBhdGNoIGxvb2tzIGxpa2UgaXQmIzM5O3MgdGFraW5nIG91dCB0aGUgYGFybTY0X3B0ZHVtcF9sb2NrX2tleWAgc3RhdGljIGtleSBsb2dpYyBmcm9tIHRoZSBgYXJtNjRgIGFyY2hpdGVjdHVyZSYjMzk7cyBgbW11LmNgIGFuZCBgcHRkdW1wLmNgIGZpbGVzLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBJIHdvbmRlciB3aHkgdGhleSYjMzk7cmUgZG9pbmcgdGhhdC4gSW5zdGVhZCwgaXQmIzM5O3MgaW50cm9kdWNpbmcgYG1tYXBfcmVhZF9sb2NrX3RyeWAgY2FsbHMgd2l0aGluIGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGFuZCBgdm1hcF90cnlfaHVnZV9wNGRgIGZ1bmN0aW9ucyBpbiBgbW0vdm1hbGxvYy5jYC4gQW5kIGl0IGFsc28gdG91Y2hlcyBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCBpbiBgbW0vcGFnZXdhbGsuY2AsIG1ha2luZyBpdCBhc3NlcnQgYG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSlgIGZvciBrZXJuZWwgcGFnZSB0YWJsZXMuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICYjMzQ7SXMgdGhpcyBmdW5jdGlvbmFsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXMgaXQgYWN0dWFsbHkgKnJlYWNoYWJsZSo/JiMzNDsgTGV0JiMzOTtzIHNlZS4uLiBgdm1hcF90cnlfaHVnZV9wbWRgIGlzIGNhbGxlZCBmcm9tIGB2bWFwX3BtZF9yYW5nZWAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGB2bWFsbG9jYCBwYXRoLiBPa2F5LCB0aGF0IGNvbmZpcm1zIHRoYXQgYHZtYWxsb2NgIGl0c2VsZiBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhbHRlcmluZyBob3cgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIHdoZW4gd2UmIzM5O3JlIGNyZWF0aW5nIHRob3NlIGh1Z2UgbWFwcGluZ3MgaW5zaWRlIGB2bWFsbG9jYC4gSXQmIzM5O3MgdXNpbmcgYHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsICZhbXA7aW5pdF9tbSlgIHRvIGdldCB0aGUgYG1tYXBgIHJlYWQgbG9jay4gSWYgdGhlIGxvY2sgYWNxdWlzaXRpb24gZmFpbHMsIGl0IHJldHVybnMgMCwgd2hpY2ggbGlrZWx5IHNpZ25hbHMgYSBmYWxsYmFjayB0byBub24taHVnZSBtYXBwaW5nLCBvciBwZXJoYXBzIGEgZmFpbHVyZSBhbHRvZ2V0aGVyLgoKTm93IEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2FpdCBhIHNlY29uZCwgdGhpcyBpcyB0b3VjaGluZyBgbW0vdm1hbGxvYy5jYC4uLiB0aGF0JiMzOTtzIGNvcmUga2VybmVsIGNvZGUuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBuZWVkIHRvIGxvb2sgYXQgY2FyZWZ1bGx5LiYjMzQ7IEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYHZtYXBfdHJ5X2h1Z2VfcG1kYCBpbiBgbW0vdm1hbGxvYy5jYCBub3cgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4gT2theSwgc28gaHVnZSBwYWdlIHZtYWxsb2MgKmlzKiByZWFjaGFibGUg4oCTIHRoYXQgY29uZmlybXMgaXQuIE5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCwgYW55dGhpbmcgdGhhdCB0aGlzIGRlcGVuZHMgb24uIFBlcmhhcHMgc29tZXRoaW5nIGxpa2UgYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYD8gSSBzaG91bGQgcHJvYmFibHkgZ3JlcCBmb3IgYHZtYXBfdHJ5X2h1Z2VfcG1kYCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIHJlbGV2YW50IGluIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTk1PXN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMTQyLVxubW0vdm1hbGxvYy5jOjE0MzpzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5tbS92bWFsbG9jLmMtMTQ0LVx0XHRcdHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCxcbi0tXG5tbS92bWFsbG9jLmM9MTgwPXN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMTkzLVxubW0vdm1hbGxvYy5jOjE5NDpcdFx0aWYgKHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyLCBwcm90LFxubW0vdm1hbGxvYy5jLTE5NS1cdFx0XHRcdFx0bWF4X3BhZ2Vfc2hpZnQpKSB7XG4tLVxubW0vdm1hbGxvYy5jPTIwNz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTIyOC1cbm1tL3ZtYWxsb2MuYzoyMjk6XHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xubW0vdm1hbGxvYy5jLTIzMC1cdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbi0tXG5tbS92bWFsbG9jLmM9MjY0PXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMjg1LVxubW0vdm1hbGxvYy5jOjI4NjpcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG5tbS92bWFsbG9jLmMtMjg3LVx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSB2bWFsbG9jIHJlZ2lvbiBjb3JyZWN0bHksIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBodWdlIHBhZ2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB3ZSYjMzk7cmUgdXNpbmcgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gbWFjcm8uIExldCYjMzk7cyBzZWUuLi4gaXMgYEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIHRoZSBhcHByb3ByaWF0ZSBmbGFnIHRvIGRldGVybWluZSBpZiB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIGFuZCB1dGlsaXplcyBodWdlIHZtYWxsb2MgcmVnaW9ucz8gSXQmIzM5O3MgY3J1Y2lhbCB0byBnZXQgdGhpcyByaWdodC4gV2UgbmVlZCB0aGlzIHNvIHRoYXQgdGhlIGtlcm5lbCBjYW4gYWxsb2NhdGUgbGFyZ2UgY29udGlndW91cyB2aXJ0dWFsIG1lbW9yeSByZWdpb25zIGZvciBjZXJ0YWluIG9wZXJhdGlvbnMuIElmIGl0JiMzOTtzIG5vdCBzZXQgY29ycmVjdGx5LCB3ZSBtaWdodCBiZSB1c2luZyBzdWJvcHRpbWFsIGFsbG9jYXRpb25zLCBvciB3b3JzZSwgY2F1c2luZyBzdGFiaWxpdHkgaXNzdWVzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IGFyY2hpdGVjdHVyZSBjb2RlIGFuZCBLY29uZmlnIGZpbGVzIHRvIGNvbmZpcm0gdGhpcyBpcyB0aGUgZGVmaW5pdGl2ZSBjaGVjayBhbmQgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGZhY3RvcnMgaW5mbHVlbmNpbmcgdGhlIGJlaGF2aW9yIG9mIHZtYWxsb2MgYW5kIGh1Z2UgcGFnZXMuIExldCYjMzk7cyBzdGFydCBieSB0cmFjaW5nIHRoZSB1c2FnZXMgb2YgdGhpcyBtYWNybyBhbmQgaG93IGl0IGFmZmVjdHMgdGhlIHZtYWxsb2MgaW1wbGVtZW50YXRpb24gaW4gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgY2xhcmlmeSBpZiBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciwgb3IgaWYgdGhlcmUgYXJlIG90aGVyLCBwb3NzaWJseSBwbGF0Zm9ybS1zcGVjaWZpYywgY29uc2lkZXJhdGlvbnMgdG8gYWNjb3VudCBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9BUkNIX0hVR0VfVk1BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTA5Mj1jb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxuLS1cbmFyY2gvS2NvbmZpZy0xMDk5LSNcbmFyY2gvS2NvbmZpZzoxMTAwOmNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5hcmNoL0tjb25maWctMTEwMS1cdGRlcGVuZHMgb24gSEFWRV9BUkNIX0hVR0VfVk1BUFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTMtXHRzZWxlY3QgSEFWRV9BUkNIX0NPTVBJTEVSX0hcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNTQ6XHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xuYXJjaC9hcm02NC9LY29uZmlnLTE1NS1cdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yMTgtXHRzZWxlY3QgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MjE5Olx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcdFx0aWYgSEFWRV9BUkNIX0hVR0VfVk1BUFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjIwLVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcdFx0aWYgUFBDX1JBRElYX01NVSB8fCBQUENfOHh4XG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xMzEtXHRzZWxlY3QgSEFWRV9BUkNIX0JJVFJFVkVSU0UgaWYgUklTQ1ZfSVNBX1pCS0IgXHUwMDI2XHUwMDI2IEJJVFJFVkVSU0VcbmFyY2gvcmlzY3YvS2NvbmZpZzoxMzI6XHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQyBpZiBIQVZFX0FSQ0hfSFVHRV9WTUFQXG5hcmNoL3Jpc2N2L0tjb25maWctMTMzLVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVAgaWYgTU1VIFx1MDAyNlx1MDAyNiA2NEJJVFxuLS1cbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMTkyLVx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcdFx0aWYgWDg2XzY0IHx8IFg4Nl9QQUVcbmFyY2gveDg2L0tjb25maWc6MTkzOlx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcdFx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTE5NC1cdHNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTFxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTE5PXN0cnVjdCBpb3ZfaXRlcjtcdFx0LyogaW4gdWlvLmggKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0zMS0jZGVmaW5lIFZNX01BUF9QVVRfUEFHRVNcdDB4MDAwMDAyMDBcdC8qIHB1dCBwYWdlcyBhbmQgZnJlZSBhcnJheSBpbiB2ZnJlZSAqL1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MzI6I2RlZmluZSBWTV9BTExPV19IVUdFX1ZNQVBcdDB4MDAwMDA0MDAgICAgICAvKiBBbGxvdyBmb3IgaHVnZSBwYWdlcyBvbiBhcmNocyB3aXRoIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgKi9cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTMzLVxuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTUyPXN0cnVjdCB2bV9zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTYxLVx0c3RydWN0IHBhZ2VcdFx0KipwYWdlcztcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjYyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtNjMtXHR1bnNpZ25lZCBpbnRcdFx0cGFnZV9vcmRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0yNTg9c3RhdGljIGlubGluZSBib29sIGlzX3ZtX2FyZWFfaHVnZXBhZ2VzKGNvbnN0IHZvaWQgKmFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtMjY2LVx0ICovXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDoyNjc6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0yNjgtXHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhID0gZmluZF92bV9hcmVhKGFkZHIpO1xuLS1cbm1tL3ZtYWxsb2MuYz02ND1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlvcmVtYXBfbWF4X3BhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUO1xuLS1cbm1tL3ZtYWxsb2MuYy02Ni1cbm1tL3ZtYWxsb2MuYzo2NzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0Ncbm1tL3ZtYWxsb2MuYy02OC1zdGF0aWMgYm9vbCBfX3JvX2FmdGVyX2luaXQgdm1hcF9hbGxvd19odWdlID0gdHJ1ZTtcbi0tXG5tbS92bWFsbG9jLmM9NzU9ZWFybHlfcGFyYW0oXCYjMzQ7bm9odWdldm1hbGxvY1wmIzM0Oywgc2V0X25vaHVnZXZtYWxsb2MpO1xubW0vdm1hbGxvYy5jOjc2OiNlbHNlIC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DICovXG5tbS92bWFsbG9jLmMtNzctc3RhdGljIGNvbnN0IGJvb2wgdm1hcF9hbGxvd19odWdlID0gZmFsc2U7XG5tbS92bWFsbG9jLmM6Nzg6I2VuZGlmXHQvKiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQyAqL1xubW0vdm1hbGxvYy5jLTc5LVxuLS1cbm1tL3ZtYWxsb2MuYz02ODI9aW50IF9fdm1hcF9wYWdlc19yYW5nZV9ub2ZsdXNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTY4OC1cbm1tL3ZtYWxsb2MuYzo2ODk6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpIHx8XG5tbS92bWFsbG9jLmMtNjkwLVx0XHRcdHBhZ2Vfc2hpZnQgPT0gUEFHRV9TSElGVClcbi0tXG5tbS92bWFsbG9jLmM9MzEyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0pXG5tbS92bWFsbG9jLmMtMzEyOS17XG5tbS92bWFsbG9jLmM6MzEzMDojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0Ncbm1tL3ZtYWxsb2MuYy0zMTMxLVx0cmV0dXJuIHZtLVx1MDAzZXBhZ2Vfb3JkZXI7XG4tLVxubW0vdm1hbGxvYy5jPTMxNDI9c3RhdGljIGlubGluZSB2b2lkIHNldF92bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0sIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3ZtYWxsb2MuYy0zMTQzLXtcbm1tL3ZtYWxsb2MuYzozMTQ0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xubW0vdm1hbGxvYy5jLTMxNDUtXHR2bS1cdTAwM2VwYWdlX29yZGVyID0gb3JkZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY1MwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEEgTG9jay1Eb3duIG9uIEh1Z2Ugdm1hbGxvYyBQYWdlIFRhYmxlIFJhY2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY2hhbmdlcyB0byBgbW0vdm1hbGxvYy5jYCwgc3BlY2lmaWNhbGx5IHRob3NlIGFsdGVyYXRpb25zIHRvIGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGFuZCBgdm1hcF90cnlfaHVnZV9wNGRgLiBUaGVzZSBhcmUgY2FsbGVkIGJ5IHRoZSByYW5nZS1iYXNlZCBmdW5jdGlvbnMsIG1lYW5pbmcgdGhleSYjMzk7cmUgY2VudHJhbCB0byBlbmFibGluZyBodWdlIHZtYWxsb2MgbWFwcGluZ3Mg4oCTIHNvLCB3ZSYjMzk7cmUgdGFsa2luZyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIGhlcmUuIEkgc2VlIHRoZXkmIzM5O3JlIGFsc28gdG91Y2hpbmcgYGFyY2gvYXJtNjQvbW0vbW11LmNgIGFuZCBgYXJjaC9hcm02NC9tbS9wdGR1bXAuY2AsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBjbG9zZSBhdHRlbnRpb24sIHNpbmNlIEFSTTY0IGlzIGEga2V5IHRhcmdldC4gU3BlY2lmaWNhbGx5LCBjaGFuZ2VzIHRvIGBwbWRfZnJlZV9wdGVfcGFnZWAsIGBwdWRfZnJlZV9wbWRfcGFnZWAgZXQgY2V0ZXJhLCBoaW50IGF0IG1vZGlmaWNhdGlvbnMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMg4oCTIHN0YW5kYXJkIHRlcnJpdG9yeS4gQWxzbyBgcHRkdW1wX3dhbGtgIGFuZCBgcHRkdW1wX2NoZWNrX3d4YCwgdGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBjb21iaW5hdGlvbiB3aXRoIHRoZSB2bWFsbG9jIGNoYW5nZXMuCgpBaCwgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB0aGUgcGF0Y2ggKnJlbW92ZXMqIGBhcm02NF9wdGR1bXBfbG9ja19rZXlgIGFuZCBhZGRzIGBtbWFwX3JlYWRfbG9ja190cnlgIHdpdGhpbiBgdm1hcF90cnlfaHVnZV9wbWRgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSwgbm90IGp1c3QgYSBjbGVhbnVwLiBJdCYjMzk7cyBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24hIEkmIzM5O20gYmV0dGluZyB0aGF0IHRoZSByYWNlIGlzIGJldHdlZW4gZnJlZWluZyB2bWFsbG9jIGh1Z2UgcGFnZSB0YWJsZXMgYW5kIGBwdGR1bXBgIHdhbGtpbmcgdGhvc2UgdGFibGVzLiBUaGlzIGxvY2tzIGl0IGRvd24uCgpOb3csIHRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyB0aGlzIHBhdGNoIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvY2tpbmcgcHJpbWl0aXZlcyBpbiB2bWFsbG9jIGFuZCBwYWdlIHRhYmxlIHdhbGtpbmcsIHNvIHRoaXMgaXMgY3JpdGljYWwuIEEgZnV6emluZyBjYW1wYWlnbiBoZXJlIGlzIGRlZmluaXRlbHkgYSBnb29kIGlkZWEsIHBhcnRpY3VsYXJseSBnaXZlbiBpdCBpbXBhY3RzIGEgdmFyaWV0eSBvZiBBUk02NCBjb25maWd1cmF0aW9ucy4KCkFzIGZvciBjb25maWd1cmF0aW9ucywgd2VsbCBgQ09ORklHX1BURFVNUF9DT1JFYCBvciBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBhcmUgdGhlIG9idmlvdXMgb25lcyBmb3IgYHB0ZHVtcGAuIFNpbmNlIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AgaXMgYXJjaGl0ZWN0dXJlLXNlbGVjdGVkLCBubyBuZWVkIHRvIHdvcnJ5IHRoZXJlLCBidXQgYENPTkZJR19ERUJVR19XWGAgb3IgYENPTkZJR19QVERVTVBfREVCVUdGU2AgbWF5IGJlIHVzZWZ1bC4gVGltZSB0byBjaGVjayBgQ09ORklHX1BURFVNUGAgaW4gYGFyY2gvYXJtNjQvS2NvbmZpZ2AgZm9yIHJlbGF0ZWQgY29uZmlnIGRlcGVuZGVuY2llcyBvciBhbnkgcmVsZXZhbnQgZGV0YWlscyBJIG1pZ2h0IGhhdmUgbWlzc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BURFVNUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvcHRkdW1wLnJzdD0yMz1jb25maWd1cmF0aW9ucyBhbmQgbW91bnQgZGVidWdmczo6XG5Eb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvcHRkdW1wLnJzdC0yNC1cbkRvY3VtZW50YXRpb24vYXJjaC9hcm02NC9wdGR1bXAucnN0OjI1OiBDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L3B0ZHVtcC5yc3QtMjYtXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zy0yLVxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZzozOmNvbmZpZyBBUk1fUFREVU1QX0NPUkVcbmFyY2gvYXJtL0tjb25maWcuZGVidWctNC1cdGRlZl9ib29sIG5cbmFyY2gvYXJtL0tjb25maWcuZGVidWctNS1cbmFyY2gvYXJtL0tjb25maWcuZGVidWc6Njpjb25maWcgQVJNX1BURFVNUF9ERUJVR0ZTXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTctXHRib29sIFwmIzM0O0V4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcJiMzNDtcbi0tXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTktXHRkZXBlbmRzIG9uIE1NVVxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZzoxMDpcdHNlbGVjdCBBUk1fUFREVU1QX0NPUkVcbmFyY2gvYXJtL0tjb25maWcuZGVidWctMTEtXHRzZWxlY3QgREVCVUdfRlNcbi0tXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnPTIwPWNvbmZpZyBBUk1fREVCVUdfV1hcbi0tXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTIyLVx0ZGVwZW5kcyBvbiBNTVVcbmFyY2gvYXJtL0tjb25maWcuZGVidWc6MjM6XHRzZWxlY3QgQVJNX1BURFVNUF9DT1JFXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTI0LVx0aGVscFxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTItLyogQ29weXJpZ2h0IChDKSAyMDE0IEFSTSBMdGQuICovXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaDozOiNpZm5kZWYgX19BU01fUFREVU1QX0hcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjQ6I2RlZmluZSBfX0FTTV9QVERVTVBfSFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtNS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjY6I2lmZGVmIENPTkZJR19BUk1fUFREVU1QX0NPUkVcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTctXG4tLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MjI9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pO1xuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6MjM6I2lmZGVmIENPTkZJR19BUk1fUFREVU1QX0RFQlVHRlNcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTI0LSNkZWZpbmUgRUZJX1JVTlRJTUVfTUFQX0VORFx0U1pfMUdcbi0tXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaD0yNz1zdGF0aWMgaW5saW5lIHZvaWQgcHRkdW1wX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvLFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjgtXHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm5hbWUpIHsgfVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6Mjk6I2VuZGlmIC8qIENPTkZJR19BUk1fUFREVU1QX0RFQlVHRlMgKi9cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTMwLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MzE9dm9pZCBwdGR1bXBfY2hlY2tfd3godm9pZCk7XG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zMi1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjMzOiNlbmRpZiAvKiBDT05GSUdfQVJNX1BURFVNUF9DT1JFICovXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zNC1cbi0tXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC00MC1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjQxOiNlbmRpZiAvKiBfX0FTTV9QVERVTVBfSCAqL1xuLS1cbmFyY2gvYXJtL21tL01ha2VmaWxlPTE1PWVuZGlmXG5hcmNoL2FybS9tbS9NYWtlZmlsZS0xNi1cbmFyY2gvYXJtL21tL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19BUk1fUFREVU1QX0NPUkUpXHQmIzQzOz0gZHVtcC5vXG5hcmNoL2FybS9tbS9NYWtlZmlsZToxODpvYmotJChDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTKVx0JiM0Mzs9IHB0ZHVtcF9kZWJ1Z2ZzLm9cbmFyY2gvYXJtL21tL01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19NT0RVTEVTKVx0XHQmIzQzOz0gcHJvYy1zeW1zLm9cbi0tXG5hcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcbi0tXG5hcmNoL2FybTY0L0tjb25maWctNDQtXHRzZWxlY3QgQVJDSF9IQVNfUFJFRU1QVF9MQVpZXG5hcmNoL2FybTY0L0tjb25maWc6NDU6XHRzZWxlY3QgQVJDSF9IQVNfUFREVU1QXG5hcmNoL2FybTY0L0tjb25maWctNDYtXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTUzPXN0cnVjdCBrdm1fczJfbW11IHtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjE5LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjIyMDojaWZkZWYgQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGU1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIyMS1cdHN0cnVjdCBkZW50cnkgKnNoYWRvd19wdF9kZWJ1Z2ZzX2RlbnRyeTtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MzA5PXN0cnVjdCBrdm1fYXJjaCB7XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTQyMi1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDo0MjM6I2lmZGVmIENPTkZJR19QVERVTVBfU1RBR0UyX0RFQlVHRlNcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC00MjQtXHQvKiBOZXN0ZWQgdmlydHVhbGl6YXRpb24gaW5mbyAqL1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oPTM4Nz1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX3N1cHBvcnRzX2NhY2hlYWJsZV9wZm5tYXAodm9pZClcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaC0zOTItXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaDozOTM6I2lmZGVmIENPTkZJR19QVERVTVBfU1RBR0UyX0RFQlVHRlNcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oLTM5NC12b2lkIGt2bV9zMl9wdGR1bXBfY3JlYXRlX2RlYnVnZnMoc3RydWN0IGt2bSAqa3ZtKTtcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaD00MDA9c3RhdGljIGlubGluZSB2b2lkIGt2bV9uZXN0ZWRfczJfcHRkdW1wX3JlbW92ZV9kZWJ1Z2ZzKHN0cnVjdCBrdm1fczJfbW11ICptbXUpIHt9XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaDo0MDE6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfU1RBR0UyX0RFQlVHRlMgKi9cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oLTQwMi1cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTQtICovXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjU6I2lmbmRlZiBfX0FTTV9QVERVTVBfSFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo2OiNkZWZpbmUgX19BU01fUFREVU1QX0hcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtNy1cbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTktXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjEwOiNpZmRlZiBDT05GSUdfUFREVU1QXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTExLVxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg9Njg9dm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QpO1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo2OTojaWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTcwLSNkZWZpbmUgRUZJX1JVTlRJTUVfTUFQX0VORFx0REVGQVVMVF9NQVBfV0lORE9XXzY0XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaD03Mz1zdGF0aWMgaW5saW5lIHZvaWQgcHRkdW1wX2RlYnVnZnNfcmVnaXN0ZXIoc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvLFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC03NC1cdFx0XHRcdFx0ICAgY29uc3QgY2hhciAqbmFtZSkgeyB9XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjc1OiNlbmRpZiAvKiBDT05GSUdfUFREVU1QX0RFQlVHRlMgKi9cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtNzYtI2Vsc2Vcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oPTg0PXN0YXRpYyBpbmxpbmUgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QpIHsgfVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo4NTojZW5kaWYgLyogQ09ORklHX1BURFVNUCAqL1xuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC04Ni1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg6ODc6I2VuZGlmIC8qIF9fQVNNX1BURFVNUF9IICovXG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZz00NT1pZiBLVk1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDYtXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBQVERVTVBfU1RBR0UyX0RFQlVHRlNcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ByZXNlbnQgdGhlIHN0YWdlLTIgcGFnZXRhYmxlcyB0byBkZWJ1Z2ZzXCYjMzQ7XG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy01MC1cdGRlcGVuZHMgb24gREVCVUdfRlNcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6NTE6XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzo1MjpcdHNlbGVjdCBQVERVTVBcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNTMtXHRkZWZhdWx0IG5cbi0tXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZT0zMD1rdm0tJChDT05GSUdfQVJNNjRfUFRSX0FVVEgpICAmIzQzOz0gcGF1dGgub1xuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MzE6a3ZtLSQoQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGUykgJiM0Mzs9IHB0ZHVtcC5vXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0zMi1cbi0tXG5hcmNoL2FybTY0L21tL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcdCYjNDM7PSBodWdldGxicGFnZS5vXG5hcmNoL2FybTY0L21tL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1BURFVNUClcdFx0JiM0Mzs9IHB0ZHVtcC5vXG5hcmNoL2FybTY0L21tL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX1BURFVNUF9ERUJVR0ZTKVx0JiM0Mzs9IHB0ZHVtcF9kZWJ1Z2ZzLm9cbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX1RSQU5TX1RBQkxFKVx0JiM0Mzs9IHRyYW5zX3BnZC5vXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNDktXHRzZWxlY3QgQVJDSF9IQVNfUFJFRU1QVF9MQVpZXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxNTA6XHRzZWxlY3QgQVJDSF9IQVNfUFREVU1QXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNTEtXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZz03OT1DT05GSUdfUFBDX0VBUkxZX0RFQlVHPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnOjgwOkNPTkZJR19QVERVTVBfREVCVUdGUz15XG4tLVxuYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlPTE3PW9iai0kKENPTkZJR19QUENfQ09QUk9fQkFTRSlcdCYjNDM7PSBjb3Byb19mYXVsdC5vXG5hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX1BURFVNUClcdFx0JiM0Mzs9IHB0ZHVtcC9cbmFyY2gvcG93ZXJwYy9tbS9NYWtlZmlsZS0xOS1vYmotJChDT05GSUdfS0FTQU4pXHRcdCYjNDM7PSBrYXNhbi9cbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX1BQQ19CT09LM1NfNjQpXHQmIzQzOz0gYm9vazNzNjQub1xuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9NYWtlZmlsZS0xMC1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvTWFrZWZpbGU6MTE6aWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19QUENfQk9PSzNTXzMyKVx0JiM0Mzs9IGJhdHMubyBzZWdtZW50X3JlZ3Mub1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM9NDA2PXN0YXRpYyBpbnQgX19pbml0IHB0ZHVtcF9pbml0KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy00MTktXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjQyMDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19QVERVTVBfREVCVUdGUykpXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTQyMS1cdFx0ZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtrZXJuZWxfcGFnZV90YWJsZXNcJiMzNDssIDA0MDAsIE5VTEwsIE5VTEwsIFx1MDAyNnB0ZHVtcF9mb3BzKTtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnLTQ2LVx0c2VsZWN0IEFSQ0hfSEFTX1BSRVBBUkVfU1lOQ19DT1JFX0NNRFxuYXJjaC9yaXNjdi9LY29uZmlnOjQ3Olx0c2VsZWN0IEFSQ0hfSEFTX1BURFVNUCBpZiBNTVVcbmFyY2gvcmlzY3YvS2NvbmZpZy00OC1cdHNlbGVjdCBBUkNIX0hBU19QVEVfU1BFQ0lBTFxuLS1cbmFyY2gvcmlzY3YvbW0vTWFrZWZpbGU9MjE9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgJiM0Mzs9IGh1Z2V0bGJwYWdlLm9cbmFyY2gvcmlzY3YvbW0vTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX1BURFVNUCkgJiM0Mzs9IHB0ZHVtcC5vXG5hcmNoL3Jpc2N2L21tL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19LQVNBTikgICAmIzQzOz0ga2FzYW5faW5pdC5vXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0xMDMtXHRzZWxlY3QgQVJDSF9IQVNfUFJFRU1QVF9MQVpZXG5hcmNoL3MzOTAvS2NvbmZpZzoxMDQ6XHRzZWxlY3QgQVJDSF9IQVNfUFREVU1QXG5hcmNoL3MzOTAvS2NvbmZpZy0xMDUtXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9ODQyPUNPTkZJR19ERUJVR19XWD15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6ODQzOkNPTkZJR19QVERVTVBfREVCVUdGUz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctODQ0LUNPTkZJR19ERUJVR19PQkpFQ1RTPXlcbi0tXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9ODIxPUNPTkZJR19ERUJVR19XWD15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6ODIyOkNPTkZJR19QVERVTVBfREVCVUdGUz15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctODIzLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15XG4tLVxuYXJjaC9zMzkwL21tL01ha2VmaWxlPTExPW9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpXHQmIzQzOz0gaHVnZXRsYnBhZ2Uub1xuYXJjaC9zMzkwL21tL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19QVERVTVApXHRcdCYjNDM7PSBkdW1wX3BhZ2V0YWJsZXMub1xuYXJjaC9zMzkwL21tL01ha2VmaWxlLTEzLW9iai0kKENPTkZJR19QRkFVTFQpXHRcdCYjNDM7PSBwZmF1bHQub1xuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0xODI9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbi0tXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjI0LVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjIyNTojaWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjI2LXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0yNTU9REVGSU5FX1NIT1dfQVRUUklCVVRFKHB0ZHVtcCk7XG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MjU2OiNlbmRpZiAvKiBDT05GSUdfUFREVU1QX0RFQlVHRlMgKi9cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTctXG4tLVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jPTMxNT1zdGF0aWMgaW50IHB0X2R1bXBfaW5pdCh2b2lkKVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNTUtXHRzb3J0KFx1MDAyNm1hcmtlcnNbMV0sIG1hcmtlcnNfY250IC0gMSwgc2l6ZW9mKCptYXJrZXJzKSwgcHRkdW1wX2NtcCwgTlVMTCk7XG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM6MzU2OiNpZmRlZiBDT05GSUdfUFREVU1QX0RFQlVHRlNcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNTctXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2tlcm5lbF9wYWdlX3RhYmxlc1wmIzM0OywgMDQwMCwgTlVMTCwgTlVMTCwgXHUwMDI2cHRkdW1wX2ZvcHMpO1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM1ODojZW5kaWYgLyogQ09ORklHX1BURFVNUF9ERUJVR0ZTICovXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMzU5LVx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy05OC1cdHNlbGVjdCBBUkNIX0hBU19QUkVFTVBUX0xBWllcbmFyY2gveDg2L0tjb25maWc6OTk6XHRzZWxlY3QgQVJDSF9IQVNfUFREVU1QXG5hcmNoL3g4Ni9LY29uZmlnLTEwMC1cdHNlbGVjdCBBUkNIX0hBU19QVEVfU1BFQ0lBTFxuLS1cbmFyY2gveDg2L0tjb25maWcuZGVidWc9NTk9Y29uZmlnIEVGSV9QR1RfRFVNUFxuLS1cbmFyY2gveDg2L0tjb25maWcuZGVidWctNjEtXHRkZXBlbmRzIG9uIEVGSVxuYXJjaC94ODYvS2NvbmZpZy5kZWJ1Zzo2MjpcdHNlbGVjdCBQVERVTVBcbmFyY2gveDg2L0tjb25maWcuZGVidWctNjMtXHRoZWxwXG4tLVxuYXJjaC94ODYvbW0vTWFrZWZpbGU9MzY9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSlcdCYjNDM7PSBodWdldGxicGFnZS5vXG5hcmNoL3g4Ni9tbS9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfUFREVU1QKVx0XHQmIzQzOz0gZHVtcF9wYWdldGFibGVzLm9cbmFyY2gveDg2L21tL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19QVERVTVBfREVCVUdGUylcdCYjNDM7PSBkZWJ1Z19wYWdldGFibGVzLm9cbmFyY2gveDg2L21tL01ha2VmaWxlLTM5LVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2FybS1ydW50aW1lLmMtMjctXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9hcm0tcnVudGltZS5jOjI4OiNpZiBkZWZpbmVkKENPTkZJR19QVERVTVBfREVCVUdGUykgfHwgZGVmaW5lZChDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTKVxuZHJpdmVycy9maXJtd2FyZS9lZmkvYXJtLXJ1bnRpbWUuYy0yOS0jaW5jbHVkZSBcdTAwM2Nhc20vcHRkdW1wLmhcdTAwM2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTItXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjM6I2lmbmRlZiBfTElOVVhfUFREVU1QX0hcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6NDojZGVmaW5lIF9MSU5VWF9QVERVTVBfSFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC01LVxuLS1cbmluY2x1ZGUvbGludXgvcHRkdW1wLmg9MzQ9c3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2NoZWNrd3godm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTM5LVxuaW5jbHVkZS9saW51eC9wdGR1bXAuaDo0MDojZW5kaWYgLyogX0xJTlVYX1BURFVNUF9IICovXG4tLVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnPTc4PUNPTkZJR19LQVNBTl9WTUFMTE9DPXlcbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZzo3OTpDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnLTgwLUNPTkZJR19TQ0hFRF9TVEFDS19FTkRfQ0hFQ0s9eVxuLS1cbm1tL0tjb25maWcuZGVidWc9MTg2PWNvbmZpZyBERUJVR19XWFxuLS1cbm1tL0tjb25maWcuZGVidWctMTg4LVx0ZGVwZW5kcyBvbiBBUkNIX0hBU19ERUJVR19XWFxubW0vS2NvbmZpZy5kZWJ1ZzoxODk6XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxubW0vS2NvbmZpZy5kZWJ1Zy0xOTAtXHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZy5kZWJ1ZzoxOTE6XHRzZWxlY3QgUFREVU1QXG5tbS9LY29uZmlnLmRlYnVnLTE5Mi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTIxNS1cbm1tL0tjb25maWcuZGVidWc6MjE2OmNvbmZpZyBBUkNIX0hBU19QVERVTVBcbm1tL0tjb25maWcuZGVidWctMjE3LVx0Ym9vbFxubW0vS2NvbmZpZy5kZWJ1Zy0yMTgtXG5tbS9LY29uZmlnLmRlYnVnOjIxOTpjb25maWcgUFREVU1QXG5tbS9LY29uZmlnLmRlYnVnLTIyMC1cdGJvb2xcbm1tL0tjb25maWcuZGVidWctMjIxLVxubW0vS2NvbmZpZy5kZWJ1ZzoyMjI6Y29uZmlnIFBURFVNUF9ERUJVR0ZTXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cdGJvb2wgXCYjMzQ7RXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1wmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWctMjI1LVx0ZGVwZW5kcyBvbiBERUJVR19GU1xubW0vS2NvbmZpZy5kZWJ1ZzoyMjY6XHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjc6XHRzZWxlY3QgUFREVU1QXG5tbS9LY29uZmlnLmRlYnVnLTIyOC1cdGhlbHBcbi0tXG5tbS9NYWtlZmlsZT0xNDE9b2JqLSQoQ09ORklHX01BUFBJTkdfRElSVFlfSEVMUEVSUykgJiM0Mzs9IG1hcHBpbmdfZGlydHlfaGVscGVycy5vXG5tbS9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX1BURFVNUCkgJiM0Mzs9IHB0ZHVtcC5vXG5tbS9NYWtlZmlsZS0xNDMtb2JqLSQoQ09ORklHX1BBR0VfUkVQT1JUSU5HKSAmIzQzOz0gcGFnZV9yZXBvcnRpbmcub1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND0xMTQ9Q09ORklHX1BST1ZFX0xPQ0tJTkc9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0OjExNTpDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0LTExNi1DT05GSUdfUkNfREVWSUNFUz15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweD05NT1DT05GSUdfUFJPVkVfTE9DS0lORz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4Ojk2OkNPTkZJR19QVERVTVBfREVCVUdGUz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTk3LUNPTkZJR19SQ19ERVZJQ0VTPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUFREVU1QIENvbmZpZ3VyYXRpb24gYW5kIFZNQUxMT0MgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjb25uZWN0aW9uIHRvIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIG9idmlvdXMuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZW5hYmxlciBoZXJlLiBCdXQsIGludGVyZXN0aW5nbHksIGBDT05GSUdfREVCVUdfV1hgIGFsc28gdHJpZ2dlcnMgcHRkdW1wIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aG9zZSBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnMgd2l0aGluIGBtbS92bWFsbG9jLmNgIOKAkyBzcGVjaWZpY2FsbHkgYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAuCgpJIGtub3cgdGhlc2UgYXJlIG9ubHkgcmVsZXZhbnQgd2hlbiBgdm1hcF9hbGxvd19odWdlYCBpcyB0cnVlLCB3aGljaCwgaW4gdHVybiwgaXMgZGlyZWN0bHkgdGllZCB0byB3aGV0aGVyIGBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ2AgaXMgZW5hYmxlZC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSWYgd2Ugd2FudCBwdGR1bXAgZm9yIHRoaXMsIHdlJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBgUFREVU1QX0RFQlVHRlNgLiBObyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwgSSYjMzk7bSB0aGlua2luZywgYERFQlVHX1dYYCBpcyBhbm90aGVyIHNvbGlkIG9wdGlvbiB0byBjb25zaWRlciBmb3IgdGhpcyBjb25maWd1cmF0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBkZWVwZXIgYW5kIHBpbnBvaW50IGFueSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBnb29kIGNhbmRpZGF0ZXMgdG8gbW9uaXRvci4gQmV5b25kIHRob3NlIGB2bWFwX3RyeV9odWdlXypgIGZ1bmN0aW9ucywgdGhlIGNvZGUgbWVudGlvbnMgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AsIGBwbWRfZnJlZV9wdGVfcGFnZWAsIGFuZCBgcHVkX2ZyZWVfcG1kX3BhZ2VgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBpbiBvdXIgc2V0dXAuIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHBhdGhzIGhlcmUgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBnZXR0aW5nIHdoYXQgd2UgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q9MzgyPVdlIGFsc28gcGVybWl0IGEgdHJ1bHkgdW51c3VhbCBjYXNlIGlzIHRoZSB0cmF2ZXJzYWwgb2Ygbm9uLVZNQSByYW5nZXMgaW5cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6MzgzOioqdXNlcmxhbmQqKiByYW5nZXMsIGFzIHByb3ZpZGVkIGZvciBieSA6YzpmdW5jOmAhd2Fsa19wYWdlX3JhbmdlX2RlYnVnYC5cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtMzg0LVxuLS1cbm1tL2ludGVybmFsLmg9MTg0MD1pbnQgd2Fsa19wYWdlX3JhbmdlX3ZtYV91bnNhZmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vaW50ZXJuYWwuaC0xODQyLVx0XHR2b2lkICpwcml2YXRlKTtcbm1tL2ludGVybmFsLmg6MTg0MzppbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vaW50ZXJuYWwuaC0xODQ0LVx0XHRcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxuLS1cbm1tL3BhZ2V3YWxrLmM9NjQ4PWludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2V3YWxrLmMtNjY3LS8qKlxubW0vcGFnZXdhbGsuYzo2Njg6ICogd2Fsa19wYWdlX3JhbmdlX2RlYnVnIC0gd2FsayBhIHJhbmdlIG9mIHBhZ2V0YWJsZXMgbm90IGJhY2tlZCBieSBhIHZtYVxubW0vcGFnZXdhbGsuYy02NjktICogQG1tOlx0XHRtbV9zdHJ1Y3QgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgcHJvY2VzcyBvZiBwYWdlIHRhYmxlIHdhbGtcbi0tXG5tbS9wYWdld2Fsay5jLTY4My0gKi9cbm1tL3BhZ2V3YWxrLmM6Njg0OmludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9wYWdld2Fsay5jLTY4NS1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbi0tXG5tbS9wdGR1bXAuYz0xNzU9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKVxuLS1cbm1tL3B0ZHVtcC5jLTE4MS1cdHdoaWxlIChyYW5nZS1cdTAwM2VzdGFydCAhPSByYW5nZS1cdTAwM2VlbmQpIHtcbm1tL3B0ZHVtcC5jOjE4MjpcdFx0d2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLFxubW0vcHRkdW1wLmMtMTgzLVx0XHRcdFx0ICAgICAgXHUwMDI2cHRkdW1wX29wcywgcGdkLCBzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODc4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIGBwdGR1bXBgIGlzIHRoZSBjZW50cmFsIHBpZWNlIGhlcmUsIHdoaWNoIGNhbGxzIGBwdGR1bXBfd2Fsa2AgYW5kIGBwdGR1bXBfY2hlY2tfd3hgLCBhbmQgdGhvc2UgaW4gdHVybiBjYWxsIGBwdGR1bXBfd2Fsa19wZ2RgLiBUaGVuLCBgcHRkdW1wX3dhbGtfcGdkYCBtYWtlcyBhIGNhbGwgdG8gYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuIFNvLCBgcHRkdW1wYCBpcyB0aGUgcHJpbWFyeSBkcml2ZXIsIGNvbmZpcm1lZC4KClRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgdHdlYWtpbmcgYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgY29tZXMgaW50byBwbGF5IGR1cmluZyBgdm1hbGxvY2Agb3BlcmF0aW9ucy4gS25vd2luZyB0aGF0LCBteSBmb2N1cyBzaG91bGQgZGVmaW5pdGVseSBiZSBvbiB0aGUgYHZtYXBfdHJ5X2h1Z2VfKmAgZnVuY3Rpb25zOiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBhbmQgYHZtYXBfdHJ5X2h1Z2VfcDRkYC4gQW5kIG9mIGNvdXJzZSwgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgSSB1bmRlcnN0YW5kIGhvdyB0aGUgbWVtb3J5IGlzIGZyZWVkLCBzbyBgcG1kX2ZyZWVfcHRlX3BhZ2VgIGFuZCBgcHVkX2ZyZWVfcG1kX3BhZ2VgIG5lZWQgdG8gYmUgY2hlY2tlZCBhcyB3ZWxsLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRob3NlIGxhc3QgdHdvOyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBpbXBvcnRhbnQgaW4gdGhlaXIgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDA2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZF9mcmVlX3B0ZV9wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbW0vbW11LmM9MTg1MD1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYy0xODU3LVxuYXJjaC9hcm02NC9tbS9tbXUuYzoxODU4OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC9hcm02NC9tbS9tbXUuYy0xODU5LXtcbi0tXG5hcmNoL2FybTY0L21tL21tdS5jPTE4Nzc9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYy0xODk2LVx0XHRpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKVxuYXJjaC9hcm02NC9tbS9tbXUuYzoxODk3Olx0XHRcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xuYXJjaC9hcm02NC9tbS9tbXUuYy0xODk4LVx0fSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYz0xNjc1PWludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmMtMTY4NC1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmM6MTY4NTppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy0xNjg2LXtcbi0tXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYz0xMTc9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWQpXG4tLVxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMtMTI0LVxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmM6MTI1OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYy0xMjYte1xuLS1cbmFyY2gveDg2L21tL3BndGFibGUuYz03MTg9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzU0LS8qKlxuYXJjaC94ODYvbW0vcGd0YWJsZS5jOjc1NTogKiBwbWRfZnJlZV9wdGVfcGFnZSAtIENsZWFyIFBNRCBlbnRyeSBhbmQgZnJlZSBQVEUgcGFnZS5cbmFyY2gveDg2L21tL3BndGFibGUuYy03NTYtICogQHBtZDogUG9pbnRlciB0byB0aGUgUE1EXG4tLVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc2MS0gKi9cbmFyY2gveDg2L21tL3BndGFibGUuYzo3NjI6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gveDg2L21tL3BndGFibGUuYy03NjMte1xuLS1cbmFyY2gveDg2L21tL3BndGFibGUuYy03ODItICovXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NzgzOmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzg0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0yMTc2PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjE3NzppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIxNzgtI2Vsc2VcdC8qICFDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUCAqL1xuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIyMDQ9c3RhdGljIGlubGluZSBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIyMDctfVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjIwODpzdGF0aWMgaW5saW5lIGludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMjA5LXtcbi0tXG5tbS92bWFsbG9jLmM9MTQzPXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMTczLVx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xubW0vdm1hbGxvYy5jOjE3NDpcdFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxubW0vdm1hbGxvYy5jLTE3NS1cdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1NTAKCQkJCQkJCW91dHB1dDogMjEwCgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYGFyY2gvYXJtNjQvbW0vbW11LmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYHBtZF9mcmVlX3B0ZV9wYWdlYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZTogdGhleSYjMzk7cmUgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgYF9fcG1kX2ZyZWVfcHRlX3BhZ2VgIGFuZCBqdXN0IHJlbmFtaW5nIGl0LiBUaGUgb3RoZXIgc2lnbmlmaWNhbnQgcmVtb3ZhbCBpcyB0aGUgYHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDthcm02NF9wdGR1bXBfbG9ja19rZXkpYCBzdHVmZi4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGNvcmUga2VybmVsIGNvZGUsIGFyY2hpdGVjdHVyZSBzcGVjaWZpYywgYW5kIGl0ICppcyogcmVhY2hhYmxlIOKAkyB0aGF0JiMzOTtzIGEga2V5IGRldGFpbCBmb3IgbXkgYXNzZXNzbWVudC4KCkkgc2hvdWxkIHZlcmlmeSBhbnkgY29uZmlnIGRlcGVuZGVuY2llcy4gTG9va3MgbGlrZSBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBpcyB0aGUgcHJpbWFyeSBvbmUsIGFuZCBgQ09ORklHX0RFQlVHX1dYYCBpcyBhbm90aGVyLCB0aG91Z2ggYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBpcyBhcmNoaXRlY3R1cmUtc2VsZWN0ZWQuIFNvIEkganVzdCBuZWVkIHRvIHNwZWNpZnkgdGhlIGZvcm1lci4gTm8gbmVlZCB0byBzcGVjaWZ5IHRoZSBsYXR0ZXIuCgpOb3csIHB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyIGZvciBmdXp6aW5nLCBJJiMzOTttIHRoaW5raW5nOgoKKiAgICoqV29ydGhGdXp6aW5nKio6IEFic29sdXRlbHkuIFRoaXMgaGl0cyB0aGUgc3dlZXQgc3BvdCBmb3IgZnV6emluZyBjb25zaWRlcmF0aW9uLgoqICAgKipGb2N1c1N5bWJvbHMqKjogIEkmIzM5O2xsIHdhbnQgdG8gdGFyZ2V0IHRoZXNlIGZ1bmN0aW9ucywgYmVjYXVzZSB0aGV5JiMzOTtyZSByZWxhdGVkIHRvIGh1Z2Ugdm1hbGxvYyBtYXBwaW5ncyBhbmQgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb246CiAgICAqICAgYHZtYXBfdHJ5X2h1Z2VfcG1kYAogICAgKiAgIGB2bWFwX3RyeV9odWdlX3B1ZGAKICAgICogICBgdm1hcF90cnlfaHVnZV9wNGRgCiAgICAqICAgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AKICAgICogICBgcG1kX2ZyZWVfcHRlX3BhZ2VgCiAgICAqICAgYHB1ZF9mcmVlX3BtZF9wYWdlYAoqICAgKipFbmFibGVDb25maWdzKio6CiAgICAqICAgYFBURFVNUF9ERUJVR0ZTYAogICAgKiAgIGBERUJVR19XWGAKCk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIHRoZSBsb2NraW5nIGxvZ2ljIGZvciBmcmVlaW5nIHBhZ2UgdGFibGVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGh1Z2Ugdm1hbGxvYyBtYXBwaW5ncy4gVGhleSYjMzk7cmUgcmVwbGFjaW5nIGEgc3BlY2lmaWMgc3RhdGljIGtleSBmb3IgYXJtNjQgd2l0aCBhIG1vcmUgZ2VuZXJpYyBsb2NrLiBJIGFsc28gc2F3IHRoZSBhZGRpdGlvbiBvZiBtbWFwIHdyaXRlIGxvY2sgYXNzZXJ0aW9ucyBpbiBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYC4gVGhpcyBzb3J0IG9mIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUgY29kZSwgZGVhbGluZyB3aXRoIGNvbmN1cnJlbmN5ICh2bWFsbG9jIGFuZCBwdGR1bXAgc3BlY2lmaWNhbGx5KSBkZW1hbmRzIHJpZ29yb3VzIGZ1enppbmcuIEkgbmVlZCB0byBleHBvc2UgcG90ZW50aWFsIGRlYWRsb2NrcyBvciwgZXZlbiB3b3JzZSwgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdGhlIGNoYW5nZXMgaW4gbG9jayBoYW5kbGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHJvYnVzdCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgdm1hbGxvYyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFREVU1QX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7REVCVUdfV1gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFwX3RyeV9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDt2bWFwX3RyeV9odWdlX3B1ZCYjMzQ7LAogICAgJiMzNDt2bWFwX3RyeV9odWdlX3A0ZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OywKICAgICYjMzQ7cG1kX2ZyZWVfcHRlX3BhZ2UmIzM0OywKICAgICYjMzQ7cHVkX2ZyZWVfcG1kX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgbG9naWMgZm9yIGZyZWVpbmcgcGFnZSB0YWJsZXMgZHVyaW5nIGh1Z2Ugdm1hbGxvYyBtYXBwaW5ncywgcmVwbGFjaW5nIGFuIGFybTY0LXNwZWNpZmljIHN0YXRpYyBrZXkgd2l0aCBhIGdlbmVyaWMgbW1hcF9yZWFkX2xvY2tfdHJ5IGluIGNvcmUgdm1hbGxvYyBjb2RlLiBJdCBhbHNvIGFkZHMgYW4gbW1hcCB3cml0ZSBsb2NrIGFzc2VydGlvbiBpbiB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBhbmQgYXJjaGl0ZWN0dXJlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyBjb25jdXJyZW50IHZtYWxsb2MgYW5kIHB0ZHVtcCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7LAogICAgJiMzNDtERUJVR19XWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O3dhbGtfcGFnZV9yYW5nZV9kZWJ1ZyYjMzQ7LAogICAgJiMzNDtwbWRfZnJlZV9wdGVfcGFnZSYjMzQ7LAogICAgJiMzNDtwdWRfZnJlZV9wbWRfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBsb2dpYyBmb3IgZnJlZWluZyBwYWdlIHRhYmxlcyBkdXJpbmcgaHVnZSB2bWFsbG9jIG1hcHBpbmdzLCByZXBsYWNpbmcgYW4gYXJtNjQtc3BlY2lmaWMgc3RhdGljIGtleSB3aXRoIGEgZ2VuZXJpYyBtbWFwX3JlYWRfbG9ja190cnkgaW4gY29yZSB2bWFsbG9jIGNvZGUuIEl0IGFsc28gYWRkcyBhbiBtbWFwIHdyaXRlIGxvY2sgYXNzZXJ0aW9uIGluIHdhbGtfcGFnZV9yYW5nZV9kZWJ1Zy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIgZHVyaW5nIGNvbmN1cnJlbnQgdm1hbGxvYyBhbmQgcHRkdW1wIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNjozNzo0MS4xNDQ4NTQxMzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM4NDE4MjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQVERVTVBfREVCVUdGU1wiLFxuICAgIFwiREVCVUdfV1hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwX3RyeV9odWdlX3BtZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wdWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcDRkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIixcbiAgICBcInBtZF9mcmVlX3B0ZV9wYWdlXCIsXG4gICAgXCJwdWRfZnJlZV9wbWRfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIGxvZ2ljIGZvciBmcmVlaW5nIHBhZ2UgdGFibGVzIGR1cmluZyBodWdlIHZtYWxsb2MgbWFwcGluZ3MsIHJlcGxhY2luZyBhbiBhcm02NC1zcGVjaWZpYyBzdGF0aWMga2V5IHdpdGggYSBnZW5lcmljIG1tYXBfcmVhZF9sb2NrX3RyeSBpbiBjb3JlIHZtYWxsb2MgY29kZS4gSXQgYWxzbyBhZGRzIGFuIG1tYXAgd3JpdGUgbG9jayBhc3NlcnRpb24gaW4gd2Fsa19wYWdlX3JhbmdlX2RlYnVnLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgY29uY3VycmVudCB2bWFsbG9jIGFuZCBwdGR1bXAgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDY6Mzc6NDEuMTQ0ODU5ODMxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU3OTU4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OWVlZDE4NTFmZWZmNzcyNjU1YjFhZDRjOGQ0MTlmOTM5ZTAwZmY4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDExIDA2OjM3OjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXFxuaW5kZXggNWIzNzRhNmFiMzRhNGUuLjUwYTE5NWVkYThlZDIyIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXFxuQEAgLTcsOCArNyw2IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRkdW1wLmhcXHUwMDNlXFxuIFxcbi1ERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcXG4tXFxuICNpZmRlZiBDT05GSUdfUFREVU1QXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1fdHlwZXMuaFxcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcXG5pbmRleCBmMmJlNTAxNDY4Y2U1YS4uZjcyM2JjZjY4MTc0ZmIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9tbS9tbXUuY1xcbisrKyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcXG5AQCAtNDksOCArNDksNiBAQFxcbiAjZGVmaW5lIE5PX0NPTlRfTUFQUElOR1NcXHRCSVQoMSlcXG4gI2RlZmluZSBOT19FWEVDX01BUFBJTkdTXFx0QklUKDIpXFx0LyogYXNzdW1lcyBGRUFUX0hQRFMgaXMgbm90IHVzZWQgKi9cXG4gXFxuLURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XFxuLVxcbiB1NjQga2ltYWdlX3ZvZmZzZXQgX19yb19hZnRlcl9pbml0O1xcbiBFWFBPUlRfU1lNQk9MKGtpbWFnZV92b2Zmc2V0KTtcXG4gXFxuQEAgLTE4NTcsOCArMTg1NSw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcClcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgX19wbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi1cXHRcXHRcXHQgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaylcXG4raW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIHtcXG4gXFx0cHRlX3QgKnRhYmxlO1xcbiBcXHRwbWRfdCBwbWQ7XFxuQEAgLTE4NzAsMjUgKzE4NjcsMTMgQEAgc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBTZWUgY29tbWVudCBpbiBwdWRfZnJlZV9wbWRfcGFnZSBmb3Igc3RhdGljIGtleSBsb2dpYyAqL1xcbiBcXHR0YWJsZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIpO1xcbiBcXHRwbWRfY2xlYXIocG1kcCk7XFxuIFxcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xcbi1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSBcXHUwMDI2XFx1MDAyNiBhY3F1aXJlX21tYXBfbG9jaykge1xcbi1cXHRcXHRtbWFwX3JlYWRfbG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2soXFx1MDAyNmluaXRfbW0pO1xcbi1cXHR9XFxuLVxcbiBcXHRwdGVfZnJlZV9rZXJuZWwoTlVMTCwgdGFibGUpO1xcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4taW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLXtcXG4tXFx0LyogSWYgcHRkdW1wIGlzIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMsIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2sgKi9cXG4tXFx0cmV0dXJuIF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgYWRkciwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyB0cnVlKTtcXG4tfVxcbi1cXG4gaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIHtcXG4gXFx0cG1kX3QgKnRhYmxlO1xcbkBAIC0xOTA0LDM2ICsxODg5LDE2IEBAIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiBcXHR9XFxuIFxcbiBcXHR0YWJsZSA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXNcXG4tXFx0ICogYmVlbiBmcmVlZC4gSW4gdGhpcyByYWNlLCBpZiBwdWRfZnJlZV9wbWRfcGFnZSBvYnNlcnZlcyB0aGUga2V5IG9uXFxuLVxcdCAqICh3aGljaCBnb3QgZmxpcHBlZCBieSBwdGR1bXApIHRoZW4gdGhlIG1tYXAgbG9jayBzZXF1ZW5jZSBoZXJlIHdpbGwsXFxuLVxcdCAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZVxcbi1cXHQgKiB1cyB0aGUgY29ycmVjdCBzeW5jaHJvbml6YXRpb24uIElmIG5vdCwgdGhpcyBtZWFucyB0aGF0IHB0ZHVtcCBoYXNcXG4tXFx0ICogeWV0IG5vdCBzdGFydGVkIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMgLSB0aGUgc2VxdWVuY2Ugb2YgYmFycmllcnNcXG4tXFx0ICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsXFxuLVxcdCAqIG9ic2VydmUgYW4gZW1wdHkgUFVELlxcbi1cXHQgKi9cXG4tXFx0cHVkX2NsZWFyKHB1ZHApO1xcbi1cXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTtcXG4tXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSkpIHtcXG4tXFx0XFx0bW1hcF9yZWFkX2xvY2soXFx1MDAyNmluaXRfbW0pO1xcbi1cXHRcXHRtbWFwX3JlYWRfdW5sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4tXFx0fVxcbi1cXG4gXFx0cG1kcCA9IHRhYmxlO1xcbiBcXHRuZXh0ID0gYWRkcjtcXG4gXFx0ZW5kID0gYWRkciArIFBVRF9TSVpFO1xcbiBcXHRkbyB7XFxuIFxcdFxcdGlmIChwbWRfcHJlc2VudChwbWRwX2dldChwbWRwKSkpXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbid0IHNlZSBpdC4gTm9cXG4tXFx0XFx0XFx0ICogbmVlZCB0byBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0X19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0LCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIGZhbHNlKTtcXG4rXFx0XFx0XFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XFxuIFxcdH0gd2hpbGUgKHBtZHArKywgbmV4dCArPSBQTURfU0laRSwgbmV4dCAhPSBlbmQpO1xcbiBcXG4rXFx0cHVkX2NsZWFyKHB1ZHApO1xcbitcXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTtcXG4gXFx0cG1kX2ZyZWUoTlVMTCwgdGFibGUpO1xcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xcbmluZGV4IDFjMjAxNDQ3MDBkN2Q3Li41YTc2YzU5YjVhZGE1NSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXFxuKysrIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xcbkBAIC0yODMsMTMgKzI4Myw2IEBAIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxcbiBcXHRub3RlX3BhZ2UocHRfc3QsIDAsIC0xLCBwdGVfdmFsKHB0ZV96ZXJvKSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGFybTY0X3B0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLXtcXG4tXFx0c3RhdGljX2JyYW5jaF9pbmMoXFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XFxuLVxcdHB0ZHVtcF93YWxrX3BnZChzdCwgbW0sIE5VTEwpO1xcbi1cXHRzdGF0aWNfYnJhbmNoX2RlYyhcXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcXG4tfVxcbi1cXG4gdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGVuZCA9IH4wVUw7XFxuQEAgLTMxOCw3ICszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxcbiBcXHRcXHR9XFxuIFxcdH07XFxuIFxcbi1cXHRhcm02NF9wdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cXHUwMDNlbW0pO1xcbitcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cXHUwMDNlbW0sIE5VTEwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2luaXQgcHRkdW1wX2luaXRpYWxpemUodm9pZClcXG5AQCAtMzYwLDcgKzM1Myw3IEBAIGJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuIFxcdFxcdH1cXG4gXFx0fTtcXG4gXFxuLVxcdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBcXHUwMDI2aW5pdF9tbSk7XFxuK1xcdHB0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBcXHUwMDI2aW5pdF9tbSwgTlVMTCk7XFxuIFxcbiBcXHRpZiAoc3Qud3hfcGFnZXMgfHwgc3QudXhuX3BhZ2VzKSB7XFxuIFxcdFxcdHByX3dhcm4oXFxcIkNoZWNrZWQgVytYIG1hcHBpbmdzOiBGQUlMRUQsICVsdSBXK1ggcGFnZXMgZm91bmQsICVsdSBub24tVVhOIHBhZ2VzIGZvdW5kXFxcXG5cXFwiLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbmluZGV4IDA0YjhmNjFlY2U1ZDhlLi42YjVjMjM5MGNjMzAxZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxcbkBAIC02MjEsNiArNjIxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIFxcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcXG4gXFx0ICAgICBtbWFwX3JlYWRfbG9jayhfVCksIG1tYXBfcmVhZF91bmxvY2soX1QpKVxcbitERUZJTkVfR1VBUkRfQ09ORChtbWFwX3JlYWRfbG9jaywgX3RyeSwgbW1hcF9yZWFkX3RyeWxvY2soX1QpKVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXFxuaW5kZXggM2FlMjU4NmZmNDViNDQuLmJiY2ZkNjhkMDkwN2RmIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2V3YWxrLmNcXG4rKysgYi9tbS9wYWdld2Fsay5jXFxuQEAgLTY3OCw2ICs2NzgsOCBAQCBpbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZFxcbiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay5cXG4gICpcXG4gICogVGhpcyBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIE9OTFkuXFxuKyAqXFxuKyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLlxcbiAgKi9cXG4gaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuQEAgLTY5MSw2ICs2OTMsMTYgQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0Lm5vX3ZtYVxcdFxcdD0gdHJ1ZVxcbiBcXHR9O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXFxuK1xcdCAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZ1xcbitcXHQgKiBkb3duIHBhZ2UgdGFibGVzLlxcbitcXHQgKlxcbitcXHQgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGRcXG4rXFx0ICogdG8gYWNjb3VudCBmb3IgcGFnZSB0YWJsZSBmcmVlaW5nIG9uIHZtYXAgaHVnZSBwYWdlIG1hcHBpbmcuXFxuK1xcdCAqL1xcbitcXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xcbitcXG4gXFx0LyogRm9yIGNvbnZlbmllbmNlLCB3ZSBhbGxvdyB0cmF2ZXJzYWwgb2Yga2VybmVsIG1hcHBpbmdzLiAqL1xcbiBcXHRpZiAobW0gPT0gXFx1MDAyNmluaXRfbW0pXFxuIFxcdFxcdHJldHVybiB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlKHN0YXJ0LCBlbmQsIG9wcyxcXG5AQCAtNzAwLDE2ICs3MTIsNiBAQCBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXFxuLVxcdCAqIHRhYmxlcyBkdXJpbmcgdGhlIHdhbGsuICBIb3dldmVyIGEgcmVhZCBsb2NrIGlzIGluc3VmZmljaWVudCB0b1xcbi1cXHQgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbid0IGhhdmUgYSBWTUEgYXMgbXVubWFwKCkgZGV0YWNoZXNcXG4tXFx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXFxuLVxcdCAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGRcXG4tXFx0ICogYmUgaGVsZC5cXG4tXFx0ICovXFxuLVxcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSk7XFxuLVxcbiBcXHRyZXR1cm4gd2Fsa19wZ2RfcmFuZ2Uoc3RhcnQsIGVuZCwgXFx1MDAyNndhbGspO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uNTM3ZmY3YjNjNDEyNzAgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hbGxvYy5jXFxuKysrIGIvbW0vdm1hbGxvYy5jXFxuQEAgLTQzLDYgKzQzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS90bGJmbHVzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3NobXBhcmFtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy92bWFsbG9jLmhcXHUwMDNlXFxuQEAgLTE1OCwxMCArMTU5LDIyIEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcXHUwMDI2XFx1MDAyNiAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXFxuK1xcdFxcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qXFxuK1xcdCAqIEtlcm5lbCBwYWdlIHRhYmxlIHdhbGtlcnMgZWl0aGVyIHdhbGsgcmFuZ2VzIHRoZXkgb3duIGV4Y2x1c2l2ZWx5XFxuK1xcdCAqIHVzaW5nIHRoZSBtbWFwIGxvY2sgZm9yIG11dHVhbCBleGNsdXNpb24sIG9yIGhvbGQgdGhlIG1tYXAgd3JpdGUgbG9ja1xcbitcXHQgKiBvbiBpbml0X21tIChwdGR1bXAgYmVpbmcgdGhlIG1vdGl2YXRpbmcgY2FzZSkuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZXJlZm9yZSwgYWNxdWlyZSB0aGUgbW1hcCByZWFkIGxvY2sgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSB3aGVuXFxuK1xcdCAqIGZyZWVpbmcgcGFnZSB0YWJsZXMuXFxuK1xcdCAqL1xcbitcXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbitcXHRcXHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuQEAgLTIxMCwxMCArMjIzLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUFVEX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwdWRfcHJlc2VudCgqcHVkKSBcXHUwMDI2XFx1MDAyNiAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXFxuK1xcdFxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXFxuK1xcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuK1xcdFxcdGlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5AQCAtMjYyLDEwICsyODAsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQNERfU0laRSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKHA0ZF9wcmVzZW50KCpwNGQpIFxcdTAwMjZcXHUwMDI2ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcXG4rXFx0XFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuIFxcbi1cXHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG4rXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG4rXFx0XFx0aWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNjozNzo0MS42NjEzNTA4MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4Njc2NzY1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIkRFQlVHX1dYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hcF90cnlfaHVnZV9wbWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcHVkXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3A0ZFwiLFxuICAgIFwid2Fsa19wYWdlX3JhbmdlX2RlYnVnXCIsXG4gICAgXCJwbWRfZnJlZV9wdGVfcGFnZVwiLFxuICAgIFwicHVkX2ZyZWVfcG1kX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBsb2dpYyBmb3IgZnJlZWluZyBwYWdlIHRhYmxlcyBkdXJpbmcgaHVnZSB2bWFsbG9jIG1hcHBpbmdzLCByZXBsYWNpbmcgYW4gYXJtNjQtc3BlY2lmaWMgc3RhdGljIGtleSB3aXRoIGEgZ2VuZXJpYyBtbWFwX3JlYWRfbG9ja190cnkgaW4gY29yZSB2bWFsbG9jIGNvZGUuIEl0IGFsc28gYWRkcyBhbiBtbWFwIHdyaXRlIGxvY2sgYXNzZXJ0aW9uIGluIHdhbGtfcGFnZV9yYW5nZV9kZWJ1Zy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIgZHVyaW5nIGNvbmN1cnJlbnQgdm1hbGxvYyBhbmQgcHRkdW1wIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzllZWQxODUxZmVmZjc3MjY1NWIxYWQ0YzhkNDE5ZjkzOWUwMGZmOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDA2OjM3OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcbmluZGV4IDViMzc0YTZhYjM0YTRlLi41MGExOTVlZGE4ZWQyMiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcbkBAIC03LDggKzcsNiBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0ZHVtcC5oXHUwMDNlXG4gXG4tREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tXG4gI2lmZGVmIENPTkZJR19QVERVTVBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV90eXBlcy5oXHUwMDNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbmluZGV4IGYyYmU1MDE0NjhjZTVhLi5mNzIzYmNmNjgxNzRmYiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vbW11LmNcbisrKyBiL2FyY2gvYXJtNjQvbW0vbW11LmNcbkBAIC00OSw4ICs0OSw2IEBAXG4gI2RlZmluZSBOT19DT05UX01BUFBJTkdTXHRCSVQoMSlcbiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1NcdEJJVCgyKVx0LyogYXNzdW1lcyBGRUFUX0hQRFMgaXMgbm90IHVzZWQgKi9cbiBcbi1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVxuIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7XG4gRVhQT1JUX1NZTUJPTChraW1hZ2Vfdm9mZnNldCk7XG4gXG5AQCAtMTg1Nyw4ICsxODU1LDcgQEAgaW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19wbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHRcdCAgICAgICBib29sIGFjcXVpcmVfbW1hcF9sb2NrKVxuK2ludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHB0ZV90ICp0YWJsZTtcbiBcdHBtZF90IHBtZDtcbkBAIC0xODcwLDI1ICsxODY3LDEzIEBAIHN0YXRpYyBpbnQgX19wbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcbi1cdC8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovXG4gXHR0YWJsZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIpO1xuIFx0cG1kX2NsZWFyKHBtZHApO1xuIFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4tXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpIFx1MDAyNlx1MDAyNiBhY3F1aXJlX21tYXBfbG9jaykge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbi1cdH1cbi1cbiBcdHB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7XG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4taW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4te1xuLVx0LyogSWYgcHRkdW1wIGlzIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMsIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2sgKi9cbi1cdHJldHVybiBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIGFkZHIsIC8qIGFjcXVpcmVfbW1hcF9sb2NrID0gKi8gdHJ1ZSk7XG4tfVxuLVxuIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHBtZF90ICp0YWJsZTtcbkBAIC0xOTA0LDM2ICsxODg5LDE2IEBAIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIFx0fVxuIFxuIFx0dGFibGUgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuLVxuLVx0Lypcbi1cdCAqIE91ciBvYmplY3RpdmUgaXMgdG8gcHJldmVudCBwdGR1bXAgZnJvbSByZWFkaW5nIGEgUE1EIHRhYmxlIHdoaWNoIGhhc1xuLVx0ICogYmVlbiBmcmVlZC4gSW4gdGhpcyByYWNlLCBpZiBwdWRfZnJlZV9wbWRfcGFnZSBvYnNlcnZlcyB0aGUga2V5IG9uXG4tXHQgKiAod2hpY2ggZ290IGZsaXBwZWQgYnkgcHRkdW1wKSB0aGVuIHRoZSBtbWFwIGxvY2sgc2VxdWVuY2UgaGVyZSB3aWxsLFxuLVx0ICogYXMgYSByZXN1bHQgb2YgdGhlIG1tYXAgd3JpdGUgbG9jay91bmxvY2sgc2VxdWVuY2UgaW4gcHRkdW1wLCBnaXZlXG4tXHQgKiB1cyB0aGUgY29ycmVjdCBzeW5jaHJvbml6YXRpb24uIElmIG5vdCwgdGhpcyBtZWFucyB0aGF0IHB0ZHVtcCBoYXNcbi1cdCAqIHlldCBub3Qgc3RhcnRlZCB3YWxraW5nIHRoZSBwYWdldGFibGVzIC0gdGhlIHNlcXVlbmNlIG9mIGJhcnJpZXJzXG4tXHQgKiBpc3N1ZWQgYnkgX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoKSBndWFyYW50ZWVzIHRoYXQgcHRkdW1wIHdpbGxcbi1cdCAqIG9ic2VydmUgYW4gZW1wdHkgUFVELlxuLVx0ICovXG4tXHRwdWRfY2xlYXIocHVkcCk7XG4tXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTtcbi1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSkpIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHRcdG1tYXBfcmVhZF91bmxvY2soXHUwMDI2aW5pdF9tbSk7XG4tXHR9XG4tXG4gXHRwbWRwID0gdGFibGU7XG4gXHRuZXh0ID0gYWRkcjtcbiBcdGVuZCA9IGFkZHIgKyBQVURfU0laRTtcbiBcdGRvIHtcbiBcdFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbid0IHNlZSBpdC4gTm9cbi1cdFx0XHQgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suXG4tXHRcdFx0ICovXG4tXHRcdFx0X19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0LCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIGZhbHNlKTtcbitcdFx0XHRwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTtcbiBcdH0gd2hpbGUgKHBtZHArKywgbmV4dCArPSBQTURfU0laRSwgbmV4dCAhPSBlbmQpO1xuIFxuK1x0cHVkX2NsZWFyKHB1ZHApO1xuK1x0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4gXHRwbWRfZnJlZShOVUxMLCB0YWJsZSk7XG4gXHRyZXR1cm4gMTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9wdGR1bXAuYyBiL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcbmluZGV4IDFjMjAxNDQ3MDBkN2Q3Li41YTc2YzU5YjVhZGE1NSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcbisrKyBiL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcbkBAIC0yODMsMTMgKzI4Myw2IEBAIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxuIFx0bm90ZV9wYWdlKHB0X3N0LCAwLCAtMSwgcHRlX3ZhbChwdGVfemVybykpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhcm02NF9wdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLXtcbi1cdHN0YXRpY19icmFuY2hfaW5jKFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tXHRwdGR1bXBfd2Fsa19wZ2Qoc3QsIG1tLCBOVUxMKTtcbi1cdHN0YXRpY19icmFuY2hfZGVjKFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tfVxuLVxuIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBlbmQgPSB+MFVMO1xuQEAgLTMxOCw3ICszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cdTAwM2VtbSk7XG4rXHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBpbmZvLVx1MDAzZW1tLCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IHB0ZHVtcF9pbml0aWFsaXplKHZvaWQpXG5AQCAtMzYwLDcgKzM1Myw3IEBAIGJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXG4gXHRcdH1cbiBcdH07XG4gXG4tXHRhcm02NF9wdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tKTtcbitcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuIFxuIFx0aWYgKHN0Lnd4X3BhZ2VzIHx8IHN0LnV4bl9wYWdlcykge1xuIFx0XHRwcl93YXJuKFwiQ2hlY2tlZCBXK1ggbWFwcGluZ3M6IEZBSUxFRCwgJWx1IFcrWCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcXG5cIixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuaW5kZXggMDRiOGY2MWVjZTVkOGUuLjZiNWMyMzkwY2MzMDFmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuQEAgLTYyMSw2ICs2MjEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiBcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcbitERUZJTkVfR1VBUkRfQ09ORChtbWFwX3JlYWRfbG9jaywgX3RyeSwgbW1hcF9yZWFkX3RyeWxvY2soX1QpKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcbmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li5iYmNmZDY4ZDA5MDdkZiAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbisrKyBiL21tL3BhZ2V3YWxrLmNcbkBAIC02NzgsNiArNjc4LDggQEAgaW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmRcbiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay5cbiAgKlxuICAqIFRoaXMgaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBPTkxZLlxuKyAqXG4rICogVGhlIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuXG4gICovXG4gaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbkBAIC02OTEsNiArNjkzLDE2IEBAIGludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdC5ub192bWFcdFx0PSB0cnVlXG4gXHR9O1xuIFxuK1x0LypcbitcdCAqIFdoZW4gd2Fsa2luZyB1c2VybGFuZCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZCB0b1xuK1x0ICogYWNjb3VudCBmb3IgbXVubWFwKCkgZG93bmdyYWRpbmcgdG8gYW4gbW1hcCByZWFkIGxvY2sgd2hlbiB0ZWFyaW5nXG4rXHQgKiBkb3duIHBhZ2UgdGFibGVzLlxuK1x0ICpcbitcdCAqIFdoZW4gd2Fsa2luZyBrZXJuZWwgcGFnZSB0YWJsZXMsIGFuIG1tYXAgd3JpdGUgbG9jayBtdXN0IGFsc28gYmUgaGVsZFxuK1x0ICogdG8gYWNjb3VudCBmb3IgcGFnZSB0YWJsZSBmcmVlaW5nIG9uIHZtYXAgaHVnZSBwYWdlIG1hcHBpbmcuXG4rXHQgKi9cbitcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSk7XG4rXG4gXHQvKiBGb3IgY29udmVuaWVuY2UsIHdlIGFsbG93IHRyYXZlcnNhbCBvZiBrZXJuZWwgbWFwcGluZ3MuICovXG4gXHRpZiAobW0gPT0gXHUwMDI2aW5pdF9tbSlcbiBcdFx0cmV0dXJuIHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2Uoc3RhcnQsIGVuZCwgb3BzLFxuQEAgLTcwMCwxNiArNzEyLDYgQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHQvKlxuLVx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXG4tXHQgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG9cbi1cdCAqIHByb3RlY3QgdGhvc2UgYXJlYXMgd2hpY2ggZG9uJ3QgaGF2ZSBhIFZNQSBhcyBtdW5tYXAoKSBkZXRhY2hlc1xuLVx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXG4tXHQgKiBkb3duIFBURXMvcGFnZSB0YWJsZXMuIEluIHdoaWNoIGNhc2UsIHRoZSBtbWFwIHdyaXRlIGxvY2sgc2hvdWxkXG4tXHQgKiBiZSBoZWxkLlxuLVx0ICovXG4tXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuLVxuIFx0cmV0dXJuIHdhbGtfcGdkX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcbmluZGV4IDFhZmNhMzU2OGI5YjY1Li41MzdmZjdiM2M0MTI3MCAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuKysrIGIvbW0vdm1hbGxvYy5jXG5AQCAtNDMsNiArNDMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGJmbHVzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NobXBhcmFtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMTU4LDEwICsxNTksMjIgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcdTAwMjZcdTAwMjYgIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCFwbWRfcHJlc2VudCgqcG1kKSlcbitcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdC8qXG4rXHQgKiBLZXJuZWwgcGFnZSB0YWJsZSB3YWxrZXJzIGVpdGhlciB3YWxrIHJhbmdlcyB0aGV5IG93biBleGNsdXNpdmVseVxuK1x0ICogdXNpbmcgdGhlIG1tYXAgbG9jayBmb3IgbXV0dWFsIGV4Y2x1c2lvbiwgb3IgaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrXG4rXHQgKiBvbiBpbml0X21tIChwdGR1bXAgYmVpbmcgdGhlIG1vdGl2YXRpbmcgY2FzZSkuXG4rXHQgKlxuK1x0ICogVGhlcmVmb3JlLCBhY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIHdoZW5cbitcdCAqIGZyZWVpbmcgcGFnZSB0YWJsZXMuXG4rXHQgKi9cbitcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbitcdFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTIxMCwxMCArMjIzLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocHVkX3ByZXNlbnQoKnB1ZCkgXHUwMDI2XHUwMDI2ICFwdWRfZnJlZV9wbWRfcGFnZShwdWQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbitcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXG4rXHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuIFxuLVx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xuK1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuK1x0XHRpZiAoIXB1ZF9mcmVlX3BtZF9wYWdlKHB1ZCwgYWRkcikpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMjYyLDEwICsyODAsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwNGRfcHJlc2VudCgqcDRkKSBcdTAwMjZcdTAwMjYgIXA0ZF9mcmVlX3B1ZF9wYWdlKHA0ZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuK1x0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcbitcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG4rXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4rXHRcdGlmICghcDRkX2ZyZWVfcHVkX3BhZ2UocDRkLCBhZGRyKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA2OjM3OjQxLjY2MTM1MjM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY3MjA2MTgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogSHVnZSBQYWdlcyBhbmQgdm1hbGxvYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgaXQncyBtZXNzaW5nIHdpdGggcGFnZSB0YWJsZSBkdW1waW5nIGFuZCBgdm1hbGxvY2AgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBodWdlIHBhZ2VzIGFuZCBsb2NraW5nLlwiIFRoZSBwYXRjaCBsb29rcyBsaWtlIGl0J3MgdGFraW5nIG91dCB0aGUgYGFybTY0X3B0ZHVtcF9sb2NrX2tleWAgc3RhdGljIGtleSBsb2dpYyBmcm9tIHRoZSBgYXJtNjRgIGFyY2hpdGVjdHVyZSdzIGBtbXUuY2AgYW5kIGBwdGR1bXAuY2AgZmlsZXMuIFRoYXQncyBpbnRlcmVzdGluZywgSSB3b25kZXIgd2h5IHRoZXkncmUgZG9pbmcgdGhhdC4gSW5zdGVhZCwgaXQncyBpbnRyb2R1Y2luZyBgbW1hcF9yZWFkX2xvY2tfdHJ5YCBjYWxscyB3aXRoaW4gYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAgZnVuY3Rpb25zIGluIGBtbS92bWFsbG9jLmNgLiBBbmQgaXQgYWxzbyB0b3VjaGVzIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIGluIGBtbS9wYWdld2Fsay5jYCwgbWFraW5nIGl0IGFzc2VydCBgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKWAgZm9yIGtlcm5lbCBwYWdlIHRhYmxlcy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBcIklzIHRoaXMgZnVuY3Rpb25hbCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGlzIGl0IGFjdHVhbGx5ICpyZWFjaGFibGUqP1wiIExldCdzIHNlZS4uLiBgdm1hcF90cnlfaHVnZV9wbWRgIGlzIGNhbGxlZCBmcm9tIGB2bWFwX3BtZF9yYW5nZWAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGB2bWFsbG9jYCBwYXRoLiBPa2F5LCB0aGF0IGNvbmZpcm1zIHRoYXQgYHZtYWxsb2NgIGl0c2VsZiBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhbHRlcmluZyBob3cgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIHdoZW4gd2UncmUgY3JlYXRpbmcgdGhvc2UgaHVnZSBtYXBwaW5ncyBpbnNpZGUgYHZtYWxsb2NgLiBJdCdzIHVzaW5nIGBzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKWAgdG8gZ2V0IHRoZSBgbW1hcGAgcmVhZCBsb2NrLiBJZiB0aGUgbG9jayBhY3F1aXNpdGlvbiBmYWlscywgaXQgcmV0dXJucyAwLCB3aGljaCBsaWtlbHkgc2lnbmFscyBhIGZhbGxiYWNrIHRvIG5vbi1odWdlIG1hcHBpbmcsIG9yIHBlcmhhcHMgYSBmYWlsdXJlIGFsdG9nZXRoZXIuXG5cbk5vdyBJJ20gdGhpbmtpbmcsIFwiV2FpdCBhIHNlY29uZCwgdGhpcyBpcyB0b3VjaGluZyBgbW0vdm1hbGxvYy5jYC4uLiB0aGF0J3MgY29yZSBrZXJuZWwgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gbG9vayBhdCBjYXJlZnVsbHkuXCIgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGB2bWFwX3RyeV9odWdlX3BtZGAgaW4gYG1tL3ZtYWxsb2MuY2Agbm93IHRvIHNlZSB3aGF0J3Mgd2hhdC4gT2theSwgc28gaHVnZSBwYWdlIHZtYWxsb2MgKmlzKiByZWFjaGFibGUg4oCTIHRoYXQgY29uZmlybXMgaXQuIE5vdywgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkLCBhbnl0aGluZyB0aGF0IHRoaXMgZGVwZW5kcyBvbi4gUGVyaGFwcyBzb21ldGhpbmcgbGlrZSBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgPyBJIHNob3VsZCBwcm9iYWJseSBncmVwIGZvciBgdm1hcF90cnlfaHVnZV9wbWRgIGp1c3QgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyByZWxldmFudCBpbiB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTAwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDY6Mzc6NDguMzMzNDE2MTkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mzg0NDcyNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hcF90cnlfaHVnZV9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTk1PXN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xNDItXFxubW0vdm1hbGxvYy5jOjE0MzpzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1hbGxvYy5jLTE0NC1cXHRcXHRcXHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXFxuLS1cXG5tbS92bWFsbG9jLmM9MTgwPXN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xOTMtXFxubW0vdm1hbGxvYy5jOjE5NDpcXHRcXHRpZiAodm1hcF90cnlfaHVnZV9wbWQocG1kLCBhZGRyLCBuZXh0LCBwaHlzX2FkZHIsIHByb3QsXFxubW0vdm1hbGxvYy5jLTE5NS1cXHRcXHRcXHRcXHRcXHRtYXhfcGFnZV9zaGlmdCkpIHtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0yMDc9c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTIyOC1cXG5tbS92bWFsbG9jLmM6MjI5OlxcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXFxubW0vdm1hbGxvYy5jLTIzMC1cXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbi0tXFxubW0vdm1hbGxvYy5jPTI2ND1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMjg1LVxcbm1tL3ZtYWxsb2MuYzoyODY6XFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG5tbS92bWFsbG9jLmMtMjg3LVxcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA2OjM3OjUwLjE3MTg3MzY3M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjM2MDI1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgaGFuZGxpbmcgdGhlIHZtYWxsb2MgcmVnaW9uIGNvcnJlY3RseSwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIGh1Z2UgcGFnZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHdlJ3JlIHVzaW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG1hY3JvLiBMZXQncyBzZWUuLi4gaXMgYEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIHRoZSBhcHByb3ByaWF0ZSBmbGFnIHRvIGRldGVybWluZSBpZiB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIGFuZCB1dGlsaXplcyBodWdlIHZtYWxsb2MgcmVnaW9ucz8gSXQncyBjcnVjaWFsIHRvIGdldCB0aGlzIHJpZ2h0LiBXZSBuZWVkIHRoaXMgc28gdGhhdCB0aGUga2VybmVsIGNhbiBhbGxvY2F0ZSBsYXJnZSBjb250aWd1b3VzIHZpcnR1YWwgbWVtb3J5IHJlZ2lvbnMgZm9yIGNlcnRhaW4gb3BlcmF0aW9ucy4gSWYgaXQncyBub3Qgc2V0IGNvcnJlY3RseSwgd2UgbWlnaHQgYmUgdXNpbmcgc3Vib3B0aW1hbCBhbGxvY2F0aW9ucywgb3Igd29yc2UsIGNhdXNpbmcgc3RhYmlsaXR5IGlzc3Vlcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBhcmNoaXRlY3R1cmUgY29kZSBhbmQgS2NvbmZpZyBmaWxlcyB0byBjb25maXJtIHRoaXMgaXMgdGhlIGRlZmluaXRpdmUgY2hlY2sgYW5kIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZhY3RvcnMgaW5mbHVlbmNpbmcgdGhlIGJlaGF2aW9yIG9mIHZtYWxsb2MgYW5kIGh1Z2UgcGFnZXMuIExldCdzIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIHVzYWdlcyBvZiB0aGlzIG1hY3JvIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgdm1hbGxvYyBpbXBsZW1lbnRhdGlvbiBpbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGNvZGUuIFRoaXMgd2lsbCBjbGFyaWZ5IGlmIGl0J3MgdGhlIGdhdGVrZWVwZXIsIG9yIGlmIHRoZXJlIGFyZSBvdGhlciwgcG9zc2libHkgcGxhdGZvcm0tc3BlY2lmaWMsIGNvbnNpZGVyYXRpb25zIHRvIGFjY291bnQgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTYzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDY6Mzc6NTMuMjk1NDc4MjE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzkzNzUwNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9MTA5Mj1jb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbi0tXFxuYXJjaC9LY29uZmlnLTEwOTktI1xcbmFyY2gvS2NvbmZpZzoxMTAwOmNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFxuYXJjaC9LY29uZmlnLTExMDEtXFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTMtXFx0c2VsZWN0IEhBVkVfQVJDSF9DT01QSUxFUl9IXFxuYXJjaC9hcm02NC9LY29uZmlnOjE1NDpcXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbmFyY2gvYXJtNjQvS2NvbmZpZy0xNTUtXFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnPTExOD1jb25maWcgUFBDXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0yMTgtXFx0c2VsZWN0IEhBVkVfQVJDSF9BVURJVFNZU0NBTExcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoyMTk6XFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXHRcXHRpZiBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMjIwLVxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFQXFx0XFx0aWYgUFBDX1JBRElYX01NVSB8fCBQUENfOHh4XFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMTMxLVxcdHNlbGVjdCBIQVZFX0FSQ0hfQklUUkVWRVJTRSBpZiBSSVNDVl9JU0FfWkJLQiBcXHUwMDI2XFx1MDAyNiBCSVRSRVZFUlNFXFxuYXJjaC9yaXNjdi9LY29uZmlnOjEzMjpcXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BTExPQyBpZiBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuYXJjaC9yaXNjdi9LY29uZmlnLTEzMy1cXHRzZWxlY3QgSEFWRV9BUkNIX0hVR0VfVk1BUCBpZiBNTVUgXFx1MDAyNlxcdTAwMjYgNjRCSVRcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xOTItXFx0c2VsZWN0IEhBVkVfQVJDSF9IVUdFX1ZNQVBcXHRcXHRpZiBYODZfNjQgfHwgWDg2X1BBRVxcbmFyY2gveDg2L0tjb25maWc6MTkzOlxcdHNlbGVjdCBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXFx0XFx0aWYgWDg2XzY0XFxuYXJjaC94ODYvS2NvbmZpZy0xOTQtXFx0c2VsZWN0IEhBVkVfQVJDSF9KVU1QX0xBQkVMXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0xOT1zdHJ1Y3QgaW92X2l0ZXI7XFx0XFx0LyogaW4gdWlvLmggKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTMxLSNkZWZpbmUgVk1fTUFQX1BVVF9QQUdFU1xcdDB4MDAwMDAyMDBcXHQvKiBwdXQgcGFnZXMgYW5kIGZyZWUgYXJyYXkgaW4gdmZyZWUgKi9cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaDozMjojZGVmaW5lIFZNX0FMTE9XX0hVR0VfVk1BUFxcdDB4MDAwMDA0MDAgICAgICAvKiBBbGxvdyBmb3IgaHVnZSBwYWdlcyBvbiBhcmNocyB3aXRoIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgKi9cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0zMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oPTUyPXN0cnVjdCB2bV9zdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmgtNjEtXFx0c3RydWN0IHBhZ2VcXHRcXHQqKnBhZ2VzO1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oOjYyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTYzLVxcdHVuc2lnbmVkIGludFxcdFxcdHBhZ2Vfb3JkZXI7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaD0yNTg9c3RhdGljIGlubGluZSBib29sIGlzX3ZtX2FyZWFfaHVnZXBhZ2VzKGNvbnN0IHZvaWQgKmFkZHIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaC0yNjYtXFx0ICovXFxuaW5jbHVkZS9saW51eC92bWFsbG9jLmg6MjY3OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbmluY2x1ZGUvbGludXgvdm1hbGxvYy5oLTI2OC1cXHRzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhID0gZmluZF92bV9hcmVhKGFkZHIpO1xcbi0tXFxubW0vdm1hbGxvYy5jPTY0PXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW9yZW1hcF9tYXhfcGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7XFxuLS1cXG5tbS92bWFsbG9jLmMtNjYtXFxubW0vdm1hbGxvYy5jOjY3OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbm1tL3ZtYWxsb2MuYy02OC1zdGF0aWMgYm9vbCBfX3JvX2FmdGVyX2luaXQgdm1hcF9hbGxvd19odWdlID0gdHJ1ZTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz03NT1lYXJseV9wYXJhbShcXFwibm9odWdldm1hbGxvY1xcXCIsIHNldF9ub2h1Z2V2bWFsbG9jKTtcXG5tbS92bWFsbG9jLmM6NzY6I2Vsc2UgLyogQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MgKi9cXG5tbS92bWFsbG9jLmMtNzctc3RhdGljIGNvbnN0IGJvb2wgdm1hcF9hbGxvd19odWdlID0gZmFsc2U7XFxubW0vdm1hbGxvYy5jOjc4OiNlbmRpZlxcdC8qIENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DICovXFxubW0vdm1hbGxvYy5jLTc5LVxcbi0tXFxubW0vdm1hbGxvYy5jPTY4Mj1pbnQgX192bWFwX3BhZ2VzX3JhbmdlX25vZmx1c2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy02ODgtXFxubW0vdm1hbGxvYy5jOjY4OTpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0MpIHx8XFxubW0vdm1hbGxvYy5jLTY5MC1cXHRcXHRcXHRwYWdlX3NoaWZ0ID09IFBBR0VfU0hJRlQpXFxuLS1cXG5tbS92bWFsbG9jLmM9MzEyOD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2bV9hcmVhX3BhZ2Vfb3JkZXIoc3RydWN0IHZtX3N0cnVjdCAqdm0pXFxubW0vdm1hbGxvYy5jLTMxMjkte1xcbm1tL3ZtYWxsb2MuYzozMTMwOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbm1tL3ZtYWxsb2MuYy0zMTMxLVxcdHJldHVybiB2bS1cXHUwMDNlcGFnZV9vcmRlcjtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zMTQyPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdm1fYXJlYV9wYWdlX29yZGVyKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxubW0vdm1hbGxvYy5jLTMxNDMte1xcbm1tL3ZtYWxsb2MuYzozMTQ0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbm1tL3ZtYWxsb2MuYy0zMTQ1LVxcdHZtLVxcdTAwM2VwYWdlX29yZGVyID0gb3JkZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA2OjM3OjU1LjI3NDg1OTcxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDIxOTIwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBBIExvY2stRG93biBvbiBIdWdlIHZtYWxsb2MgUGFnZSBUYWJsZSBSYWNlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2VzIHRvIGBtbS92bWFsbG9jLmNgLCBzcGVjaWZpY2FsbHkgdGhvc2UgYWx0ZXJhdGlvbnMgdG8gYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAuIFRoZXNlIGFyZSBjYWxsZWQgYnkgdGhlIHJhbmdlLWJhc2VkIGZ1bmN0aW9ucywgbWVhbmluZyB0aGV5J3JlIGNlbnRyYWwgdG8gZW5hYmxpbmcgaHVnZSB2bWFsbG9jIG1hcHBpbmdzIOKAkyBzbywgd2UncmUgdGFsa2luZyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIGhlcmUuIEkgc2VlIHRoZXkncmUgYWxzbyB0b3VjaGluZyBgYXJjaC9hcm02NC9tbS9tbXUuY2AgYW5kIGBhcmNoL2FybTY0L21tL3B0ZHVtcC5jYCwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGNsb3NlIGF0dGVudGlvbiwgc2luY2UgQVJNNjQgaXMgYSBrZXkgdGFyZ2V0LiBTcGVjaWZpY2FsbHksIGNoYW5nZXMgdG8gYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYHB1ZF9mcmVlX3BtZF9wYWdlYCBldCBjZXRlcmEsIGhpbnQgYXQgbW9kaWZpY2F0aW9ucyB0byBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyDigJMgc3RhbmRhcmQgdGVycml0b3J5LiBBbHNvIGBwdGR1bXBfd2Fsa2AgYW5kIGBwdGR1bXBfY2hlY2tfd3hgLCB0aGF0J3MgYW4gaW50ZXJlc3RpbmcgY29tYmluYXRpb24gd2l0aCB0aGUgdm1hbGxvYyBjaGFuZ2VzLlxuXG5BaCwgaGVyZSdzIHRoZSBraWNrZXI6IHRoZSBwYXRjaCAqcmVtb3ZlcyogYGFybTY0X3B0ZHVtcF9sb2NrX2tleWAgYW5kIGFkZHMgYG1tYXBfcmVhZF9sb2NrX3RyeWAgd2l0aGluIGB2bWFwX3RyeV9odWdlX3BtZGAuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCogY2hhbmdlLCBub3QganVzdCBhIGNsZWFudXAuIEl0J3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uISBJJ20gYmV0dGluZyB0aGF0IHRoZSByYWNlIGlzIGJldHdlZW4gZnJlZWluZyB2bWFsbG9jIGh1Z2UgcGFnZSB0YWJsZXMgYW5kIGBwdGR1bXBgIHdhbGtpbmcgdGhvc2UgdGFibGVzLiBUaGlzIGxvY2tzIGl0IGRvd24uXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlzIHRoaXMgcGF0Y2ggZnV6emFibGU/IEFic29sdXRlbHkuIEl0IHRvdWNoZXMgY29yZSBrZXJuZWwgbG9ja2luZyBwcmltaXRpdmVzIGluIHZtYWxsb2MgYW5kIHBhZ2UgdGFibGUgd2Fsa2luZywgc28gdGhpcyBpcyBjcml0aWNhbC4gQSBmdXp6aW5nIGNhbXBhaWduIGhlcmUgaXMgZGVmaW5pdGVseSBhIGdvb2QgaWRlYSwgcGFydGljdWxhcmx5IGdpdmVuIGl0IGltcGFjdHMgYSB2YXJpZXR5IG9mIEFSTTY0IGNvbmZpZ3VyYXRpb25zLlxuXG5BcyBmb3IgY29uZmlndXJhdGlvbnMsIHdlbGwgYENPTkZJR19QVERVTVBfQ09SRWAgb3IgYENPTkZJR19QVERVTVBfREVCVUdGU2AgYXJlIHRoZSBvYnZpb3VzIG9uZXMgZm9yIGBwdGR1bXBgLiBTaW5jZSBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGlzIGFyY2hpdGVjdHVyZS1zZWxlY3RlZCwgbm8gbmVlZCB0byB3b3JyeSB0aGVyZSwgYnV0IGBDT05GSUdfREVCVUdfV1hgIG9yIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIG1heSBiZSB1c2VmdWwuIFRpbWUgdG8gY2hlY2sgYENPTkZJR19QVERVTVBgIGluIGBhcmNoL2FybTY0L0tjb25maWdgIGZvciByZWxhdGVkIGNvbmZpZyBkZXBlbmRlbmNpZXMgb3IgYW55IHJlbGV2YW50IGRldGFpbHMgSSBtaWdodCBoYXZlIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNjozODowMi4xMTcwNTM3NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMzQyMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBURFVNUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FyY2gvYXJtNjQvcHRkdW1wLnJzdD0yMz1jb25maWd1cmF0aW9ucyBhbmQgbW91bnQgZGVidWdmczo6XFxuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L3B0ZHVtcC5yc3QtMjQtXFxuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L3B0ZHVtcC5yc3Q6MjU6IENPTkZJR19QVERVTVBfREVCVUdGUz15XFxuRG9jdW1lbnRhdGlvbi9hcmNoL2FybTY0L3B0ZHVtcC5yc3QtMjYtXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTItXFxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZzozOmNvbmZpZyBBUk1fUFREVU1QX0NPUkVcXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnLTQtXFx0ZGVmX2Jvb2wgblxcbmFyY2gvYXJtL0tjb25maWcuZGVidWctNS1cXG5hcmNoL2FybS9LY29uZmlnLmRlYnVnOjY6Y29uZmlnIEFSTV9QVERVTVBfREVCVUdGU1xcbmFyY2gvYXJtL0tjb25maWcuZGVidWctNy1cXHRib29sIFxcXCJFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXFxcIlxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zy05LVxcdGRlcGVuZHMgb24gTU1VXFxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZzoxMDpcXHRzZWxlY3QgQVJNX1BURFVNUF9DT1JFXFxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zy0xMS1cXHRzZWxlY3QgREVCVUdfRlNcXG4tLVxcbmFyY2gvYXJtL0tjb25maWcuZGVidWc9MjA9Y29uZmlnIEFSTV9ERUJVR19XWFxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy5kZWJ1Zy0yMi1cXHRkZXBlbmRzIG9uIE1NVVxcbmFyY2gvYXJtL0tjb25maWcuZGVidWc6MjM6XFx0c2VsZWN0IEFSTV9QVERVTVBfQ09SRVxcbmFyY2gvYXJtL0tjb25maWcuZGVidWctMjQtXFx0aGVscFxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMi0vKiBDb3B5cmlnaHQgKEMpIDIwMTQgQVJNIEx0ZC4gKi9cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaDozOiNpZm5kZWYgX19BU01fUFREVU1QX0hcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaDo0OiNkZWZpbmUgX19BU01fUFREVU1QX0hcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC01LVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjY6I2lmZGVmIENPTkZJR19BUk1fUFREVU1QX0NPUkVcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC03LVxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MjI9dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pO1xcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjIzOiNpZmRlZiBDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjQtI2RlZmluZSBFRklfUlVOVElNRV9NQVBfRU5EXFx0U1pfMUdcXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oPTI3PXN0YXRpYyBpbmxpbmUgdm9pZCBwdGR1bXBfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8sXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtMjgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqbmFtZSkgeyB9XFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6Mjk6I2VuZGlmIC8qIENPTkZJR19BUk1fUFREVU1QX0RFQlVHRlMgKi9cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zMC1cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaD0zMT12b2lkIHB0ZHVtcF9jaGVja193eCh2b2lkKTtcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0zMi1cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaDozMzojZW5kaWYgLyogQ09ORklHX0FSTV9QVERVTVBfQ09SRSAqL1xcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTM0LVxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmgtNDAtXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg6NDE6I2VuZGlmIC8qIF9fQVNNX1BURFVNUF9IICovXFxuLS1cXG5hcmNoL2FybS9tbS9NYWtlZmlsZT0xNT1lbmRpZlxcbmFyY2gvYXJtL21tL01ha2VmaWxlLTE2LVxcbmFyY2gvYXJtL21tL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19BUk1fUFREVU1QX0NPUkUpXFx0Kz0gZHVtcC5vXFxuYXJjaC9hcm0vbW0vTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX0FSTV9QVERVTVBfREVCVUdGUylcXHQrPSBwdGR1bXBfZGVidWdmcy5vXFxuYXJjaC9hcm0vbW0vTWFrZWZpbGUtMTktb2JqLSQoQ09ORklHX01PRFVMRVMpXFx0XFx0Kz0gcHJvYy1zeW1zLm9cXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTQ0LVxcdHNlbGVjdCBBUkNIX0hBU19QUkVFTVBUX0xBWllcXG5hcmNoL2FybTY0L0tjb25maWc6NDU6XFx0c2VsZWN0IEFSQ0hfSEFTX1BURFVNUFxcbmFyY2gvYXJtNjQvS2NvbmZpZy00Ni1cXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xNTM9c3RydWN0IGt2bV9zMl9tbXUge1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIxOS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjIwOiNpZmRlZiBDT05GSUdfUFREVU1QX1NUQUdFMl9ERUJVR0ZTXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIyMS1cXHRzdHJ1Y3QgZGVudHJ5ICpzaGFkb3dfcHRfZGVidWdmc19kZW50cnk7XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MzA5PXN0cnVjdCBrdm1fYXJjaCB7XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNDIyLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDo0MjM6I2lmZGVmIENPTkZJR19QVERVTVBfU1RBR0UyX0RFQlVHRlNcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtNDI0LVxcdC8qIE5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbmZvICovXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaD0zODc9c3RhdGljIGlubGluZSBib29sIGt2bV9zdXBwb3J0c19jYWNoZWFibGVfcGZubWFwKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9tbXUuaC0zOTItXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbW11Lmg6MzkzOiNpZmRlZiBDT05GSUdfUFREVU1QX1NUQUdFMl9ERUJVR0ZTXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbW11LmgtMzk0LXZvaWQga3ZtX3MyX3B0ZHVtcF9jcmVhdGVfZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbW11Lmg9NDAwPXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbmVzdGVkX3MyX3B0ZHVtcF9yZW1vdmVfZGVidWdmcyhzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KSB7fVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oOjQwMTojZW5kaWYgLyogQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGUyAqL1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oLTQwMi1cXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtNC0gKi9cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjU6I2lmbmRlZiBfX0FTTV9QVERVTVBfSFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg6NjojZGVmaW5lIF9fQVNNX1BURFVNUF9IXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC03LVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC05LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg6MTA6I2lmZGVmIENPTkZJR19QVERVTVBcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTExLVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaD02OD12b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCk7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo2OTojaWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaC03MC0jZGVmaW5lIEVGSV9SVU5USU1FX01BUF9FTkRcXHRERUZBVUxUX01BUF9XSU5ET1dfNjRcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg9NzM9c3RhdGljIGlubGluZSB2b2lkIHB0ZHVtcF9kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbyxcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTc0LVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKm5hbWUpIHsgfVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg6NzU6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtNzYtI2Vsc2VcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmg9ODQ9c3RhdGljIGlubGluZSB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCkgeyB9XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo4NTojZW5kaWYgLyogQ09ORklHX1BURFVNUCAqL1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgtODYtXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaDo4NzojZW5kaWYgLyogX19BU01fUFREVU1QX0ggKi9cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc9NDU9aWYgS1ZNXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBQVERVTVBfU1RBR0UyX0RFQlVHRlNcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlByZXNlbnQgdGhlIHN0YWdlLTIgcGFnZXRhYmxlcyB0byBkZWJ1Z2ZzXFxcIlxcbi0tXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy01MC1cXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzo1MTpcXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6NTI6XFx0c2VsZWN0IFBURFVNUFxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNTMtXFx0ZGVmYXVsdCBuXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZT0zMD1rdm0tJChDT05GSUdfQVJNNjRfUFRSX0FVVEgpICArPSBwYXV0aC5vXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MzE6a3ZtLSQoQ09ORklHX1BURFVNUF9TVEFHRTJfREVCVUdGUykgKz0gcHRkdW1wLm9cXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0zMi1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVxcdCs9IGh1Z2V0bGJwYWdlLm9cXG5hcmNoL2FybTY0L21tL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1BURFVNUClcXHRcXHQrPSBwdGR1bXAub1xcbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfUFREVU1QX0RFQlVHRlMpXFx0Kz0gcHRkdW1wX2RlYnVnZnMub1xcbmFyY2gvYXJtNjQvbW0vTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX1RSQU5TX1RBQkxFKVxcdCs9IHRyYW5zX3BnZC5vXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTQ5LVxcdHNlbGVjdCBBUkNIX0hBU19QUkVFTVBUX0xBWllcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxNTA6XFx0c2VsZWN0IEFSQ0hfSEFTX1BURFVNUFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE1MS1cXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnPTc5PUNPTkZJR19QUENfRUFSTFlfREVCVUc9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnOjgwOkNPTkZJR19QVERVTVBfREVCVUdGUz15XFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGU9MTc9b2JqLSQoQ09ORklHX1BQQ19DT1BST19CQVNFKVxcdCs9IGNvcHJvX2ZhdWx0Lm9cXG5hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX1BURFVNUClcXHRcXHQrPSBwdGR1bXAvXFxuYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19LQVNBTilcXHRcXHQrPSBrYXNhbi9cXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfUFBDX0JPT0szU182NClcXHQrPSBib29rM3M2NC5vXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9NYWtlZmlsZS0xMC1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL01ha2VmaWxlOjExOmlmZGVmIENPTkZJR19QVERVTVBfREVCVUdGU1xcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX1BQQ19CT09LM1NfMzIpXFx0Kz0gYmF0cy5vIHNlZ21lbnRfcmVncy5vXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jPTQwNj1zdGF0aWMgaW50IF9faW5pdCBwdGR1bXBfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy00MTktXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYzo0MjA6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BURFVNUF9ERUJVR0ZTKSlcXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTQyMS1cXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJrZXJuZWxfcGFnZV90YWJsZXNcXFwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcXHUwMDI2cHRkdW1wX2ZvcHMpO1xcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQ2LVxcdHNlbGVjdCBBUkNIX0hBU19QUkVQQVJFX1NZTkNfQ09SRV9DTURcXG5hcmNoL3Jpc2N2L0tjb25maWc6NDc6XFx0c2VsZWN0IEFSQ0hfSEFTX1BURFVNUCBpZiBNTVVcXG5hcmNoL3Jpc2N2L0tjb25maWctNDgtXFx0c2VsZWN0IEFSQ0hfSEFTX1BURV9TUEVDSUFMXFxuLS1cXG5hcmNoL3Jpc2N2L21tL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19IVUdFVExCX1BBR0UpICs9IGh1Z2V0bGJwYWdlLm9cXG5hcmNoL3Jpc2N2L21tL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19QVERVTVApICs9IHB0ZHVtcC5vXFxuYXJjaC9yaXNjdi9tbS9NYWtlZmlsZS0yMy1vYmotJChDT05GSUdfS0FTQU4pICAgKz0ga2FzYW5faW5pdC5vXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZz03NT1jb25maWcgUzM5MFxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWctMTAzLVxcdHNlbGVjdCBBUkNIX0hBU19QUkVFTVBUX0xBWllcXG5hcmNoL3MzOTAvS2NvbmZpZzoxMDQ6XFx0c2VsZWN0IEFSQ0hfSEFTX1BURFVNUFxcbmFyY2gvczM5MC9LY29uZmlnLTEwNS1cXHRzZWxlY3QgQVJDSF9IQVNfUFRFX1NQRUNJQUxcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz04NDI9Q09ORklHX0RFQlVHX1dYPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6ODQzOkNPTkZJR19QVERVTVBfREVCVUdGUz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTg0NC1DT05GSUdfREVCVUdfT0JKRUNUUz15XFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc9ODIxPUNPTkZJR19ERUJVR19XWD15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjgyMjpDT05GSUdfUFREVU1QX0RFQlVHRlM9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy04MjMtQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXlcXG4tLVxcbmFyY2gvczM5MC9tbS9NYWtlZmlsZT0xMT1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVxcdCs9IGh1Z2V0bGJwYWdlLm9cXG5hcmNoL3MzOTAvbW0vTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX1BURFVNUClcXHRcXHQrPSBkdW1wX3BhZ2V0YWJsZXMub1xcbmFyY2gvczM5MC9tbS9NYWtlZmlsZS0xMy1vYmotJChDT05GSUdfUEZBVUxUKVxcdFxcdCs9IHBmYXVsdC5vXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MTgyPWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjI0LVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyMjU6I2lmZGVmIENPTkZJR19QVERVTVBfREVCVUdGU1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMjYtc3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MjU1PURFRklORV9TSE9XX0FUVFJJQlVURShwdGR1bXApO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNTY6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTctXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MzE1PXN0YXRpYyBpbnQgcHRfZHVtcF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMzU1LVxcdHNvcnQoXFx1MDAyNm1hcmtlcnNbMV0sIG1hcmtlcnNfY250IC0gMSwgc2l6ZW9mKCptYXJrZXJzKSwgcHRkdW1wX2NtcCwgTlVMTCk7XFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjM1NjojaWZkZWYgQ09ORklHX1BURFVNUF9ERUJVR0ZTXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTM1Ny1cXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJrZXJuZWxfcGFnZV90YWJsZXNcXFwiLCAwNDAwLCBOVUxMLCBOVUxMLCBcXHUwMDI2cHRkdW1wX2ZvcHMpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzozNTg6I2VuZGlmIC8qIENPTkZJR19QVERVTVBfREVCVUdGUyAqL1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0zNTktXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctOTgtXFx0c2VsZWN0IEFSQ0hfSEFTX1BSRUVNUFRfTEFaWVxcbmFyY2gveDg2L0tjb25maWc6OTk6XFx0c2VsZWN0IEFSQ0hfSEFTX1BURFVNUFxcbmFyY2gveDg2L0tjb25maWctMTAwLVxcdHNlbGVjdCBBUkNIX0hBU19QVEVfU1BFQ0lBTFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy5kZWJ1Zz01OT1jb25maWcgRUZJX1BHVF9EVU1QXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLmRlYnVnLTYxLVxcdGRlcGVuZHMgb24gRUZJXFxuYXJjaC94ODYvS2NvbmZpZy5kZWJ1Zzo2MjpcXHRzZWxlY3QgUFREVU1QXFxuYXJjaC94ODYvS2NvbmZpZy5kZWJ1Zy02My1cXHRoZWxwXFxuLS1cXG5hcmNoL3g4Ni9tbS9NYWtlZmlsZT0zNj1vYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKVxcdCs9IGh1Z2V0bGJwYWdlLm9cXG5hcmNoL3g4Ni9tbS9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfUFREVU1QKVxcdFxcdCs9IGR1bXBfcGFnZXRhYmxlcy5vXFxuYXJjaC94ODYvbW0vTWFrZWZpbGU6Mzg6b2JqLSQoQ09ORklHX1BURFVNUF9ERUJVR0ZTKVxcdCs9IGRlYnVnX3BhZ2V0YWJsZXMub1xcbmFyY2gveDg2L21tL01ha2VmaWxlLTM5LVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvYXJtLXJ1bnRpbWUuYy0yNy1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9hcm0tcnVudGltZS5jOjI4OiNpZiBkZWZpbmVkKENPTkZJR19QVERVTVBfREVCVUdGUykgfHwgZGVmaW5lZChDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTKVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2FybS1ydW50aW1lLmMtMjktI2luY2x1ZGUgXFx1MDAzY2FzbS9wdGR1bXAuaFxcdTAwM2VcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRkdW1wLmgtMi1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjM6I2lmbmRlZiBfTElOVVhfUFREVU1QX0hcXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjQ6I2RlZmluZSBfTElOVVhfUFREVU1QX0hcXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oPTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19jaGVja3d4KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTM5LVxcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6NDA6I2VuZGlmIC8qIF9MSU5VWF9QVERVTVBfSCAqL1xcbi0tXFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnPTc4PUNPTkZJR19LQVNBTl9WTUFMTE9DPXlcXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc6Nzk6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctODAtQ09ORklHX1NDSEVEX1NUQUNLX0VORF9DSEVDSz15XFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnPTE4Nj1jb25maWcgREVCVUdfV1hcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTg4LVxcdGRlcGVuZHMgb24gQVJDSF9IQVNfREVCVUdfV1hcXG5tbS9LY29uZmlnLmRlYnVnOjE4OTpcXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxcbm1tL0tjb25maWcuZGVidWctMTkwLVxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy5kZWJ1ZzoxOTE6XFx0c2VsZWN0IFBURFVNUFxcbm1tL0tjb25maWcuZGVidWctMTkyLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjE1LVxcbm1tL0tjb25maWcuZGVidWc6MjE2OmNvbmZpZyBBUkNIX0hBU19QVERVTVBcXG5tbS9LY29uZmlnLmRlYnVnLTIxNy1cXHRib29sXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMTgtXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMTk6Y29uZmlnIFBURFVNUFxcbm1tL0tjb25maWcuZGVidWctMjIwLVxcdGJvb2xcXG5tbS9LY29uZmlnLmRlYnVnLTIyMS1cXG5tbS9LY29uZmlnLmRlYnVnOjIyMjpjb25maWcgUFREVU1QX0RFQlVHRlNcXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cXHRib29sIFxcXCJFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjUtXFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbm1tL0tjb25maWcuZGVidWc6MjI2OlxcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMjc6XFx0c2VsZWN0IFBURFVNUFxcbm1tL0tjb25maWcuZGVidWctMjI4LVxcdGhlbHBcXG4tLVxcbm1tL01ha2VmaWxlPTE0MT1vYmotJChDT05GSUdfTUFQUElOR19ESVJUWV9IRUxQRVJTKSArPSBtYXBwaW5nX2RpcnR5X2hlbHBlcnMub1xcbm1tL01ha2VmaWxlOjE0MjpvYmotJChDT05GSUdfUFREVU1QKSArPSBwdGR1bXAub1xcbm1tL01ha2VmaWxlLTE0My1vYmotJChDT05GSUdfUEFHRV9SRVBPUlRJTkcpICs9IHBhZ2VfcmVwb3J0aW5nLm9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND0xMTQ9Q09ORklHX1BST1ZFX0xPQ0tJTkc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2NDoxMTU6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQtMTE2LUNPTkZJR19SQ19ERVZJQ0VTPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg9OTU9Q09ORklHX1BST1ZFX0xPQ0tJTkc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg6OTY6Q09ORklHX1BURFVNUF9ERUJVR0ZTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTk3LUNPTkZJR19SQ19ERVZJQ0VTPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDY6Mzg6MDMuNzcwNDAxMDIxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4NjM1OTE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUFREVU1QIENvbmZpZ3VyYXRpb24gYW5kIFZNQUxMT0MgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgY29ubmVjdGlvbiB0byBgQ09ORklHX1BURFVNUF9ERUJVR0ZTYCBpcyBvYnZpb3VzLiBUaGF0J3MgdGhlIHByaW1hcnkgZW5hYmxlciBoZXJlLiBCdXQsIGludGVyZXN0aW5nbHksIGBDT05GSUdfREVCVUdfV1hgIGFsc28gdHJpZ2dlcnMgcHRkdW1wIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aG9zZSBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnMgd2l0aGluIGBtbS92bWFsbG9jLmNgIOKAkyBzcGVjaWZpY2FsbHkgYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYW5kIGB2bWFwX3RyeV9odWdlX3A0ZGAuXG5cbkkga25vdyB0aGVzZSBhcmUgb25seSByZWxldmFudCB3aGVuIGB2bWFwX2FsbG93X2h1Z2VgIGlzIHRydWUsIHdoaWNoLCBpbiB0dXJuLCBpcyBkaXJlY3RseSB0aWVkIHRvIHdoZXRoZXIgYENPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBpcyBlbmFibGVkLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJZiB3ZSB3YW50IHB0ZHVtcCBmb3IgdGhpcywgd2UnbGwgbmVlZCB0byBlbmFibGUgYFBURFVNUF9ERUJVR0ZTYC4gTm8gc3VycHJpc2VzIHRoZXJlLiBBbmQsIEknbSB0aGlua2luZywgYERFQlVHX1dYYCBpcyBhbm90aGVyIHNvbGlkIG9wdGlvbiB0byBjb25zaWRlciBmb3IgdGhpcyBjb25maWd1cmF0aW9uLlxuXG5Ob3csIGxldCdzIGRpdmUgZGVlcGVyIGFuZCBwaW5wb2ludCBhbnkgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgZ29vZCBjYW5kaWRhdGVzIHRvIG1vbml0b3IuIEJleW9uZCB0aG9zZSBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnMsIHRoZSBjb2RlIG1lbnRpb25zIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLCBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCBhbmQgYHB1ZF9mcmVlX3BtZF9wYWdlYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSBpbiBvdXIgc2V0dXAuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgcGF0aHMgaGVyZSB0byBtYWtlIHN1cmUgd2UncmUgZ2V0dGluZyB3aGF0IHdlIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzE3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA2OjM4OjA5LjE1Njc2MjIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUwNjUzMDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhbGtfcGFnZV9yYW5nZV9kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTM4Mj1XZSBhbHNvIHBlcm1pdCBhIHRydWx5IHVudXN1YWwgY2FzZSBpcyB0aGUgdHJhdmVyc2FsIG9mIG5vbi1WTUEgcmFuZ2VzIGluXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDozODM6Kip1c2VybGFuZCoqIHJhbmdlcywgYXMgcHJvdmlkZWQgZm9yIGJ5IDpjOmZ1bmM6YCF3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLlxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtMzg0LVxcbi0tXFxubW0vaW50ZXJuYWwuaD0xODQwPWludCB3YWxrX3BhZ2VfcmFuZ2Vfdm1hX3Vuc2FmZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2ludGVybmFsLmgtMTg0Mi1cXHRcXHR2b2lkICpwcml2YXRlKTtcXG5tbS9pbnRlcm5hbC5oOjE4NDM6aW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9pbnRlcm5hbC5oLTE4NDQtXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXFxuLS1cXG5tbS9wYWdld2Fsay5jPTY0OD1pbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtNjY3LS8qKlxcbm1tL3BhZ2V3YWxrLmM6NjY4OiAqIHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyAtIHdhbGsgYSByYW5nZSBvZiBwYWdldGFibGVzIG5vdCBiYWNrZWQgYnkgYSB2bWFcXG5tbS9wYWdld2Fsay5jLTY2OS0gKiBAbW06XFx0XFx0bW1fc3RydWN0IHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IHByb2Nlc3Mgb2YgcGFnZSB0YWJsZSB3YWxrXFxuLS1cXG5tbS9wYWdld2Fsay5jLTY4My0gKi9cXG5tbS9wYWdld2Fsay5jOjY4NDppbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL3BhZ2V3YWxrLmMtNjg1LVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxcbi0tXFxubW0vcHRkdW1wLmM9MTc1PXZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcXG4tLVxcbm1tL3B0ZHVtcC5jLTE4MS1cXHR3aGlsZSAocmFuZ2UtXFx1MDAzZXN0YXJ0ICE9IHJhbmdlLVxcdTAwM2VlbmQpIHtcXG5tbS9wdGR1bXAuYzoxODI6XFx0XFx0d2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxubW0vcHRkdW1wLmMtMTgzLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZwdGR1bXBfb3BzLCBwZ2QsIHN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDY6Mzg6MTAuODA3NDIyMzQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MTY3MDc1MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIGBwdGR1bXBgIGlzIHRoZSBjZW50cmFsIHBpZWNlIGhlcmUsIHdoaWNoIGNhbGxzIGBwdGR1bXBfd2Fsa2AgYW5kIGBwdGR1bXBfY2hlY2tfd3hgLCBhbmQgdGhvc2UgaW4gdHVybiBjYWxsIGBwdGR1bXBfd2Fsa19wZ2RgLiBUaGVuLCBgcHRkdW1wX3dhbGtfcGdkYCBtYWtlcyBhIGNhbGwgdG8gYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuIFNvLCBgcHRkdW1wYCBpcyB0aGUgcHJpbWFyeSBkcml2ZXIsIGNvbmZpcm1lZC5cblxuVGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byBiZSB0d2Vha2luZyBgdm1hcF90cnlfaHVnZV9wbWRgLCB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBjb21lcyBpbnRvIHBsYXkgZHVyaW5nIGB2bWFsbG9jYCBvcGVyYXRpb25zLiBLbm93aW5nIHRoYXQsIG15IGZvY3VzIHNob3VsZCBkZWZpbml0ZWx5IGJlIG9uIHRoZSBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnM6IGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGFuZCBgdm1hcF90cnlfaHVnZV9wNGRgLiBBbmQgb2YgY291cnNlLCBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgaXMgZnJlZWQsIHNvIGBwbWRfZnJlZV9wdGVfcGFnZWAgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAgbmVlZCB0byBiZSBjaGVja2VkIGFzIHdlbGwuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aG9zZSBsYXN0IHR3bzsgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBpbXBvcnRhbnQgaW4gdGhlaXIgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODc4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA2OjM4OjE2LjQyNDEzMTgzN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NjMyNzM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwbWRfZnJlZV9wdGVfcGFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L21tL21tdS5jPTE4NTA9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xODU3LVxcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTg1ODppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL2FybTY0L21tL21tdS5jLTE4NTkte1xcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYz0xODc3PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xODk2LVxcdFxcdGlmIChwbWRfcHJlc2VudChwbWRwX2dldChwbWRwKSkpXFxuYXJjaC9hcm02NC9tbS9tbXUuYzoxODk3OlxcdFxcdFxcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg5OC1cXHR9IHdoaWxlIChwbWRwKyssIG5leHQgKz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmM9MTY3NT1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmMtMTY4NC1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jOjE2ODU6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jLTE2ODYte1xcbi0tXFxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmM9MTE3PWludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kKVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMtMTI0LVxcbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jOjEyNTppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jLTEyNi17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM9NzE4PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzU0LS8qKlxcbmFyY2gveDg2L21tL3BndGFibGUuYzo3NTU6ICogcG1kX2ZyZWVfcHRlX3BhZ2UgLSBDbGVhciBQTUQgZW50cnkgYW5kIGZyZWUgUFRFIHBhZ2UuXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc1Ni0gKiBAcG1kOiBQb2ludGVyIHRvIHRoZSBQTURcXG4tLVxcbmFyY2gveDg2L21tL3BndGFibGUuYy03NjEtICovXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jOjc2MjppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gveDg2L21tL3BndGFibGUuYy03NjMte1xcbi0tXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc4Mi0gKi9cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NzgzOmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc4NC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0yMTc2PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIxNzc6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjE3OC0jZWxzZVxcdC8qICFDT05GSUdfSEFWRV9BUkNIX0hVR0VfVk1BUCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjIwND1zdGF0aWMgaW5saW5lIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMjA3LX1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMjA4OnN0YXRpYyBpbmxpbmUgaW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMjA5LXtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0xNDM9c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTE3My1cXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbm1tL3ZtYWxsb2MuYzoxNzQ6XFx0XFx0aWYgKCFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxcbm1tL3ZtYWxsb2MuYy0xNzUtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDA2OjM4OjE4LjE3MDQ2NjU2M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjgzNDI2OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbiBgYXJjaC9hcm02NC9tbS9tbXUuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgcG1kX2ZyZWVfcHRlX3BhZ2VgLiBJdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2U6IHRoZXkncmUgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgYF9fcG1kX2ZyZWVfcHRlX3BhZ2VgIGFuZCBqdXN0IHJlbmFtaW5nIGl0LiBUaGUgb3RoZXIgc2lnbmlmaWNhbnQgcmVtb3ZhbCBpcyB0aGUgYHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KWAgc3R1ZmYuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBjb3JlIGtlcm5lbCBjb2RlLCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMsIGFuZCBpdCAqaXMqIHJlYWNoYWJsZSDigJMgdGhhdCdzIGEga2V5IGRldGFpbCBmb3IgbXkgYXNzZXNzbWVudC5cblxuSSBzaG91bGQgdmVyaWZ5IGFueSBjb25maWcgZGVwZW5kZW5jaWVzLiBMb29rcyBsaWtlIGBDT05GSUdfUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBwcmltYXJ5IG9uZSwgYW5kIGBDT05GSUdfREVCVUdfV1hgIGlzIGFub3RoZXIsIHRob3VnaCBgQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGlzIGFyY2hpdGVjdHVyZS1zZWxlY3RlZC4gU28gSSBqdXN0IG5lZWQgdG8gc3BlY2lmeSB0aGUgZm9ybWVyLiBObyBuZWVkIHRvIHNwZWNpZnkgdGhlIGxhdHRlci5cblxuTm93LCBwdXR0aW5nIGl0IGFsbCB0b2dldGhlciBmb3IgZnV6emluZywgSSdtIHRoaW5raW5nOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogQWJzb2x1dGVseS4gVGhpcyBoaXRzIHRoZSBzd2VldCBzcG90IGZvciBmdXp6aW5nIGNvbnNpZGVyYXRpb24uXG4qICAgKipGb2N1c1N5bWJvbHMqKjogIEknbGwgd2FudCB0byB0YXJnZXQgdGhlc2UgZnVuY3Rpb25zLCBiZWNhdXNlIHRoZXkncmUgcmVsYXRlZCB0byBodWdlIHZtYWxsb2MgbWFwcGluZ3MgYW5kIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uOlxuICAgICogICBgdm1hcF90cnlfaHVnZV9wbWRgXG4gICAgKiAgIGB2bWFwX3RyeV9odWdlX3B1ZGBcbiAgICAqICAgYHZtYXBfdHJ5X2h1Z2VfcDRkYFxuICAgICogICBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYFxuICAgICogICBgcG1kX2ZyZWVfcHRlX3BhZ2VgXG4gICAgKiAgIGBwdWRfZnJlZV9wbWRfcGFnZWBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjpcbiAgICAqICAgYFBURFVNUF9ERUJVR0ZTYFxuICAgICogICBgREVCVUdfV1hgXG5cbk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIHRoZSBsb2NraW5nIGxvZ2ljIGZvciBmcmVlaW5nIHBhZ2UgdGFibGVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGh1Z2Ugdm1hbGxvYyBtYXBwaW5ncy4gVGhleSdyZSByZXBsYWNpbmcgYSBzcGVjaWZpYyBzdGF0aWMga2V5IGZvciBhcm02NCB3aXRoIGEgbW9yZSBnZW5lcmljIGxvY2suIEkgYWxzbyBzYXcgdGhlIGFkZGl0aW9uIG9mIG1tYXAgd3JpdGUgbG9jayBhc3NlcnRpb25zIGluIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLiBUaGlzIHNvcnQgb2YgY29yZSBrZXJuZWwgYW5kIGFyY2hpdGVjdHVyZSBjb2RlLCBkZWFsaW5nIHdpdGggY29uY3VycmVuY3kgKHZtYWxsb2MgYW5kIHB0ZHVtcCBzcGVjaWZpY2FsbHkpIGRlbWFuZHMgcmlnb3JvdXMgZnV6emluZy4gSSBuZWVkIHRvIGV4cG9zZSBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yLCBldmVuIHdvcnNlLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHRoYXQgY291bGQgYXJpc2UgZnJvbSB0aGUgY2hhbmdlcyBpbiBsb2NrIGhhbmRsaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcm9idXN0LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSB2bWFsbG9jIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTUwLCJPdXRwdXRUb2tlbnMiOjIxMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwNjozODoyNi40NTM4OTcxMjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTEyNTk1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIkRFQlVHX1dYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hcF90cnlfaHVnZV9wbWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcHVkXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3A0ZFwiLFxuICAgIFwid2Fsa19wYWdlX3JhbmdlX2RlYnVnXCIsXG4gICAgXCJwbWRfZnJlZV9wdGVfcGFnZVwiLFxuICAgIFwicHVkX2ZyZWVfcG1kX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBsb2dpYyBmb3IgZnJlZWluZyBwYWdlIHRhYmxlcyBkdXJpbmcgaHVnZSB2bWFsbG9jIG1hcHBpbmdzLCByZXBsYWNpbmcgYW4gYXJtNjQtc3BlY2lmaWMgc3RhdGljIGtleSB3aXRoIGEgZ2VuZXJpYyBtbWFwX3JlYWRfbG9ja190cnkgaW4gY29yZSB2bWFsbG9jIGNvZGUuIEl0IGFsc28gYWRkcyBhbiBtbWFwIHdyaXRlIGxvY2sgYXNzZXJ0aW9uIGluIHdhbGtfcGFnZV9yYW5nZV9kZWJ1Zy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIgZHVyaW5nIGNvbmN1cnJlbnQgdm1hbGxvYyBhbmQgcHRkdW1wIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIkRFQlVHX1dYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hcF90cnlfaHVnZV9wbWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcHVkXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3A0ZFwiLFxuICAgIFwid2Fsa19wYWdlX3JhbmdlX2RlYnVnXCIsXG4gICAgXCJwbWRfZnJlZV9wdGVfcGFnZVwiLFxuICAgIFwicHVkX2ZyZWVfcG1kX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBsb2dpYyBmb3IgZnJlZWluZyBwYWdlIHRhYmxlcyBkdXJpbmcgaHVnZSB2bWFsbG9jIG1hcHBpbmdzLCByZXBsYWNpbmcgYW4gYXJtNjQtc3BlY2lmaWMgc3RhdGljIGtleSB3aXRoIGEgZ2VuZXJpYyBtbWFwX3JlYWRfbG9ja190cnkgaW4gY29yZSB2bWFsbG9jIGNvZGUuIEl0IGFsc28gYWRkcyBhbiBtbWFwIHdyaXRlIGxvY2sgYXNzZXJ0aW9uIGluIHdhbGtfcGFnZV9yYW5nZV9kZWJ1Zy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGFuZCBhcmNoaXRlY3R1cmUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIgZHVyaW5nIGNvbmN1cnJlbnQgdm1hbGxvYyBhbmQgcHRkdW1wIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow447tc[1] Phase: Succeeded StartedAt: 2026-07-11 06:38:38 +0000 UTC FinishedAt: 2026-07-11 06:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 06:38:38 +0000 UTC FinishedAt: 2026-07-11 06:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2] Phase: Succeeded StartedAt: 2026-07-11 06:38:38 +0000 UTC FinishedAt: 2026-07-11 10:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-11 06:38:38 +0000 UTC FinishedAt: 2026-07-11 10:49:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-11 06:38:38 +0000 UTC FinishedAt: 2026-07-11 06:38:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-11 06:38:38 +0000 UTC FinishedAt: 2026-07-11 06:38:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow447tc/series-workflow447tc-convert-artifact-620662312/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-11 06:38:48 +0000 UTC FinishedAt: 2026-07-11 07:15:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-11 06:38:48 +0000 UTC FinishedAt: 2026-07-11 07:15:02 +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:*eaa33a03-8034-490b-a08b-48e9ccaddf64,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-workflow447tc/series-workflow447tc-convert-artifact-620662312/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": "ed6642f0-743a-4b57-a474-e372196eb87e", "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-workflow447tc/series-workflow447tc-build-action-2447312030/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-11 06:38:48 +0000 UTC FinishedAt: 2026-07-11 07:14:52 +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:*eaa33a03-8034-490b-a08b-48e9ccaddf64,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-workflow447tc/series-workflow447tc-convert-artifact-620662312/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": "ed6642f0-743a-4b57-a474-e372196eb87e", "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-workflow447tc/series-workflow447tc-build-action-2447312030/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-11 07:15:02 +0000 UTC FinishedAt: 2026-07-11 07:15:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-11 07:15:02 +0000 UTC FinishedAt: 2026-07-11 07:15:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-11 07:15:02 +0000 UTC FinishedAt: 2026-07-11 07:15:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-11 07:15:02 +0000 UTC FinishedAt: 2026-07-11 07:15:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow447tc/series-workflow447tc-convert-artifact-3293547023/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-11 07:15:12 +0000 UTC FinishedAt: 2026-07-11 07:17:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-11 07:15:12 +0000 UTC FinishedAt: 2026-07-11 07:17:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ed6642f0-743a-4b57-a474-e372196eb87e,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-workflow447tc/series-workflow447tc-build-action-2447312030/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-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-11 07:17:36 +0000 UTC FinishedAt: 2026-07-11 07:17:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-11 07:17:36 +0000 UTC FinishedAt: 2026-07-11 07:17:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-11 07:17:36 +0000 UTC FinishedAt: 2026-07-11 07:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-11 07:17:36 +0000 UTC FinishedAt: 2026-07-11 07:43:58 +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:*eaa33a03-8034-490b-a08b-48e9ccaddf64,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-workflow447tc/series-workflow447tc-convert-artifact-3293547023/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": "15d1e1bb-e697-4923-9c35-955bc4ee329a", "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-workflow447tc/series-workflow447tc-build-action-1481141027/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-11 07:17:36 +0000 UTC FinishedAt: 2026-07-11 07:43:48 +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:*eaa33a03-8034-490b-a08b-48e9ccaddf64,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-workflow447tc/series-workflow447tc-convert-artifact-3293547023/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": "15d1e1bb-e697-4923-9c35-955bc4ee329a", "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-workflow447tc/series-workflow447tc-build-action-1481141027/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-11 07:43:58 +0000 UTC FinishedAt: 2026-07-11 07:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-11 07:43:58 +0000 UTC FinishedAt: 2026-07-11 07:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-11 07:43:58 +0000 UTC FinishedAt: 2026-07-11 07:46:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-11 07:43:58 +0000 UTC FinishedAt: 2026-07-11 07:45:51 +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:*15d1e1bb-e697-4923-9c35-955bc4ee329a,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-workflow447tc/series-workflow447tc-build-action-1481141027/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-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-11 07:46:01 +0000 UTC FinishedAt: 2026-07-11 10:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-11 07:46:01 +0000 UTC FinishedAt: 2026-07-11 10:49:31 +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":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"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:*ed6642f0-743a-4b57-a474-e372196eb87e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*15d1e1bb-e697-4923-9c35-955bc4ee329a,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-workflow447tc/series-workflow447tc-build-action-2447312030/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-workflow447tc/series-workflow447tc-build-action-1481141027/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-11 07:46:01 +0000 UTC FinishedAt: 2026-07-11 07:46:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-11 07:46:01 +0000 UTC FinishedAt: 2026-07-11 07:46:06 +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":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"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-workflow447tc/series-workflow447tc-convert-artifact-630706632/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-11 07:46:01 +0000 UTC FinishedAt: 2026-07-11 07:46:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-11 07:46:01 +0000 UTC FinishedAt: 2026-07-11 07:46:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-11 07:46:01 +0000 UTC FinishedAt: 2026-07-11 07:46:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-11 07:46:11 +0000 UTC FinishedAt: 2026-07-11 10:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow447tc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX"],"series_id":"e62d668d-1c91-46bd-9e40-c96a8eb723d4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-11 07:46:11 +0000 UTC FinishedAt: 2026-07-11 10:49:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ed6642f0-743a-4b57-a474-e372196eb87e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*15d1e1bb-e697-4923-9c35-955bc4ee329a,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-workflow447tc/series-workflow447tc-build-action-2447312030/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-workflow447tc/series-workflow447tc-build-action-1481141027/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-workflow447tc/series-workflow447tc-convert-artifact-630706632/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,}