Name: series-workflow9stg4 Phase: Succeeded StartedAt: 2026-07-17 22:05:40 +0000 UTC FinishedAt: 2026-07-18 02:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[0] Phase: Succeeded StartedAt: 2026-07-17 22:05:40 +0000 UTC FinishedAt: 2026-07-17 22:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[0].run-triage Phase: Succeeded StartedAt: 2026-07-17 22:05:40 +0000 UTC FinishedAt: 2026-07-17 22:25:22 +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": "fce2dfa773ced15f27dd27cd0b482a7473cdcf2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS", "DEBUG_WX", "CPA_DEBUG" ], "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": "fce2dfa773ced15f27dd27cd0b482a7473cdcf2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS", "DEBUG_WX", "CPA_DEBUG" ], "series_id": "d5e733a7-107a-4d9d-83a1-97088c8a0594" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "vmap_try_huge_pmd", "vmap_try_huge_pud", "vmap_try_huge_p4d", "cpa_collapse_large_pages", "__change_page_attr_set_clr", "ptdump_walk_pgd", "walk_page_range_debug", "pmd_free_pte_page", "pud_free_pmd_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0RFQlVHX1dYJiMzNDssCiAgICAmIzM0O0NQQV9ERUJVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NsciYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDssCiAgICAmIzM0O3BtZF9mcmVlX3B0ZV9wYWdlJiMzNDssCiAgICAmIzM0O3B1ZF9mcmVlX3BtZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYyBodWdlIHBhZ2Ugc2V0dXAsIGFuZCB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlIChDUEEpIGNvZGUgdG8gdXNlIGBpbml0X21tLm1tYXBfbG9ja2AgZm9yIHN5bmNocm9uaXphdGlvbi4gVGhpcyByZXBsYWNlcyBhIHN0YXRpYyBrZXkgYXBwcm9hY2ggaW4gYXJtNjQgYW5kIGFkZHMgbG9ja2luZyBpbiB4ODYgQ1BBIGFuZCB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIHdhbGtzIGFuZCBtb2RpZmljYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2U4OGVjNTE2YWEzYWY4NzJkMTVjNDU1MDFlNTViMzgyYmMxOTUyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDE3IDIyOjIzOjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG5pbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG5AQCAtNyw4ICYjNDM7Nyw2IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHRkdW1wLmhcdTAwM2VcbiBcbi1ERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiAjaWZkZWYgQ09ORklHX1BURFVNUFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tX3R5cGVzLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xuaW5kZXggYTI1ZDhiZWFjYzgzMTAuLmJkNTJmY2E2ZTg3MjBiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9tbXUuY1xuQEAgLTQ5LDggJiM0Mzs0OSw2IEBAXG4gI2RlZmluZSBOT19DT05UX01BUFBJTkdTXHRCSVQoMSlcbiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1NcdEJJVCgyKVx0LyogYXNzdW1lcyBGRUFUX0hQRFMgaXMgbm90IHVzZWQgKi9cbiBcbi1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVxuIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7XG4gRVhQT1JUX1NZTUJPTChraW1hZ2Vfdm9mZnNldCk7XG4gXG5AQCAtMTg2NCw4ICYjNDM7MTg2Miw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcClcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaylcbiYjNDM7aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuIFx0cHRlX3QgKnRhYmxlO1xuIFx0cG1kX3QgcG1kO1xuQEAgLTE4NzcsMjUgJiM0MzsxODc0LDEzIEBAIHN0YXRpYyBpbnQgX19wbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcbi1cdC8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovXG4gXHR0YWJsZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIpO1xuIFx0cG1kX2NsZWFyKHBtZHApO1xuIFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4tXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpIFx1MDAyNlx1MDAyNiBhY3F1aXJlX21tYXBfbG9jaykge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbi1cdH1cbi1cbiBcdHB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7XG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4taW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4te1xuLVx0LyogSWYgcHRkdW1wIGlzIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMsIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2sgKi9cbi1cdHJldHVybiBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIGFkZHIsIC8qIGFjcXVpcmVfbW1hcF9sb2NrID0gKi8gdHJ1ZSk7XG4tfVxuLVxuIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHBtZF90ICp0YWJsZTtcbkBAIC0xOTExLDM2ICYjNDM7MTg5NiwxNiBAQCBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdH1cbiBcbiBcdHRhYmxlID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbi1cbi1cdC8qXG4tXHQgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXNcbi1cdCAqIGJlZW4gZnJlZWQuIEluIHRoaXMgcmFjZSwgaWYgcHVkX2ZyZWVfcG1kX3BhZ2Ugb2JzZXJ2ZXMgdGhlIGtleSBvblxuLVx0ICogKHdoaWNoIGdvdCBmbGlwcGVkIGJ5IHB0ZHVtcCkgdGhlbiB0aGUgbW1hcCBsb2NrIHNlcXVlbmNlIGhlcmUgd2lsbCxcbi1cdCAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZVxuLVx0ICogdXMgdGhlIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uLiBJZiBub3QsIHRoaXMgbWVhbnMgdGhhdCBwdGR1bXAgaGFzXG4tXHQgKiB5ZXQgbm90IHN0YXJ0ZWQgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcyAtIHRoZSBzZXF1ZW5jZSBvZiBiYXJyaWVyc1xuLVx0ICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsXG4tXHQgKiBvYnNlcnZlIGFuIGVtcHR5IFBVRC5cbi1cdCAqL1xuLVx0cHVkX2NsZWFyKHB1ZHApO1xuLVx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4tXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpKSB7XG4tXHRcdG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0fVxuLVxuIFx0cG1kcCA9IHRhYmxlO1xuIFx0bmV4dCA9IGFkZHI7XG4gXHRlbmQgPSBhZGRyICYjNDM7IFBVRF9TSVpFO1xuIFx0ZG8ge1xuIFx0XHRpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogUE1EIGhhcyBiZWVuIGlzb2xhdGVkLCBzbyBwdGR1bXAgd29uJiMzOTt0IHNlZSBpdC4gTm9cbi1cdFx0XHQgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suXG4tXHRcdFx0ICovXG4tXHRcdFx0X19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0LCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIGZhbHNlKTtcbiYjNDM7XHRcdFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XG4gXHR9IHdoaWxlIChwbWRwJiM0MzsmIzQzOywgbmV4dCAmIzQzOz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTtcbiBcbiYjNDM7XHRwdWRfY2xlYXIocHVkcCk7XG4mIzQzO1x0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4gXHRwbWRfZnJlZShOVUxMLCB0YWJsZSk7XG4gXHRyZXR1cm4gMTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9wdGR1bXAuYyBiL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcbmluZGV4IDFjMjAxNDQ3MDBkN2Q3Li41YTc2YzU5YjVhZGE1NSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcbkBAIC0yODMsMTMgJiM0MzsyODMsNiBAQCB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcbiBcdG5vdGVfcGFnZShwdF9zdCwgMCwgLTEsIHB0ZV92YWwocHRlX3plcm8pKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXJtNjRfcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi17XG4tXHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVx0cHRkdW1wX3dhbGtfcGdkKHN0LCBtbSwgTlVMTCk7XG4tXHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLX1cbi1cbiB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kID0gfjBVTDtcbkBAIC0zMTgsNyAmIzQzOzMxMSw3IEBAIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH07XG4gXG4tXHRhcm02NF9wdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBpbmZvLVx1MDAzZW1tKTtcbiYjNDM7XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBpbmZvLVx1MDAzZW1tLCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IHB0ZHVtcF9pbml0aWFsaXplKHZvaWQpXG5AQCAtMzYwLDcgJiM0MzszNTMsNyBAQCBib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSk7XG4mIzQzO1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSwgTlVMTCk7XG4gXG4gXHRpZiAoc3Qud3hfcGFnZXMgfHwgc3QudXhuX3BhZ2VzKSB7XG4gXHRcdHByX3dhcm4oXCYjMzQ7Q2hlY2tlZCBXJiM0MztYIG1hcHBpbmdzOiBGQUlMRUQsICVsdSBXJiM0MztYIHBhZ2VzIGZvdW5kLCAlbHUgbm9uLVVYTiBwYWdlcyBmb3VuZFxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuaW5kZXggZDAyM2E0MGExZTAzNDUuLjMwMWZiOWU3N2Q5MWJhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuQEAgLTIyLDYgJiM0MzsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2NfcGxhdGZvcm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXJlZ2lvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9lODIwL2FwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtNDEwLDcgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBfX2NwYV9mbHVzaF90bGIodm9pZCAqZGF0YSlcbiBcbiBzdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpO1xuIFxuLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiYjNDM7c3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kO1xuIFx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjLCAqdG1wO1xuQEAgLTQ0Miw2ICYjNDM7NDQzLDE4IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGFrZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gdG86XG4mIzQzO1x0ICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93blxuJiM0MztcdCAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS5cbiYjNDM7XHQgKiAtIFNlcmlhbGlzZSBjb25jdXJyZW50IENQQSB3YWxrZXJzLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4mIzQzO1x0XHRfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuQEAgLTIxMDksNyAmIzQzOzIxMjIsOSBAQCBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG4gXHRjcGEuY3VycGFnZSA9IDA7XG4gXHRjcGEuZm9yY2Vfc3BsaXQgPSBmb3JjZV9zcGxpdDtcbiBcbi1cdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4mIzQzO1x0LyogQXZvaWQgcmFjZSB3aXRoIGNvbmN1cnJlbnQgQ1BBIGNvbGxhcHNlLiAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlcbiYjNDM7XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4gXG4gXHQvKlxuIFx0ICogQ2hlY2sgd2hldGhlciB3ZSByZWFsbHkgY2hhbmdlZCBzb21ldGhpbmc6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDA0YjhmNjFlY2U1ZDhlLi4wNDdmNWY1ZTJjMzQ3NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbkBAIC02MjEsNiAmIzQzOzYyMSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxuIFx0ICAgICBtbWFwX3JlYWRfbG9jayhfVCksIG1tYXBfcmVhZF91bmxvY2soX1QpKVxuJiM0MztERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4mIzQzO1x0ICAgICBtbWFwX3dyaXRlX2xvY2soX1QpLCBtbWFwX3dyaXRlX3VubG9jayhfVCkpXG4mIzQzO0RFRklORV9HVUFSRF9DT05EKG1tYXBfcmVhZF9sb2NrLCBfdHJ5LCBtbWFwX3JlYWRfdHJ5bG9jayhfVCkpXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuY1xuaW5kZXggM2FlMjU4NmZmNDViNDQuLjVkODdjNjMyYTI1NTA3IDEwMDY0NFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZXdhbGsuY1xuQEAgLTY3OCw2ICYjNDM7Njc4LDggQEAgaW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmRcbiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay5cbiAgKlxuICAqIFRoaXMgaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBPTkxZLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZC5cbiAgKi9cbiBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxuQEAgLTY5MSwyNCAmIzQzOzY5MywyOCBAQCBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHQubm9fdm1hXHRcdD0gdHJ1ZVxuIFx0fTtcbiBcbi1cdC8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi9cbi1cdGlmIChtbSA9PSBcdTAwMjZpbml0X21tKVxuLVx0XHRyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsXG4tXHRcdFx0XHRcdFx0ICAgIHBnZCwgcHJpdmF0ZSk7XG4tXHRpZiAoc3RhcnQgXHUwMDNlPSBlbmQgfHwgIXdhbGsubW0pXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qXG4tXHQgKiBUaGUgbW1hcCBsb2NrIHByb3RlY3RzIHRoZSBwYWdlIHdhbGtlciBmcm9tIGNoYW5nZXMgdG8gdGhlIHBhZ2Vcbi1cdCAqIHRhYmxlcyBkdXJpbmcgdGhlIHdhbGsuICBIb3dldmVyIGEgcmVhZCBsb2NrIGlzIGluc3VmZmljaWVudCB0b1xuLVx0ICogcHJvdGVjdCB0aG9zZSBhcmVhcyB3aGljaCBkb24mIzM5O3QgaGF2ZSBhIFZNQSBhcyBtdW5tYXAoKSBkZXRhY2hlc1xuLVx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXG4tXHQgKiBkb3duIFBURXMvcGFnZSB0YWJsZXMuIEluIHdoaWNoIGNhc2UsIHRoZSBtbWFwIHdyaXRlIGxvY2sgc2hvdWxkXG4tXHQgKiBiZSBoZWxkLlxuJiM0MztcdCAqIFdoZW4gd2Fsa2luZyB1c2VybGFuZCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZCB0b1xuJiM0MztcdCAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZ1xuJiM0MztcdCAqIGRvd24gcGFnZSB0YWJsZXMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGRcbiYjNDM7XHQgKiB0byBhY2NvdW50IGZvciBwYWdlIHRhYmxlIGZyZWVpbmcgb24gdm1hcCBodWdlIHBhZ2UgbWFwcGluZy5cbiBcdCAqL1xuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHg4NiwgYXJtNjQgcHRkdW1wIGFsbG93IHdhbGtzIG9mIGVmaSBtbSYjMzk7cyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3NcbiYjNDM7XHQgKiBvZiBhcmJpdHJhcnkgbW0mIzM5O3MuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBIb3dldmVyLCB0aGV5IGJvdGggbXVzdCBhbHNvIGhvbGQgdGhlIGluaXRfbW0gbG9jayB0byBhY2NvdW50IGZvclxuJiM0MztcdCAqIGNvbmN1cnJlbnQga2VybmVsIHBhZ2UgdGFibGUgZnJlZWluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoXHUwMDI2aW5pdF9tbSk7XG4mIzQzO1xuJiM0MztcdGlmIChzdGFydCBcdTAwM2U9IGVuZClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIHdhbGtfcGdkX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9wdGR1bXAuYyBiL21tL3B0ZHVtcC5jXG5pbmRleCA5NzMwMjAwMDAwOTZjZi4uNTg1MTA5NmU2ZjY1NmMgMTAwNjQ0XG4tLS0gYS9tbS9wdGR1bXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcHRkdW1wLmNcbkBAIC0xNzgsMTEgJiM0MzsxNzgsMTggQEAgdm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKVxuIFxuIFx0Z2V0X29ubGluZV9tZW1zKCk7XG4gXHRtbWFwX3dyaXRlX2xvY2sobW0pO1xuJiM0MztcdC8qIFRvIHN0YWJpbGlzZSBrZXJuZWwgcGFnZSB0YWJsZXMgd2UgbXVzdCBob2xkIHRoZSBpbml0X21tIGxvY2sgdG9vLiAqL1xuJiM0MztcdGlmIChtbSAhPSBcdTAwMjZpbml0X21tKVxuJiM0MztcdFx0bW1hcF93cml0ZV9sb2NrX25lc3RlZChcdTAwMjZpbml0X21tLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4mIzQzO1xuIFx0d2hpbGUgKHJhbmdlLVx1MDAzZXN0YXJ0ICE9IHJhbmdlLVx1MDAzZWVuZCkge1xuIFx0XHR3YWxrX3BhZ2VfcmFuZ2VfZGVidWcobW0sIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZwdGR1bXBfb3BzLCBwZ2QsIHN0KTtcbiBcdFx0cmFuZ2UmIzQzOyYjNDM7O1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAobW0gIT0gXHUwMDI2aW5pdF9tbSlcbiYjNDM7XHRcdG1tYXBfd3JpdGVfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuIFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xuIFx0cHV0X29ubGluZV9tZW1zKCk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uZjRmYTIyN2E4ZDdmMDQgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYWxsb2MuY1xuQEAgLTQzLDYgJiM0Mzs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2htcGFyYW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2Vfb3duZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMTU4LDEwICYjNDM7MTU5LDIxIEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBNRF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocG1kX3ByZXNlbnQoKnBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIXBtZF9wcmVzZW50KCpwbWQpKVxuJiM0MztcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIGV4Y2x1ZGUgcHRkdW1wLCB3aGljaCB3YWxrc1xuJiM0MztcdCAqIGtlcm5lbCBwYWdlIHRhYmxlcyBpdCBkb2VzIG5vdCBvd24gdW5kZXIgdGhlIG1tYXAgd3JpdGUgbG9jay5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIENvbmN1cnJlbnQgcmVhZCBsb2NrIGhvbGRlcnMgYXJlIHNhZmU6IGVhY2ggZXhjbHVzaXZlbHkgb3duc1xuJiM0MztcdCAqIHRoZSByYW5nZSBpdCBvcGVyYXRlcyBvbiBhbmQgY2Fubm90IHJlYWNoIHRoaXMgcGFnZSB0YWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4mIzQzO1x0XHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMjEwLDEwICYjNDM7MjIyLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocHVkX3ByZXNlbnQoKnB1ZCkgXHUwMDI2XHUwMDI2ICFwdWRfZnJlZV9wbWRfcGFnZShwdWQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKVxuJiM0MztcdFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xuJiM0MztcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbiYjNDM7XHRcdGlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC0yNjIsMTAgJiM0MzsyNzksMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwNGRfcHJlc2VudCgqcDRkKSBcdTAwMjZcdTAwMjYgIXA0ZF9mcmVlX3B1ZF9wYWdlKHA0ZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghcDRkX3ByZXNlbnQoKnA0ZCkpXG4mIzQzO1x0XHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG4mIzQzO1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuJiM0MztcdFx0aWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0RFQlVHX1dYJiMzNDssCiAgICAmIzM0O0NQQV9ERUJVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NsciYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDssCiAgICAmIzM0O3BtZF9mcmVlX3B0ZV9wYWdlJiMzNDssCiAgICAmIzM0O3B1ZF9mcmVlX3BtZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYyBodWdlIHBhZ2Ugc2V0dXAsIGFuZCB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlIChDUEEpIGNvZGUgdG8gdXNlIGBpbml0X21tLm1tYXBfbG9ja2AgZm9yIHN5bmNocm9uaXphdGlvbi4gVGhpcyByZXBsYWNlcyBhIHN0YXRpYyBrZXkgYXBwcm9hY2ggaW4gYXJtNjQgYW5kIGFkZHMgbG9ja2luZyBpbiB4ODYgQ1BBIGFuZCB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIHdhbGtzIGFuZCBtb2RpZmljYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZTg4ZWM1MTZhYTNhZjg3MmQxNWM0NTUwMWU1NWIzODJiYzE5NTI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTcgMjI6MjM6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaAppbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaApAQCAtNyw4ICYjNDM7Nyw2IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9wdGR1bXAuaCZndDsKIAotREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci0KICNpZmRlZiBDT05GSUdfUFREVU1QCiAKICNpbmNsdWRlICZsdDtsaW51eC9tbV90eXBlcy5oJmd0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKaW5kZXggYTI1ZDhiZWFjYzgzMTAuLmJkNTJmY2E2ZTg3MjBiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKQEAgLTQ5LDggJiM0Mzs0OSw2IEBACiAjZGVmaW5lIE5PX0NPTlRfTUFQUElOR1MJQklUKDEpCiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1MJQklUKDIpCS8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovCiAKLURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci0KIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7CiBFWFBPUlRfU1lNQk9MKGtpbWFnZV92b2Zmc2V0KTsKIApAQCAtMTg2NCw4ICYjNDM7MTg2Miw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcCkKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaykKJiM0MztpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwdGVfdCAqdGFibGU7CiAJcG1kX3QgcG1kOwpAQCAtMTg3NywyNSAmIzQzOzE4NzQsMTMgQEAgc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAxOwogCX0KIAotCS8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovCiAJdGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTsKIAlwbWRfY2xlYXIocG1kcCk7CiAJX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7Ci0JaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDthcm02NF9wdGR1bXBfbG9ja19rZXkpICZhbXA7JmFtcDsgYWNxdWlyZV9tbWFwX2xvY2spIHsKLQkJbW1hcF9yZWFkX2xvY2soJmFtcDtpbml0X21tKTsKLQkJbW1hcF9yZWFkX3VubG9jaygmYW1wO2luaXRfbW0pOwotCX0KLQogCXB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7CiAJcmV0dXJuIDE7CiB9CiAKLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCS8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovCi0JcmV0dXJuIF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgYWRkciwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyB0cnVlKTsKLX0KLQogaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcG1kX3QgKnRhYmxlOwpAQCAtMTkxMSwzNiAmIzQzOzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiAJfQogCiAJdGFibGUgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpOwotCi0JLyoKLQkgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXMKLQkgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb24KLQkgKiAod2hpY2ggZ290IGZsaXBwZWQgYnkgcHRkdW1wKSB0aGVuIHRoZSBtbWFwIGxvY2sgc2VxdWVuY2UgaGVyZSB3aWxsLAotCSAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZQotCSAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhcwotCSAqIHlldCBub3Qgc3RhcnRlZCB3YWxraW5nIHRoZSBwYWdldGFibGVzIC0gdGhlIHNlcXVlbmNlIG9mIGJhcnJpZXJzCi0JICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsCi0JICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuCi0JICovCi0JcHVkX2NsZWFyKHB1ZHApOwotCV9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpOwotCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkgewotCQltbWFwX3JlYWRfbG9jaygmYW1wO2luaXRfbW0pOwotCQltbWFwX3JlYWRfdW5sb2NrKCZhbXA7aW5pdF9tbSk7Ci0JfQotCiAJcG1kcCA9IHRhYmxlOwogCW5leHQgPSBhZGRyOwogCWVuZCA9IGFkZHIgJiM0MzsgUFVEX1NJWkU7CiAJZG8gewogCQlpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKQotCQkJLyoKLQkJCSAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbiYjMzk7dCBzZWUgaXQuIE5vCi0JCQkgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suCi0JCQkgKi8KLQkJCV9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7CiYjNDM7CQkJcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7CiAJfSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7CiAKJiM0MzsJcHVkX2NsZWFyKHB1ZHApOwomIzQzOwlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTsKIAlwbWRfZnJlZShOVUxMLCB0YWJsZSk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwppbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwpAQCAtMjgzLDEzICYjNDM7MjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpCiAJbm90ZV9wYWdlKHB0X3N0LCAwLCAtMSwgcHRlX3ZhbChwdGVfemVybykpOwogfQogCi1zdGF0aWMgdm9pZCBhcm02NF9wdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXN0YXRpY19icmFuY2hfaW5jKCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTsKLQlwdGR1bXBfd2Fsa19wZ2Qoc3QsIG1tLCBOVUxMKTsKLQlzdGF0aWNfYnJhbmNoX2RlYygmYW1wO2FybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci19Ci0KIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBlbmQgPSB+MFVMOwpAQCAtMzE4LDcgJiM0MzszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKQogCQl9CiAJfTsKIAotCWFybTY0X3B0ZHVtcF93YWxrX3BnZCgmYW1wO3N0LnB0ZHVtcCwgaW5mby0mZ3Q7bW0pOwomIzQzOwlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsIGluZm8tJmd0O21tLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHB0ZHVtcF9pbml0aWFsaXplKHZvaWQpCkBAIC0zNjAsNyAmIzQzOzM1Myw3IEBAIGJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpCiAJCX0KIAl9OwogCi0JYXJtNjRfcHRkdW1wX3dhbGtfcGdkKCZhbXA7c3QucHRkdW1wLCAmYW1wO2luaXRfbW0pOwomIzQzOwlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsICZhbXA7aW5pdF9tbSwgTlVMTCk7CiAKIAlpZiAoc3Qud3hfcGFnZXMgfHwgc3QudXhuX3BhZ2VzKSB7CiAJCXByX3dhcm4oJiMzNDtDaGVja2VkIFcmIzQzO1ggbWFwcGluZ3M6IEZBSUxFRCwgJWx1IFcmIzQzO1ggcGFnZXMgZm91bmQsICVsdSBub24tVVhOIHBhZ2VzIGZvdW5kXG4mIzM0OywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCmluZGV4IGQwMjNhNDBhMWUwMzQ1Li4zMDFmYjllNzdkOTFiYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCkBAIC0yMiw2ICYjNDM7MjIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NjX3BsYXRmb3JtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2V0X21lbW9yeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXJlZ2lvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vZTgyMC9hcGkuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC00MTAsNyAmIzQzOzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKQogCiBzdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpOwogCi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiYjNDM7c3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kOwogCXN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDsKQEAgLTQ0Miw2ICYjNDM7NDQzLDE4IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzoKJiM0MzsJICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93bgomIzQzOwkgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuCiYjNDM7CSAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuCiYjNDM7CSAqLwomIzQzOwlzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCAmYW1wO2luaXRfbW0pCiYjNDM7CQlfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMjEwOSw3ICYjNDM7MjEyMiw5IEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcywKIAljcGEuY3VycGFnZSA9IDA7CiAJY3BhLmZvcmNlX3NwbGl0ID0gZm9yY2Vfc3BsaXQ7CiAKLQlyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYW1wO2NwYSwgMSk7CiYjNDM7CS8qIEF2b2lkIHJhY2Ugd2l0aCBjb25jdXJyZW50IENQQSBjb2xsYXBzZS4gKi8KJiM0MzsJc2NvcGVkX2d1YXJkKG1tYXBfcmVhZF9sb2NrLCAmYW1wO2luaXRfbW0pCiYjNDM7CQlyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYW1wO2NwYSwgMSk7CiAKIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgd2UgcmVhbGx5IGNoYW5nZWQgc29tZXRoaW5nOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKaW5kZXggMDRiOGY2MWVjZTVkOGUuLjA0N2Y1ZjVlMmMzNDc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKQEAgLTYyMSw2ICYjNDM7NjIxLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLAogCSAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSkKJiM0MztERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosCiYjNDM7CSAgICAgbW1hcF93cml0ZV9sb2NrKF9UKSwgbW1hcF93cml0ZV91bmxvY2soX1QpKQomIzQzO0RFRklORV9HVUFSRF9DT05EKG1tYXBfcmVhZF9sb2NrLCBfdHJ5LCBtbWFwX3JlYWRfdHJ5bG9jayhfVCkpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jCmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li41ZDg3YzYzMmEyNTUwNyAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC02NzgsNiAmIzQzOzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kCiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay4KICAqCiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS4KJiM0MzsgKgomIzQzOyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLgogICovCiBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsCkBAIC02OTEsMjQgJiM0Mzs2OTMsMjggQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJLm5vX3ZtYQkJPSB0cnVlCiAJfTsKIAotCS8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi8KLQlpZiAobW0gPT0gJmFtcDtpbml0X21tKQotCQlyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsCi0JCQkJCQkgICAgcGdkLCBwcml2YXRlKTsKLQlpZiAoc3RhcnQgJmd0Oz0gZW5kIHx8ICF3YWxrLm1tKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJLyoKLQkgKiBUaGUgbW1hcCBsb2NrIHByb3RlY3RzIHRoZSBwYWdlIHdhbGtlciBmcm9tIGNoYW5nZXMgdG8gdGhlIHBhZ2UKLQkgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG8KLQkgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbiYjMzk7dCBoYXZlIGEgVk1BIGFzIG11bm1hcCgpIGRldGFjaGVzCi0JICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nCi0JICogZG93biBQVEVzL3BhZ2UgdGFibGVzLiBJbiB3aGljaCBjYXNlLCB0aGUgbW1hcCB3cml0ZSBsb2NrIHNob3VsZAotCSAqIGJlIGhlbGQuCiYjNDM7CSAqIFdoZW4gd2Fsa2luZyB1c2VybGFuZCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZCB0bwomIzQzOwkgKiBhY2NvdW50IGZvciBtdW5tYXAoKSBkb3duZ3JhZGluZyB0byBhbiBtbWFwIHJlYWQgbG9jayB3aGVuIHRlYXJpbmcKJiM0MzsJICogZG93biBwYWdlIHRhYmxlcy4KJiM0MzsJICoKJiM0MzsJICogV2hlbiB3YWxraW5nIGtlcm5lbCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYWxzbyBiZSBoZWxkCiYjNDM7CSAqIHRvIGFjY291bnQgZm9yIHBhZ2UgdGFibGUgZnJlZWluZyBvbiB2bWFwIGh1Z2UgcGFnZSBtYXBwaW5nLgogCSAqLwogCW1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSk7CiYjNDM7CS8qCiYjNDM7CSAqIHg4NiwgYXJtNjQgcHRkdW1wIGFsbG93IHdhbGtzIG9mIGVmaSBtbSYjMzk7cyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3MKJiM0MzsJICogb2YgYXJiaXRyYXJ5IG1tJiMzOTtzLgomIzQzOwkgKgomIzQzOwkgKiBIb3dldmVyLCB0aGV5IGJvdGggbXVzdCBhbHNvIGhvbGQgdGhlIGluaXRfbW0gbG9jayB0byBhY2NvdW50IGZvcgomIzQzOwkgKiBjb25jdXJyZW50IGtlcm5lbCBwYWdlIHRhYmxlIGZyZWVpbmcuCiYjNDM7CSAqLwomIzQzOwltbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoJmFtcDtpbml0X21tKTsKJiM0MzsKJiM0MzsJaWYgKHN0YXJ0ICZndDs9IGVuZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiB3YWxrX3BnZF9yYW5nZShzdGFydCwgZW5kLCAmYW1wO3dhbGspOwogfQpkaWZmIC0tZ2l0IGEvbW0vcHRkdW1wLmMgYi9tbS9wdGR1bXAuYwppbmRleCA5NzMwMjAwMDAwOTZjZi4uNTg1MTA5NmU2ZjY1NmMgMTAwNjQ0Ci0tLSBhL21tL3B0ZHVtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3B0ZHVtcC5jCkBAIC0xNzgsMTEgJiM0MzsxNzgsMTggQEAgdm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQogCiAJZ2V0X29ubGluZV9tZW1zKCk7CiAJbW1hcF93cml0ZV9sb2NrKG1tKTsKJiM0MzsJLyogVG8gc3RhYmlsaXNlIGtlcm5lbCBwYWdlIHRhYmxlcyB3ZSBtdXN0IGhvbGQgdGhlIGluaXRfbW0gbG9jayB0b28uICovCiYjNDM7CWlmIChtbSAhPSAmYW1wO2luaXRfbW0pCiYjNDM7CQltbWFwX3dyaXRlX2xvY2tfbmVzdGVkKCZhbXA7aW5pdF9tbSwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwomIzQzOwogCXdoaWxlIChyYW5nZS0mZ3Q7c3RhcnQgIT0gcmFuZ2UtJmd0O2VuZCkgewogCQl3YWxrX3BhZ2VfcmFuZ2VfZGVidWcobW0sIHJhbmdlLSZndDtzdGFydCwgcmFuZ2UtJmd0O2VuZCwKIAkJCQkgICAgICAmYW1wO3B0ZHVtcF9vcHMsIHBnZCwgc3QpOwogCQlyYW5nZSYjNDM7JiM0Mzs7CiAJfQomIzQzOwomIzQzOwlpZiAobW0gIT0gJmFtcDtpbml0X21tKQomIzQzOwkJbW1hcF93cml0ZV91bmxvY2soJmFtcDtpbml0X21tKTsKIAltbWFwX3dyaXRlX3VubG9jayhtbSk7CiAJcHV0X29ubGluZV9tZW1zKCk7CiAKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAxYWZjYTM1NjhiOWI2NS4uZjRmYTIyN2E4ZDdmMDQgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL3RsYmZsdXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NobXBhcmFtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZV9vd25lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy92bWFsbG9jLmgmZ3Q7CkBAIC0xNTgsMTAgJiM0MzsxNTksMjEgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBNRF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocG1kX3ByZXNlbnQoKnBtZCkgJmFtcDsmYW1wOyAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCiYjNDM7CQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKgomIzQzOwkgKiBBY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBleGNsdWRlIHB0ZHVtcCwgd2hpY2ggd2Fsa3MKJiM0MzsJICoga2VybmVsIHBhZ2UgdGFibGVzIGl0IGRvZXMgbm90IG93biB1bmRlciB0aGUgbW1hcCB3cml0ZSBsb2NrLgomIzQzOwkgKgomIzQzOwkgKiBDb25jdXJyZW50IHJlYWQgbG9jayBob2xkZXJzIGFyZSBzYWZlOiBlYWNoIGV4Y2x1c2l2ZWx5IG93bnMKJiM0MzsJICogdGhlIHJhbmdlIGl0IG9wZXJhdGVzIG9uIGFuZCBjYW5ub3QgcmVhY2ggdGhpcyBwYWdlIHRhYmxlLgomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgJmFtcDtpbml0X21tKSB7CiYjNDM7CQlpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCkBAIC0yMTAsMTAgJiM0MzsyMjIsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocHVkX3ByZXNlbnQoKnB1ZCkgJmFtcDsmYW1wOyAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpCiYjNDM7CQlyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqLwomIzQzOwlzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCAmYW1wO2luaXRfbW0pIHsKJiM0MzsJCWlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKQEAgLTI2MiwxMCAmIzQzOzI3OSwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJaWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKQogCQlyZXR1cm4gMDsKIAotCWlmIChwNGRfcHJlc2VudCgqcDRkKSAmYW1wOyZhbXA7ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKQotCQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFwNGRfcHJlc2VudCgqcDRkKSkKJiM0MzsJCXJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpOwogCi0JcmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CS8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovCiYjNDM7CXNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsICZhbXA7aW5pdF9tbSkgewomIzQzOwkJaWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CX0KIH0KIAogc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQ4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN5bmNocm9uaXphdGlvbiBDaGFuZ2UgaW4gQ29yZSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHN5bmNocm9uaXphdGlvbiB3aXRoaW4gY3JpdGljYWwgYXJlYXM6IHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYywgYW5kIENQQSBjb2RlLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHJlcGxhY2luZyBhIHN0YXRpYyBrZXkgYXBwcm9hY2ggb24gYXJtNjQgd2l0aCBgaW5pdF9tbS5tbWFwX2xvY2tgIGFuZCBhZGRpbmcgbG9ja2luZyBpbiB4ODYgZm9yIENQQSBhbmQgdm1hbGxvYyBodWdlIHBhZ2Ugc2V0dXAuIFRoaXMgaXMgYSBzb2xpZCBtb3ZlLCByZXBsYWNpbmcgYSBwb3RlbnRpYWwgd2VhayBzcG90IHdpdGggc29tZXRoaW5nIG1vcmUgcm9idXN0LgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGFjdHVhbCBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIG9uIGFybTY0LCBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIHJlbW92aW5nIHRoZSBgYXJtNjRfcHRkdW1wX2xvY2tfa2V5YCBzdGF0aWMga2V5IGxvZ2ljIGluIGBwbWRfZnJlZV9wdGVfcGFnZWAgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAsIGFsb25nIHdpdGggcmVtb3ZhbCBvZiBgYXJtNjRfcHRkdW1wX3dhbGtfcGdkYC4gVGhlbiwgeDg2IGlzIGdldHRpbmcgYG1tYXBfd3JpdGVfbG9ja2AgYW5kIGBtbWFwX3JlYWRfbG9ja2AgYXJvdW5kIENQQSBjb2xsYXBzZSBhbmQgYF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBjYWxscy4gVGhlbiBpbiBgbW0vcGFnZXdhbGsuY2AgYW5kIGBtbS9wdGR1bXAuY2AgdGhleSYjMzk7cmUgdXBkYXRpbmcgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AgYW5kIGBwdGR1bXBfd2Fsa19wZ2RgLCByZXNwZWN0aXZlbHksIHRvIHVzZSB0aGUgYGluaXRfbW0ubW1hcF9sb2NrYC4gRmluYWxseSwgaW4gYG1tL3ZtYWxsb2MuY2AsIHRoZSBwYXRjaCBhZGRzIGBzY29wZWRfY29uZF9ndWFyZGAgdGhhdCBhdHRlbXB0cyBhbiBgbW1hcF9yZWFkX2xvY2tgIGFyb3VuZCB0aGUgYHZtYXBfdHJ5X2h1Z2VfKmAgZnVuY3Rpb25zLgoKVGhpcyBtZWFucyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBkZWVwIG9uZSwgYXMgaXQgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEFuZCBpdCYjMzk7cyByZWFjaGFibGUgY29kZSwgd2hpY2ggbWVhbnMgd2UgKmFic29sdXRlbHkqIG5lZWQgdG8gZnV6eiBpdC4gV2UmIzM5O3ZlIGdvdCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByYWNlcyBvciBsb2NraW5nIGlzc3Vlcy4gV2UgY2FuJiMzOTt0IGxldCBzb21ldGhpbmcgbGlrZSB0aGlzIHNsaXAgYnksIHNvIHdlJiMzOTtyZSBnb2luZyB0byBuZWVkIHRvIGxvb2sgY2FyZWZ1bGx5IGF0IHRob3NlIGZ1bmN0aW9ucyBJIG5vdGVkOiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBwdGR1bXBfd2Fsa19wZ2RgLCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCwgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAuIFRoZXNlIGFyZSBvdXIgcHJpbWFyeSB0YXJnZXRzIGZvciB0ZXN0aW5nIGFuZCBhbmFseXNpcy4KCldhaXQgYSBzZWNvbmQsIHB0ZHVtcOKApiB3YXNuJiMzOTt0IHRoYXQgdHJpZ2dlcmVkIHRocm91Z2ggZGVidWdmcz8gSSBuZWVkIHRvIGNoZWNrIGlmIHdlIHJlcXVpcmUgYW55IHNwZWNpYWwgYFBURFVNUGAgY29uZmlndXJhdGlvbnMgdG8gdHJpZ2dlciB0aGlzLiBJJiMzOTtsbCBzZWFyY2ggdGhlIEtjb25maWcgdG8gc2VlIGlmIHdlIG5lZWQgYSBzcGVjaWZpYyBjb25maWcgdG8gZW5hYmxlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQVERVTVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZz00NT1pZiBLVk1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDYtXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBQVERVTVBfU1RBR0UyX0RFQlVHRlNcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ByZXNlbnQgdGhlIHN0YWdlLTIgcGFnZXRhYmxlcyB0byBkZWJ1Z2ZzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0yMTY9Y29uZmlnIEFSQ0hfSEFTX1BURFVNUFxuLS1cbm1tL0tjb25maWcuZGVidWctMjE4LVxubW0vS2NvbmZpZy5kZWJ1ZzoyMTk6Y29uZmlnIFBURFVNUFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjAtXHRib29sXG5tbS9LY29uZmlnLmRlYnVnLTIyMS1cbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xubW0vS2NvbmZpZy5kZWJ1Zy0yMjMtXHRib29sIFwmIzM0O0V4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDM0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBwdGR1bXAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBgUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBrZXkgdG8gZW5hYmxpbmcgcHRkdW1wLCBnb3QgaXQuIE5vdywgbXkgZmlyc3QgbW92ZSBpcyB0byBkaWcgaW50byBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgaW4gcGxhY2UsIHdoYXQgYmFzZSBmZWF0dXJlcyBpdCByZWxpZXMgb24uIEkmIzM5O20gdGhpbmtpbmcgYnVpbGQgb3B0aW9ucywga2VybmVsIGZlYXR1cmVzIOKAkyB0aGF0IGtpbmQgb2YgdGhpbmcuIExldCYjMzk7cyBzZWUgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzIGJlZm9yZSBJIHN0YXJ0IGV4cGVyaW1lbnRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBURFVNUF9ERUJVR0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MjE5PWNvbmZpZyBQVERVTVBcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTIyMS1cbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xubW0vS2NvbmZpZy5kZWJ1Zy0yMjMtXHRib29sIFwmIzM0O0V4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjkxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGludG8gdGhlc2UgZGVidWcgb3B0aW9ucz8gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnLmRlYnVnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyMjIuIEkmIzM5O20gaG9waW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgb2YgdGhlc2UgZGVidWdnaW5nLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgaXMgZGVmaW5lZC4gVGhhdCBzZWN0aW9uIGxpa2VseSBjb250YWlucyB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdG8gbWFuaXB1bGF0ZSB0aGUgYmVoYXZpb3IgSSYjMzk7bSBhZnRlci4gSXQmIzM5O3MgdGhlIHVzdWFsIHJvdXRlIHdoZW4gY2hhc2luZyBkb3duIHRoZXNlIGtpbmRzIG9mIGNvbmZpZ3VyYXRpb25zLCB0aGUgS2NvbmZpZyBmaWxlcyB1c3VhbGx5IGtlZXAgYSBnb29kIHRyYWNrIHJlY29yZCBvZiBob3cgdGhlc2UgYXJlIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE1Olx0XG4gMjE2Olx0Y29uZmlnIEFSQ0hfSEFTX1BURFVNUFxuIDIxNzpcdFx0Ym9vbFxuIDIxODpcdFxuIDIxOTpcdGNvbmZpZyBQVERVTVBcbiAyMjA6XHRcdGJvb2xcbiAyMjE6XHRcbiAyMjI6XHRjb25maWcgUFREVU1QX0RFQlVHRlNcbiAyMjM6XHRcdGJvb2wgXCYjMzQ7RXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1wmIzM0O1xuIDIyNDpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcbiAyMjU6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbiAyMjY6XHRcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXG4gMjI3Olx0XHRzZWxlY3QgUFREVU1QXG4gMjI4Olx0XHRoZWxwXG4gMjI5Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gc2hvdyB0aGUga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgaW4gYVxuIDIzMDpcdFx0ICBkZWJ1Z2ZzIGZpbGUuIFRoaXMgaW5mb3JtYXRpb24gaXMgb25seSB1c2VmdWwgZm9yIGtlcm5lbCBkZXZlbG9wZXJzXG4gMjMxOlx0XHQgIHdobyBhcmUgd29ya2luZyBpbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYXJlYXMgb2YgdGhlIGtlcm5lbC5cbiAyMzI6XHRcdCAgSXQgaXMgcHJvYmFibHkgbm90IGEgZ29vZCBpZGVhIHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgaW4gYSBwcm9kdWN0aW9uXG4gMjMzOlx0XHQgIGtlcm5lbC5cbiAyMzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzcyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgRGVidWdnaW5nIE9wdGlvbnMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBkZWVwZXIgbG9vayBhdCB3aGF0JiMzOTtzIGdvaW5nIG9uLi4uIHRoZSBpbml0aWFsIHRob3VnaHQgaXMsIGBQVERVTVBfREVCVUdGU2Agc2VlbXMgdG8gYmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgZm9yIHRoYXQga2luZCBvZiBkZXRhaWxlZCBkZWJ1Z2dpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoYXQgdG9nZ2xlZCBvbi4gTm93LCBhIG5hZ2dpbmcgbWVtb3J5Li4uIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYERFQlVHX1dYYCBmdW5jdGlvbmFsaXR5IHNvbWV0aW1lcyBsZXZlcmFnZXMgdGhlIGBwdGR1bXBgIGNhcGFiaWxpdGllcy4gSXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHdoYXQgYERFQlVHX1dYYCBpcyBzdXBwb3NlZCB0byBhY2hpZXZlLiBPa2F5LCBiZXR0ZXIgdmVyaWZ5IHRoYXQgcmVsYXRpb25zaGlwIGRpcmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhleSBpbnRlcnJlbGF0ZSB0byBiZSBjZXJ0YWluIG9mIG15IHBhdGggZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFQlVHX1dYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MTgzPWNvbmZpZyBBUkNIX0hBU19ERUJVR19XWFxuLS1cbm1tL0tjb25maWcuZGVidWctMTg1LVxubW0vS2NvbmZpZy5kZWJ1ZzoxODY6Y29uZmlnIERFQlVHX1dYXG5tbS9LY29uZmlnLmRlYnVnLTE4Ny1cdGJvb2wgXCYjMzQ7V2FybiBvbiBXJiM0MztYIG1hcHBpbmdzIGF0IGJvb3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBvZiB0aGlzIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYG1tL0tjb25maWcuZGVidWdgLiBJIHJlY2FsbCB0aGlzIGZpbGUgdXN1YWxseSBob3VzZXMgdGhlIEtjb25maWcgb3B0aW9ucyBzcGVjaWZpYyB0byBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1Z2dpbmcgZmVhdHVyZXMuIExldCYjMzk7cyBuYXZpZ2F0ZSB0byBhcm91bmQgbGluZSAxODYuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBsaW5lIG9yIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB3aWxsIGhhdmUgdGhlIGtleSB0byB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgLSBhIHNwZWNpZmljIGZlYXR1cmUgb3IgYSByZWxhdGVkIGNvbmRpdGlvbmFsIHRoYXQgZ292ZXJucyBpdHMgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdGhlbHBcbiAxODE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIHRlc3RjYXNlIGZvciB0aGUgc2V0dGluZyByb2RhdGEgcmVhZC1vbmx5LlxuIDE4MjpcdFxuIDE4MzpcdGNvbmZpZyBBUkNIX0hBU19ERUJVR19XWFxuIDE4NDpcdFx0Ym9vbFxuIDE4NTpcdFxuIDE4NjpcdGNvbmZpZyBERUJVR19XWFxuIDE4NzpcdFx0Ym9vbCBcJiMzNDtXYXJuIG9uIFcmIzQzO1ggbWFwcGluZ3MgYXQgYm9vdFwmIzM0O1xuIDE4ODpcdFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19ERUJVR19XWFxuIDE4OTpcdFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19QVERVTVBcbiAxOTA6XHRcdGRlcGVuZHMgb24gTU1VXG4gMTkxOlx0XHRzZWxlY3QgUFREVU1QXG4gMTkyOlx0XHRoZWxwXG4gMTkzOlx0XHQgIEdlbmVyYXRlIGEgd2FybmluZyBpZiBhbnkgVyYjNDM7WCBtYXBwaW5ncyBhcmUgZm91bmQgYXQgYm9vdC5cbiAxOTQ6XHRcbiAxOTU6XHRcdCAgVGhpcyBpcyB1c2VmdWwgZm9yIGRpc2NvdmVyaW5nIGNhc2VzIHdoZXJlIHRoZSBrZXJuZWwgaXMgbGVhdmluZyBXJiM0MztYXG4gMTk2Olx0XHQgIG1hcHBpbmdzIGFmdGVyIGFwcGx5aW5nIE5YLCBhcyBzdWNoIG1hcHBpbmdzIGFyZSBhIHNlY3VyaXR5IHJpc2suXG4gMTk3Olx0XG4gMTk4Olx0XHQgIExvb2sgZm9yIGEgbWVzc2FnZSBpbiBkbWVzZyBvdXRwdXQgbGlrZSB0aGlzOlxuIDE5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTI0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgc2V0dGluZyBgREVCVUdfV1hgIGFsc28gYXV0b21hdGljYWxseSBlbmFibGVzIGBQVERVTVBgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBnbyBmb3J3YXJkLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIHRoYXQmIzM5O3MgdG9wIG9mIG1pbmQgaXMgdG8gY2hlY2sgaWYgd2UgaGF2ZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHRpZWQgdG8gdm1hbGxvYyBodWdlIHBhZ2VzLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoZXkgYWZmZWN0IHRoZSBzeXN0ZW0sIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyB0aGF0IGNvdWxkIGluZmx1ZW5jZSBiZWhhdmlvci4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4tLVxuYXJjaC9LY29uZmlnLTEwOTktI1xuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcbmFyY2gvS2NvbmZpZy0xMTAxLVx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3MuIFRoZSB0YXNrIGF0IGhhbmQgbGlrZWx5IGludm9sdmVzIHVuZGVyc3RhbmRpbmcgb3IgbW9kaWZ5aW5nIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIEdpdmVuIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBtb3N0IHJlbGV2YW50IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgYXJjaC9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBob3cgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIGhhbmRsZWQuCgpCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBwcm9qZWN0cyBhcmUgb3JnYW5pemVkLCBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBjZW50cmFsIGRyaXZlcnMgZm9yIHRoZSBtZW51Y29uZmlnIGludGVyZmFjZS4gSSB3aWxsIGhlYWQgc3RyYWlnaHQgdG8gbGluZSAxMTAwLiBUaGlzIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGhlIHNlY3Rpb24gSSYjMzk7bSBsb29raW5nIGZvciAtIGEgbW9kdWxlLCBmZWF0dXJlIG9yIGdyb3VwIG9mIG9wdGlvbnMgcmVsYXRlZCB0byBteSBhcmVhIG9mIGZvY3VzLiBJJiMzOTtsbCB0cnkgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiB0aGF0IGxpbmUuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZHMgdGhyb3VnaCBkZXBlbmRlbmNpZXMsIGlmIG5lY2Vzc2FyeSwgYW5kIHNlZSBob3cgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiB0aWVzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGZ1bGZpbGwgd2hhdGV2ZXIgcmVxdWlyZW1lbnRzIEkmIzM5O20gdGFja2xpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDkwOlx0XHRib29sXG4xMDkxOlx0XG4xMDkyOlx0Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVBcbjEwOTM6XHRcdGJvb2xcbjEwOTQ6XHRcbjEwOTU6XHQjXG4xMDk2Olx0IyAgQXJjaHMgdGhhdCBzZWxlY3QgdGhpcyB3b3VsZCBiZSBjYXBhYmxlIG9mIFBNRC1zaXplZCB2bWFwcyAoaS5lLixcbjEwOTc6XHQjICBhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZCgpIHJldHVybnMgdHJ1ZSkuIFRoZSBWTV9BTExPV19IVUdFX1ZNQVAgZmxhZ1xuMTA5ODpcdCMgIG11c3QgYmUgdXNlZCB0byBlbmFibGUgYWxsb2NhdGlvbnMgdG8gdXNlIGh1Z2VwYWdlcy5cbjEwOTk6XHQjXG4xMTAwOlx0Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcbjExMDE6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0hVR0VfVk1BUFxuMTEwMjpcdFx0Ym9vbFxuMTEwMzpcdFxuMTEwNDpcdGNvbmZpZyBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVcbjExMDU6XHRcdGJvb2xcbjExMDY6XHRcbjExMDc6XHQjIEFyY2hzIHRoYXQgd2FudCB0byB1c2UgcG1kX21rd3JpdGUgb24ga2VybmVsIG1lbW9yeSBuZWVkIGl0IGRlZmluZWQgZXZlblxuMTEwODpcdCMgaWYgdGhlcmUgYXJlIG5vIHVzZXJzcGFjZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyB0aGF0IHVzZSBpdFxuMTEwOTpcdGNvbmZpZyBBUkNIX1dBTlRfS0VSTkVMX1BNRF9NS1dSSVRFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzgzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBIdWdlIHZtYWxsb2MgQ29uZmlndXJhdGlvbioqCgpIbW0sIGxldCYjMzk7cyBzZWUuLi5JJiMzOTttIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LiBSaWdodCwgc28gYEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGlzIGEgYml0IG9mIGEgc25lYWt5IG9uZS4gSXQmIzM5O3Mgbm90IGEgc3RyYWlnaHRmb3J3YXJkIG9wdGlvbiB5b3Ugc2VlIGluIHRoZSBtYWluIGNvbmZpZyBtZW51cywgaXMgaXQ/IEl0JiMzOTtzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgdHlwaWNhbGx5IHNlbGVjdGVkIGltcGxpY2l0bHkgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLgoKVGhlIHJlYWwgcXVlc3Rpb24gSSBuZWVkIGFuc3dlcmVkIGlzOiBpcyB0aGVyZSBhbiAqZXhwbGljaXQqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgSSBjYW4gdHdlYWssIHRvIGFjdHVhbGx5ICplbmFibGUqIG9yIGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgaHVnZSB2bWFsbG9jPyBJIGtub3cgdGhhdCBvbiBzb21lIGFyY2hpdGVjdHVyZXMgeW91IG1pZ2h0IGhhdmUgc29tZXRoaW5nIGxpa2UgYENPTkZJR19IVUdFVExCX1ZNQUxMT0NgIHRvIHR1cm4gaXQgb24sIGJ1dCB3aGF0IGFib3V0IHRoZSBicm9hZGVyIHNjb3BlPyBEbyBJIG5lZWQgdG8gbG9vayBmb3IgYSBkZXBlbmRlbmN5LCBzb21lIG90aGVyIGFyY2gtc3BlY2lmaWMgZmxhZywgb3IgcGVyaGFwcyBzb21ldGhpbmcgbmV3IGVudGlyZWx5PyBJIHdvbmRlciB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgYXJlIHRoZXJlIHNvbWUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcywgd2l0aCB3aGljaCBJIGFtIG1vcmUgZmFtaWxpYXIsIHRvIGNoZWNrPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcuKkhVR0VfVk1BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTA5Mj1jb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxuLS1cbmFyY2gvS2NvbmZpZy0xMDk5LSNcbmFyY2gvS2NvbmZpZzoxMTAwOmNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5hcmNoL0tjb25maWctMTEwMS1cdGRlcGVuZHMgb24gSEFWRV9BUkNIX0hVR0VfVk1BUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc1NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYEhVR0VfVk1BUGAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIG1lbnRhbCBnZWFycyBhcmUgYWxyZWFkeSB0dXJuaW5nLiAmIzM0O0NoZWNrIGBIVUdFX1ZNQVBgJiMzNDsg4oCTIHRoYXQmIzM5O3MgYSBwcmV0dHkgc3BlY2lmaWMgZGlyZWN0aXZlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB3aHkgYXJlIHdlIGxvb2tpbmcgYXQgdGhlIGBIVUdFX1ZNQVBgPyBXaGF0IHByb2JsZW0gYXJlIHdlIHRyeWluZyB0byBzb2x2ZSwgb3Igd2hhdCBhc3BlY3Qgb2YgdGhlIHN5c3RlbSBhcmUgd2UgY3VycmVudGx5IGludmVzdGlnYXRpbmc/JiMzNDsuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGNvbnRleHQuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxhcmdlIHBhZ2VzLiBJcyB0aGVyZSBhIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlPyBQZXJmb3JtYW5jZSBib3R0bGVuZWNrPyBVbmV4cGVjdGVkIGJlaGF2aW9yIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcyBiZWluZyB1c2VkIChvciBub3QgYmVpbmcgdXNlZCkgYXMgZXhwZWN0ZWQ/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB0b29scyBhbmQgbWV0aG9kcyBJJiMzOTtkIGxpa2VseSB1c2UuIEFtIEkgcHVsbGluZyBmcm9tIHRoZSBkZWJ1Z2dpbmcgdG9vbHMgdG8gcnVuIGluIHJlYWwtdGltZSBtb2RlPyBBbSBJIGdvaW5nIGJhY2sgdG8gcHJldmlvdXMgbG9ncyB0byBmaW5kIHRoZSBjYXVzZT8gUGVyaGFwcyBJIGhhdmUgYSBzY3JpcHQgdGhhdCBnZW5lcmF0ZXMgYSByZXBvcnQ/CgpTcGVjaWZpY2FsbHksIEkmIzM5O20gY29uc2lkZXJpbmcgd2hhdCBkYXRhIEkgd2lsbCBiZSBsb29raW5nIGZvcjogVGhlIHNpemUgb2YgdGhlIGBIVUdFX1ZNQVBgLCBpdHMgY3VycmVudCB1c2FnZSwgYW55IGZyYWdtZW50YXRpb24sIGFuZCBhbnkgcmVsZXZhbnQgZXJyb3IgbWVzc2FnZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBzdGF0ZSBvZiB0aGUgVk1BUCB3aXRoIHRoZSBvdGhlciBtZW1vcnkgc3Vic3lzdGVtcyBpbiB0aGUgc3lzdGVtLiBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgbXkgaHlwb3RoZXNpczogcGVyaGFwcyB0aGVyZSYjMzk7cyBhIG1pc2NvbmZpZ3VyYXRpb24gb2YgaHVnZSBwYWdlIHJlc2VydmF0aW9ucywgb3IgYSByZXNvdXJjZSBjb25zdHJhaW50IGxpbWl0aW5nIHRoZSBhbGxvY2F0aW9uIG9mIGxhcmdlIHBhZ2VzLCBsZWFkaW5nIHRvIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIG9yIGV2ZW4gYXBwbGljYXRpb24gY3Jhc2hlcy4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMga2luZCBvZiBpc3N1ZSBjYW4gYmUgc3VidGxlIGFuZCByZXF1aXJlIGEgbnVhbmNlZCB1bmRlcnN0YW5kaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYW5kIHN5c3RlbSBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnLipIVUdFX1ZNQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9mZWF0dXJlcy92bS9odWdlLXZtYXAvYXJjaC1zdXBwb3J0LnR4dC0yLSMgRmVhdHVyZSBuYW1lOiAgICAgICAgICBodWdlLXZtYXBcbkRvY3VtZW50YXRpb24vZmVhdHVyZXMvdm0vaHVnZS12bWFwL2FyY2gtc3VwcG9ydC50eHQ6MzojICAgICAgICAgS2NvbmZpZzogICAgICAgSEFWRV9BUkNIX0hVR0VfVk1BUFxuRG9jdW1lbnRhdGlvbi9mZWF0dXJlcy92bS9odWdlLXZtYXAvYXJjaC1zdXBwb3J0LnR4dC00LSMgICAgICAgICBkZXNjcmlwdGlvbjogICBhcmNoIHN1cHBvcnRzIHRoZSBhcmNoX3ZtYXBfcHVkX3N1cHBvcnRlZCgpIGFuZCBhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZCgpIFZNIEFQSXNcbi0tXG5hcmNoL0tjb25maWc9MTA4OT1jb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuLS1cbmFyY2gvS2NvbmZpZy0xMDkxLVxuYXJjaC9LY29uZmlnOjEwOTI6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVBcbmFyY2gvS2NvbmZpZy0xMDkzLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMzMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVm1hbGxvYywgQ1BBLCBhbmQgdGhlIEFyY2hpdGVjdHVyZSBEYW5jZSoqCgpSaWdodCwgc28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGh1Z2Ugdm1hbGxvYyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGNhbiBhY3R1YWxseSBoYW5kbGUgaXQuIFRoYXQmIzM5O3MgZ29vZCwgZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50IGlzIGtleS4gQnV0IHRoZW4sIG15IG1pbmQganVtcHMgdG8gc29tZXRoaW5nIG1vcmUgdGFyZ2V0ZWQ6IENQQSwgb3IgYGNoYW5nZV9wYWdlX2F0dHJgLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGFuIHg4NiB0aGluZywgaXNuJiMzOTt0IGl0PyBNeSBpbnR1aXRpb24gaXMgc2NyZWFtaW5nICYjMzQ7eDg2IHNwZWNpZmljJiMzNDsgYW5kIEkgbmVlZCB0byBjaGVjayBteXNlbGYuCgpOb3csIG15IHJlYWwgcXVlc3Rpb24gaXM6IGlzIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbj8gQW55IHJlbGV2YW50IEtjb25maWcgZW50cnksIG1heWJlPyBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBhbnkgd2F5IHRvIGNvbnRyb2wgQ1BBJiMzOTtzIGJlaGF2aW9yLCB0b2dnbGUgaXQgb24gb3Igb2ZmLCBvciBhZGp1c3QgaXRzIHBhcmFtZXRlcnMuIEtub3dpbmcgdGhhdCB3aWxsIGJlIHBpdm90YWwgZm9yIGFkYXB0aW5nIHRoaXMgdG8gc3BlY2lmaWMgc3lzdGVtcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb25maWcgb3B0aW9ucyB0byBzZWUgd2hhdCBjb250cm9sIEkgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnLipDUEEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3Q9MTUwOT1GRUNfR0VUXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QtMTUxMS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0OjE1MTI6R2V0cyBGRUMgY29uZmlndXJhdGlvbiBhbmQgc3RhdGUgbGlrZSBgYEVUSFRPT0xfR0ZFQ1BBUkFNYGAgaW9jdGwgcmVxdWVzdC5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0LTE1MTMtXG4tLVxuYXJjaC94ODYvS2NvbmZpZz0xNDY2PWNvbmZpZyBYODZfRElSRUNUX0dCUEFHRVNcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE0NzQtXG5hcmNoL3g4Ni9LY29uZmlnOjE0NzU6Y29uZmlnIFg4Nl9DUEFfU1RBVElTVElDU1xuYXJjaC94ODYvS2NvbmZpZy0xNDc2LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3RhdGlzdGljIGZvciBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGVcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLmRlYnVnPTE1Mz1jb25maWcgREVCVUdfQk9PVF9QQVJBTVNcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLmRlYnVnLTE1OS1cbmFyY2gveDg2L0tjb25maWcuZGVidWc6MTYwOmNvbmZpZyBDUEFfREVCVUdcbmFyY2gveDg2L0tjb25maWcuZGVidWctMTYxLVx0Ym9vbCBcJiMzNDtDUEEgc2VsZi10ZXN0IGNvZGVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFBvdGVudGlhbCBEZWJ1Z2dpbmcgQWlkcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzLi4uIGBDUEFfREVCVUdgIG1pZ2h0IGJlIGEgdXNlZnVsIHRvb2wgaGVyZS4gSSByZWNhbGwgc2VlaW5nIHRoYXQgZmxhZyBzb21ld2hlcmUgYW5kIG5vdyYjMzk7cyB0aGUgdGltZSB0byBpbnZlc3RpZ2F0ZS4gVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgaXQgd29ya3MsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG91dCBgYXJjaC94ODYvS2NvbmZpZy5kZWJ1Z2AuIEkgc2VlbSB0byByZW1lbWJlciBpdCBiZWluZyBkZWZpbmVkIGFyb3VuZCBsaW5lIDE2MC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IGlzc3VlLiBMZXQgbWUgZ3JhYiB0aGUgc291cmNlIGFuZCBoYXZlIGEgcXVpY2sgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTU6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXG4gMTU2Olx0XHRkZXBlbmRzIG9uIERFQlVHX0ZTXG4gMTU3Olx0XHRoZWxwXG4gMTU4Olx0XHQgIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugc3RydWN0IGJvb3RfcGFyYW1zIHRvIGJlIGV4cG9ydGVkIHZpYSBkZWJ1Z2ZzLlxuIDE1OTpcdFxuIDE2MDpcdGNvbmZpZyBDUEFfREVCVUdcbiAxNjE6XHRcdGJvb2wgXCYjMzQ7Q1BBIHNlbGYtdGVzdCBjb2RlXCYjMzQ7XG4gMTYyOlx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxuIDE2MzpcdFx0aGVscFxuIDE2NDpcdFx0ICBEbyBjaGFuZ2VfcGFnZV9hdHRyKCkgc2VsZi10ZXN0cyBldmVyeSAzMCBzZWNvbmRzLlxuIDE2NTpcdFxuIDE2NjpcdGNvbmZpZyBERUJVR19FTlRSWVxuIDE2NzpcdFx0Ym9vbCBcJiMzNDtEZWJ1ZyBsb3ctbGV2ZWwgZW50cnkgY29kZVwmIzM0O1xuIDE2ODpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcbiAxNjk6XHRcdGhlbHBcbiAxNzA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzYW5pdHkgY2hlY2tzIGluIHg4NiYjMzk7cyBsb3ctbGV2ZWwgZW50cnkgY29kZS5cbiAxNzE6XHRcdCAgU29tZSBvZiB0aGVzZSBzYW5pdHkgY2hlY2tzIG1heSBzbG93IGRvd24ga2VybmVsIGVudHJpZXMgYW5kXG4gMTcyOlx0XHQgIGV4aXRzIG9yIG90aGVyd2lzZSBpbXBhY3QgcGVyZm9ybWFuY2UuXG4gMTczOlx0XG4gMTc0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzc5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIENQQSoqCgpPa2F5LCBzbyBgQ1BBX0RFQlVHYCBoYXMgdGhpcyBuZWF0IHRyaWNrIHdoZXJlIGl0IHJ1bnMgYGNoYW5nZV9wYWdlX2F0dHIoKWAgc2VsZi10ZXN0cyBldmVyeSAzMCBzZWNvbmRzLiBUaGF0JiMzOTtzIGZhbnRhc3RpYyEgVGhpcyBnaXZlcyBtZSBhIHNvbGlkIG9wcG9ydHVuaXR5IGZvciBmdXp6aW5nIENQQS4KClRoZSBmaXJzdCBzdGVwIGhlcmUgaXMgdG8gZW5zdXJlIEkmIzM5O3ZlIGVuYWJsZWQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zOiBgUFREVU1QX0RFQlVHRlNgLCBgREVCVUdfV1hgLCBhbmQsIG9mIGNvdXJzZSwgYENQQV9ERUJVR2AuIFRob3NlIGFyZSBlc3NlbnRpYWwuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGtleSBzeW1ib2xzIHRvIHRhcmdldC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBmb3Igbm93OiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBwdGR1bXBfd2Fsa19wZ2RgLCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCwgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAuCgpJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb25zIG9mIGBwbWRfZnJlZV9wdGVfcGFnZWAgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAganVzdCB0byBiZSBzdXJlLiBBIHF1aWNrIHNlYXJjaCByZXZlYWxzIHRoYXQgdGhleSBhcmUgaW4gYGFyY2gvYXJtNjQvbW0vbW11LmNgLiBBaCwgYW5kIHdhaXQsIGB2bWFwX3RyeV9odWdlX3BtZGAgY2FsbHMgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgd2hpY2ggY291bGQgYmUgaW50ZXJlc3RpbmcuIE5vdywgaXMgYHBtZF9mcmVlX3B0ZV9wYWdlYCBkZWZpbmVkICpvbmx5KiBmb3IgQVJNNjQ/IEkgaGF2ZSB0byBjb25zaWRlciBvdGhlciBhcmNoaXRlY3R1cmVzIGZvciBicm9hZGVyIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfZnJlZV9wdGVfcGFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL21tdS5jPTE4NTc9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2NC1cbmFyY2gvYXJtNjQvbW0vbW11LmM6MTg2NTppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2Ni17XG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYz0xODg0PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMTkwMy1cdFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTkwNDpcdFx0XHRwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTtcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTkwNS1cdH0gd2hpbGUgKHBtZHAmIzQzOyYjNDM7LCBuZXh0ICYjNDM7PSBQTURfU0laRSwgbmV4dCAhPSBlbmQpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmM9MTY3NT1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jLTE2ODQtXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jOjE2ODU6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmMtMTY4Ni17XG4tLVxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmM9MTE3PWludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kKVxuLS1cbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jLTEyNC1cbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jOjEyNTppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMtMTI2LXtcbi0tXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM9NzE4PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc1NC0vKipcbmFyY2gveDg2L21tL3BndGFibGUuYzo3NTU6ICogcG1kX2ZyZWVfcHRlX3BhZ2UgLSBDbGVhciBQTUQgZW50cnkgYW5kIGZyZWUgUFRFIHBhZ2UuXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzU2LSAqIEBwbWQ6IFBvaW50ZXIgdG8gdGhlIFBNRFxuLS1cbmFyY2gveDg2L21tL3BndGFibGUuYy03NjEtICovXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NzYyOmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzYzLXtcbi0tXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzgyLSAqL1xuYXJjaC94ODYvbW0vcGd0YWJsZS5jOjc4MzppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc4NC17XG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjE3Nj1pbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIxNzc6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMTc4LSNlbHNlXHQvKiAhQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVAgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0yMjA0PXN0YXRpYyBpbmxpbmUgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMjA3LX1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIyMDg6c3RhdGljIGlubGluZSBpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjIwOS17XG4tLVxubW0vdm1hbGxvYy5jPTE0Mz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTE3Mi1cdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbm1tL3ZtYWxsb2MuYzoxNzM6XHRcdGlmICghcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcbm1tL3ZtYWxsb2MuYy0xNzQtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTgyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGluaXRpYWxseSB0aG91Z2h0IGl0IHdhcyBqdXN0IGZvY3VzZWQgb24gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucywgc2luY2UgdGhlIGVudHJ5IHBvaW50IHNlZW1zIHRvIGJlIGZyb20gYG1tL3ZtYWxsb2MuY2AuIEJ1dCBob2xkIG9uLCB0aGUgY2hhbmdlcyBhcmUgYWN0dWFsbHkgYnJvYWRlciB0aGFuIHRoYXQuIEkgc2VlIG1vZGlmaWNhdGlvbnMgaW4gYGFyY2gvYXJtNjQvbW0vbW11LmNgLCBzcGVjaWZpY2FsbHkgdG8gYHBtZF9mcmVlX3B0ZV9wYWdlYCBhbmQgYHB1ZF9mcmVlX3BtZF9wYWdlYC4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgdGhlIHg4NiBzaWRlLCB3aXRoIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCBjaGFuZ2luZyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBhbmQgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAuIEFsc28sIGl0IHRvdWNoZXMgcXVpdGUgYSBmZXcgb3RoZXIgYXJlYXMsIGluY2x1ZGluZyBgbW0vcGFnZXdhbGsuY2AsIGBtbS9wdGR1bXAuY2AgYW5kIGBtbS92bWFsbG9jLmNgIGFzIGV4cGVjdGVkLgoKVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGggYXJlOiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBwdGR1bXBfd2Fsa19wZ2RgLCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCwgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAuIEkgc2hvdWxkIHJlYWxseSBmb2N1cyBteSBhdHRlbnRpb24gb24gdW5kZXJzdGFuZGluZyBob3cgdGhlIGNoYW5nZXMgdG8gdGhlc2UgZnVuY3Rpb25zIGltcGFjdCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBmbG93LgoKTm93LCBhIHF1aWNrIG5vdGUsIEkgc2VlIHRoYXQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMgc3RhdGljIHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIEdpdmVuIHRoYXQgaXQmIzM5O3Mgc3RhdGljLCBJIHNob3VsZCB2ZXJpZnkgaXRzIHJlYWNoYWJpbGl0eSB0byBlbnN1cmUgaXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgdXNlZC4gTGV0IG1lIGNoZWNrIGlmIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHNvbWV0aGluZyBsaWtlIGBfX2NwYV9mbHVzaF90bGJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlbiBJJiMzOTtsbCBiZSBhYmxlIHRvIGRldGVybWluZSB0aGUgb3ZlcmFsbCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQxMj1zdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MTMtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQxNDpzdGF0aWMgdm9pZCBfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDE1LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ0NS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDQ2OnN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDQ3LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ1NC1cdHNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssIFx1MDAyNmluaXRfbW0pXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ1NTpcdFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDU2LX1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQ1OD1zdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ5My1cdGlmIChjcGEtXHUwMDNlZmxhZ3MgXHUwMDI2IENQQV9DT0xMQVBTRSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDk0Olx0XHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDk1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MDcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipBbmFseXppbmcgdGhlIENQQSBDYWxsIENoYWluKioKClJpZ2h0LCBzbyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBkZWZpbml0ZWx5IGJlaW5nIGludm9rZWQgYnkgYGNwYV9mbHVzaGAuIFRoYXQmIzM5O3MgZ29vZCB0byBoYXZlIGNvbmZpcm1lZC4gQW5kIGFzIEkgc3VzcGVjdGVkLCBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyB0aGUgY29yZSBmdW5jdGlvbiwgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gQ1BBLiBOb3csIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcXVpY2tseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgdm1hcF90cnlfaHVnZV9wbWRgIGlzIGRlY2xhcmVkIHN0YXRpY2FsbHkuIExldCBtZSBqdXN0IHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFwX3RyeV9odWdlX3BtZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9OTU9c3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0xNDItXG5tbS92bWFsbG9jLmM6MTQzOnN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL3ZtYWxsb2MuYy0xNDQtXHRcdFx0cGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LFxuLS1cbm1tL3ZtYWxsb2MuYz0xNzk9c3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0xOTItXG5tbS92bWFsbG9jLmM6MTkzOlx0XHRpZiAodm1hcF90cnlfaHVnZV9wbWQocG1kLCBhZGRyLCBuZXh0LCBwaHlzX2FkZHIsIHByb3QsXG5tbS92bWFsbG9jLmMtMTk0LVx0XHRcdFx0XHRtYXhfcGFnZV9zaGlmdCkpIHtcbi0tXG5tbS92bWFsbG9jLmM9MjA2PXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMjI3LVxubW0vdm1hbGxvYy5jOjIyODpcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG5tbS92bWFsbG9jLmMtMjI5LVx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuLS1cbm1tL3ZtYWxsb2MuYz0yNjM9c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0yODQtXG5tbS92bWFsbG9jLmM6Mjg1Olx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbm1tL3ZtYWxsb2MuYy0yODYtXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDk1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBtaW5lOgoKKipTdGF0aWMgQW5hbHlzaXMgYW5kIFBvdGVudGlhbCBIb3RzcG90cyoqCgpSaWdodCwgdGhpcyBmZWVscyBwcmV0dHkgc3RhdGljLCBvbiB0aGUgc3VyZmFjZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBzb21lIGtleSBzeW1ib2xzLCBJIHNlZSB0aGVzZSBhcyBwb3RlbnRpYWwgaG90IHNwb3RzIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6IGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGB2bWFwX3RyeV9odWdlX3A0ZGAg4oCTIHRoZSBodWdlIHBhZ2UgYWxsb2NhdGlvbiBhdHRlbXB0cyB3aXRoaW4gdm1hbGxvYyBzcGFjZS4gVGhlbiB0aGVyZSYjMzk7cyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBhbmQgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGJvdGggb2Ygd2hpY2ggc2NyZWFtIHBvdGVudGlhbCBjb250ZW50aW9uIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gcGFnZSBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9ucyBhbmQgbGFyZ2UgcGFnZSBjb2xsYXBzaW5nLiBBbHNvLCBJJiMzOTt2ZSBnb3QgYHB0ZHVtcF93YWxrX3BnZGAsIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLCBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCBhbmQgYHB1ZF9mcmVlX3BtZF9wYWdlYCwgd2hpY2ggYXJlIGFsbCBwb2ludGluZyBtZSB0b3dhcmQgcGFnZSB0YWJsZSB3YWxraW5nLCBkZWJ1Z2dpbmcsIGFuZCBkZWFsbG9jYXRpb24gcGF0aHMuIEFsbCBvZiB0aGVzZSBzZWVtIHRvIHJlcHJlc2VudCBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIGxhcmdlIG1lbW9yeSBtYW5hZ2VtZW50LgoKV2FpdCBhIHNlY29uZOKApiBgcHRkdW1wX3dhbGtfcGdkYCBpcyBleHBvcnRlZD8gVGhhdOKAmXMgaW50ZXJlc3RpbmcuIEkgaGFkbiYjMzk7dCByZWFsaXplZCB0aGF0IHdhcyBleHBvc2VkLiBUaGlzIG1lYW5zIGl0IG1pZ2h0IGJlIHVzZWQgYnkgZXh0ZXJuYWwgbW9kdWxlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBjb25zaWRlciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9uIHRob3NlIGZ1bmN0aW9uYWxpdGllcyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MTY9c3RydWN0IHB0ZHVtcF9pbmZvIHtcbi0tXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0yMS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjIyOnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKTtcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTIzLSNpZmRlZiBDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTXG4tLVxuYXJjaC9hcm0vbW0vZHVtcC5jPTM5OD1zdGF0aWMgdm9pZCB3YWxrX3BnZChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5hcmNoL2FybS9tbS9kdW1wLmMtNDE0LVxuYXJjaC9hcm0vbW0vZHVtcC5jOjQxNTp2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbmFyY2gvYXJtL21tL2R1bXAuYy00MTYte1xuLS1cbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmM9Nz1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5hcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jLTEwLVxuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYzoxMTpcdHB0ZHVtcF93YWxrX3BnZChtLCBpbmZvKTtcbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmMtMTItXHRyZXR1cm4gMDtcbi0tXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jPTI4Nj12b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuLS1cbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzEzLVxuYXJjaC9hcm02NC9tbS9wdGR1bXAuYzozMTQ6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBpbmZvLVx1MDAzZW1tLCBOVUxMKTtcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzE1LX1cbi0tXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jPTMzMT1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzU1LVxuYXJjaC9hcm02NC9tbS9wdGR1bXAuYzozNTY6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzU3LVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM9MzM0PXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzUxLVx0LyogVHJhdmVyc2Uga2VybmVsIHBhZ2UgdGFibGVzICovXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjM1MjpcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy0zNTMtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jPTM2OD1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzkxLVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYzozOTI6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzkzLVxuLS1cbmFyY2gvcmlzY3YvbW0vcHRkdW1wLmM9MzUzPXN0YXRpYyB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZF9tbV9pbmZvICpwaW5mbylcbi0tXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTM3Mi1cbmFyY2gvcmlzY3YvbW0vcHRkdW1wLmM6MzczOlx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgcGluZm8tXHUwMDNlbW0sIE5VTEwpO1xuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zNzQtfVxuLS1cbmFyY2gvcmlzY3YvbW0vcHRkdW1wLmM9Mzc2PWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zOTktXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jOjQwMDpcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy00MDEtXG4tLVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jPTE4Mj1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMTAtXHRcdHJldHVybiB0cnVlO1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjIxMTpcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTIxMi1cdGlmIChzdC53eF9wYWdlcykge1xuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0yMjY9c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTI1MC1cdG11dGV4X2xvY2soXHUwMDI2Y3BhX211dGV4KTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNTE6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTItXHRtdXRleF91bmxvY2soXHUwMDI2Y3BhX211dGV4KTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MzA9c3RydWN0IHNlcV9maWxlO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjMxOnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjMyOnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0zMy1cdFx0XHRcdCAgIGJvb2wgdXNlcik7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzQ6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozNTojZGVmaW5lIHB0ZHVtcF9jaGVja193eCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTM2LXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9OD1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy05LXtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxMDpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFx1MDAyNmluaXRfbW0sIGZhbHNlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xMS1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYz0xNj1zdGF0aWMgaW50IHB0ZHVtcF9jdXJrbmxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTE4LVx0aWYgKGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlcGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjE5Olx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVx1MDAzZW1tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjAtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MjY9c3RhdGljIGludCBwdGR1bXBfY3VydXNyX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yOC1cdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyOTpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cdTAwM2VtbSwgdHJ1ZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzAtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9Mzc9c3RhdGljIGludCBwdGR1bXBfZWZpX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zOS1cdGlmIChlZmlfbW0ucGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQwOlx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZlZmlfbW0sIGZhbHNlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00MS1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQxNj1zdGF0aWMgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDIyLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDIzOmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDI0LVx0XHRcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU3LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDU4Olx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgbW0sIHBnZCk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NTktXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDczLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc0OnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzUte1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc2Olx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUobSwgbW0sIG1tLVx1MDAzZXBnZCwgZmFsc2UsIHRydWUpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc3LX1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3OC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3OTp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODAtXHRcdFx0XHQgICBib29sIHVzZXIpXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDg2LSNlbmRpZlxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDg3Olx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUobSwgbW0sIHBnZCwgZmFsc2UsIGZhbHNlKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OC19XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NDkwPXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwMC1cdHBnZCA9IGtlcm5lbF90b191c2VyX3BnZHAocGdkKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwMTpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFx1MDAyNmluaXRfbW0sIHBnZCwgdHJ1ZSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTAyLSNlbmRpZlxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwNC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwNTpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDYte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwOS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUxMDpcdHJldHVybiBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShOVUxMLCBcdTAwMjZpbml0X21tLCBJTklUX1BHRCwgdHJ1ZSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTExLX1cbi0tXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmM9NzU9dm9pZCBfX2luaXQgZWZpX2R1bXBfcGFnZXRhYmxlKHZvaWQpXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV8zMi5jLTc3LSNpZmRlZiBDT05GSUdfRUZJX1BHVF9EVU1QXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmM6Nzg6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoTlVMTCwgXHUwMDI2aW5pdF9tbSk7XG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmMtNzktI2VuZGlmXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jPTQyMz12b2lkIF9faW5pdCBlZmlfZHVtcF9wYWdldGFibGUodm9pZClcbi0tXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmMtNDI1LSNpZmRlZiBDT05GSUdfRUZJX1BHVF9EVU1QXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmM6NDI2Olx0cHRkdW1wX3dhbGtfcGdkX2xldmVsKE5VTEwsIFx1MDAyNmVmaV9tbSk7XG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmMtNDI3LSNlbmRpZlxuLS1cbmluY2x1ZGUvbGludXgvcHRkdW1wLmg9MTM9c3RydWN0IHB0ZHVtcF9zdGF0ZSB7XG4tLVxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0yNy1cbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6Mjg6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTI5LVx0XHRcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTMwLVx0XHRcdFx0Ym9vbCBjaGVja3d4LCBib29sIGRtZXNnKTtcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6MzE6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTtcbmluY2x1ZGUvbGludXgvcHRkdW1wLmgtMzItYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZCk7XG4tLVxubW0vcHRkdW1wLmM9MTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcHRkdW1wX29wcyA9IHtcbi0tXG5tbS9wdGR1bXAuYy0xNzQtXG5tbS9wdGR1bXAuYzoxNzU6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKVxubW0vcHRkdW1wLmMtMTc2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxNjMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYHB0ZHVtcF93YWxrX3BnZGAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBwdGR1bXBfd2Fsa19wZ2RgIGlzIGRlZmluZWQgaW4gYG1tL3B0ZHVtcC5jYCBhbmQgaXRzIGRlY2xhcmF0aW9uIHJlc2lkZXMgaW4gYGluY2x1ZGUvbGludXgvcHRkdW1wLmhgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIFdhaXQgYSBzZWNvbmQuLi4gaXQmIzM5O3MgZGVjbGFyZWQgZ2xvYmFsbHkgYnV0IG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkIHRvIG1vZHVsZXMuIFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIElzIGl0IG1lYW50IHRvIGJlIGludGVybmFsPyBBbHJpZ2h0LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIHNlZSBob3cgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgaXMgaGFuZGxlZCByZWdhcmRpbmcgaXRzIGV4cG9ydCBzdGF0dXMsIGFzIGl0JiMzOTtzIGxpa2VseSByZWxhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBleHBvcnQgaXMgZXhwbGljaXQsIG9yIGlmIHRoaXMgaXMgYW5vdGhlciBmdW5jdGlvbiB3aXRoIHNpbWlsYXIgbnVhbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTg2MT1zdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTM4LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxOTM5OnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTk0MC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE5NDQ9c3RhdGljIGludCBjcGFfcHJvY2Vzc19hbGlhcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NzQtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE5NzU6XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFsaWFzX2NwYSwgMCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NzYtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDA4LVx0XHQgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjAwOTpcdFx0X19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWxpYXNfY3BhLCAwKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAxMC1cdH1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMTUtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwMTY6c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMTcte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjA2OC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjA2OTpzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwNzAtXHRcdFx0XHQgICAgcGdwcm90X3QgbWFza19zZXQsIHBncHJvdF90IG1hc2tfY2xyLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjEyNi1cdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjEyNzpcdFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjEyOC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxNTQ9c3RhdGljIGlubGluZSBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXQodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE1Ni17XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxNTc6XHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKGFkZHIsIG51bXBhZ2VzLCBtYXNrLCBfX3BncHJvdCgwKSwgMCxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE1OC1cdFx0KGFycmF5ID8gQ1BBX0FSUkFZIDogMCksIE5VTEwpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjE2MT1zdGF0aWMgaW5saW5lIGludCBjaGFuZ2VfcGFnZV9hdHRyX2NsZWFyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNjMte1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTY0Olx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIG1hc2ssIDAsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNjUtXHRcdChhcnJheSA/IENQQV9BUlJBWSA6IDApLCBOVUxMKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxNjg9c3RhdGljIGlubGluZSBpbnQgY3BhX3NldF9wYWdlc19hcnJheShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTcwLXtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE3MTpcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoTlVMTCwgbnVtcGFnZXMsIG1hc2ssIF9fcGdwcm90KDApLCAwLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTcyLVx0XHRDUEFfUEFHRVNfQVJSQVksIHBhZ2VzKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxNzU9c3RhdGljIGlubGluZSBpbnQgY3BhX2NsZWFyX3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNzcte1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTc4Olx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihOVUxMLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIG1hc2ssIDAsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNzktXHRcdENQQV9QQUdFU19BUlJBWSwgcGFnZXMpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIyMD1pbnQgX3NldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjI3LVx0aWYgKCFyZXQpIHtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIyODpcdFx0cmV0ID0gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFkZHIsIG51bXBhZ2VzLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjI5LVx0XHRcdFx0XHQgICAgICAgY2FjaGVtb2RlMnBncHJvdChfUEFHRV9DQUNIRV9NT0RFX1dDKSxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzNDE9aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0Ny1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM0ODpcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBjbHIsIDAsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDktXHRcdFx0XHRcdENQQV9DT0xMQVBTRSwgTlVMTCk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzYyPWludCBzZXRfbWVtb3J5X25wX25vYWxpYXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjMte1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzY0Olx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjUtXHRcdFx0XHRcdF9fcGdwcm90KF9QQUdFX1BSRVNFTlQpLCAwLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM3ND1pbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3NS17XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNzY6XHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFkZHIsIG51bXBhZ2VzLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzc3LVx0XHRcdFx0XHRfX3BncHJvdChfUEFHRV9LRVJORUxfNEspLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM5Nz1zdGF0aWMgaW50IF9fc2V0X21lbW9yeV9lbmNfcGd0YWJsZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgYm9vbCBlbmMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDI2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDI3Olx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQyOC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1MTk9c3RhdGljIGludCBfc2V0X3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1NDQtXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgbmV3X3R5cGUgPT0gX1BBR0VfQ0FDSEVfTU9ERV9XQylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjU0NTpcdFx0cmV0ID0gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKE5VTEwsIG51bXBhZ2VzLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTQ2LVx0XHRcdFx0XHQgICAgICAgY2FjaGVtb2RlMnBncHJvdChcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI2MjQ9c3RhdGljIGludCBfX3NldF9wYWdlc19wKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjM5LVx0ICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2NDA6XHRyZXR1cm4gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY0MS19XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjQzPXN0YXRpYyBpbnQgX19zZXRfcGFnZXNfbnAoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NTgtXHQgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjY1OTpcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjYwLX1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3MjY9aW50IF9faW5pdCBrZXJuZWxfbWFwX3BhZ2VzX2luX3BnZChwZ2RfdCAqcGdkLCB1NjQgcGZuLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNzUwLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNzUxOlx0cmV0dmFsID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc1Mi1cdF9fZmx1c2hfdGxiX2FsbCgpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9Mjc2Mz1pbnQgX19pbml0IGtlcm5lbF91bm1hcF9wYWdlc19pbl9wZ2QocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc4NS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Mjc4NjpcdHJldHZhbCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI3ODctXHRfX2ZsdXNoX3RsYl9hbGwoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNDcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgQXR0cmlidXRlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHBhZ2UgYXR0cmlidXRlcyBhcmUgY2hhbmdlZCwgYW5kIHRoZSBjb25uZWN0aW9uIGlzIGJlY29taW5nIGNsZWFyZXIuIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGlzIGRlZmluZWQgYXMgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgbWFrZXMgaXQgc2VlbSBsaWtlIGl0JiMzOTtzIGEgbG9jYWxseSBzY29wZWQgdXRpbGl0eSBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgYnkgdGhlIGxpa2VzIG9mIGBzZXRfbWVtb3J5X3JveGAsIGBzZXRfbWVtb3J5XzRrYCwgYW5kIGBzZXRfbWVtb3J5X25wX25vYWxpYXNgIGluZGljYXRlcyBhIHdpZGVyIGltcGFjdCB0aGFuIGluaXRpYWxseSBwZXJjZWl2ZWQuCgpPbiB0aGUgb3RoZXIgaGFuZCwgYF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBzZWVtcyB0byBiZSB1c2VkIGFzIGEgY29yZSB1dGlsaXR5IGZ1bmN0aW9uLCB1c2VkIGFjcm9zcyBhIHJhbmdlIG9mIG90aGVyIGZ1bmN0aW9ucywgc3VjaCBhcyBga2VybmVsX21hcF9wYWdlc19pbl9wZ2RgLCBga2VybmVsX3VubWFwX3BhZ2VzX2luX3BnZGAsIGBfX3NldF9wYWdlc19wYCwgYW5kIGBfX3NldF9wYWdlc19ucGAuIFRoaXMgc2VlbXMgdG8gaGF2ZSBhIHdpZGVyIHNjb3BlLiBHaXZlbiBpdHMgcm9sZSBhcyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIGZvciB0aGVzZSBjcml0aWNhbCBvcGVyYXRpb25zLCBgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIHNlZW1zIGxpa2UgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbi4gQnV0IHdhaXQsIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGlzIGFsc28gZ29vZC4KCkFscmlnaHQsIGxldCYjMzk7cyBub3cgY2hlY2sgaG93IGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIHVzZXMgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhbGtfcGFnZV9yYW5nZV9kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTM4Mj1XZSBhbHNvIHBlcm1pdCBhIHRydWx5IHVudXN1YWwgY2FzZSBpcyB0aGUgdHJhdmVyc2FsIG9mIG5vbi1WTUEgcmFuZ2VzIGluXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjM4MzoqKnVzZXJsYW5kKiogcmFuZ2VzLCBhcyBwcm92aWRlZCBmb3IgYnkgOmM6ZnVuYzpgIXdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTM4NC1cbi0tXG5tbS9pbnRlcm5hbC5oPTE4NDA9aW50IHdhbGtfcGFnZV9yYW5nZV92bWFfdW5zYWZlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2ludGVybmFsLmgtMTg0Mi1cdFx0dm9pZCAqcHJpdmF0ZSk7XG5tbS9pbnRlcm5hbC5oOjE4NDM6aW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL2ludGVybmFsLmgtMTg0NC1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbi0tXG5tbS9wYWdld2Fsay5jPTY0OD1pbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdld2Fsay5jLTY2Ny0vKipcbm1tL3BhZ2V3YWxrLmM6NjY4OiAqIHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyAtIHdhbGsgYSByYW5nZSBvZiBwYWdldGFibGVzIG5vdCBiYWNrZWQgYnkgYSB2bWFcbm1tL3BhZ2V3YWxrLmMtNjY5LSAqIEBtbTpcdFx0bW1fc3RydWN0IHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IHByb2Nlc3Mgb2YgcGFnZSB0YWJsZSB3YWxrXG4tLVxubW0vcGFnZXdhbGsuYy02ODMtICovXG5tbS9wYWdld2Fsay5jOjY4NDppbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vcGFnZXdhbGsuYy02ODUtXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG4tLVxubW0vcHRkdW1wLmM9MTc1PXZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcbi0tXG5tbS9wdGR1bXAuYy0xODUtXHR3aGlsZSAocmFuZ2UtXHUwMDNlc3RhcnQgIT0gcmFuZ2UtXHUwMDNlZW5kKSB7XG5tbS9wdGR1bXAuYzoxODY6XHRcdHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhtbSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbm1tL3B0ZHVtcC5jLTE4Ny1cdFx0XHRcdCAgICAgIFx1MDAyNnB0ZHVtcF9vcHMsIHBnZCwgc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEzMQoJCQkJCQkJb3V0cHV0OiAyNTUKCQkJCQkJCXRob3VnaHRzOiAxNDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBhdGNoIGZvciBLZXJuZWwgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQmIzM5O3MgdG91Y2hpbmcgcXVpdGUgYSBmZXcgYXJlYXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHBhZ2UgdGFibGUgZHVtcGluZywgaHVnZSBwYWdlIGhhbmRsaW5nIHdpdGhpbiB2bWFsbG9jLCBhbmQgdGhlIHg4NiBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGUgKENQQSkgY29kZS4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgc3luY2hyb25pemluZyB0aGVzZSBvcGVyYXRpb25zIHVzaW5nIGBpbml0X21tLm1tYXBfbG9ja2AgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgc3RhdGljIGtleSBhcHByb2FjaCwgd2l0aCBhZGRpdGlvbmFsIGxvY2tpbmcgYWRkZWQgdG8gdGhlIHg4NiBDUEEgYW5kIHZtYWxsb2MgcGF0aHMuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgY29uY3VycmVuY3kgYW5kIHJlcXVpcmluZyByaWdvcm91cyBmdXp6aW5nIHRvIHVuY292ZXIgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyBpbiB0aHJlZSBtYWluIGFyZWFzIHdoaWNoIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nOiBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIHNldHVwLCBhbmQgQ1BBLiBTaW5jZSB0aGVzZSBhcmUgYWxsIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW50IGFjY2VzcywgdGhlIGdvYWwgb2YgZnV6emluZyBpcyB0byBleHBvc2UgYW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoZSBuZXcgbG9ja2luZyBzY2hlbWUsIHBvc3NpYmxlIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGNvbmN1cnJlbnQgcGFnZSB0YWJsZSB3YWxrcyBhbmQgbW9kaWZpY2F0aW9ucyBoYXBwZW4uCgpTbywgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AgaXMgZXhwb3NlZCBpbiBgbW0vaW50ZXJuYWwuaGAgYW5kIGlzIGNhbGxlZCBieSBgcHRkdW1wX3dhbGtfcGdkYC4gVGhhdCB0ZWxscyBtZSB0aGUgc3ltYm9scyB0aGF0IGFyZSBpbiBzY29wZSBmb3IgZnV6emluZyBhcmU6Ci0gICBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgIChkZWFsaW5nIHdpdGggaHVnZSBwYWdlcykKLSAgIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIChDUEEgY29kZSkuICBIbW0sIGJvdGggYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgYW5kIGBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgYXJlIHN0YXRpYywgYnV0IHRoZSBwYXRjaCBsaWtlbHkgY2FsbHMgdGhlbSB0aHJvdWdoIGV4cG9ydGVkIGZ1bmN0aW9ucyBsaWtlIGBzZXRfbWVtb3J5X3djYCBvciBgc2V0X21lbW9yeV9yb3hgLCBzbyB3ZSBjYW4gc3RpbGwgZnV6eiB2aWEgdGhvc2Ugb3IgdmlhIENQQV9ERUJVRy4KLSAgIGBwdGR1bXBfd2Fsa19wZ2RgIGFuZCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCAocGFnZSB0YWJsZSBkdW1waW5nKQotICAgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYHB1ZF9mcmVlX3BtZF9wYWdlYAoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBnb2luZyB0byBiZSB1c2VmdWwgZm9yIHRlc3RpbmcgdGhpcy4gYFBURFVNUF9ERUJVR0ZTYCBzZWVtcyByZWxldmFudCBzaW5jZSBpdCBleHBvc2VzIHRoZSBgcHRkdW1wYCBmdW5jdGlvbmFsaXR5IHRvIGRlYnVnZnMsIHNvbWV0aGluZyBzeXprYWxsZXIgY2FuIGVhc2lseSBsZXZlcmFnZS4gYERFQlVHX1dYYCBsb29rcyB1c2VmdWwgYmVjYXVzZSBpdCBlbmFibGVzIGBwdGR1bXBgIGF0IGJvb3QuIEdpdmVuIHRoYXQgdGhlIENQQSBjb2RlIGlzIGFsc28gaW52b2x2ZWQgYW5kIHRoaXMgcGF0Y2ggbWlnaHQgbWFrZSBjaGFuZ2VzIHRvIGl0LCBgQ1BBX0RFQlVHYCBpcyBhIG11c3QsIHNpbmNlIGl0IHJ1bnMgc2VsZi10ZXN0cyBhbmQgd2lsbCB0cmlnZ2VyIHRoZSBjb2RlLiBJIGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgYERFQlVHX0ZTYCBiZWNhdXNlIHN5emthbGxlciB1c3VhbGx5IGFscmVhZHkgaGFzIGl0IGVuYWJsZWQuCgpTbyB0aGUgY29uZmlncyBhcmU6Ci0gYFBURFVNUF9ERUJVR0ZTYAotIGBERUJVR19XWGAKLSBgQ1BBX0RFQlVHYAoKSSB3aWxsIG5vdyB2ZXJpZnkgdGhhdCB0aGUgc3ltYm9sIG5hbWVzIEkmIzM5O20gZm9jdXNpbmcgb24gYXJlIGNvcnJlY3QsIGp1c3QgdG8gYmUgc3VyZS4gSSYjMzk7bGwgY29uZmlybSBlYWNoIHN5bWJvbCBuYW1lLiBZZXAsIHRoZXkgYWxsIG1hdGNoIHRoZSBkZWZpbml0aW9ucyBpbiB0aGUga2VybmVsIHNvdXJjZXMuCgpJIGFtIG5vdyByZWFkeSB0byBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXMgaW5wdXRzIGZvciBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFREVU1QX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7REVCVUdfV1gmIzM0OywKICAgICYjMzQ7Q1BBX0RFQlVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wdWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wNGQmIzM0OywKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O19fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OywKICAgICYjMzQ7cG1kX2ZyZWVfcHRlX3BhZ2UmIzM0OywKICAgICYjMzQ7cHVkX2ZyZWVfcG1kX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB0YWJsZSBkdW1waW5nIChwdGR1bXApLCB2bWFsbG9jIGh1Z2UgcGFnZSBzZXR1cCwgYW5kIHg4NiBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGUgKENQQSkgY29kZSB0byB1c2UgYGluaXRfbW0ubW1hcF9sb2NrYCBmb3Igc3luY2hyb25pemF0aW9uLiBUaGlzIHJlcGxhY2VzIGEgc3RhdGljIGtleSBhcHByb2FjaCBpbiBhcm02NCBhbmQgYWRkcyBsb2NraW5nIGluIHg4NiBDUEEgYW5kIHZtYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgd2Fsa3MgYW5kIG1vZGlmaWNhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0RFQlVHX1dYJiMzNDssCiAgICAmIzM0O0NQQV9ERUJVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NsciYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDssCiAgICAmIzM0O3BtZF9mcmVlX3B0ZV9wYWdlJiMzNDssCiAgICAmIzM0O3B1ZF9mcmVlX3BtZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYyBodWdlIHBhZ2Ugc2V0dXAsIGFuZCB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlIChDUEEpIGNvZGUgdG8gdXNlIGBpbml0X21tLm1tYXBfbG9ja2AgZm9yIHN5bmNocm9uaXphdGlvbi4gVGhpcyByZXBsYWNlcyBhIHN0YXRpYyBrZXkgYXBwcm9hY2ggaW4gYXJtNjQgYW5kIGFkZHMgbG9ja2luZyBpbiB4ODYgQ1BBIGFuZCB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIHdhbGtzIGFuZCBtb2RpZmljYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6MDUuNjc2NzAyOTU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MDI0NjAwNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCIsXG4gICAgXCJERUJVR19XWFwiLFxuICAgIFwiQ1BBX0RFQlVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hcF90cnlfaHVnZV9wbWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcHVkXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3A0ZFwiLFxuICAgIFwiY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzXCIsXG4gICAgXCJfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NsclwiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIixcbiAgICBcInBtZF9mcmVlX3B0ZV9wYWdlXCIsXG4gICAgXCJwdWRfZnJlZV9wbWRfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYyBodWdlIHBhZ2Ugc2V0dXAsIGFuZCB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlIChDUEEpIGNvZGUgdG8gdXNlIGBpbml0X21tLm1tYXBfbG9ja2AgZm9yIHN5bmNocm9uaXphdGlvbi4gVGhpcyByZXBsYWNlcyBhIHN0YXRpYyBrZXkgYXBwcm9hY2ggaW4gYXJtNjQgYW5kIGFkZHMgbG9ja2luZyBpbiB4ODYgQ1BBIGFuZCB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIHdhbGtzIGFuZCBtb2RpZmljYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyMzowNS42NzY3MDY3NjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTg2MzAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNlODhlYzUxNmFhM2FmODcyZDE1YzQ1NTAxZTU1YjM4MmJjMTk1MjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTcgMjI6MjM6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcXG5pbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcXG5AQCAtNyw4ICs3LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdGR1bXAuaFxcdTAwM2VcXG4gXFxuLURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xcbi1cXG4gI2lmZGVmIENPTkZJR19QVERVTVBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbV90eXBlcy5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xcbmluZGV4IGEyNWQ4YmVhY2M4MzEwLi5iZDUyZmNhNmU4NzIwYiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL21tdS5jXFxuKysrIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xcbkBAIC00OSw4ICs0OSw2IEBAXFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1xcdEJJVCgxKVxcbiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1NcXHRCSVQoMilcXHQvKiBhc3N1bWVzIEZFQVRfSFBEUyBpcyBub3QgdXNlZCAqL1xcbiBcXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcXG4tXFxuIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7XFxuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xcbiBcXG5AQCAtMTg2NCw4ICsxODYyLDcgQEAgaW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdCAgICAgICBib29sIGFjcXVpcmVfbW1hcF9sb2NrKVxcbitpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbiBcXHRwdGVfdCAqdGFibGU7XFxuIFxcdHBtZF90IHBtZDtcXG5AQCAtMTg3NywyNSArMTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovXFxuIFxcdHRhYmxlID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgYWRkcik7XFxuIFxcdHBtZF9jbGVhcihwbWRwKTtcXG4gXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XFxuLVxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpIFxcdTAwMjZcXHUwMDI2IGFjcXVpcmVfbW1hcF9sb2NrKSB7XFxuLVxcdFxcdG1tYXBfcmVhZF9sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4tXFx0XFx0bW1hcF9yZWFkX3VubG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuLVxcdH1cXG4tXFxuIFxcdHB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1pbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4te1xcbi1cXHQvKiBJZiBwdGR1bXAgaXMgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcywgYWNxdWlyZSBpbml0X21tLm1tYXBfbG9jayAqL1xcbi1cXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xcbi19XFxuLVxcbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbiBcXHRwbWRfdCAqdGFibGU7XFxuQEAgLTE5MTEsMzYgKzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIFxcdH1cXG4gXFxuIFxcdHRhYmxlID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIE91ciBvYmplY3RpdmUgaXMgdG8gcHJldmVudCBwdGR1bXAgZnJvbSByZWFkaW5nIGEgUE1EIHRhYmxlIHdoaWNoIGhhc1xcbi1cXHQgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb25cXG4tXFx0ICogKHdoaWNoIGdvdCBmbGlwcGVkIGJ5IHB0ZHVtcCkgdGhlbiB0aGUgbW1hcCBsb2NrIHNlcXVlbmNlIGhlcmUgd2lsbCxcXG4tXFx0ICogYXMgYSByZXN1bHQgb2YgdGhlIG1tYXAgd3JpdGUgbG9jay91bmxvY2sgc2VxdWVuY2UgaW4gcHRkdW1wLCBnaXZlXFxuLVxcdCAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhc1xcbi1cXHQgKiB5ZXQgbm90IHN0YXJ0ZWQgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcyAtIHRoZSBzZXF1ZW5jZSBvZiBiYXJyaWVyc1xcbi1cXHQgKiBpc3N1ZWQgYnkgX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoKSBndWFyYW50ZWVzIHRoYXQgcHRkdW1wIHdpbGxcXG4tXFx0ICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuXFxuLVxcdCAqL1xcbi1cXHRwdWRfY2xlYXIocHVkcCk7XFxuLVxcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xcbi1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkge1xcbi1cXHRcXHRtbWFwX3JlYWRfbG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2soXFx1MDAyNmluaXRfbW0pO1xcbi1cXHR9XFxuLVxcbiBcXHRwbWRwID0gdGFibGU7XFxuIFxcdG5leHQgPSBhZGRyO1xcbiBcXHRlbmQgPSBhZGRyICsgUFVEX1NJWkU7XFxuIFxcdGRvIHtcXG4gXFx0XFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogUE1EIGhhcyBiZWVuIGlzb2xhdGVkLCBzbyBwdGR1bXAgd29uJ3Qgc2VlIGl0LiBOb1xcbi1cXHRcXHRcXHQgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQsIC8qIGFjcXVpcmVfbW1hcF9sb2NrID0gKi8gZmFsc2UpO1xcbitcXHRcXHRcXHRwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTtcXG4gXFx0fSB3aGlsZSAocG1kcCsrLCBuZXh0ICs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XFxuIFxcbitcXHRwdWRfY2xlYXIocHVkcCk7XFxuK1xcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xcbiBcXHRwbWRfZnJlZShOVUxMLCB0YWJsZSk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXFxuaW5kZXggMWMyMDE0NDcwMGQ3ZDcuLjVhNzZjNTliNWFkYTU1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcXG4rKysgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXFxuQEAgLTI4MywxMyArMjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXFxuIFxcdG5vdGVfcGFnZShwdF9zdCwgMCwgLTEsIHB0ZV92YWwocHRlX3plcm8pKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYXJtNjRfcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4te1xcbi1cXHRzdGF0aWNfYnJhbmNoX2luYyhcXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcXG4tXFx0cHRkdW1wX3dhbGtfcGdkKHN0LCBtbSwgTlVMTCk7XFxuLVxcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xcbi19XFxuLVxcbiB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gfjBVTDtcXG5AQCAtMzE4LDcgKzMxMSw3IEBAIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXFxuIFxcdFxcdH1cXG4gXFx0fTtcXG4gXFxuLVxcdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBpbmZvLVxcdTAwM2VtbSk7XFxuK1xcdHB0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBpbmZvLVxcdTAwM2VtbSwgTlVMTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxcbkBAIC0zNjAsNyArMzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG4gXFx0XFx0fVxcbiBcXHR9O1xcbiBcXG4tXFx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tKTtcXG4rXFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tLCBOVUxMKTtcXG4gXFxuIFxcdGlmIChzdC53eF9wYWdlcyB8fCBzdC51eG5fcGFnZXMpIHtcXG4gXFx0XFx0cHJfd2FybihcXFwiQ2hlY2tlZCBXK1ggbWFwcGluZ3M6IEZBSUxFRCwgJWx1IFcrWCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuaW5kZXggZDAyM2E0MGExZTAzNDUuLjMwMWZiOWU3N2Q5MWJhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1yZWdpb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZTgyMC9hcGkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wcm9jZXNzb3IuaFxcdTAwM2VcXG5AQCAtNDEwLDcgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxcbiBcXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcXG4gXFxuLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4rc3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kO1xcbiBcXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MsICp0bXA7XFxuQEAgLTQ0Miw2ICs0NDMsMTggQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzpcXG4rXFx0ICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93blxcbitcXHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXFxuK1xcdCAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuXFxuK1xcdCAqL1xcbitcXHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcXHUwMDI2aW5pdF9tbSlcXG4rXFx0XFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuQEAgLTIxMDksNyArMjEyMiw5IEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcXG4gXFx0Y3BhLmN1cnBhZ2UgPSAwO1xcbiBcXHRjcGEuZm9yY2Vfc3BsaXQgPSBmb3JjZV9zcGxpdDtcXG4gXFxuLVxcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbitcXHQvKiBBdm9pZCByYWNlIHdpdGggY29uY3VycmVudCBDUEEgY29sbGFwc2UuICovXFxuK1xcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXFx1MDAyNmluaXRfbW0pXFxuK1xcdFxcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQ2hlY2sgd2hldGhlciB3ZSByZWFsbHkgY2hhbmdlZCBzb21ldGhpbmc6XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuaW5kZXggMDRiOGY2MWVjZTVkOGUuLjA0N2Y1ZjVlMmMzNDc1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuQEAgLTYyMSw2ICs2MjEsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxcbiBcXHQgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpXFxuK0RFRklORV9HVUFSRChtbWFwX3dyaXRlX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcXG4rXFx0ICAgICBtbWFwX3dyaXRlX2xvY2soX1QpLCBtbWFwX3dyaXRlX3VubG9jayhfVCkpXFxuK0RFRklORV9HVUFSRF9DT05EKG1tYXBfcmVhZF9sb2NrLCBfdHJ5LCBtbWFwX3JlYWRfdHJ5bG9jayhfVCkpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcXG5pbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xcbisrKyBiL21tL3BhZ2V3YWxrLmNcXG5AQCAtNjc4LDYgKzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kXFxuICAqIHdpbGwgYWxzbyBub3QgbG9jayB0aGUgUFRFcyBmb3IgdGhlIHB0ZV9lbnRyeSgpIGNhbGxiYWNrLlxcbiAgKlxcbiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS5cXG4rICpcXG4rICogVGhlIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuXFxuICAqL1xcbiBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcXG5AQCAtNjkxLDI0ICs2OTMsMjggQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0Lm5vX3ZtYVxcdFxcdD0gdHJ1ZVxcbiBcXHR9O1xcbiBcXG4tXFx0LyogRm9yIGNvbnZlbmllbmNlLCB3ZSBhbGxvdyB0cmF2ZXJzYWwgb2Yga2VybmVsIG1hcHBpbmdzLiAqL1xcbi1cXHRpZiAobW0gPT0gXFx1MDAyNmluaXRfbW0pXFxuLVxcdFxcdHJldHVybiB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlKHN0YXJ0LCBlbmQsIG9wcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBnZCwgcHJpdmF0ZSk7XFxuLVxcdGlmIChzdGFydCBcXHUwMDNlPSBlbmQgfHwgIXdhbGsubW0pXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0LypcXG4tXFx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXFxuLVxcdCAqIHRhYmxlcyBkdXJpbmcgdGhlIHdhbGsuICBIb3dldmVyIGEgcmVhZCBsb2NrIGlzIGluc3VmZmljaWVudCB0b1xcbi1cXHQgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbid0IGhhdmUgYSBWTUEgYXMgbXVubWFwKCkgZGV0YWNoZXNcXG4tXFx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXFxuLVxcdCAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGRcXG4tXFx0ICogYmUgaGVsZC5cXG4rXFx0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXFxuK1xcdCAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZ1xcbitcXHQgKiBkb3duIHBhZ2UgdGFibGVzLlxcbitcXHQgKlxcbitcXHQgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGRcXG4rXFx0ICogdG8gYWNjb3VudCBmb3IgcGFnZSB0YWJsZSBmcmVlaW5nIG9uIHZtYXAgaHVnZSBwYWdlIG1hcHBpbmcuXFxuIFxcdCAqL1xcbiBcXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xcbitcXHQvKlxcbitcXHQgKiB4ODYsIGFybTY0IHB0ZHVtcCBhbGxvdyB3YWxrcyBvZiBlZmkgbW0ncyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3NcXG4rXFx0ICogb2YgYXJiaXRyYXJ5IG1tJ3MuXFxuK1xcdCAqXFxuK1xcdCAqIEhvd2V2ZXIsIHRoZXkgYm90aCBtdXN0IGFsc28gaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvIGFjY291bnQgZm9yXFxuK1xcdCAqIGNvbmN1cnJlbnQga2VybmVsIHBhZ2UgdGFibGUgZnJlZWluZy5cXG4rXFx0ICovXFxuK1xcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcXHUwMDI2aW5pdF9tbSk7XFxuK1xcbitcXHRpZiAoc3RhcnQgXFx1MDAzZT0gZW5kKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHJldHVybiB3YWxrX3BnZF9yYW5nZShzdGFydCwgZW5kLCBcXHUwMDI2d2Fsayk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vcHRkdW1wLmMgYi9tbS9wdGR1bXAuY1xcbmluZGV4IDk3MzAyMDAwMDA5NmNmLi41ODUxMDk2ZTZmNjU2YyAxMDA2NDRcXG4tLS0gYS9tbS9wdGR1bXAuY1xcbisrKyBiL21tL3B0ZHVtcC5jXFxuQEAgLTE3OCwxMSArMTc4LDE4IEBAIHZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcXG4gXFxuIFxcdGdldF9vbmxpbmVfbWVtcygpO1xcbiBcXHRtbWFwX3dyaXRlX2xvY2sobW0pO1xcbitcXHQvKiBUbyBzdGFiaWxpc2Uga2VybmVsIHBhZ2UgdGFibGVzIHdlIG11c3QgaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvby4gKi9cXG4rXFx0aWYgKG1tICE9IFxcdTAwMjZpbml0X21tKVxcbitcXHRcXHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKFxcdTAwMjZpbml0X21tLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcbiBcXHR3aGlsZSAocmFuZ2UtXFx1MDAzZXN0YXJ0ICE9IHJhbmdlLVxcdTAwM2VlbmQpIHtcXG4gXFx0XFx0d2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZwdGR1bXBfb3BzLCBwZ2QsIHN0KTtcXG4gXFx0XFx0cmFuZ2UrKztcXG4gXFx0fVxcbitcXG4rXFx0aWYgKG1tICE9IFxcdTAwMjZpbml0X21tKVxcbitcXHRcXHRtbWFwX3dyaXRlX3VubG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuIFxcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcXG4gXFx0cHV0X29ubGluZV9tZW1zKCk7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uZjRmYTIyN2E4ZDdmMDQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hbGxvYy5jXFxuKysrIGIvbW0vdm1hbGxvYy5jXFxuQEAgLTQzLDYgKzQzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS90bGJmbHVzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3NobXBhcmFtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy92bWFsbG9jLmhcXHUwMDNlXFxuQEAgLTE1OCwxMCArMTU5LDIxIEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcXHUwMDI2XFx1MDAyNiAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXFxuK1xcdFxcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qXFxuK1xcdCAqIEFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIGV4Y2x1ZGUgcHRkdW1wLCB3aGljaCB3YWxrc1xcbitcXHQgKiBrZXJuZWwgcGFnZSB0YWJsZXMgaXQgZG9lcyBub3Qgb3duIHVuZGVyIHRoZSBtbWFwIHdyaXRlIGxvY2suXFxuK1xcdCAqXFxuK1xcdCAqIENvbmN1cnJlbnQgcmVhZCBsb2NrIGhvbGRlcnMgYXJlIHNhZmU6IGVhY2ggZXhjbHVzaXZlbHkgb3duc1xcbitcXHQgKiB0aGUgcmFuZ2UgaXQgb3BlcmF0ZXMgb24gYW5kIGNhbm5vdCByZWFjaCB0aGlzIHBhZ2UgdGFibGUuXFxuK1xcdCAqL1xcbitcXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbitcXHRcXHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuQEAgLTIxMCwxMCArMjIyLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUFVEX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwdWRfcHJlc2VudCgqcHVkKSBcXHUwMDI2XFx1MDAyNiAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXFxuK1xcdFxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXFxuK1xcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuK1xcdFxcdGlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5AQCAtMjYyLDEwICsyNzksMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQNERfU0laRSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKHA0ZF9wcmVzZW50KCpwNGQpIFxcdTAwMjZcXHUwMDI2ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcXG4rXFx0XFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuIFxcbi1cXHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG4rXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG4rXFx0XFx0aWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyMzowNi4zNjU2NDEwNDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNDMzNTY1MjY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQVERVTVBfREVCVUdGU1wiLFxuICAgIFwiREVCVUdfV1hcIixcbiAgICBcIkNQQV9ERUJVR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwiX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJcIixcbiAgICBcInB0ZHVtcF93YWxrX3BnZFwiLFxuICAgIFwid2Fsa19wYWdlX3JhbmdlX2RlYnVnXCIsXG4gICAgXCJwbWRfZnJlZV9wdGVfcGFnZVwiLFxuICAgIFwicHVkX2ZyZWVfcG1kX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIHNldHVwLCBhbmQgeDg2IENoYW5nZSBQYWdlIEF0dHJpYnV0ZSAoQ1BBKSBjb2RlIHRvIHVzZSBgaW5pdF9tbS5tbWFwX2xvY2tgIGZvciBzeW5jaHJvbml6YXRpb24uIFRoaXMgcmVwbGFjZXMgYSBzdGF0aWMga2V5IGFwcHJvYWNoIGluIGFybTY0IGFuZCBhZGRzIGxvY2tpbmcgaW4geDg2IENQQSBhbmQgdm1hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIgZHVyaW5nIGNvbmN1cnJlbnQgcGFnZSB0YWJsZSB3YWxrcyBhbmQgbW9kaWZpY2F0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZTg4ZWM1MTZhYTNhZjg3MmQxNWM0NTUwMWU1NWIzODJiYzE5NTI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTcgMjI6MjM6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuaW5kZXggNWIzNzRhNmFiMzRhNGUuLjUwYTE5NWVkYThlZDIyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuQEAgLTcsOCArNyw2IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHRkdW1wLmhcdTAwM2VcbiBcbi1ERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiAjaWZkZWYgQ09ORklHX1BURFVNUFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tX3R5cGVzLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xuaW5kZXggYTI1ZDhiZWFjYzgzMTAuLmJkNTJmY2E2ZTg3MjBiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9tbXUuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xuQEAgLTQ5LDggKzQ5LDYgQEBcbiAjZGVmaW5lIE5PX0NPTlRfTUFQUElOR1NcdEJJVCgxKVxuICNkZWZpbmUgTk9fRVhFQ19NQVBQSU5HU1x0QklUKDIpXHQvKiBhc3N1bWVzIEZFQVRfSFBEUyBpcyBub3QgdXNlZCAqL1xuIFxuLURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tXG4gdTY0IGtpbWFnZV92b2Zmc2V0IF9fcm9fYWZ0ZXJfaW5pdDtcbiBFWFBPUlRfU1lNQk9MKGtpbWFnZV92b2Zmc2V0KTtcbiBcbkBAIC0xODY0LDggKzE4NjIsNyBAQCBpbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgIGJvb2wgYWNxdWlyZV9tbWFwX2xvY2spXG4raW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuIFx0cHRlX3QgKnRhYmxlO1xuIFx0cG1kX3QgcG1kO1xuQEAgLTE4NzcsMjUgKzE4NzQsMTMgQEAgc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuLVx0LyogU2VlIGNvbW1lbnQgaW4gcHVkX2ZyZWVfcG1kX3BhZ2UgZm9yIHN0YXRpYyBrZXkgbG9naWMgKi9cbiBcdHRhYmxlID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgYWRkcik7XG4gXHRwbWRfY2xlYXIocG1kcCk7XG4gXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTtcbi1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSkgXHUwMDI2XHUwMDI2IGFjcXVpcmVfbW1hcF9sb2NrKSB7XG4tXHRcdG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0fVxuLVxuIFx0cHRlX2ZyZWVfa2VybmVsKE5VTEwsIHRhYmxlKTtcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1pbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi17XG4tXHQvKiBJZiBwdGR1bXAgaXMgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcywgYWNxdWlyZSBpbml0X21tLm1tYXBfbG9jayAqL1xuLVx0cmV0dXJuIF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgYWRkciwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyB0cnVlKTtcbi19XG4tXG4gaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuIFx0cG1kX3QgKnRhYmxlO1xuQEAgLTE5MTEsMzYgKzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHR9XG4gXG4gXHR0YWJsZSA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4tXG4tXHQvKlxuLVx0ICogT3VyIG9iamVjdGl2ZSBpcyB0byBwcmV2ZW50IHB0ZHVtcCBmcm9tIHJlYWRpbmcgYSBQTUQgdGFibGUgd2hpY2ggaGFzXG4tXHQgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb25cbi1cdCAqICh3aGljaCBnb3QgZmxpcHBlZCBieSBwdGR1bXApIHRoZW4gdGhlIG1tYXAgbG9jayBzZXF1ZW5jZSBoZXJlIHdpbGwsXG4tXHQgKiBhcyBhIHJlc3VsdCBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrL3VubG9jayBzZXF1ZW5jZSBpbiBwdGR1bXAsIGdpdmVcbi1cdCAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhc1xuLVx0ICogeWV0IG5vdCBzdGFydGVkIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMgLSB0aGUgc2VxdWVuY2Ugb2YgYmFycmllcnNcbi1cdCAqIGlzc3VlZCBieSBfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZSgpIGd1YXJhbnRlZXMgdGhhdCBwdGR1bXAgd2lsbFxuLVx0ICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuXG4tXHQgKi9cbi1cdHB1ZF9jbGVhcihwdWRwKTtcbi1cdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbi1cdH1cbi1cbiBcdHBtZHAgPSB0YWJsZTtcbiBcdG5leHQgPSBhZGRyO1xuIFx0ZW5kID0gYWRkciArIFBVRF9TSVpFO1xuIFx0ZG8ge1xuIFx0XHRpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogUE1EIGhhcyBiZWVuIGlzb2xhdGVkLCBzbyBwdGR1bXAgd29uJ3Qgc2VlIGl0LiBOb1xuLVx0XHRcdCAqIG5lZWQgdG8gYWNxdWlyZSBpbml0X21tLm1tYXBfbG9jay5cbi1cdFx0XHQgKi9cbi1cdFx0XHRfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQsIC8qIGFjcXVpcmVfbW1hcF9sb2NrID0gKi8gZmFsc2UpO1xuK1x0XHRcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xuIFx0fSB3aGlsZSAocG1kcCsrLCBuZXh0ICs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XG4gXG4rXHRwdWRfY2xlYXIocHVkcCk7XG4rXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTtcbiBcdHBtZF9mcmVlKE5VTEwsIHRhYmxlKTtcbiBcdHJldHVybiAxO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xuaW5kZXggMWMyMDE0NDcwMGQ3ZDcuLjVhNzZjNTliNWFkYTU1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xuQEAgLTI4MywxMyArMjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXG4gXHRub3RlX3BhZ2UocHRfc3QsIDAsIC0xLCBwdGVfdmFsKHB0ZV96ZXJvKSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFybTY0X3B0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4te1xuLVx0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cdHB0ZHVtcF93YWxrX3BnZChzdCwgbW0sIE5VTEwpO1xuLVx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi19XG4tXG4gdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGVuZCA9IH4wVUw7XG5AQCAtMzE4LDcgKzMxMSw3IEBAIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH07XG4gXG4tXHRhcm02NF9wdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBpbmZvLVx1MDAzZW1tKTtcbitcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIGluZm8tXHUwMDNlbW0sIE5VTEwpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgcHRkdW1wX2luaXRpYWxpemUodm9pZClcbkBAIC0zNjAsNyArMzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbiBcdFx0fVxuIFx0fTtcbiBcbi1cdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0pO1xuK1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSwgTlVMTCk7XG4gXG4gXHRpZiAoc3Qud3hfcGFnZXMgfHwgc3QudXhuX3BhZ2VzKSB7XG4gXHRcdHByX3dhcm4oXCJDaGVja2VkIFcrWCBtYXBwaW5nczogRkFJTEVELCAlbHUgVytYIHBhZ2VzIGZvdW5kLCAlbHUgbm9uLVVYTiBwYWdlcyBmb3VuZFxcblwiLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCBkMDIzYTQwYTFlMDM0NS4uMzAxZmI5ZTc3ZDkxYmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtMjIsNiArMjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9lODIwL2FwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtNDEwLDcgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxuIFxuIHN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7XG4gXG4tc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuK3N0YXRpYyB2b2lkIF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGFkZHIsIGVuZDtcbiBcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDtcbkBAIC00NDIsNiArNDQzLDE4IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuK3tcbitcdC8qXG4rXHQgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzpcbitcdCAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd25cbitcdCAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS5cbitcdCAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuXG4rXHQgKi9cbitcdHNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4rXHRcdF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuQEAgLTIxMDksNyArMjEyMiw5IEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcbiBcdGNwYS5jdXJwYWdlID0gMDtcbiBcdGNwYS5mb3JjZV9zcGxpdCA9IGZvcmNlX3NwbGl0O1xuIFxuLVx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbitcdC8qIEF2b2lkIHJhY2Ugd2l0aCBjb25jdXJyZW50IENQQSBjb2xsYXBzZS4gKi9cbitcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlcbitcdFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbiBcbiBcdC8qXG4gXHQgKiBDaGVjayB3aGV0aGVyIHdlIHJlYWxseSBjaGFuZ2VkIHNvbWV0aGluZzpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuaW5kZXggMDRiOGY2MWVjZTVkOGUuLjA0N2Y1ZjVlMmMzNDc1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuQEAgLTYyMSw2ICs2MjEsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiBcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcbitERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4rXHQgICAgIG1tYXBfd3JpdGVfbG9jayhfVCksIG1tYXBfd3JpdGVfdW5sb2NrKF9UKSlcbitERUZJTkVfR1VBUkRfQ09ORChtbWFwX3JlYWRfbG9jaywgX3RyeSwgbW1hcF9yZWFkX3RyeWxvY2soX1QpKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcbmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li41ZDg3YzYzMmEyNTUwNyAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbisrKyBiL21tL3BhZ2V3YWxrLmNcbkBAIC02NzgsNiArNjc4LDggQEAgaW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmRcbiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay5cbiAgKlxuICAqIFRoaXMgaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBPTkxZLlxuKyAqXG4rICogVGhlIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuXG4gICovXG4gaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbkBAIC02OTEsMjQgKzY5MywyOCBAQCBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHQubm9fdm1hXHRcdD0gdHJ1ZVxuIFx0fTtcbiBcbi1cdC8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi9cbi1cdGlmIChtbSA9PSBcdTAwMjZpbml0X21tKVxuLVx0XHRyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsXG4tXHRcdFx0XHRcdFx0ICAgIHBnZCwgcHJpdmF0ZSk7XG4tXHRpZiAoc3RhcnQgXHUwMDNlPSBlbmQgfHwgIXdhbGsubW0pXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qXG4tXHQgKiBUaGUgbW1hcCBsb2NrIHByb3RlY3RzIHRoZSBwYWdlIHdhbGtlciBmcm9tIGNoYW5nZXMgdG8gdGhlIHBhZ2Vcbi1cdCAqIHRhYmxlcyBkdXJpbmcgdGhlIHdhbGsuICBIb3dldmVyIGEgcmVhZCBsb2NrIGlzIGluc3VmZmljaWVudCB0b1xuLVx0ICogcHJvdGVjdCB0aG9zZSBhcmVhcyB3aGljaCBkb24ndCBoYXZlIGEgVk1BIGFzIG11bm1hcCgpIGRldGFjaGVzXG4tXHQgKiB0aGUgVk1BcyBiZWZvcmUgZG93bmdyYWRpbmcgdG8gYSByZWFkIGxvY2sgYW5kIGFjdHVhbGx5IHRlYXJpbmdcbi1cdCAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGRcbi1cdCAqIGJlIGhlbGQuXG4rXHQgKiBXaGVuIHdhbGtpbmcgdXNlcmxhbmQgcGFnZSB0YWJsZXMsIGFuIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQgdG9cbitcdCAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZ1xuK1x0ICogZG93biBwYWdlIHRhYmxlcy5cbitcdCAqXG4rXHQgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGRcbitcdCAqIHRvIGFjY291bnQgZm9yIHBhZ2UgdGFibGUgZnJlZWluZyBvbiB2bWFwIGh1Z2UgcGFnZSBtYXBwaW5nLlxuIFx0ICovXG4gXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuK1x0LypcbitcdCAqIHg4NiwgYXJtNjQgcHRkdW1wIGFsbG93IHdhbGtzIG9mIGVmaSBtbSdzIGFuZCB4ODYgcHRkdW1wIGFsbG93cyB3YWxrc1xuK1x0ICogb2YgYXJiaXRyYXJ5IG1tJ3MuXG4rXHQgKlxuK1x0ICogSG93ZXZlciwgdGhleSBib3RoIG11c3QgYWxzbyBob2xkIHRoZSBpbml0X21tIGxvY2sgdG8gYWNjb3VudCBmb3JcbitcdCAqIGNvbmN1cnJlbnQga2VybmVsIHBhZ2UgdGFibGUgZnJlZWluZy5cbitcdCAqL1xuK1x0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKFx1MDAyNmluaXRfbW0pO1xuK1xuK1x0aWYgKHN0YXJ0IFx1MDAzZT0gZW5kKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4gd2Fsa19wZ2RfcmFuZ2Uoc3RhcnQsIGVuZCwgXHUwMDI2d2Fsayk7XG4gfVxuZGlmZiAtLWdpdCBhL21tL3B0ZHVtcC5jIGIvbW0vcHRkdW1wLmNcbmluZGV4IDk3MzAyMDAwMDA5NmNmLi41ODUxMDk2ZTZmNjU2YyAxMDA2NDRcbi0tLSBhL21tL3B0ZHVtcC5jXG4rKysgYi9tbS9wdGR1bXAuY1xuQEAgLTE3OCwxMSArMTc4LDE4IEBAIHZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcbiBcbiBcdGdldF9vbmxpbmVfbWVtcygpO1xuIFx0bW1hcF93cml0ZV9sb2NrKG1tKTtcbitcdC8qIFRvIHN0YWJpbGlzZSBrZXJuZWwgcGFnZSB0YWJsZXMgd2UgbXVzdCBob2xkIHRoZSBpbml0X21tIGxvY2sgdG9vLiAqL1xuK1x0aWYgKG1tICE9IFx1MDAyNmluaXRfbW0pXG4rXHRcdG1tYXBfd3JpdGVfbG9ja19uZXN0ZWQoXHUwMDI2aW5pdF9tbSwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuK1xuIFx0d2hpbGUgKHJhbmdlLVx1MDAzZXN0YXJ0ICE9IHJhbmdlLVx1MDAzZWVuZCkge1xuIFx0XHR3YWxrX3BhZ2VfcmFuZ2VfZGVidWcobW0sIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZwdGR1bXBfb3BzLCBwZ2QsIHN0KTtcbiBcdFx0cmFuZ2UrKztcbiBcdH1cbitcbitcdGlmIChtbSAhPSBcdTAwMjZpbml0X21tKVxuK1x0XHRtbWFwX3dyaXRlX3VubG9jayhcdTAwMjZpbml0X21tKTtcbiBcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiBcdHB1dF9vbmxpbmVfbWVtcygpO1xuIFxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggMWFmY2EzNTY4YjliNjUuLmY0ZmEyMjdhOGQ3ZjA0IDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4rKysgYi9tbS92bWFsbG9jLmNcbkBAIC00Myw2ICs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2htcGFyYW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2Vfb3duZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy92bWFsbG9jLmhcdTAwM2VcbkBAIC0xNTgsMTAgKzE1OSwyMSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQTURfU0laRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHBtZF9wcmVzZW50KCpwbWQpIFx1MDAyNlx1MDAyNiAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRpZiAoIXBtZF9wcmVzZW50KCpwbWQpKVxuK1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0LypcbitcdCAqIEFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIGV4Y2x1ZGUgcHRkdW1wLCB3aGljaCB3YWxrc1xuK1x0ICoga2VybmVsIHBhZ2UgdGFibGVzIGl0IGRvZXMgbm90IG93biB1bmRlciB0aGUgbW1hcCB3cml0ZSBsb2NrLlxuK1x0ICpcbitcdCAqIENvbmN1cnJlbnQgcmVhZCBsb2NrIGhvbGRlcnMgYXJlIHNhZmU6IGVhY2ggZXhjbHVzaXZlbHkgb3duc1xuK1x0ICogdGhlIHJhbmdlIGl0IG9wZXJhdGVzIG9uIGFuZCBjYW5ub3QgcmVhY2ggdGhpcyBwYWdlIHRhYmxlLlxuK1x0ICovXG4rXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4rXHRcdGlmICghcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC0yMTAsMTAgKzIyMiwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQVURfU0laRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHB1ZF9wcmVzZW50KCpwdWQpIFx1MDAyNlx1MDAyNiAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKVxuK1x0XHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbitcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbitcdFx0aWYgKCFwdWRfZnJlZV9wbWRfcGFnZShwdWQsIGFkZHIpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTI2MiwxMCArMjc5LDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFA0RF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocDRkX3ByZXNlbnQoKnA0ZCkgXHUwMDI2XHUwMDI2ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbitcdGlmICghcDRkX3ByZXNlbnQoKnA0ZCkpXG4rXHRcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuIFxuLVx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xuK1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuK1x0XHRpZiAoIXA0ZF9mcmVlX3B1ZF9wYWdlKHA0ZCwgYWRkcikpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyMzowNi4zNjU2NDM1MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjcxMjUyNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN5bmNocm9uaXphdGlvbiBDaGFuZ2UgaW4gQ29yZSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBXZSdyZSB0YWxraW5nIGFib3V0IHN5bmNocm9uaXphdGlvbiB3aXRoaW4gY3JpdGljYWwgYXJlYXM6IHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYywgYW5kIENQQSBjb2RlLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgcmVwbGFjaW5nIGEgc3RhdGljIGtleSBhcHByb2FjaCBvbiBhcm02NCB3aXRoIGBpbml0X21tLm1tYXBfbG9ja2AgYW5kIGFkZGluZyBsb2NraW5nIGluIHg4NiBmb3IgQ1BBIGFuZCB2bWFsbG9jIGh1Z2UgcGFnZSBzZXR1cC4gVGhpcyBpcyBhIHNvbGlkIG1vdmUsIHJlcGxhY2luZyBhIHBvdGVudGlhbCB3ZWFrIHNwb3Qgd2l0aCBzb21ldGhpbmcgbW9yZSByb2J1c3QuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGFjdHVhbCBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIG9uIGFybTY0LCBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIHJlbW92aW5nIHRoZSBgYXJtNjRfcHRkdW1wX2xvY2tfa2V5YCBzdGF0aWMga2V5IGxvZ2ljIGluIGBwbWRfZnJlZV9wdGVfcGFnZWAgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAsIGFsb25nIHdpdGggcmVtb3ZhbCBvZiBgYXJtNjRfcHRkdW1wX3dhbGtfcGdkYC4gVGhlbiwgeDg2IGlzIGdldHRpbmcgYG1tYXBfd3JpdGVfbG9ja2AgYW5kIGBtbWFwX3JlYWRfbG9ja2AgYXJvdW5kIENQQSBjb2xsYXBzZSBhbmQgYF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBjYWxscy4gVGhlbiBpbiBgbW0vcGFnZXdhbGsuY2AgYW5kIGBtbS9wdGR1bXAuY2AgdGhleSdyZSB1cGRhdGluZyBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCBhbmQgYHB0ZHVtcF93YWxrX3BnZGAsIHJlc3BlY3RpdmVseSwgdG8gdXNlIHRoZSBgaW5pdF9tbS5tbWFwX2xvY2tgLiBGaW5hbGx5LCBpbiBgbW0vdm1hbGxvYy5jYCwgdGhlIHBhdGNoIGFkZHMgYHNjb3BlZF9jb25kX2d1YXJkYCB0aGF0IGF0dGVtcHRzIGFuIGBtbWFwX3JlYWRfbG9ja2AgYXJvdW5kIHRoZSBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnMuXG5cblRoaXMgbWVhbnMgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBkZWVwIG9uZSwgYXMgaXQgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEFuZCBpdCdzIHJlYWNoYWJsZSBjb2RlLCB3aGljaCBtZWFucyB3ZSAqYWJzb2x1dGVseSogbmVlZCB0byBmdXp6IGl0LiBXZSd2ZSBnb3QgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyByYWNlcyBvciBsb2NraW5nIGlzc3Vlcy4gV2UgY2FuJ3QgbGV0IHNvbWV0aGluZyBsaWtlIHRoaXMgc2xpcCBieSwgc28gd2UncmUgZ29pbmcgdG8gbmVlZCB0byBsb29rIGNhcmVmdWxseSBhdCB0aG9zZSBmdW5jdGlvbnMgSSBub3RlZDogYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYHZtYXBfdHJ5X2h1Z2VfcDRkYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLCBgcHRkdW1wX3dhbGtfcGdkYCwgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AsIGBwbWRfZnJlZV9wdGVfcGFnZWAsIGFuZCBgcHVkX2ZyZWVfcG1kX3BhZ2VgLiBUaGVzZSBhcmUgb3VyIHByaW1hcnkgdGFyZ2V0cyBmb3IgdGVzdGluZyBhbmQgYW5hbHlzaXMuXG5cbldhaXQgYSBzZWNvbmQsIHB0ZHVtcOKApiB3YXNuJ3QgdGhhdCB0cmlnZ2VyZWQgdGhyb3VnaCBkZWJ1Z2ZzPyBJIG5lZWQgdG8gY2hlY2sgaWYgd2UgcmVxdWlyZSBhbnkgc3BlY2lhbCBgUFREVU1QYCBjb25maWd1cmF0aW9ucyB0byB0cmlnZ2VyIHRoaXMuIEknbGwgc2VhcmNoIHRoZSBLY29uZmlnIHRvIHNlZSBpZiB3ZSBuZWVkIGEgc3BlY2lmaWMgY29uZmlnIHRvIGVuYWJsZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjE1LjAzNjg5ODIxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTUwNTM0NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVERVTVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz00NT1pZiBLVk1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6NDc6Y29uZmlnIFBURFVNUF9TVEFHRTJfREVCVUdGU1xcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiUHJlc2VudCB0aGUgc3RhZ2UtMiBwYWdldGFibGVzIHRvIGRlYnVnZnNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnPTIxNj1jb25maWcgQVJDSF9IQVNfUFREVU1QXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTIxOC1cXG5tbS9LY29uZmlnLmRlYnVnOjIxOTpjb25maWcgUFREVU1QXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjAtXFx0Ym9vbFxcbm1tL0tjb25maWcuZGVidWctMjIxLVxcbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xcbm1tL0tjb25maWcuZGVidWctMjIzLVxcdGJvb2wgXFxcIkV4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjE4LjE4NzQzNzMwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MjQ3NDM3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgcHRkdW1wIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBrZXkgdG8gZW5hYmxpbmcgcHRkdW1wLCBnb3QgaXQuIE5vdywgbXkgZmlyc3QgbW92ZSBpcyB0byBkaWcgaW50byBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgaW4gcGxhY2UsIHdoYXQgYmFzZSBmZWF0dXJlcyBpdCByZWxpZXMgb24uIEknbSB0aGlua2luZyBidWlsZCBvcHRpb25zLCBrZXJuZWwgZmVhdHVyZXMg4oCTIHRoYXQga2luZCBvZiB0aGluZy4gTGV0J3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcyBiZWZvcmUgSSBzdGFydCBleHBlcmltZW50aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDM0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6MjAuODEyMTgzODU5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjA2NjIwNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURFVNUF9ERUJVR0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MjE5PWNvbmZpZyBQVERVTVBcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjIxLVxcbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xcbm1tL0tjb25maWcuZGVidWctMjIzLVxcdGJvb2wgXFxcIkV4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjIzLjIzMjg1MjAyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDM0NzgwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBpbnRvIHRoZXNlIGRlYnVnIG9wdGlvbnM/IE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyMjIuIEknbSBob3BpbmcgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZXNlIGRlYnVnZ2luZy1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGlzIGRlZmluZWQuIFRoYXQgc2VjdGlvbiBsaWtlbHkgY29udGFpbnMgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRvIG1hbmlwdWxhdGUgdGhlIGJlaGF2aW9yIEknbSBhZnRlci4gSXQncyB0aGUgdXN1YWwgcm91dGUgd2hlbiBjaGFzaW5nIGRvd24gdGhlc2Uga2luZHMgb2YgY29uZmlndXJhdGlvbnMsIHRoZSBLY29uZmlnIGZpbGVzIHVzdWFsbHkga2VlcCBhIGdvb2QgdHJhY2sgcmVjb3JkIG9mIGhvdyB0aGVzZSBhcmUgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyOTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyMzoyNi40MzYzMzIxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE1OlxcdFxcbiAyMTY6XFx0Y29uZmlnIEFSQ0hfSEFTX1BURFVNUFxcbiAyMTc6XFx0XFx0Ym9vbFxcbiAyMTg6XFx0XFxuIDIxOTpcXHRjb25maWcgUFREVU1QXFxuIDIyMDpcXHRcXHRib29sXFxuIDIyMTpcXHRcXG4gMjIyOlxcdGNvbmZpZyBQVERVTVBfREVCVUdGU1xcbiAyMjM6XFx0XFx0Ym9vbCBcXFwiRXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1xcXCJcXG4gMjI0OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXFxuIDIyNTpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIDIyNjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxcbiAyMjc6XFx0XFx0c2VsZWN0IFBURFVNUFxcbiAyMjg6XFx0XFx0aGVscFxcbiAyMjk6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHNob3cgdGhlIGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IGluIGFcXG4gMjMwOlxcdFxcdCAgZGVidWdmcyBmaWxlLiBUaGlzIGluZm9ybWF0aW9uIGlzIG9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2ZWxvcGVyc1xcbiAyMzE6XFx0XFx0ICB3aG8gYXJlIHdvcmtpbmcgaW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGFyZWFzIG9mIHRoZSBrZXJuZWwuXFxuIDIzMjpcXHRcXHQgIEl0IGlzIHByb2JhYmx5IG5vdCBhIGdvb2QgaWRlYSB0byBlbmFibGUgdGhpcyBmZWF0dXJlIGluIGEgcHJvZHVjdGlvblxcbiAyMzM6XFx0XFx0ICBrZXJuZWwuXFxuIDIzNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6MjYuNDM2NDMwNDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU3NzM3MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIERlYnVnZ2luZyBPcHRpb25zKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBkZWVwZXIgbG9vayBhdCB3aGF0J3MgZ29pbmcgb24uLi4gdGhlIGluaXRpYWwgdGhvdWdodCBpcywgYFBURFVNUF9ERUJVR0ZTYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBmb3IgdGhhdCBraW5kIG9mIGRldGFpbGVkIGRlYnVnZ2luZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhhdCB0b2dnbGVkIG9uLiBOb3csIGEgbmFnZ2luZyBtZW1vcnkuLi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoZSBgREVCVUdfV1hgIGZ1bmN0aW9uYWxpdHkgc29tZXRpbWVzIGxldmVyYWdlcyB0aGUgYHB0ZHVtcGAgY2FwYWJpbGl0aWVzLiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gd2hhdCBgREVCVUdfV1hgIGlzIHN1cHBvc2VkIHRvIGFjaGlldmUuIE9rYXksIGJldHRlciB2ZXJpZnkgdGhhdCByZWxhdGlvbnNoaXAgZGlyZWN0bHkuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZXkgaW50ZXJyZWxhdGUgdG8gYmUgY2VydGFpbiBvZiBteSBwYXRoIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NzIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjI5LjY5NDE2OTgzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA2MTU2Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERUJVR19XWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTE4Mz1jb25maWcgQVJDSF9IQVNfREVCVUdfV1hcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTg1LVxcbm1tL0tjb25maWcuZGVidWc6MTg2OmNvbmZpZyBERUJVR19XWFxcbm1tL0tjb25maWcuZGVidWctMTg3LVxcdGJvb2wgXFxcIldhcm4gb24gVytYIG1hcHBpbmdzIGF0IGJvb3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjMyLjAwMDMzMjkxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzkwNzExMTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBvZiB0aGlzIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYG1tL0tjb25maWcuZGVidWdgLiBJIHJlY2FsbCB0aGlzIGZpbGUgdXN1YWxseSBob3VzZXMgdGhlIEtjb25maWcgb3B0aW9ucyBzcGVjaWZpYyB0byBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1Z2dpbmcgZmVhdHVyZXMuIExldCdzIG5hdmlnYXRlIHRvIGFyb3VuZCBsaW5lIDE4Ni4gSSdtIGd1ZXNzaW5nIHRoYXQgbGluZSBvciB0aGUgc3Vycm91bmRpbmcgbGluZXMgd2lsbCBoYXZlIHRoZSBrZXkgdG8gd2hhdCBJJ20gbG9va2luZyBmb3IgLSBhIHNwZWNpZmljIGZlYXR1cmUgb3IgYSByZWxhdGVkIGNvbmRpdGlvbmFsIHRoYXQgZ292ZXJucyBpdHMgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjM0Ljc5MTA0NjE3N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHRoZWxwXFxuIDE4MTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSB0ZXN0Y2FzZSBmb3IgdGhlIHNldHRpbmcgcm9kYXRhIHJlYWQtb25seS5cXG4gMTgyOlxcdFxcbiAxODM6XFx0Y29uZmlnIEFSQ0hfSEFTX0RFQlVHX1dYXFxuIDE4NDpcXHRcXHRib29sXFxuIDE4NTpcXHRcXG4gMTg2OlxcdGNvbmZpZyBERUJVR19XWFxcbiAxODc6XFx0XFx0Ym9vbCBcXFwiV2FybiBvbiBXK1ggbWFwcGluZ3MgYXQgYm9vdFxcXCJcXG4gMTg4OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfREVCVUdfV1hcXG4gMTg5OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXFxuIDE5MDpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiAxOTE6XFx0XFx0c2VsZWN0IFBURFVNUFxcbiAxOTI6XFx0XFx0aGVscFxcbiAxOTM6XFx0XFx0ICBHZW5lcmF0ZSBhIHdhcm5pbmcgaWYgYW55IFcrWCBtYXBwaW5ncyBhcmUgZm91bmQgYXQgYm9vdC5cXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0ICBUaGlzIGlzIHVzZWZ1bCBmb3IgZGlzY292ZXJpbmcgY2FzZXMgd2hlcmUgdGhlIGtlcm5lbCBpcyBsZWF2aW5nIFcrWFxcbiAxOTY6XFx0XFx0ICBtYXBwaW5ncyBhZnRlciBhcHBseWluZyBOWCwgYXMgc3VjaCBtYXBwaW5ncyBhcmUgYSBzZWN1cml0eSByaXNrLlxcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHQgIExvb2sgZm9yIGEgbWVzc2FnZSBpbiBkbWVzZyBvdXRwdXQgbGlrZSB0aGlzOlxcbiAxOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjM0Ljc5MTEwOTE3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI5NjI2MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHNldHRpbmcgYERFQlVHX1dYYCBhbHNvIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBgUFREVU1QYC4gVGhhdCdzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBnbyBmb3J3YXJkLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIHRoYXQncyB0b3Agb2YgbWluZCBpcyB0byBjaGVjayBpZiB3ZSBoYXZlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgdGllZCB0byB2bWFsbG9jIGh1Z2UgcGFnZXMuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgYW5kIGhvdyB0aGV5IGFmZmVjdCB0aGUgc3lzdGVtLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyB0aGF0IGNvdWxkIGluZmx1ZW5jZSBiZWhhdmlvci4gTGV0J3MgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUyNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6MzguMDIwNzM3OTc5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkwNTAwNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuLS1cXG5hcmNoL0tjb25maWctMTA5OS0jXFxuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5hcmNoL0tjb25maWctMTEwMS1cXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6NDAuNDExMjQ0MjY4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjQ3MDYzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3MuIFRoZSB0YXNrIGF0IGhhbmQgbGlrZWx5IGludm9sdmVzIHVuZGVyc3RhbmRpbmcgb3IgbW9kaWZ5aW5nIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIEdpdmVuIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBtb3N0IHJlbGV2YW50IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgYXJjaC9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGhvdyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZC5cblxuQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgcHJvamVjdHMgYXJlIG9yZ2FuaXplZCwgYEtjb25maWdgIGZpbGVzIGFyZSB0aGUgY2VudHJhbCBkcml2ZXJzIGZvciB0aGUgbWVudWNvbmZpZyBpbnRlcmZhY2UuIEkgd2lsbCBoZWFkIHN0cmFpZ2h0IHRvIGxpbmUgMTEwMC4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBzZWN0aW9uIEknbSBsb29raW5nIGZvciAtIGEgbW9kdWxlLCBmZWF0dXJlIG9yIGdyb3VwIG9mIG9wdGlvbnMgcmVsYXRlZCB0byBteSBhcmVhIG9mIGZvY3VzLiBJJ2xsIHRyeSB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHRoYXQgbGluZS4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHdvcmsgYmFja3dhcmRzIHRocm91Z2ggZGVwZW5kZW5jaWVzLCBpZiBuZWNlc3NhcnksIGFuZCBzZWUgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdGllcyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBmdWxmaWxsIHdoYXRldmVyIHJlcXVpcmVtZW50cyBJJ20gdGFja2xpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyMzo0My45NzU5NTMzMjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDkwOlxcdFxcdGJvb2xcXG4xMDkxOlxcdFxcbjEwOTI6XFx0Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG4xMDkzOlxcdFxcdGJvb2xcXG4xMDk0OlxcdFxcbjEwOTU6XFx0I1xcbjEwOTY6XFx0IyAgQXJjaHMgdGhhdCBzZWxlY3QgdGhpcyB3b3VsZCBiZSBjYXBhYmxlIG9mIFBNRC1zaXplZCB2bWFwcyAoaS5lLixcXG4xMDk3OlxcdCMgIGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKCkgcmV0dXJucyB0cnVlKS4gVGhlIFZNX0FMTE9XX0hVR0VfVk1BUCBmbGFnXFxuMTA5ODpcXHQjICBtdXN0IGJlIHVzZWQgdG8gZW5hYmxlIGFsbG9jYXRpb25zIHRvIHVzZSBodWdlcGFnZXMuXFxuMTA5OTpcXHQjXFxuMTEwMDpcXHRjb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbjExMDE6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuMTEwMjpcXHRcXHRib29sXFxuMTEwMzpcXHRcXG4xMTA0OlxcdGNvbmZpZyBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVcXG4xMTA1OlxcdFxcdGJvb2xcXG4xMTA2OlxcdFxcbjExMDc6XFx0IyBBcmNocyB0aGF0IHdhbnQgdG8gdXNlIHBtZF9ta3dyaXRlIG9uIGtlcm5lbCBtZW1vcnkgbmVlZCBpdCBkZWZpbmVkIGV2ZW5cXG4xMTA4OlxcdCMgaWYgdGhlcmUgYXJlIG5vIHVzZXJzcGFjZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyB0aGF0IHVzZSBpdFxcbjExMDk6XFx0Y29uZmlnIEFSQ0hfV0FOVF9LRVJORUxfUE1EX01LV1JJVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6NDMuOTc2MDU4MDA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzQ3NDcxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgSHVnZSB2bWFsbG9jIENvbmZpZ3VyYXRpb24qKlxuXG5IbW0sIGxldCdzIHNlZS4uLkknbSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4gUmlnaHQsIHNvIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBpcyBhIGJpdCBvZiBhIHNuZWFreSBvbmUuIEl0J3Mgbm90IGEgc3RyYWlnaHRmb3J3YXJkIG9wdGlvbiB5b3Ugc2VlIGluIHRoZSBtYWluIGNvbmZpZyBtZW51cywgaXMgaXQ/IEl0J3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCB0eXBpY2FsbHkgc2VsZWN0ZWQgaW1wbGljaXRseSBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuXG5cblRoZSByZWFsIHF1ZXN0aW9uIEkgbmVlZCBhbnN3ZXJlZCBpczogaXMgdGhlcmUgYW4gKmV4cGxpY2l0KiBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IEkgY2FuIHR3ZWFrLCB0byBhY3R1YWxseSAqZW5hYmxlKiBvciBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIGh1Z2Ugdm1hbGxvYz8gSSBrbm93IHRoYXQgb24gc29tZSBhcmNoaXRlY3R1cmVzIHlvdSBtaWdodCBoYXZlIHNvbWV0aGluZyBsaWtlIGBDT05GSUdfSFVHRVRMQl9WTUFMTE9DYCB0byB0dXJuIGl0IG9uLCBidXQgd2hhdCBhYm91dCB0aGUgYnJvYWRlciBzY29wZT8gRG8gSSBuZWVkIHRvIGxvb2sgZm9yIGEgZGVwZW5kZW5jeSwgc29tZSBvdGhlciBhcmNoLXNwZWNpZmljIGZsYWcsIG9yIHBlcmhhcHMgc29tZXRoaW5nIG5ldyBlbnRpcmVseT8gSSB3b25kZXIgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIGFyZSB0aGVyZSBzb21lIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMsIHdpdGggd2hpY2ggSSBhbSBtb3JlIGZhbWlsaWFyLCB0byBjaGVjaz9cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjQ3LjIxMDgwODQyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTIyNDQ3NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZy4qSFVHRV9WTUFMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuLS1cXG5hcmNoL0tjb25maWctMTA5OS0jXFxuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5hcmNoL0tjb25maWctMTEwMS1cXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6NDkuNzMzMjY1MjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5NjU5MjM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGBIVUdFX1ZNQVBgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIG1lbnRhbCBnZWFycyBhcmUgYWxyZWFkeSB0dXJuaW5nLiBcIkNoZWNrIGBIVUdFX1ZNQVBgXCIg4oCTIHRoYXQncyBhIHByZXR0eSBzcGVjaWZpYyBkaXJlY3RpdmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoeSBhcmUgd2UgbG9va2luZyBhdCB0aGUgYEhVR0VfVk1BUGA/IFdoYXQgcHJvYmxlbSBhcmUgd2UgdHJ5aW5nIHRvIHNvbHZlLCBvciB3aGF0IGFzcGVjdCBvZiB0aGUgc3lzdGVtIGFyZSB3ZSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZz9cIi4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBjb250ZXh0LiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBsYXJnZSBwYWdlcy4gSXMgdGhlcmUgYSBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZT8gUGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gVW5leHBlY3RlZCBiZWhhdmlvciByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgYmVpbmcgdXNlZCAob3Igbm90IGJlaW5nIHVzZWQpIGFzIGV4cGVjdGVkP1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHRvb2xzIGFuZCBtZXRob2RzIEknZCBsaWtlbHkgdXNlLiBBbSBJIHB1bGxpbmcgZnJvbSB0aGUgZGVidWdnaW5nIHRvb2xzIHRvIHJ1biBpbiByZWFsLXRpbWUgbW9kZT8gQW0gSSBnb2luZyBiYWNrIHRvIHByZXZpb3VzIGxvZ3MgdG8gZmluZCB0aGUgY2F1c2U/IFBlcmhhcHMgSSBoYXZlIGEgc2NyaXB0IHRoYXQgZ2VuZXJhdGVzIGEgcmVwb3J0P1xuXG5TcGVjaWZpY2FsbHksIEknbSBjb25zaWRlcmluZyB3aGF0IGRhdGEgSSB3aWxsIGJlIGxvb2tpbmcgZm9yOiBUaGUgc2l6ZSBvZiB0aGUgYEhVR0VfVk1BUGAsIGl0cyBjdXJyZW50IHVzYWdlLCBhbnkgZnJhZ21lbnRhdGlvbiwgYW5kIGFueSByZWxldmFudCBlcnJvciBtZXNzYWdlcy4gSSdsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgc3RhdGUgb2YgdGhlIFZNQVAgd2l0aCB0aGUgb3RoZXIgbWVtb3J5IHN1YnN5c3RlbXMgaW4gdGhlIHN5c3RlbS4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgbXkgaHlwb3RoZXNpczogcGVyaGFwcyB0aGVyZSdzIGEgbWlzY29uZmlndXJhdGlvbiBvZiBodWdlIHBhZ2UgcmVzZXJ2YXRpb25zLCBvciBhIHJlc291cmNlIGNvbnN0cmFpbnQgbGltaXRpbmcgdGhlIGFsbG9jYXRpb24gb2YgbGFyZ2UgcGFnZXMsIGxlYWRpbmcgdG8gcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gb3IgZXZlbiBhcHBsaWNhdGlvbiBjcmFzaGVzLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBraW5kIG9mIGlzc3VlIGNhbiBiZSBzdWJ0bGUgYW5kIHJlcXVpcmUgYSBudWFuY2VkIHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhbmQgc3lzdGVtIGFyY2hpdGVjdHVyZS4gTGV0J3MgZ2V0IHRvIHdvcmshXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6NTMuNTI5ODU5OTM0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY5MzQzMDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZy4qSFVHRV9WTUFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmVhdHVyZXMvdm0vaHVnZS12bWFwL2FyY2gtc3VwcG9ydC50eHQtMi0jIEZlYXR1cmUgbmFtZTogICAgICAgICAgaHVnZS12bWFwXFxuRG9jdW1lbnRhdGlvbi9mZWF0dXJlcy92bS9odWdlLXZtYXAvYXJjaC1zdXBwb3J0LnR4dDozOiMgICAgICAgICBLY29uZmlnOiAgICAgICBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuRG9jdW1lbnRhdGlvbi9mZWF0dXJlcy92bS9odWdlLXZtYXAvYXJjaC1zdXBwb3J0LnR4dC00LSMgICAgICAgICBkZXNjcmlwdGlvbjogICBhcmNoIHN1cHBvcnRzIHRoZSBhcmNoX3ZtYXBfcHVkX3N1cHBvcnRlZCgpIGFuZCBhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZCgpIFZNIEFQSXNcXG4tLVxcbmFyY2gvS2NvbmZpZz0xMDg5PWNvbmZpZyBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuLS1cXG5hcmNoL0tjb25maWctMTA5MS1cXG5hcmNoL0tjb25maWc6MTA5Mjpjb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbmFyY2gvS2NvbmZpZy0xMDkzLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6NTYuMDk5MjA3NjIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2ODQyMjkyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVm1hbGxvYywgQ1BBLCBhbmQgdGhlIEFyY2hpdGVjdHVyZSBEYW5jZSoqXG5cblJpZ2h0LCBzbywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaHVnZSB2bWFsbG9jIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgY2FuIGFjdHVhbGx5IGhhbmRsZSBpdC4gVGhhdCdzIGdvb2QsIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCBpcyBrZXkuIEJ1dCB0aGVuLCBteSBtaW5kIGp1bXBzIHRvIHNvbWV0aGluZyBtb3JlIHRhcmdldGVkOiBDUEEsIG9yIGBjaGFuZ2VfcGFnZV9hdHRyYC4gSXQncyBkZWZpbml0ZWx5IGFuIHg4NiB0aGluZywgaXNuJ3QgaXQ/IE15IGludHVpdGlvbiBpcyBzY3JlYW1pbmcgXCJ4ODYgc3BlY2lmaWNcIiBhbmQgSSBuZWVkIHRvIGNoZWNrIG15c2VsZi5cblxuTm93LCBteSByZWFsIHF1ZXN0aW9uIGlzOiBpcyB0aGVyZSBhbnkgY29uZmlndXJhdGlvbiBvcHRpb24/IEFueSByZWxldmFudCBLY29uZmlnIGVudHJ5LCBtYXliZT8gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUncyBhbnkgd2F5IHRvIGNvbnRyb2wgQ1BBJ3MgYmVoYXZpb3IsIHRvZ2dsZSBpdCBvbiBvciBvZmYsIG9yIGFkanVzdCBpdHMgcGFyYW1ldGVycy4gS25vd2luZyB0aGF0IHdpbGwgYmUgcGl2b3RhbCBmb3IgYWRhcHRpbmcgdGhpcyB0byBzcGVjaWZpYyBzeXN0ZW1zLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZyBvcHRpb25zIHRvIHNlZSB3aGF0IGNvbnRyb2wgSSBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzMCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI0OjAyLjc4MzQzOTE0MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NjM4MjUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKkNQQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdD0xNTA5PUZFQ19HRVRcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0LTE1MTEtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3Q6MTUxMjpHZXRzIEZFQyBjb25maWd1cmF0aW9uIGFuZCBzdGF0ZSBsaWtlIGBgRVRIVE9PTF9HRkVDUEFSQU1gYCBpb2N0bCByZXF1ZXN0LlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0LTE1MTMtXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTE0NjY9Y29uZmlnIFg4Nl9ESVJFQ1RfR0JQQUdFU1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xNDc0LVxcbmFyY2gveDg2L0tjb25maWc6MTQ3NTpjb25maWcgWDg2X0NQQV9TVEFUSVNUSUNTXFxuYXJjaC94ODYvS2NvbmZpZy0xNDc2LVxcdGJvb2wgXFxcIkVuYWJsZSBzdGF0aXN0aWMgZm9yIENoYW5nZSBQYWdlIEF0dHJpYnV0ZVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWcuZGVidWc9MTUzPWNvbmZpZyBERUJVR19CT09UX1BBUkFNU1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy5kZWJ1Zy0xNTktXFxuYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZzoxNjA6Y29uZmlnIENQQV9ERUJVR1xcbmFyY2gveDg2L0tjb25maWcuZGVidWctMTYxLVxcdGJvb2wgXFxcIkNQQSBzZWxmLXRlc3QgY29kZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjQ6MDUuNDQ5ODI4MDMxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjAxMzkzNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gUG90ZW50aWFsIERlYnVnZ2luZyBBaWRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzLi4uIGBDUEFfREVCVUdgIG1pZ2h0IGJlIGEgdXNlZnVsIHRvb2wgaGVyZS4gSSByZWNhbGwgc2VlaW5nIHRoYXQgZmxhZyBzb21ld2hlcmUgYW5kIG5vdydzIHRoZSB0aW1lIHRvIGludmVzdGlnYXRlLiBUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBpdCB3b3JrcywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgb3V0IGBhcmNoL3g4Ni9LY29uZmlnLmRlYnVnYC4gSSBzZWVtIHRvIHJlbWVtYmVyIGl0IGJlaW5nIGRlZmluZWQgYXJvdW5kIGxpbmUgMTYwLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBhbmQgd2hldGhlciBpdCdzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IGlzc3VlLiBMZXQgbWUgZ3JhYiB0aGUgc291cmNlIGFuZCBoYXZlIGEgcXVpY2sgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4ODIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDowOC41Njk5NzAxOTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTU1OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXFxuIDE1NjpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIDE1NzpcXHRcXHRoZWxwXFxuIDE1ODpcXHRcXHQgIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugc3RydWN0IGJvb3RfcGFyYW1zIHRvIGJlIGV4cG9ydGVkIHZpYSBkZWJ1Z2ZzLlxcbiAxNTk6XFx0XFxuIDE2MDpcXHRjb25maWcgQ1BBX0RFQlVHXFxuIDE2MTpcXHRcXHRib29sIFxcXCJDUEEgc2VsZi10ZXN0IGNvZGVcXFwiXFxuIDE2MjpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxcbiAxNjM6XFx0XFx0aGVscFxcbiAxNjQ6XFx0XFx0ICBEbyBjaGFuZ2VfcGFnZV9hdHRyKCkgc2VsZi10ZXN0cyBldmVyeSAzMCBzZWNvbmRzLlxcbiAxNjU6XFx0XFxuIDE2NjpcXHRjb25maWcgREVCVUdfRU5UUllcXG4gMTY3OlxcdFxcdGJvb2wgXFxcIkRlYnVnIGxvdy1sZXZlbCBlbnRyeSBjb2RlXFxcIlxcbiAxNjg6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcXG4gMTY5OlxcdFxcdGhlbHBcXG4gMTcwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzYW5pdHkgY2hlY2tzIGluIHg4NidzIGxvdy1sZXZlbCBlbnRyeSBjb2RlLlxcbiAxNzE6XFx0XFx0ICBTb21lIG9mIHRoZXNlIHNhbml0eSBjaGVja3MgbWF5IHNsb3cgZG93biBrZXJuZWwgZW50cmllcyBhbmRcXG4gMTcyOlxcdFxcdCAgZXhpdHMgb3Igb3RoZXJ3aXNlIGltcGFjdCBwZXJmb3JtYW5jZS5cXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDowOC41NzAwODc3NzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM2NzMyNDQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBDUEEqKlxuXG5Pa2F5LCBzbyBgQ1BBX0RFQlVHYCBoYXMgdGhpcyBuZWF0IHRyaWNrIHdoZXJlIGl0IHJ1bnMgYGNoYW5nZV9wYWdlX2F0dHIoKWAgc2VsZi10ZXN0cyBldmVyeSAzMCBzZWNvbmRzLiBUaGF0J3MgZmFudGFzdGljISBUaGlzIGdpdmVzIG1lIGEgc29saWQgb3Bwb3J0dW5pdHkgZm9yIGZ1enppbmcgQ1BBLlxuXG5UaGUgZmlyc3Qgc3RlcCBoZXJlIGlzIHRvIGVuc3VyZSBJJ3ZlIGVuYWJsZWQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zOiBgUFREVU1QX0RFQlVHRlNgLCBgREVCVUdfV1hgLCBhbmQsIG9mIGNvdXJzZSwgYENQQV9ERUJVR2AuIFRob3NlIGFyZSBlc3NlbnRpYWwuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBrZXkgc3ltYm9scyB0byB0YXJnZXQuIEknbSBmb2N1c2luZyBvbiB0aGVzZSBmb3Igbm93OiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBwdGR1bXBfd2Fsa19wZ2RgLCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCwgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbnMgb2YgYHBtZF9mcmVlX3B0ZV9wYWdlYCBhbmQgYHB1ZF9mcmVlX3BtZF9wYWdlYCBqdXN0IHRvIGJlIHN1cmUuIEEgcXVpY2sgc2VhcmNoIHJldmVhbHMgdGhhdCB0aGV5IGFyZSBpbiBgYXJjaC9hcm02NC9tbS9tbXUuY2AuIEFoLCBhbmQgd2FpdCwgYHZtYXBfdHJ5X2h1Z2VfcG1kYCBjYWxscyBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCB3aGljaCBjb3VsZCBiZSBpbnRlcmVzdGluZy4gTm93LCBpcyBgcG1kX2ZyZWVfcHRlX3BhZ2VgIGRlZmluZWQgKm9ubHkqIGZvciBBUk02ND8gSSBoYXZlIHRvIGNvbnNpZGVyIG90aGVyIGFyY2hpdGVjdHVyZXMgZm9yIGJyb2FkZXIgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzc5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjQ6MTMuOTM3NDE1MDc5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU0MjQzOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZF9mcmVlX3B0ZV9wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbW0vbW11LmM9MTg1Nz1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jLTE4NjQtXFxuYXJjaC9hcm02NC9tbS9tbXUuYzoxODY1OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2Ni17XFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jPTE4ODQ9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jLTE5MDMtXFx0XFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcXG5hcmNoL2FybTY0L21tL21tdS5jOjE5MDQ6XFx0XFx0XFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xOTA1LVxcdH0gd2hpbGUgKHBtZHArKywgbmV4dCArPSBQTURfU0laRSwgbmV4dCAhPSBlbmQpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYz0xNjc1PWludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy0xNjg0LVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmM6MTY4NTppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmMtMTY4Ni17XFxuLS1cXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYz0xMTc9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWQpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYy0xMjQtXFxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmM6MTI1OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMtMTI2LXtcXG4tLVxcbmFyY2gveDg2L21tL3BndGFibGUuYz03MTg9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gveDg2L21tL3BndGFibGUuYy03NTQtLyoqXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jOjc1NTogKiBwbWRfZnJlZV9wdGVfcGFnZSAtIENsZWFyIFBNRCBlbnRyeSBhbmQgZnJlZSBQVEUgcGFnZS5cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzU2LSAqIEBwbWQ6IFBvaW50ZXIgdG8gdGhlIFBNRFxcbi0tXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc2MS0gKi9cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NzYyOmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc2My17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzgyLSAqL1xcbmFyY2gveDg2L21tL3BndGFibGUuYzo3ODM6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzg0LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIxNzY9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjE3NzppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMTc4LSNlbHNlXFx0LyogIUNPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0yMjA0PXN0YXRpYyBpbmxpbmUgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIyMDctfVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIyMDg6c3RhdGljIGlubGluZSBpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIyMDkte1xcbi0tXFxubW0vdm1hbGxvYy5jPTE0Mz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMTcyLVxcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxubW0vdm1hbGxvYy5jOjE3MzpcXHRcXHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXFxubW0vdm1hbGxvYy5jLTE3NC1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjQ6MTYuMDkxNjYzNjg0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzOTgwMTExNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFNjb3BlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW5pdGlhbGx5IHRob3VnaHQgaXQgd2FzIGp1c3QgZm9jdXNlZCBvbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZnVuY3Rpb25zLCBzaW5jZSB0aGUgZW50cnkgcG9pbnQgc2VlbXMgdG8gYmUgZnJvbSBgbW0vdm1hbGxvYy5jYC4gQnV0IGhvbGQgb24sIHRoZSBjaGFuZ2VzIGFyZSBhY3R1YWxseSBicm9hZGVyIHRoYW4gdGhhdC4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgYXJjaC9hcm02NC9tbS9tbXUuY2AsIHNwZWNpZmljYWxseSB0byBgcG1kX2ZyZWVfcHRlX3BhZ2VgIGFuZCBgcHVkX2ZyZWVfcG1kX3BhZ2VgLiBBbmQgdGhlbiB0aGVyZSdzIHRoZSB4ODYgc2lkZSwgd2l0aCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgY2hhbmdpbmcgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLiBBbHNvLCBpdCB0b3VjaGVzIHF1aXRlIGEgZmV3IG90aGVyIGFyZWFzLCBpbmNsdWRpbmcgYG1tL3BhZ2V3YWxrLmNgLCBgbW0vcHRkdW1wLmNgIGFuZCBgbW0vdm1hbGxvYy5jYCBhcyBleHBlY3RlZC5cblxuVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGggYXJlOiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBwdGR1bXBfd2Fsa19wZ2RgLCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCwgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAuIEkgc2hvdWxkIHJlYWxseSBmb2N1cyBteSBhdHRlbnRpb24gb24gdW5kZXJzdGFuZGluZyBob3cgdGhlIGNoYW5nZXMgdG8gdGhlc2UgZnVuY3Rpb25zIGltcGFjdCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBmbG93LlxuXG5Ob3csIGEgcXVpY2sgbm90ZSwgSSBzZWUgdGhhdCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBzdGF0aWMgd2l0aGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gR2l2ZW4gdGhhdCBpdCdzIHN0YXRpYywgSSBzaG91bGQgdmVyaWZ5IGl0cyByZWFjaGFiaWxpdHkgdG8gZW5zdXJlIGl0J3MgYWN0dWFsbHkgYmVpbmcgdXNlZC4gTGV0IG1lIGNoZWNrIGlmIGl0J3MgY2FsbGVkIGZyb20gc29tZXRoaW5nIGxpa2UgYF9fY3BhX2ZsdXNoX3RsYmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCB0aGVuIEknbGwgYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE4MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDoyMi40ODk2NzczNDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTMwNzgxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDEyPXN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MTMtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0MTQ6c3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MTUte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NDUtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0NDY6c3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDQ3LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDU0LVxcdHNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssIFxcdTAwMjZpbml0X21tKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDU1OlxcdFxcdF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NTYtfVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00NTg9c3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ5My1cXHRpZiAoY3BhLVxcdTAwM2VmbGFncyBcXHUwMDI2IENQQV9DT0xMQVBTRSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ5NDpcXHRcXHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ5NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI0OjI0Ljk0Mjc2NDM1OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU2NzMzMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipBbmFseXppbmcgdGhlIENQQSBDYWxsIENoYWluKipcblxuUmlnaHQsIHNvIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGRlZmluaXRlbHkgYmVpbmcgaW52b2tlZCBieSBgY3BhX2ZsdXNoYC4gVGhhdCdzIGdvb2QgdG8gaGF2ZSBjb25maXJtZWQuIEFuZCBhcyBJIHN1c3BlY3RlZCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgaXMgdGhlIGNvcmUgZnVuY3Rpb24sIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZXZlcnl0aGluZyByZWxhdGVkIHRvIENQQS4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHF1aWNrbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgYHZtYXBfdHJ5X2h1Z2VfcG1kYCBpcyBkZWNsYXJlZCBzdGF0aWNhbGx5LiBMZXQgbWUganVzdCB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MDcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDoyNy44OTk0OTk0MjlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzY1OTg0MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hcF90cnlfaHVnZV9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTk1PXN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xNDItXFxubW0vdm1hbGxvYy5jOjE0MzpzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1hbGxvYy5jLTE0NC1cXHRcXHRcXHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXFxuLS1cXG5tbS92bWFsbG9jLmM9MTc5PXN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xOTItXFxubW0vdm1hbGxvYy5jOjE5MzpcXHRcXHRpZiAodm1hcF90cnlfaHVnZV9wbWQocG1kLCBhZGRyLCBuZXh0LCBwaHlzX2FkZHIsIHByb3QsXFxubW0vdm1hbGxvYy5jLTE5NC1cXHRcXHRcXHRcXHRcXHRtYXhfcGFnZV9zaGlmdCkpIHtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0yMDY9c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTIyNy1cXG5tbS92bWFsbG9jLmM6MjI4OlxcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXFxubW0vdm1hbGxvYy5jLTIyOS1cXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbi0tXFxubW0vdm1hbGxvYy5jPTI2Mz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMjg0LVxcbm1tL3ZtYWxsb2MuYzoyODU6XFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG5tbS92bWFsbG9jLmMtMjg2LVxcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI0OjMwLjM3NjEwMjEyMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDcxMDA4NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG1pbmU6XG5cbioqU3RhdGljIEFuYWx5c2lzIGFuZCBQb3RlbnRpYWwgSG90c3BvdHMqKlxuXG5SaWdodCwgdGhpcyBmZWVscyBwcmV0dHkgc3RhdGljLCBvbiB0aGUgc3VyZmFjZS4gSSdtIGZvY3VzaW5nIG9uIHNvbWUga2V5IHN5bWJvbHMsIEkgc2VlIHRoZXNlIGFzIHBvdGVudGlhbCBob3Qgc3BvdHMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgIOKAkyB0aGUgaHVnZSBwYWdlIGFsbG9jYXRpb24gYXR0ZW1wdHMgd2l0aGluIHZtYWxsb2Mgc3BhY2UuIFRoZW4gdGhlcmUncyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBhbmQgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGJvdGggb2Ygd2hpY2ggc2NyZWFtIHBvdGVudGlhbCBjb250ZW50aW9uIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gcGFnZSBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9ucyBhbmQgbGFyZ2UgcGFnZSBjb2xsYXBzaW5nLiBBbHNvLCBJJ3ZlIGdvdCBgcHRkdW1wX3dhbGtfcGdkYCwgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AsIGBwbWRfZnJlZV9wdGVfcGFnZWAsIGFuZCBgcHVkX2ZyZWVfcG1kX3BhZ2VgLCB3aGljaCBhcmUgYWxsIHBvaW50aW5nIG1lIHRvd2FyZCBwYWdlIHRhYmxlIHdhbGtpbmcsIGRlYnVnZ2luZywgYW5kIGRlYWxsb2NhdGlvbiBwYXRocy4gQWxsIG9mIHRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgbGFyZ2UgbWVtb3J5IG1hbmFnZW1lbnQuXG5cbldhaXQgYSBzZWNvbmTigKYgYHB0ZHVtcF93YWxrX3BnZGAgaXMgZXhwb3J0ZWQ/IFRoYXTigJlzIGludGVyZXN0aW5nLiBJIGhhZG4ndCByZWFsaXplZCB0aGF0IHdhcyBleHBvc2VkLiBUaGlzIG1lYW5zIGl0IG1pZ2h0IGJlIHVzZWQgYnkgZXh0ZXJuYWwgbW9kdWxlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBjb25zaWRlciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9uIHRob3NlIGZ1bmN0aW9uYWxpdGllcyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA5NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDozNC44NDcxMTM5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzNTg3MDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGR1bXBfd2Fsa19wZ2RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MTY9c3RydWN0IHB0ZHVtcF9pbmZvIHtcXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTIxLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjIyOnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKTtcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0yMy0jaWZkZWYgQ09ORklHX0FSTV9QVERVTVBfREVCVUdGU1xcbi0tXFxuYXJjaC9hcm0vbW0vZHVtcC5jPTM5OD1zdGF0aWMgdm9pZCB3YWxrX3BnZChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmFyY2gvYXJtL21tL2R1bXAuYy00MTQtXFxuYXJjaC9hcm0vbW0vZHVtcC5jOjQxNTp2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcXG5hcmNoL2FybS9tbS9kdW1wLmMtNDE2LXtcXG4tLVxcbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmM9Nz1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmMtMTAtXFxuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYzoxMTpcXHRwdGR1bXBfd2Fsa19wZ2QobSwgaW5mbyk7XFxuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYy0xMi1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM9Mjg2PXZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMxMy1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jOjMxNDpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cXHUwMDNlbW0sIE5VTEwpO1xcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzE1LX1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM9MzMxPWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTM1NS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jOjM1NjpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzU3LVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz0zMzQ9c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTM1MS1cXHQvKiBUcmF2ZXJzZSBrZXJuZWwgcGFnZSB0YWJsZXMgKi9cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjM1MjpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzUzLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz0zNjg9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzkxLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM6MzkyOlxcdHB0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBcXHUwMDI2aW5pdF9tbSwgTlVMTCk7XFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy0zOTMtXFxuLS1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM1Mz1zdGF0aWMgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGRfbW1faW5mbyAqcGluZm8pXFxuLS1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTM3Mi1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jOjM3MzpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgcGluZm8tXFx1MDAzZW1tLCBOVUxMKTtcXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTM3NC19XFxuLS1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM3Nj1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zOTktXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYzo0MDA6XFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tLCBOVUxMKTtcXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTQwMS1cXG4tLVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0xODI9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG4tLVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMTAtXFx0XFx0cmV0dXJuIHRydWU7XFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjIxMTpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMTItXFx0aWYgKHN0Lnd4X3BhZ2VzKSB7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MjI2PXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTI1MC1cXHRtdXRleF9sb2NrKFxcdTAwMjZjcGFfbXV0ZXgpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNTE6XFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tLCBOVUxMKTtcXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3BhX211dGV4KTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaD0zMD1zdHJ1Y3Qgc2VxX2ZpbGU7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjMxOnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozMjp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMzLVxcdFxcdFxcdFxcdCAgIGJvb2wgdXNlcik7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM0OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM1OiNkZWZpbmUgcHRkdW1wX2NoZWNrX3d4IHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTM2LXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYz04PXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy05LXtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTA6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgXFx1MDAyNmluaXRfbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MTY9c3RhdGljIGludCBwdGR1bXBfY3Vya25sX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTE4LVxcdGlmIChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlcGdkKVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxOTpcXHRcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVxcdTAwM2VtbSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yMC1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYz0yNj1zdGF0aWMgaW50IHB0ZHVtcF9jdXJ1c3Jfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjgtXFx0aWYgKGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VwZ2QpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjI5OlxcdFxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIGN1cnJlbnQtXFx1MDAzZW1tLCB0cnVlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9Mzc9c3RhdGljIGludCBwdGR1bXBfZWZpX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM5LVxcdGlmIChlZmlfbW0ucGdkKVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo0MDpcXHRcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcXHUwMDI2ZWZpX21tLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTQxLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NDE2PXN0YXRpYyB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyMi1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MjM6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDI0LVxcdFxcdFxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU3LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ1ODpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgbW0sIHBnZCk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU5LVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDczLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3NDp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3NS17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc2OlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBtbS1cXHUwMDNlcGdkLCBmYWxzZSwgdHJ1ZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc3LX1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzgtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc5OnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODAtXFx0XFx0XFx0XFx0ICAgYm9vbCB1c2VyKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDg2LSNlbmRpZlxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ4NzpcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgcGdkLCBmYWxzZSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OC19XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00OTA9dm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDAtXFx0cGdkID0ga2VybmVsX3RvX3VzZXJfcGdkcChwZ2QpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwMTpcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShOVUxMLCBcXHUwMDI2aW5pdF9tbSwgcGdkLCB0cnVlLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTAyLSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA0LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwNTpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA2LXtcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwOS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MTA6XFx0cmV0dXJuIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFxcdTAwMjZpbml0X21tLCBJTklUX1BHRCwgdHJ1ZSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUxMS19XFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmM9NzU9dm9pZCBfX2luaXQgZWZpX2R1bXBfcGFnZXRhYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmMtNzctI2lmZGVmIENPTkZJR19FRklfUEdUX0RVTVBcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmM6Nzg6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsKE5VTEwsIFxcdTAwMjZpbml0X21tKTtcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmMtNzktI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmM9NDIzPXZvaWQgX19pbml0IGVmaV9kdW1wX3BhZ2V0YWJsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jLTQyNS0jaWZkZWYgQ09ORklHX0VGSV9QR1RfRFVNUFxcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYzo0MjY6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsKE5VTEwsIFxcdTAwMjZlZmlfbW0pO1xcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYy00MjctI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oPTEzPXN0cnVjdCBwdGR1bXBfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0yNy1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjI4OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxcbmluY2x1ZGUvbGludXgvcHRkdW1wLmgtMjktXFx0XFx0XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsXFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zMC1cXHRcXHRcXHRcXHRib29sIGNoZWNrd3gsIGJvb2wgZG1lc2cpO1xcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6MzE6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTtcXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTMyLWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpO1xcbi0tXFxubW0vcHRkdW1wLmM9MTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcHRkdW1wX29wcyA9IHtcXG4tLVxcbm1tL3B0ZHVtcC5jLTE3NC1cXG5tbS9wdGR1bXAuYzoxNzU6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKVxcbm1tL3B0ZHVtcC5jLTE3Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI0OjM3LjM4Mjk4ODM0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNDc4NTQ1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBgcHRkdW1wX3dhbGtfcGdkYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgcHRkdW1wX3dhbGtfcGdkYCBpcyBkZWZpbmVkIGluIGBtbS9wdGR1bXAuY2AgYW5kIGl0cyBkZWNsYXJhdGlvbiByZXNpZGVzIGluIGBpbmNsdWRlL2xpbnV4L3B0ZHVtcC5oYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBXYWl0IGEgc2Vjb25kLi4uIGl0J3MgZGVjbGFyZWQgZ2xvYmFsbHkgYnV0IG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkIHRvIG1vZHVsZXMuIFRoYXQncyBhIGJpdCBvZGQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gSXMgaXQgbWVhbnQgdG8gYmUgaW50ZXJuYWw/IEFscmlnaHQsIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgc2VlIGhvdyBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyBoYW5kbGVkIHJlZ2FyZGluZyBpdHMgZXhwb3J0IHN0YXR1cywgYXMgaXQncyBsaWtlbHkgcmVsYXRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBleHBvcnQgaXMgZXhwbGljaXQsIG9yIGlmIHRoaXMgaXMgYW5vdGhlciBmdW5jdGlvbiB3aXRoIHNpbWlsYXIgbnVhbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNjMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDo0Mi41MzA4NDQ4MDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzA3MjU3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTg2MT1zdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5MzgtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxOTM5OnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NDAtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE5NDQ9c3RhdGljIGludCBjcGFfcHJvY2Vzc19hbGlhcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTk3NC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE5NzU6XFx0XFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFsaWFzX2NwYSwgMCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTc2LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMDgtXFx0XFx0ICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDA5OlxcdFxcdF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZhbGlhc19jcGEsIDApO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAxMC1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMTUtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDE2OnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAxNy17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwNjgtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDY5OnN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwNzAtXFx0XFx0XFx0XFx0ICAgIHBncHJvdF90IG1hc2tfc2V0LCBwZ3Byb3RfdCBtYXNrX2NscixcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjEyNi1cXHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFxcdTAwMjZpbml0X21tKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjEyNzpcXHRcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxMjgtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxNTQ9c3RhdGljIGlubGluZSBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXQodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTU2LXtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxNTc6XFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihhZGRyLCBudW1wYWdlcywgbWFzaywgX19wZ3Byb3QoMCksIDAsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTU4LVxcdFxcdChhcnJheSA/IENQQV9BUlJBWSA6IDApLCBOVUxMKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjE2MT1zdGF0aWMgaW5saW5lIGludCBjaGFuZ2VfcGFnZV9hdHRyX2NsZWFyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE2My17XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTY0OlxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoYWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBtYXNrLCAwLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE2NS1cXHRcXHQoYXJyYXkgPyBDUEFfQVJSQVkgOiAwKSwgTlVMTCk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxNjg9c3RhdGljIGlubGluZSBpbnQgY3BhX3NldF9wYWdlc19hcnJheShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNzAte1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE3MTpcXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKE5VTEwsIG51bXBhZ2VzLCBtYXNrLCBfX3BncHJvdCgwKSwgMCxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNzItXFx0XFx0Q1BBX1BBR0VTX0FSUkFZLCBwYWdlcyk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxNzU9c3RhdGljIGlubGluZSBpbnQgY3BhX2NsZWFyX3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE3Ny17XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTc4OlxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoTlVMTCwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBtYXNrLCAwLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE3OS1cXHRcXHRDUEFfUEFHRVNfQVJSQVksIHBhZ2VzKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIyMD1pbnQgX3NldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMjctXFx0aWYgKCFyZXQpIHtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyMjg6XFx0XFx0cmV0ID0gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZhZGRyLCBudW1wYWdlcyxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMjktXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNhY2hlbW9kZTJwZ3Byb3QoX1BBR0VfQ0FDSEVfTU9ERV9XQyksXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzNDE9aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQ3LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM0ODpcXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIGNsciwgMCxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDktXFx0XFx0XFx0XFx0XFx0Q1BBX0NPTExBUFNFLCBOVUxMKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM2Mj1pbnQgc2V0X21lbW9yeV9ucF9ub2FsaWFzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2My17XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzY0OlxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjUtXFx0XFx0XFx0XFx0XFx0X19wZ3Byb3QoX1BBR0VfUFJFU0VOVCksIDAsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzNzQ9aW50IHNldF9tZW1vcnlfNGsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzc1LXtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNzY6XFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2YWRkciwgbnVtcGFnZXMsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzc3LVxcdFxcdFxcdFxcdFxcdF9fcGdwcm90KF9QQUdFX0tFUk5FTF80SyksXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzOTc9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDI2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQyNzpcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MjgtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1MTk9c3RhdGljIGludCBfc2V0X3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU0NC1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBuZXdfdHlwZSA9PSBfUEFHRV9DQUNIRV9NT0RFX1dDKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjU0NTpcXHRcXHRyZXQgPSBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoTlVMTCwgbnVtcGFnZXMsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTQ2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBjYWNoZW1vZGUycGdwcm90KFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjI0PXN0YXRpYyBpbnQgX19zZXRfcGFnZXNfcChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjM5LVxcdCAqL1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjY0MDpcXHRyZXR1cm4gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmNwYSwgMSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjQxLX1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjY0Mz1zdGF0aWMgaW50IF9fc2V0X3BhZ2VzX25wKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NTgtXFx0ICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjU5OlxcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjAtfVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNzI2PWludCBfX2luaXQga2VybmVsX21hcF9wYWdlc19pbl9wZ2QocGdkX3QgKnBnZCwgdTY0IHBmbiwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNzUwLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Mjc1MTpcXHRyZXR2YWwgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI3NTItXFx0X19mbHVzaF90bGJfYWxsKCk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3NjM9aW50IF9faW5pdCBrZXJuZWxfdW5tYXBfcGFnZXNfaW5fcGdkKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc4NS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI3ODY6XFx0cmV0dmFsID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmNwYSwgMSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNzg3LVxcdF9fZmx1c2hfdGxiX2FsbCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDo0NC44MDE1NzU3OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDU2NDk4NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWdlIEF0dHJpYnV0ZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgcGFnZSBhdHRyaWJ1dGVzIGFyZSBjaGFuZ2VkLCBhbmQgdGhlIGNvbm5lY3Rpb24gaXMgYmVjb21pbmcgY2xlYXJlci4gYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgaXMgZGVmaW5lZCBhcyBzdGF0aWMsIHdoaWNoIGluaXRpYWxseSBtYWtlcyBpdCBzZWVtIGxpa2UgaXQncyBhIGxvY2FsbHkgc2NvcGVkIHV0aWxpdHkgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoZSBmYWN0IHRoYXQgaXQncyBjYWxsZWQgYnkgdGhlIGxpa2VzIG9mIGBzZXRfbWVtb3J5X3JveGAsIGBzZXRfbWVtb3J5XzRrYCwgYW5kIGBzZXRfbWVtb3J5X25wX25vYWxpYXNgIGluZGljYXRlcyBhIHdpZGVyIGltcGFjdCB0aGFuIGluaXRpYWxseSBwZXJjZWl2ZWQuXG5cbk9uIHRoZSBvdGhlciBoYW5kLCBgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIHNlZW1zIHRvIGJlIHVzZWQgYXMgYSBjb3JlIHV0aWxpdHkgZnVuY3Rpb24sIHVzZWQgYWNyb3NzIGEgcmFuZ2Ugb2Ygb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBrZXJuZWxfbWFwX3BhZ2VzX2luX3BnZGAsIGBrZXJuZWxfdW5tYXBfcGFnZXNfaW5fcGdkYCwgYF9fc2V0X3BhZ2VzX3BgLCBhbmQgYF9fc2V0X3BhZ2VzX25wYC4gVGhpcyBzZWVtcyB0byBoYXZlIGEgd2lkZXIgc2NvcGUuIEdpdmVuIGl0cyByb2xlIGFzIGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgZm9yIHRoZXNlIGNyaXRpY2FsIG9wZXJhdGlvbnMsIGBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgc2VlbXMgbGlrZSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uLiBCdXQgd2FpdCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgaXMgYWxzbyBnb29kLlxuXG5BbHJpZ2h0LCBsZXQncyBub3cgY2hlY2sgaG93IGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIHVzZXMgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTQ3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI0OjUxLjI1ODA3Njk2NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNDY2NTExNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD0zODI9V2UgYWxzbyBwZXJtaXQgYSB0cnVseSB1bnVzdWFsIGNhc2UgaXMgdGhlIHRyYXZlcnNhbCBvZiBub24tVk1BIHJhbmdlcyBpblxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6MzgzOioqdXNlcmxhbmQqKiByYW5nZXMsIGFzIHByb3ZpZGVkIGZvciBieSA6YzpmdW5jOmAhd2Fsa19wYWdlX3JhbmdlX2RlYnVnYC5cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTM4NC1cXG4tLVxcbm1tL2ludGVybmFsLmg9MTg0MD1pbnQgd2Fsa19wYWdlX3JhbmdlX3ZtYV91bnNhZmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTE4NDItXFx0XFx0dm9pZCAqcHJpdmF0ZSk7XFxubW0vaW50ZXJuYWwuaDoxODQzOmludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vaW50ZXJuYWwuaC0xODQ0LVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxcbi0tXFxubW0vcGFnZXdhbGsuYz02NDg9aW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTY2Ny0vKipcXG5tbS9wYWdld2Fsay5jOjY2ODogKiB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcgLSB3YWxrIGEgcmFuZ2Ugb2YgcGFnZXRhYmxlcyBub3QgYmFja2VkIGJ5IGEgdm1hXFxubW0vcGFnZXdhbGsuYy02NjktICogQG1tOlxcdFxcdG1tX3N0cnVjdCByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBwcm9jZXNzIG9mIHBhZ2UgdGFibGUgd2Fsa1xcbi0tXFxubW0vcGFnZXdhbGsuYy02ODMtICovXFxubW0vcGFnZXdhbGsuYzo2ODQ6aW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9wYWdld2Fsay5jLTY4NS1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcXG4tLVxcbm1tL3B0ZHVtcC5jPTE3NT12b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxuLS1cXG5tbS9wdGR1bXAuYy0xODUtXFx0d2hpbGUgKHJhbmdlLVxcdTAwM2VzdGFydCAhPSByYW5nZS1cXHUwMDNlZW5kKSB7XFxubW0vcHRkdW1wLmM6MTg2OlxcdFxcdHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhtbSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLFxcbm1tL3B0ZHVtcC5jLTE4Ny1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cHRkdW1wX29wcywgcGdkLCBzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI0OjUzLjU4Mjc0NzA3OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjk5MTQ4MjIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBmb3IgS2VybmVsIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCdzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGFyZWFzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBwYWdlIHRhYmxlIGR1bXBpbmcsIGh1Z2UgcGFnZSBoYW5kbGluZyB3aXRoaW4gdm1hbGxvYywgYW5kIHRoZSB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlIChDUEEpIGNvZGUuIFRoZSBjb3JlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHN5bmNocm9uaXppbmcgdGhlc2Ugb3BlcmF0aW9ucyB1c2luZyBgaW5pdF9tbS5tbWFwX2xvY2tgIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIHN0YXRpYyBrZXkgYXBwcm9hY2gsIHdpdGggYWRkaXRpb25hbCBsb2NraW5nIGFkZGVkIHRvIHRoZSB4ODYgQ1BBIGFuZCB2bWFsbG9jIHBhdGhzLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGNvbmN1cnJlbmN5IGFuZCByZXF1aXJpbmcgcmlnb3JvdXMgZnV6emluZyB0byB1bmNvdmVyIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIGluIHRocmVlIG1haW4gYXJlYXMgd2hpY2ggYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmc6IHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYyBodWdlIHBhZ2Ugc2V0dXAsIGFuZCBDUEEuIFNpbmNlIHRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbnQgYWNjZXNzLCB0aGUgZ29hbCBvZiBmdXp6aW5nIGlzIHRvIGV4cG9zZSBhbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhlIG5ldyBsb2NraW5nIHNjaGVtZSwgcG9zc2libGUgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gY29uY3VycmVudCBwYWdlIHRhYmxlIHdhbGtzIGFuZCBtb2RpZmljYXRpb25zIGhhcHBlbi5cblxuU28sIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIGlzIGV4cG9zZWQgaW4gYG1tL2ludGVybmFsLmhgIGFuZCBpcyBjYWxsZWQgYnkgYHB0ZHVtcF93YWxrX3BnZGAuIFRoYXQgdGVsbHMgbWUgdGhlIHN5bWJvbHMgdGhhdCBhcmUgaW4gc2NvcGUgZm9yIGZ1enppbmcgYXJlOlxuLSAgIGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGB2bWFwX3RyeV9odWdlX3A0ZGAgKGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzKVxuLSAgIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIChDUEEgY29kZSkuICBIbW0sIGJvdGggYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgYW5kIGBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgYXJlIHN0YXRpYywgYnV0IHRoZSBwYXRjaCBsaWtlbHkgY2FsbHMgdGhlbSB0aHJvdWdoIGV4cG9ydGVkIGZ1bmN0aW9ucyBsaWtlIGBzZXRfbWVtb3J5X3djYCBvciBgc2V0X21lbW9yeV9yb3hgLCBzbyB3ZSBjYW4gc3RpbGwgZnV6eiB2aWEgdGhvc2Ugb3IgdmlhIENQQV9ERUJVRy5cbi0gICBgcHRkdW1wX3dhbGtfcGdkYCBhbmQgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AgKHBhZ2UgdGFibGUgZHVtcGluZylcbi0gICBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCBgcHVkX2ZyZWVfcG1kX3BhZ2VgXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBnb2luZyB0byBiZSB1c2VmdWwgZm9yIHRlc3RpbmcgdGhpcy4gYFBURFVNUF9ERUJVR0ZTYCBzZWVtcyByZWxldmFudCBzaW5jZSBpdCBleHBvc2VzIHRoZSBgcHRkdW1wYCBmdW5jdGlvbmFsaXR5IHRvIGRlYnVnZnMsIHNvbWV0aGluZyBzeXprYWxsZXIgY2FuIGVhc2lseSBsZXZlcmFnZS4gYERFQlVHX1dYYCBsb29rcyB1c2VmdWwgYmVjYXVzZSBpdCBlbmFibGVzIGBwdGR1bXBgIGF0IGJvb3QuIEdpdmVuIHRoYXQgdGhlIENQQSBjb2RlIGlzIGFsc28gaW52b2x2ZWQgYW5kIHRoaXMgcGF0Y2ggbWlnaHQgbWFrZSBjaGFuZ2VzIHRvIGl0LCBgQ1BBX0RFQlVHYCBpcyBhIG11c3QsIHNpbmNlIGl0IHJ1bnMgc2VsZi10ZXN0cyBhbmQgd2lsbCB0cmlnZ2VyIHRoZSBjb2RlLiBJIGRvbid0IG5lZWQgdG8gc3BlY2lmeSBgREVCVUdfRlNgIGJlY2F1c2Ugc3l6a2FsbGVyIHVzdWFsbHkgYWxyZWFkeSBoYXMgaXQgZW5hYmxlZC5cblxuU28gdGhlIGNvbmZpZ3MgYXJlOlxuLSBgUFREVU1QX0RFQlVHRlNgXG4tIGBERUJVR19XWGBcbi0gYENQQV9ERUJVR2BcblxuSSB3aWxsIG5vdyB2ZXJpZnkgdGhhdCB0aGUgc3ltYm9sIG5hbWVzIEknbSBmb2N1c2luZyBvbiBhcmUgY29ycmVjdCwganVzdCB0byBiZSBzdXJlLiBJJ2xsIGNvbmZpcm0gZWFjaCBzeW1ib2wgbmFtZS4gWWVwLCB0aGV5IGFsbCBtYXRjaCB0aGUgZGVmaW5pdGlvbnMgaW4gdGhlIGtlcm5lbCBzb3VyY2VzLlxuXG5JIGFtIG5vdyByZWFkeSB0byBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXMgaW5wdXRzIGZvciBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDEzMSwiT3V0cHV0VG9rZW5zIjoyNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI1OjEwLjU3NDIzMjE0M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzA1Njk5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIkRFQlVHX1dYXCIsXG4gICAgXCJDUEFfREVCVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwX3RyeV9odWdlX3BtZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wdWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcDRkXCIsXG4gICAgXCJjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNcIixcbiAgICBcIl9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RcIixcbiAgICBcIndhbGtfcGFnZV9yYW5nZV9kZWJ1Z1wiLFxuICAgIFwicG1kX2ZyZWVfcHRlX3BhZ2VcIixcbiAgICBcInB1ZF9mcmVlX3BtZF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB0YWJsZSBkdW1waW5nIChwdGR1bXApLCB2bWFsbG9jIGh1Z2UgcGFnZSBzZXR1cCwgYW5kIHg4NiBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGUgKENQQSkgY29kZSB0byB1c2UgYGluaXRfbW0ubW1hcF9sb2NrYCBmb3Igc3luY2hyb25pemF0aW9uLiBUaGlzIHJlcGxhY2VzIGEgc3RhdGljIGtleSBhcHByb2FjaCBpbiBhcm02NCBhbmQgYWRkcyBsb2NraW5nIGluIHg4NiBDUEEgYW5kIHZtYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgd2Fsa3MgYW5kIG1vZGlmaWNhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIkRFQlVHX1dYXCIsXG4gICAgXCJDUEFfREVCVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwX3RyeV9odWdlX3BtZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wdWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcDRkXCIsXG4gICAgXCJjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNcIixcbiAgICBcIl9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RcIixcbiAgICBcIndhbGtfcGFnZV9yYW5nZV9kZWJ1Z1wiLFxuICAgIFwicG1kX2ZyZWVfcHRlX3BhZ2VcIixcbiAgICBcInB1ZF9mcmVlX3BtZF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB0YWJsZSBkdW1waW5nIChwdGR1bXApLCB2bWFsbG9jIGh1Z2UgcGFnZSBzZXR1cCwgYW5kIHg4NiBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGUgKENQQSkgY29kZSB0byB1c2UgYGluaXRfbW0ubW1hcF9sb2NrYCBmb3Igc3luY2hyb25pemF0aW9uLiBUaGlzIHJlcGxhY2VzIGEgc3RhdGljIGtleSBhcHByb2FjaCBpbiBhcm02NCBhbmQgYWRkcyBsb2NraW5nIGluIHg4NiBDUEEgYW5kIHZtYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgd2Fsa3MgYW5kIG1vZGlmaWNhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow9stg4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-17 22:05:40 +0000 UTC FinishedAt: 2026-07-17 22:25:12 +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": "fce2dfa773ced15f27dd27cd0b482a7473cdcf2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS", "DEBUG_WX", "CPA_DEBUG" ], "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": "fce2dfa773ced15f27dd27cd0b482a7473cdcf2a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PTDUMP_DEBUGFS", "DEBUG_WX", "CPA_DEBUG" ], "series_id": "d5e733a7-107a-4d9d-83a1-97088c8a0594" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "vmap_try_huge_pmd", "vmap_try_huge_pud", "vmap_try_huge_p4d", "cpa_collapse_large_pages", "__change_page_attr_set_clr", "ptdump_walk_pgd", "walk_page_range_debug", "pmd_free_pte_page", "pud_free_pmd_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0RFQlVHX1dYJiMzNDssCiAgICAmIzM0O0NQQV9ERUJVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NsciYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDssCiAgICAmIzM0O3BtZF9mcmVlX3B0ZV9wYWdlJiMzNDssCiAgICAmIzM0O3B1ZF9mcmVlX3BtZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYyBodWdlIHBhZ2Ugc2V0dXAsIGFuZCB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlIChDUEEpIGNvZGUgdG8gdXNlIGBpbml0X21tLm1tYXBfbG9ja2AgZm9yIHN5bmNocm9uaXphdGlvbi4gVGhpcyByZXBsYWNlcyBhIHN0YXRpYyBrZXkgYXBwcm9hY2ggaW4gYXJtNjQgYW5kIGFkZHMgbG9ja2luZyBpbiB4ODYgQ1BBIGFuZCB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIHdhbGtzIGFuZCBtb2RpZmljYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2U4OGVjNTE2YWEzYWY4NzJkMTVjNDU1MDFlNTViMzgyYmMxOTUyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDE3IDIyOjIzOjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG5pbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oXG5AQCAtNyw4ICYjNDM7Nyw2IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHRkdW1wLmhcdTAwM2VcbiBcbi1ERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiAjaWZkZWYgQ09ORklHX1BURFVNUFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tX3R5cGVzLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xuaW5kZXggYTI1ZDhiZWFjYzgzMTAuLmJkNTJmY2E2ZTg3MjBiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9tbXUuY1xuQEAgLTQ5LDggJiM0Mzs0OSw2IEBAXG4gI2RlZmluZSBOT19DT05UX01BUFBJTkdTXHRCSVQoMSlcbiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1NcdEJJVCgyKVx0LyogYXNzdW1lcyBGRUFUX0hQRFMgaXMgbm90IHVzZWQgKi9cbiBcbi1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVxuIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7XG4gRVhQT1JUX1NZTUJPTChraW1hZ2Vfdm9mZnNldCk7XG4gXG5AQCAtMTg2NCw4ICYjNDM7MTg2Miw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcClcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0XHQgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaylcbiYjNDM7aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuIFx0cHRlX3QgKnRhYmxlO1xuIFx0cG1kX3QgcG1kO1xuQEAgLTE4NzcsMjUgJiM0MzsxODc0LDEzIEBAIHN0YXRpYyBpbnQgX19wbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcbi1cdC8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovXG4gXHR0YWJsZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIpO1xuIFx0cG1kX2NsZWFyKHBtZHApO1xuIFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4tXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpIFx1MDAyNlx1MDAyNiBhY3F1aXJlX21tYXBfbG9jaykge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbi1cdH1cbi1cbiBcdHB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7XG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4taW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4te1xuLVx0LyogSWYgcHRkdW1wIGlzIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMsIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2sgKi9cbi1cdHJldHVybiBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIGFkZHIsIC8qIGFjcXVpcmVfbW1hcF9sb2NrID0gKi8gdHJ1ZSk7XG4tfVxuLVxuIGludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdHBtZF90ICp0YWJsZTtcbkBAIC0xOTExLDM2ICYjNDM7MTg5NiwxNiBAQCBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdH1cbiBcbiBcdHRhYmxlID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbi1cbi1cdC8qXG4tXHQgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXNcbi1cdCAqIGJlZW4gZnJlZWQuIEluIHRoaXMgcmFjZSwgaWYgcHVkX2ZyZWVfcG1kX3BhZ2Ugb2JzZXJ2ZXMgdGhlIGtleSBvblxuLVx0ICogKHdoaWNoIGdvdCBmbGlwcGVkIGJ5IHB0ZHVtcCkgdGhlbiB0aGUgbW1hcCBsb2NrIHNlcXVlbmNlIGhlcmUgd2lsbCxcbi1cdCAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZVxuLVx0ICogdXMgdGhlIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uLiBJZiBub3QsIHRoaXMgbWVhbnMgdGhhdCBwdGR1bXAgaGFzXG4tXHQgKiB5ZXQgbm90IHN0YXJ0ZWQgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcyAtIHRoZSBzZXF1ZW5jZSBvZiBiYXJyaWVyc1xuLVx0ICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsXG4tXHQgKiBvYnNlcnZlIGFuIGVtcHR5IFBVRC5cbi1cdCAqL1xuLVx0cHVkX2NsZWFyKHB1ZHApO1xuLVx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4tXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpKSB7XG4tXHRcdG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0fVxuLVxuIFx0cG1kcCA9IHRhYmxlO1xuIFx0bmV4dCA9IGFkZHI7XG4gXHRlbmQgPSBhZGRyICYjNDM7IFBVRF9TSVpFO1xuIFx0ZG8ge1xuIFx0XHRpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogUE1EIGhhcyBiZWVuIGlzb2xhdGVkLCBzbyBwdGR1bXAgd29uJiMzOTt0IHNlZSBpdC4gTm9cbi1cdFx0XHQgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suXG4tXHRcdFx0ICovXG4tXHRcdFx0X19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0LCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIGZhbHNlKTtcbiYjNDM7XHRcdFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XG4gXHR9IHdoaWxlIChwbWRwJiM0MzsmIzQzOywgbmV4dCAmIzQzOz0gUE1EX1NJWkUsIG5leHQgIT0gZW5kKTtcbiBcbiYjNDM7XHRwdWRfY2xlYXIocHVkcCk7XG4mIzQzO1x0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XG4gXHRwbWRfZnJlZShOVUxMLCB0YWJsZSk7XG4gXHRyZXR1cm4gMTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9wdGR1bXAuYyBiL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcbmluZGV4IDFjMjAxNDQ3MDBkN2Q3Li41YTc2YzU5YjVhZGE1NSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcbkBAIC0yODMsMTMgJiM0MzsyODMsNiBAQCB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcbiBcdG5vdGVfcGFnZShwdF9zdCwgMCwgLTEsIHB0ZV92YWwocHRlX3plcm8pKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXJtNjRfcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi17XG4tXHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLVx0cHRkdW1wX3dhbGtfcGdkKHN0LCBtbSwgTlVMTCk7XG4tXHRzdGF0aWNfYnJhbmNoX2RlYyhcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xuLX1cbi1cbiB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kID0gfjBVTDtcbkBAIC0zMTgsNyAmIzQzOzMxMSw3IEBAIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH07XG4gXG4tXHRhcm02NF9wdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBpbmZvLVx1MDAzZW1tKTtcbiYjNDM7XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBpbmZvLVx1MDAzZW1tLCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IHB0ZHVtcF9pbml0aWFsaXplKHZvaWQpXG5AQCAtMzYwLDcgJiM0MzszNTMsNyBAQCBib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuIFx0XHR9XG4gXHR9O1xuIFxuLVx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSk7XG4mIzQzO1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSwgTlVMTCk7XG4gXG4gXHRpZiAoc3Qud3hfcGFnZXMgfHwgc3QudXhuX3BhZ2VzKSB7XG4gXHRcdHByX3dhcm4oXCYjMzQ7Q2hlY2tlZCBXJiM0MztYIG1hcHBpbmdzOiBGQUlMRUQsICVsdSBXJiM0MztYIHBhZ2VzIGZvdW5kLCAlbHUgbm9uLVVYTiBwYWdlcyBmb3VuZFxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuaW5kZXggZDAyM2E0MGExZTAzNDUuLjMwMWZiOWU3N2Q5MWJhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuQEAgLTIyLDYgJiM0MzsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2NfcGxhdGZvcm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXJlZ2lvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9lODIwL2FwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtNDEwLDcgJiM0Mzs0MTEsNyBAQCBzdGF0aWMgdm9pZCBfX2NwYV9mbHVzaF90bGIodm9pZCAqZGF0YSlcbiBcbiBzdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpO1xuIFxuLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiYjNDM7c3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kO1xuIFx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjLCAqdG1wO1xuQEAgLTQ0Miw2ICYjNDM7NDQzLDE4IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGFrZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gdG86XG4mIzQzO1x0ICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93blxuJiM0MztcdCAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS5cbiYjNDM7XHQgKiAtIFNlcmlhbGlzZSBjb25jdXJyZW50IENQQSB3YWxrZXJzLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4mIzQzO1x0XHRfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuQEAgLTIxMDksNyAmIzQzOzIxMjIsOSBAQCBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG4gXHRjcGEuY3VycGFnZSA9IDA7XG4gXHRjcGEuZm9yY2Vfc3BsaXQgPSBmb3JjZV9zcGxpdDtcbiBcbi1cdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4mIzQzO1x0LyogQXZvaWQgcmFjZSB3aXRoIGNvbmN1cnJlbnQgQ1BBIGNvbGxhcHNlLiAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlcbiYjNDM7XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4gXG4gXHQvKlxuIFx0ICogQ2hlY2sgd2hldGhlciB3ZSByZWFsbHkgY2hhbmdlZCBzb21ldGhpbmc6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDA0YjhmNjFlY2U1ZDhlLi4wNDdmNWY1ZTJjMzQ3NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbkBAIC02MjEsNiAmIzQzOzYyMSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxuIFx0ICAgICBtbWFwX3JlYWRfbG9jayhfVCksIG1tYXBfcmVhZF91bmxvY2soX1QpKVxuJiM0MztERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4mIzQzO1x0ICAgICBtbWFwX3dyaXRlX2xvY2soX1QpLCBtbWFwX3dyaXRlX3VubG9jayhfVCkpXG4mIzQzO0RFRklORV9HVUFSRF9DT05EKG1tYXBfcmVhZF9sb2NrLCBfdHJ5LCBtbWFwX3JlYWRfdHJ5bG9jayhfVCkpXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuY1xuaW5kZXggM2FlMjU4NmZmNDViNDQuLjVkODdjNjMyYTI1NTA3IDEwMDY0NFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZXdhbGsuY1xuQEAgLTY3OCw2ICYjNDM7Njc4LDggQEAgaW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmRcbiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay5cbiAgKlxuICAqIFRoaXMgaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBPTkxZLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZC5cbiAgKi9cbiBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxuQEAgLTY5MSwyNCAmIzQzOzY5MywyOCBAQCBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHQubm9fdm1hXHRcdD0gdHJ1ZVxuIFx0fTtcbiBcbi1cdC8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi9cbi1cdGlmIChtbSA9PSBcdTAwMjZpbml0X21tKVxuLVx0XHRyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsXG4tXHRcdFx0XHRcdFx0ICAgIHBnZCwgcHJpdmF0ZSk7XG4tXHRpZiAoc3RhcnQgXHUwMDNlPSBlbmQgfHwgIXdhbGsubW0pXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qXG4tXHQgKiBUaGUgbW1hcCBsb2NrIHByb3RlY3RzIHRoZSBwYWdlIHdhbGtlciBmcm9tIGNoYW5nZXMgdG8gdGhlIHBhZ2Vcbi1cdCAqIHRhYmxlcyBkdXJpbmcgdGhlIHdhbGsuICBIb3dldmVyIGEgcmVhZCBsb2NrIGlzIGluc3VmZmljaWVudCB0b1xuLVx0ICogcHJvdGVjdCB0aG9zZSBhcmVhcyB3aGljaCBkb24mIzM5O3QgaGF2ZSBhIFZNQSBhcyBtdW5tYXAoKSBkZXRhY2hlc1xuLVx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXG4tXHQgKiBkb3duIFBURXMvcGFnZSB0YWJsZXMuIEluIHdoaWNoIGNhc2UsIHRoZSBtbWFwIHdyaXRlIGxvY2sgc2hvdWxkXG4tXHQgKiBiZSBoZWxkLlxuJiM0MztcdCAqIFdoZW4gd2Fsa2luZyB1c2VybGFuZCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZCB0b1xuJiM0MztcdCAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZ1xuJiM0MztcdCAqIGRvd24gcGFnZSB0YWJsZXMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGRcbiYjNDM7XHQgKiB0byBhY2NvdW50IGZvciBwYWdlIHRhYmxlIGZyZWVpbmcgb24gdm1hcCBodWdlIHBhZ2UgbWFwcGluZy5cbiBcdCAqL1xuIFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKG1tKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHg4NiwgYXJtNjQgcHRkdW1wIGFsbG93IHdhbGtzIG9mIGVmaSBtbSYjMzk7cyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3NcbiYjNDM7XHQgKiBvZiBhcmJpdHJhcnkgbW0mIzM5O3MuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBIb3dldmVyLCB0aGV5IGJvdGggbXVzdCBhbHNvIGhvbGQgdGhlIGluaXRfbW0gbG9jayB0byBhY2NvdW50IGZvclxuJiM0MztcdCAqIGNvbmN1cnJlbnQga2VybmVsIHBhZ2UgdGFibGUgZnJlZWluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoXHUwMDI2aW5pdF9tbSk7XG4mIzQzO1xuJiM0MztcdGlmIChzdGFydCBcdTAwM2U9IGVuZClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0cmV0dXJuIHdhbGtfcGdkX3JhbmdlKHN0YXJ0LCBlbmQsIFx1MDAyNndhbGspO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9wdGR1bXAuYyBiL21tL3B0ZHVtcC5jXG5pbmRleCA5NzMwMjAwMDAwOTZjZi4uNTg1MTA5NmU2ZjY1NmMgMTAwNjQ0XG4tLS0gYS9tbS9wdGR1bXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcHRkdW1wLmNcbkBAIC0xNzgsMTEgJiM0MzsxNzgsMTggQEAgdm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKVxuIFxuIFx0Z2V0X29ubGluZV9tZW1zKCk7XG4gXHRtbWFwX3dyaXRlX2xvY2sobW0pO1xuJiM0MztcdC8qIFRvIHN0YWJpbGlzZSBrZXJuZWwgcGFnZSB0YWJsZXMgd2UgbXVzdCBob2xkIHRoZSBpbml0X21tIGxvY2sgdG9vLiAqL1xuJiM0MztcdGlmIChtbSAhPSBcdTAwMjZpbml0X21tKVxuJiM0MztcdFx0bW1hcF93cml0ZV9sb2NrX25lc3RlZChcdTAwMjZpbml0X21tLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4mIzQzO1xuIFx0d2hpbGUgKHJhbmdlLVx1MDAzZXN0YXJ0ICE9IHJhbmdlLVx1MDAzZWVuZCkge1xuIFx0XHR3YWxrX3BhZ2VfcmFuZ2VfZGVidWcobW0sIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZwdGR1bXBfb3BzLCBwZ2QsIHN0KTtcbiBcdFx0cmFuZ2UmIzQzOyYjNDM7O1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAobW0gIT0gXHUwMDI2aW5pdF9tbSlcbiYjNDM7XHRcdG1tYXBfd3JpdGVfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuIFx0bW1hcF93cml0ZV91bmxvY2sobW0pO1xuIFx0cHV0X29ubGluZV9tZW1zKCk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uZjRmYTIyN2E4ZDdmMDQgMTAwNjQ0XG4tLS0gYS9tbS92bWFsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYWxsb2MuY1xuQEAgLTQzLDYgJiM0Mzs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2htcGFyYW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2Vfb3duZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvdm1hbGxvYy5oXHUwMDNlXG5AQCAtMTU4LDEwICYjNDM7MTU5LDIxIEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBNRF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocG1kX3ByZXNlbnQoKnBtZCkgXHUwMDI2XHUwMDI2ICFwbWRfZnJlZV9wdGVfcGFnZShwbWQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIXBtZF9wcmVzZW50KCpwbWQpKVxuJiM0MztcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIGV4Y2x1ZGUgcHRkdW1wLCB3aGljaCB3YWxrc1xuJiM0MztcdCAqIGtlcm5lbCBwYWdlIHRhYmxlcyBpdCBkb2VzIG5vdCBvd24gdW5kZXIgdGhlIG1tYXAgd3JpdGUgbG9jay5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIENvbmN1cnJlbnQgcmVhZCBsb2NrIGhvbGRlcnMgYXJlIHNhZmU6IGVhY2ggZXhjbHVzaXZlbHkgb3duc1xuJiM0MztcdCAqIHRoZSByYW5nZSBpdCBvcGVyYXRlcyBvbiBhbmQgY2Fubm90IHJlYWNoIHRoaXMgcGFnZSB0YWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4mIzQzO1x0XHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG5AQCAtMjEwLDEwICYjNDM7MjIyLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocHVkX3ByZXNlbnQoKnB1ZCkgXHUwMDI2XHUwMDI2ICFwdWRfZnJlZV9wbWRfcGFnZShwdWQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKVxuJiM0MztcdFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XG4gXG4tXHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xuJiM0MztcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbiYjNDM7XHRcdGlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC0yNjIsMTAgJiM0MzsyNzksMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChwNGRfcHJlc2VudCgqcDRkKSBcdTAwMjZcdTAwMjYgIXA0ZF9mcmVlX3B1ZF9wYWdlKHA0ZCwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdGlmICghcDRkX3ByZXNlbnQoKnA0ZCkpXG4mIzQzO1x0XHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG4mIzQzO1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuJiM0MztcdFx0aWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0RFQlVHX1dYJiMzNDssCiAgICAmIzM0O0NQQV9ERUJVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NsciYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDssCiAgICAmIzM0O3BtZF9mcmVlX3B0ZV9wYWdlJiMzNDssCiAgICAmIzM0O3B1ZF9mcmVlX3BtZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYyBodWdlIHBhZ2Ugc2V0dXAsIGFuZCB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlIChDUEEpIGNvZGUgdG8gdXNlIGBpbml0X21tLm1tYXBfbG9ja2AgZm9yIHN5bmNocm9uaXphdGlvbi4gVGhpcyByZXBsYWNlcyBhIHN0YXRpYyBrZXkgYXBwcm9hY2ggaW4gYXJtNjQgYW5kIGFkZHMgbG9ja2luZyBpbiB4ODYgQ1BBIGFuZCB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIHdhbGtzIGFuZCBtb2RpZmljYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZTg4ZWM1MTZhYTNhZjg3MmQxNWM0NTUwMWU1NWIzODJiYzE5NTI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTcgMjI6MjM6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaAppbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaApAQCAtNyw4ICYjNDM7Nyw2IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9wdGR1bXAuaCZndDsKIAotREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci0KICNpZmRlZiBDT05GSUdfUFREVU1QCiAKICNpbmNsdWRlICZsdDtsaW51eC9tbV90eXBlcy5oJmd0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9tbXUuYyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKaW5kZXggYTI1ZDhiZWFjYzgzMTAuLmJkNTJmY2E2ZTg3MjBiIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKQEAgLTQ5LDggJiM0Mzs0OSw2IEBACiAjZGVmaW5lIE5PX0NPTlRfTUFQUElOR1MJQklUKDEpCiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1MJQklUKDIpCS8qIGFzc3VtZXMgRkVBVF9IUERTIGlzIG5vdCB1c2VkICovCiAKLURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci0KIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7CiBFWFBPUlRfU1lNQk9MKGtpbWFnZV92b2Zmc2V0KTsKIApAQCAtMTg2NCw4ICYjNDM7MTg2Miw3IEBAIGludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kcCkKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICAgYm9vbCBhY3F1aXJlX21tYXBfbG9jaykKJiM0MztpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwdGVfdCAqdGFibGU7CiAJcG1kX3QgcG1kOwpAQCAtMTg3NywyNSAmIzQzOzE4NzQsMTMgQEAgc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCXJldHVybiAxOwogCX0KIAotCS8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovCiAJdGFibGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCBhZGRyKTsKIAlwbWRfY2xlYXIocG1kcCk7CiAJX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7Ci0JaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDthcm02NF9wdGR1bXBfbG9ja19rZXkpICZhbXA7JmFtcDsgYWNxdWlyZV9tbWFwX2xvY2spIHsKLQkJbW1hcF9yZWFkX2xvY2soJmFtcDtpbml0X21tKTsKLQkJbW1hcF9yZWFkX3VubG9jaygmYW1wO2luaXRfbW0pOwotCX0KLQogCXB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7CiAJcmV0dXJuIDE7CiB9CiAKLWludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCS8qIElmIHB0ZHVtcCBpcyB3YWxraW5nIHRoZSBwYWdldGFibGVzLCBhY3F1aXJlIGluaXRfbW0ubW1hcF9sb2NrICovCi0JcmV0dXJuIF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgYWRkciwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyB0cnVlKTsKLX0KLQogaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcG1kX3QgKnRhYmxlOwpAQCAtMTkxMSwzNiAmIzQzOzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiAJfQogCiAJdGFibGUgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpOwotCi0JLyoKLQkgKiBPdXIgb2JqZWN0aXZlIGlzIHRvIHByZXZlbnQgcHRkdW1wIGZyb20gcmVhZGluZyBhIFBNRCB0YWJsZSB3aGljaCBoYXMKLQkgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb24KLQkgKiAod2hpY2ggZ290IGZsaXBwZWQgYnkgcHRkdW1wKSB0aGVuIHRoZSBtbWFwIGxvY2sgc2VxdWVuY2UgaGVyZSB3aWxsLAotCSAqIGFzIGEgcmVzdWx0IG9mIHRoZSBtbWFwIHdyaXRlIGxvY2svdW5sb2NrIHNlcXVlbmNlIGluIHB0ZHVtcCwgZ2l2ZQotCSAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhcwotCSAqIHlldCBub3Qgc3RhcnRlZCB3YWxraW5nIHRoZSBwYWdldGFibGVzIC0gdGhlIHNlcXVlbmNlIG9mIGJhcnJpZXJzCi0JICogaXNzdWVkIGJ5IF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKCkgZ3VhcmFudGVlcyB0aGF0IHB0ZHVtcCB3aWxsCi0JICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuCi0JICovCi0JcHVkX2NsZWFyKHB1ZHApOwotCV9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpOwotCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkgewotCQltbWFwX3JlYWRfbG9jaygmYW1wO2luaXRfbW0pOwotCQltbWFwX3JlYWRfdW5sb2NrKCZhbXA7aW5pdF9tbSk7Ci0JfQotCiAJcG1kcCA9IHRhYmxlOwogCW5leHQgPSBhZGRyOwogCWVuZCA9IGFkZHIgJiM0MzsgUFVEX1NJWkU7CiAJZG8gewogCQlpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKQotCQkJLyoKLQkJCSAqIFBNRCBoYXMgYmVlbiBpc29sYXRlZCwgc28gcHRkdW1wIHdvbiYjMzk7dCBzZWUgaXQuIE5vCi0JCQkgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suCi0JCQkgKi8KLQkJCV9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyBmYWxzZSk7CiYjNDM7CQkJcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7CiAJfSB3aGlsZSAocG1kcCYjNDM7JiM0MzssIG5leHQgJiM0Mzs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7CiAKJiM0MzsJcHVkX2NsZWFyKHB1ZHApOwomIzQzOwlfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTsKIAlwbWRfZnJlZShOVUxMLCB0YWJsZSk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwppbmRleCAxYzIwMTQ0NzAwZDdkNy4uNWE3NmM1OWI1YWRhNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuYwpAQCAtMjgzLDEzICYjNDM7MjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpCiAJbm90ZV9wYWdlKHB0X3N0LCAwLCAtMSwgcHRlX3ZhbChwdGVfemVybykpOwogfQogCi1zdGF0aWMgdm9pZCBhcm02NF9wdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXN0YXRpY19icmFuY2hfaW5jKCZhbXA7YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTsKLQlwdGR1bXBfd2Fsa19wZ2Qoc3QsIG1tLCBOVUxMKTsKLQlzdGF0aWNfYnJhbmNoX2RlYygmYW1wO2FybTY0X3B0ZHVtcF9sb2NrX2tleSk7Ci19Ci0KIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBlbmQgPSB+MFVMOwpAQCAtMzE4LDcgJiM0MzszMTEsNyBAQCB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKQogCQl9CiAJfTsKIAotCWFybTY0X3B0ZHVtcF93YWxrX3BnZCgmYW1wO3N0LnB0ZHVtcCwgaW5mby0mZ3Q7bW0pOwomIzQzOwlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsIGluZm8tJmd0O21tLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHB0ZHVtcF9pbml0aWFsaXplKHZvaWQpCkBAIC0zNjAsNyAmIzQzOzM1Myw3IEBAIGJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpCiAJCX0KIAl9OwogCi0JYXJtNjRfcHRkdW1wX3dhbGtfcGdkKCZhbXA7c3QucHRkdW1wLCAmYW1wO2luaXRfbW0pOwomIzQzOwlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsICZhbXA7aW5pdF9tbSwgTlVMTCk7CiAKIAlpZiAoc3Qud3hfcGFnZXMgfHwgc3QudXhuX3BhZ2VzKSB7CiAJCXByX3dhcm4oJiMzNDtDaGVja2VkIFcmIzQzO1ggbWFwcGluZ3M6IEZBSUxFRCwgJWx1IFcmIzQzO1ggcGFnZXMgZm91bmQsICVsdSBub24tVVhOIHBhZ2VzIGZvdW5kXG4mIzM0OywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCmluZGV4IGQwMjNhNDBhMWUwMzQ1Li4zMDFmYjllNzdkOTFiYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCkBAIC0yMiw2ICYjNDM7MjIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NjX3BsYXRmb3JtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2V0X21lbW9yeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXJlZ2lvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vZTgyMC9hcGkuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC00MTAsNyAmIzQzOzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKQogCiBzdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpOwogCi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiYjNDM7c3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kOwogCXN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDsKQEAgLTQ0Miw2ICYjNDM7NDQzLDE4IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzoKJiM0MzsJICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93bgomIzQzOwkgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuCiYjNDM7CSAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuCiYjNDM7CSAqLwomIzQzOwlzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCAmYW1wO2luaXRfbW0pCiYjNDM7CQlfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtMjEwOSw3ICYjNDM7MjEyMiw5IEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcywKIAljcGEuY3VycGFnZSA9IDA7CiAJY3BhLmZvcmNlX3NwbGl0ID0gZm9yY2Vfc3BsaXQ7CiAKLQlyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYW1wO2NwYSwgMSk7CiYjNDM7CS8qIEF2b2lkIHJhY2Ugd2l0aCBjb25jdXJyZW50IENQQSBjb2xsYXBzZS4gKi8KJiM0MzsJc2NvcGVkX2d1YXJkKG1tYXBfcmVhZF9sb2NrLCAmYW1wO2luaXRfbW0pCiYjNDM7CQlyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYW1wO2NwYSwgMSk7CiAKIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgd2UgcmVhbGx5IGNoYW5nZWQgc29tZXRoaW5nOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKaW5kZXggMDRiOGY2MWVjZTVkOGUuLjA0N2Y1ZjVlMmMzNDc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKQEAgLTYyMSw2ICYjNDM7NjIxLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLAogCSAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSkKJiM0MztERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosCiYjNDM7CSAgICAgbW1hcF93cml0ZV9sb2NrKF9UKSwgbW1hcF93cml0ZV91bmxvY2soX1QpKQomIzQzO0RFRklORV9HVUFSRF9DT05EKG1tYXBfcmVhZF9sb2NrLCBfdHJ5LCBtbWFwX3JlYWRfdHJ5bG9jayhfVCkpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jCmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li41ZDg3YzYzMmEyNTUwNyAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC02NzgsNiAmIzQzOzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kCiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay4KICAqCiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS4KJiM0MzsgKgomIzQzOyAqIFRoZSBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLgogICovCiBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsCkBAIC02OTEsMjQgJiM0Mzs2OTMsMjggQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJLm5vX3ZtYQkJPSB0cnVlCiAJfTsKIAotCS8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi8KLQlpZiAobW0gPT0gJmFtcDtpbml0X21tKQotCQlyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsCi0JCQkJCQkgICAgcGdkLCBwcml2YXRlKTsKLQlpZiAoc3RhcnQgJmd0Oz0gZW5kIHx8ICF3YWxrLm1tKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJLyoKLQkgKiBUaGUgbW1hcCBsb2NrIHByb3RlY3RzIHRoZSBwYWdlIHdhbGtlciBmcm9tIGNoYW5nZXMgdG8gdGhlIHBhZ2UKLQkgKiB0YWJsZXMgZHVyaW5nIHRoZSB3YWxrLiAgSG93ZXZlciBhIHJlYWQgbG9jayBpcyBpbnN1ZmZpY2llbnQgdG8KLQkgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbiYjMzk7dCBoYXZlIGEgVk1BIGFzIG11bm1hcCgpIGRldGFjaGVzCi0JICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nCi0JICogZG93biBQVEVzL3BhZ2UgdGFibGVzLiBJbiB3aGljaCBjYXNlLCB0aGUgbW1hcCB3cml0ZSBsb2NrIHNob3VsZAotCSAqIGJlIGhlbGQuCiYjNDM7CSAqIFdoZW4gd2Fsa2luZyB1c2VybGFuZCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZCB0bwomIzQzOwkgKiBhY2NvdW50IGZvciBtdW5tYXAoKSBkb3duZ3JhZGluZyB0byBhbiBtbWFwIHJlYWQgbG9jayB3aGVuIHRlYXJpbmcKJiM0MzsJICogZG93biBwYWdlIHRhYmxlcy4KJiM0MzsJICoKJiM0MzsJICogV2hlbiB3YWxraW5nIGtlcm5lbCBwYWdlIHRhYmxlcywgYW4gbW1hcCB3cml0ZSBsb2NrIG11c3QgYWxzbyBiZSBoZWxkCiYjNDM7CSAqIHRvIGFjY291bnQgZm9yIHBhZ2UgdGFibGUgZnJlZWluZyBvbiB2bWFwIGh1Z2UgcGFnZSBtYXBwaW5nLgogCSAqLwogCW1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSk7CiYjNDM7CS8qCiYjNDM7CSAqIHg4NiwgYXJtNjQgcHRkdW1wIGFsbG93IHdhbGtzIG9mIGVmaSBtbSYjMzk7cyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3MKJiM0MzsJICogb2YgYXJiaXRyYXJ5IG1tJiMzOTtzLgomIzQzOwkgKgomIzQzOwkgKiBIb3dldmVyLCB0aGV5IGJvdGggbXVzdCBhbHNvIGhvbGQgdGhlIGluaXRfbW0gbG9jayB0byBhY2NvdW50IGZvcgomIzQzOwkgKiBjb25jdXJyZW50IGtlcm5lbCBwYWdlIHRhYmxlIGZyZWVpbmcuCiYjNDM7CSAqLwomIzQzOwltbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoJmFtcDtpbml0X21tKTsKJiM0MzsKJiM0MzsJaWYgKHN0YXJ0ICZndDs9IGVuZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiB3YWxrX3BnZF9yYW5nZShzdGFydCwgZW5kLCAmYW1wO3dhbGspOwogfQpkaWZmIC0tZ2l0IGEvbW0vcHRkdW1wLmMgYi9tbS9wdGR1bXAuYwppbmRleCA5NzMwMjAwMDAwOTZjZi4uNTg1MTA5NmU2ZjY1NmMgMTAwNjQ0Ci0tLSBhL21tL3B0ZHVtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3B0ZHVtcC5jCkBAIC0xNzgsMTEgJiM0MzsxNzgsMTggQEAgdm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQogCiAJZ2V0X29ubGluZV9tZW1zKCk7CiAJbW1hcF93cml0ZV9sb2NrKG1tKTsKJiM0MzsJLyogVG8gc3RhYmlsaXNlIGtlcm5lbCBwYWdlIHRhYmxlcyB3ZSBtdXN0IGhvbGQgdGhlIGluaXRfbW0gbG9jayB0b28uICovCiYjNDM7CWlmIChtbSAhPSAmYW1wO2luaXRfbW0pCiYjNDM7CQltbWFwX3dyaXRlX2xvY2tfbmVzdGVkKCZhbXA7aW5pdF9tbSwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwomIzQzOwogCXdoaWxlIChyYW5nZS0mZ3Q7c3RhcnQgIT0gcmFuZ2UtJmd0O2VuZCkgewogCQl3YWxrX3BhZ2VfcmFuZ2VfZGVidWcobW0sIHJhbmdlLSZndDtzdGFydCwgcmFuZ2UtJmd0O2VuZCwKIAkJCQkgICAgICAmYW1wO3B0ZHVtcF9vcHMsIHBnZCwgc3QpOwogCQlyYW5nZSYjNDM7JiM0Mzs7CiAJfQomIzQzOwomIzQzOwlpZiAobW0gIT0gJmFtcDtpbml0X21tKQomIzQzOwkJbW1hcF93cml0ZV91bmxvY2soJmFtcDtpbml0X21tKTsKIAltbWFwX3dyaXRlX3VubG9jayhtbSk7CiAJcHV0X29ubGluZV9tZW1zKCk7CiAKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAxYWZjYTM1NjhiOWI2NS4uZjRmYTIyN2E4ZDdmMDQgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL3RsYmZsdXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NobXBhcmFtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZV9vd25lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy92bWFsbG9jLmgmZ3Q7CkBAIC0xNTgsMTAgJiM0MzsxNTksMjEgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3BtZChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBNRF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocG1kX3ByZXNlbnQoKnBtZCkgJmFtcDsmYW1wOyAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCiYjNDM7CQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKgomIzQzOwkgKiBBY3F1aXJlIHRoZSBtbWFwIHJlYWQgbG9jayB0byBleGNsdWRlIHB0ZHVtcCwgd2hpY2ggd2Fsa3MKJiM0MzsJICoga2VybmVsIHBhZ2UgdGFibGVzIGl0IGRvZXMgbm90IG93biB1bmRlciB0aGUgbW1hcCB3cml0ZSBsb2NrLgomIzQzOwkgKgomIzQzOwkgKiBDb25jdXJyZW50IHJlYWQgbG9jayBob2xkZXJzIGFyZSBzYWZlOiBlYWNoIGV4Y2x1c2l2ZWx5IG93bnMKJiM0MzsJICogdGhlIHJhbmdlIGl0IG9wZXJhdGVzIG9uIGFuZCBjYW5ub3QgcmVhY2ggdGhpcyBwYWdlIHRhYmxlLgomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgJmFtcDtpbml0X21tKSB7CiYjNDM7CQlpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCkBAIC0yMTAsMTAgJiM0MzsyMjIsMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFBVRF9TSVpFKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocHVkX3ByZXNlbnQoKnB1ZCkgJmFtcDsmYW1wOyAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpCiYjNDM7CQlyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTsKIAotCXJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwkvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqLwomIzQzOwlzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCAmYW1wO2luaXRfbW0pIHsKJiM0MzsJCWlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCXJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKQEAgLTI2MiwxMCAmIzQzOzI3OSwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJaWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUDREX1NJWkUpKQogCQlyZXR1cm4gMDsKIAotCWlmIChwNGRfcHJlc2VudCgqcDRkKSAmYW1wOyZhbXA7ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKQotCQlyZXR1cm4gMDsKJiM0MzsJaWYgKCFwNGRfcHJlc2VudCgqcDRkKSkKJiM0MzsJCXJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpOwogCi0JcmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CS8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovCiYjNDM7CXNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsICZhbXA7aW5pdF9tbSkgewomIzQzOwkJaWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7CiYjNDM7CX0KIH0KIAogc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQ4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN5bmNocm9uaXphdGlvbiBDaGFuZ2UgaW4gQ29yZSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHN5bmNocm9uaXphdGlvbiB3aXRoaW4gY3JpdGljYWwgYXJlYXM6IHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYywgYW5kIENQQSBjb2RlLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHJlcGxhY2luZyBhIHN0YXRpYyBrZXkgYXBwcm9hY2ggb24gYXJtNjQgd2l0aCBgaW5pdF9tbS5tbWFwX2xvY2tgIGFuZCBhZGRpbmcgbG9ja2luZyBpbiB4ODYgZm9yIENQQSBhbmQgdm1hbGxvYyBodWdlIHBhZ2Ugc2V0dXAuIFRoaXMgaXMgYSBzb2xpZCBtb3ZlLCByZXBsYWNpbmcgYSBwb3RlbnRpYWwgd2VhayBzcG90IHdpdGggc29tZXRoaW5nIG1vcmUgcm9idXN0LgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGFjdHVhbCBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIG9uIGFybTY0LCBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIHJlbW92aW5nIHRoZSBgYXJtNjRfcHRkdW1wX2xvY2tfa2V5YCBzdGF0aWMga2V5IGxvZ2ljIGluIGBwbWRfZnJlZV9wdGVfcGFnZWAgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAsIGFsb25nIHdpdGggcmVtb3ZhbCBvZiBgYXJtNjRfcHRkdW1wX3dhbGtfcGdkYC4gVGhlbiwgeDg2IGlzIGdldHRpbmcgYG1tYXBfd3JpdGVfbG9ja2AgYW5kIGBtbWFwX3JlYWRfbG9ja2AgYXJvdW5kIENQQSBjb2xsYXBzZSBhbmQgYF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBjYWxscy4gVGhlbiBpbiBgbW0vcGFnZXdhbGsuY2AgYW5kIGBtbS9wdGR1bXAuY2AgdGhleSYjMzk7cmUgdXBkYXRpbmcgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AgYW5kIGBwdGR1bXBfd2Fsa19wZ2RgLCByZXNwZWN0aXZlbHksIHRvIHVzZSB0aGUgYGluaXRfbW0ubW1hcF9sb2NrYC4gRmluYWxseSwgaW4gYG1tL3ZtYWxsb2MuY2AsIHRoZSBwYXRjaCBhZGRzIGBzY29wZWRfY29uZF9ndWFyZGAgdGhhdCBhdHRlbXB0cyBhbiBgbW1hcF9yZWFkX2xvY2tgIGFyb3VuZCB0aGUgYHZtYXBfdHJ5X2h1Z2VfKmAgZnVuY3Rpb25zLgoKVGhpcyBtZWFucyBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBkZWVwIG9uZSwgYXMgaXQgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEFuZCBpdCYjMzk7cyByZWFjaGFibGUgY29kZSwgd2hpY2ggbWVhbnMgd2UgKmFic29sdXRlbHkqIG5lZWQgdG8gZnV6eiBpdC4gV2UmIzM5O3ZlIGdvdCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByYWNlcyBvciBsb2NraW5nIGlzc3Vlcy4gV2UgY2FuJiMzOTt0IGxldCBzb21ldGhpbmcgbGlrZSB0aGlzIHNsaXAgYnksIHNvIHdlJiMzOTtyZSBnb2luZyB0byBuZWVkIHRvIGxvb2sgY2FyZWZ1bGx5IGF0IHRob3NlIGZ1bmN0aW9ucyBJIG5vdGVkOiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBwdGR1bXBfd2Fsa19wZ2RgLCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCwgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAuIFRoZXNlIGFyZSBvdXIgcHJpbWFyeSB0YXJnZXRzIGZvciB0ZXN0aW5nIGFuZCBhbmFseXNpcy4KCldhaXQgYSBzZWNvbmQsIHB0ZHVtcOKApiB3YXNuJiMzOTt0IHRoYXQgdHJpZ2dlcmVkIHRocm91Z2ggZGVidWdmcz8gSSBuZWVkIHRvIGNoZWNrIGlmIHdlIHJlcXVpcmUgYW55IHNwZWNpYWwgYFBURFVNUGAgY29uZmlndXJhdGlvbnMgdG8gdHJpZ2dlciB0aGlzLiBJJiMzOTtsbCBzZWFyY2ggdGhlIEtjb25maWcgdG8gc2VlIGlmIHdlIG5lZWQgYSBzcGVjaWZpYyBjb25maWcgdG8gZW5hYmxlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQVERVTVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZz00NT1pZiBLVk1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDYtXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBQVERVTVBfU1RBR0UyX0RFQlVHRlNcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ByZXNlbnQgdGhlIHN0YWdlLTIgcGFnZXRhYmxlcyB0byBkZWJ1Z2ZzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0yMTY9Y29uZmlnIEFSQ0hfSEFTX1BURFVNUFxuLS1cbm1tL0tjb25maWcuZGVidWctMjE4LVxubW0vS2NvbmZpZy5kZWJ1ZzoyMTk6Y29uZmlnIFBURFVNUFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjAtXHRib29sXG5tbS9LY29uZmlnLmRlYnVnLTIyMS1cbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xubW0vS2NvbmZpZy5kZWJ1Zy0yMjMtXHRib29sIFwmIzM0O0V4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDM0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBwdGR1bXAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBgUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBrZXkgdG8gZW5hYmxpbmcgcHRkdW1wLCBnb3QgaXQuIE5vdywgbXkgZmlyc3QgbW92ZSBpcyB0byBkaWcgaW50byBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgaW4gcGxhY2UsIHdoYXQgYmFzZSBmZWF0dXJlcyBpdCByZWxpZXMgb24uIEkmIzM5O20gdGhpbmtpbmcgYnVpbGQgb3B0aW9ucywga2VybmVsIGZlYXR1cmVzIOKAkyB0aGF0IGtpbmQgb2YgdGhpbmcuIExldCYjMzk7cyBzZWUgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzIGJlZm9yZSBJIHN0YXJ0IGV4cGVyaW1lbnRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBURFVNUF9ERUJVR0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MjE5PWNvbmZpZyBQVERVTVBcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTIyMS1cbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xubW0vS2NvbmZpZy5kZWJ1Zy0yMjMtXHRib29sIFwmIzM0O0V4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjkxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydCBsb29raW5nIGludG8gdGhlc2UgZGVidWcgb3B0aW9ucz8gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnLmRlYnVnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyMjIuIEkmIzM5O20gaG9waW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgb2YgdGhlc2UgZGVidWdnaW5nLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgaXMgZGVmaW5lZC4gVGhhdCBzZWN0aW9uIGxpa2VseSBjb250YWlucyB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHNldHRpbmdzIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdG8gbWFuaXB1bGF0ZSB0aGUgYmVoYXZpb3IgSSYjMzk7bSBhZnRlci4gSXQmIzM5O3MgdGhlIHVzdWFsIHJvdXRlIHdoZW4gY2hhc2luZyBkb3duIHRoZXNlIGtpbmRzIG9mIGNvbmZpZ3VyYXRpb25zLCB0aGUgS2NvbmZpZyBmaWxlcyB1c3VhbGx5IGtlZXAgYSBnb29kIHRyYWNrIHJlY29yZCBvZiBob3cgdGhlc2UgYXJlIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE1Olx0XG4gMjE2Olx0Y29uZmlnIEFSQ0hfSEFTX1BURFVNUFxuIDIxNzpcdFx0Ym9vbFxuIDIxODpcdFxuIDIxOTpcdGNvbmZpZyBQVERVTVBcbiAyMjA6XHRcdGJvb2xcbiAyMjE6XHRcbiAyMjI6XHRjb25maWcgUFREVU1QX0RFQlVHRlNcbiAyMjM6XHRcdGJvb2wgXCYjMzQ7RXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1wmIzM0O1xuIDIyNDpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcbiAyMjU6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbiAyMjY6XHRcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXG4gMjI3Olx0XHRzZWxlY3QgUFREVU1QXG4gMjI4Olx0XHRoZWxwXG4gMjI5Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gc2hvdyB0aGUga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgaW4gYVxuIDIzMDpcdFx0ICBkZWJ1Z2ZzIGZpbGUuIFRoaXMgaW5mb3JtYXRpb24gaXMgb25seSB1c2VmdWwgZm9yIGtlcm5lbCBkZXZlbG9wZXJzXG4gMjMxOlx0XHQgIHdobyBhcmUgd29ya2luZyBpbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYXJlYXMgb2YgdGhlIGtlcm5lbC5cbiAyMzI6XHRcdCAgSXQgaXMgcHJvYmFibHkgbm90IGEgZ29vZCBpZGVhIHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgaW4gYSBwcm9kdWN0aW9uXG4gMjMzOlx0XHQgIGtlcm5lbC5cbiAyMzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzcyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgRGVidWdnaW5nIE9wdGlvbnMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBkZWVwZXIgbG9vayBhdCB3aGF0JiMzOTtzIGdvaW5nIG9uLi4uIHRoZSBpbml0aWFsIHRob3VnaHQgaXMsIGBQVERVTVBfREVCVUdGU2Agc2VlbXMgdG8gYmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgZm9yIHRoYXQga2luZCBvZiBkZXRhaWxlZCBkZWJ1Z2dpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoYXQgdG9nZ2xlZCBvbi4gTm93LCBhIG5hZ2dpbmcgbWVtb3J5Li4uIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgYERFQlVHX1dYYCBmdW5jdGlvbmFsaXR5IHNvbWV0aW1lcyBsZXZlcmFnZXMgdGhlIGBwdGR1bXBgIGNhcGFiaWxpdGllcy4gSXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHdoYXQgYERFQlVHX1dYYCBpcyBzdXBwb3NlZCB0byBhY2hpZXZlLiBPa2F5LCBiZXR0ZXIgdmVyaWZ5IHRoYXQgcmVsYXRpb25zaGlwIGRpcmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhleSBpbnRlcnJlbGF0ZSB0byBiZSBjZXJ0YWluIG9mIG15IHBhdGggZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFQlVHX1dYJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MTgzPWNvbmZpZyBBUkNIX0hBU19ERUJVR19XWFxuLS1cbm1tL0tjb25maWcuZGVidWctMTg1LVxubW0vS2NvbmZpZy5kZWJ1ZzoxODY6Y29uZmlnIERFQlVHX1dYXG5tbS9LY29uZmlnLmRlYnVnLTE4Ny1cdGJvb2wgXCYjMzQ7V2FybiBvbiBXJiM0MztYIG1hcHBpbmdzIGF0IGJvb3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBvZiB0aGlzIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYG1tL0tjb25maWcuZGVidWdgLiBJIHJlY2FsbCB0aGlzIGZpbGUgdXN1YWxseSBob3VzZXMgdGhlIEtjb25maWcgb3B0aW9ucyBzcGVjaWZpYyB0byBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1Z2dpbmcgZmVhdHVyZXMuIExldCYjMzk7cyBuYXZpZ2F0ZSB0byBhcm91bmQgbGluZSAxODYuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBsaW5lIG9yIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB3aWxsIGhhdmUgdGhlIGtleSB0byB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgLSBhIHNwZWNpZmljIGZlYXR1cmUgb3IgYSByZWxhdGVkIGNvbmRpdGlvbmFsIHRoYXQgZ292ZXJucyBpdHMgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRcdGhlbHBcbiAxODE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIHRlc3RjYXNlIGZvciB0aGUgc2V0dGluZyByb2RhdGEgcmVhZC1vbmx5LlxuIDE4MjpcdFxuIDE4MzpcdGNvbmZpZyBBUkNIX0hBU19ERUJVR19XWFxuIDE4NDpcdFx0Ym9vbFxuIDE4NTpcdFxuIDE4NjpcdGNvbmZpZyBERUJVR19XWFxuIDE4NzpcdFx0Ym9vbCBcJiMzNDtXYXJuIG9uIFcmIzQzO1ggbWFwcGluZ3MgYXQgYm9vdFwmIzM0O1xuIDE4ODpcdFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19ERUJVR19XWFxuIDE4OTpcdFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19QVERVTVBcbiAxOTA6XHRcdGRlcGVuZHMgb24gTU1VXG4gMTkxOlx0XHRzZWxlY3QgUFREVU1QXG4gMTkyOlx0XHRoZWxwXG4gMTkzOlx0XHQgIEdlbmVyYXRlIGEgd2FybmluZyBpZiBhbnkgVyYjNDM7WCBtYXBwaW5ncyBhcmUgZm91bmQgYXQgYm9vdC5cbiAxOTQ6XHRcbiAxOTU6XHRcdCAgVGhpcyBpcyB1c2VmdWwgZm9yIGRpc2NvdmVyaW5nIGNhc2VzIHdoZXJlIHRoZSBrZXJuZWwgaXMgbGVhdmluZyBXJiM0MztYXG4gMTk2Olx0XHQgIG1hcHBpbmdzIGFmdGVyIGFwcGx5aW5nIE5YLCBhcyBzdWNoIG1hcHBpbmdzIGFyZSBhIHNlY3VyaXR5IHJpc2suXG4gMTk3Olx0XG4gMTk4Olx0XHQgIExvb2sgZm9yIGEgbWVzc2FnZSBpbiBkbWVzZyBvdXRwdXQgbGlrZSB0aGlzOlxuIDE5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTI0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgc2V0dGluZyBgREVCVUdfV1hgIGFsc28gYXV0b21hdGljYWxseSBlbmFibGVzIGBQVERVTVBgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBnbyBmb3J3YXJkLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIHRoYXQmIzM5O3MgdG9wIG9mIG1pbmQgaXMgdG8gY2hlY2sgaWYgd2UgaGF2ZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIHRpZWQgdG8gdm1hbGxvYyBodWdlIHBhZ2VzLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoZXkgYWZmZWN0IHRoZSBzeXN0ZW0sIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyB0aGF0IGNvdWxkIGluZmx1ZW5jZSBiZWhhdmlvci4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4tLVxuYXJjaC9LY29uZmlnLTEwOTktI1xuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcbmFyY2gvS2NvbmZpZy0xMTAxLVx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfSFVHRV9WTUFQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3MuIFRoZSB0YXNrIGF0IGhhbmQgbGlrZWx5IGludm9sdmVzIHVuZGVyc3RhbmRpbmcgb3IgbW9kaWZ5aW5nIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIEdpdmVuIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBtb3N0IHJlbGV2YW50IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgYXJjaC9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBob3cgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIGhhbmRsZWQuCgpCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBwcm9qZWN0cyBhcmUgb3JnYW5pemVkLCBgS2NvbmZpZ2AgZmlsZXMgYXJlIHRoZSBjZW50cmFsIGRyaXZlcnMgZm9yIHRoZSBtZW51Y29uZmlnIGludGVyZmFjZS4gSSB3aWxsIGhlYWQgc3RyYWlnaHQgdG8gbGluZSAxMTAwLiBUaGlzIGlzIHByb2JhYmx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGhlIHNlY3Rpb24gSSYjMzk7bSBsb29raW5nIGZvciAtIGEgbW9kdWxlLCBmZWF0dXJlIG9yIGdyb3VwIG9mIG9wdGlvbnMgcmVsYXRlZCB0byBteSBhcmVhIG9mIGZvY3VzLiBJJiMzOTtsbCB0cnkgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiB0aGF0IGxpbmUuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayBiYWNrd2FyZHMgdGhyb3VnaCBkZXBlbmRlbmNpZXMsIGlmIG5lY2Vzc2FyeSwgYW5kIHNlZSBob3cgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiB0aWVzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIGZ1bGZpbGwgd2hhdGV2ZXIgcmVxdWlyZW1lbnRzIEkmIzM5O20gdGFja2xpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDkwOlx0XHRib29sXG4xMDkxOlx0XG4xMDkyOlx0Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVBcbjEwOTM6XHRcdGJvb2xcbjEwOTQ6XHRcbjEwOTU6XHQjXG4xMDk2Olx0IyAgQXJjaHMgdGhhdCBzZWxlY3QgdGhpcyB3b3VsZCBiZSBjYXBhYmxlIG9mIFBNRC1zaXplZCB2bWFwcyAoaS5lLixcbjEwOTc6XHQjICBhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZCgpIHJldHVybnMgdHJ1ZSkuIFRoZSBWTV9BTExPV19IVUdFX1ZNQVAgZmxhZ1xuMTA5ODpcdCMgIG11c3QgYmUgdXNlZCB0byBlbmFibGUgYWxsb2NhdGlvbnMgdG8gdXNlIGh1Z2VwYWdlcy5cbjEwOTk6XHQjXG4xMTAwOlx0Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcbjExMDE6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX0hVR0VfVk1BUFxuMTEwMjpcdFx0Ym9vbFxuMTEwMzpcdFxuMTEwNDpcdGNvbmZpZyBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVcbjExMDU6XHRcdGJvb2xcbjExMDY6XHRcbjExMDc6XHQjIEFyY2hzIHRoYXQgd2FudCB0byB1c2UgcG1kX21rd3JpdGUgb24ga2VybmVsIG1lbW9yeSBuZWVkIGl0IGRlZmluZWQgZXZlblxuMTEwODpcdCMgaWYgdGhlcmUgYXJlIG5vIHVzZXJzcGFjZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyB0aGF0IHVzZSBpdFxuMTEwOTpcdGNvbmZpZyBBUkNIX1dBTlRfS0VSTkVMX1BNRF9NS1dSSVRFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzgzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBIdWdlIHZtYWxsb2MgQ29uZmlndXJhdGlvbioqCgpIbW0sIGxldCYjMzk7cyBzZWUuLi5JJiMzOTttIGRpZ2dpbmcgaW50byB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LiBSaWdodCwgc28gYEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NgIGlzIGEgYml0IG9mIGEgc25lYWt5IG9uZS4gSXQmIzM5O3Mgbm90IGEgc3RyYWlnaHRmb3J3YXJkIG9wdGlvbiB5b3Ugc2VlIGluIHRoZSBtYWluIGNvbmZpZyBtZW51cywgaXMgaXQ/IEl0JiMzOTtzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgdHlwaWNhbGx5IHNlbGVjdGVkIGltcGxpY2l0bHkgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLgoKVGhlIHJlYWwgcXVlc3Rpb24gSSBuZWVkIGFuc3dlcmVkIGlzOiBpcyB0aGVyZSBhbiAqZXhwbGljaXQqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgSSBjYW4gdHdlYWssIHRvIGFjdHVhbGx5ICplbmFibGUqIG9yIGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgaHVnZSB2bWFsbG9jPyBJIGtub3cgdGhhdCBvbiBzb21lIGFyY2hpdGVjdHVyZXMgeW91IG1pZ2h0IGhhdmUgc29tZXRoaW5nIGxpa2UgYENPTkZJR19IVUdFVExCX1ZNQUxMT0NgIHRvIHR1cm4gaXQgb24sIGJ1dCB3aGF0IGFib3V0IHRoZSBicm9hZGVyIHNjb3BlPyBEbyBJIG5lZWQgdG8gbG9vayBmb3IgYSBkZXBlbmRlbmN5LCBzb21lIG90aGVyIGFyY2gtc3BlY2lmaWMgZmxhZywgb3IgcGVyaGFwcyBzb21ldGhpbmcgbmV3IGVudGlyZWx5PyBJIHdvbmRlciB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgYXJlIHRoZXJlIHNvbWUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcywgd2l0aCB3aGljaCBJIGFtIG1vcmUgZmFtaWxpYXIsIHRvIGNoZWNrPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcuKkhVR0VfVk1BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTA5Mj1jb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxuLS1cbmFyY2gvS2NvbmZpZy0xMDk5LSNcbmFyY2gvS2NvbmZpZzoxMTAwOmNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXG5hcmNoL0tjb25maWctMTEwMS1cdGRlcGVuZHMgb24gSEFWRV9BUkNIX0hVR0VfVk1BUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc1NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqQ2hlY2tpbmcgYEhVR0VfVk1BUGAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIG1lbnRhbCBnZWFycyBhcmUgYWxyZWFkeSB0dXJuaW5nLiAmIzM0O0NoZWNrIGBIVUdFX1ZNQVBgJiMzNDsg4oCTIHRoYXQmIzM5O3MgYSBwcmV0dHkgc3BlY2lmaWMgZGlyZWN0aXZlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB3aHkgYXJlIHdlIGxvb2tpbmcgYXQgdGhlIGBIVUdFX1ZNQVBgPyBXaGF0IHByb2JsZW0gYXJlIHdlIHRyeWluZyB0byBzb2x2ZSwgb3Igd2hhdCBhc3BlY3Qgb2YgdGhlIHN5c3RlbSBhcmUgd2UgY3VycmVudGx5IGludmVzdGlnYXRpbmc/JiMzNDsuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGNvbnRleHQuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGxhcmdlIHBhZ2VzLiBJcyB0aGVyZSBhIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlPyBQZXJmb3JtYW5jZSBib3R0bGVuZWNrPyBVbmV4cGVjdGVkIGJlaGF2aW9yIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcyBiZWluZyB1c2VkIChvciBub3QgYmVpbmcgdXNlZCkgYXMgZXhwZWN0ZWQ/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB0b29scyBhbmQgbWV0aG9kcyBJJiMzOTtkIGxpa2VseSB1c2UuIEFtIEkgcHVsbGluZyBmcm9tIHRoZSBkZWJ1Z2dpbmcgdG9vbHMgdG8gcnVuIGluIHJlYWwtdGltZSBtb2RlPyBBbSBJIGdvaW5nIGJhY2sgdG8gcHJldmlvdXMgbG9ncyB0byBmaW5kIHRoZSBjYXVzZT8gUGVyaGFwcyBJIGhhdmUgYSBzY3JpcHQgdGhhdCBnZW5lcmF0ZXMgYSByZXBvcnQ/CgpTcGVjaWZpY2FsbHksIEkmIzM5O20gY29uc2lkZXJpbmcgd2hhdCBkYXRhIEkgd2lsbCBiZSBsb29raW5nIGZvcjogVGhlIHNpemUgb2YgdGhlIGBIVUdFX1ZNQVBgLCBpdHMgY3VycmVudCB1c2FnZSwgYW55IGZyYWdtZW50YXRpb24sIGFuZCBhbnkgcmVsZXZhbnQgZXJyb3IgbWVzc2FnZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBzdGF0ZSBvZiB0aGUgVk1BUCB3aXRoIHRoZSBvdGhlciBtZW1vcnkgc3Vic3lzdGVtcyBpbiB0aGUgc3lzdGVtLiBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgbXkgaHlwb3RoZXNpczogcGVyaGFwcyB0aGVyZSYjMzk7cyBhIG1pc2NvbmZpZ3VyYXRpb24gb2YgaHVnZSBwYWdlIHJlc2VydmF0aW9ucywgb3IgYSByZXNvdXJjZSBjb25zdHJhaW50IGxpbWl0aW5nIHRoZSBhbGxvY2F0aW9uIG9mIGxhcmdlIHBhZ2VzLCBsZWFkaW5nIHRvIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIG9yIGV2ZW4gYXBwbGljYXRpb24gY3Jhc2hlcy4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMga2luZCBvZiBpc3N1ZSBjYW4gYmUgc3VidGxlIGFuZCByZXF1aXJlIGEgbnVhbmNlZCB1bmRlcnN0YW5kaW5nIG9mIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYW5kIHN5c3RlbSBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnLipIVUdFX1ZNQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9mZWF0dXJlcy92bS9odWdlLXZtYXAvYXJjaC1zdXBwb3J0LnR4dC0yLSMgRmVhdHVyZSBuYW1lOiAgICAgICAgICBodWdlLXZtYXBcbkRvY3VtZW50YXRpb24vZmVhdHVyZXMvdm0vaHVnZS12bWFwL2FyY2gtc3VwcG9ydC50eHQ6MzojICAgICAgICAgS2NvbmZpZzogICAgICAgSEFWRV9BUkNIX0hVR0VfVk1BUFxuRG9jdW1lbnRhdGlvbi9mZWF0dXJlcy92bS9odWdlLXZtYXAvYXJjaC1zdXBwb3J0LnR4dC00LSMgICAgICAgICBkZXNjcmlwdGlvbjogICBhcmNoIHN1cHBvcnRzIHRoZSBhcmNoX3ZtYXBfcHVkX3N1cHBvcnRlZCgpIGFuZCBhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZCgpIFZNIEFQSXNcbi0tXG5hcmNoL0tjb25maWc9MTA4OT1jb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuLS1cbmFyY2gvS2NvbmZpZy0xMDkxLVxuYXJjaC9LY29uZmlnOjEwOTI6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVBcbmFyY2gvS2NvbmZpZy0xMDkzLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMzMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVm1hbGxvYywgQ1BBLCBhbmQgdGhlIEFyY2hpdGVjdHVyZSBEYW5jZSoqCgpSaWdodCwgc28sIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGh1Z2Ugdm1hbGxvYyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGNhbiBhY3R1YWxseSBoYW5kbGUgaXQuIFRoYXQmIzM5O3MgZ29vZCwgZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50IGlzIGtleS4gQnV0IHRoZW4sIG15IG1pbmQganVtcHMgdG8gc29tZXRoaW5nIG1vcmUgdGFyZ2V0ZWQ6IENQQSwgb3IgYGNoYW5nZV9wYWdlX2F0dHJgLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGFuIHg4NiB0aGluZywgaXNuJiMzOTt0IGl0PyBNeSBpbnR1aXRpb24gaXMgc2NyZWFtaW5nICYjMzQ7eDg2IHNwZWNpZmljJiMzNDsgYW5kIEkgbmVlZCB0byBjaGVjayBteXNlbGYuCgpOb3csIG15IHJlYWwgcXVlc3Rpb24gaXM6IGlzIHRoZXJlIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbj8gQW55IHJlbGV2YW50IEtjb25maWcgZW50cnksIG1heWJlPyBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBhbnkgd2F5IHRvIGNvbnRyb2wgQ1BBJiMzOTtzIGJlaGF2aW9yLCB0b2dnbGUgaXQgb24gb3Igb2ZmLCBvciBhZGp1c3QgaXRzIHBhcmFtZXRlcnMuIEtub3dpbmcgdGhhdCB3aWxsIGJlIHBpdm90YWwgZm9yIGFkYXB0aW5nIHRoaXMgdG8gc3BlY2lmaWMgc3lzdGVtcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb25maWcgb3B0aW9ucyB0byBzZWUgd2hhdCBjb250cm9sIEkgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnLipDUEEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3Q9MTUwOT1GRUNfR0VUXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QtMTUxMS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0OjE1MTI6R2V0cyBGRUMgY29uZmlndXJhdGlvbiBhbmQgc3RhdGUgbGlrZSBgYEVUSFRPT0xfR0ZFQ1BBUkFNYGAgaW9jdGwgcmVxdWVzdC5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0LTE1MTMtXG4tLVxuYXJjaC94ODYvS2NvbmZpZz0xNDY2PWNvbmZpZyBYODZfRElSRUNUX0dCUEFHRVNcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTE0NzQtXG5hcmNoL3g4Ni9LY29uZmlnOjE0NzU6Y29uZmlnIFg4Nl9DUEFfU1RBVElTVElDU1xuYXJjaC94ODYvS2NvbmZpZy0xNDc2LVx0Ym9vbCBcJiMzNDtFbmFibGUgc3RhdGlzdGljIGZvciBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGVcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLmRlYnVnPTE1Mz1jb25maWcgREVCVUdfQk9PVF9QQVJBTVNcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLmRlYnVnLTE1OS1cbmFyY2gveDg2L0tjb25maWcuZGVidWc6MTYwOmNvbmZpZyBDUEFfREVCVUdcbmFyY2gveDg2L0tjb25maWcuZGVidWctMTYxLVx0Ym9vbCBcJiMzNDtDUEEgc2VsZi10ZXN0IGNvZGVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFBvdGVudGlhbCBEZWJ1Z2dpbmcgQWlkcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzLi4uIGBDUEFfREVCVUdgIG1pZ2h0IGJlIGEgdXNlZnVsIHRvb2wgaGVyZS4gSSByZWNhbGwgc2VlaW5nIHRoYXQgZmxhZyBzb21ld2hlcmUgYW5kIG5vdyYjMzk7cyB0aGUgdGltZSB0byBpbnZlc3RpZ2F0ZS4gVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgaXQgd29ya3MsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG91dCBgYXJjaC94ODYvS2NvbmZpZy5kZWJ1Z2AuIEkgc2VlbSB0byByZW1lbWJlciBpdCBiZWluZyBkZWZpbmVkIGFyb3VuZCBsaW5lIDE2MC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUsIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IGlzc3VlLiBMZXQgbWUgZ3JhYiB0aGUgc291cmNlIGFuZCBoYXZlIGEgcXVpY2sgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTU6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXG4gMTU2Olx0XHRkZXBlbmRzIG9uIERFQlVHX0ZTXG4gMTU3Olx0XHRoZWxwXG4gMTU4Olx0XHQgIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugc3RydWN0IGJvb3RfcGFyYW1zIHRvIGJlIGV4cG9ydGVkIHZpYSBkZWJ1Z2ZzLlxuIDE1OTpcdFxuIDE2MDpcdGNvbmZpZyBDUEFfREVCVUdcbiAxNjE6XHRcdGJvb2wgXCYjMzQ7Q1BBIHNlbGYtdGVzdCBjb2RlXCYjMzQ7XG4gMTYyOlx0XHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxuIDE2MzpcdFx0aGVscFxuIDE2NDpcdFx0ICBEbyBjaGFuZ2VfcGFnZV9hdHRyKCkgc2VsZi10ZXN0cyBldmVyeSAzMCBzZWNvbmRzLlxuIDE2NTpcdFxuIDE2NjpcdGNvbmZpZyBERUJVR19FTlRSWVxuIDE2NzpcdFx0Ym9vbCBcJiMzNDtEZWJ1ZyBsb3ctbGV2ZWwgZW50cnkgY29kZVwmIzM0O1xuIDE2ODpcdFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcbiAxNjk6XHRcdGhlbHBcbiAxNzA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzYW5pdHkgY2hlY2tzIGluIHg4NiYjMzk7cyBsb3ctbGV2ZWwgZW50cnkgY29kZS5cbiAxNzE6XHRcdCAgU29tZSBvZiB0aGVzZSBzYW5pdHkgY2hlY2tzIG1heSBzbG93IGRvd24ga2VybmVsIGVudHJpZXMgYW5kXG4gMTcyOlx0XHQgIGV4aXRzIG9yIG90aGVyd2lzZSBpbXBhY3QgcGVyZm9ybWFuY2UuXG4gMTczOlx0XG4gMTc0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzc5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIENQQSoqCgpPa2F5LCBzbyBgQ1BBX0RFQlVHYCBoYXMgdGhpcyBuZWF0IHRyaWNrIHdoZXJlIGl0IHJ1bnMgYGNoYW5nZV9wYWdlX2F0dHIoKWAgc2VsZi10ZXN0cyBldmVyeSAzMCBzZWNvbmRzLiBUaGF0JiMzOTtzIGZhbnRhc3RpYyEgVGhpcyBnaXZlcyBtZSBhIHNvbGlkIG9wcG9ydHVuaXR5IGZvciBmdXp6aW5nIENQQS4KClRoZSBmaXJzdCBzdGVwIGhlcmUgaXMgdG8gZW5zdXJlIEkmIzM5O3ZlIGVuYWJsZWQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zOiBgUFREVU1QX0RFQlVHRlNgLCBgREVCVUdfV1hgLCBhbmQsIG9mIGNvdXJzZSwgYENQQV9ERUJVR2AuIFRob3NlIGFyZSBlc3NlbnRpYWwuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGtleSBzeW1ib2xzIHRvIHRhcmdldC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSBmb3Igbm93OiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBwdGR1bXBfd2Fsa19wZ2RgLCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCwgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAuCgpJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb25zIG9mIGBwbWRfZnJlZV9wdGVfcGFnZWAgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAganVzdCB0byBiZSBzdXJlLiBBIHF1aWNrIHNlYXJjaCByZXZlYWxzIHRoYXQgdGhleSBhcmUgaW4gYGFyY2gvYXJtNjQvbW0vbW11LmNgLiBBaCwgYW5kIHdhaXQsIGB2bWFwX3RyeV9odWdlX3BtZGAgY2FsbHMgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgd2hpY2ggY291bGQgYmUgaW50ZXJlc3RpbmcuIE5vdywgaXMgYHBtZF9mcmVlX3B0ZV9wYWdlYCBkZWZpbmVkICpvbmx5KiBmb3IgQVJNNjQ/IEkgaGF2ZSB0byBjb25zaWRlciBvdGhlciBhcmNoaXRlY3R1cmVzIGZvciBicm9hZGVyIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfZnJlZV9wdGVfcGFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL21tdS5jPTE4NTc9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2NC1cbmFyY2gvYXJtNjQvbW0vbW11LmM6MTg2NTppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2Ni17XG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYz0xODg0PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMTkwMy1cdFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcbmFyY2gvYXJtNjQvbW0vbW11LmM6MTkwNDpcdFx0XHRwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTtcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTkwNS1cdH0gd2hpbGUgKHBtZHAmIzQzOyYjNDM7LCBuZXh0ICYjNDM7PSBQTURfU0laRSwgbmV4dCAhPSBlbmQpO1xuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmM9MTY3NT1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZClcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jLTE2ODQtXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcmFkaXhfcGd0YWJsZS5jOjE2ODU6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmMtMTY4Ni17XG4tLVxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmM9MTE3PWludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kKVxuLS1cbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jLTEyNC1cbmFyY2gvcmlzY3YvbW0vcGd0YWJsZS5jOjEyNTppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMtMTI2LXtcbi0tXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM9NzE4PWludCBwdWRfZnJlZV9wbWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc1NC0vKipcbmFyY2gveDg2L21tL3BndGFibGUuYzo3NTU6ICogcG1kX2ZyZWVfcHRlX3BhZ2UgLSBDbGVhciBQTUQgZW50cnkgYW5kIGZyZWUgUFRFIHBhZ2UuXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzU2LSAqIEBwbWQ6IFBvaW50ZXIgdG8gdGhlIFBNRFxuLS1cbmFyY2gveDg2L21tL3BndGFibGUuYy03NjEtICovXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NzYyOmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzYzLXtcbi0tXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzgyLSAqL1xuYXJjaC94ODYvbW0vcGd0YWJsZS5jOjc4MzppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc4NC17XG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjE3Nj1pbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIxNzc6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMTc4LSNlbHNlXHQvKiAhQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVAgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0yMjA0PXN0YXRpYyBpbmxpbmUgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMjA3LX1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIyMDg6c3RhdGljIGlubGluZSBpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjIwOS17XG4tLVxubW0vdm1hbGxvYy5jPTE0Mz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTE3Mi1cdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbm1tL3ZtYWxsb2MuYzoxNzM6XHRcdGlmICghcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcbm1tL3ZtYWxsb2MuYy0xNzQtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTgyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2gmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGluaXRpYWxseSB0aG91Z2h0IGl0IHdhcyBqdXN0IGZvY3VzZWQgb24gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZ1bmN0aW9ucywgc2luY2UgdGhlIGVudHJ5IHBvaW50IHNlZW1zIHRvIGJlIGZyb20gYG1tL3ZtYWxsb2MuY2AuIEJ1dCBob2xkIG9uLCB0aGUgY2hhbmdlcyBhcmUgYWN0dWFsbHkgYnJvYWRlciB0aGFuIHRoYXQuIEkgc2VlIG1vZGlmaWNhdGlvbnMgaW4gYGFyY2gvYXJtNjQvbW0vbW11LmNgLCBzcGVjaWZpY2FsbHkgdG8gYHBtZF9mcmVlX3B0ZV9wYWdlYCBhbmQgYHB1ZF9mcmVlX3BtZF9wYWdlYC4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgdGhlIHg4NiBzaWRlLCB3aXRoIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCBjaGFuZ2luZyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBhbmQgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAuIEFsc28sIGl0IHRvdWNoZXMgcXVpdGUgYSBmZXcgb3RoZXIgYXJlYXMsIGluY2x1ZGluZyBgbW0vcGFnZXdhbGsuY2AsIGBtbS9wdGR1bXAuY2AgYW5kIGBtbS92bWFsbG9jLmNgIGFzIGV4cGVjdGVkLgoKVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGggYXJlOiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBwdGR1bXBfd2Fsa19wZ2RgLCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCwgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAuIEkgc2hvdWxkIHJlYWxseSBmb2N1cyBteSBhdHRlbnRpb24gb24gdW5kZXJzdGFuZGluZyBob3cgdGhlIGNoYW5nZXMgdG8gdGhlc2UgZnVuY3Rpb25zIGltcGFjdCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBmbG93LgoKTm93LCBhIHF1aWNrIG5vdGUsIEkgc2VlIHRoYXQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgaXMgc3RhdGljIHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIEdpdmVuIHRoYXQgaXQmIzM5O3Mgc3RhdGljLCBJIHNob3VsZCB2ZXJpZnkgaXRzIHJlYWNoYWJpbGl0eSB0byBlbnN1cmUgaXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgdXNlZC4gTGV0IG1lIGNoZWNrIGlmIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHNvbWV0aGluZyBsaWtlIGBfX2NwYV9mbHVzaF90bGJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlbiBJJiMzOTtsbCBiZSBhYmxlIHRvIGRldGVybWluZSB0aGUgb3ZlcmFsbCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQxMj1zdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MTMtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQxNDpzdGF0aWMgdm9pZCBfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDE1LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ0NS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDQ2OnN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDQ3LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ1NC1cdHNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssIFx1MDAyNmluaXRfbW0pXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ1NTpcdFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDU2LX1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTQ1OD1zdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ5My1cdGlmIChjcGEtXHUwMDNlZmxhZ3MgXHUwMDI2IENQQV9DT0xMQVBTRSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDk0Olx0XHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDk1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MDcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipBbmFseXppbmcgdGhlIENQQSBDYWxsIENoYWluKioKClJpZ2h0LCBzbyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBkZWZpbml0ZWx5IGJlaW5nIGludm9rZWQgYnkgYGNwYV9mbHVzaGAuIFRoYXQmIzM5O3MgZ29vZCB0byBoYXZlIGNvbmZpcm1lZC4gQW5kIGFzIEkgc3VzcGVjdGVkLCBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyB0aGUgY29yZSBmdW5jdGlvbiwgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gQ1BBLiBOb3csIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcXVpY2tseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgdm1hcF90cnlfaHVnZV9wbWRgIGlzIGRlY2xhcmVkIHN0YXRpY2FsbHkuIExldCBtZSBqdXN0IHZlcmlmeSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFwX3RyeV9odWdlX3BtZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9OTU9c3RhdGljIGludCB2bWFwX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0xNDItXG5tbS92bWFsbG9jLmM6MTQzOnN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL3ZtYWxsb2MuYy0xNDQtXHRcdFx0cGh5c19hZGRyX3QgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90LFxuLS1cbm1tL3ZtYWxsb2MuYz0xNzk9c3RhdGljIGludCB2bWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0xOTItXG5tbS92bWFsbG9jLmM6MTkzOlx0XHRpZiAodm1hcF90cnlfaHVnZV9wbWQocG1kLCBhZGRyLCBuZXh0LCBwaHlzX2FkZHIsIHByb3QsXG5tbS92bWFsbG9jLmMtMTk0LVx0XHRcdFx0XHRtYXhfcGFnZV9zaGlmdCkpIHtcbi0tXG5tbS92bWFsbG9jLmM9MjA2PXN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMjI3LVxubW0vdm1hbGxvYy5jOjIyODpcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXG5tbS92bWFsbG9jLmMtMjI5LVx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuLS1cbm1tL3ZtYWxsb2MuYz0yNjM9c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0yODQtXG5tbS92bWFsbG9jLmM6Mjg1Olx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbm1tL3ZtYWxsb2MuYy0yODYtXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDk1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBtaW5lOgoKKipTdGF0aWMgQW5hbHlzaXMgYW5kIFBvdGVudGlhbCBIb3RzcG90cyoqCgpSaWdodCwgdGhpcyBmZWVscyBwcmV0dHkgc3RhdGljLCBvbiB0aGUgc3VyZmFjZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBzb21lIGtleSBzeW1ib2xzLCBJIHNlZSB0aGVzZSBhcyBwb3RlbnRpYWwgaG90IHNwb3RzIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6IGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGB2bWFwX3RyeV9odWdlX3A0ZGAg4oCTIHRoZSBodWdlIHBhZ2UgYWxsb2NhdGlvbiBhdHRlbXB0cyB3aXRoaW4gdm1hbGxvYyBzcGFjZS4gVGhlbiB0aGVyZSYjMzk7cyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBhbmQgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGJvdGggb2Ygd2hpY2ggc2NyZWFtIHBvdGVudGlhbCBjb250ZW50aW9uIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gcGFnZSBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9ucyBhbmQgbGFyZ2UgcGFnZSBjb2xsYXBzaW5nLiBBbHNvLCBJJiMzOTt2ZSBnb3QgYHB0ZHVtcF93YWxrX3BnZGAsIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgLCBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCBhbmQgYHB1ZF9mcmVlX3BtZF9wYWdlYCwgd2hpY2ggYXJlIGFsbCBwb2ludGluZyBtZSB0b3dhcmQgcGFnZSB0YWJsZSB3YWxraW5nLCBkZWJ1Z2dpbmcsIGFuZCBkZWFsbG9jYXRpb24gcGF0aHMuIEFsbCBvZiB0aGVzZSBzZWVtIHRvIHJlcHJlc2VudCBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIGxhcmdlIG1lbW9yeSBtYW5hZ2VtZW50LgoKV2FpdCBhIHNlY29uZOKApiBgcHRkdW1wX3dhbGtfcGdkYCBpcyBleHBvcnRlZD8gVGhhdOKAmXMgaW50ZXJlc3RpbmcuIEkgaGFkbiYjMzk7dCByZWFsaXplZCB0aGF0IHdhcyBleHBvc2VkLiBUaGlzIG1lYW5zIGl0IG1pZ2h0IGJlIHVzZWQgYnkgZXh0ZXJuYWwgbW9kdWxlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBjb25zaWRlciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9uIHRob3NlIGZ1bmN0aW9uYWxpdGllcyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MTY9c3RydWN0IHB0ZHVtcF9pbmZvIHtcbi0tXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0yMS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjIyOnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKTtcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTIzLSNpZmRlZiBDT05GSUdfQVJNX1BURFVNUF9ERUJVR0ZTXG4tLVxuYXJjaC9hcm0vbW0vZHVtcC5jPTM5OD1zdGF0aWMgdm9pZCB3YWxrX3BnZChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5hcmNoL2FybS9tbS9kdW1wLmMtNDE0LVxuYXJjaC9hcm0vbW0vZHVtcC5jOjQxNTp2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbmFyY2gvYXJtL21tL2R1bXAuYy00MTYte1xuLS1cbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmM9Nz1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5hcmNoL2FybS9tbS9wdGR1bXBfZGVidWdmcy5jLTEwLVxuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYzoxMTpcdHB0ZHVtcF93YWxrX3BnZChtLCBpbmZvKTtcbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmMtMTItXHRyZXR1cm4gMDtcbi0tXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jPTI4Nj12b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxuLS1cbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzEzLVxuYXJjaC9hcm02NC9tbS9wdGR1bXAuYzozMTQ6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBpbmZvLVx1MDAzZW1tLCBOVUxMKTtcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzE1LX1cbi0tXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jPTMzMT1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzU1LVxuYXJjaC9hcm02NC9tbS9wdGR1bXAuYzozNTY6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzU3LVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM9MzM0PXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzUxLVx0LyogVHJhdmVyc2Uga2VybmVsIHBhZ2UgdGFibGVzICovXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjM1MjpcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy0zNTMtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jPTM2OD1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzkxLVxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYzozOTI6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzkzLVxuLS1cbmFyY2gvcmlzY3YvbW0vcHRkdW1wLmM9MzUzPXN0YXRpYyB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZF9tbV9pbmZvICpwaW5mbylcbi0tXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTM3Mi1cbmFyY2gvcmlzY3YvbW0vcHRkdW1wLmM6MzczOlx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgcGluZm8tXHUwMDNlbW0sIE5VTEwpO1xuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zNzQtfVxuLS1cbmFyY2gvcmlzY3YvbW0vcHRkdW1wLmM9Mzc2PWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zOTktXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jOjQwMDpcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy00MDEtXG4tLVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jPTE4Mj1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMTAtXHRcdHJldHVybiB0cnVlO1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjIxMTpcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0sIE5VTEwpO1xuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTIxMi1cdGlmIChzdC53eF9wYWdlcykge1xuLS1cbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0yMjY9c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTI1MC1cdG11dGV4X2xvY2soXHUwMDI2Y3BhX211dGV4KTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNTE6XHRwdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBcdTAwMjZpbml0X21tLCBOVUxMKTtcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yNTItXHRtdXRleF91bmxvY2soXHUwMDI2Y3BhX211dGV4KTtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MzA9c3RydWN0IHNlcV9maWxlO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjMxOnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjMyOnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0zMy1cdFx0XHRcdCAgIGJvb2wgdXNlcik7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzQ6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozNTojZGVmaW5lIHB0ZHVtcF9jaGVja193eCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTM2LXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9OD1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy05LXtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxMDpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIFx1MDAyNmluaXRfbW0sIGZhbHNlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0xMS1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYz0xNj1zdGF0aWMgaW50IHB0ZHVtcF9jdXJrbmxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTE4LVx0aWYgKGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlcGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjE5Olx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVx1MDAzZW1tLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjAtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MjY9c3RhdGljIGludCBwdGR1bXBfY3VydXNyX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yOC1cdGlmIChjdXJyZW50LVx1MDAzZW1tLVx1MDAzZXBnZClcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoyOTpcdFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgY3VycmVudC1cdTAwM2VtbSwgdHJ1ZSk7XG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzAtXHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9Mzc9c3RhdGljIGludCBwdGR1bXBfZWZpX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0zOS1cdGlmIChlZmlfbW0ucGdkKVxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjQwOlx0XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcdTAwMjZlZmlfbW0sIGZhbHNlKTtcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy00MS1cdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQxNj1zdGF0aWMgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDIyLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDIzOmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDI0LVx0XHRcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU3LVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDU4Olx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgbW0sIHBnZCk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NTktXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDczLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc0OnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzUte1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc2Olx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUobSwgbW0sIG1tLVx1MDAzZXBnZCwgZmFsc2UsIHRydWUpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc3LX1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3OC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3OTp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODAtXHRcdFx0XHQgICBib29sIHVzZXIpXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDg2LSNlbmRpZlxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDg3Olx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUobSwgbW0sIHBnZCwgZmFsc2UsIGZhbHNlKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OC19XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NDkwPXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwMC1cdHBnZCA9IGtlcm5lbF90b191c2VyX3BnZHAocGdkKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwMTpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFx1MDAyNmluaXRfbW0sIHBnZCwgdHJ1ZSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTAyLSNlbmRpZlxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwNC1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwNTpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDYte1xuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwOS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUxMDpcdHJldHVybiBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShOVUxMLCBcdTAwMjZpbml0X21tLCBJTklUX1BHRCwgdHJ1ZSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTExLX1cbi0tXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmM9NzU9dm9pZCBfX2luaXQgZWZpX2R1bXBfcGFnZXRhYmxlKHZvaWQpXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV8zMi5jLTc3LSNpZmRlZiBDT05GSUdfRUZJX1BHVF9EVU1QXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmM6Nzg6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWwoTlVMTCwgXHUwMDI2aW5pdF9tbSk7XG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmMtNzktI2VuZGlmXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jPTQyMz12b2lkIF9faW5pdCBlZmlfZHVtcF9wYWdldGFibGUodm9pZClcbi0tXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmMtNDI1LSNpZmRlZiBDT05GSUdfRUZJX1BHVF9EVU1QXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmM6NDI2Olx0cHRkdW1wX3dhbGtfcGdkX2xldmVsKE5VTEwsIFx1MDAyNmVmaV9tbSk7XG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmMtNDI3LSNlbmRpZlxuLS1cbmluY2x1ZGUvbGludXgvcHRkdW1wLmg9MTM9c3RydWN0IHB0ZHVtcF9zdGF0ZSB7XG4tLVxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0yNy1cbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6Mjg6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTI5LVx0XHRcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTMwLVx0XHRcdFx0Ym9vbCBjaGVja3d4LCBib29sIGRtZXNnKTtcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6MzE6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTtcbmluY2x1ZGUvbGludXgvcHRkdW1wLmgtMzItYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZCk7XG4tLVxubW0vcHRkdW1wLmM9MTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcHRkdW1wX29wcyA9IHtcbi0tXG5tbS9wdGR1bXAuYy0xNzQtXG5tbS9wdGR1bXAuYzoxNzU6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKVxubW0vcHRkdW1wLmMtMTc2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxNjMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYHB0ZHVtcF93YWxrX3BnZGAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBwdGR1bXBfd2Fsa19wZ2RgIGlzIGRlZmluZWQgaW4gYG1tL3B0ZHVtcC5jYCBhbmQgaXRzIGRlY2xhcmF0aW9uIHJlc2lkZXMgaW4gYGluY2x1ZGUvbGludXgvcHRkdW1wLmhgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIFdhaXQgYSBzZWNvbmQuLi4gaXQmIzM5O3MgZGVjbGFyZWQgZ2xvYmFsbHkgYnV0IG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkIHRvIG1vZHVsZXMuIFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIElzIGl0IG1lYW50IHRvIGJlIGludGVybmFsPyBBbHJpZ2h0LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIHNlZSBob3cgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgaXMgaGFuZGxlZCByZWdhcmRpbmcgaXRzIGV4cG9ydCBzdGF0dXMsIGFzIGl0JiMzOTtzIGxpa2VseSByZWxhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBleHBvcnQgaXMgZXhwbGljaXQsIG9yIGlmIHRoaXMgaXMgYW5vdGhlciBmdW5jdGlvbiB3aXRoIHNpbWlsYXIgbnVhbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTg2MT1zdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTM4LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxOTM5OnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTk0MC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE5NDQ9c3RhdGljIGludCBjcGFfcHJvY2Vzc19hbGlhcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NzQtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE5NzU6XHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFsaWFzX2NwYSwgMCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NzYtXHRcdGlmIChyZXQpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMDA4LVx0XHQgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjAwOTpcdFx0X19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWxpYXNfY3BhLCAwKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAxMC1cdH1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMTUtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIwMTY6c3RhdGljIGludCBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMTcte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjA2OC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjA2OTpzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwNzAtXHRcdFx0XHQgICAgcGdwcm90X3QgbWFza19zZXQsIHBncHJvdF90IG1hc2tfY2xyLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjEyNi1cdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjEyNzpcdFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjEyOC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxNTQ9c3RhdGljIGlubGluZSBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXQodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE1Ni17XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxNTc6XHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKGFkZHIsIG51bXBhZ2VzLCBtYXNrLCBfX3BncHJvdCgwKSwgMCxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE1OC1cdFx0KGFycmF5ID8gQ1BBX0FSUkFZIDogMCksIE5VTEwpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjE2MT1zdGF0aWMgaW5saW5lIGludCBjaGFuZ2VfcGFnZV9hdHRyX2NsZWFyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNjMte1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTY0Olx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIG1hc2ssIDAsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNjUtXHRcdChhcnJheSA/IENQQV9BUlJBWSA6IDApLCBOVUxMKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxNjg9c3RhdGljIGlubGluZSBpbnQgY3BhX3NldF9wYWdlc19hcnJheShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTcwLXtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE3MTpcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoTlVMTCwgbnVtcGFnZXMsIG1hc2ssIF9fcGdwcm90KDApLCAwLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTcyLVx0XHRDUEFfUEFHRVNfQVJSQVksIHBhZ2VzKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxNzU9c3RhdGljIGlubGluZSBpbnQgY3BhX2NsZWFyX3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNzcte1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTc4Olx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihOVUxMLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIG1hc2ssIDAsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNzktXHRcdENQQV9QQUdFU19BUlJBWSwgcGFnZXMpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIyMD1pbnQgX3NldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjI3LVx0aWYgKCFyZXQpIHtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIyODpcdFx0cmV0ID0gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFkZHIsIG51bXBhZ2VzLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjI5LVx0XHRcdFx0XHQgICAgICAgY2FjaGVtb2RlMnBncHJvdChfUEFHRV9DQUNIRV9NT0RFX1dDKSxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzNDE9aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0Ny1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM0ODpcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2YWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBjbHIsIDAsXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDktXHRcdFx0XHRcdENQQV9DT0xMQVBTRSwgTlVMTCk7XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzYyPWludCBzZXRfbWVtb3J5X25wX25vYWxpYXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjMte1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzY0Olx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjUtXHRcdFx0XHRcdF9fcGdwcm90KF9QQUdFX1BSRVNFTlQpLCAwLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM3ND1pbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3NS17XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNzY6XHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmFkZHIsIG51bXBhZ2VzLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzc3LVx0XHRcdFx0XHRfX3BncHJvdChfUEFHRV9LRVJORUxfNEspLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM5Nz1zdGF0aWMgaW50IF9fc2V0X21lbW9yeV9lbmNfcGd0YWJsZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgYm9vbCBlbmMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDI2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDI3Olx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQyOC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1MTk9c3RhdGljIGludCBfc2V0X3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1NDQtXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgbmV3X3R5cGUgPT0gX1BBR0VfQ0FDSEVfTU9ERV9XQylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjU0NTpcdFx0cmV0ID0gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKE5VTEwsIG51bXBhZ2VzLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTQ2LVx0XHRcdFx0XHQgICAgICAgY2FjaGVtb2RlMnBncHJvdChcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI2MjQ9c3RhdGljIGludCBfX3NldF9wYWdlc19wKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjM5LVx0ICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI2NDA6XHRyZXR1cm4gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjY0MS19XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjQzPXN0YXRpYyBpbnQgX19zZXRfcGFnZXNfbnAoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NTgtXHQgKi9cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjY1OTpcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjYwLX1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3MjY9aW50IF9faW5pdCBrZXJuZWxfbWFwX3BhZ2VzX2luX3BnZChwZ2RfdCAqcGdkLCB1NjQgcGZuLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNzUwLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNzUxOlx0cmV0dmFsID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc1Mi1cdF9fZmx1c2hfdGxiX2FsbCgpO1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9Mjc2Mz1pbnQgX19pbml0IGtlcm5lbF91bm1hcF9wYWdlc19pbl9wZ2QocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc4NS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Mjc4NjpcdHJldHZhbCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI3ODctXHRfX2ZsdXNoX3RsYl9hbGwoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTcgMjI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNDcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgQXR0cmlidXRlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHBhZ2UgYXR0cmlidXRlcyBhcmUgY2hhbmdlZCwgYW5kIHRoZSBjb25uZWN0aW9uIGlzIGJlY29taW5nIGNsZWFyZXIuIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGlzIGRlZmluZWQgYXMgc3RhdGljLCB3aGljaCBpbml0aWFsbHkgbWFrZXMgaXQgc2VlbSBsaWtlIGl0JiMzOTtzIGEgbG9jYWxseSBzY29wZWQgdXRpbGl0eSBmdW5jdGlvbi4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgYnkgdGhlIGxpa2VzIG9mIGBzZXRfbWVtb3J5X3JveGAsIGBzZXRfbWVtb3J5XzRrYCwgYW5kIGBzZXRfbWVtb3J5X25wX25vYWxpYXNgIGluZGljYXRlcyBhIHdpZGVyIGltcGFjdCB0aGFuIGluaXRpYWxseSBwZXJjZWl2ZWQuCgpPbiB0aGUgb3RoZXIgaGFuZCwgYF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBzZWVtcyB0byBiZSB1c2VkIGFzIGEgY29yZSB1dGlsaXR5IGZ1bmN0aW9uLCB1c2VkIGFjcm9zcyBhIHJhbmdlIG9mIG90aGVyIGZ1bmN0aW9ucywgc3VjaCBhcyBga2VybmVsX21hcF9wYWdlc19pbl9wZ2RgLCBga2VybmVsX3VubWFwX3BhZ2VzX2luX3BnZGAsIGBfX3NldF9wYWdlc19wYCwgYW5kIGBfX3NldF9wYWdlc19ucGAuIFRoaXMgc2VlbXMgdG8gaGF2ZSBhIHdpZGVyIHNjb3BlLiBHaXZlbiBpdHMgcm9sZSBhcyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIGZvciB0aGVzZSBjcml0aWNhbCBvcGVyYXRpb25zLCBgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIHNlZW1zIGxpa2UgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbi4gQnV0IHdhaXQsIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGlzIGFsc28gZ29vZC4KCkFscmlnaHQsIGxldCYjMzk7cyBub3cgY2hlY2sgaG93IGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIHVzZXMgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE3IDIyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhbGtfcGFnZV9yYW5nZV9kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTM4Mj1XZSBhbHNvIHBlcm1pdCBhIHRydWx5IHVudXN1YWwgY2FzZSBpcyB0aGUgdHJhdmVyc2FsIG9mIG5vbi1WTUEgcmFuZ2VzIGluXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjM4MzoqKnVzZXJsYW5kKiogcmFuZ2VzLCBhcyBwcm92aWRlZCBmb3IgYnkgOmM6ZnVuYzpgIXdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AuXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTM4NC1cbi0tXG5tbS9pbnRlcm5hbC5oPTE4NDA9aW50IHdhbGtfcGFnZV9yYW5nZV92bWFfdW5zYWZlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2ludGVybmFsLmgtMTg0Mi1cdFx0dm9pZCAqcHJpdmF0ZSk7XG5tbS9pbnRlcm5hbC5oOjE4NDM6aW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL2ludGVybmFsLmgtMTg0NC1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbi0tXG5tbS9wYWdld2Fsay5jPTY0OD1pbnQgd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZV9sb2NrbGVzcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdld2Fsay5jLTY2Ny0vKipcbm1tL3BhZ2V3YWxrLmM6NjY4OiAqIHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyAtIHdhbGsgYSByYW5nZSBvZiBwYWdldGFibGVzIG5vdCBiYWNrZWQgYnkgYSB2bWFcbm1tL3BhZ2V3YWxrLmMtNjY5LSAqIEBtbTpcdFx0bW1fc3RydWN0IHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IHByb2Nlc3Mgb2YgcGFnZSB0YWJsZSB3YWxrXG4tLVxubW0vcGFnZXdhbGsuYy02ODMtICovXG5tbS9wYWdld2Fsay5jOjY4NDppbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vcGFnZXdhbGsuYy02ODUtXHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMsXG4tLVxubW0vcHRkdW1wLmM9MTc1PXZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcbi0tXG5tbS9wdGR1bXAuYy0xODUtXHR3aGlsZSAocmFuZ2UtXHUwMDNlc3RhcnQgIT0gcmFuZ2UtXHUwMDNlZW5kKSB7XG5tbS9wdGR1bXAuYzoxODY6XHRcdHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhtbSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCxcbm1tL3B0ZHVtcC5jLTE4Ny1cdFx0XHRcdCAgICAgIFx1MDAyNnB0ZHVtcF9vcHMsIHBnZCwgc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEzMQoJCQkJCQkJb3V0cHV0OiAyNTUKCQkJCQkJCXRob3VnaHRzOiAxNDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBhdGNoIGZvciBLZXJuZWwgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQmIzM5O3MgdG91Y2hpbmcgcXVpdGUgYSBmZXcgYXJlYXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHBhZ2UgdGFibGUgZHVtcGluZywgaHVnZSBwYWdlIGhhbmRsaW5nIHdpdGhpbiB2bWFsbG9jLCBhbmQgdGhlIHg4NiBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGUgKENQQSkgY29kZS4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgc3luY2hyb25pemluZyB0aGVzZSBvcGVyYXRpb25zIHVzaW5nIGBpbml0X21tLm1tYXBfbG9ja2AgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgc3RhdGljIGtleSBhcHByb2FjaCwgd2l0aCBhZGRpdGlvbmFsIGxvY2tpbmcgYWRkZWQgdG8gdGhlIHg4NiBDUEEgYW5kIHZtYWxsb2MgcGF0aHMuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgY29uY3VycmVuY3kgYW5kIHJlcXVpcmluZyByaWdvcm91cyBmdXp6aW5nIHRvIHVuY292ZXIgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLgoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyBpbiB0aHJlZSBtYWluIGFyZWFzIHdoaWNoIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nOiBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIHNldHVwLCBhbmQgQ1BBLiBTaW5jZSB0aGVzZSBhcmUgYWxsIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW50IGFjY2VzcywgdGhlIGdvYWwgb2YgZnV6emluZyBpcyB0byBleHBvc2UgYW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoZSBuZXcgbG9ja2luZyBzY2hlbWUsIHBvc3NpYmxlIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB3aGVuIGNvbmN1cnJlbnQgcGFnZSB0YWJsZSB3YWxrcyBhbmQgbW9kaWZpY2F0aW9ucyBoYXBwZW4uCgpTbywgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AgaXMgZXhwb3NlZCBpbiBgbW0vaW50ZXJuYWwuaGAgYW5kIGlzIGNhbGxlZCBieSBgcHRkdW1wX3dhbGtfcGdkYC4gVGhhdCB0ZWxscyBtZSB0aGUgc3ltYm9scyB0aGF0IGFyZSBpbiBzY29wZSBmb3IgZnV6emluZyBhcmU6Ci0gICBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgIChkZWFsaW5nIHdpdGggaHVnZSBwYWdlcykKLSAgIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIChDUEEgY29kZSkuICBIbW0sIGJvdGggYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgYW5kIGBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgYXJlIHN0YXRpYywgYnV0IHRoZSBwYXRjaCBsaWtlbHkgY2FsbHMgdGhlbSB0aHJvdWdoIGV4cG9ydGVkIGZ1bmN0aW9ucyBsaWtlIGBzZXRfbWVtb3J5X3djYCBvciBgc2V0X21lbW9yeV9yb3hgLCBzbyB3ZSBjYW4gc3RpbGwgZnV6eiB2aWEgdGhvc2Ugb3IgdmlhIENQQV9ERUJVRy4KLSAgIGBwdGR1bXBfd2Fsa19wZ2RgIGFuZCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCAocGFnZSB0YWJsZSBkdW1waW5nKQotICAgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYHB1ZF9mcmVlX3BtZF9wYWdlYAoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBnb2luZyB0byBiZSB1c2VmdWwgZm9yIHRlc3RpbmcgdGhpcy4gYFBURFVNUF9ERUJVR0ZTYCBzZWVtcyByZWxldmFudCBzaW5jZSBpdCBleHBvc2VzIHRoZSBgcHRkdW1wYCBmdW5jdGlvbmFsaXR5IHRvIGRlYnVnZnMsIHNvbWV0aGluZyBzeXprYWxsZXIgY2FuIGVhc2lseSBsZXZlcmFnZS4gYERFQlVHX1dYYCBsb29rcyB1c2VmdWwgYmVjYXVzZSBpdCBlbmFibGVzIGBwdGR1bXBgIGF0IGJvb3QuIEdpdmVuIHRoYXQgdGhlIENQQSBjb2RlIGlzIGFsc28gaW52b2x2ZWQgYW5kIHRoaXMgcGF0Y2ggbWlnaHQgbWFrZSBjaGFuZ2VzIHRvIGl0LCBgQ1BBX0RFQlVHYCBpcyBhIG11c3QsIHNpbmNlIGl0IHJ1bnMgc2VsZi10ZXN0cyBhbmQgd2lsbCB0cmlnZ2VyIHRoZSBjb2RlLiBJIGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgYERFQlVHX0ZTYCBiZWNhdXNlIHN5emthbGxlciB1c3VhbGx5IGFscmVhZHkgaGFzIGl0IGVuYWJsZWQuCgpTbyB0aGUgY29uZmlncyBhcmU6Ci0gYFBURFVNUF9ERUJVR0ZTYAotIGBERUJVR19XWGAKLSBgQ1BBX0RFQlVHYAoKSSB3aWxsIG5vdyB2ZXJpZnkgdGhhdCB0aGUgc3ltYm9sIG5hbWVzIEkmIzM5O20gZm9jdXNpbmcgb24gYXJlIGNvcnJlY3QsIGp1c3QgdG8gYmUgc3VyZS4gSSYjMzk7bGwgY29uZmlybSBlYWNoIHN5bWJvbCBuYW1lLiBZZXAsIHRoZXkgYWxsIG1hdGNoIHRoZSBkZWZpbml0aW9ucyBpbiB0aGUga2VybmVsIHNvdXJjZXMuCgpJIGFtIG5vdyByZWFkeSB0byBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXMgaW5wdXRzIGZvciBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNyAyMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFREVU1QX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7REVCVUdfV1gmIzM0OywKICAgICYjMzQ7Q1BBX0RFQlVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wdWQmIzM0OywKICAgICYjMzQ7dm1hcF90cnlfaHVnZV9wNGQmIzM0OywKICAgICYjMzQ7Y3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O19fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZCYjMzQ7LAogICAgJiMzNDt3YWxrX3BhZ2VfcmFuZ2VfZGVidWcmIzM0OywKICAgICYjMzQ7cG1kX2ZyZWVfcHRlX3BhZ2UmIzM0OywKICAgICYjMzQ7cHVkX2ZyZWVfcG1kX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB0YWJsZSBkdW1waW5nIChwdGR1bXApLCB2bWFsbG9jIGh1Z2UgcGFnZSBzZXR1cCwgYW5kIHg4NiBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGUgKENQQSkgY29kZSB0byB1c2UgYGluaXRfbW0ubW1hcF9sb2NrYCBmb3Igc3luY2hyb25pemF0aW9uLiBUaGlzIHJlcGxhY2VzIGEgc3RhdGljIGtleSBhcHByb2FjaCBpbiBhcm02NCBhbmQgYWRkcyBsb2NraW5nIGluIHg4NiBDUEEgYW5kIHZtYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgd2Fsa3MgYW5kIG1vZGlmaWNhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O0RFQlVHX1dYJiMzNDssCiAgICAmIzM0O0NQQV9ERUJVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcHVkJiMzNDssCiAgICAmIzM0O3ZtYXBfdHJ5X2h1Z2VfcDRkJiMzNDssCiAgICAmIzM0O2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NsciYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2QmIzM0OywKICAgICYjMzQ7d2Fsa19wYWdlX3JhbmdlX2RlYnVnJiMzNDssCiAgICAmIzM0O3BtZF9mcmVlX3B0ZV9wYWdlJiMzNDssCiAgICAmIzM0O3B1ZF9mcmVlX3BtZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYyBodWdlIHBhZ2Ugc2V0dXAsIGFuZCB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlIChDUEEpIGNvZGUgdG8gdXNlIGBpbml0X21tLm1tYXBfbG9ja2AgZm9yIHN5bmNocm9uaXphdGlvbi4gVGhpcyByZXBsYWNlcyBhIHN0YXRpYyBrZXkgYXBwcm9hY2ggaW4gYXJtNjQgYW5kIGFkZHMgbG9ja2luZyBpbiB4ODYgQ1BBIGFuZCB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIHdhbGtzIGFuZCBtb2RpZmljYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6MDUuNjc2NzAyOTU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MDI0NjAwNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBURFVNUF9ERUJVR0ZTXCIsXG4gICAgXCJERUJVR19XWFwiLFxuICAgIFwiQ1BBX0RFQlVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hcF90cnlfaHVnZV9wbWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcHVkXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3A0ZFwiLFxuICAgIFwiY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzXCIsXG4gICAgXCJfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NsclwiLFxuICAgIFwicHRkdW1wX3dhbGtfcGdkXCIsXG4gICAgXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIixcbiAgICBcInBtZF9mcmVlX3B0ZV9wYWdlXCIsXG4gICAgXCJwdWRfZnJlZV9wbWRfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYyBodWdlIHBhZ2Ugc2V0dXAsIGFuZCB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlIChDUEEpIGNvZGUgdG8gdXNlIGBpbml0X21tLm1tYXBfbG9ja2AgZm9yIHN5bmNocm9uaXphdGlvbi4gVGhpcyByZXBsYWNlcyBhIHN0YXRpYyBrZXkgYXBwcm9hY2ggaW4gYXJtNjQgYW5kIGFkZHMgbG9ja2luZyBpbiB4ODYgQ1BBIGFuZCB2bWFsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIHdhbGtzIGFuZCBtb2RpZmljYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyMzowNS42NzY3MDY3NjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTg2MzAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNlODhlYzUxNmFhM2FmODcyZDE1YzQ1NTAxZTU1YjM4MmJjMTk1MjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTcgMjI6MjM6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcXG5pbmRleCA1YjM3NGE2YWIzNGE0ZS4uNTBhMTk1ZWRhOGVkMjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRkdW1wLmhcXG5AQCAtNyw4ICs3LDYgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdGR1bXAuaFxcdTAwM2VcXG4gXFxuLURFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xcbi1cXG4gI2lmZGVmIENPTkZJR19QVERVTVBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbV90eXBlcy5oXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xcbmluZGV4IGEyNWQ4YmVhY2M4MzEwLi5iZDUyZmNhNmU4NzIwYiAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL21tdS5jXFxuKysrIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xcbkBAIC00OSw4ICs0OSw2IEBAXFxuICNkZWZpbmUgTk9fQ09OVF9NQVBQSU5HU1xcdEJJVCgxKVxcbiAjZGVmaW5lIE5PX0VYRUNfTUFQUElOR1NcXHRCSVQoMilcXHQvKiBhc3N1bWVzIEZFQVRfSFBEUyBpcyBub3QgdXNlZCAqL1xcbiBcXG4tREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcXG4tXFxuIHU2NCBraW1hZ2Vfdm9mZnNldCBfX3JvX2FmdGVyX2luaXQ7XFxuIEVYUE9SVF9TWU1CT0woa2ltYWdlX3ZvZmZzZXQpO1xcbiBcXG5AQCAtMTg2NCw4ICsxODYyLDcgQEAgaW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWRwKVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLVxcdFxcdFxcdCAgICAgICBib29sIGFjcXVpcmVfbW1hcF9sb2NrKVxcbitpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbiBcXHRwdGVfdCAqdGFibGU7XFxuIFxcdHBtZF90IHBtZDtcXG5AQCAtMTg3NywyNSArMTg3NCwxMyBAQCBzdGF0aWMgaW50IF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFNlZSBjb21tZW50IGluIHB1ZF9mcmVlX3BtZF9wYWdlIGZvciBzdGF0aWMga2V5IGxvZ2ljICovXFxuIFxcdHRhYmxlID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgYWRkcik7XFxuIFxcdHBtZF9jbGVhcihwbWRwKTtcXG4gXFx0X19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoYWRkcik7XFxuLVxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpIFxcdTAwMjZcXHUwMDI2IGFjcXVpcmVfbW1hcF9sb2NrKSB7XFxuLVxcdFxcdG1tYXBfcmVhZF9sb2NrKFxcdTAwMjZpbml0X21tKTtcXG4tXFx0XFx0bW1hcF9yZWFkX3VubG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuLVxcdH1cXG4tXFxuIFxcdHB0ZV9mcmVlX2tlcm5lbChOVUxMLCB0YWJsZSk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuIFxcbi1pbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4te1xcbi1cXHQvKiBJZiBwdGR1bXAgaXMgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcywgYWNxdWlyZSBpbml0X21tLm1tYXBfbG9jayAqL1xcbi1cXHRyZXR1cm4gX19wbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBhZGRyLCAvKiBhY3F1aXJlX21tYXBfbG9jayA9ICovIHRydWUpO1xcbi19XFxuLVxcbiBpbnQgcHVkX2ZyZWVfcG1kX3BhZ2UocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4ge1xcbiBcXHRwbWRfdCAqdGFibGU7XFxuQEAgLTE5MTEsMzYgKzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuIFxcdH1cXG4gXFxuIFxcdHRhYmxlID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIE91ciBvYmplY3RpdmUgaXMgdG8gcHJldmVudCBwdGR1bXAgZnJvbSByZWFkaW5nIGEgUE1EIHRhYmxlIHdoaWNoIGhhc1xcbi1cXHQgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb25cXG4tXFx0ICogKHdoaWNoIGdvdCBmbGlwcGVkIGJ5IHB0ZHVtcCkgdGhlbiB0aGUgbW1hcCBsb2NrIHNlcXVlbmNlIGhlcmUgd2lsbCxcXG4tXFx0ICogYXMgYSByZXN1bHQgb2YgdGhlIG1tYXAgd3JpdGUgbG9jay91bmxvY2sgc2VxdWVuY2UgaW4gcHRkdW1wLCBnaXZlXFxuLVxcdCAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhc1xcbi1cXHQgKiB5ZXQgbm90IHN0YXJ0ZWQgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcyAtIHRoZSBzZXF1ZW5jZSBvZiBiYXJyaWVyc1xcbi1cXHQgKiBpc3N1ZWQgYnkgX19mbHVzaF90bGJfa2VybmVsX3BndGFibGUoKSBndWFyYW50ZWVzIHRoYXQgcHRkdW1wIHdpbGxcXG4tXFx0ICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuXFxuLVxcdCAqL1xcbi1cXHRwdWRfY2xlYXIocHVkcCk7XFxuLVxcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xcbi1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkge1xcbi1cXHRcXHRtbWFwX3JlYWRfbG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2soXFx1MDAyNmluaXRfbW0pO1xcbi1cXHR9XFxuLVxcbiBcXHRwbWRwID0gdGFibGU7XFxuIFxcdG5leHQgPSBhZGRyO1xcbiBcXHRlbmQgPSBhZGRyICsgUFVEX1NJWkU7XFxuIFxcdGRvIHtcXG4gXFx0XFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogUE1EIGhhcyBiZWVuIGlzb2xhdGVkLCBzbyBwdGR1bXAgd29uJ3Qgc2VlIGl0LiBOb1xcbi1cXHRcXHRcXHQgKiBuZWVkIHRvIGFjcXVpcmUgaW5pdF9tbS5tbWFwX2xvY2suXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQsIC8qIGFjcXVpcmVfbW1hcF9sb2NrID0gKi8gZmFsc2UpO1xcbitcXHRcXHRcXHRwbWRfZnJlZV9wdGVfcGFnZShwbWRwLCBuZXh0KTtcXG4gXFx0fSB3aGlsZSAocG1kcCsrLCBuZXh0ICs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XFxuIFxcbitcXHRwdWRfY2xlYXIocHVkcCk7XFxuK1xcdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xcbiBcXHRwbWRfZnJlZShOVUxMLCB0YWJsZSk7XFxuIFxcdHJldHVybiAxO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmMgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXFxuaW5kZXggMWMyMDE0NDcwMGQ3ZDcuLjVhNzZjNTliNWFkYTU1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcHRkdW1wLmNcXG4rKysgYi9hcmNoL2FybTY0L21tL3B0ZHVtcC5jXFxuQEAgLTI4MywxMyArMjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXFxuIFxcdG5vdGVfcGFnZShwdF9zdCwgMCwgLTEsIHB0ZV92YWwocHRlX3plcm8pKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYXJtNjRfcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4te1xcbi1cXHRzdGF0aWNfYnJhbmNoX2luYyhcXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcXG4tXFx0cHRkdW1wX3dhbGtfcGdkKHN0LCBtbSwgTlVMTCk7XFxuLVxcdHN0YXRpY19icmFuY2hfZGVjKFxcdTAwMjZhcm02NF9wdGR1bXBfbG9ja19rZXkpO1xcbi19XFxuLVxcbiB2b2lkIHB0ZHVtcF93YWxrKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gfjBVTDtcXG5AQCAtMzE4LDcgKzMxMSw3IEBAIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXFxuIFxcdFxcdH1cXG4gXFx0fTtcXG4gXFxuLVxcdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBpbmZvLVxcdTAwM2VtbSk7XFxuK1xcdHB0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBpbmZvLVxcdTAwM2VtbSwgTlVMTCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9faW5pdCBwdGR1bXBfaW5pdGlhbGl6ZSh2b2lkKVxcbkBAIC0zNjAsNyArMzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG4gXFx0XFx0fVxcbiBcXHR9O1xcbiBcXG4tXFx0YXJtNjRfcHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tKTtcXG4rXFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tLCBOVUxMKTtcXG4gXFxuIFxcdGlmIChzdC53eF9wYWdlcyB8fCBzdC51eG5fcGFnZXMpIHtcXG4gXFx0XFx0cHJfd2FybihcXFwiQ2hlY2tlZCBXK1ggbWFwcGluZ3M6IEZBSUxFRCwgJWx1IFcrWCBwYWdlcyBmb3VuZCwgJWx1IG5vbi1VWE4gcGFnZXMgZm91bmRcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuaW5kZXggZDAyM2E0MGExZTAzNDUuLjMwMWZiOWU3N2Q5MWJhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1yZWdpb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZTgyMC9hcGkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wcm9jZXNzb3IuaFxcdTAwM2VcXG5AQCAtNDEwLDcgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxcbiBcXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcXG4gXFxuLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4rc3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kO1xcbiBcXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MsICp0bXA7XFxuQEAgLTQ0Miw2ICs0NDMsMTggQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzpcXG4rXFx0ICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93blxcbitcXHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXFxuK1xcdCAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuXFxuK1xcdCAqL1xcbitcXHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcXHUwMDI2aW5pdF9tbSlcXG4rXFx0XFx0X19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuQEAgLTIxMDksNyArMjEyMiw5IEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcXG4gXFx0Y3BhLmN1cnBhZ2UgPSAwO1xcbiBcXHRjcGEuZm9yY2Vfc3BsaXQgPSBmb3JjZV9zcGxpdDtcXG4gXFxuLVxcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbitcXHQvKiBBdm9pZCByYWNlIHdpdGggY29uY3VycmVudCBDUEEgY29sbGFwc2UuICovXFxuK1xcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXFx1MDAyNmluaXRfbW0pXFxuK1xcdFxcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQ2hlY2sgd2hldGhlciB3ZSByZWFsbHkgY2hhbmdlZCBzb21ldGhpbmc6XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuaW5kZXggMDRiOGY2MWVjZTVkOGUuLjA0N2Y1ZjVlMmMzNDc1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuQEAgLTYyMSw2ICs2MjEsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxcbiBcXHQgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpXFxuK0RFRklORV9HVUFSRChtbWFwX3dyaXRlX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcXG4rXFx0ICAgICBtbWFwX3dyaXRlX2xvY2soX1QpLCBtbWFwX3dyaXRlX3VubG9jayhfVCkpXFxuK0RFRklORV9HVUFSRF9DT05EKG1tYXBfcmVhZF9sb2NrLCBfdHJ5LCBtbWFwX3JlYWRfdHJ5bG9jayhfVCkpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcXG5pbmRleCAzYWUyNTg2ZmY0NWI0NC4uNWQ4N2M2MzJhMjU1MDcgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xcbisrKyBiL21tL3BhZ2V3YWxrLmNcXG5AQCAtNjc4LDYgKzY3OCw4IEBAIGludCB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlX2xvY2tsZXNzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kXFxuICAqIHdpbGwgYWxzbyBub3QgbG9jayB0aGUgUFRFcyBmb3IgdGhlIHB0ZV9lbnRyeSgpIGNhbGxiYWNrLlxcbiAgKlxcbiAgKiBUaGlzIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgT05MWS5cXG4rICpcXG4rICogVGhlIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuXFxuICAqL1xcbiBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcXG5AQCAtNjkxLDI0ICs2OTMsMjggQEAgaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0Lm5vX3ZtYVxcdFxcdD0gdHJ1ZVxcbiBcXHR9O1xcbiBcXG4tXFx0LyogRm9yIGNvbnZlbmllbmNlLCB3ZSBhbGxvdyB0cmF2ZXJzYWwgb2Yga2VybmVsIG1hcHBpbmdzLiAqL1xcbi1cXHRpZiAobW0gPT0gXFx1MDAyNmluaXRfbW0pXFxuLVxcdFxcdHJldHVybiB3YWxrX2tlcm5lbF9wYWdlX3RhYmxlX3JhbmdlKHN0YXJ0LCBlbmQsIG9wcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBnZCwgcHJpdmF0ZSk7XFxuLVxcdGlmIChzdGFydCBcXHUwMDNlPSBlbmQgfHwgIXdhbGsubW0pXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRpZiAoIWNoZWNrX29wc19zYWZlKG9wcykpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0LypcXG4tXFx0ICogVGhlIG1tYXAgbG9jayBwcm90ZWN0cyB0aGUgcGFnZSB3YWxrZXIgZnJvbSBjaGFuZ2VzIHRvIHRoZSBwYWdlXFxuLVxcdCAqIHRhYmxlcyBkdXJpbmcgdGhlIHdhbGsuICBIb3dldmVyIGEgcmVhZCBsb2NrIGlzIGluc3VmZmljaWVudCB0b1xcbi1cXHQgKiBwcm90ZWN0IHRob3NlIGFyZWFzIHdoaWNoIGRvbid0IGhhdmUgYSBWTUEgYXMgbXVubWFwKCkgZGV0YWNoZXNcXG4tXFx0ICogdGhlIFZNQXMgYmVmb3JlIGRvd25ncmFkaW5nIHRvIGEgcmVhZCBsb2NrIGFuZCBhY3R1YWxseSB0ZWFyaW5nXFxuLVxcdCAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGRcXG4tXFx0ICogYmUgaGVsZC5cXG4rXFx0ICogV2hlbiB3YWxraW5nIHVzZXJsYW5kIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkIHRvXFxuK1xcdCAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZ1xcbitcXHQgKiBkb3duIHBhZ2UgdGFibGVzLlxcbitcXHQgKlxcbitcXHQgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGRcXG4rXFx0ICogdG8gYWNjb3VudCBmb3IgcGFnZSB0YWJsZSBmcmVlaW5nIG9uIHZtYXAgaHVnZSBwYWdlIG1hcHBpbmcuXFxuIFxcdCAqL1xcbiBcXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xcbitcXHQvKlxcbitcXHQgKiB4ODYsIGFybTY0IHB0ZHVtcCBhbGxvdyB3YWxrcyBvZiBlZmkgbW0ncyBhbmQgeDg2IHB0ZHVtcCBhbGxvd3Mgd2Fsa3NcXG4rXFx0ICogb2YgYXJiaXRyYXJ5IG1tJ3MuXFxuK1xcdCAqXFxuK1xcdCAqIEhvd2V2ZXIsIHRoZXkgYm90aCBtdXN0IGFsc28gaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvIGFjY291bnQgZm9yXFxuK1xcdCAqIGNvbmN1cnJlbnQga2VybmVsIHBhZ2UgdGFibGUgZnJlZWluZy5cXG4rXFx0ICovXFxuK1xcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChcXHUwMDI2aW5pdF9tbSk7XFxuK1xcbitcXHRpZiAoc3RhcnQgXFx1MDAzZT0gZW5kKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHJldHVybiB3YWxrX3BnZF9yYW5nZShzdGFydCwgZW5kLCBcXHUwMDI2d2Fsayk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vcHRkdW1wLmMgYi9tbS9wdGR1bXAuY1xcbmluZGV4IDk3MzAyMDAwMDA5NmNmLi41ODUxMDk2ZTZmNjU2YyAxMDA2NDRcXG4tLS0gYS9tbS9wdGR1bXAuY1xcbisrKyBiL21tL3B0ZHVtcC5jXFxuQEAgLTE3OCwxMSArMTc4LDE4IEBAIHZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcXG4gXFxuIFxcdGdldF9vbmxpbmVfbWVtcygpO1xcbiBcXHRtbWFwX3dyaXRlX2xvY2sobW0pO1xcbitcXHQvKiBUbyBzdGFiaWxpc2Uga2VybmVsIHBhZ2UgdGFibGVzIHdlIG11c3QgaG9sZCB0aGUgaW5pdF9tbSBsb2NrIHRvby4gKi9cXG4rXFx0aWYgKG1tICE9IFxcdTAwMjZpbml0X21tKVxcbitcXHRcXHRtbWFwX3dyaXRlX2xvY2tfbmVzdGVkKFxcdTAwMjZpbml0X21tLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcbiBcXHR3aGlsZSAocmFuZ2UtXFx1MDAzZXN0YXJ0ICE9IHJhbmdlLVxcdTAwM2VlbmQpIHtcXG4gXFx0XFx0d2Fsa19wYWdlX3JhbmdlX2RlYnVnKG1tLCByYW5nZS1cXHUwMDNlc3RhcnQsIHJhbmdlLVxcdTAwM2VlbmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZwdGR1bXBfb3BzLCBwZ2QsIHN0KTtcXG4gXFx0XFx0cmFuZ2UrKztcXG4gXFx0fVxcbitcXG4rXFx0aWYgKG1tICE9IFxcdTAwMjZpbml0X21tKVxcbitcXHRcXHRtbWFwX3dyaXRlX3VubG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuIFxcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcXG4gXFx0cHV0X29ubGluZV9tZW1zKCk7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmNcXG5pbmRleCAxYWZjYTM1NjhiOWI2NS4uZjRmYTIyN2E4ZDdmMDQgMTAwNjQ0XFxuLS0tIGEvbW0vdm1hbGxvYy5jXFxuKysrIGIvbW0vdm1hbGxvYy5jXFxuQEAgLTQzLDYgKzQzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS90bGJmbHVzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3NobXBhcmFtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy92bWFsbG9jLmhcXHUwMDNlXFxuQEAgLTE1OCwxMCArMTU5LDIxIEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUE1EX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwbWRfcHJlc2VudCgqcG1kKSBcXHUwMDI2XFx1MDAyNiAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcG1kX3ByZXNlbnQoKnBtZCkpXFxuK1xcdFxcdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qXFxuK1xcdCAqIEFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIGV4Y2x1ZGUgcHRkdW1wLCB3aGljaCB3YWxrc1xcbitcXHQgKiBrZXJuZWwgcGFnZSB0YWJsZXMgaXQgZG9lcyBub3Qgb3duIHVuZGVyIHRoZSBtbWFwIHdyaXRlIGxvY2suXFxuK1xcdCAqXFxuK1xcdCAqIENvbmN1cnJlbnQgcmVhZCBsb2NrIGhvbGRlcnMgYXJlIHNhZmU6IGVhY2ggZXhjbHVzaXZlbHkgb3duc1xcbitcXHQgKiB0aGUgcmFuZ2UgaXQgb3BlcmF0ZXMgb24gYW5kIGNhbm5vdCByZWFjaCB0aGlzIHBhZ2UgdGFibGUuXFxuK1xcdCAqL1xcbitcXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbitcXHRcXHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuQEAgLTIxMCwxMCArMjIyLDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wdWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0aWYgKCFJU19BTElHTkVEKHBoeXNfYWRkciwgUFVEX1NJWkUpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChwdWRfcHJlc2VudCgqcHVkKSBcXHUwMDI2XFx1MDAyNiAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmICghcHVkX3ByZXNlbnQoKnB1ZCkpXFxuK1xcdFxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbiBcXG4tXFx0cmV0dXJuIHB1ZF9zZXRfaHVnZShwdWQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXFxuK1xcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuK1xcdFxcdGlmICghcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdm1hcF9wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5AQCAtMjYyLDEwICsyNzksMTUgQEAgc3RhdGljIGludCB2bWFwX3RyeV9odWdlX3A0ZChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQNERfU0laRSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKHA0ZF9wcmVzZW50KCpwNGQpIFxcdTAwMjZcXHUwMDI2ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKCFwNGRfcHJlc2VudCgqcDRkKSlcXG4rXFx0XFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuIFxcbi1cXHRyZXR1cm4gcDRkX3NldF9odWdlKHA0ZCwgcGh5c19hZGRyLCBwcm90KTtcXG4rXFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG4rXFx0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXFx1MDAyNmluaXRfbW0pIHtcXG4rXFx0XFx0aWYgKCFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGludCB2bWFwX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyMzowNi4zNjU2NDEwNDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNDMzNTY1MjY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQVERVTVBfREVCVUdGU1wiLFxuICAgIFwiREVCVUdfV1hcIixcbiAgICBcIkNQQV9ERUJVR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcG1kXCIsXG4gICAgXCJ2bWFwX3RyeV9odWdlX3B1ZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wNGRcIixcbiAgICBcImNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc1wiLFxuICAgIFwiX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJcIixcbiAgICBcInB0ZHVtcF93YWxrX3BnZFwiLFxuICAgIFwid2Fsa19wYWdlX3JhbmdlX2RlYnVnXCIsXG4gICAgXCJwbWRfZnJlZV9wdGVfcGFnZVwiLFxuICAgIFwicHVkX2ZyZWVfcG1kX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHRhYmxlIGR1bXBpbmcgKHB0ZHVtcCksIHZtYWxsb2MgaHVnZSBwYWdlIHNldHVwLCBhbmQgeDg2IENoYW5nZSBQYWdlIEF0dHJpYnV0ZSAoQ1BBKSBjb2RlIHRvIHVzZSBgaW5pdF9tbS5tbWFwX2xvY2tgIGZvciBzeW5jaHJvbml6YXRpb24uIFRoaXMgcmVwbGFjZXMgYSBzdGF0aWMga2V5IGFwcHJvYWNoIGluIGFybTY0IGFuZCBhZGRzIGxvY2tpbmcgaW4geDg2IENQQSBhbmQgdm1hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgb2NjdXIgZHVyaW5nIGNvbmN1cnJlbnQgcGFnZSB0YWJsZSB3YWxrcyBhbmQgbW9kaWZpY2F0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZTg4ZWM1MTZhYTNhZjg3MmQxNWM0NTUwMWU1NWIzODJiYzE5NTI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTcgMjI6MjM6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0ZHVtcC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuaW5kZXggNWIzNzRhNmFiMzRhNGUuLjUwYTE5NWVkYThlZDIyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdGR1bXAuaFxuQEAgLTcsOCArNyw2IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHRkdW1wLmhcdTAwM2VcbiBcbi1ERUNMQVJFX1NUQVRJQ19LRVlfRkFMU0UoYXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cbiAjaWZkZWYgQ09ORklHX1BURFVNUFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tX3R5cGVzLmhcdTAwM2VcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xuaW5kZXggYTI1ZDhiZWFjYzgzMTAuLmJkNTJmY2E2ZTg3MjBiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9tbXUuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9tbXUuY1xuQEAgLTQ5LDggKzQ5LDYgQEBcbiAjZGVmaW5lIE5PX0NPTlRfTUFQUElOR1NcdEJJVCgxKVxuICNkZWZpbmUgTk9fRVhFQ19NQVBQSU5HU1x0QklUKDIpXHQvKiBhc3N1bWVzIEZFQVRfSFBEUyBpcyBub3QgdXNlZCAqL1xuIFxuLURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGFybTY0X3B0ZHVtcF9sb2NrX2tleSk7XG4tXG4gdTY0IGtpbWFnZV92b2Zmc2V0IF9fcm9fYWZ0ZXJfaW5pdDtcbiBFWFBPUlRfU1lNQk9MKGtpbWFnZV92b2Zmc2V0KTtcbiBcbkBAIC0xODY0LDggKzE4NjIsNyBAQCBpbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG4tc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdFx0ICAgICAgIGJvb2wgYWNxdWlyZV9tbWFwX2xvY2spXG4raW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuIFx0cHRlX3QgKnRhYmxlO1xuIFx0cG1kX3QgcG1kO1xuQEAgLTE4NzcsMjUgKzE4NzQsMTMgQEAgc3RhdGljIGludCBfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuLVx0LyogU2VlIGNvbW1lbnQgaW4gcHVkX2ZyZWVfcG1kX3BhZ2UgZm9yIHN0YXRpYyBrZXkgbG9naWMgKi9cbiBcdHRhYmxlID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgYWRkcik7XG4gXHRwbWRfY2xlYXIocG1kcCk7XG4gXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTtcbi1cdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmFybTY0X3B0ZHVtcF9sb2NrX2tleSkgXHUwMDI2XHUwMDI2IGFjcXVpcmVfbW1hcF9sb2NrKSB7XG4tXHRcdG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuLVx0fVxuLVxuIFx0cHRlX2ZyZWVfa2VybmVsKE5VTEwsIHRhYmxlKTtcbiBcdHJldHVybiAxO1xuIH1cbiBcbi1pbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi17XG4tXHQvKiBJZiBwdGR1bXAgaXMgd2Fsa2luZyB0aGUgcGFnZXRhYmxlcywgYWNxdWlyZSBpbml0X21tLm1tYXBfbG9jayAqL1xuLVx0cmV0dXJuIF9fcG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgYWRkciwgLyogYWNxdWlyZV9tbWFwX2xvY2sgPSAqLyB0cnVlKTtcbi19XG4tXG4gaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuIFx0cG1kX3QgKnRhYmxlO1xuQEAgLTE5MTEsMzYgKzE4OTYsMTYgQEAgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gXHR9XG4gXG4gXHR0YWJsZSA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4tXG4tXHQvKlxuLVx0ICogT3VyIG9iamVjdGl2ZSBpcyB0byBwcmV2ZW50IHB0ZHVtcCBmcm9tIHJlYWRpbmcgYSBQTUQgdGFibGUgd2hpY2ggaGFzXG4tXHQgKiBiZWVuIGZyZWVkLiBJbiB0aGlzIHJhY2UsIGlmIHB1ZF9mcmVlX3BtZF9wYWdlIG9ic2VydmVzIHRoZSBrZXkgb25cbi1cdCAqICh3aGljaCBnb3QgZmxpcHBlZCBieSBwdGR1bXApIHRoZW4gdGhlIG1tYXAgbG9jayBzZXF1ZW5jZSBoZXJlIHdpbGwsXG4tXHQgKiBhcyBhIHJlc3VsdCBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrL3VubG9jayBzZXF1ZW5jZSBpbiBwdGR1bXAsIGdpdmVcbi1cdCAqIHVzIHRoZSBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi4gSWYgbm90LCB0aGlzIG1lYW5zIHRoYXQgcHRkdW1wIGhhc1xuLVx0ICogeWV0IG5vdCBzdGFydGVkIHdhbGtpbmcgdGhlIHBhZ2V0YWJsZXMgLSB0aGUgc2VxdWVuY2Ugb2YgYmFycmllcnNcbi1cdCAqIGlzc3VlZCBieSBfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZSgpIGd1YXJhbnRlZXMgdGhhdCBwdGR1bXAgd2lsbFxuLVx0ICogb2JzZXJ2ZSBhbiBlbXB0eSBQVUQuXG4tXHQgKi9cbi1cdHB1ZF9jbGVhcihwdWRwKTtcbi1cdF9fZmx1c2hfdGxiX2tlcm5lbF9wZ3RhYmxlKGFkZHIpO1xuLVx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KSkge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbi1cdH1cbi1cbiBcdHBtZHAgPSB0YWJsZTtcbiBcdG5leHQgPSBhZGRyO1xuIFx0ZW5kID0gYWRkciArIFBVRF9TSVpFO1xuIFx0ZG8ge1xuIFx0XHRpZiAocG1kX3ByZXNlbnQocG1kcF9nZXQocG1kcCkpKVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogUE1EIGhhcyBiZWVuIGlzb2xhdGVkLCBzbyBwdGR1bXAgd29uJ3Qgc2VlIGl0LiBOb1xuLVx0XHRcdCAqIG5lZWQgdG8gYWNxdWlyZSBpbml0X21tLm1tYXBfbG9jay5cbi1cdFx0XHQgKi9cbi1cdFx0XHRfX3BtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQsIC8qIGFjcXVpcmVfbW1hcF9sb2NrID0gKi8gZmFsc2UpO1xuK1x0XHRcdHBtZF9mcmVlX3B0ZV9wYWdlKHBtZHAsIG5leHQpO1xuIFx0fSB3aGlsZSAocG1kcCsrLCBuZXh0ICs9IFBNRF9TSVpFLCBuZXh0ICE9IGVuZCk7XG4gXG4rXHRwdWRfY2xlYXIocHVkcCk7XG4rXHRfX2ZsdXNoX3RsYl9rZXJuZWxfcGd0YWJsZShhZGRyKTtcbiBcdHBtZF9mcmVlKE5VTEwsIHRhYmxlKTtcbiBcdHJldHVybiAxO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3B0ZHVtcC5jIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xuaW5kZXggMWMyMDE0NDcwMGQ3ZDcuLjVhNzZjNTliNWFkYTU1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9wdGR1bXAuY1xuQEAgLTI4MywxMyArMjgzLDYgQEAgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXG4gXHRub3RlX3BhZ2UocHRfc3QsIDAsIC0xLCBwdGVfdmFsKHB0ZV96ZXJvKSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFybTY0X3B0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4te1xuLVx0c3RhdGljX2JyYW5jaF9pbmMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi1cdHB0ZHVtcF93YWxrX3BnZChzdCwgbW0sIE5VTEwpO1xuLVx0c3RhdGljX2JyYW5jaF9kZWMoXHUwMDI2YXJtNjRfcHRkdW1wX2xvY2tfa2V5KTtcbi19XG4tXG4gdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGVuZCA9IH4wVUw7XG5AQCAtMzE4LDcgKzMxMSw3IEBAIHZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXG4gXHRcdH1cbiBcdH07XG4gXG4tXHRhcm02NF9wdGR1bXBfd2Fsa19wZ2QoXHUwMDI2c3QucHRkdW1wLCBpbmZvLVx1MDAzZW1tKTtcbitcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIGluZm8tXHUwMDNlbW0sIE5VTEwpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgcHRkdW1wX2luaXRpYWxpemUodm9pZClcbkBAIC0zNjAsNyArMzUzLDcgQEAgYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcbiBcdFx0fVxuIFx0fTtcbiBcbi1cdGFybTY0X3B0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIFx1MDAyNmluaXRfbW0pO1xuK1x0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgXHUwMDI2aW5pdF9tbSwgTlVMTCk7XG4gXG4gXHRpZiAoc3Qud3hfcGFnZXMgfHwgc3QudXhuX3BhZ2VzKSB7XG4gXHRcdHByX3dhcm4oXCJDaGVja2VkIFcrWCBtYXBwaW5nczogRkFJTEVELCAlbHUgVytYIHBhZ2VzIGZvdW5kLCAlbHUgbm9uLVVYTiBwYWdlcyBmb3VuZFxcblwiLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCBkMDIzYTQwYTFlMDM0NS4uMzAxZmI5ZTc3ZDkxYmEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtMjIsNiArMjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9lODIwL2FwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtNDEwLDcgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxuIFxuIHN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7XG4gXG4tc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuK3N0YXRpYyB2b2lkIF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGFkZHIsIGVuZDtcbiBcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDtcbkBAIC00NDIsNiArNDQzLDE4IEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuK3tcbitcdC8qXG4rXHQgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzpcbitcdCAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd25cbitcdCAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS5cbitcdCAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuXG4rXHQgKi9cbitcdHNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4rXHRcdF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuQEAgLTIxMDksNyArMjEyMiw5IEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcbiBcdGNwYS5jdXJwYWdlID0gMDtcbiBcdGNwYS5mb3JjZV9zcGxpdCA9IGZvcmNlX3NwbGl0O1xuIFxuLVx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbitcdC8qIEF2b2lkIHJhY2Ugd2l0aCBjb25jdXJyZW50IENQQSBjb2xsYXBzZS4gKi9cbitcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlcbitcdFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbiBcbiBcdC8qXG4gXHQgKiBDaGVjayB3aGV0aGVyIHdlIHJlYWxseSBjaGFuZ2VkIHNvbWV0aGluZzpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuaW5kZXggMDRiOGY2MWVjZTVkOGUuLjA0N2Y1ZjVlMmMzNDc1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuQEAgLTYyMSw2ICs2MjEsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiBcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcbitERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4rXHQgICAgIG1tYXBfd3JpdGVfbG9jayhfVCksIG1tYXBfd3JpdGVfdW5sb2NrKF9UKSlcbitERUZJTkVfR1VBUkRfQ09ORChtbWFwX3JlYWRfbG9jaywgX3RyeSwgbW1hcF9yZWFkX3RyeWxvY2soX1QpKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcbmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li41ZDg3YzYzMmEyNTUwNyAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbisrKyBiL21tL3BhZ2V3YWxrLmNcbkBAIC02NzgsNiArNjc4LDggQEAgaW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmRcbiAgKiB3aWxsIGFsc28gbm90IGxvY2sgdGhlIFBURXMgZm9yIHRoZSBwdGVfZW50cnkoKSBjYWxsYmFjay5cbiAgKlxuICAqIFRoaXMgaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBPTkxZLlxuKyAqXG4rICogVGhlIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuXG4gICovXG4gaW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcbkBAIC02OTEsMjQgKzY5MywyOCBAQCBpbnQgd2Fsa19wYWdlX3JhbmdlX2RlYnVnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHQubm9fdm1hXHRcdD0gdHJ1ZVxuIFx0fTtcbiBcbi1cdC8qIEZvciBjb252ZW5pZW5jZSwgd2UgYWxsb3cgdHJhdmVyc2FsIG9mIGtlcm5lbCBtYXBwaW5ncy4gKi9cbi1cdGlmIChtbSA9PSBcdTAwMjZpbml0X21tKVxuLVx0XHRyZXR1cm4gd2Fsa19rZXJuZWxfcGFnZV90YWJsZV9yYW5nZShzdGFydCwgZW5kLCBvcHMsXG4tXHRcdFx0XHRcdFx0ICAgIHBnZCwgcHJpdmF0ZSk7XG4tXHRpZiAoc3RhcnQgXHUwMDNlPSBlbmQgfHwgIXdhbGsubW0pXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0aWYgKCFjaGVja19vcHNfc2FmZShvcHMpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qXG4tXHQgKiBUaGUgbW1hcCBsb2NrIHByb3RlY3RzIHRoZSBwYWdlIHdhbGtlciBmcm9tIGNoYW5nZXMgdG8gdGhlIHBhZ2Vcbi1cdCAqIHRhYmxlcyBkdXJpbmcgdGhlIHdhbGsuICBIb3dldmVyIGEgcmVhZCBsb2NrIGlzIGluc3VmZmljaWVudCB0b1xuLVx0ICogcHJvdGVjdCB0aG9zZSBhcmVhcyB3aGljaCBkb24ndCBoYXZlIGEgVk1BIGFzIG11bm1hcCgpIGRldGFjaGVzXG4tXHQgKiB0aGUgVk1BcyBiZWZvcmUgZG93bmdyYWRpbmcgdG8gYSByZWFkIGxvY2sgYW5kIGFjdHVhbGx5IHRlYXJpbmdcbi1cdCAqIGRvd24gUFRFcy9wYWdlIHRhYmxlcy4gSW4gd2hpY2ggY2FzZSwgdGhlIG1tYXAgd3JpdGUgbG9jayBzaG91bGRcbi1cdCAqIGJlIGhlbGQuXG4rXHQgKiBXaGVuIHdhbGtpbmcgdXNlcmxhbmQgcGFnZSB0YWJsZXMsIGFuIG1tYXAgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQgdG9cbitcdCAqIGFjY291bnQgZm9yIG11bm1hcCgpIGRvd25ncmFkaW5nIHRvIGFuIG1tYXAgcmVhZCBsb2NrIHdoZW4gdGVhcmluZ1xuK1x0ICogZG93biBwYWdlIHRhYmxlcy5cbitcdCAqXG4rXHQgKiBXaGVuIHdhbGtpbmcga2VybmVsIHBhZ2UgdGFibGVzLCBhbiBtbWFwIHdyaXRlIGxvY2sgbXVzdCBhbHNvIGJlIGhlbGRcbitcdCAqIHRvIGFjY291bnQgZm9yIHBhZ2UgdGFibGUgZnJlZWluZyBvbiB2bWFwIGh1Z2UgcGFnZSBtYXBwaW5nLlxuIFx0ICovXG4gXHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuK1x0LypcbitcdCAqIHg4NiwgYXJtNjQgcHRkdW1wIGFsbG93IHdhbGtzIG9mIGVmaSBtbSdzIGFuZCB4ODYgcHRkdW1wIGFsbG93cyB3YWxrc1xuK1x0ICogb2YgYXJiaXRyYXJ5IG1tJ3MuXG4rXHQgKlxuK1x0ICogSG93ZXZlciwgdGhleSBib3RoIG11c3QgYWxzbyBob2xkIHRoZSBpbml0X21tIGxvY2sgdG8gYWNjb3VudCBmb3JcbitcdCAqIGNvbmN1cnJlbnQga2VybmVsIHBhZ2UgdGFibGUgZnJlZWluZy5cbitcdCAqL1xuK1x0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKFx1MDAyNmluaXRfbW0pO1xuK1xuK1x0aWYgKHN0YXJ0IFx1MDAzZT0gZW5kKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICghY2hlY2tfb3BzX3NhZmUob3BzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRyZXR1cm4gd2Fsa19wZ2RfcmFuZ2Uoc3RhcnQsIGVuZCwgXHUwMDI2d2Fsayk7XG4gfVxuZGlmZiAtLWdpdCBhL21tL3B0ZHVtcC5jIGIvbW0vcHRkdW1wLmNcbmluZGV4IDk3MzAyMDAwMDA5NmNmLi41ODUxMDk2ZTZmNjU2YyAxMDA2NDRcbi0tLSBhL21tL3B0ZHVtcC5jXG4rKysgYi9tbS9wdGR1bXAuY1xuQEAgLTE3OCwxMSArMTc4LDE4IEBAIHZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcbiBcbiBcdGdldF9vbmxpbmVfbWVtcygpO1xuIFx0bW1hcF93cml0ZV9sb2NrKG1tKTtcbitcdC8qIFRvIHN0YWJpbGlzZSBrZXJuZWwgcGFnZSB0YWJsZXMgd2UgbXVzdCBob2xkIHRoZSBpbml0X21tIGxvY2sgdG9vLiAqL1xuK1x0aWYgKG1tICE9IFx1MDAyNmluaXRfbW0pXG4rXHRcdG1tYXBfd3JpdGVfbG9ja19uZXN0ZWQoXHUwMDI2aW5pdF9tbSwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuK1xuIFx0d2hpbGUgKHJhbmdlLVx1MDAzZXN0YXJ0ICE9IHJhbmdlLVx1MDAzZWVuZCkge1xuIFx0XHR3YWxrX3BhZ2VfcmFuZ2VfZGVidWcobW0sIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZwdGR1bXBfb3BzLCBwZ2QsIHN0KTtcbiBcdFx0cmFuZ2UrKztcbiBcdH1cbitcbitcdGlmIChtbSAhPSBcdTAwMjZpbml0X21tKVxuK1x0XHRtbWFwX3dyaXRlX3VubG9jayhcdTAwMjZpbml0X21tKTtcbiBcdG1tYXBfd3JpdGVfdW5sb2NrKG1tKTtcbiBcdHB1dF9vbmxpbmVfbWVtcygpO1xuIFxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggMWFmY2EzNTY4YjliNjUuLmY0ZmEyMjdhOGQ3ZjA0IDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4rKysgYi9tbS92bWFsbG9jLmNcbkBAIC00Myw2ICs0Myw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RsYmZsdXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2htcGFyYW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2Vfb3duZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy92bWFsbG9jLmhcdTAwM2VcbkBAIC0xNTgsMTAgKzE1OSwyMSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQTURfU0laRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHBtZF9wcmVzZW50KCpwbWQpIFx1MDAyNlx1MDAyNiAhcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRpZiAoIXBtZF9wcmVzZW50KCpwbWQpKVxuK1x0XHRyZXR1cm4gcG1kX3NldF9odWdlKHBtZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwbWRfc2V0X2h1Z2UocG1kLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0LypcbitcdCAqIEFjcXVpcmUgdGhlIG1tYXAgcmVhZCBsb2NrIHRvIGV4Y2x1ZGUgcHRkdW1wLCB3aGljaCB3YWxrc1xuK1x0ICoga2VybmVsIHBhZ2UgdGFibGVzIGl0IGRvZXMgbm90IG93biB1bmRlciB0aGUgbW1hcCB3cml0ZSBsb2NrLlxuK1x0ICpcbitcdCAqIENvbmN1cnJlbnQgcmVhZCBsb2NrIGhvbGRlcnMgYXJlIHNhZmU6IGVhY2ggZXhjbHVzaXZlbHkgb3duc1xuK1x0ICogdGhlIHJhbmdlIGl0IG9wZXJhdGVzIG9uIGFuZCBjYW5ub3QgcmVhY2ggdGhpcyBwYWdlIHRhYmxlLlxuK1x0ICovXG4rXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcdTAwMjZpbml0X21tKSB7XG4rXHRcdGlmICghcG1kX2ZyZWVfcHRlX3BhZ2UocG1kLCBhZGRyKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHBtZF9zZXRfaHVnZShwbWQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbkBAIC0yMTAsMTAgKzIyMiwxNSBAQCBzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAoIUlTX0FMSUdORUQocGh5c19hZGRyLCBQVURfU0laRSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHB1ZF9wcmVzZW50KCpwdWQpIFx1MDAyNlx1MDAyNiAhcHVkX2ZyZWVfcG1kX3BhZ2UocHVkLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKVxuK1x0XHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbiBcbi1cdHJldHVybiBwdWRfc2V0X2h1Z2UocHVkLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cbitcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFx1MDAyNmluaXRfbW0pIHtcbitcdFx0aWYgKCFwdWRfZnJlZV9wbWRfcGFnZShwdWQsIGFkZHIpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcHVkX3NldF9odWdlKHB1ZCwgcGh5c19hZGRyLCBwcm90KTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCB2bWFwX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuQEAgLTI2MiwxMCArMjc5LDE1IEBAIHN0YXRpYyBpbnQgdm1hcF90cnlfaHVnZV9wNGQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmICghSVNfQUxJR05FRChwaHlzX2FkZHIsIFA0RF9TSVpFKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAocDRkX3ByZXNlbnQoKnA0ZCkgXHUwMDI2XHUwMDI2ICFwNGRfZnJlZV9wdWRfcGFnZShwNGQsIGFkZHIpKVxuLVx0XHRyZXR1cm4gMDtcbitcdGlmICghcDRkX3ByZXNlbnQoKnA0ZCkpXG4rXHRcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuIFxuLVx0cmV0dXJuIHA0ZF9zZXRfaHVnZShwNGQsIHBoeXNfYWRkciwgcHJvdCk7XG4rXHQvKiBTZWUgY29tbWVudCBpbiB2bWFwX3RyeV9odWdlX3BtZCgpLiAqL1xuK1x0c2NvcGVkX2NvbmRfZ3VhcmQobW1hcF9yZWFkX2xvY2tfdHJ5LCByZXR1cm4gMCwgXHUwMDI2aW5pdF9tbSkge1xuK1x0XHRpZiAoIXA0ZF9mcmVlX3B1ZF9wYWdlKHA0ZCwgYWRkcikpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBwNGRfc2V0X2h1Z2UocDRkLCBwaHlzX2FkZHIsIHByb3QpO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IHZtYXBfcDRkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyMzowNi4zNjU2NDM1MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjcxMjUyNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN5bmNocm9uaXphdGlvbiBDaGFuZ2UgaW4gQ29yZSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBXZSdyZSB0YWxraW5nIGFib3V0IHN5bmNocm9uaXphdGlvbiB3aXRoaW4gY3JpdGljYWwgYXJlYXM6IHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYywgYW5kIENQQSBjb2RlLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgcmVwbGFjaW5nIGEgc3RhdGljIGtleSBhcHByb2FjaCBvbiBhcm02NCB3aXRoIGBpbml0X21tLm1tYXBfbG9ja2AgYW5kIGFkZGluZyBsb2NraW5nIGluIHg4NiBmb3IgQ1BBIGFuZCB2bWFsbG9jIGh1Z2UgcGFnZSBzZXR1cC4gVGhpcyBpcyBhIHNvbGlkIG1vdmUsIHJlcGxhY2luZyBhIHBvdGVudGlhbCB3ZWFrIHNwb3Qgd2l0aCBzb21ldGhpbmcgbW9yZSByb2J1c3QuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGFjdHVhbCBjaGFuZ2VzLiBTcGVjaWZpY2FsbHksIG9uIGFybTY0LCBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIHJlbW92aW5nIHRoZSBgYXJtNjRfcHRkdW1wX2xvY2tfa2V5YCBzdGF0aWMga2V5IGxvZ2ljIGluIGBwbWRfZnJlZV9wdGVfcGFnZWAgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAsIGFsb25nIHdpdGggcmVtb3ZhbCBvZiBgYXJtNjRfcHRkdW1wX3dhbGtfcGdkYC4gVGhlbiwgeDg2IGlzIGdldHRpbmcgYG1tYXBfd3JpdGVfbG9ja2AgYW5kIGBtbWFwX3JlYWRfbG9ja2AgYXJvdW5kIENQQSBjb2xsYXBzZSBhbmQgYF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBjYWxscy4gVGhlbiBpbiBgbW0vcGFnZXdhbGsuY2AgYW5kIGBtbS9wdGR1bXAuY2AgdGhleSdyZSB1cGRhdGluZyBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCBhbmQgYHB0ZHVtcF93YWxrX3BnZGAsIHJlc3BlY3RpdmVseSwgdG8gdXNlIHRoZSBgaW5pdF9tbS5tbWFwX2xvY2tgLiBGaW5hbGx5LCBpbiBgbW0vdm1hbGxvYy5jYCwgdGhlIHBhdGNoIGFkZHMgYHNjb3BlZF9jb25kX2d1YXJkYCB0aGF0IGF0dGVtcHRzIGFuIGBtbWFwX3JlYWRfbG9ja2AgYXJvdW5kIHRoZSBgdm1hcF90cnlfaHVnZV8qYCBmdW5jdGlvbnMuXG5cblRoaXMgbWVhbnMgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBkZWVwIG9uZSwgYXMgaXQgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuIEFuZCBpdCdzIHJlYWNoYWJsZSBjb2RlLCB3aGljaCBtZWFucyB3ZSAqYWJzb2x1dGVseSogbmVlZCB0byBmdXp6IGl0LiBXZSd2ZSBnb3QgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyByYWNlcyBvciBsb2NraW5nIGlzc3Vlcy4gV2UgY2FuJ3QgbGV0IHNvbWV0aGluZyBsaWtlIHRoaXMgc2xpcCBieSwgc28gd2UncmUgZ29pbmcgdG8gbmVlZCB0byBsb29rIGNhcmVmdWxseSBhdCB0aG9zZSBmdW5jdGlvbnMgSSBub3RlZDogYHZtYXBfdHJ5X2h1Z2VfcG1kYCwgYHZtYXBfdHJ5X2h1Z2VfcHVkYCwgYHZtYXBfdHJ5X2h1Z2VfcDRkYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLCBgcHRkdW1wX3dhbGtfcGdkYCwgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AsIGBwbWRfZnJlZV9wdGVfcGFnZWAsIGFuZCBgcHVkX2ZyZWVfcG1kX3BhZ2VgLiBUaGVzZSBhcmUgb3VyIHByaW1hcnkgdGFyZ2V0cyBmb3IgdGVzdGluZyBhbmQgYW5hbHlzaXMuXG5cbldhaXQgYSBzZWNvbmQsIHB0ZHVtcOKApiB3YXNuJ3QgdGhhdCB0cmlnZ2VyZWQgdGhyb3VnaCBkZWJ1Z2ZzPyBJIG5lZWQgdG8gY2hlY2sgaWYgd2UgcmVxdWlyZSBhbnkgc3BlY2lhbCBgUFREVU1QYCBjb25maWd1cmF0aW9ucyB0byB0cmlnZ2VyIHRoaXMuIEknbGwgc2VhcmNoIHRoZSBLY29uZmlnIHRvIHNlZSBpZiB3ZSBuZWVkIGEgc3BlY2lmaWMgY29uZmlnIHRvIGVuYWJsZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjE1LjAzNjg5ODIxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTUwNTM0NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVERVTVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz00NT1pZiBLVk1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ2LVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6NDc6Y29uZmlnIFBURFVNUF9TVEFHRTJfREVCVUdGU1xcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiUHJlc2VudCB0aGUgc3RhZ2UtMiBwYWdldGFibGVzIHRvIGRlYnVnZnNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnPTIxNj1jb25maWcgQVJDSF9IQVNfUFREVU1QXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTIxOC1cXG5tbS9LY29uZmlnLmRlYnVnOjIxOTpjb25maWcgUFREVU1QXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjAtXFx0Ym9vbFxcbm1tL0tjb25maWcuZGVidWctMjIxLVxcbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xcbm1tL0tjb25maWcuZGVidWctMjIzLVxcdGJvb2wgXFxcIkV4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjE4LjE4NzQzNzMwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MjQ3NDM3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgcHRkdW1wIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBrZXkgdG8gZW5hYmxpbmcgcHRkdW1wLCBnb3QgaXQuIE5vdywgbXkgZmlyc3QgbW92ZSBpcyB0byBkaWcgaW50byBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgaW4gcGxhY2UsIHdoYXQgYmFzZSBmZWF0dXJlcyBpdCByZWxpZXMgb24uIEknbSB0aGlua2luZyBidWlsZCBvcHRpb25zLCBrZXJuZWwgZmVhdHVyZXMg4oCTIHRoYXQga2luZCBvZiB0aGluZy4gTGV0J3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcyBiZWZvcmUgSSBzdGFydCBleHBlcmltZW50aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDM0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6MjAuODEyMTgzODU5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjA2NjIwNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURFVNUF9ERUJVR0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MjE5PWNvbmZpZyBQVERVTVBcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjIxLVxcbm1tL0tjb25maWcuZGVidWc6MjIyOmNvbmZpZyBQVERVTVBfREVCVUdGU1xcbm1tL0tjb25maWcuZGVidWctMjIzLVxcdGJvb2wgXFxcIkV4cG9ydCBrZXJuZWwgcGFnZXRhYmxlIGxheW91dCB0byB1c2Vyc3BhY2UgdmlhIGRlYnVnZnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjIzLjIzMjg1MjAyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDM0NzgwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBpbnRvIHRoZXNlIGRlYnVnIG9wdGlvbnM/IE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAyMjIuIEknbSBob3BpbmcgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZXNlIGRlYnVnZ2luZy1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGlzIGRlZmluZWQuIFRoYXQgc2VjdGlvbiBsaWtlbHkgY29udGFpbnMgdGhlIGRlcGVuZGVuY2llcywgaGVscCB0ZXh0LCBhbmQgZGVmYXVsdCBzZXR0aW5ncyB0aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRvIG1hbmlwdWxhdGUgdGhlIGJlaGF2aW9yIEknbSBhZnRlci4gSXQncyB0aGUgdXN1YWwgcm91dGUgd2hlbiBjaGFzaW5nIGRvd24gdGhlc2Uga2luZHMgb2YgY29uZmlndXJhdGlvbnMsIHRoZSBLY29uZmlnIGZpbGVzIHVzdWFsbHkga2VlcCBhIGdvb2QgdHJhY2sgcmVjb3JkIG9mIGhvdyB0aGVzZSBhcmUgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyOTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyMzoyNi40MzYzMzIxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE1OlxcdFxcbiAyMTY6XFx0Y29uZmlnIEFSQ0hfSEFTX1BURFVNUFxcbiAyMTc6XFx0XFx0Ym9vbFxcbiAyMTg6XFx0XFxuIDIxOTpcXHRjb25maWcgUFREVU1QXFxuIDIyMDpcXHRcXHRib29sXFxuIDIyMTpcXHRcXG4gMjIyOlxcdGNvbmZpZyBQVERVTVBfREVCVUdGU1xcbiAyMjM6XFx0XFx0Ym9vbCBcXFwiRXhwb3J0IGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IHRvIHVzZXJzcGFjZSB2aWEgZGVidWdmc1xcXCJcXG4gMjI0OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXFxuIDIyNTpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIDIyNjpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfSEFTX1BURFVNUFxcbiAyMjc6XFx0XFx0c2VsZWN0IFBURFVNUFxcbiAyMjg6XFx0XFx0aGVscFxcbiAyMjk6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHNob3cgdGhlIGtlcm5lbCBwYWdldGFibGUgbGF5b3V0IGluIGFcXG4gMjMwOlxcdFxcdCAgZGVidWdmcyBmaWxlLiBUaGlzIGluZm9ybWF0aW9uIGlzIG9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2ZWxvcGVyc1xcbiAyMzE6XFx0XFx0ICB3aG8gYXJlIHdvcmtpbmcgaW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGFyZWFzIG9mIHRoZSBrZXJuZWwuXFxuIDIzMjpcXHRcXHQgIEl0IGlzIHByb2JhYmx5IG5vdCBhIGdvb2QgaWRlYSB0byBlbmFibGUgdGhpcyBmZWF0dXJlIGluIGEgcHJvZHVjdGlvblxcbiAyMzM6XFx0XFx0ICBrZXJuZWwuXFxuIDIzNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6MjYuNDM2NDMwNDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU3NzM3MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIERlYnVnZ2luZyBPcHRpb25zKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBkZWVwZXIgbG9vayBhdCB3aGF0J3MgZ29pbmcgb24uLi4gdGhlIGluaXRpYWwgdGhvdWdodCBpcywgYFBURFVNUF9ERUJVR0ZTYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBmb3IgdGhhdCBraW5kIG9mIGRldGFpbGVkIGRlYnVnZ2luZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhhdCB0b2dnbGVkIG9uLiBOb3csIGEgbmFnZ2luZyBtZW1vcnkuLi4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoZSBgREVCVUdfV1hgIGZ1bmN0aW9uYWxpdHkgc29tZXRpbWVzIGxldmVyYWdlcyB0aGUgYHB0ZHVtcGAgY2FwYWJpbGl0aWVzLiBJdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gd2hhdCBgREVCVUdfV1hgIGlzIHN1cHBvc2VkIHRvIGFjaGlldmUuIE9rYXksIGJldHRlciB2ZXJpZnkgdGhhdCByZWxhdGlvbnNoaXAgZGlyZWN0bHkuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZXkgaW50ZXJyZWxhdGUgdG8gYmUgY2VydGFpbiBvZiBteSBwYXRoIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NzIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjI5LjY5NDE2OTgzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA2MTU2Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERUJVR19XWFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTE4Mz1jb25maWcgQVJDSF9IQVNfREVCVUdfV1hcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMTg1LVxcbm1tL0tjb25maWcuZGVidWc6MTg2OmNvbmZpZyBERUJVR19XWFxcbm1tL0tjb25maWcuZGVidWctMTg3LVxcdGJvb2wgXFxcIldhcm4gb24gVytYIG1hcHBpbmdzIGF0IGJvb3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjMyLjAwMDMzMjkxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzkwNzExMTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBvZiB0aGlzIHN5c3RlbS4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgYG1tL0tjb25maWcuZGVidWdgLiBJIHJlY2FsbCB0aGlzIGZpbGUgdXN1YWxseSBob3VzZXMgdGhlIEtjb25maWcgb3B0aW9ucyBzcGVjaWZpYyB0byBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1Z2dpbmcgZmVhdHVyZXMuIExldCdzIG5hdmlnYXRlIHRvIGFyb3VuZCBsaW5lIDE4Ni4gSSdtIGd1ZXNzaW5nIHRoYXQgbGluZSBvciB0aGUgc3Vycm91bmRpbmcgbGluZXMgd2lsbCBoYXZlIHRoZSBrZXkgdG8gd2hhdCBJJ20gbG9va2luZyBmb3IgLSBhIHNwZWNpZmljIGZlYXR1cmUgb3IgYSByZWxhdGVkIGNvbmRpdGlvbmFsIHRoYXQgZ292ZXJucyBpdHMgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjM0Ljc5MTA0NjE3N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHRoZWxwXFxuIDE4MTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSB0ZXN0Y2FzZSBmb3IgdGhlIHNldHRpbmcgcm9kYXRhIHJlYWQtb25seS5cXG4gMTgyOlxcdFxcbiAxODM6XFx0Y29uZmlnIEFSQ0hfSEFTX0RFQlVHX1dYXFxuIDE4NDpcXHRcXHRib29sXFxuIDE4NTpcXHRcXG4gMTg2OlxcdGNvbmZpZyBERUJVR19XWFxcbiAxODc6XFx0XFx0Ym9vbCBcXFwiV2FybiBvbiBXK1ggbWFwcGluZ3MgYXQgYm9vdFxcXCJcXG4gMTg4OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfREVCVUdfV1hcXG4gMTg5OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFREVU1QXFxuIDE5MDpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiAxOTE6XFx0XFx0c2VsZWN0IFBURFVNUFxcbiAxOTI6XFx0XFx0aGVscFxcbiAxOTM6XFx0XFx0ICBHZW5lcmF0ZSBhIHdhcm5pbmcgaWYgYW55IFcrWCBtYXBwaW5ncyBhcmUgZm91bmQgYXQgYm9vdC5cXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0ICBUaGlzIGlzIHVzZWZ1bCBmb3IgZGlzY292ZXJpbmcgY2FzZXMgd2hlcmUgdGhlIGtlcm5lbCBpcyBsZWF2aW5nIFcrWFxcbiAxOTY6XFx0XFx0ICBtYXBwaW5ncyBhZnRlciBhcHBseWluZyBOWCwgYXMgc3VjaCBtYXBwaW5ncyBhcmUgYSBzZWN1cml0eSByaXNrLlxcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHQgIExvb2sgZm9yIGEgbWVzc2FnZSBpbiBkbWVzZyBvdXRwdXQgbGlrZSB0aGlzOlxcbiAxOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjM0Ljc5MTEwOTE3N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI5NjI2MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHNldHRpbmcgYERFQlVHX1dYYCBhbHNvIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBgUFREVU1QYC4gVGhhdCdzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBnbyBmb3J3YXJkLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIHRoYXQncyB0b3Agb2YgbWluZCBpcyB0byBjaGVjayBpZiB3ZSBoYXZlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgdGllZCB0byB2bWFsbG9jIGh1Z2UgcGFnZXMuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgYW5kIGhvdyB0aGV5IGFmZmVjdCB0aGUgc3lzdGVtLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyB0aGF0IGNvdWxkIGluZmx1ZW5jZSBiZWhhdmlvci4gTGV0J3MgZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUyNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6MzguMDIwNzM3OTc5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkwNTAwNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuLS1cXG5hcmNoL0tjb25maWctMTA5OS0jXFxuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5hcmNoL0tjb25maWctMTEwMS1cXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6NDAuNDExMjQ0MjY4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjQ3MDYzMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIEkgbmVlZCB0byBnZXQgbXkgYmVhcmluZ3MuIFRoZSB0YXNrIGF0IGhhbmQgbGlrZWx5IGludm9sdmVzIHVuZGVyc3RhbmRpbmcgb3IgbW9kaWZ5aW5nIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIEdpdmVuIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBtb3N0IHJlbGV2YW50IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgYXJjaC9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGhvdyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZC5cblxuQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgcHJvamVjdHMgYXJlIG9yZ2FuaXplZCwgYEtjb25maWdgIGZpbGVzIGFyZSB0aGUgY2VudHJhbCBkcml2ZXJzIGZvciB0aGUgbWVudWNvbmZpZyBpbnRlcmZhY2UuIEkgd2lsbCBoZWFkIHN0cmFpZ2h0IHRvIGxpbmUgMTEwMC4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBzZWN0aW9uIEknbSBsb29raW5nIGZvciAtIGEgbW9kdWxlLCBmZWF0dXJlIG9yIGdyb3VwIG9mIG9wdGlvbnMgcmVsYXRlZCB0byBteSBhcmVhIG9mIGZvY3VzLiBJJ2xsIHRyeSB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHRoYXQgbGluZS4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHdvcmsgYmFja3dhcmRzIHRocm91Z2ggZGVwZW5kZW5jaWVzLCBpZiBuZWNlc3NhcnksIGFuZCBzZWUgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdGllcyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBmdWxmaWxsIHdoYXRldmVyIHJlcXVpcmVtZW50cyBJJ20gdGFja2xpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyMzo0My45NzU5NTMzMjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDkwOlxcdFxcdGJvb2xcXG4xMDkxOlxcdFxcbjEwOTI6XFx0Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG4xMDkzOlxcdFxcdGJvb2xcXG4xMDk0OlxcdFxcbjEwOTU6XFx0I1xcbjEwOTY6XFx0IyAgQXJjaHMgdGhhdCBzZWxlY3QgdGhpcyB3b3VsZCBiZSBjYXBhYmxlIG9mIFBNRC1zaXplZCB2bWFwcyAoaS5lLixcXG4xMDk3OlxcdCMgIGFyY2hfdm1hcF9wbWRfc3VwcG9ydGVkKCkgcmV0dXJucyB0cnVlKS4gVGhlIFZNX0FMTE9XX0hVR0VfVk1BUCBmbGFnXFxuMTA5ODpcXHQjICBtdXN0IGJlIHVzZWQgdG8gZW5hYmxlIGFsbG9jYXRpb25zIHRvIHVzZSBodWdlcGFnZXMuXFxuMTA5OTpcXHQjXFxuMTEwMDpcXHRjb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BTExPQ1xcbjExMDE6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuMTEwMjpcXHRcXHRib29sXFxuMTEwMzpcXHRcXG4xMTA0OlxcdGNvbmZpZyBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkVcXG4xMTA1OlxcdFxcdGJvb2xcXG4xMTA2OlxcdFxcbjExMDc6XFx0IyBBcmNocyB0aGF0IHdhbnQgdG8gdXNlIHBtZF9ta3dyaXRlIG9uIGtlcm5lbCBtZW1vcnkgbmVlZCBpdCBkZWZpbmVkIGV2ZW5cXG4xMTA4OlxcdCMgaWYgdGhlcmUgYXJlIG5vIHVzZXJzcGFjZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcyB0aGF0IHVzZSBpdFxcbjExMDk6XFx0Y29uZmlnIEFSQ0hfV0FOVF9LRVJORUxfUE1EX01LV1JJVEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6NDMuOTc2MDU4MDA4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzQ3NDcxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgSHVnZSB2bWFsbG9jIENvbmZpZ3VyYXRpb24qKlxuXG5IbW0sIGxldCdzIHNlZS4uLkknbSBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4gUmlnaHQsIHNvIGBIQVZFX0FSQ0hfSFVHRV9WTUFMTE9DYCBpcyBhIGJpdCBvZiBhIHNuZWFreSBvbmUuIEl0J3Mgbm90IGEgc3RyYWlnaHRmb3J3YXJkIG9wdGlvbiB5b3Ugc2VlIGluIHRoZSBtYWluIGNvbmZpZyBtZW51cywgaXMgaXQ/IEl0J3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCB0eXBpY2FsbHkgc2VsZWN0ZWQgaW1wbGljaXRseSBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuXG5cblRoZSByZWFsIHF1ZXN0aW9uIEkgbmVlZCBhbnN3ZXJlZCBpczogaXMgdGhlcmUgYW4gKmV4cGxpY2l0KiBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IEkgY2FuIHR3ZWFrLCB0byBhY3R1YWxseSAqZW5hYmxlKiBvciBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIGh1Z2Ugdm1hbGxvYz8gSSBrbm93IHRoYXQgb24gc29tZSBhcmNoaXRlY3R1cmVzIHlvdSBtaWdodCBoYXZlIHNvbWV0aGluZyBsaWtlIGBDT05GSUdfSFVHRVRMQl9WTUFMTE9DYCB0byB0dXJuIGl0IG9uLCBidXQgd2hhdCBhYm91dCB0aGUgYnJvYWRlciBzY29wZT8gRG8gSSBuZWVkIHRvIGxvb2sgZm9yIGEgZGVwZW5kZW5jeSwgc29tZSBvdGhlciBhcmNoLXNwZWNpZmljIGZsYWcsIG9yIHBlcmhhcHMgc29tZXRoaW5nIG5ldyBlbnRpcmVseT8gSSB3b25kZXIgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIGFyZSB0aGVyZSBzb21lIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMsIHdpdGggd2hpY2ggSSBhbSBtb3JlIGZhbWlsaWFyLCB0byBjaGVjaz9cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzODMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjIzOjQ3LjIxMDgwODQyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTIyNDQ3NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZy4qSFVHRV9WTUFMTE9DXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xMDkyPWNvbmZpZyBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuLS1cXG5hcmNoL0tjb25maWctMTA5OS0jXFxuYXJjaC9LY29uZmlnOjExMDA6Y29uZmlnIEhBVkVfQVJDSF9IVUdFX1ZNQUxMT0NcXG5hcmNoL0tjb25maWctMTEwMS1cXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9IVUdFX1ZNQVBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6NDkuNzMzMjY1MjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5NjU5MjM2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGBIVUdFX1ZNQVBgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gVGhlIG1lbnRhbCBnZWFycyBhcmUgYWxyZWFkeSB0dXJuaW5nLiBcIkNoZWNrIGBIVUdFX1ZNQVBgXCIg4oCTIHRoYXQncyBhIHByZXR0eSBzcGVjaWZpYyBkaXJlY3RpdmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoeSBhcmUgd2UgbG9va2luZyBhdCB0aGUgYEhVR0VfVk1BUGA/IFdoYXQgcHJvYmxlbSBhcmUgd2UgdHJ5aW5nIHRvIHNvbHZlLCBvciB3aGF0IGFzcGVjdCBvZiB0aGUgc3lzdGVtIGFyZSB3ZSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZz9cIi4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBjb250ZXh0LiBUaGlzIGxpa2VseSByZWxhdGVzIHRvIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBsYXJnZSBwYWdlcy4gSXMgdGhlcmUgYSBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZT8gUGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gVW5leHBlY3RlZCBiZWhhdmlvciByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgYmVpbmcgdXNlZCAob3Igbm90IGJlaW5nIHVzZWQpIGFzIGV4cGVjdGVkP1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHRvb2xzIGFuZCBtZXRob2RzIEknZCBsaWtlbHkgdXNlLiBBbSBJIHB1bGxpbmcgZnJvbSB0aGUgZGVidWdnaW5nIHRvb2xzIHRvIHJ1biBpbiByZWFsLXRpbWUgbW9kZT8gQW0gSSBnb2luZyBiYWNrIHRvIHByZXZpb3VzIGxvZ3MgdG8gZmluZCB0aGUgY2F1c2U/IFBlcmhhcHMgSSBoYXZlIGEgc2NyaXB0IHRoYXQgZ2VuZXJhdGVzIGEgcmVwb3J0P1xuXG5TcGVjaWZpY2FsbHksIEknbSBjb25zaWRlcmluZyB3aGF0IGRhdGEgSSB3aWxsIGJlIGxvb2tpbmcgZm9yOiBUaGUgc2l6ZSBvZiB0aGUgYEhVR0VfVk1BUGAsIGl0cyBjdXJyZW50IHVzYWdlLCBhbnkgZnJhZ21lbnRhdGlvbiwgYW5kIGFueSByZWxldmFudCBlcnJvciBtZXNzYWdlcy4gSSdsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgc3RhdGUgb2YgdGhlIFZNQVAgd2l0aCB0aGUgb3RoZXIgbWVtb3J5IHN1YnN5c3RlbXMgaW4gdGhlIHN5c3RlbS4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgbXkgaHlwb3RoZXNpczogcGVyaGFwcyB0aGVyZSdzIGEgbWlzY29uZmlndXJhdGlvbiBvZiBodWdlIHBhZ2UgcmVzZXJ2YXRpb25zLCBvciBhIHJlc291cmNlIGNvbnN0cmFpbnQgbGltaXRpbmcgdGhlIGFsbG9jYXRpb24gb2YgbGFyZ2UgcGFnZXMsIGxlYWRpbmcgdG8gcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gb3IgZXZlbiBhcHBsaWNhdGlvbiBjcmFzaGVzLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhpcyBraW5kIG9mIGlzc3VlIGNhbiBiZSBzdWJ0bGUgYW5kIHJlcXVpcmUgYSBudWFuY2VkIHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhbmQgc3lzdGVtIGFyY2hpdGVjdHVyZS4gTGV0J3MgZ2V0IHRvIHdvcmshXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6NTMuNTI5ODU5OTM0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY5MzQzMDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZy4qSFVHRV9WTUFQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmVhdHVyZXMvdm0vaHVnZS12bWFwL2FyY2gtc3VwcG9ydC50eHQtMi0jIEZlYXR1cmUgbmFtZTogICAgICAgICAgaHVnZS12bWFwXFxuRG9jdW1lbnRhdGlvbi9mZWF0dXJlcy92bS9odWdlLXZtYXAvYXJjaC1zdXBwb3J0LnR4dDozOiMgICAgICAgICBLY29uZmlnOiAgICAgICBIQVZFX0FSQ0hfSFVHRV9WTUFQXFxuRG9jdW1lbnRhdGlvbi9mZWF0dXJlcy92bS9odWdlLXZtYXAvYXJjaC1zdXBwb3J0LnR4dC00LSMgICAgICAgICBkZXNjcmlwdGlvbjogICBhcmNoIHN1cHBvcnRzIHRoZSBhcmNoX3ZtYXBfcHVkX3N1cHBvcnRlZCgpIGFuZCBhcmNoX3ZtYXBfcG1kX3N1cHBvcnRlZCgpIFZNIEFQSXNcXG4tLVxcbmFyY2gvS2NvbmZpZz0xMDg5PWNvbmZpZyBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuLS1cXG5hcmNoL0tjb25maWctMTA5MS1cXG5hcmNoL0tjb25maWc6MTA5Mjpjb25maWcgSEFWRV9BUkNIX0hVR0VfVk1BUFxcbmFyY2gvS2NvbmZpZy0xMDkzLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjM6NTYuMDk5MjA3NjIxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2ODQyMjkyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVm1hbGxvYywgQ1BBLCBhbmQgdGhlIEFyY2hpdGVjdHVyZSBEYW5jZSoqXG5cblJpZ2h0LCBzbywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaHVnZSB2bWFsbG9jIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgY2FuIGFjdHVhbGx5IGhhbmRsZSBpdC4gVGhhdCdzIGdvb2QsIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCBpcyBrZXkuIEJ1dCB0aGVuLCBteSBtaW5kIGp1bXBzIHRvIHNvbWV0aGluZyBtb3JlIHRhcmdldGVkOiBDUEEsIG9yIGBjaGFuZ2VfcGFnZV9hdHRyYC4gSXQncyBkZWZpbml0ZWx5IGFuIHg4NiB0aGluZywgaXNuJ3QgaXQ/IE15IGludHVpdGlvbiBpcyBzY3JlYW1pbmcgXCJ4ODYgc3BlY2lmaWNcIiBhbmQgSSBuZWVkIHRvIGNoZWNrIG15c2VsZi5cblxuTm93LCBteSByZWFsIHF1ZXN0aW9uIGlzOiBpcyB0aGVyZSBhbnkgY29uZmlndXJhdGlvbiBvcHRpb24/IEFueSByZWxldmFudCBLY29uZmlnIGVudHJ5LCBtYXliZT8gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUncyBhbnkgd2F5IHRvIGNvbnRyb2wgQ1BBJ3MgYmVoYXZpb3IsIHRvZ2dsZSBpdCBvbiBvciBvZmYsIG9yIGFkanVzdCBpdHMgcGFyYW1ldGVycy4gS25vd2luZyB0aGF0IHdpbGwgYmUgcGl2b3RhbCBmb3IgYWRhcHRpbmcgdGhpcyB0byBzcGVjaWZpYyBzeXN0ZW1zLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZyBvcHRpb25zIHRvIHNlZSB3aGF0IGNvbnRyb2wgSSBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzMCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI0OjAyLjc4MzQzOTE0MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NjM4MjUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcuKkNQQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdD0xNTA5PUZFQ19HRVRcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0LTE1MTEtXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3Q6MTUxMjpHZXRzIEZFQyBjb25maWd1cmF0aW9uIGFuZCBzdGF0ZSBsaWtlIGBgRVRIVE9PTF9HRkVDUEFSQU1gYCBpb2N0bCByZXF1ZXN0LlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0LTE1MTMtXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTE0NjY9Y29uZmlnIFg4Nl9ESVJFQ1RfR0JQQUdFU1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xNDc0LVxcbmFyY2gveDg2L0tjb25maWc6MTQ3NTpjb25maWcgWDg2X0NQQV9TVEFUSVNUSUNTXFxuYXJjaC94ODYvS2NvbmZpZy0xNDc2LVxcdGJvb2wgXFxcIkVuYWJsZSBzdGF0aXN0aWMgZm9yIENoYW5nZSBQYWdlIEF0dHJpYnV0ZVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWcuZGVidWc9MTUzPWNvbmZpZyBERUJVR19CT09UX1BBUkFNU1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy5kZWJ1Zy0xNTktXFxuYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZzoxNjA6Y29uZmlnIENQQV9ERUJVR1xcbmFyY2gveDg2L0tjb25maWcuZGVidWctMTYxLVxcdGJvb2wgXFxcIkNQQSBzZWxmLXRlc3QgY29kZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjQ6MDUuNDQ5ODI4MDMxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjAxMzkzNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gUG90ZW50aWFsIERlYnVnZ2luZyBBaWRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCB0aGlzLi4uIGBDUEFfREVCVUdgIG1pZ2h0IGJlIGEgdXNlZnVsIHRvb2wgaGVyZS4gSSByZWNhbGwgc2VlaW5nIHRoYXQgZmxhZyBzb21ld2hlcmUgYW5kIG5vdydzIHRoZSB0aW1lIHRvIGludmVzdGlnYXRlLiBUbyBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBpdCB3b3JrcywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgb3V0IGBhcmNoL3g4Ni9LY29uZmlnLmRlYnVnYC4gSSBzZWVtIHRvIHJlbWVtYmVyIGl0IGJlaW5nIGRlZmluZWQgYXJvdW5kIGxpbmUgMTYwLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBhbmQgd2hldGhlciBpdCdzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IGlzc3VlLiBMZXQgbWUgZ3JhYiB0aGUgc291cmNlIGFuZCBoYXZlIGEgcXVpY2sgbG9vay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4ODIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDowOC41Njk5NzAxOTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTU1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTU1OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXFxuIDE1NjpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIDE1NzpcXHRcXHRoZWxwXFxuIDE1ODpcXHRcXHQgIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugc3RydWN0IGJvb3RfcGFyYW1zIHRvIGJlIGV4cG9ydGVkIHZpYSBkZWJ1Z2ZzLlxcbiAxNTk6XFx0XFxuIDE2MDpcXHRjb25maWcgQ1BBX0RFQlVHXFxuIDE2MTpcXHRcXHRib29sIFxcXCJDUEEgc2VsZi10ZXN0IGNvZGVcXFwiXFxuIDE2MjpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTFxcbiAxNjM6XFx0XFx0aGVscFxcbiAxNjQ6XFx0XFx0ICBEbyBjaGFuZ2VfcGFnZV9hdHRyKCkgc2VsZi10ZXN0cyBldmVyeSAzMCBzZWNvbmRzLlxcbiAxNjU6XFx0XFxuIDE2NjpcXHRjb25maWcgREVCVUdfRU5UUllcXG4gMTY3OlxcdFxcdGJvb2wgXFxcIkRlYnVnIGxvdy1sZXZlbCBlbnRyeSBjb2RlXFxcIlxcbiAxNjg6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcXG4gMTY5OlxcdFxcdGhlbHBcXG4gMTcwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzYW5pdHkgY2hlY2tzIGluIHg4NidzIGxvdy1sZXZlbCBlbnRyeSBjb2RlLlxcbiAxNzE6XFx0XFx0ICBTb21lIG9mIHRoZXNlIHNhbml0eSBjaGVja3MgbWF5IHNsb3cgZG93biBrZXJuZWwgZW50cmllcyBhbmRcXG4gMTcyOlxcdFxcdCAgZXhpdHMgb3Igb3RoZXJ3aXNlIGltcGFjdCBwZXJmb3JtYW5jZS5cXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDowOC41NzAwODc3NzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM2NzMyNDQxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBDUEEqKlxuXG5Pa2F5LCBzbyBgQ1BBX0RFQlVHYCBoYXMgdGhpcyBuZWF0IHRyaWNrIHdoZXJlIGl0IHJ1bnMgYGNoYW5nZV9wYWdlX2F0dHIoKWAgc2VsZi10ZXN0cyBldmVyeSAzMCBzZWNvbmRzLiBUaGF0J3MgZmFudGFzdGljISBUaGlzIGdpdmVzIG1lIGEgc29saWQgb3Bwb3J0dW5pdHkgZm9yIGZ1enppbmcgQ1BBLlxuXG5UaGUgZmlyc3Qgc3RlcCBoZXJlIGlzIHRvIGVuc3VyZSBJJ3ZlIGVuYWJsZWQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zOiBgUFREVU1QX0RFQlVHRlNgLCBgREVCVUdfV1hgLCBhbmQsIG9mIGNvdXJzZSwgYENQQV9ERUJVR2AuIFRob3NlIGFyZSBlc3NlbnRpYWwuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBrZXkgc3ltYm9scyB0byB0YXJnZXQuIEknbSBmb2N1c2luZyBvbiB0aGVzZSBmb3Igbm93OiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBwdGR1bXBfd2Fsa19wZ2RgLCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCwgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbnMgb2YgYHBtZF9mcmVlX3B0ZV9wYWdlYCBhbmQgYHB1ZF9mcmVlX3BtZF9wYWdlYCBqdXN0IHRvIGJlIHN1cmUuIEEgcXVpY2sgc2VhcmNoIHJldmVhbHMgdGhhdCB0aGV5IGFyZSBpbiBgYXJjaC9hcm02NC9tbS9tbXUuY2AuIEFoLCBhbmQgd2FpdCwgYHZtYXBfdHJ5X2h1Z2VfcG1kYCBjYWxscyBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCB3aGljaCBjb3VsZCBiZSBpbnRlcmVzdGluZy4gTm93LCBpcyBgcG1kX2ZyZWVfcHRlX3BhZ2VgIGRlZmluZWQgKm9ubHkqIGZvciBBUk02ND8gSSBoYXZlIHRvIGNvbnNpZGVyIG90aGVyIGFyY2hpdGVjdHVyZXMgZm9yIGJyb2FkZXIgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzc5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjQ6MTMuOTM3NDE1MDc5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU0MjQzOTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZF9mcmVlX3B0ZV9wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbW0vbW11LmM9MTg1Nz1pbnQgcG1kX2NsZWFyX2h1Z2UocG1kX3QgKnBtZHApXFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jLTE4NjQtXFxuYXJjaC9hcm02NC9tbS9tbXUuYzoxODY1OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMTg2Ni17XFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jPTE4ODQ9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL2FybTY0L21tL21tdS5jLTE5MDMtXFx0XFx0aWYgKHBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZHApKSlcXG5hcmNoL2FybTY0L21tL21tdS5jOjE5MDQ6XFx0XFx0XFx0cG1kX2ZyZWVfcHRlX3BhZ2UocG1kcCwgbmV4dCk7XFxuYXJjaC9hcm02NC9tbS9tbXUuYy0xOTA1LVxcdH0gd2hpbGUgKHBtZHArKywgbmV4dCArPSBQTURfU0laRSwgbmV4dCAhPSBlbmQpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYz0xNjc1PWludCBwbWRfY2xlYXJfaHVnZShwbWRfdCAqcG1kKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3JhZGl4X3BndGFibGUuYy0xNjg0LVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmM6MTY4NTppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9yYWRpeF9wZ3RhYmxlLmMtMTY4Ni17XFxuLS1cXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYz0xMTc9aW50IHBtZF9jbGVhcl9odWdlKHBtZF90ICpwbWQpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL3BndGFibGUuYy0xMjQtXFxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmM6MTI1OmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMtMTI2LXtcXG4tLVxcbmFyY2gveDg2L21tL3BndGFibGUuYz03MTg9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gveDg2L21tL3BndGFibGUuYy03NTQtLyoqXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jOjc1NTogKiBwbWRfZnJlZV9wdGVfcGFnZSAtIENsZWFyIFBNRCBlbnRyeSBhbmQgZnJlZSBQVEUgcGFnZS5cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzU2LSAqIEBwbWQ6IFBvaW50ZXIgdG8gdGhlIFBNRFxcbi0tXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc2MS0gKi9cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NzYyOmludCBwbWRfZnJlZV9wdGVfcGFnZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTc2My17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzgyLSAqL1xcbmFyY2gveDg2L21tL3BndGFibGUuYzo3ODM6aW50IHBtZF9mcmVlX3B0ZV9wYWdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNzg0LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIxNzY9aW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjE3NzppbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMTc4LSNlbHNlXFx0LyogIUNPTkZJR19IQVZFX0FSQ0hfSFVHRV9WTUFQICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0yMjA0PXN0YXRpYyBpbmxpbmUgaW50IHB1ZF9mcmVlX3BtZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIyMDctfVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIyMDg6c3RhdGljIGlubGluZSBpbnQgcG1kX2ZyZWVfcHRlX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIyMDkte1xcbi0tXFxubW0vdm1hbGxvYy5jPTE0Mz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMTcyLVxcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxubW0vdm1hbGxvYy5jOjE3MzpcXHRcXHRpZiAoIXBtZF9mcmVlX3B0ZV9wYWdlKHBtZCwgYWRkcikpXFxubW0vdm1hbGxvYy5jLTE3NC1cXHRcXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTdUMjI6MjQ6MTYuMDkxNjYzNjg0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzOTgwMTExNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFNjb3BlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW5pdGlhbGx5IHRob3VnaHQgaXQgd2FzIGp1c3QgZm9jdXNlZCBvbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZnVuY3Rpb25zLCBzaW5jZSB0aGUgZW50cnkgcG9pbnQgc2VlbXMgdG8gYmUgZnJvbSBgbW0vdm1hbGxvYy5jYC4gQnV0IGhvbGQgb24sIHRoZSBjaGFuZ2VzIGFyZSBhY3R1YWxseSBicm9hZGVyIHRoYW4gdGhhdC4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgYXJjaC9hcm02NC9tbS9tbXUuY2AsIHNwZWNpZmljYWxseSB0byBgcG1kX2ZyZWVfcHRlX3BhZ2VgIGFuZCBgcHVkX2ZyZWVfcG1kX3BhZ2VgLiBBbmQgdGhlbiB0aGVyZSdzIHRoZSB4ODYgc2lkZSwgd2l0aCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgY2hhbmdpbmcgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgYW5kIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLiBBbHNvLCBpdCB0b3VjaGVzIHF1aXRlIGEgZmV3IG90aGVyIGFyZWFzLCBpbmNsdWRpbmcgYG1tL3BhZ2V3YWxrLmNgLCBgbW0vcHRkdW1wLmNgIGFuZCBgbW0vdm1hbGxvYy5jYCBhcyBleHBlY3RlZC5cblxuVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCBpcyBkZWFsaW5nIHdpdGggYXJlOiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGBwdGR1bXBfd2Fsa19wZ2RgLCBgd2Fsa19wYWdlX3JhbmdlX2RlYnVnYCwgYHBtZF9mcmVlX3B0ZV9wYWdlYCwgYW5kIGBwdWRfZnJlZV9wbWRfcGFnZWAuIEkgc2hvdWxkIHJlYWxseSBmb2N1cyBteSBhdHRlbnRpb24gb24gdW5kZXJzdGFuZGluZyBob3cgdGhlIGNoYW5nZXMgdG8gdGhlc2UgZnVuY3Rpb25zIGltcGFjdCB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBmbG93LlxuXG5Ob3csIGEgcXVpY2sgbm90ZSwgSSBzZWUgdGhhdCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBpcyBzdGF0aWMgd2l0aGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gR2l2ZW4gdGhhdCBpdCdzIHN0YXRpYywgSSBzaG91bGQgdmVyaWZ5IGl0cyByZWFjaGFiaWxpdHkgdG8gZW5zdXJlIGl0J3MgYWN0dWFsbHkgYmVpbmcgdXNlZC4gTGV0IG1lIGNoZWNrIGlmIGl0J3MgY2FsbGVkIGZyb20gc29tZXRoaW5nIGxpa2UgYF9fY3BhX2ZsdXNoX3RsYmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCB0aGVuIEknbGwgYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE4MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDoyMi40ODk2NzczNDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTMwNzgxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9NDEyPXN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MTMtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0MTQ6c3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00MTUte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NDUtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo0NDY6c3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDQ3LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNDU0LVxcdHNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssIFxcdTAwMjZpbml0X21tKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6NDU1OlxcdFxcdF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy00NTYtfVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz00NTg9c3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ5My1cXHRpZiAoY3BhLVxcdTAwM2VmbGFncyBcXHUwMDI2IENQQV9DT0xMQVBTRSlcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjQ5NDpcXHRcXHRjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTQ5NS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI0OjI0Ljk0Mjc2NDM1OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTU2NzMzMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipBbmFseXppbmcgdGhlIENQQSBDYWxsIENoYWluKipcblxuUmlnaHQsIHNvIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIGRlZmluaXRlbHkgYmVpbmcgaW52b2tlZCBieSBgY3BhX2ZsdXNoYC4gVGhhdCdzIGdvb2QgdG8gaGF2ZSBjb25maXJtZWQuIEFuZCBhcyBJIHN1c3BlY3RlZCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgaXMgdGhlIGNvcmUgZnVuY3Rpb24sIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZXZlcnl0aGluZyByZWxhdGVkIHRvIENQQS4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHF1aWNrbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgYHZtYXBfdHJ5X2h1Z2VfcG1kYCBpcyBkZWNsYXJlZCBzdGF0aWNhbGx5LiBMZXQgbWUganVzdCB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MDcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDoyNy44OTk0OTk0MjlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzY1OTg0MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hcF90cnlfaHVnZV9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTk1PXN0YXRpYyBpbnQgdm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xNDItXFxubW0vdm1hbGxvYy5jOjE0MzpzdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcG1kKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1hbGxvYy5jLTE0NC1cXHRcXHRcXHRwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QsXFxuLS1cXG5tbS92bWFsbG9jLmM9MTc5PXN0YXRpYyBpbnQgdm1hcF9wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xOTItXFxubW0vdm1hbGxvYy5jOjE5MzpcXHRcXHRpZiAodm1hcF90cnlfaHVnZV9wbWQocG1kLCBhZGRyLCBuZXh0LCBwaHlzX2FkZHIsIHByb3QsXFxubW0vdm1hbGxvYy5jLTE5NC1cXHRcXHRcXHRcXHRcXHRtYXhfcGFnZV9zaGlmdCkpIHtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0yMDY9c3RhdGljIGludCB2bWFwX3RyeV9odWdlX3B1ZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTIyNy1cXG5tbS92bWFsbG9jLmM6MjI4OlxcdC8qIFNlZSBjb21tZW50IGluIHZtYXBfdHJ5X2h1Z2VfcG1kKCkuICovXFxubW0vdm1hbGxvYy5jLTIyOS1cXHRzY29wZWRfY29uZF9ndWFyZChtbWFwX3JlYWRfbG9ja190cnksIHJldHVybiAwLCBcXHUwMDI2aW5pdF9tbSkge1xcbi0tXFxubW0vdm1hbGxvYy5jPTI2Mz1zdGF0aWMgaW50IHZtYXBfdHJ5X2h1Z2VfcDRkKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMjg0LVxcbm1tL3ZtYWxsb2MuYzoyODU6XFx0LyogU2VlIGNvbW1lbnQgaW4gdm1hcF90cnlfaHVnZV9wbWQoKS4gKi9cXG5tbS92bWFsbG9jLmMtMjg2LVxcdHNjb3BlZF9jb25kX2d1YXJkKG1tYXBfcmVhZF9sb2NrX3RyeSwgcmV0dXJuIDAsIFxcdTAwMjZpbml0X21tKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI0OjMwLjM3NjEwMjEyMloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDcxMDA4NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG1pbmU6XG5cbioqU3RhdGljIEFuYWx5c2lzIGFuZCBQb3RlbnRpYWwgSG90c3BvdHMqKlxuXG5SaWdodCwgdGhpcyBmZWVscyBwcmV0dHkgc3RhdGljLCBvbiB0aGUgc3VyZmFjZS4gSSdtIGZvY3VzaW5nIG9uIHNvbWUga2V5IHN5bWJvbHMsIEkgc2VlIHRoZXNlIGFzIHBvdGVudGlhbCBob3Qgc3BvdHMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0OiBgdm1hcF90cnlfaHVnZV9wbWRgLCBgdm1hcF90cnlfaHVnZV9wdWRgLCBgdm1hcF90cnlfaHVnZV9wNGRgIOKAkyB0aGUgaHVnZSBwYWdlIGFsbG9jYXRpb24gYXR0ZW1wdHMgd2l0aGluIHZtYWxsb2Mgc3BhY2UuIFRoZW4gdGhlcmUncyBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCBhbmQgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAsIGJvdGggb2Ygd2hpY2ggc2NyZWFtIHBvdGVudGlhbCBjb250ZW50aW9uIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gcGFnZSBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9ucyBhbmQgbGFyZ2UgcGFnZSBjb2xsYXBzaW5nLiBBbHNvLCBJJ3ZlIGdvdCBgcHRkdW1wX3dhbGtfcGdkYCwgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AsIGBwbWRfZnJlZV9wdGVfcGFnZWAsIGFuZCBgcHVkX2ZyZWVfcG1kX3BhZ2VgLCB3aGljaCBhcmUgYWxsIHBvaW50aW5nIG1lIHRvd2FyZCBwYWdlIHRhYmxlIHdhbGtpbmcsIGRlYnVnZ2luZywgYW5kIGRlYWxsb2NhdGlvbiBwYXRocy4gQWxsIG9mIHRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IgbGFyZ2UgbWVtb3J5IG1hbmFnZW1lbnQuXG5cbldhaXQgYSBzZWNvbmTigKYgYHB0ZHVtcF93YWxrX3BnZGAgaXMgZXhwb3J0ZWQ/IFRoYXTigJlzIGludGVyZXN0aW5nLiBJIGhhZG4ndCByZWFsaXplZCB0aGF0IHdhcyBleHBvc2VkLiBUaGlzIG1lYW5zIGl0IG1pZ2h0IGJlIHVzZWQgYnkgZXh0ZXJuYWwgbW9kdWxlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBjb25zaWRlciBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9uIHRob3NlIGZ1bmN0aW9uYWxpdGllcyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA5NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDozNC44NDcxMTM5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzNTg3MDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGR1bXBfd2Fsa19wZ2RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRkdW1wLmg9MTY9c3RydWN0IHB0ZHVtcF9pbmZvIHtcXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oLTIxLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3B0ZHVtcC5oOjIyOnZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IHB0ZHVtcF9pbmZvICppbmZvKTtcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wdGR1bXAuaC0yMy0jaWZkZWYgQ09ORklHX0FSTV9QVERVTVBfREVCVUdGU1xcbi0tXFxuYXJjaC9hcm0vbW0vZHVtcC5jPTM5OD1zdGF0aWMgdm9pZCB3YWxrX3BnZChzdHJ1Y3QgcGdfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmFyY2gvYXJtL21tL2R1bXAuYy00MTQtXFxuYXJjaC9hcm0vbW0vZHVtcC5jOjQxNTp2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwdGR1bXBfaW5mbyAqaW5mbylcXG5hcmNoL2FybS9tbS9kdW1wLmMtNDE2LXtcXG4tLVxcbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmM9Nz1zdGF0aWMgaW50IHB0ZHVtcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmFyY2gvYXJtL21tL3B0ZHVtcF9kZWJ1Z2ZzLmMtMTAtXFxuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYzoxMTpcXHRwdGR1bXBfd2Fsa19wZ2QobSwgaW5mbyk7XFxuYXJjaC9hcm0vbW0vcHRkdW1wX2RlYnVnZnMuYy0xMi1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM9Mjg2PXZvaWQgcHRkdW1wX3dhbGsoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgcHRkdW1wX2luZm8gKmluZm8pXFxuLS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTMxMy1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jOjMxNDpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgaW5mby1cXHUwMDNlbW0sIE5VTEwpO1xcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzE1LX1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmM9MzMxPWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jLTM1NS1cXG5hcmNoL2FybTY0L21tL3B0ZHVtcC5jOjM1NjpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbmFyY2gvYXJtNjQvbW0vcHRkdW1wLmMtMzU3LVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz0zMzQ9c3RhdGljIGludCBwdGR1bXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jLTM1MS1cXHQvKiBUcmF2ZXJzZSBrZXJuZWwgcGFnZSB0YWJsZXMgKi9cXG5hcmNoL3Bvd2VycGMvbW0vcHRkdW1wL3B0ZHVtcC5jOjM1MjpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzUzLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYz0zNjg9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmMtMzkxLVxcbmFyY2gvcG93ZXJwYy9tbS9wdGR1bXAvcHRkdW1wLmM6MzkyOlxcdHB0ZHVtcF93YWxrX3BnZChcXHUwMDI2c3QucHRkdW1wLCBcXHUwMDI2aW5pdF9tbSwgTlVMTCk7XFxuYXJjaC9wb3dlcnBjL21tL3B0ZHVtcC9wdGR1bXAuYy0zOTMtXFxuLS1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM1Mz1zdGF0aWMgdm9pZCBwdGR1bXBfd2FsayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBwdGRfbW1faW5mbyAqcGluZm8pXFxuLS1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTM3Mi1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jOjM3MzpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgcGluZm8tXFx1MDAzZW1tLCBOVUxMKTtcXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTM3NC19XFxuLS1cXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jPTM3Nj1ib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYy0zOTktXFxuYXJjaC9yaXNjdi9tbS9wdGR1bXAuYzo0MDA6XFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tLCBOVUxMKTtcXG5hcmNoL3Jpc2N2L21tL3B0ZHVtcC5jLTQwMS1cXG4tLVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYz0xODI9Ym9vbCBwdGR1bXBfY2hlY2tfd3godm9pZClcXG4tLVxcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMTAtXFx0XFx0cmV0dXJuIHRydWU7XFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jOjIxMTpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgXFx1MDAyNmluaXRfbW0sIE5VTEwpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYy0yMTItXFx0aWYgKHN0Lnd4X3BhZ2VzKSB7XFxuLS1cXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmM9MjI2PXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC9zMzkwL21tL2R1bXBfcGFnZXRhYmxlcy5jLTI1MC1cXHRtdXRleF9sb2NrKFxcdTAwMjZjcGFfbXV0ZXgpO1xcbmFyY2gvczM5MC9tbS9kdW1wX3BhZ2V0YWJsZXMuYzoyNTE6XFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIFxcdTAwMjZpbml0X21tLCBOVUxMKTtcXG5hcmNoL3MzOTAvbW0vZHVtcF9wYWdldGFibGVzLmMtMjUyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3BhX211dGV4KTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaD0zMD1zdHJ1Y3Qgc2VxX2ZpbGU7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjMxOnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDozMjp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMzLVxcdFxcdFxcdFxcdCAgIGJvb2wgdXNlcik7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM0OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjM1OiNkZWZpbmUgcHRkdW1wX2NoZWNrX3d4IHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTM2LXZvaWQgcHRkdW1wX3dhbGtfdXNlcl9wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKTtcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYz04PXN0YXRpYyBpbnQgcHRkdW1wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy05LXtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM6MTA6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMobSwgXFx1MDAyNmluaXRfbW0sIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9MTY9c3RhdGljIGludCBwdGR1bXBfY3Vya25sX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTE4LVxcdGlmIChjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlcGdkKVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzoxOTpcXHRcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBjdXJyZW50LVxcdTAwM2VtbSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYy0yMC1cXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYz0yNj1zdGF0aWMgaW50IHB0ZHVtcF9jdXJ1c3Jfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMjgtXFx0aWYgKGN1cnJlbnQtXFx1MDAzZW1tLVxcdTAwM2VwZ2QpXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jOjI5OlxcdFxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKG0sIGN1cnJlbnQtXFx1MDAzZW1tLCB0cnVlKTtcXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmMtMzAtXFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9tbS9kZWJ1Z19wYWdldGFibGVzLmM9Mzc9c3RhdGljIGludCBwdGR1bXBfZWZpX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTM5LVxcdGlmIChlZmlfbW0ucGdkKVxcbmFyY2gveDg2L21tL2RlYnVnX3BhZ2V0YWJsZXMuYzo0MDpcXHRcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfZGVidWdmcyhtLCBcXHUwMDI2ZWZpX21tLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZGVidWdfcGFnZXRhYmxlcy5jLTQxLVxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NDE2PXN0YXRpYyB2b2lkIG5vdGVfcGFnZV9mbHVzaChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdClcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyMi1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0MjM6Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDI0LVxcdFxcdFxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU3LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ1ODpcXHRwdGR1bXBfd2Fsa19wZ2QoXFx1MDAyNnN0LnB0ZHVtcCwgbW0sIHBnZCk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU5LVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDczLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3NDp2b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3NS17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc2OlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBtbS1cXHUwMDNlcGdkLCBmYWxzZSwgdHJ1ZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc3LX1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NzgtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc5OnZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODAtXFx0XFx0XFx0XFx0ICAgYm9vbCB1c2VyKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDg2LSNlbmRpZlxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ4NzpcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgcGdkLCBmYWxzZSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4OC19XFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00OTA9dm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDAtXFx0cGdkID0ga2VybmVsX3RvX3VzZXJfcGdkcChwZ2QpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwMTpcXHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShOVUxMLCBcXHUwMDI2aW5pdF9tbSwgcGdkLCB0cnVlLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTAyLSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA0LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUwNTpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTA2LXtcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwOS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MTA6XFx0cmV0dXJuIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFxcdTAwMjZpbml0X21tLCBJTklUX1BHRCwgdHJ1ZSwgZmFsc2UpO1xcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUxMS19XFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmM9NzU9dm9pZCBfX2luaXQgZWZpX2R1bXBfcGFnZXRhYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmMtNzctI2lmZGVmIENPTkZJR19FRklfUEdUX0RVTVBcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmM6Nzg6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsKE5VTEwsIFxcdTAwMjZpbml0X21tKTtcXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzMyLmMtNzktI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmM9NDIzPXZvaWQgX19pbml0IGVmaV9kdW1wX3BhZ2V0YWJsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jLTQyNS0jaWZkZWYgQ09ORklHX0VGSV9QR1RfRFVNUFxcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYzo0MjY6XFx0cHRkdW1wX3dhbGtfcGdkX2xldmVsKE5VTEwsIFxcdTAwMjZlZmlfbW0pO1xcbmFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYy00MjctI2VuZGlmXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oPTEzPXN0cnVjdCBwdGR1bXBfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0yNy1cXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oOjI4OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxcbmluY2x1ZGUvbGludXgvcHRkdW1wLmgtMjktXFx0XFx0XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsXFxuaW5jbHVkZS9saW51eC9wdGR1bXAuaC0zMC1cXHRcXHRcXHRcXHRib29sIGNoZWNrd3gsIGJvb2wgZG1lc2cpO1xcbmluY2x1ZGUvbGludXgvcHRkdW1wLmg6MzE6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTtcXG5pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oLTMyLWJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpO1xcbi0tXFxubW0vcHRkdW1wLmM9MTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgcHRkdW1wX29wcyA9IHtcXG4tLVxcbm1tL3B0ZHVtcC5jLTE3NC1cXG5tbS9wdGR1bXAuYzoxNzU6dm9pZCBwdGR1bXBfd2Fsa19wZ2Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKVxcbm1tL3B0ZHVtcC5jLTE3Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI0OjM3LjM4Mjk4ODM0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNDc4NTQ1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBgcHRkdW1wX3dhbGtfcGdkYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgcHRkdW1wX3dhbGtfcGdkYCBpcyBkZWZpbmVkIGluIGBtbS9wdGR1bXAuY2AgYW5kIGl0cyBkZWNsYXJhdGlvbiByZXNpZGVzIGluIGBpbmNsdWRlL2xpbnV4L3B0ZHVtcC5oYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBXYWl0IGEgc2Vjb25kLi4uIGl0J3MgZGVjbGFyZWQgZ2xvYmFsbHkgYnV0IG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkIHRvIG1vZHVsZXMuIFRoYXQncyBhIGJpdCBvZGQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gSXMgaXQgbWVhbnQgdG8gYmUgaW50ZXJuYWw/IEFscmlnaHQsIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgc2VlIGhvdyBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyBoYW5kbGVkIHJlZ2FyZGluZyBpdHMgZXhwb3J0IHN0YXR1cywgYXMgaXQncyBsaWtlbHkgcmVsYXRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBleHBvcnQgaXMgZXhwbGljaXQsIG9yIGlmIHRoaXMgaXMgYW5vdGhlciBmdW5jdGlvbiB3aXRoIHNpbWlsYXIgbnVhbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNjMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDo0Mi41MzA4NDQ4MDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzA3MjU3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTg2MT1zdGF0aWMgaW50IF9fY2hhbmdlX3BhZ2VfYXR0cihzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IHByaW1hcnkpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5MzgtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxOTM5OnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE5NDAtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE5NDQ9c3RhdGljIGludCBjcGFfcHJvY2Vzc19hbGlhcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTk3NC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE5NzU6XFx0XFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFsaWFzX2NwYSwgMCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xOTc2LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMDgtXFx0XFx0ICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDA5OlxcdFxcdF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZhbGlhc19jcGEsIDApO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAxMC1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwMTUtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDE2OnN0YXRpYyBpbnQgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBwcmltYXJ5KVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjAxNy17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwNjgtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMDY5OnN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIwNzAtXFx0XFx0XFx0XFx0ICAgIHBncHJvdF90IG1hc2tfc2V0LCBwZ3Byb3RfdCBtYXNrX2NscixcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjEyNi1cXHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFxcdTAwMjZpbml0X21tKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjEyNzpcXHRcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxMjgtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxNTQ9c3RhdGljIGlubGluZSBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXQodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTU2LXtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIxNTc6XFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihhZGRyLCBudW1wYWdlcywgbWFzaywgX19wZ3Byb3QoMCksIDAsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMTU4LVxcdFxcdChhcnJheSA/IENQQV9BUlJBWSA6IDApLCBOVUxMKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjE2MT1zdGF0aWMgaW5saW5lIGludCBjaGFuZ2VfcGFnZV9hdHRyX2NsZWFyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE2My17XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTY0OlxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoYWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBtYXNrLCAwLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE2NS1cXHRcXHQoYXJyYXkgPyBDUEFfQVJSQVkgOiAwKSwgTlVMTCk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxNjg9c3RhdGljIGlubGluZSBpbnQgY3BhX3NldF9wYWdlc19hcnJheShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNzAte1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjE3MTpcXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKE5VTEwsIG51bXBhZ2VzLCBtYXNrLCBfX3BncHJvdCgwKSwgMCxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIxNzItXFx0XFx0Q1BBX1BBR0VTX0FSUkFZLCBwYWdlcyk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIxNzU9c3RhdGljIGlubGluZSBpbnQgY3BhX2NsZWFyX3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE3Ny17XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMTc4OlxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoTlVMTCwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBtYXNrLCAwLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjE3OS1cXHRcXHRDUEFfUEFHRVNfQVJSQVksIHBhZ2VzKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIyMD1pbnQgX3NldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMjctXFx0aWYgKCFyZXQpIHtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyMjg6XFx0XFx0cmV0ID0gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZhZGRyLCBudW1wYWdlcyxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMjktXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNhY2hlbW9kZTJwZ3Byb3QoX1BBR0VfQ0FDSEVfTU9ERV9XQyksXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzNDE9aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQ3LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM0ODpcXHRyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIGNsciwgMCxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDktXFx0XFx0XFx0XFx0XFx0Q1BBX0NPTExBUFNFLCBOVUxMKTtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM2Mj1pbnQgc2V0X21lbW9yeV9ucF9ub2FsaWFzKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2My17XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzY0OlxcdHJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjUtXFx0XFx0XFx0XFx0XFx0X19wZ3Byb3QoX1BBR0VfUFJFU0VOVCksIDAsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzNzQ9aW50IHNldF9tZW1vcnlfNGsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzc1LXtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNzY6XFx0cmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2YWRkciwgbnVtcGFnZXMsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzc3LVxcdFxcdFxcdFxcdFxcdF9fcGdwcm90KF9QQUdFX0tFUk5FTF80SyksXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzOTc9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX3BndGFibGUodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDI2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQyNzpcXHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MjgtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1MTk9c3RhdGljIGludCBfc2V0X3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU0NC1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBuZXdfdHlwZSA9PSBfUEFHRV9DQUNIRV9NT0RFX1dDKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjU0NTpcXHRcXHRyZXQgPSBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoTlVMTCwgbnVtcGFnZXMsXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTQ2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBjYWNoZW1vZGUycGdwcm90KFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNjI0PXN0YXRpYyBpbnQgX19zZXRfcGFnZXNfcChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjM5LVxcdCAqL1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjY0MDpcXHRyZXR1cm4gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmNwYSwgMSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjQxLX1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjY0Mz1zdGF0aWMgaW50IF9fc2V0X3BhZ2VzX25wKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NTgtXFx0ICovXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjU5OlxcdHJldHVybiBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2NjAtfVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNzI2PWludCBfX2luaXQga2VybmVsX21hcF9wYWdlc19pbl9wZ2QocGdkX3QgKnBnZCwgdTY0IHBmbiwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNzUwLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6Mjc1MTpcXHRyZXR2YWwgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcXHUwMDI2Y3BhLCAxKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI3NTItXFx0X19mbHVzaF90bGJfYWxsKCk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI3NjM9aW50IF9faW5pdCBrZXJuZWxfdW5tYXBfcGFnZXNfaW5fcGdkKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjc4NS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI3ODY6XFx0cmV0dmFsID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmNwYSwgMSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNzg3LVxcdF9fZmx1c2hfdGxiX2FsbCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xN1QyMjoyNDo0NC44MDE1NzU3OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDU2NDk4NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWdlIEF0dHJpYnV0ZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgcGFnZSBhdHRyaWJ1dGVzIGFyZSBjaGFuZ2VkLCBhbmQgdGhlIGNvbm5lY3Rpb24gaXMgYmVjb21pbmcgY2xlYXJlci4gYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgaXMgZGVmaW5lZCBhcyBzdGF0aWMsIHdoaWNoIGluaXRpYWxseSBtYWtlcyBpdCBzZWVtIGxpa2UgaXQncyBhIGxvY2FsbHkgc2NvcGVkIHV0aWxpdHkgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoZSBmYWN0IHRoYXQgaXQncyBjYWxsZWQgYnkgdGhlIGxpa2VzIG9mIGBzZXRfbWVtb3J5X3JveGAsIGBzZXRfbWVtb3J5XzRrYCwgYW5kIGBzZXRfbWVtb3J5X25wX25vYWxpYXNgIGluZGljYXRlcyBhIHdpZGVyIGltcGFjdCB0aGFuIGluaXRpYWxseSBwZXJjZWl2ZWQuXG5cbk9uIHRoZSBvdGhlciBoYW5kLCBgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIHNlZW1zIHRvIGJlIHVzZWQgYXMgYSBjb3JlIHV0aWxpdHkgZnVuY3Rpb24sIHVzZWQgYWNyb3NzIGEgcmFuZ2Ugb2Ygb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBrZXJuZWxfbWFwX3BhZ2VzX2luX3BnZGAsIGBrZXJuZWxfdW5tYXBfcGFnZXNfaW5fcGdkYCwgYF9fc2V0X3BhZ2VzX3BgLCBhbmQgYF9fc2V0X3BhZ2VzX25wYC4gVGhpcyBzZWVtcyB0byBoYXZlIGEgd2lkZXIgc2NvcGUuIEdpdmVuIGl0cyByb2xlIGFzIGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2sgZm9yIHRoZXNlIGNyaXRpY2FsIG9wZXJhdGlvbnMsIGBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgc2VlbXMgbGlrZSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uLiBCdXQgd2FpdCwgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgaXMgYWxzbyBnb29kLlxuXG5BbHJpZ2h0LCBsZXQncyBub3cgY2hlY2sgaG93IGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIHVzZXMgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTQ3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI0OjUxLjI1ODA3Njk2NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNDY2NTExNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3YWxrX3BhZ2VfcmFuZ2VfZGVidWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdD0zODI9V2UgYWxzbyBwZXJtaXQgYSB0cnVseSB1bnVzdWFsIGNhc2UgaXMgdGhlIHRyYXZlcnNhbCBvZiBub24tVk1BIHJhbmdlcyBpblxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6MzgzOioqdXNlcmxhbmQqKiByYW5nZXMsIGFzIHByb3ZpZGVkIGZvciBieSA6YzpmdW5jOmAhd2Fsa19wYWdlX3JhbmdlX2RlYnVnYC5cXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0LTM4NC1cXG4tLVxcbm1tL2ludGVybmFsLmg9MTg0MD1pbnQgd2Fsa19wYWdlX3JhbmdlX3ZtYV91bnNhZmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTE4NDItXFx0XFx0dm9pZCAqcHJpdmF0ZSk7XFxubW0vaW50ZXJuYWwuaDoxODQzOmludCB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vaW50ZXJuYWwuaC0xODQ0LVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlbmQsIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzLFxcbi0tXFxubW0vcGFnZXdhbGsuYz02NDg9aW50IHdhbGtfa2VybmVsX3BhZ2VfdGFibGVfcmFuZ2VfbG9ja2xlc3ModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTY2Ny0vKipcXG5tbS9wYWdld2Fsay5jOjY2ODogKiB3YWxrX3BhZ2VfcmFuZ2VfZGVidWcgLSB3YWxrIGEgcmFuZ2Ugb2YgcGFnZXRhYmxlcyBub3QgYmFja2VkIGJ5IGEgdm1hXFxubW0vcGFnZXdhbGsuYy02NjktICogQG1tOlxcdFxcdG1tX3N0cnVjdCByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBwcm9jZXNzIG9mIHBhZ2UgdGFibGUgd2Fsa1xcbi0tXFxubW0vcGFnZXdhbGsuYy02ODMtICovXFxubW0vcGFnZXdhbGsuYzo2ODQ6aW50IHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9wYWdld2Fsay5jLTY4NS1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZW5kLCBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyxcXG4tLVxcbm1tL3B0ZHVtcC5jPTE3NT12b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxuLS1cXG5tbS9wdGR1bXAuYy0xODUtXFx0d2hpbGUgKHJhbmdlLVxcdTAwM2VzdGFydCAhPSByYW5nZS1cXHUwMDNlZW5kKSB7XFxubW0vcHRkdW1wLmM6MTg2OlxcdFxcdHdhbGtfcGFnZV9yYW5nZV9kZWJ1ZyhtbSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLFxcbm1tL3B0ZHVtcC5jLTE4Ny1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cHRkdW1wX29wcywgcGdkLCBzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI0OjUzLjU4Mjc0NzA3OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjk5MTQ4MjIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBmb3IgS2VybmVsIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCdzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGFyZWFzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBwYWdlIHRhYmxlIGR1bXBpbmcsIGh1Z2UgcGFnZSBoYW5kbGluZyB3aXRoaW4gdm1hbGxvYywgYW5kIHRoZSB4ODYgQ2hhbmdlIFBhZ2UgQXR0cmlidXRlIChDUEEpIGNvZGUuIFRoZSBjb3JlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHN5bmNocm9uaXppbmcgdGhlc2Ugb3BlcmF0aW9ucyB1c2luZyBgaW5pdF9tbS5tbWFwX2xvY2tgIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIHN0YXRpYyBrZXkgYXBwcm9hY2gsIHdpdGggYWRkaXRpb25hbCBsb2NraW5nIGFkZGVkIHRvIHRoZSB4ODYgQ1BBIGFuZCB2bWFsbG9jIHBhdGhzLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSwgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGNvbmN1cnJlbmN5IGFuZCByZXF1aXJpbmcgcmlnb3JvdXMgZnV6emluZyB0byB1bmNvdmVyIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy5cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIGluIHRocmVlIG1haW4gYXJlYXMgd2hpY2ggYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmc6IHBhZ2UgdGFibGUgZHVtcGluZyAocHRkdW1wKSwgdm1hbGxvYyBodWdlIHBhZ2Ugc2V0dXAsIGFuZCBDUEEuIFNpbmNlIHRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbnQgYWNjZXNzLCB0aGUgZ29hbCBvZiBmdXp6aW5nIGlzIHRvIGV4cG9zZSBhbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhlIG5ldyBsb2NraW5nIHNjaGVtZSwgcG9zc2libGUgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHdoZW4gY29uY3VycmVudCBwYWdlIHRhYmxlIHdhbGtzIGFuZCBtb2RpZmljYXRpb25zIGhhcHBlbi5cblxuU28sIGB3YWxrX3BhZ2VfcmFuZ2VfZGVidWdgIGlzIGV4cG9zZWQgaW4gYG1tL2ludGVybmFsLmhgIGFuZCBpcyBjYWxsZWQgYnkgYHB0ZHVtcF93YWxrX3BnZGAuIFRoYXQgdGVsbHMgbWUgdGhlIHN5bWJvbHMgdGhhdCBhcmUgaW4gc2NvcGUgZm9yIGZ1enppbmcgYXJlOlxuLSAgIGB2bWFwX3RyeV9odWdlX3BtZGAsIGB2bWFwX3RyeV9odWdlX3B1ZGAsIGB2bWFwX3RyeV9odWdlX3A0ZGAgKGRlYWxpbmcgd2l0aCBodWdlIHBhZ2VzKVxuLSAgIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLCBgX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIChDUEEgY29kZSkuICBIbW0sIGJvdGggYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgYW5kIGBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgYXJlIHN0YXRpYywgYnV0IHRoZSBwYXRjaCBsaWtlbHkgY2FsbHMgdGhlbSB0aHJvdWdoIGV4cG9ydGVkIGZ1bmN0aW9ucyBsaWtlIGBzZXRfbWVtb3J5X3djYCBvciBgc2V0X21lbW9yeV9yb3hgLCBzbyB3ZSBjYW4gc3RpbGwgZnV6eiB2aWEgdGhvc2Ugb3IgdmlhIENQQV9ERUJVRy5cbi0gICBgcHRkdW1wX3dhbGtfcGdkYCBhbmQgYHdhbGtfcGFnZV9yYW5nZV9kZWJ1Z2AgKHBhZ2UgdGFibGUgZHVtcGluZylcbi0gICBgcG1kX2ZyZWVfcHRlX3BhZ2VgLCBgcHVkX2ZyZWVfcG1kX3BhZ2VgXG5cbk9rYXksIGxldCdzIG5haWwgZG93biB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBnb2luZyB0byBiZSB1c2VmdWwgZm9yIHRlc3RpbmcgdGhpcy4gYFBURFVNUF9ERUJVR0ZTYCBzZWVtcyByZWxldmFudCBzaW5jZSBpdCBleHBvc2VzIHRoZSBgcHRkdW1wYCBmdW5jdGlvbmFsaXR5IHRvIGRlYnVnZnMsIHNvbWV0aGluZyBzeXprYWxsZXIgY2FuIGVhc2lseSBsZXZlcmFnZS4gYERFQlVHX1dYYCBsb29rcyB1c2VmdWwgYmVjYXVzZSBpdCBlbmFibGVzIGBwdGR1bXBgIGF0IGJvb3QuIEdpdmVuIHRoYXQgdGhlIENQQSBjb2RlIGlzIGFsc28gaW52b2x2ZWQgYW5kIHRoaXMgcGF0Y2ggbWlnaHQgbWFrZSBjaGFuZ2VzIHRvIGl0LCBgQ1BBX0RFQlVHYCBpcyBhIG11c3QsIHNpbmNlIGl0IHJ1bnMgc2VsZi10ZXN0cyBhbmQgd2lsbCB0cmlnZ2VyIHRoZSBjb2RlLiBJIGRvbid0IG5lZWQgdG8gc3BlY2lmeSBgREVCVUdfRlNgIGJlY2F1c2Ugc3l6a2FsbGVyIHVzdWFsbHkgYWxyZWFkeSBoYXMgaXQgZW5hYmxlZC5cblxuU28gdGhlIGNvbmZpZ3MgYXJlOlxuLSBgUFREVU1QX0RFQlVHRlNgXG4tIGBERUJVR19XWGBcbi0gYENQQV9ERUJVR2BcblxuSSB3aWxsIG5vdyB2ZXJpZnkgdGhhdCB0aGUgc3ltYm9sIG5hbWVzIEknbSBmb2N1c2luZyBvbiBhcmUgY29ycmVjdCwganVzdCB0byBiZSBzdXJlLiBJJ2xsIGNvbmZpcm0gZWFjaCBzeW1ib2wgbmFtZS4gWWVwLCB0aGV5IGFsbCBtYXRjaCB0aGUgZGVmaW5pdGlvbnMgaW4gdGhlIGtlcm5lbCBzb3VyY2VzLlxuXG5JIGFtIG5vdyByZWFkeSB0byBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXMgaW5wdXRzIGZvciBzZXR0aW5nIHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDEzMSwiT3V0cHV0VG9rZW5zIjoyNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE3VDIyOjI1OjEwLjU3NDIzMjE0M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzA1Njk5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIkRFQlVHX1dYXCIsXG4gICAgXCJDUEFfREVCVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwX3RyeV9odWdlX3BtZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wdWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcDRkXCIsXG4gICAgXCJjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNcIixcbiAgICBcIl9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RcIixcbiAgICBcIndhbGtfcGFnZV9yYW5nZV9kZWJ1Z1wiLFxuICAgIFwicG1kX2ZyZWVfcHRlX3BhZ2VcIixcbiAgICBcInB1ZF9mcmVlX3BtZF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB0YWJsZSBkdW1waW5nIChwdGR1bXApLCB2bWFsbG9jIGh1Z2UgcGFnZSBzZXR1cCwgYW5kIHg4NiBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGUgKENQQSkgY29kZSB0byB1c2UgYGluaXRfbW0ubW1hcF9sb2NrYCBmb3Igc3luY2hyb25pemF0aW9uLiBUaGlzIHJlcGxhY2VzIGEgc3RhdGljIGtleSBhcHByb2FjaCBpbiBhcm02NCBhbmQgYWRkcyBsb2NraW5nIGluIHg4NiBDUEEgYW5kIHZtYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgd2Fsa3MgYW5kIG1vZGlmaWNhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIkRFQlVHX1dYXCIsXG4gICAgXCJDUEFfREVCVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWFwX3RyeV9odWdlX3BtZFwiLFxuICAgIFwidm1hcF90cnlfaHVnZV9wdWRcIixcbiAgICBcInZtYXBfdHJ5X2h1Z2VfcDRkXCIsXG4gICAgXCJjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNcIixcbiAgICBcIl9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RcIixcbiAgICBcIndhbGtfcGFnZV9yYW5nZV9kZWJ1Z1wiLFxuICAgIFwicG1kX2ZyZWVfcHRlX3BhZ2VcIixcbiAgICBcInB1ZF9mcmVlX3BtZF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB0YWJsZSBkdW1waW5nIChwdGR1bXApLCB2bWFsbG9jIGh1Z2UgcGFnZSBzZXR1cCwgYW5kIHg4NiBDaGFuZ2UgUGFnZSBBdHRyaWJ1dGUgKENQQSkgY29kZSB0byB1c2UgYGluaXRfbW0ubW1hcF9sb2NrYCBmb3Igc3luY2hyb25pemF0aW9uLiBUaGlzIHJlcGxhY2VzIGEgc3RhdGljIGtleSBhcHByb2FjaCBpbiBhcm02NCBhbmQgYWRkcyBsb2NraW5nIGluIHg4NiBDUEEgYW5kIHZtYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBkZWFkbG9ja3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgd2Fsa3MgYW5kIG1vZGlmaWNhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow9stg4[1] Phase: Succeeded StartedAt: 2026-07-17 22:25:22 +0000 UTC FinishedAt: 2026-07-17 22:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-17 22:25:22 +0000 UTC FinishedAt: 2026-07-17 22:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2] Phase: Succeeded StartedAt: 2026-07-17 22:25:22 +0000 UTC FinishedAt: 2026-07-18 02:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 22:25:22 +0000 UTC FinishedAt: 2026-07-18 02:45:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 22:25:22 +0000 UTC FinishedAt: 2026-07-17 22:25:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 22:25:22 +0000 UTC FinishedAt: 2026-07-17 22:25:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-workflow9stg4/series-workflow9stg4-convert-artifact-3288338641/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 22:25:32 +0000 UTC FinishedAt: 2026-07-17 23:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 22:25:32 +0000 UTC FinishedAt: 2026-07-17 23:05:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0149f968-0a46-456d-bec9-3f65ffa8d159,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-workflow9stg4/series-workflow9stg4-convert-artifact-3288338641/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": "e6c082b6-981d-4898-84b3-c3207ef6bb33", "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-workflow9stg4/series-workflow9stg4-build-action-1862314623/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 22:25:32 +0000 UTC FinishedAt: 2026-07-17 23:05:16 +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:*0149f968-0a46-456d-bec9-3f65ffa8d159,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-workflow9stg4/series-workflow9stg4-convert-artifact-3288338641/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": "e6c082b6-981d-4898-84b3-c3207ef6bb33", "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-workflow9stg4/series-workflow9stg4-build-action-1862314623/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:05:42 +0000 UTC FinishedAt: 2026-07-17 23:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:05:42 +0000 UTC FinishedAt: 2026-07-17 23:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:05:42 +0000 UTC FinishedAt: 2026-07-17 23:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:05:42 +0000 UTC FinishedAt: 2026-07-17 23:05:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-workflow9stg4/series-workflow9stg4-convert-artifact-4255658404/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:06:02 +0000 UTC FinishedAt: 2026-07-17 23:09:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:06:02 +0000 UTC FinishedAt: 2026-07-17 23:09:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e6c082b6-981d-4898-84b3-c3207ef6bb33,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-workflow9stg4/series-workflow9stg4-build-action-1862314623/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-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:09:23 +0000 UTC FinishedAt: 2026-07-17 23:09:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:09:23 +0000 UTC FinishedAt: 2026-07-17 23:09:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:09:23 +0000 UTC FinishedAt: 2026-07-17 23:38:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:09:23 +0000 UTC FinishedAt: 2026-07-17 23:38:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0149f968-0a46-456d-bec9-3f65ffa8d159,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-workflow9stg4/series-workflow9stg4-convert-artifact-4255658404/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": "c7a65351-eaa1-4b58-ad50-db5a808940f6", "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-workflow9stg4/series-workflow9stg4-build-action-1407625264/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:09:23 +0000 UTC FinishedAt: 2026-07-17 23:38:25 +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:*0149f968-0a46-456d-bec9-3f65ffa8d159,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-workflow9stg4/series-workflow9stg4-convert-artifact-4255658404/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": "c7a65351-eaa1-4b58-ad50-db5a808940f6", "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-workflow9stg4/series-workflow9stg4-build-action-1407625264/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:38:59 +0000 UTC FinishedAt: 2026-07-17 23:38:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:38:59 +0000 UTC FinishedAt: 2026-07-17 23:38:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:38:59 +0000 UTC FinishedAt: 2026-07-17 23:42:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:38:59 +0000 UTC FinishedAt: 2026-07-17 23:42:31 +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:*c7a65351-eaa1-4b58-ad50-db5a808940f6,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-workflow9stg4/series-workflow9stg4-build-action-1407625264/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-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:42:42 +0000 UTC FinishedAt: 2026-07-18 02:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:42:42 +0000 UTC FinishedAt: 2026-07-18 02:45:13 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","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:*e6c082b6-981d-4898-84b3-c3207ef6bb33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c7a65351-eaa1-4b58-ad50-db5a808940f6,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-workflow9stg4/series-workflow9stg4-build-action-1862314623/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-workflow9stg4/series-workflow9stg4-build-action-1407625264/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:42:42 +0000 UTC FinishedAt: 2026-07-17 23:43:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:42:42 +0000 UTC FinishedAt: 2026-07-17 23:43:15 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","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-workflow9stg4/series-workflow9stg4-convert-artifact-1034599469/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:42:42 +0000 UTC FinishedAt: 2026-07-17 23:42:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:42:42 +0000 UTC FinishedAt: 2026-07-17 23:42:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:42:43 +0000 UTC FinishedAt: 2026-07-17 23:42:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:43:25 +0000 UTC FinishedAt: 2026-07-18 02:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9stg4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["vmap_try_huge_pmd","vmap_try_huge_pud","vmap_try_huge_p4d","cpa_collapse_large_pages","__change_page_attr_set_clr","ptdump_walk_pgd","walk_page_range_debug","pmd_free_pte_page","pud_free_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fce2dfa773ced15f27dd27cd0b482a7473cdcf2a","config_name":"upstream-apparmor-kasan.config","enable_configs":["PTDUMP_DEBUGFS","DEBUG_WX","CPA_DEBUG"],"series_id":"d5e733a7-107a-4d9d-83a1-97088c8a0594","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-17 23:43:25 +0000 UTC FinishedAt: 2026-07-18 02:45:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e6c082b6-981d-4898-84b3-c3207ef6bb33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c7a65351-eaa1-4b58-ad50-db5a808940f6,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-workflow9stg4/series-workflow9stg4-build-action-1862314623/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-workflow9stg4/series-workflow9stg4-build-action-1407625264/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-workflow9stg4/series-workflow9stg4-convert-artifact-1034599469/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,}