Name: series-workflowj9qmp Phase: Succeeded StartedAt: 2026-08-10 02:37:58 +0000 UTC FinishedAt: 2026-08-10 06:39:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[0] Phase: Succeeded StartedAt: 2026-08-10 02:37:58 +0000 UTC FinishedAt: 2026-08-10 02:59:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 02:37:58 +0000 UTC FinishedAt: 2026-08-10 02:59:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7db0a00445f1a40bacfe9b747405c11cb5f10fc9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "BPF_EVENTS", "DYNAMIC_FTRACE_WITH_DIRECT_CALLS", "DYNAMIC_FTRACE", "KPROBE_EVENTS", "PERF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7db0a00445f1a40bacfe9b747405c11cb5f10fc9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "BPF_EVENTS", "DYNAMIC_FTRACE_WITH_DIRECT_CALLS", "DYNAMIC_FTRACE", "KPROBE_EVENTS", "PERF_EVENTS" ], "series_id": "3c0dbb35-890d-4530-a2d6-6e1984e8dfdf" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_trampoline_multi_attach", "bpf_trampoline_multi_detach", "bpf_tracing_multi_link_release" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtLUFJPQkVfRVZFTlRTJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2RldGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIFVzZS1BZnRlci1GcmVlIChVQUYpIGJ1ZyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgLCB3aGVyZSBgb2xkX2ltYWdlYCBjb3VsZCBiZSBmcmVlZCB3aGlsZSBzdGlsbCBiZWluZyB0aGUgYWN0aXZlIGltYWdlIChgY3VyX2ltYWdlYCkgaWYgYGJwZl90cmFtcG9saW5lX3VwZGF0ZSgpYCBmYWlscy4gVUFGIGJ1Z3MgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCBieSBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgd2hlbiB0aGUgb2xkIGltYWdlIGlzIHNhZmUgdG8gZnJlZS4gSXQgYWxzbyBjaGFuZ2VzIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIHRvIHJldHVybiB2b2lkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiB0cmFtcG9saW5lIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBzeXNjYWxscywgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjE5ZjMwZWVlY2YwOWMzNGYwNzg4ZDQ2MTU4MGI5YTM5NTgwN2ZmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDAyOjU0OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCA3M2JhY2ZjNjQ0NGRmLi4zMjU1YzZmNWVhNmI0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTE1MTgsOCAmIzQzOzE1MTgsOCBAQCBpbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY1xuIFxuIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbiBcdFx0XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcbi1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi1cdFx0XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcbiYjNDM7dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7XG4gdm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzKTtcbiBcbiAvKlxuQEAgLTE2MzksMTAgJiM0MzsxNjM5LDkgQEAgc3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4ge1xuIFx0cmV0dXJuIC1FTk9UU1VQUDtcbiB9XG4tc3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuIHtcbi1cdHJldHVybiAtRU5PVFNVUFA7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzKSB7fVxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IGVkNzk5OWFkNmM2NmMuLjU0NGFiNDFhM2MyNTYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC0xNTk1LDcgJiM0MzsxNTk1LDE4IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG4gXG4gc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbiB7XG4tXHRpZiAodHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSlcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9ubHkgZnJlZSBvbGRfaW1hZ2UgaWYgaXQgaXMgbm8gbG9uZ2VyIHRoZSBhY3RpdmUgaW1hZ2UuXG4mIzQzO1x0ICogV2hlbiBicGZfdHJhbXBvbGluZV91cGRhdGUoKSBmYWlscyBiZWZvcmUgbW9kaWZ5X2ZlbnRyeV9tdWx0aSgpL1xuJiM0MztcdCAqIHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKCkgaXMgY2FsbGVkLCBjdXJfaW1hZ2UgaXMgdW5jaGFuZ2VkXG4mIzQzO1x0ICogKGN1cl9pbWFnZSA9PSBvbGRfaW1hZ2UpIGFuZCBmdHJhY2Ugc3RpbGwgcG9pbnRzIHRvIGl0LiBGcmVlaW5nXG4mIzQzO1x0ICogaXQgd291bGQgY2F1c2UgYSBVQUYgd2hlbiBmdHJhY2UgY2FsbHMgaW50byB0aGUgZnJlZWQgbWVtb3J5LlxuJiM0MztcdCAqIE9uIHN1Y2Nlc3MsIGN1cl9pbWFnZSBpcyBlaXRoZXIgYSBuZXcgaW1hZ2Ugb3IgTlVMTCwgc29cbiYjNDM7XHQgKiBvbGRfaW1hZ2UgIT0gY3VyX2ltYWdlIGNvcnJlY3RseSBpZGVudGlmaWVzIGEgc3RhbGUgaW1hZ2UgdGhhdFxuJiM0MztcdCAqIGlzIHNhZmUgdG8gZnJlZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAhPSB0ci1cdTAwM2VjdXJfaW1hZ2UpXG4gXHRcdGJwZl90cmFtcF9pbWFnZV9wdXQodHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSk7XG4gXG4gXHR0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlID0gTlVMTDtcbkBAIC0xNzE5LDcgJiM0MzsxNzMwLDggQEAgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuJiM0Mzt2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuIHtcbiBcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhID0gXHUwMDI2bGluay1cdTAwM2VkYXRhO1xuIFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX25vZGUgKm1ub2RlO1xuQEAgLTE3NDksNyAmIzQzOzE3NjEsNiBAQCBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX1xuIFx0XHRicGZfdHJhbXBvbGluZV9wdXQobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG4gXG4gXHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4gI3VuZGVmIGZvcl9lYWNoX21ub2RlX2NudFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuaW5kZXggODkxODk3ZjhhMWIzNS4uMjkyNjA5NTFhYTg3MSAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5AQCAtMzY4Nyw3ICYjNDM7MzY4Nyw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluayA9XG4gXHRcdGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluaywgbGluayk7XG4gXG4tXHRXQVJOX09OX09OQ0UoYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKGxpbmstXHUwMDNlcHJvZywgdHJfbGluaykpO1xuJiM0MztcdGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChsaW5rLVx1MDAzZXByb2csIHRyX2xpbmspO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0UmIzM0OywKICAgICYjMzQ7S1BST0JFX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gmIzM0OywKICAgICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgVXNlLUFmdGVyLUZyZWUgYnVnIGluIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZWAgYnkgY29ycmVjdGx5IGlkZW50aWZ5aW5nIHdoZW4gdGhlIG9sZCBpbWFnZSBpcyBzYWZlIHRvIGZyZWUuIEl0IGFsc28gY2hhbmdlcyBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCB0byByZXR1cm4gdm9pZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBCUEYgdHJhbXBvbGluZSBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgc3lzY2FsbHMsIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxOWYzMGVlZWNmMDljMzRmMDc4OGQ0NjE1ODBiOWEzOTU4MDdmZjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwMjo1NDowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oCmluZGV4IDczYmFjZmM2NDQ0ZGYuLjMyNTVjNmY1ZWE2YjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaApAQCAtMTUxOCw4ICYjNDM7MTUxOCw4IEBAIGludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jCiAKIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcywKIAkJCQlzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7Ci1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywKLQkJCQlzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7CiYjNDM7dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLAomIzQzOwkJCQkgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspOwogdm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzKTsKIAogLyoKQEAgLTE2MzksMTAgJiM0MzsxNjM5LDkgQEAgc3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsCiB7CiAJcmV0dXJuIC1FTk9UU1VQUDsKIH0KLXN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCi0JCQkJCSAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKQogewotCXJldHVybiAtRU5PVFNVUFA7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFncykge30KICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwppbmRleCBlZDc5OTlhZDZjNjZjLi41NDRhYjQxYTNjMjU2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwpAQCAtMTU5NSw3ICYjNDM7MTU5NSwxOCBAQCBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKQogCiBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKQogewotCWlmICh0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSkKJiM0MzsJLyoKJiM0MzsJICogT25seSBmcmVlIG9sZF9pbWFnZSBpZiBpdCBpcyBubyBsb25nZXIgdGhlIGFjdGl2ZSBpbWFnZS4KJiM0MzsJICogV2hlbiBicGZfdHJhbXBvbGluZV91cGRhdGUoKSBmYWlscyBiZWZvcmUgbW9kaWZ5X2ZlbnRyeV9tdWx0aSgpLwomIzQzOwkgKiB1bnJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSgpIGlzIGNhbGxlZCwgY3VyX2ltYWdlIGlzIHVuY2hhbmdlZAomIzQzOwkgKiAoY3VyX2ltYWdlID09IG9sZF9pbWFnZSkgYW5kIGZ0cmFjZSBzdGlsbCBwb2ludHMgdG8gaXQuIEZyZWVpbmcKJiM0MzsJICogaXQgd291bGQgY2F1c2UgYSBVQUYgd2hlbiBmdHJhY2UgY2FsbHMgaW50byB0aGUgZnJlZWQgbWVtb3J5LgomIzQzOwkgKiBPbiBzdWNjZXNzLCBjdXJfaW1hZ2UgaXMgZWl0aGVyIGEgbmV3IGltYWdlIG9yIE5VTEwsIHNvCiYjNDM7CSAqIG9sZF9pbWFnZSAhPSBjdXJfaW1hZ2UgY29ycmVjdGx5IGlkZW50aWZpZXMgYSBzdGFsZSBpbWFnZSB0aGF0CiYjNDM7CSAqIGlzIHNhZmUgdG8gZnJlZS4KJiM0MzsJICovCiYjNDM7CWlmICh0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAmYW1wOyZhbXA7CiYjNDM7CSAgICB0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAhPSB0ci0mZ3Q7Y3VyX2ltYWdlKQogCQlicGZfdHJhbXBfaW1hZ2VfcHV0KHRyLSZndDttdWx0aV9hdHRhY2gub2xkX2ltYWdlKTsKIAogCXRyLSZndDttdWx0aV9hdHRhY2gub2xkX2ltYWdlID0gTlVMTDsKQEAgLTE3MTksNyAmIzQzOzE3MzAsOCBAQCBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsCiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKQomIzQzO3ZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywKJiM0MzsJCQkJIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKQogewogCXN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhID0gJmFtcDtsaW5rLSZndDtkYXRhOwogCXN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9ub2RlICptbm9kZTsKQEAgLTE3NDksNyAmIzQzOzE3NjEsNiBAQCBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpXwogCQlicGZfdHJhbXBvbGluZV9wdXQobW5vZGUtJmd0O3RyYW1wb2xpbmUpOwogCiAJY2xlYXJfdHJhY2luZ19tdWx0aV9kYXRhKGRhdGEpOwotCXJldHVybiAwOwogfQogCiAjdW5kZWYgZm9yX2VhY2hfbW5vZGVfY250CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKaW5kZXggODkxODk3ZjhhMWIzNS4uMjkyNjA5NTFhYTg3MSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwpAQCAtMzY4Nyw3ICYjNDM7MzY4Nyw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspCiAJc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKnRyX2xpbmsgPQogCQljb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmssIGxpbmspOwogCi0JV0FSTl9PTl9PTkNFKGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChsaW5rLSZndDtwcm9nLCB0cl9saW5rKSk7CiYjNDM7CWJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChsaW5rLSZndDtwcm9nLCB0cl9saW5rKTsKIH0KIAogc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgVHJhbXBvbGluZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAsIGNoYW5naW5nIGl0cyByZXR1cm4gdHlwZSB0byBgdm9pZGAgaW5zdGVhZCBvZiBgaW50YC4gIFRoYXQmIzM5O3MgYSBiaXQgdW51c3VhbCwgYW5kIEkmIzM5O2QgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIGl0IHRvIGJlIGNvbmZpZGVudCBpbiB0aGUgY2hhbmdlIOKAkyBhcmUgdGhleSB1c2luZyB0aGUgcmV0dXJuIHZhbHVlIHNvbWV3aGVyZSBpbXBvcnRhbnQ/ICBJdCYjMzk7cyBhbHNvIGZpeGluZyBhIFVzZS1BZnRlci1GcmVlIChVQUYpIGlzc3VlIGluIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZWAgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGB0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAhPSB0ci0mZ3Q7Y3VyX2ltYWdlYC4gIFRoYXQgc291bmRzIGNyaXRpY2FsOyBVQUZzIGFyZSBuYXN0eSBhbmQgdGhpcyBsaWtlbHkgYWRkcmVzc2VzIGEgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0eS4KClRoZSBjaGFuZ2VzIGFyZSBpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGFuZCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkIGZvciB0aGVzZSBmaWxlcyB0byBlbnN1cmUgdGhlIHBhdGNoIGFwcGxpZXMgY29ycmVjdGx5IHRvIHRoZSB0YXJnZXRlZCBlbnZpcm9ubWVudHMuIFNwZWNpZmljYWxseSwgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCByZWxpZXMgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX0pJVGAuIExldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGlzIHByb3Blcmx5IGd1YXJkZWQgYnkgdGhlIHJlbGV2YW50IGJ1aWxkIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjaGFuZ2UgYWZmZWN0cyBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIG5lY2Vzc2FyeSBCUEYgZmVhdHVyZXMgYXJlbiYjMzk7dCBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW1wb2xpbmUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBKSVQgUmVxdWlyZW1lbnRzKioKCkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXQgc2VlbXMgdGhhdCBgQ09ORklHX0JQRl9KSVRgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBoZXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSB3b3VsZG4mIzM5O3QgZXhwZWN0IEJQRiBmdW5jdGlvbmFsaXR5IHRvIHdvcmsgd2l0aG91dCB0aGUgSklUIGNvbXBpbGVyIGVuYWJsZWQuIEl0JiMzOTtzIHRoZSBjb3JlIG9mIHRyYW5zbGF0aW5nIHRob3NlIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBpbnRvIG5hdGl2ZSBtYWNoaW5lIGNvZGUgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UuCgpOb3csIG15IG1pbmQgc2hpZnRzIHRvIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJJiMzOTttIGN1cmlvdXMgaG93IHRoaXMgcGxheXMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSB0cmFjaW5nIGZ1bmN0aW9uYWxpdHkgaXMgZGVwZW5kZW50IG9uIHRoZSBKSVQsIG9yIGlmIGl0IGNhbiB1c2Ugc29tZSBhbHRlcm5hdGl2ZSBCUEYgaW50ZXJwcmV0ZXIuIERvZXMgdGhlIHRyYWNpbmcgdXNlIG9mIEJQRiBkZW1hbmQgdGhlIEpJVD8gS25vd2luZyB0aGUgYW5zd2VyIGlzIGtleSB0byBidWlsZGluZyBhbiBvdmVyYWxsIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo1NjpDRkxBR1NfYnBmX3RyYWNlLm8gOj0gLUkkKHNyYylcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTA5PW9iai0kKENPTkZJR19VU0VSX0VWRU5UUykgJiM0Mzs9IHRyYWNlX2V2ZW50c191c2VyLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMTA6b2JqLSQoQ09ORklHX0JQRl9FVkVOVFMpICYjNDM7PSBicGZfdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTExMS1vYmotJChDT05GSUdfS1BST0JFX0VWRU5UUykgJiM0Mzs9IHRyYWNlX2twcm9iZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE0MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkFuYWx5c2lzIG9mIGVCUEYgRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgc28gYENPTkZJR19CUEZfRVZFTlRTYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGhlcmUuIFdlIG5lZWQgdGhhdCBlbmFibGVkIHRvIGV2ZW4gYmUgaW4gdGhlIGJhbGxwYXJrLiBOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IGFuZCBhbmFseXplIHRoZSBpbXBhY3RlZCBmdW5jdGlvbnMuIExvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCwgYW5kIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2VgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgY29tcG9uZW50cyBpbiB0aGUgZUJQRiB0cmFjaW5nL3RyYW1wb2xpbmUgbGlmZWN5Y2xlLCBjbGVhcmx5LgoKSW50ZXJlc3RpbmcuLi4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCBpcyBvbiB0aGUgbGlzdC4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IHRoZSBjYWxsIGdyYXBoIGZvciB0aGF0IG9uZS4gRG9lcyBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBjYWxsIGl0IGFuZCBpcyBpdCBhbHNvIGJlaW5nIGNhbGxlZCBieSBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYD8gV2UgbmVlZCB0byB2ZXJpZnkgdGhlIHVzYWdlIHRvIGRldGVybWluZSBob3cgdGhpcyBmcmVlaW5nIG9wZXJhdGlvbiBpcyBjb29yZGluYXRlZCB3aXRoaW4gdGhlIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQgcHJvY2Vzc2VzLiBUaGUgY2FsbCBjaGFpbiBpcyB2ZXJ5IGltcG9ydGFudC4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW50ZXJhY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1OTA9c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5Ny17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYzMz1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcwNy1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcwODpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA5LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MzM9dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTUtXHRmb3JfZWFjaF9tbm9kZShtbm9kZSwgbGluaylcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NTY6XHRcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc1Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFRyYW1wb2xpbmUgTXVsdGktQXR0YWNoL0RldGFjaCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBpcyBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjbGVhbnVwIGhhcHBlbnMsIGFuZCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uCgpNeSBpbW1lZGlhdGUgZm9jdXMsIHRoZW4sIG5lZWRzIHRvIGJlIG9uIHRoZXNlIHRocmVlIGZ1bmN0aW9uczogYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLCBhbmQgYWxzbyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGNhbiBhY3R1YWxseSBiZSB0cmlnZ2VyZWQgZnJvbSBhIHVzZXItc3BhY2Ugc3lzY2FsbC4gVGhpbmtpbmcgYWJvdXQgdGhlIHVzdWFsIGVudHJ5IHBvaW50cywgaXQmIzM5O3MgaGlnaGx5IHByb2JhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBJIHN1c3BlY3QgaXQmIzM5O3MgcmVhY2hhYmxlIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYGJwZl9saW5rX2NyZWF0ZWAgb3IgYSBzaW1pbGFyIEFQSS4gSWYgc28sIHRoYXQgb3BlbnMgdXAgYWxsIHNvcnRzIG9mIHBvdGVudGlhbCBzZWN1cml0eSBjb25jZXJucywgd2hpY2ggSSBuZWVkIHRvIGFuYWx5emUgY2FyZWZ1bGx5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgaXRzZWxmIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfbXVsdGlfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1ODktXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTkwOnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTkxLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5Ny17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYxNS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MTY6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjE3LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjMyLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYzMzppbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM0LVx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3OS1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjgwOlx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODEtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcwNy1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcwODpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA5LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MTctXHRcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcxODpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcxOS1cdH1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzMzPXZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQzLVx0XHRkYXRhLVx1MDAzZWVudHJ5ID0gXHUwMDI2bW5vZGUtXHUwMDNlZW50cnk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzQ0Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDUtXHRcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXHUwMDI2bW5vZGUtXHUwMDNlbm9kZSwgbW5vZGUtXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzU1LVx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzU2Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgQ2FsbHMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBubyBkb3VidCwgYnV0IHRvIHJlYWxseSBncmFzcCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBxdWlja2x5IGlkZW50aWZ5aW5nICp3aGVyZSogaXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGRlc2lnbiBkZWNpc2lvbnMgc3Vycm91bmRpbmcgdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVsYXRpb25zaGlwcyBoZXJlLiBLbm93aW5nIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgYW5kIG1vZHVsZXMgdGhhdCB1c2UgdGhpcyBoZWxwcyBtZSBkZXRlcm1pbmUgdGhlIHVzZS1jYXNlcyBhbmQgcG90ZW50aWFsIGltcGFjdCB0byB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODQwPWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkxMS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTEyOlx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHByb2csIGlkcywgbGluayk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkxMy1cdGt2ZnJlZShpZHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBDYWxsIENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIGRvd24gaG93IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGdldHMgaW52b2tlZC4gVGhlIGNvbnRleHQgaXMgdGhhdCBJIHN1c3BlY3QgYGJwZl9saW5rX2NyZWF0ZWAgbWlnaHQgYmUgcmVzcG9uc2libGUuIExldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBjb2RlIGFuZCB2ZXJpZnkgdGhhdCBoeXBvdGhlc2lzLiBUaGUgZnVuY3Rpb24gbmFtZSBpbXBsaWVzIHNvbWUgc29ydCBvZiBtdWx0aXBsZSBhdHRhY2htZW50LCBhbmQgYGJwZl9saW5rX2NyZWF0ZWAgaXMgY2VydGFpbmx5IHRoZSBwbGFjZSB3aGVyZSBhIG5ldyBlQlBGIGxpbmsg4oCTIHdoaWNoLCBpbiBzb21lIGNhc2VzLCBpbnZvbHZlcyB0cmFjaW5nIOKAkyBpcyBlc3RhYmxpc2hlZCwgc28gdGhhdCB3b3VsZCBtYWtlIHNlbnNlIGFzIHRoZSByb290IGNhdXNlLiBJIHdpbGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBjYWxscyBhbmQgc2VlIGlmIGl0IHNlZW1zIGRpcmVjdGx5IGludm9sdmVkLCBvciBpZiBzb21lIGludGVybWVkaWFyeSBpcyBtYWtpbmcgdGhlIGNhbGwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjaW5nX211bHRpX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTU3ODQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTgzNC1cdFx0ZWxzZSBpZiAoaXNfdHJhY2luZ19tdWx0aShwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4MzU6XHRcdFx0cmV0ID0gYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHByb2csIGF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTgzNi1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODkwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBFbnRyeSBQb2ludCBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUuIEkgY2FuIHNlZSB0aGF0IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGluZGVlZCBjYWxsZWQgZnJvbSBgbGlua19jcmVhdGVgIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGVyZWZvcmUsIG15IHByaW1hcnkgZW50cnkgcG9pbnRzIG9mIGludGVyZXN0IGFyZSBjbGVhcmx5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZGVidWdnaW5nIG9yIGFuYWx5c2lzLgoKTm93LCBjb25jZXJuaW5nIGNvbmZpZ3VyYXRpb25zLCBJJiMzOTttIGRlYWxpbmcgd2l0aCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgQlBGX0VWRU5UU2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGBCUEZfRVZFTlRTYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgYSBrZXkgY29uZmlndXJhdGlvbiwgc28gdW5kZXJzdGFuZGluZyBpdHMgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSBkZWVwZXIgd29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCByZWxpZXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfRVZFTlRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9ODM5PWNvbmZpZyBFUFJPQkVfRVZFTlRTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxua2VybmVsL3RyYWNlL0tjb25maWc6ODUzOmNvbmZpZyBCUEZfRVZFTlRTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTQtXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRiBFdmVudHMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgQlBGX0VWRU5UU2AgaXMgZGVmaW5pdGVseSB0aWVkIHRvIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQgbXVjaCBpcyBjbGVhci4gTm93LCBsZXQmIzM5O3MgZGlnIGEgbGl0dGxlIGRlZXBlci4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGl0ICpyZXF1aXJlKiBgRlRSQUNFYD8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBgQlBGX0VWRU5UU2Agb2Z0ZW4gbGVhbnMgb24gZWl0aGVyIGBGVFJBQ0VgIG9yIGBLUFJPQkVfRVZFTlRTYCwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBiZSBwcmVjaXNlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzIGhlcmUuIFRoZSBiZXN0IGNvdXJzZSBvZiBhY3Rpb24gaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGZ1bGwgZGVmaW5pdGlvbiBvZiBgQlBGX0VWRU5UU2AgYW5kIHNlZSBwcmVjaXNlbHkgd2hhdCBpdCBzYXlzLiBObyBhc3N1bXB0aW9ucywganVzdCB0aGUgZGVmaW5pdGl2ZSB0cnV0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXG4gODUxOlx0XHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cbiA4NTI6XHRcbiA4NTM6XHRjb25maWcgQlBGX0VWRU5UU1xuIDg1NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDg1NTpcdFx0ZGVwZW5kcyBvbiAoS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTKSBcdTAwMjZcdTAwMjYgUEVSRl9FVkVOVFNcbiA4NTY6XHRcdGJvb2xcbiA4NTc6XHRcdGRlZmF1bHQgeVxuIDg1ODpcdFx0aGVscFxuIDg1OTpcdFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcbiA4NjA6XHRcdCAgdHJhY2Vwb2ludCBldmVudHMuXG4gODYxOlx0XG4gODYyOlx0Y29uZmlnIERZTkFNSUNfRVZFTlRTXG4gODYzOlx0XHRkZWZfYm9vbCBuXG4gODY0Olx0XG4gODY1Olx0Y29uZmlnIFBST0JFX0VWRU5UU1xuIDg2NjpcdFx0ZGVmX2Jvb2wgblxuIDg2NzpcdFxuIDg2ODpcdGNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXG4gODY5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgcHJvZ3JhbXMgdG8gb3ZlcnJpZGUgYSBrcHJvYmVkIGZ1bmN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBCUEYgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBzZXQgdXAgbXkgQlBGIGVudmlyb25tZW50LiBJdCBzZWVtcyBsaWtlIHRoZSBgQlBGX0VWRU5UU2AgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gaGF2aW5nIGBLUFJPQkVfRVZFTlRTYCBvciBgVVBST0JFX0VWRU5UU2AsIGFuZCBhbHNvIGBQRVJGX0VWRU5UU2AgZW5hYmxlZC4gVGhlcmVmb3JlLCB0byBlbnN1cmUgZXZlcnl0aGluZyYjMzk7cyBwcm9wZXJseSBlbmFibGVkLCBteSBpbW1lZGlhdGUgc3RyYXRlZ3kgaXMgdG8gZW5hYmxlIGBLUFJPQkVfRVZFTlRTYCwgYFBFUkZfRVZFTlRTYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBCUEZfSklUYC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIG5lY2Vzc2FyeSBiYXNlcy4gTm93LCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgS1BST0JFX0VWRU5UU2AgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYWRkcmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtQUk9CRV9FVkVOVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz03NzA9Y29uZmlnIFBST0JFX0VWRU5UU19CVEZfQVJHU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTc4MS1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjc4Mjpjb25maWcgS1BST0JFX0VWRU5UU1xua2VybmVsL3RyYWNlL0tjb25maWctNzgzLVx0ZGVwZW5kcyBvbiBLUFJPQkVTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODAwLVxua2VybmVsL3RyYWNlL0tjb25maWc6ODAxOmNvbmZpZyBLUFJPQkVfRVZFTlRTX09OX05PVFJBQ0Vcbmtlcm5lbC90cmFjZS9LY29uZmlnLTgwMi1cdGJvb2wgXCYjMzQ7RG8gTk9UIHByb3RlY3Qgbm90cmFjZSBmdW5jdGlvbiBmcm9tIGtwcm9iZSBldmVudHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIxNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRlcGVuZGVuY2llcyBhbmQgSklUIENvbXBpbGF0aW9uOiBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYEtQUk9CRV9FVkVOVFNgLiBJdCYjMzk7cyBwcmV0dHkgZnVuZGFtZW50YWwga25vd2xlZGdlIHRoYXQgdGhpcyBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byBgS1BST0JFU2AgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGhlcmUsIGVzcGVjaWFsbHkgaWYgc29tZXRoaW5nIGlzIGJlaW5nIHVwZGF0ZWQgaW4gbXkgY29kZSBvciBjb25maWd1cmF0aW9uLiBTaW5jZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBrcHJvYmVzIGluZnJhc3RydWN0dXJlLCBJIGNhbiBlYXNpbHkgcmVjYWxsIHRoaXMgcG9pbnQuCgpOb3csIGEgcmVsYXRlZCBhcmVhIHRoYXQgYWx3YXlzIHBpcXVlcyBteSBpbnRlcmVzdCBpcyB0aGUgcGVyZm9ybWFuY2UgYXNwZWN0LCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBpbXBsaWNhdGlvbnMgb2YgSklUIGNvbXBpbGF0aW9uLCBvciBgQlBGX0pJVGAsIGluIHRoaXMgY29udGV4dC4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUmIzM5O3MgYW55IHJlbGF0aW9uIGJldHdlZW4gdGhlIGtwcm9iZSBldmVudHMgYW5kIHRoZSBKSVQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1pbmQgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uIGFuZCB1c2FnZSBvZiB0aGUgQlBGIEpJVC4gVGltZSB0byBjcm9zcy1jaGVjayB0aGUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBgQlBGX0pJVGAuIFRoZXJlIGNvdWxkIGJlIHNvbWUgc3VidGxlIGludGVyYWN0aW9ucyBJIHNob3VsZCBjb25zaWRlciwgbGlrZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBLUFJPQkVfRVZFTlRTYCBhbmQgYEJQRl9KSVRgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkJQRiBKSVQgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJQRl9KSVRgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCBzZWVtcyB0byByZWx5IG9uIGVpdGhlciBgSEFWRV9DQlBGX0pJVGAgb3IgYEhBVkVfRUJQRl9KSVRgLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgcG90ZW50aWFsIGFyY2hpdGVjdHVyZXMgaW52b2x2ZWQsICphbmQqIGFsc28gcmVxdWlyZXMgYE1PRFVMRVNgLiBHb3QgaXQuIEp1c3QgZG91YmxlLWNoZWNraW5nIHRvIGNvbmZpcm0gdGhhdCB1bmRlcnN0YW5kaW5nLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IGBrZXJuZWwvYnBmL0tjb25maWdgLiBJdCYjMzk7cyBhbHdheXMgc21hcnQgdG8gY29uZmlybSBhc3N1bXB0aW9ucywgZXZlbiB3aGVuIHRoZXkgc2VlbSBvYnZpb3VzLiBJdCYjMzk7cyB0b28gZWFzeSB0byBtYWtlIGEgc21hbGwgZXJyb3IgYW5kIHRoZW4gc3BlbmQgYSB3aGlsZSBkZWJ1Z2dpbmcgaXQgbGF0ZXIuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHN1YnRsZXR5IEkmIzM5O3ZlIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTXkgVGhpbmtpbmcgb24gQlBGIEpJVCBEZXBlbmRlbmNpZXMgYW5kIFRyYW1wb2xpbmVzKioKClJpZ2h0LCBzbyBgQlBGX0pJVGAgaGluZ2VzIG9uIGBCUEZgIGl0c2VsZiwgbmF0dXJhbGx5LiBBbmQgaXQmIzM5O3MgYWxzbyBjb25kaXRpb25hbCBvbiBlaXRoZXIgYEhBVkVfQ0JQRl9KSVRgIG9yIGBIQVZFX0VCUEZfSklUYCBiZWluZyBkZWZpbmVkLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSBuZWVkICpzb21lKiBraW5kIG9mIEpJVCBjYXBhYmlsaXR5IHRvIGVuYWJsZSB0aGUgYnJvYWRlciBKSVQgZmVhdHVyZS4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLiBUaGlzIGhhcyBtZSB3b25kZXJpbmcgaWYgYEZQUk9CRWAgb3IgYEZUUkFDRWAgYXJlIGFsc28gcHJlcmVxdWlzaXRlcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb25uZWN0aW9ucyBoZXJlLCBzbyBsZXQmIzM5O3MgY2hlY2sgaXRzIHNvdXJjZSBsb2NhdGlvbi4uLiBhaCwgaXQmIzM5O3MgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gR29vZCwgdGhhdCBuYXJyb3dzIHRoZSBzY29wZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzOiBBcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggdGhpcywgYmV5b25kIHRoZSBvYnZpb3VzPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY29uZGl0aW9uYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4OS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1OTA6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTEte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTk2OnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk3LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjE1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYxNjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfcm9sbGJhY2soc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MTcte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzItXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjMzOmludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzQtXHRcdFx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc5LVx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODA6XHRcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4MS1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA3LVx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzA4Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MDktXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcxNy1cdFx0YnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2cobW5vZGUtXHUwMDNldHJhbXBvbGluZSwgXHUwMDI2bW5vZGUtXHUwMDNlbm9kZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzE4Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfcm9sbGJhY2sobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzE5LVx0fVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MzM9dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDMtXHRcdGRhdGEtXHUwMDNlZW50cnkgPSBcdTAwMjZtbm9kZS1cdTAwM2VlbnRyeTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NDQ6XHRcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0NS1cdFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhcdTAwMjZtbm9kZS1cdTAwM2Vub2RlLCBtbm9kZS1cdTAwM2V0cmFtcG9saW5lLCBOVUxMLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTUtXHRmb3JfZWFjaF9tbm9kZShtbm9kZSwgbGluaylcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NTY6XHRcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc1Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBQcm9jZXNzIGZvciBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCoqCgpSaWdodCwgc28gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IGZ1bmN0aW9uIGdldHMgY29tcGlsZWQgd2hlbiBgdHJhbXBvbGluZS5jYCBnZXRzIGNvbXBpbGVkLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBsaWtlIGFuIGAjaWZkZWZgLCBjb250cm9sbGluZyBpdHMgY29tcGlsYXRpb24/IElzIGl0IGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgYmFzZWQgb24gc29tZSBmZWF0dXJlIGZsYWcgb3IgY29uZmlndXJhdGlvbiBvcHRpb24/IFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGF2YWlsYWJpbGl0eSBhbmQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgY29tcG9uZW50cy4gR290dGEgY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBndWFyZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0xNTE3PWludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcyk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE1MTgtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE1MTk6aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTIwLVx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MTYzMz1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaGFzX3RyYW1wb2xpbmUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMTYzNi19XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE2Mzc6c3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE2MzgtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk4OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgQlBGIEhlYWRlciYjMzk7cyBHdWFyZHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpdGhpbiBgaW5jbHVkZS9saW51eC9icGYuaGAuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGljaCBgI2lmZGVmYCBkaXJlY3RpdmVzLCBvciBzaW1pbGFyIGNvbnN0cnVjdHMgbGlrZSBgI2lmIGRlZmluZWQoKWAsIGFyZSB1c2VkIHRvIGd1YXJkIHRoZSBjb3JlIGRlY2xhcmF0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLiBJIHdhbnQgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIG9yIGtlcm5lbCB2ZXJzaW9ucywgb3IgcGVyaGFwcyBldmVuIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMsIHRyaWdnZXIgb3IgZGlzYWJsZSBjZXJ0YWluIEJQRiBmdW5jdGlvbmFsaXRpZXMuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGV2b2x1dGlvbiBvZiB0aGUgQlBGIEFQSSBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQgYWNyb3NzIHZhcmlvdXMgY29uZmlndXJhdGlvbnMuIEtub3dpbmcgdGhlc2UgZ3VhcmRzIGlzIGNydWNpYWwgZm9yIGNvbXBhdGliaWxpdHkgYW5hbHlzaXMgYW5kIHVuZGVyc3RhbmRpbmcgd2hpY2ggQlBGIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIHdoaWNoIGFyZSBkZXByZWNhdGVkIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcga2VybmVsIHZlcnNpb25zLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZ3VhcmRzIHJlbGF0aW5nIHRvIGtlcm5lbCB2ZXJzaW9ucywgc3BlY2lmaWMgaGFyZHdhcmUgKGxpa2UgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgc3BlY2lhbGl6ZWQgaW5zdHJ1Y3Rpb25zKSwgb3IgcG9zc2libHkgZXZlbiBvcHRpb25hbCBCUEYgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUwMDpcdFx0XHRyZXR1cm4gLUUyQklHO1xuMTUwMTpcdFxuMTUwMjpcdFx0cmV0dXJuIDA7XG4xNTAzOlx0fVxuMTUwNDpcdFxuMTUwNTpcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rO1xuMTUwNjpcdFxuMTUwNzpcdCNpZmRlZiBDT05GSUdfQlBGX0pJVFxuMTUwODpcdGludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuMTUwOTpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbjE1MTA6XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpO1xuMTUxMTpcdGludCBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4xNTEyOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4xNTEzOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpO1xuMTUxNDpcdHN0cnVjdCBicGZfdHJhbXBvbGluZSAqYnBmX3RyYW1wb2xpbmVfZ2V0KHU2NCBrZXksXG4xNTE1Olx0XHRcdFx0XHRcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKTtcbjE1MTY6XHR2b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKTtcbjE1MTc6XHRpbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY3MpO1xuMTUxODpcdFxuMTUxOTpcdGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbjE1MjA6XHRcdFx0XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcbjE1MjE6XHR2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4xNTIyOlx0XHRcdFx0XHQgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspO1xuMTUyMzpcdHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFncyk7XG4xNTI0Olx0XG4xNTI1Olx0LypcbjE1MjY6XHQgKiBXaGVuIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydHMgU1RBVElDX0NBTEwgcmVwbGFjZSB0aGUgYnBmX2Rpc3BhdGNoZXJfZm5cbjE1Mjc6XHQgKiBpbmRpcmVjdGlvbiB3aXRoIGEgZGlyZWN0IGNhbGwgdG8gdGhlIGJwZiBwcm9ncmFtLiBJZiB0aGUgYXJjaGl0ZWN0dXJlIGRvZXNcbjE1Mjg6XHQgKiBub3QgaGF2ZSBTVEFUSUNfQ0FMTCwgYXZvaWQgYSBkb3VibGUtaW5kaXJlY3Rpb24uXG4xNTI5Olx0ICovXG4xNTMwOlx0I2lmZGVmIENPTkZJR19IQVZFX1NUQVRJQ19DQUxMXG4xNTMxOlx0XG4xNTMyOlx0I2RlZmluZSBfX0JQRl9ESVNQQVRDSEVSX1NDX0lOSVQoX25hbWUpXHRcdFx0XHRcXFxuMTUzMzpcdFx0LnNjX2tleSA9IFx1MDAyNlNUQVRJQ19DQUxMX0tFWShfbmFtZSksXHRcdFx0XFxcbjE1MzQ6XHRcdC5zY190cmFtcCA9IFNUQVRJQ19DQUxMX1RSQU1QX0FERFIoX25hbWUpLFxuMTUzNTpcdFxuMTUzNjpcdCNkZWZpbmUgX19CUEZfRElTUEFUQ0hFUl9TQyhuYW1lKVx0XHRcdFx0XFxcbjE1Mzc6XHRcdERFRklORV9TVEFUSUNfQ0FMTChicGZfZGlzcGF0Y2hlcl8jI25hbWUjI19jYWxsLCBicGZfZGlzcGF0Y2hlcl9ub3BfZnVuYylcbjE1Mzg6XHRcbjE1Mzk6XHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfQ0FMTChuYW1lKVx0XHRcdFx0XFxcbjE1NDA6XHRcdHN0YXRpY19jYWxsKGJwZl9kaXNwYXRjaGVyXyMjbmFtZSMjX2NhbGwpKGN0eCwgaW5zbnNpLCBicGZfZnVuYylcbjE1NDE6XHRcbjE1NDI6XHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfVVBEQVRFKF9kLCBfbmV3KVx0XHRcdFxcXG4xNTQzOlx0XHRfX3N0YXRpY19jYWxsX3VwZGF0ZSgoX2QpLVx1MDAzZXNjX2tleSwgKF9kKS1cdTAwM2VzY190cmFtcCwgKF9uZXcpKVxuMTU0NDpcdFxuMTU0NTpcdCNlbHNlXG4xNTQ2Olx0I2RlZmluZSBfX0JQRl9ESVNQQVRDSEVSX1NDX0lOSVQobmFtZSlcbjE1NDc6XHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfU0MobmFtZSlcbjE1NDg6XHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfQ0FMTChuYW1lKVx0XHRicGZfZnVuYyhjdHgsIGluc25zaSlcbjE1NDk6XHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfVVBEQVRFKF9kLCBfbmV3KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIEJQRiBKSVQgQ29uZmlndXJhdGlvbiBhbmQgTXVsdGktQXR0YWNoKioKClJpZ2h0LCBzbyBgQ09ORklHX0JQRl9KSVRgIGlzIHRoZSBiaWcga2FodW5hLCB0aGUgcHJpbWFyeSBzd2l0Y2ggdGhhdCBjb250cm9scyB0aGUgZW50aXJlIEJQRiBKdXN0LUluLVRpbWUgY29tcGlsZXIuIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCByZWFsbHkuIEFueSBCUEYtcmVsYXRlZCB3b3JrLCBlc3BlY2lhbGx5IG9wdGltaXphdGlvbnMsIGxpa2VseSBoaW5nZXMgb24gdGhpcyBiZWluZyBlbmFibGVkIGF0IGNvbXBpbGUgdGltZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11bHRpLWF0dGFjaCB0cmFjaW5nIGlzIGhhbmRsZWQuIExldCBtZSBsb29rIGF0IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGF0IGZ1bmN0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgbG93ZG93biBvbiBob3cgbXVsdGlwbGUgQlBGIHByb2dyYW1zIGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgc2FtZSB0cmFjZXBvaW50LCBrcHJvYmUsIG9yIHVwcm9iZS4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBjb25jdXJyZW5jeSBhbmQgdGhlIGltcGFjdCBvbiB0aGUgSklUIHByb2Nlc3MuIEkgYmV0IHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgaW4gdGhlcmUgYWJvdXQgcHJvZ3JhbSBvcmRlcmluZywgcmVzb3VyY2UgY29udGVudGlvbiwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIEkmIzM5O20gdHJ5aW5nIHRvIG9wdGltaXplLiBUaW1lIHRvIGRpdmUgaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODE5PXN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM5LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4NDA6aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4NDEte1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTI5LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM5MzA6aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc1OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgQ29uZnVzaW9uKioKCkhvbGQgb24gYSBzZWNvbmQuLi4gSSYjMzk7bSBqdXN0IHJldmlld2luZyB0aGUgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgZmlsZSBhbmQsIHdhaXQgYSBtaW51dGUsIGFyZSB0aGVyZSAqdHdvKiBkZWZpbml0aW9ucyBvZiBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpbiB0aGVyZT8gVGhpcyBpcyBkZWZpbml0ZWx5IHVudXN1YWwgYW5kIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgaXMgdGhlIGNhc2UuIElzIG9uZSBvZiB0aGVtIGEgcHJvdG90eXBlIGFuZCB0aGUgb3RoZXIgdGhlIGFjdHVhbCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbj8gT3IgYXJlIHRoZXkgYm90aCBpbXBsZW1lbnRhdGlvbnMsIHBlcmhhcHMgZm9yIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIG9yIGtlcm5lbCB2ZXJzaW9ucywgY29uZGl0aW9uYWwgb24gc29tZSBtYWNybz8gT3IgbWF5YmUgaXTigJlzIGEgY2FzZSBvZiBvbmUgYmVpbmcgYSBsZWdhY3kgZnVuY3Rpb24gYW5kIHRoZSBvdGhlciB0aGUgbmV3IHJlcGxhY2VtZW50PyBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgY2xhcmlmeSB0aGUgcHVycG9zZSBvZiBlYWNoIGRlZmluaXRpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVpciBwcmVzZW5jZS4gVGhpcyBjb3VsZCBpbmRpY2F0ZSBhIHN1YnRsZSBidWcgb3IsIHdvcnNlLCBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGlmIGEgY29uZnVzaW9uIGluIGZ1bmN0aW9uIGNhbGxzIGNhbiBiZSBleHBsb2l0ZWQuIEkgbXVzdCBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4MzA6XHRcbjM4MzE6XHRcdGZvciAoaW50IGkgPSAxOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4zODMyOlx0XHRcdGlmIChpZHNbaV0gPT0gaWRzW2kgLSAxXSkge1xuMzgzMzpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4zODM0Olx0XHRcdFx0YnJlYWs7XG4zODM1Olx0XHRcdH1cbjM4MzY6XHRcdH1cbjM4Mzc6XHRcdHJldHVybiBlcnI7XG4zODM4Olx0fVxuMzgzOTpcdFxuMzg0MDpcdGludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbjM4NDE6XHR7XG4zODQyOlx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XG4zODQzOlx0XHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XG4zODQ0Olx0XHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xuMzg0NTpcdFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XG4zODQ2Olx0XHR1NjQgX191c2VyICp1Y29va2llcztcbjM4NDc6XHRcdHU2NCAqY29va2llcyA9IE5VTEw7XG4zODQ4Olx0XHR1MzIgX191c2VyICp1aWRzO1xuMzg0OTpcdFx0aW50IGVycjtcbjM4NTA6XHRcbjM4NTE6XHRcdHVpZHMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmlkcyk7XG4zODUyOlx0XHRjbnQgPSBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuY250O1xuMzg1MzpcdFxuMzg1NDpcdFx0aWYgKCFjbnQgfHwgIXVpZHMpXG4zODU1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzg1NjpcdFx0aWYgKGNudCBcdTAwM2UgTUFYX1RSQUNJTkdfTVVMVElfQ05UKVxuMzg1NzpcdFx0XHRyZXR1cm4gLUUyQklHO1xuMzg1ODpcdFx0aWYgKGF0dHItXHUwMDNlbGlua19jcmVhdGUuZmxhZ3MgfHwgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50YXJnZXRfZmQpXG4zODU5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzg2MDpcdFxuMzg2MTpcdFx0aWRzID0ga3ZtYWxsb2Nfb2JqcygqaWRzLCBjbnQpO1xuMzg2MjpcdFx0aWYgKCFpZHMpXG4zODYzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzg2NDpcdFxuMzg2NTpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGlkcywgdWlkcywgY250ICogc2l6ZW9mKCppZHMpKSkge1xuMzg2NjpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMzg2NzpcdFx0XHRnb3RvIGVycm9yO1xuMzg2ODpcdFx0fVxuMzg2OTpcdFxuMzg3MDpcdFx0dWNvb2tpZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmNvb2tpZXMpO1xuMzg3MTpcdFx0aWYgKHVjb29raWVzKSB7XG4zODcyOlx0XHRcdGNvb2tpZXMgPSBrdm1hbGxvY19vYmpzKCpjb29raWVzLCBjbnQpO1xuMzg3MzpcdFx0XHRpZiAoIWNvb2tpZXMpIHtcbjM4NzQ6XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMzg3NTpcdFx0XHRcdGdvdG8gZXJyb3I7XG4zODc2Olx0XHRcdH1cbjM4Nzc6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGNvb2tpZXMsIHVjb29raWVzLCBjbnQgKiBzaXplb2YoKmNvb2tpZXMpKSkge1xuMzg3ODpcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4zODc5Olx0XHRcdFx0Z290byBlcnJvcjtcbjM4ODA6XHRcdFx0fVxuMzg4MTpcdFx0fVxuMzg4MjpcdFxuMzg4MzpcdFx0ZXJyID0gY2hlY2tfZHVwX2lkcyhpZHMsIGNvb2tpZXMsIGNudCk7XG4zODg0Olx0XHRpZiAoZXJyKVxuMzg4NTpcdFx0XHRnb3RvIGVycm9yO1xuMzg4NjpcdFxuMzg4NzpcdFx0aWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0ZTRVNTSU9OX01VTFRJKSB7XG4zODg4Olx0XHRcdGZleGl0cyA9IGt2bWFsbG9jX29ianMoKmZleGl0cywgY250KTtcbjM4ODk6XHRcdFx0aWYgKCFmZXhpdHMpIHtcbjM4OTA6XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMzg5MTpcdFx0XHRcdGdvdG8gZXJyb3I7XG4zODkyOlx0XHRcdH1cbjM4OTM6XHRcdH1cbjM4OTQ6XHRcbjM4OTU6XHRcdGxpbmsgPSBrdnphbGxvY19mbGV4KCpsaW5rLCBub2RlcywgY250KTtcbjM4OTY6XHRcdGlmICghbGluaykge1xuMzg5NzpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMzg5ODpcdFx0XHRnb3RvIGVycm9yO1xuMzg5OTpcdFx0fVxuMzkwMDpcdFxuMzkwMTpcdFx0YnBmX2xpbmtfaW5pdChcdTAwMjZsaW5rLVx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSxcbjM5MDI6XHRcdFx0ICAgICAgXHUwMDI2YnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKTtcbjM5MDM6XHRcbjM5MDQ6XHRcdGVyciA9IGJwZl9saW5rX3ByaW1lKFx1MDAyNmxpbmstXHUwMDNlbGluaywgXHUwMDI2bGlua19wcmltZXIpO1xuMzkwNTpcdFx0aWYgKGVycilcbjM5MDY6XHRcdFx0Z290byBlcnJvcjtcbjM5MDc6XHRcbjM5MDg6XHRcdGxpbmstXHUwMDNlbm9kZXNfY250ID0gY250O1xuMzkwOTpcdFx0bGluay1cdTAwM2Vjb29raWVzID0gY29va2llcztcbjM5MTA6XHRcdGxpbmstXHUwMDNlZmV4aXRzID0gZmV4aXRzO1xuMzkxMTpcdFxuMzkxMjpcdFx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHByb2csIGlkcywgbGluayk7XG4zOTEzOlx0XHRrdmZyZWUoaWRzKTtcbjM5MTQ6XHRcdGlmIChlcnIpIHtcbjM5MTU6XHRcdFx0YnBmX2xpbmtfY2xlYW51cChcdTAwMjZsaW5rX3ByaW1lcik7XG4zOTE2Olx0XHRcdHJldHVybiBlcnI7XG4zOTE3Olx0XHR9XG4zOTE4Olx0XHRyZXR1cm4gYnBmX2xpbmtfc2V0dGxlKFx1MDAyNmxpbmtfcHJpbWVyKTtcbjM5MTk6XHRcbjM5MjA6XHRlcnJvcjpcbjM5MjE6XHRcdGt2ZnJlZShmZXhpdHMpO1xuMzkyMjpcdFx0a3ZmcmVlKGNvb2tpZXMpO1xuMzkyMzpcdFx0a3ZmcmVlKGlkcyk7XG4zOTI0Olx0XHRrdmZyZWUobGluayk7XG4zOTI1Olx0XHRyZXR1cm4gZXJyO1xuMzkyNjpcdH1cbjM5Mjc6XHRcbjM5Mjg6XHQjZWxzZVxuMzkyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQzNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIGhlcmUgd2UgYXJlLCBzdGFyaW5nIGRvd24gdGhpcyBgI2Vsc2VgIGJsb2NrLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzIGRyaXZpbmcgaXQ/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3RhdGUgdGhhdCBsZWFkcyB0byB0aGlzIGJyYW5jaC4gVGhlIGNydWNpYWwgY29udGV4dCBoZXJlIGlzIHRoZSBwcmVjZWRpbmcgYCNpZmRlZmAgb3IgYCNpZm5kZWZgIGNvbnN0cnVjdC4gVGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIHRoZSBrZXkgaGVyZS4KCk15IG1pbmQgaW1tZWRpYXRlbHkgcmFjZXMgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zOiBXaGF0IHByZXByb2Nlc3NvciBzeW1ib2xzIGFyZSBkZWZpbmVkPyBBbmQsIGltcG9ydGFudGx5LCAqaG93KiBhcmUgdGhleSBkZWZpbmVkPyBJcyB0aGlzIGEgc2ltcGxlIGZsYWcsIGEgbWFjcm8gd2l0aCBhcmd1bWVudHMsIG9yIGEgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb24gc2V0dGluZz8gQXJlIHRoZXJlIG5lc3RlZCBjb25kaXRpb25hbHMgSSBuZWVkIHRvIHVudGFuZ2xlPyBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byB3aGVyZSB0aGUgYCNpZmRlZmAgb3IgYCNpZm5kZWZgIGlzIHVzZWQgYW5kIGNvbnNpZGVyIGFsbCB0aGUgZmlsZXMuCgpUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpY2FsIGZsb3cgb2YgdGhlIGNvZGUgYXQgY29tcGlsZSB0aW1lLiBJbiBvcmRlciB0byB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gcGF0aHdheSwgSSBoYXZlIHRvIGtub3cgdGhlIHN5bWJvbCBkZWZpbml0aW9uLiBUaGlzIGlzIHRoZSBseW5jaHBpbiwgdGhlIGNvbmRpdGlvbiB0aGF0IGRpY3RhdGVzIHdoZXRoZXIgdGhpcyBgI2Vsc2VgIGJsb2NrIGlzIGV2ZW4gaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGNvbXBpbGF0aW9uIHVuaXQuIFdoYXQgaXMgdGhlIHZhbHVlIG9mIHRoaXMgc3ltYm9sLCBpdHMgc2NvcGUsIGFuZCBob3cgaXQgaXMgYmVpbmcgZGVmaW5lZD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00Ny1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo0ODojaWZkZWYgQ09ORklHX01PRFVMRVNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00OS1zdHJ1Y3QgYnBmX3RyYWNlX21vZHVsZSB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE3Mz11bnNpZ25lZCBpbnQgdHJhY2VfY2FsbF9icGZfZmF1bHRhYmxlKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsLCB2b2lkICpjdHgpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4NC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxODU6I2lmZGVmIENPTkZJR19CUEZfS1BST0JFX09WRVJSSURFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTg2LUJQRl9DQUxMXzIoYnBmX292ZXJyaWRlX3JldHVybiwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdW5zaWduZWQgbG9uZywgcmMpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMwNj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfa2VybmVsX3N0cl9wcm90byA9IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMxNTojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE2LUJQRl9DQUxMXzMoYnBmX3Byb2JlX3JlYWRfY29tcGF0LCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05NjE9QlRGX1NFVF9TVEFSVChidGZfYWxsb3dsaXN0X2RfcGF0aClcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5NjI6I2lmZGVmIENPTkZJR19TRUNVUklUWVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2My1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05NjU9QlRGX0lEKGZ1bmMsIHNlY3VyaXR5X2ZpbGVfb3Blbilcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05NjYtI2VuZGlmXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTY3OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfUEFUSFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2OC1CVEZfSUQoZnVuYywgc2VjdXJpdHlfcGF0aF90cnVuY2F0ZSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTA3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2VudHJ5X2lwKHVuc2lnbmVkIGxvbmcgZmVudHJ5X2lwKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwNzYte1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwNzc6I2lmZGVmIENPTkZJR19YODZfS0VSTkVMX0lCVFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwNzgtXHRpZiAoaXNfZW5kYnIoKHZvaWQgKikoZmVudHJ5X2lwIC0gRU5EQlJfSU5TTl9TSVpFKSkpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEwODQ9QlBGX0NBTExfMShicGZfZ2V0X2Z1bmNfaXBfa3Byb2JlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDg4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwODk6I2lmZGVmIENPTkZJR19VUFJPQkVTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA5MC1cdHJ1bl9jdHggPSBjb250YWluZXJfb2YoY3VycmVudC1cdTAwM2VicGZfY3R4LCBzdHJ1Y3QgYnBmX3RyYWNlX3J1bl9jdHgsIHJ1bl9jdHgpO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMjc0PWJwZl90cmFjaW5nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEyODAtXHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG87XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTI4MTojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTI4Mi1cdGNhc2UgQlBGX0ZVTkNfcHJvYmVfcmVhZDpcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTM0Mz1rcHJvYmVfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMzUxLVx0XHRyZXR1cm4gcHJvZy1cdTAwM2VzbGVlcGFibGUgPyBcdTAwMjZicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA6IFx1MDAyNmJwZl9nZXRfc3RhY2tfcHJvdG87XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTM1MjojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMzUzLVx0Y2FzZSBCUEZfRlVOQ19vdmVycmlkZV9yZXR1cm46XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE3MjY9dHJhY2luZ19wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MzAtXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNzMxOiNpZmRlZiBDT05GSUdfTkVUXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTczMi1cdGNhc2UgQlBGX0ZVTkNfc2tiX291dHB1dDpcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTgyOD1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHJhd190cmFjZXBvaW50X3Byb2dfb3BzID0ge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4Mjk6I2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODMwLVx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjA5PWludCBicGZfZ2V0X3BlcmZfZXZlbnRfaW5mbyhjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHUzMiAqcHJvZ19pZCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI0My1cdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjI0NDojaWZkZWYgQ09ORklHX0tQUk9CRV9FVkVOVFNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ1LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IFRSQUNFX0VWRU5UX0ZMX0tQUk9CRSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI0OS0jZW5kaWZcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjUwOiNpZmRlZiBDT05GSUdfVVBST0JFX0VWRU5UU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNTEtXHRcdGlmIChmbGFncyBcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfVVBST0JFKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjczPXN1YnN5c19pbml0Y2FsbChzZW5kX3NpZ25hbF9pcnFfd29ya19pbml0KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNzU6I2lmZGVmIENPTkZJR19NT0RVTEVTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3Ni1zdGF0aWMgaW50IGJwZl9ldmVudF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBvcCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjMyOT1zdHJ1Y3QgYnBmX3Nlc3Npb25fcnVuX2N0eCB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjMzNTojaWZkZWYgQ09ORklHX0ZQUk9CRVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzYtc3RydWN0IGJwZl9rcHJvYmVfbXVsdGlfbGluayB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI0NDk9c3RhdGljIGludCBicGZfa3Byb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI0OTk6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUwMC1zdGF0aWMgdm9pZCBicGZfa3Byb2JlX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjUyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfa3Byb2JlX211bHRpX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUyOC1cdC5maWxsX2xpbmtfaW5mbyA9IGJwZl9rcHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyNTI5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI1MzAtXHQuc2hvd19mZGluZm8gPSBicGZfa3Byb2JlX211bHRpX3Nob3dfZmRpbmZvLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yOTQ0PXN0YXRpYyB1NjQgYnBmX2twcm9iZV9tdWx0aV9lbnRyeV9pcChzdHJ1Y3QgYnBmX3J1bl9jdHggKmN0eClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk0OS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyOTUwOiNpZmRlZiBDT05GSUdfVVBST0JFU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI5NTEtc3RydWN0IGJwZl91cHJvYmVfbXVsdGlfbGluaztcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzAwOD1zdGF0aWMgaW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzA3NTojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMDc2LXN0YXRpYyB2b2lkIGJwZl91cHJvYmVfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl91cHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTE5LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMxMjA6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzEyMS1cdC5zaG93X2ZkaW5mbyA9IGJwZl91cHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3MDM9c3RhdGljIGludCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc1Ni1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzU3OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTgtc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNzg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4Ny1cdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc4ODojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg5LVx0LnNob3dfZmRpbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzY5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIE11bHRpLUF0dGFjaCBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gcmV2aWV3aW5nIHRoZSBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBmaWxlLCBhbmQgSSYjMzk7bSBub3QgaW1tZWRpYXRlbHkgc3BvdHRpbmcgdGhlIGAjaWZkZWZgIGNvbmRpdGlvbmFsIHN1cnJvdW5kaW5nIHRoZSBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBmdW5jdGlvbi4gVGhhdCBzZWVtcy4uLiBvZGQuIEkgd2FzIGV4cGVjdGluZyBpdCB0byBiZSB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0IGlzbiYjMzk7dCwgb3Igd2hlcmUgaXQgbWlnaHQgaGF2ZSBiZWVuIHBsYWNlZC4gUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgYCNlbHNlYCBibG9jayBzdGFydGluZyBhcm91bmQgbGluZSAzOTI5LiBQZXJoYXBzIHRoZSBwcmVwcm9jZXNzb3IgbG9naWMgaXMgbW9yZSBjb21wbGV4IHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZCwgYW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBpbmNsdXNpb24gaXMgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCBtYW5uZXIsIG9yIHVuZGVyIGEgZGlmZmVyZW50IGNvbmRpdGlvbiB0aGF0IGlzIGRlZmluZWQgZWxzZXdoZXJlLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZSBtdWx0aS1hdHRhY2ggY2FwYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzkyMDpcdGVycm9yOlxuMzkyMTpcdFx0a3ZmcmVlKGZleGl0cyk7XG4zOTIyOlx0XHRrdmZyZWUoY29va2llcyk7XG4zOTIzOlx0XHRrdmZyZWUoaWRzKTtcbjM5MjQ6XHRcdGt2ZnJlZShsaW5rKTtcbjM5MjU6XHRcdHJldHVybiBlcnI7XG4zOTI2Olx0fVxuMzkyNzpcdFxuMzkyODpcdCNlbHNlXG4zOTI5Olx0XG4zOTMwOlx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuMzkzMTpcdHtcbjM5MzI6XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjM5MzM6XHR9XG4zOTM0Olx0XG4zOTM1Olx0I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyBcdTAwMjZcdTAwMjYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODU3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzOgoKKipEZWNvZGluZyB0aGlzIFByZXByb2Nlc3NvciBNYXplKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTICZhbXA7JmFtcDsgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnQsIG9yIG1heWJlIGl0JiMzOTtzIG5vdC4gV2FpdCBhIG1pbnV0ZS4uLiBubywgSSYjMzk7bSBiZWluZyBmb29sZWQgaGVyZS4gVGhhdCYjMzk7cyBhY3R1YWxseSBhbiBgI2Vsc2VgIGJsb2NrLiBUaGUgcmVhbCBrZXkgaXMgdW5kZXJzdGFuZGluZyB0aGUgYCNpZmAgc3RhdGVtZW50IHRoYXQgdGhpcyBgI2Vsc2VgIGlzIHRpZWQgdG8uIEkmIzM5O3ZlIGdvdCB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBicmFuY2ggYmVnaW5zLiBHb3R0YSBmaW5kIHdoZXJlIHRoYXQgaW5pdGlhbCBjb25kaXRpb25hbCBzdGF0ZW1lbnQgaXMgZGVmaW5lZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgYCNlbHNlYCBpcyBldmVuIGFjdGl2ZSBoZXJlLiBJIG5lZWQgdGhlIGNvbnRleHQgb2YgdGhhdCBgI2lmYCB0byBtYWtlIHNlbnNlIG9mIHdoYXQgdGhpcyBibG9jayBpcyBhY3R1YWxseSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNjgwPV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY4MS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjgyOiNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXHUwMDI2XHUwMDI2IFxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY4My0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM5MzA9aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTM0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM5MzU6I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyBcdTAwMjZcdTAwMjYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDU5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIEZUUkFDRSBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgdGhhdCB3ZSYjMzk7dmUgZ290IHRoZSBmb3VuZGF0aW9uYWwgRlRSQUNFIGNvbXBvbmVudHMgc2V0IHVwIGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nLCB5ZXMsIGJvdGggYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGFyZSBhYnNvbHV0ZWx5IGVzc2VudGlhbCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGV5IGFyZSBub24tbmVnb3RpYWJsZSBwcmVyZXF1aXNpdGVzLiBOb3csIGp1c3QgdG8gbWFrZSBkb3VibHkgc3VyZSwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBjaGVjayBvZiBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gSSB3YW50IHRvIHZlcmlmeSB0aGF0IHRoaXMgY3JpdGljYWwgb3B0aW9uIGlzIGVuYWJsZWQgYW5kIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4gb2YgdGhlIGRpcmVjdCBjYWxsIG9wdGltaXphdGlvbiwgc28gd2UgaGF2ZSB0byBlbnN1cmUgaXQmIzM5O3MgaW4gcGxhY2UgYmVmb3JlIHdlIGxvb2sgYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTMyND1jb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgyOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipVbmRlcnN0YW5kaW5nIHRoZSBLZXJuZWwmIzM5O3MgRHluYW1pYyBGdHJhY2UgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCBtZSBicmVhayBkb3duIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBgRFlOQU1JQ19GVFJBQ0VgIGNvbmZpZ3VyYXRpb24gYSBiaXQuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIGJ1dCBsaWtlIGFueSBnb29kIHN5c3RlbSwgdGhlcmUgYXJlIGRlcGVuZGVuY2llcyB0byBjb25zaWRlci4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgcmVsaWVzIGhlYXZpbHkgb24gYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGRpcmVjdCBjYWxscyBwcm9iYWJseSBuZWVkIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiBhbmQgdHJhY2tpbmcsIHdoaWNoIHRoZSAmIzM0O1dJVEhfUkVHUyYjMzQ7IHBhcnQgd291bGQgZmFjaWxpdGF0ZS4gSXQmIzM5O3MgYWxtb3N0IGxpa2UgYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AgbGF5cyB0aGUgZ3JvdW5kd29yayBhbmQgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBidWlsZHMgdXBvbiBpdCwgcHJvdmlkaW5nIHRoYXQgZmVhdHVyZS4KCk5vdywgdGhhdCBzYWlkIEkgbmVlZCB0byBjb25zaWRlciBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIHdoaWNoIEkgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgbXkgYXJjaGl0ZWN0dXJlIGV2ZW4gKnN1cHBvcnRzKiB0aGlzIGRpcmVjdCBjYWxsIG1ldGhvZC4gSXQmIzM5O3MgYWx3YXlzIGltcG9ydGFudCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLCBhcyBzb21lIGFyY2hpdGVjdHVyZXMgbWlnaHQgbm90IGhhdmUgdGhlIGNhcGFiaWxpdGllcyB0byBpbXBsZW1lbnQgdGhhdCBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjU6XHRcdGRlZl9ib29sIHlcbiAzMjY6XHRcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VcbiAzMjc6XHRcdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcbiAzMjg6XHRcbiAzMjk6XHRjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbiAzMzA6XHRcdGRlZl9ib29sIHlcbiAzMzE6XHRcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTIHx8IERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU1xuIDMzMjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG4gMzMzOlx0XG4gMzM0Olx0Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfQ0FMTF9PUFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzMTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkNvbmZpZ3VyYXRpb24gQ29udW5kcnVtcyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIHdlZWRzIHdpdGggZnRyYWNlIGFnYWluLiBSaWdodCwgd2UgYWJzb2x1dGVseSBuZWVkIGJvdGggYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYC4gQnV0IGhhbmcgb24gYSBzZWNvbmQuLi4gaXNuJiMzOTt0IGBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgaGVyZSBhbmQgdGhhdCBvdXIgcGxhdGZvcm0gaXMgYWN0dWFsbHkgY2FwYWJsZSBvZiB3aGF0IHdlJiMzOTtyZSBhaW1pbmcgZm9yLiBMZXQmIzM5O3MgZ28gdmVyaWZ5IHRoaXMgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgVHJhY2UgRmVhdHVyZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGlzLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHVzZSBgZ3JlcGAuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIElzIGl0IGluIGEgS2NvbmZpZyBmaWxlPyBNYXliZSBpdCYjMzk7cyBkZWZpbmVkIGluIG11bHRpcGxlIHBsYWNlcy4gVGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBga2VybmVsL3RyYWNlL0tjb25maWdgLCBidXQgSSB3YW50IHRvIGJlIGNvbXByZWhlbnNpdmUsIGp1c3QgaW4gY2FzZSB0aGlzIGlzIGEgbW9yZSBjb21wbGV4IHNpdHVhdGlvbi4gU28sIEkgbmVlZCB0byBjaGVjayBlaXRoZXIgdGhlcmUgb3IsIGlkZWFsbHksIHNlYXJjaCB0aGUgd2hvbGUga2VybmVsIHRyZWUgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLiBJJiMzOTtsbCBnZXQgdGhhdCBzZWFyY2ggZ29pbmcgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9NTA9Y29uZmlnIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjUzOmNvbmZpZyBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xua2VybmVsL3RyYWNlL0tjb25maWctNTQtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODcyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHByb3ZpZGVkIHRleHQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSB0aG91Z2h0IHByb2Nlc3MsIGFuZCBhc3N1bWluZyBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqQW5hbHl6aW5nIHRoZSBTZWxlY3Rpb24gUHJvY2VzcyoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbiBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKnByZWNpc2VseSogd2hhdCB0aGUgcHJvY2VzcyBpcyB0cnlpbmcgdG8gc2VsZWN0LiBJcyBpdCBhIHNwZWNpZmljIGVsZW1lbnQsIGEgZGF0YSBwb2ludCwgYW4gYWxnb3JpdGhtPyBXaGF0IGFyZSB0aGUgaW5oZXJlbnQgY2hhcmFjdGVyaXN0aWNzIG9mIHdoYXRldmVyJiMzOTtzIGJlaW5nIHNlbGVjdGVkPyBVbmRlcnN0YW5kaW5nIHRoZSAqaW5wdXRzKiBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIHRoaW5rIGFib3V0IHRoZSBzZWxlY3Rpb24gbWVjaGFuaXNtIGl0c2VsZi4gSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgY29uZGl0aW9uYWwgc3RhdGVtZW50LCBhIGNvbXBsZXggd2VpZ2h0aW5nIHN5c3RlbSwgb3Igc29tZXRoaW5nIG1vcmUgYWR2YW5jZWQgbGlrZSBhIG1hY2hpbmUgbGVhcm5pbmcgbW9kZWwgYXQgcGxheT8gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgcG9zc2liaWxpdGllcy4gTXkgZXhwZXJpZW5jZSBkaWN0YXRlcyB0aGF0IEkgbXVzdCBsb29rIGNsb3NlbHkgYXQgdGhlIGRhdGEuIEkmIzM5O3ZlIHNlZW4gaXQgYWxsLCBhbmQga25vdyB0byBjb25zaWRlciBhbGwgYW5nbGVzIGFuZCBwb3NzaWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0zMzctXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9NQ1x0XHRpZiBTTVBcbmFyY2gveDg2L0tjb25maWc6MzM4Olx0c2VsZWN0IEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTXHRpZiBYODZfNjQgXHUwMDI2XHUwMDI2IERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5hcmNoL3g4Ni9LY29uZmlnLTMzOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyMDkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIERpcmVjdCBDYWxsIEJQRiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBpbnRlZ3JhdGlvbiBhbmQgc2VlaW5nIHdoYXQmIzM5O3MgcmVxdWlyZWQgZm9yIHRoZSBkaXJlY3QgY2FsbCBmdW5jdGlvbmFsaXR5LiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBub3RpbmcgaXMgdGhhdCBpdCYjMzk7cyBnYXRlZCBieSBgWDg2XzY0ICZhbXA7JmFtcDsgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgbG9va2luZyBhdCB4ODZfNjQgYXJjaGl0ZWN0dXJlIHNwZWNpZmljYWxseS4gVGhhdOKAmXMgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBCUEZfRVZFTlRTYC4gVGhlbiwgb2YgY291cnNlLCB0aGVyZSYjMzk7cyBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCB3aGljaCBpbiB0dXJuIHJlbGllcyBvbiBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTYCBhbmQgYERZTkFNSUNfRlRSQUNFYC4gV2UgYWxzbyBuZWVkIGBLUFJPQkVfRVZFTlRTYCBhbmQgYFBFUkZfRVZFTlRTYC4KCkhvbGQgb24uLi50aGlua2luZyBhYm91dCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGEgYml0IG1vcmUsIGl0JiMzOTtzIGEgYGRlZl9ib29sIHlgIHdoZW4gYWxsIGl0cyBkZXBlbmRlbmNpZXMgYXJlIG1ldC4gU28sIHJlYWxseSwgaXQmIzM5O3MganVzdCBpbmRpY2F0aW5nIHRoYXQgdGhlIGZlYXR1cmUgaXMgYXZhaWxhYmxlLiBJbnN0ZWFkIG9mIGxpc3RpbmcgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYERZTkFNSUNfRlRSQUNFYCwgaXQgZmVlbHMgY2xlYW5lciB0byBqdXN0IGxpc3QgdGhlIGRpcmVjdCBjYWxsIG9uZS4gU28sIHRvIGJlIGNsZWFyLCB0aGUgcmVsZXZhbnQgY29uZmlncyBhcmUgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBgQlBGX0VWRU5UU2AsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGBLUFJPQkVfRVZFTlRTYCwgYW5kIGBQRVJGX0VWRU5UU2AuCgpGaW5hbGx5LCB0byB2ZXJpZnkgdGhpcywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvZGUuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgdG8gY29uZmlybSBpdCBpcyBndWFyZGVkIGJ5IGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfbXVsdGlfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1ODktXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTkwOnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTkxLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5Ny17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYxNS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MTY6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjE3LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjMyLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYzMzppbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM0LVx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3OS1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjgwOlx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODEtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcwNy1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcwODpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA5LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MTctXHRcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcxODpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcxOS1cdH1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzMzPXZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQzLVx0XHRkYXRhLVx1MDAzZWVudHJ5ID0gXHUwMDI2bW5vZGUtXHUwMDNlZW50cnk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzQ0Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDUtXHRcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXHUwMDI2bW5vZGUtXHUwMDNlbm9kZSwgbW5vZGUtXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzU1LVx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzU2Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzczCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgVHJhbXBvbGluZSBNdWx0aS1BdHRhY2ggQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZG9lcyB0aGlzIGxpdmU/JiMzNDsgSXQmIzM5O3MgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGF0IGZpbGUgY29tcGlsZWQgd2l0aCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYD8gTm8sIGEgcXVpY2sgY2hlY2sgc2hvd3MgaXQmIzM5O3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9KSVRgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byBub3RlLgoKTm93LCBJIHJlbWVtYmVyIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGlzIG9ubHkgY2FsbGVkIGJ5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBDcnVjaWFsbHksIHRoYXQgY2FsbCBpcyBndWFyZGVkIGJ5ICpib3RoKiBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AuIFNvLCB0aGF0IGRpY3RhdGVzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4KClRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIGNvbmZpZ3MgZm9yIHRoaXMgd2hvbGUgdGhpbmcgYXJlOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBCUEZfRVZFTlRTYCwgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgYW5kLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzZWxlY3RlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLCBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLiBJJiMzOTtsbCBrZWVwIGBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AgaW4gbWluZCwgZXNwZWNpYWxseSB3aXRoIHRoZSBwb3RlbnRpYWwgbmVlZHMgb2Ygc3l6a2FsbGVyIGNvbmZpZyBnZW5lcmF0aW9uIC0gdGhvdWdoLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZGlyZWN0bHkgdXNlIGBIQVZFXypgIGNvbmZpZ3MuIFNvIEkgY2FuIGVpdGhlciBsaXN0IGl0IG9yIGp1c3Qgc3RpY2sgd2l0aCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgYEZUUkFDRWAgYW5kIGBEWU5BTUlDX0ZUUkFDRWAgY29uZmlncy4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgc2NvcGUgb2YgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAuIElzIGl0IGV4cG9ydGVkIG9yIHN0YXRpYz8gSXQmIzM5O3Mgbm9uLXN0YXRpYywgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKRmluYWxseSwgSSBuZWVkIHRvIGtlZXAgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGZvY3VzOiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAsIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYC4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBpcyBhY3R1YWxseSBjYWxsZWQgZnJvbSBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYCwganVzdCB0byBjb21wbGV0ZSB0aGUgcGljdHVyZS4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGFyZWEgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNjgwPV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2ODQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzY4NTpzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2ODYte1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNzg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyA9IHtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg1Olx0LnJlbGVhc2UgPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2UsXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4Ni1cdC5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk0NQoJCQkJCQkJb3V0cHV0OiAyMDgKCQkJCQkJCXRob3VnaHRzOiAyNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFRyYW1wb2xpbmUgRml4KioKCk9rYXksIHNvIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2VgIGRvZXMgaW5kZWVkIGNhbGwgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAsIHdoaWNoIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGF0Y2guIFRoZSBtYWluIHRocnVzdCBpcyBmaXhpbmcgYSBVc2UtQWZ0ZXItRnJlZSB2dWxuZXJhYmlsaXR5IGx1cmtpbmcgd2l0aGluIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZWAuIEl0IHNlZW1zIHRoZSBidWcgc3VyZmFjZXMgd2hlbiBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWxseSBpbXBvcnRhbnQgZml4LCBkZWFsaW5nIHdpdGggYSBjb3JlIGNvbXBvbmVudCBvZiB0aGUgQlBGIHRyYW1wb2xpbmUgbWVjaGFuaXNtLiBHaXZlbiBpdHMgY3JpdGljYWxpdHksIGZ1enppbmcgaXMgYWJzb2x1dGVseSB3YXJyYW50ZWQuIE5vIHF1ZXN0aW9uIGFib3V0IGl0LgoKTGV0IG1lIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgZm9yIGZ1enppbmcgcHVycG9zZXMuIFdlIGFyZSBsb29raW5nIGF0IGEgYFdvcnRoRnV6emluZzogdHJ1ZWAgc2l0dWF0aW9uLiBUaGUgZnVuY3Rpb24gc3ltYm9scyB0byByZWFsbHkgdGFyZ2V0IGR1cmluZyBmdXp6aW5nIGFyZTogYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLCBhbmQgbmF0dXJhbGx5LCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYC4KCkZvciBjb25maWd1cmF0aW9uLCBJJiMzOTtsbCBuZWVkIHRoZXNlIGVuYWJsZWQ6IGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYEJQRl9FVkVOVFNgLCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCBhbmQgYERZTkFNSUNfRlRSQUNFYC4gTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGFueSBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBgQlBGX0VWRU5UU2AgYWxzbyBoaW5nZXMgb24gYEtQUk9CRV9FVkVOVFNgIG9yIGBVUFJPQkVfRVZFTlRTYCAqYW5kKiBgUEVSRl9FVkVOVFNgLiBJIG5lZWQgdG8gZW5zdXJlIHRob3NlIGFyZSBhbHNvIGVuYWJsZWQuIFRoZXJlZm9yZSwgSSB3aWxsIGluY2x1ZGUgYEtQUk9CRV9FVkVOVFNgIGFuZCBgUEVSRl9FVkVOVFNgIGluIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBUaGF0IHNob3VsZCBjb3ZlciBhbGwgdGhlIG5lY2Vzc2FyeSByZXF1aXJlbWVudHMgZm9yIGZ1enppbmcgdGhpcyB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDssCiAgICAmIzM0O0tQUk9CRV9FVkVOVFMmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoJiMzNDssCiAgICAmIzM0O2JwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIFVzZS1BZnRlci1GcmVlIGJ1ZyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgIGJ5IGNvcnJlY3RseSBpZGVudGlmeWluZyB3aGVuIHRoZSBvbGQgaW1hZ2UgaXMgc2FmZSB0byBmcmVlLiBJdCBhbHNvIGNoYW5nZXMgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAgdG8gcmV0dXJuIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgQlBGIHRyYW1wb2xpbmUgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHN5c2NhbGxzLCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtLUFJPQkVfRVZFTlRTJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2RldGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCBieSBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgd2hlbiB0aGUgb2xkIGltYWdlIGlzIHNhZmUgdG8gZnJlZS4gSXQgYWxzbyBjaGFuZ2VzIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIHRvIHJldHVybiB2b2lkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiB0cmFtcG9saW5lIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBzeXNjYWxscywgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgYnVnIGluIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZWAsIHdoZXJlIGBvbGRfaW1hZ2VgIGNvdWxkIGJlIGZyZWVkIHdoaWxlIHN0aWxsIGJlaW5nIHRoZSBhY3RpdmUgaW1hZ2UgKGBjdXJfaW1hZ2VgKSBpZiBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKClgIGZhaWxzLiBVQUYgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MTlmMzBlZWVjZjA5YzM0ZjA3ODhkNDYxNTgwYjlhMzk1ODA3ZmY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMDI6NTQ6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCA3M2JhY2ZjNjQ0NGRmLi4zMjU1YzZmNWVhNmI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTE1MTgsOCAmIzQzOzE1MTgsOCBAQCBpbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuYwogCiBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsCiAJCQkJc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspOwotaW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCi0JCQkJc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspOwomIzQzO3ZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywKJiM0MzsJCQkJIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTsKIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFncyk7CiAKIC8qCkBAIC0xNjM5LDEwICYjNDM7MTYzOSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLAogewogCXJldHVybiAtRU5PVFNVUFA7CiB9Ci1zdGF0aWMgaW5saW5lIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLAotCQkJCQkgICAgICBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaykKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywKJiM0MzsJCQkJCSAgICAgICBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaykKIHsKLQlyZXR1cm4gLUVOT1RTVVBQOwogfQogc3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpIHt9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKaW5kZXggZWQ3OTk5YWQ2YzY2Yy4uNTQ0YWI0MWEzYzI1NiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKQEAgLTE1OTUsNyAmIzQzOzE1OTUsMTggQEAgc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cikKIAogc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cikKIHsKLQlpZiAodHItJmd0O211bHRpX2F0dGFjaC5vbGRfaW1hZ2UpCiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgZnJlZSBvbGRfaW1hZ2UgaWYgaXQgaXMgbm8gbG9uZ2VyIHRoZSBhY3RpdmUgaW1hZ2UuCiYjNDM7CSAqIFdoZW4gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKCkgZmFpbHMgYmVmb3JlIG1vZGlmeV9mZW50cnlfbXVsdGkoKS8KJiM0MzsJICogdW5yZWdpc3Rlcl9mZW50cnlfbXVsdGkoKSBpcyBjYWxsZWQsIGN1cl9pbWFnZSBpcyB1bmNoYW5nZWQKJiM0MzsJICogKGN1cl9pbWFnZSA9PSBvbGRfaW1hZ2UpIGFuZCBmdHJhY2Ugc3RpbGwgcG9pbnRzIHRvIGl0LiBGcmVlaW5nCiYjNDM7CSAqIGl0IHdvdWxkIGNhdXNlIGEgVUFGIHdoZW4gZnRyYWNlIGNhbGxzIGludG8gdGhlIGZyZWVkIG1lbW9yeS4KJiM0MzsJICogT24gc3VjY2VzcywgY3VyX2ltYWdlIGlzIGVpdGhlciBhIG5ldyBpbWFnZSBvciBOVUxMLCBzbwomIzQzOwkgKiBvbGRfaW1hZ2UgIT0gY3VyX2ltYWdlIGNvcnJlY3RseSBpZGVudGlmaWVzIGEgc3RhbGUgaW1hZ2UgdGhhdAomIzQzOwkgKiBpcyBzYWZlIHRvIGZyZWUuCiYjNDM7CSAqLwomIzQzOwlpZiAodHItJmd0O211bHRpX2F0dGFjaC5vbGRfaW1hZ2UgJmFtcDsmYW1wOwomIzQzOwkgICAgdHItJmd0O211bHRpX2F0dGFjaC5vbGRfaW1hZ2UgIT0gdHItJmd0O2N1cl9pbWFnZSkKIAkJYnBmX3RyYW1wX2ltYWdlX3B1dCh0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSk7CiAKIAl0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSA9IE5VTEw7CkBAIC0xNzE5LDcgJiM0MzsxNzMwLDggQEAgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLAogCXJldHVybiBlcnI7CiB9CiAKLWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaykKJiM0Mzt2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiYjNDM7CQkJCSBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaykKIHsKIAlzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9ICZhbXA7bGluay0mZ3Q7ZGF0YTsKIAlzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGU7CkBAIC0xNzQ5LDcgJiM0MzsxNzYxLDYgQEAgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV8KIAkJYnBmX3RyYW1wb2xpbmVfcHV0KG1ub2RlLSZndDt0cmFtcG9saW5lKTsKIAogCWNsZWFyX3RyYWNpbmdfbXVsdGlfZGF0YShkYXRhKTsKLQlyZXR1cm4gMDsKIH0KIAogI3VuZGVmIGZvcl9lYWNoX21ub2RlX2NudApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCmluZGV4IDg5MTg5N2Y4YTFiMzUuLjI5MjYwOTUxYWE4NzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKQEAgLTM2ODcsNyAmIzQzOzM2ODcsNyBAQCBzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKQogCXN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICp0cl9saW5rID0KIAkJY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rLCBsaW5rKTsKIAotCVdBUk5fT05fT05DRShicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gobGluay0mZ3Q7cHJvZywgdHJfbGluaykpOwomIzQzOwlicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gobGluay0mZ3Q7cHJvZywgdHJfbGluayk7CiB9CiAKIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTMzCgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDM3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBUcmFtcG9saW5lIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBmaXgsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYSBVc2UtQWZ0ZXItRnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgQlBGIHRyYW1wb2xpbmUgbWVjaGFuaXNtLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gVGhlIG1haW4gY2hhbmdlIEkmIzM5O20gc2VlaW5nIGlzIGEgbW9kaWZpY2F0aW9uIG9mIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIHRvIHJldHVybiBgdm9pZGAgaW5zdGVhZCBvZiBgaW50YC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjbGVhbnVwLCBhcyB0aGUgZnVuY3Rpb24gd2FzIGFsd2F5cyByZXR1cm5pbmcgemVybyBhbnl3YXksIGEgbWlub3IgY29kZSBzdHlsZSBpbXByb3ZlbWVudCByZWFsbHkuCgpUaGUgY3JpdGljYWwgYml0LCBob3dldmVyLCBpcyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY3J1Y2lhbCBjaGVjayBiZWZvcmUgZnJlZWluZyBgb2xkX2ltYWdlYC4gTm93IGl0IG9ubHkgZnJlZXMgYG9sZF9pbWFnZWAgaWYgaXQgaXMgbm8gbG9uZ2VyIHRoZSBhY3RpdmUgaW1hZ2UgKGB0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAhPSB0ci0mZ3Q7Y3VyX2ltYWdlYCkuIFRoaXMgcHJldmVudHMgdGhlIFVBRiB3aGVuIGBicGZfdHJhbXBvbGluZV91cGRhdGUoKWAgZmFpbHMgYnV0IHRoZSBhc3NvY2lhdGVkIGNsZWFudXAgaXNuJiMzOTt0IGNhbGxlZCwgYXMgdGhlIGNvbW1lbnQgY2xlYXJseSBzdGF0ZXM6ICYjMzQ7RnJlZWluZyBpdCB3b3VsZCBjYXVzZSBhIFVBRiB3aGVuIGZ0cmFjZSBjYWxscyBpbnRvIHRoZSBmcmVlZCBtZW1vcnkuJiMzNDsgVGhhdCBmYWlsdXJlIGNhc2UgaXMgdGhlIGtleS4KClRoaXMgVUFGIHZ1bG5lcmFiaWxpdHkgaXMgd2hhdCBpdCBpcywgYW5kIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoaXMgdHlwZSBvZiBidWcuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGlzIGJlaW5nIGV4cG9zZWQgb3IgZml4ZWQgYnkgdGhpcywgc28gS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IGhlcmUuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGF0IGNvZGUgYWdhaW4sIGFuZCBpdCBjb25maXJtcyBteSBzdXNwaWNpb247CmBgYGMKLQlpZiAodHItJmd0O211bHRpX2F0dGFjaC5vbGRfaW1hZ2UpCiYjNDM7CWlmICh0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAmYW1wOyZhbXA7CiYjNDM7CSAgICB0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAhPSB0ci0mZ3Q7Y3VyX2ltYWdlKQogCQlicGZfdHJhbXBfaW1hZ2VfcHV0KHRyLSZndDttdWx0aV9hdHRhY2gub2xkX2ltYWdlKTsKYGBgClRoYXQgYG9sZF9pbWFnZSAhPSBjdXJfaW1hZ2VgIGNoZWNrIGlzIHRoZSBjb3JlIG9mIHRoaXMgZml4LiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCwgd2hlcmUgYG9sZF9pbWFnZWAgY291bGQgYmUgZnJlZWQgd2hpbGUgc3RpbGwgYmVpbmcgdGhlIGFjdGl2ZSBpbWFnZSAoYGN1cl9pbWFnZWApIGlmIGBicGZfdHJhbXBvbGluZV91cGRhdGUoKWAgZmFpbHMuIFVBRiBidWdzIGFyZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIFVzZS1BZnRlci1GcmVlIChVQUYpIGJ1ZyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgLCB3aGVyZSBgb2xkX2ltYWdlYCBjb3VsZCBiZSBmcmVlZCB3aGlsZSBzdGlsbCBiZWluZyB0aGUgYWN0aXZlIGltYWdlIChgY3VyX2ltYWdlYCkgaWYgYGJwZl90cmFtcG9saW5lX3VwZGF0ZSgpYCBmYWlscy4gVUFGIGJ1Z3MgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MDcuODY3MzQyNzg2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzNTQwMjQ1MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VcIixcbiAgICBcIktQUk9CRV9FVkVOVFNcIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hcIixcbiAgICBcImJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCwgd2hlcmUgYG9sZF9pbWFnZWAgY291bGQgYmUgZnJlZWQgd2hpbGUgc3RpbGwgYmVpbmcgdGhlIGFjdGl2ZSBpbWFnZSAoYGN1cl9pbWFnZWApIGlmIGBicGZfdHJhbXBvbGluZV91cGRhdGUoKWAgZmFpbHMuIFVBRiBidWdzIGFyZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCBieSBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgd2hlbiB0aGUgb2xkIGltYWdlIGlzIHNhZmUgdG8gZnJlZS4gSXQgYWxzbyBjaGFuZ2VzIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIHRvIHJldHVybiB2b2lkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiB0cmFtcG9saW5lIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBzeXNjYWxscywgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDowNy44NjczNTA2MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTgzOTMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxOWYzMGVlZWNmMDljMzRmMDc4OGQ0NjE1ODBiOWEzOTU4MDdmZjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDI6NTQ6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5pbmRleCA3M2JhY2ZjNjQ0NGRmLi4zMjU1YzZmNWVhNmI0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuQEAgLTE1MTgsOCArMTUxOCw4IEBAIGludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jXFxuIFxcbiBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcXG4taW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcXG4rdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspO1xcbiB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpO1xcbiBcXG4gLypcXG5AQCAtMTYzOSwxMCArMTYzOSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbiB7XFxuIFxcdHJldHVybiAtRU5PVFNVUFA7XFxuIH1cXG4tc3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuIHtcXG4tXFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4gfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFncykge31cXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG5pbmRleCBlZDc5OTlhZDZjNjZjLi41NDRhYjQxYTNjMjU2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXFxuKysrIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG5AQCAtMTU5NSw3ICsxNTk1LDE4IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxuIFxcbiBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbiB7XFxuLVxcdGlmICh0ci1cXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSlcXG4rXFx0LypcXG4rXFx0ICogT25seSBmcmVlIG9sZF9pbWFnZSBpZiBpdCBpcyBubyBsb25nZXIgdGhlIGFjdGl2ZSBpbWFnZS5cXG4rXFx0ICogV2hlbiBicGZfdHJhbXBvbGluZV91cGRhdGUoKSBmYWlscyBiZWZvcmUgbW9kaWZ5X2ZlbnRyeV9tdWx0aSgpL1xcbitcXHQgKiB1bnJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSgpIGlzIGNhbGxlZCwgY3VyX2ltYWdlIGlzIHVuY2hhbmdlZFxcbitcXHQgKiAoY3VyX2ltYWdlID09IG9sZF9pbWFnZSkgYW5kIGZ0cmFjZSBzdGlsbCBwb2ludHMgdG8gaXQuIEZyZWVpbmdcXG4rXFx0ICogaXQgd291bGQgY2F1c2UgYSBVQUYgd2hlbiBmdHJhY2UgY2FsbHMgaW50byB0aGUgZnJlZWQgbWVtb3J5LlxcbitcXHQgKiBPbiBzdWNjZXNzLCBjdXJfaW1hZ2UgaXMgZWl0aGVyIGEgbmV3IGltYWdlIG9yIE5VTEwsIHNvXFxuK1xcdCAqIG9sZF9pbWFnZSAhPSBjdXJfaW1hZ2UgY29ycmVjdGx5IGlkZW50aWZpZXMgYSBzdGFsZSBpbWFnZSB0aGF0XFxuK1xcdCAqIGlzIHNhZmUgdG8gZnJlZS5cXG4rXFx0ICovXFxuK1xcdGlmICh0ci1cXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdHItXFx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgIT0gdHItXFx1MDAzZWN1cl9pbWFnZSlcXG4gXFx0XFx0YnBmX3RyYW1wX2ltYWdlX3B1dCh0ci1cXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSk7XFxuIFxcbiBcXHR0ci1cXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSA9IE5VTEw7XFxuQEAgLTE3MTksNyArMTczMCw4IEBAIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4taW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbit2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9IFxcdTAwMjZsaW5rLVxcdTAwM2VkYXRhO1xcbiBcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGU7XFxuQEAgLTE3NDksNyArMTc2MSw2IEBAIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfXFxuIFxcdFxcdGJwZl90cmFtcG9saW5lX3B1dChtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxuIFxcbiBcXHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XFxuLVxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAjdW5kZWYgZm9yX2VhY2hfbW5vZGVfY250XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xcbmluZGV4IDg5MTg5N2Y4YTFiMzUuLjI5MjYwOTUxYWE4NzEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXFxuKysrIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXFxuQEAgLTM2ODcsNyArMzY4Nyw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuIFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICp0cl9saW5rID1cXG4gXFx0XFx0Y29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rLCBsaW5rKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRShicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gobGluay1cXHUwMDNlcHJvZywgdHJfbGluaykpO1xcbitcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gobGluay1cXHUwMDNlcHJvZywgdHJfbGluayk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU0OjA4LjM1MzkzNTMzNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMwNDkxNTYwMTY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFXCIsXG4gICAgXCJLUFJPQkVfRVZFTlRTXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaFwiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoXCIsXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIFVzZS1BZnRlci1GcmVlIGJ1ZyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgIGJ5IGNvcnJlY3RseSBpZGVudGlmeWluZyB3aGVuIHRoZSBvbGQgaW1hZ2UgaXMgc2FmZSB0byBmcmVlLiBJdCBhbHNvIGNoYW5nZXMgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAgdG8gcmV0dXJuIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgQlBGIHRyYW1wb2xpbmUgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHN5c2NhbGxzLCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxOWYzMGVlZWNmMDljMzRmMDc4OGQ0NjE1ODBiOWEzOTU4MDdmZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMjo1NDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCA3M2JhY2ZjNjQ0NGRmLi4zMjU1YzZmNWVhNmI0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTE1MTgsOCArMTUxOCw4IEBAIGludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jXG4gXG4gaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuIFx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspO1xuLWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLVx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspO1xuK3ZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbitcdFx0XHRcdCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7XG4gdm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzKTtcbiBcbiAvKlxuQEAgLTE2MzksMTAgKzE2MzksOSBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbiB7XG4gXHRyZXR1cm4gLUVOT1RTVVBQO1xuIH1cbi1zdGF0aWMgaW5saW5lIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbitzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbitcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuIHtcbi1cdHJldHVybiAtRU5PVFNVUFA7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzKSB7fVxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IGVkNzk5OWFkNmM2NmMuLjU0NGFiNDFhM2MyNTYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuKysrIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC0xNTk1LDcgKzE1OTUsMTggQEAgc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbiBcbiBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuIHtcbi1cdGlmICh0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlKVxuK1x0LypcbitcdCAqIE9ubHkgZnJlZSBvbGRfaW1hZ2UgaWYgaXQgaXMgbm8gbG9uZ2VyIHRoZSBhY3RpdmUgaW1hZ2UuXG4rXHQgKiBXaGVuIGJwZl90cmFtcG9saW5lX3VwZGF0ZSgpIGZhaWxzIGJlZm9yZSBtb2RpZnlfZmVudHJ5X211bHRpKCkvXG4rXHQgKiB1bnJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSgpIGlzIGNhbGxlZCwgY3VyX2ltYWdlIGlzIHVuY2hhbmdlZFxuK1x0ICogKGN1cl9pbWFnZSA9PSBvbGRfaW1hZ2UpIGFuZCBmdHJhY2Ugc3RpbGwgcG9pbnRzIHRvIGl0LiBGcmVlaW5nXG4rXHQgKiBpdCB3b3VsZCBjYXVzZSBhIFVBRiB3aGVuIGZ0cmFjZSBjYWxscyBpbnRvIHRoZSBmcmVlZCBtZW1vcnkuXG4rXHQgKiBPbiBzdWNjZXNzLCBjdXJfaW1hZ2UgaXMgZWl0aGVyIGEgbmV3IGltYWdlIG9yIE5VTEwsIHNvXG4rXHQgKiBvbGRfaW1hZ2UgIT0gY3VyX2ltYWdlIGNvcnJlY3RseSBpZGVudGlmaWVzIGEgc3RhbGUgaW1hZ2UgdGhhdFxuK1x0ICogaXMgc2FmZSB0byBmcmVlLlxuK1x0ICovXG4rXHRpZiAodHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSBcdTAwMjZcdTAwMjZcbitcdCAgICB0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlICE9IHRyLVx1MDAzZWN1cl9pbWFnZSlcbiBcdFx0YnBmX3RyYW1wX2ltYWdlX3B1dCh0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlKTtcbiBcbiBcdHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgPSBOVUxMO1xuQEAgLTE3MTksNyArMTczMCw4IEBAIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbit2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4rXHRcdFx0XHQgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4ge1xuIFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEgPSBcdTAwMjZsaW5rLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGU7XG5AQCAtMTc0OSw3ICsxNzYxLDYgQEAgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9cbiBcdFx0YnBmX3RyYW1wb2xpbmVfcHV0KG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xuIFxuIFx0Y2xlYXJfdHJhY2luZ19tdWx0aV9kYXRhKGRhdGEpO1xuLVx0cmV0dXJuIDA7XG4gfVxuIFxuICN1bmRlZiBmb3JfZWFjaF9tbm9kZV9jbnRcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbmluZGV4IDg5MTg5N2Y4YTFiMzUuLjI5MjYwOTUxYWE4NzEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbisrKyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuQEAgLTM2ODcsNyArMzY4Nyw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluayA9XG4gXHRcdGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluaywgbGluayk7XG4gXG4tXHRXQVJOX09OX09OQ0UoYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKGxpbmstXHUwMDNlcHJvZywgdHJfbGluaykpO1xuK1x0YnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKGxpbmstXHUwMDNlcHJvZywgdHJfbGluayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDowOC4zNTM5MzY4MjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzg3MzkyOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBUcmFtcG9saW5lIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgY2hhbmdpbmcgaXRzIHJldHVybiB0eXBlIHRvIGB2b2lkYCBpbnN0ZWFkIG9mIGBpbnRgLiAgVGhhdCdzIGEgYml0IHVudXN1YWwsIGFuZCBJJ2QgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIGl0IHRvIGJlIGNvbmZpZGVudCBpbiB0aGUgY2hhbmdlIOKAkyBhcmUgdGhleSB1c2luZyB0aGUgcmV0dXJuIHZhbHVlIHNvbWV3aGVyZSBpbXBvcnRhbnQ/ICBJdCdzIGFsc28gZml4aW5nIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgaXNzdWUgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCBieSBhZGRpbmcgYSBjaGVjayBmb3IgYHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgIT0gdHItXHUwMDNlY3VyX2ltYWdlYC4gIFRoYXQgc291bmRzIGNyaXRpY2FsOyBVQUZzIGFyZSBuYXN0eSBhbmQgdGhpcyBsaWtlbHkgYWRkcmVzc2VzIGEgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0eS5cblxuVGhlIGNoYW5nZXMgYXJlIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiAgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhlc2UgZmlsZXMgdG8gZW5zdXJlIHRoZSBwYXRjaCBhcHBsaWVzIGNvcnJlY3RseSB0byB0aGUgdGFyZ2V0ZWQgZW52aXJvbm1lbnRzLiBTcGVjaWZpY2FsbHksIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgcmVsaWVzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9KSVRgLiBMZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGlzIHByb3Blcmx5IGd1YXJkZWQgYnkgdGhlIHJlbGV2YW50IGJ1aWxkIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjaGFuZ2UgYWZmZWN0cyBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIG5lY2Vzc2FyeSBCUEYgZmVhdHVyZXMgYXJlbid0IGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDoxNS43NDEzMzI0ODRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ2NDcxMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhbXBvbGluZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRpc2FzbS5vIG1wcm9nLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MTUuODI1OTg1NjM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NjQ0NDc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgSklUIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXQgc2VlbXMgdGhhdCBgQ09ORklHX0JQRl9KSVRgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBoZXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSB3b3VsZG4ndCBleHBlY3QgQlBGIGZ1bmN0aW9uYWxpdHkgdG8gd29yayB3aXRob3V0IHRoZSBKSVQgY29tcGlsZXIgZW5hYmxlZC4gSXQncyB0aGUgY29yZSBvZiB0cmFuc2xhdGluZyB0aG9zZSBieXRlY29kZSBpbnN0cnVjdGlvbnMgaW50byBuYXRpdmUgbWFjaGluZSBjb2RlIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlLlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHRvIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJJ20gY3VyaW91cyBob3cgdGhpcyBwbGF5cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSBpcyBkZXBlbmRlbnQgb24gdGhlIEpJVCwgb3IgaWYgaXQgY2FuIHVzZSBzb21lIGFsdGVybmF0aXZlIEJQRiBpbnRlcnByZXRlci4gRG9lcyB0aGUgdHJhY2luZyB1c2Ugb2YgQlBGIGRlbWFuZCB0aGUgSklUPyBLbm93aW5nIHRoZSBhbnN3ZXIgaXMga2V5IHRvIGJ1aWxkaW5nIGFuIG92ZXJhbGwgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDoxOS41MDI0MzI5OTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNzQzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSArPSB0cmFjZV9ldmVudHNfdXNlci5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgKz0gYnBmX3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSArPSB0cmFjZV9rcHJvYmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDoxOS41NTA4MTM3ODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDIxMDcxMjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkFuYWx5c2lzIG9mIGVCUEYgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBzbyBgQ09ORklHX0JQRl9FVkVOVFNgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgaGVyZS4gV2UgbmVlZCB0aGF0IGVuYWJsZWQgdG8gZXZlbiBiZSBpbiB0aGUgYmFsbHBhcmsuIE5vdywgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgYW5hbHl6ZSB0aGUgaW1wYWN0ZWQgZnVuY3Rpb25zLiBMb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCwgYW5kIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2VgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgY29tcG9uZW50cyBpbiB0aGUgZUJQRiB0cmFjaW5nL3RyYW1wb2xpbmUgbGlmZWN5Y2xlLCBjbGVhcmx5LlxuXG5JbnRlcmVzdGluZy4uLiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgIGlzIG9uIHRoZSBsaXN0LiBJJ20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCB0aGUgY2FsbCBncmFwaCBmb3IgdGhhdCBvbmUuIERvZXMgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgY2FsbCBpdCBhbmQgaXMgaXQgYWxzbyBiZWluZyBjYWxsZWQgYnkgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGA/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoZSB1c2FnZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgZnJlZWluZyBvcGVyYXRpb24gaXMgY29vcmRpbmF0ZWQgd2l0aGluIHRoZSBhdHRhY2htZW50IGFuZCBkZXRhY2htZW50IHByb2Nlc3Nlcy4gVGhlIGNhbGwgY2hhaW4gaXMgdmVyeSBpbXBvcnRhbnQuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGludGVyYWN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNDAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MjQuOTcxODg3NDU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA3MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1OTA9c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYzMz1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA3LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MDg6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MDktXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzMzPXZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTUtXFx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc1NjpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc1Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MjUuMDIxMDk5NzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzYwNjIzODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFRyYW1wb2xpbmUgTXVsdGktQXR0YWNoL0RldGFjaCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBCUEYgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUgaXMgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYC4gVGhhdCdzIHdoZXJlIHRoZSBjbGVhbnVwIGhhcHBlbnMsIGFuZCBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLCB3aGljaCBpcyBhIGtleSBvYnNlcnZhdGlvbi5cblxuTXkgaW1tZWRpYXRlIGZvY3VzLCB0aGVuLCBuZWVkcyB0byBiZSBvbiB0aGVzZSB0aHJlZSBmdW5jdGlvbnM6IGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgYW5kIGFsc28gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5Ob3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGNhbiBhY3R1YWxseSBiZSB0cmlnZ2VyZWQgZnJvbSBhIHVzZXItc3BhY2Ugc3lzY2FsbC4gVGhpbmtpbmcgYWJvdXQgdGhlIHVzdWFsIGVudHJ5IHBvaW50cywgaXQncyBoaWdobHkgcHJvYmFibGUuIEknbGwgbmVlZCB0byBjb25maXJtLCBidXQgSSBzdXNwZWN0IGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYGJwZl9saW5rX2NyZWF0ZWAgb3IgYSBzaW1pbGFyIEFQSS4gSWYgc28sIHRoYXQgb3BlbnMgdXAgYWxsIHNvcnRzIG9mIHBvdGVudGlhbCBzZWN1cml0eSBjb25jZXJucywgd2hpY2ggSSBuZWVkIHRvIGFuYWx5emUgY2FyZWZ1bGx5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgaXRzZWxmIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCdzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4OTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MjkuNzgxNzI2MDc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg2NjMwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTU4ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1ODktXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5MDpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTEte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5NS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTk2OnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5Ny17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjE1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MTY6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYxNy17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjMyLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MzM6aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzQtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc5LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4MDpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4MS1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MDctXFx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcwODpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcwOS1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MTctXFx0XFx0YnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2cobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsIFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcxODpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfcm9sbGJhY2sobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MTktXFx0fVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTczMz12b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQzLVxcdFxcdGRhdGEtXFx1MDAzZWVudHJ5ID0gXFx1MDAyNm1ub2RlLVxcdTAwM2VlbnRyeTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzQ0OlxcdFxcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQ1LVxcdFxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTUtXFx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc1NjpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc1Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MjkuODMwNjIxMzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEwOTQyNjQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipJbnZlc3RpZ2F0aW5nIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIENhbGxzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLiBJdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24sIG5vIGRvdWJ0LCBidXQgdG8gcmVhbGx5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LCBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcXVpY2tseSBpZGVudGlmeWluZyAqd2hlcmUqIGl0J3MgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGRlc2lnbiBkZWNpc2lvbnMgc3Vycm91bmRpbmcgdGhpcyBmdW5jdGlvbi4gTGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSByZWxhdGlvbnNoaXBzIGhlcmUuIEtub3dpbmcgdGhlIHVwc3RyZWFtIGZ1bmN0aW9ucyBhbmQgbW9kdWxlcyB0aGF0IHVzZSB0aGlzIGhlbHBzIG1lIGRldGVybWluZSB0aGUgdXNlLWNhc2VzIGFuZCBwb3RlbnRpYWwgaW1wYWN0IHRvIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDozNS45NDAwNTAyMjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDg3MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODQwPWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTExLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTEyOlxcdGVyciA9IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChwcm9nLCBpZHMsIGxpbmspO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTEzLVxcdGt2ZnJlZShpZHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDozNS45OTI1NDEzMTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5ODIyNDAwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBDYWxsIENoYWluKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSBkb3duIGhvdyBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBnZXRzIGludm9rZWQuIFRoZSBjb250ZXh0IGlzIHRoYXQgSSBzdXNwZWN0IGBicGZfbGlua19jcmVhdGVgIG1pZ2h0IGJlIHJlc3BvbnNpYmxlLiBMZXQgbWUgcHVsbCB1cCB0aGUgcmVsZXZhbnQgY29kZSBhbmQgdmVyaWZ5IHRoYXQgaHlwb3RoZXNpcy4gVGhlIGZ1bmN0aW9uIG5hbWUgaW1wbGllcyBzb21lIHNvcnQgb2YgbXVsdGlwbGUgYXR0YWNobWVudCwgYW5kIGBicGZfbGlua19jcmVhdGVgIGlzIGNlcnRhaW5seSB0aGUgcGxhY2Ugd2hlcmUgYSBuZXcgZUJQRiBsaW5rIOKAkyB3aGljaCwgaW4gc29tZSBjYXNlcywgaW52b2x2ZXMgdHJhY2luZyDigJMgaXMgZXN0YWJsaXNoZWQsIHNvIHRoYXQgd291bGQgbWFrZSBzZW5zZSBhcyB0aGUgcm9vdCBjYXVzZS4gSSB3aWxsIGNyb3NzLXJlZmVyZW5jZSB0aGUgY2FsbHMgYW5kIHNlZSBpZiBpdCBzZWVtcyBkaXJlY3RseSBpbnZvbHZlZCwgb3IgaWYgc29tZSBpbnRlcm1lZGlhcnkgaXMgbWFraW5nIHRoZSBjYWxsLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTIzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MzkuNTkwNzY4MzY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODExNzUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9NTc4ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MzQtXFx0XFx0ZWxzZSBpZiAoaXNfdHJhY2luZ19tdWx0aShwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTgzNTpcXHRcXHRcXHRyZXQgPSBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2gocHJvZywgYXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTgzNi1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU0OjM5LjYzODg5MjE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MjQzNDczMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEVudHJ5IFBvaW50IENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUuIEkgY2FuIHNlZSB0aGF0IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGluZGVlZCBjYWxsZWQgZnJvbSBgbGlua19jcmVhdGVgIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGVyZWZvcmUsIG15IHByaW1hcnkgZW50cnkgcG9pbnRzIG9mIGludGVyZXN0IGFyZSBjbGVhcmx5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMuXG5cbk5vdywgY29uY2VybmluZyBjb25maWd1cmF0aW9ucywgSSdtIGRlYWxpbmcgd2l0aCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgQlBGX0VWRU5UU2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGBCUEZfRVZFTlRTYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gSXQncyBhIGtleSBjb25maWd1cmF0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYW55IGRlZXBlciB3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0IHJlbGllcyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg5MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDo0NS4xNjMyNDE5NzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mzg3MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfRVZFTlRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU0OjQ1LjIxMTYzNTAyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzY4MzI5OTM4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBCUEYgRXZlbnRzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQlBGX0VWRU5UU2AgaXMgZGVmaW5pdGVseSB0aWVkIHRvIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQgbXVjaCBpcyBjbGVhci4gTm93LCBsZXQncyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgaXQgKnJlcXVpcmUqIGBGVFJBQ0VgPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIGBCUEZfRVZFTlRTYCBvZnRlbiBsZWFucyBvbiBlaXRoZXIgYEZUUkFDRWAgb3IgYEtQUk9CRV9FVkVOVFNgLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYmUgcHJlY2lzZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlcGVuZGVuY2llcyBoZXJlLiBUaGUgYmVzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHB1bGwgdXAgdGhlIGZ1bGwgZGVmaW5pdGlvbiBvZiBgQlBGX0VWRU5UU2AgYW5kIHNlZSBwcmVjaXNlbHkgd2hhdCBpdCBzYXlzLiBObyBhc3N1bXB0aW9ucywganVzdCB0aGUgZGVmaW5pdGl2ZSB0cnV0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI4NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjAyLjA0NDYzMjI3OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0XFx0ICBjb252ZXJ0IHRoZSB0eXBlIG9mIGFuIGV2ZW50IGZpZWxkLiBGb3IgZXhhbXBsZSwgdHVybiBhblxcbiA4NTE6XFx0XFx0ICBhZGRyZXNzIGludG8gYSBzdHJpbmcuXFxuIDg1MjpcXHRcXG4gODUzOlxcdGNvbmZpZyBCUEZfRVZFTlRTXFxuIDg1NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDg1NTpcXHRcXHRkZXBlbmRzIG9uIChLUFJPQkVfRVZFTlRTIHx8IFVQUk9CRV9FVkVOVFMpIFxcdTAwMjZcXHUwMDI2IFBFUkZfRVZFTlRTXFxuIDg1NjpcXHRcXHRib29sXFxuIDg1NzpcXHRcXHRkZWZhdWx0IHlcXG4gODU4OlxcdFxcdGhlbHBcXG4gODU5OlxcdFxcdCAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gYXR0YWNoIEJQRiBwcm9ncmFtcyB0byBrcHJvYmUsIHVwcm9iZSwgYW5kXFxuIDg2MDpcXHRcXHQgIHRyYWNlcG9pbnQgZXZlbnRzLlxcbiA4NjE6XFx0XFxuIDg2MjpcXHRjb25maWcgRFlOQU1JQ19FVkVOVFNcXG4gODYzOlxcdFxcdGRlZl9ib29sIG5cXG4gODY0OlxcdFxcbiA4NjU6XFx0Y29uZmlnIFBST0JFX0VWRU5UU1xcbiA4NjY6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4Njc6XFx0XFxuIDg2ODpcXHRjb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxcbiA4Njk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBwcm9ncmFtcyB0byBvdmVycmlkZSBhIGtwcm9iZWQgZnVuY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjAyLjA0NDczMzAxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjY0MzkzNTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBzZXQgdXAgbXkgQlBGIGVudmlyb25tZW50LiBJdCBzZWVtcyBsaWtlIHRoZSBgQlBGX0VWRU5UU2AgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gaGF2aW5nIGBLUFJPQkVfRVZFTlRTYCBvciBgVVBST0JFX0VWRU5UU2AsIGFuZCBhbHNvIGBQRVJGX0VWRU5UU2AgZW5hYmxlZC4gVGhlcmVmb3JlLCB0byBlbnN1cmUgZXZlcnl0aGluZydzIHByb3Blcmx5IGVuYWJsZWQsIG15IGltbWVkaWF0ZSBzdHJhdGVneSBpcyB0byBlbmFibGUgYEtQUk9CRV9FVkVOVFNgLCBgUEVSRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9KSVRgLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgbmVjZXNzYXJ5IGJhc2VzLiBOb3csIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEtQUk9CRV9FVkVOVFNgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGFkZHJlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjA3LjMwOTEyOTI3NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAzNjQ3NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLUFJPQkVfRVZFTlRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTc3MD1jb25maWcgUFJPQkVfRVZFTlRTX0JURl9BUkdTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03ODEtXFxua2VybmVsL3RyYWNlL0tjb25maWc6NzgyOmNvbmZpZyBLUFJPQkVfRVZFTlRTXFxua2VybmVsL3RyYWNlL0tjb25maWctNzgzLVxcdGRlcGVuZHMgb24gS1BST0JFU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODAwLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjgwMTpjb25maWcgS1BST0JFX0VWRU5UU19PTl9OT1RSQUNFXFxua2VybmVsL3RyYWNlL0tjb25maWctODAyLVxcdGJvb2wgXFxcIkRvIE5PVCBwcm90ZWN0IG5vdHJhY2UgZnVuY3Rpb24gZnJvbSBrcHJvYmUgZXZlbnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NzowNy43MTI3ODM2NjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyNDIwODEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBKSVQgQ29tcGlsYXRpb246IEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYEtQUk9CRV9FVkVOVFNgLiBJdCdzIHByZXR0eSBmdW5kYW1lbnRhbCBrbm93bGVkZ2UgdGhhdCB0aGlzIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBLUFJPQkVTYCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gaGVyZSwgZXNwZWNpYWxseSBpZiBzb21ldGhpbmcgaXMgYmVpbmcgdXBkYXRlZCBpbiBteSBjb2RlIG9yIGNvbmZpZ3VyYXRpb24uIFNpbmNlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGtwcm9iZXMgaW5mcmFzdHJ1Y3R1cmUsIEkgY2FuIGVhc2lseSByZWNhbGwgdGhpcyBwb2ludC5cblxuTm93LCBhIHJlbGF0ZWQgYXJlYSB0aGF0IGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QgaXMgdGhlIHBlcmZvcm1hbmNlIGFzcGVjdCwgYW5kIHNwZWNpZmljYWxseSB0aGUgaW1wbGljYXRpb25zIG9mIEpJVCBjb21waWxhdGlvbiwgb3IgYEJQRl9KSVRgLCBpbiB0aGlzIGNvbnRleHQuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlJ3MgYW55IHJlbGF0aW9uIGJldHdlZW4gdGhlIGtwcm9iZSBldmVudHMgYW5kIHRoZSBKSVQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1pbmQgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uIGFuZCB1c2FnZSBvZiB0aGUgQlBGIEpJVC4gVGltZSB0byBjcm9zcy1jaGVjayB0aGUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBgQlBGX0pJVGAuIFRoZXJlIGNvdWxkIGJlIHNvbWUgc3VidGxlIGludGVyYWN0aW9ucyBJIHNob3VsZCBjb25zaWRlciwgbGlrZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBLUFJPQkVfRVZFTlRTYCBhbmQgYEJQRl9KSVRgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjE1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6MTEuNjM2OTk1MTE2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMwNTU1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6MTEuNjgyMzA4MzExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODU2NTM5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkJQRiBKSVQgRGVwZW5kZW5jeSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBCUEZfSklUYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCBzZWVtcyB0byByZWx5IG9uIGVpdGhlciBgSEFWRV9DQlBGX0pJVGAgb3IgYEhBVkVfRUJQRl9KSVRgLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgcG90ZW50aWFsIGFyY2hpdGVjdHVyZXMgaW52b2x2ZWQsICphbmQqIGFsc28gcmVxdWlyZXMgYE1PRFVMRVNgLiBHb3QgaXQuIEp1c3QgZG91YmxlLWNoZWNraW5nIHRvIGNvbmZpcm0gdGhhdCB1bmRlcnN0YW5kaW5nLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEl0J3MgYWx3YXlzIHNtYXJ0IHRvIGNvbmZpcm0gYXNzdW1wdGlvbnMsIGV2ZW4gd2hlbiB0aGV5IHNlZW0gb2J2aW91cy4gSXQncyB0b28gZWFzeSB0byBtYWtlIGEgc21hbGwgZXJyb3IgYW5kIHRoZW4gc3BlbmQgYSB3aGlsZSBkZWJ1Z2dpbmcgaXQgbGF0ZXIuIExldCdzIHNlZSBpZiB0aGVyZSdzIGFueSBzdWJ0bGV0eSBJJ3ZlIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjE2LjI2Nzk2NDQ2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTA6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1MTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTQ6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU1OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNTY6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjE2LjI2ODAyNTUzOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDk4MjM1MTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgVGhpbmtpbmcgb24gQlBGIEpJVCBEZXBlbmRlbmNpZXMgYW5kIFRyYW1wb2xpbmVzKipcblxuUmlnaHQsIHNvIGBCUEZfSklUYCBoaW5nZXMgb24gYEJQRmAgaXRzZWxmLCBuYXR1cmFsbHkuIEFuZCBpdCdzIGFsc28gY29uZGl0aW9uYWwgb24gZWl0aGVyIGBIQVZFX0NCUEZfSklUYCBvciBgSEFWRV9FQlBGX0pJVGAgYmVpbmcgZGVmaW5lZC4gVGhhdCBtYWtlcyBzZW5zZTsgd2UgbmVlZCAqc29tZSoga2luZCBvZiBKSVQgY2FwYWJpbGl0eSB0byBlbmFibGUgdGhlIGJyb2FkZXIgSklUIGZlYXR1cmUuXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLiBUaGlzIGhhcyBtZSB3b25kZXJpbmcgaWYgYEZQUk9CRWAgb3IgYEZUUkFDRWAgYXJlIGFsc28gcHJlcmVxdWlzaXRlcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb25uZWN0aW9ucyBoZXJlLCBzbyBsZXQncyBjaGVjayBpdHMgc291cmNlIGxvY2F0aW9uLi4uIGFoLCBpdCdzIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIEdvb2QsIHRoYXQgbmFycm93cyB0aGUgc2NvcGUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpczogQXJlIHRoZXJlICphbnkqIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMsIGJleW9uZCB0aGUgb2J2aW91cz8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgY29uZGl0aW9uYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjIxLjc2NjI2MzgxMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzNzA2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTg5LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1OTA6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTkxLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYxNS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjE2OnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9yb2xsYmFjayhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MTcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzMi1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjMzOmludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM0LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3OS1cXHRmb3JfZWFjaF9tbm9kZShtbm9kZSwgbGluaykge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODA6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODEtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA3LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MDg6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MDktXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzE3LVxcdFxcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lLCBcXHUwMDI2bW5vZGUtXFx1MDAzZW5vZGUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MTg6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzE5LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MzM9dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0My1cXHRcXHRkYXRhLVxcdTAwM2VlbnRyeSA9IFxcdTAwMjZtbm9kZS1cXHUwMDNlZW50cnk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc0NDpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0NS1cXHRcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSwgbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzU1LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NTY6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjIxLjgxNjY0NDQ1N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDk1NTg2NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgQ29tcGlsYXRpb24gUHJvY2VzcyBmb3IgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAqKlxuXG5SaWdodCwgc28gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAuLi4gSSdtIHByZXR0eSBzdXJlIHRoYXQgZnVuY3Rpb24gZ2V0cyBjb21waWxlZCB3aGVuIGB0cmFtcG9saW5lLmNgIGdldHMgY29tcGlsZWQuIFRoYXQgbXVjaCBpcyBzdHJhaWdodGZvcndhcmQuIEJ1dCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhlcmUgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIGxpa2UgYW4gYCNpZmRlZmAsIGNvbnRyb2xsaW5nIGl0cyBjb21waWxhdGlvbj8gSXMgaXQgY29uZGl0aW9uYWxseSBpbmNsdWRlZCBiYXNlZCBvbiBzb21lIGZlYXR1cmUgZmxhZyBvciBjb25maWd1cmF0aW9uIG9wdGlvbj8gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBhdmFpbGFiaWxpdHkgYW5kIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIGNvbXBvbmVudHMuIEdvdHRhIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZ3VhcmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUxOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjI1LjkxMjIzNDUwM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NDY2NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0xNTE3PWludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTE4LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MTUxOTppbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTIwLVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MTYzMz1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaGFzX3RyYW1wb2xpbmUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjM2LX1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE2Mzc6c3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjM4LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NzoyNS45NTk3ODg0MzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzNzIwODMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBCUEYgSGVhZGVyJ3MgR3VhcmRzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2l0aGluIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hpY2ggYCNpZmRlZmAgZGlyZWN0aXZlcywgb3Igc2ltaWxhciBjb25zdHJ1Y3RzIGxpa2UgYCNpZiBkZWZpbmVkKClgLCBhcmUgdXNlZCB0byBndWFyZCB0aGUgY29yZSBkZWNsYXJhdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gSSB3YW50IHRvIHNlZSB3aGljaCBmZWF0dXJlcyBvciBrZXJuZWwgdmVyc2lvbnMsIG9yIHBlcmhhcHMgZXZlbiBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzLCB0cmlnZ2VyIG9yIGRpc2FibGUgY2VydGFpbiBCUEYgZnVuY3Rpb25hbGl0aWVzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGV2b2x1dGlvbiBvZiB0aGUgQlBGIEFQSSBhbmQgaG93IGl0J3MgaGFuZGxlZCBhY3Jvc3MgdmFyaW91cyBjb25maWd1cmF0aW9ucy4gS25vd2luZyB0aGVzZSBndWFyZHMgaXMgY3J1Y2lhbCBmb3IgY29tcGF0aWJpbGl0eSBhbmFseXNpcyBhbmQgdW5kZXJzdGFuZGluZyB3aGljaCBCUEYgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSwgd2hpY2ggYXJlIGRlcHJlY2F0ZWQgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBrZXJuZWwgdmVyc2lvbnMuIEknbGwgZm9jdXMgb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZ3VhcmRzIHJlbGF0aW5nIHRvIGtlcm5lbCB2ZXJzaW9ucywgc3BlY2lmaWMgaGFyZHdhcmUgKGxpa2UgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgc3BlY2lhbGl6ZWQgaW5zdHJ1Y3Rpb25zKSwgb3IgcG9zc2libHkgZXZlbiBvcHRpb25hbCBCUEYgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTg4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6MzAuNTk2OTk5OTg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MDA6XFx0XFx0XFx0cmV0dXJuIC1FMkJJRztcXG4xNTAxOlxcdFxcbjE1MDI6XFx0XFx0cmV0dXJuIDA7XFxuMTUwMzpcXHR9XFxuMTUwNDpcXHRcXG4xNTA1OlxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rO1xcbjE1MDY6XFx0XFxuMTUwNzpcXHQjaWZkZWYgQ09ORklHX0JQRl9KSVRcXG4xNTA4OlxcdGludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbjE1MDk6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbjE1MTA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nKTtcXG4xNTExOlxcdGludCBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuMTUxMjpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4xNTEzOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nKTtcXG4xNTE0OlxcdHN0cnVjdCBicGZfdHJhbXBvbGluZSAqYnBmX3RyYW1wb2xpbmVfZ2V0KHU2NCBrZXksXFxuMTUxNTpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbyk7XFxuMTUxNjpcXHR2b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKTtcXG4xNTE3OlxcdGludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcyk7XFxuMTUxODpcXHRcXG4xNTE5OlxcdGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4xNTIwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcXG4xNTIxOlxcdHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4xNTIyOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7XFxuMTUyMzpcXHR2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpO1xcbjE1MjQ6XFx0XFxuMTUyNTpcXHQvKlxcbjE1MjY6XFx0ICogV2hlbiB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIFNUQVRJQ19DQUxMIHJlcGxhY2UgdGhlIGJwZl9kaXNwYXRjaGVyX2ZuXFxuMTUyNzpcXHQgKiBpbmRpcmVjdGlvbiB3aXRoIGEgZGlyZWN0IGNhbGwgdG8gdGhlIGJwZiBwcm9ncmFtLiBJZiB0aGUgYXJjaGl0ZWN0dXJlIGRvZXNcXG4xNTI4OlxcdCAqIG5vdCBoYXZlIFNUQVRJQ19DQUxMLCBhdm9pZCBhIGRvdWJsZS1pbmRpcmVjdGlvbi5cXG4xNTI5OlxcdCAqL1xcbjE1MzA6XFx0I2lmZGVmIENPTkZJR19IQVZFX1NUQVRJQ19DQUxMXFxuMTUzMTpcXHRcXG4xNTMyOlxcdCNkZWZpbmUgX19CUEZfRElTUEFUQ0hFUl9TQ19JTklUKF9uYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4xNTMzOlxcdFxcdC5zY19rZXkgPSBcXHUwMDI2U1RBVElDX0NBTExfS0VZKF9uYW1lKSxcXHRcXHRcXHRcXFxcXFxuMTUzNDpcXHRcXHQuc2NfdHJhbXAgPSBTVEFUSUNfQ0FMTF9UUkFNUF9BRERSKF9uYW1lKSxcXG4xNTM1OlxcdFxcbjE1MzY6XFx0I2RlZmluZSBfX0JQRl9ESVNQQVRDSEVSX1NDKG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbjE1Mzc6XFx0XFx0REVGSU5FX1NUQVRJQ19DQUxMKGJwZl9kaXNwYXRjaGVyXyMjbmFtZSMjX2NhbGwsIGJwZl9kaXNwYXRjaGVyX25vcF9mdW5jKVxcbjE1Mzg6XFx0XFxuMTUzOTpcXHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfQ0FMTChuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4xNTQwOlxcdFxcdHN0YXRpY19jYWxsKGJwZl9kaXNwYXRjaGVyXyMjbmFtZSMjX2NhbGwpKGN0eCwgaW5zbnNpLCBicGZfZnVuYylcXG4xNTQxOlxcdFxcbjE1NDI6XFx0I2RlZmluZSBfX0JQRl9ESVNQQVRDSEVSX1VQREFURShfZCwgX25ldylcXHRcXHRcXHRcXFxcXFxuMTU0MzpcXHRcXHRfX3N0YXRpY19jYWxsX3VwZGF0ZSgoX2QpLVxcdTAwM2VzY19rZXksIChfZCktXFx1MDAzZXNjX3RyYW1wLCAoX25ldykpXFxuMTU0NDpcXHRcXG4xNTQ1OlxcdCNlbHNlXFxuMTU0NjpcXHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfU0NfSU5JVChuYW1lKVxcbjE1NDc6XFx0I2RlZmluZSBfX0JQRl9ESVNQQVRDSEVSX1NDKG5hbWUpXFxuMTU0ODpcXHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfQ0FMTChuYW1lKVxcdFxcdGJwZl9mdW5jKGN0eCwgaW5zbnNpKVxcbjE1NDk6XFx0I2RlZmluZSBfX0JQRl9ESVNQQVRDSEVSX1VQREFURShfZCwgX25ldylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6MzAuNTk3MTkwNzA4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NzQxMDY3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIEJQRiBKSVQgQ29uZmlndXJhdGlvbiBhbmQgTXVsdGktQXR0YWNoKipcblxuUmlnaHQsIHNvIGBDT05GSUdfQlBGX0pJVGAgaXMgdGhlIGJpZyBrYWh1bmEsIHRoZSBwcmltYXJ5IHN3aXRjaCB0aGF0IGNvbnRyb2xzIHRoZSBlbnRpcmUgQlBGIEp1c3QtSW4tVGltZSBjb21waWxlci4gSXQncyB0aGUgZ2F0ZWtlZXBlciwgcmVhbGx5LiBBbnkgQlBGLXJlbGF0ZWQgd29yaywgZXNwZWNpYWxseSBvcHRpbWl6YXRpb25zLCBsaWtlbHkgaGluZ2VzIG9uIHRoaXMgYmVpbmcgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11bHRpLWF0dGFjaCB0cmFjaW5nIGlzIGhhbmRsZWQuIExldCBtZSBsb29rIGF0IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGF0IGZ1bmN0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgbG93ZG93biBvbiBob3cgbXVsdGlwbGUgQlBGIHByb2dyYW1zIGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgc2FtZSB0cmFjZXBvaW50LCBrcHJvYmUsIG9yIHVwcm9iZS4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGNvbmN1cnJlbmN5IGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBKSVQgcHJvY2Vzcy4gSSBiZXQgdGhlcmUncyBzb21lIGludGVyZXN0aW5nIHN0dWZmIGluIHRoZXJlIGFib3V0IHByb2dyYW0gb3JkZXJpbmcsIHJlc291cmNlIGNvbnRlbnRpb24sIGFuZCwgb2YgY291cnNlLCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBJJ20gdHJ5aW5nIHRvIG9wdGltaXplLiBUaW1lIHRvIGRpdmUgaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjQwLjQ3MTMwMDkzNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMTYwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOT1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM5LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODQwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MS17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkzMDppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1Nzo0MC41MTk1MjIxNzlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyOTc1MjYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBDb25mdXNpb24qKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIEknbSBqdXN0IHJldmlld2luZyB0aGUgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgZmlsZSBhbmQsIHdhaXQgYSBtaW51dGUsIGFyZSB0aGVyZSAqdHdvKiBkZWZpbml0aW9ucyBvZiBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpbiB0aGVyZT8gVGhpcyBpcyBkZWZpbml0ZWx5IHVudXN1YWwgYW5kIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgaXMgdGhlIGNhc2UuIElzIG9uZSBvZiB0aGVtIGEgcHJvdG90eXBlIGFuZCB0aGUgb3RoZXIgdGhlIGFjdHVhbCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbj8gT3IgYXJlIHRoZXkgYm90aCBpbXBsZW1lbnRhdGlvbnMsIHBlcmhhcHMgZm9yIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIG9yIGtlcm5lbCB2ZXJzaW9ucywgY29uZGl0aW9uYWwgb24gc29tZSBtYWNybz8gT3IgbWF5YmUgaXTigJlzIGEgY2FzZSBvZiBvbmUgYmVpbmcgYSBsZWdhY3kgZnVuY3Rpb24gYW5kIHRoZSBvdGhlciB0aGUgbmV3IHJlcGxhY2VtZW50PyBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgY2xhcmlmeSB0aGUgcHVycG9zZSBvZiBlYWNoIGRlZmluaXRpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVpciBwcmVzZW5jZS4gVGhpcyBjb3VsZCBpbmRpY2F0ZSBhIHN1YnRsZSBidWcgb3IsIHdvcnNlLCBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGlmIGEgY29uZnVzaW9uIGluIGZ1bmN0aW9uIGNhbGxzIGNhbiBiZSBleHBsb2l0ZWQuIEkgbXVzdCBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc1OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjQ2LjU0OTI3NzUyOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MzAsXG4gIFwiTGluZUNvdW50XCI6IDExMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODMwOlxcdFxcbjM4MzE6XFx0XFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbjM4MzI6XFx0XFx0XFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XFxuMzgzMzpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM4MzQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzgzNTpcXHRcXHRcXHR9XFxuMzgzNjpcXHRcXHR9XFxuMzgzNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjM4Mzg6XFx0fVxcbjM4Mzk6XFx0XFxuMzg0MDpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzg0MTpcXHR7XFxuMzg0MjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XFxuMzg0MzpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XFxuMzg0NDpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcbjM4NDU6XFx0XFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XFxuMzg0NjpcXHRcXHR1NjQgX191c2VyICp1Y29va2llcztcXG4zODQ3OlxcdFxcdHU2NCAqY29va2llcyA9IE5VTEw7XFxuMzg0ODpcXHRcXHR1MzIgX191c2VyICp1aWRzO1xcbjM4NDk6XFx0XFx0aW50IGVycjtcXG4zODUwOlxcdFxcbjM4NTE6XFx0XFx0dWlkcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmlkcyk7XFxuMzg1MjpcXHRcXHRjbnQgPSBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmNudDtcXG4zODUzOlxcdFxcbjM4NTQ6XFx0XFx0aWYgKCFjbnQgfHwgIXVpZHMpXFxuMzg1NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zODU2OlxcdFxcdGlmIChjbnQgXFx1MDAzZSBNQVhfVFJBQ0lOR19NVUxUSV9DTlQpXFxuMzg1NzpcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbjM4NTg6XFx0XFx0aWYgKGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmZsYWdzIHx8IGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZClcXG4zODU5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM4NjA6XFx0XFxuMzg2MTpcXHRcXHRpZHMgPSBrdm1hbGxvY19vYmpzKCppZHMsIGNudCk7XFxuMzg2MjpcXHRcXHRpZiAoIWlkcylcXG4zODYzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM4NjQ6XFx0XFxuMzg2NTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoaWRzLCB1aWRzLCBjbnQgKiBzaXplb2YoKmlkcykpKSB7XFxuMzg2NjpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjM4Njc6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODY4OlxcdFxcdH1cXG4zODY5OlxcdFxcbjM4NzA6XFx0XFx0dWNvb2tpZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudHJhY2luZ19tdWx0aS5jb29raWVzKTtcXG4zODcxOlxcdFxcdGlmICh1Y29va2llcykge1xcbjM4NzI6XFx0XFx0XFx0Y29va2llcyA9IGt2bWFsbG9jX29ianMoKmNvb2tpZXMsIGNudCk7XFxuMzg3MzpcXHRcXHRcXHRpZiAoIWNvb2tpZXMpIHtcXG4zODc0OlxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMzg3NTpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM4NzY6XFx0XFx0XFx0fVxcbjM4Nzc6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGNvb2tpZXMsIHVjb29raWVzLCBjbnQgKiBzaXplb2YoKmNvb2tpZXMpKSkge1xcbjM4Nzg6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4zODc5OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg4MDpcXHRcXHRcXHR9XFxuMzg4MTpcXHRcXHR9XFxuMzg4MjpcXHRcXG4zODgzOlxcdFxcdGVyciA9IGNoZWNrX2R1cF9pZHMoaWRzLCBjb29raWVzLCBjbnQpO1xcbjM4ODQ6XFx0XFx0aWYgKGVycilcXG4zODg1OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg4NjpcXHRcXG4zODg3OlxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEkpIHtcXG4zODg4OlxcdFxcdFxcdGZleGl0cyA9IGt2bWFsbG9jX29ianMoKmZleGl0cywgY250KTtcXG4zODg5OlxcdFxcdFxcdGlmICghZmV4aXRzKSB7XFxuMzg5MDpcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjM4OTE6XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODkyOlxcdFxcdFxcdH1cXG4zODkzOlxcdFxcdH1cXG4zODk0OlxcdFxcbjM4OTU6XFx0XFx0bGluayA9IGt2emFsbG9jX2ZsZXgoKmxpbmssIG5vZGVzLCBjbnQpO1xcbjM4OTY6XFx0XFx0aWYgKCFsaW5rKSB7XFxuMzg5NzpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjM4OTg6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODk5OlxcdFxcdH1cXG4zOTAwOlxcdFxcbjM5MDE6XFx0XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJLFxcbjM5MDI6XFx0XFx0XFx0ICAgICAgXFx1MDAyNmJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcywgcHJvZywgcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpO1xcbjM5MDM6XFx0XFxuMzkwNDpcXHRcXHRlcnIgPSBicGZfbGlua19wcmltZShcXHUwMDI2bGluay1cXHUwMDNlbGluaywgXFx1MDAyNmxpbmtfcHJpbWVyKTtcXG4zOTA1OlxcdFxcdGlmIChlcnIpXFxuMzkwNjpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM5MDc6XFx0XFxuMzkwODpcXHRcXHRsaW5rLVxcdTAwM2Vub2Rlc19jbnQgPSBjbnQ7XFxuMzkwOTpcXHRcXHRsaW5rLVxcdTAwM2Vjb29raWVzID0gY29va2llcztcXG4zOTEwOlxcdFxcdGxpbmstXFx1MDAzZWZleGl0cyA9IGZleGl0cztcXG4zOTExOlxcdFxcbjM5MTI6XFx0XFx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHByb2csIGlkcywgbGluayk7XFxuMzkxMzpcXHRcXHRrdmZyZWUoaWRzKTtcXG4zOTE0OlxcdFxcdGlmIChlcnIpIHtcXG4zOTE1OlxcdFxcdFxcdGJwZl9saW5rX2NsZWFudXAoXFx1MDAyNmxpbmtfcHJpbWVyKTtcXG4zOTE2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzkxNzpcXHRcXHR9XFxuMzkxODpcXHRcXHRyZXR1cm4gYnBmX2xpbmtfc2V0dGxlKFxcdTAwMjZsaW5rX3ByaW1lcik7XFxuMzkxOTpcXHRcXG4zOTIwOlxcdGVycm9yOlxcbjM5MjE6XFx0XFx0a3ZmcmVlKGZleGl0cyk7XFxuMzkyMjpcXHRcXHRrdmZyZWUoY29va2llcyk7XFxuMzkyMzpcXHRcXHRrdmZyZWUoaWRzKTtcXG4zOTI0OlxcdFxcdGt2ZnJlZShsaW5rKTtcXG4zOTI1OlxcdFxcdHJldHVybiBlcnI7XFxuMzkyNjpcXHR9XFxuMzkyNzpcXHRcXG4zOTI4OlxcdCNlbHNlXFxuMzkyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6NDYuNTQ5NTI4MTc5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDIyMDk2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgaGVyZSB3ZSBhcmUsIHN0YXJpbmcgZG93biB0aGlzIGAjZWxzZWAgYmxvY2suIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQncyBkcml2aW5nIGl0PyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHN0YXRlIHRoYXQgbGVhZHMgdG8gdGhpcyBicmFuY2guIFRoZSBjcnVjaWFsIGNvbnRleHQgaGVyZSBpcyB0aGUgcHJlY2VkaW5nIGAjaWZkZWZgIG9yIGAjaWZuZGVmYCBjb25zdHJ1Y3QuIFRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyB0aGUga2V5IGhlcmUuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgcmFjZXMgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zOiBXaGF0IHByZXByb2Nlc3NvciBzeW1ib2xzIGFyZSBkZWZpbmVkPyBBbmQsIGltcG9ydGFudGx5LCAqaG93KiBhcmUgdGhleSBkZWZpbmVkPyBJcyB0aGlzIGEgc2ltcGxlIGZsYWcsIGEgbWFjcm8gd2l0aCBhcmd1bWVudHMsIG9yIGEgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb24gc2V0dGluZz8gQXJlIHRoZXJlIG5lc3RlZCBjb25kaXRpb25hbHMgSSBuZWVkIHRvIHVudGFuZ2xlPyBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byB3aGVyZSB0aGUgYCNpZmRlZmAgb3IgYCNpZm5kZWZgIGlzIHVzZWQgYW5kIGNvbnNpZGVyIGFsbCB0aGUgZmlsZXMuXG5cblRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljYWwgZmxvdyBvZiB0aGUgY29kZSBhdCBjb21waWxlIHRpbWUuIEluIG9yZGVyIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBwYXRod2F5LCBJIGhhdmUgdG8ga25vdyB0aGUgc3ltYm9sIGRlZmluaXRpb24uIFRoaXMgaXMgdGhlIGx5bmNocGluLCB0aGUgY29uZGl0aW9uIHRoYXQgZGljdGF0ZXMgd2hldGhlciB0aGlzIGAjZWxzZWAgYmxvY2sgaXMgZXZlbiBpbmNsdWRlZCBpbiB0aGUgZmluYWwgY29tcGlsYXRpb24gdW5pdC4gV2hhdCBpcyB0aGUgdmFsdWUgb2YgdGhpcyBzeW1ib2wsIGl0cyBzY29wZSwgYW5kIGhvdyBpdCBpcyBiZWluZyBkZWZpbmVkP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6NTEuNTkxNzQyMTYyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYzMjU3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00Ny1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6NDg6I2lmZGVmIENPTkZJR19NT0RVTEVTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTQ5LXN0cnVjdCBicGZfdHJhY2VfbW9kdWxlIHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzM9dW5zaWduZWQgaW50IHRyYWNlX2NhbGxfYnBmX2ZhdWx0YWJsZShzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqY3R4KVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTg1OiNpZmRlZiBDT05GSUdfQlBGX0tQUk9CRV9PVkVSUklERVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODYtQlBGX0NBTExfMihicGZfb3ZlcnJpZGVfcmV0dXJuLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB1bnNpZ25lZCBsb25nLCByYylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMDY9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9zdHJfcHJvdG8gPSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMTU6I2lmZGVmIENPTkZJR19BUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTYtQlBGX0NBTExfMyhicGZfcHJvYmVfcmVhZF9jb21wYXQsIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9OTYxPUJURl9TRVRfU1RBUlQoYnRmX2FsbG93bGlzdF9kX3BhdGgpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjk2MjojaWZkZWYgQ09ORklHX1NFQ1VSSVRZXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2My1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2NT1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9vcGVuKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05NjYtI2VuZGlmXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjk2NzojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1BBVEhcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTY4LUJURl9JRChmdW5jLCBzZWN1cml0eV9wYXRoX3RydW5jYXRlKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEwNzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9lbnRyeV9pcCh1bnNpZ25lZCBsb25nIGZlbnRyeV9pcClcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3Ni17XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwNzc6I2lmZGVmIENPTkZJR19YODZfS0VSTkVMX0lCVFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDc4LVxcdGlmIChpc19lbmRicigodm9pZCAqKShmZW50cnlfaXAgLSBFTkRCUl9JTlNOX1NJWkUpKSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMDg0PUJQRl9DQUxMXzEoYnBmX2dldF9mdW5jX2lwX2twcm9iZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDg4LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMDg5OiNpZmRlZiBDT05GSUdfVVBST0JFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDkwLVxcdHJ1bl9jdHggPSBjb250YWluZXJfb2YoY3VycmVudC1cXHUwMDNlYnBmX2N0eCwgc3RydWN0IGJwZl90cmFjZV9ydW5fY3R4LCBydW5fY3R4KTtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMjc0PWJwZl90cmFjaW5nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTI4MC1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZF9wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTI4MTojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEyODItXFx0Y2FzZSBCUEZfRlVOQ19wcm9iZV9yZWFkOlxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEzNDM9a3Byb2JlX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMzUxLVxcdFxcdHJldHVybiBwcm9nLVxcdTAwM2VzbGVlcGFibGUgPyBcXHUwMDI2YnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG8gOiBcXHUwMDI2YnBmX2dldF9zdGFja19wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTM1MjojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTM1My1cXHRjYXNlIEJQRl9GVU5DX292ZXJyaWRlX3JldHVybjpcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI2PXRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MzAtXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3MzE6I2lmZGVmIENPTkZJR19ORVRcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTczMi1cXHRjYXNlIEJQRl9GVU5DX3NrYl9vdXRwdXQ6XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTgyOD1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHJhd190cmFjZXBvaW50X3Byb2dfb3BzID0ge1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxODI5OiNpZmRlZiBDT05GSUdfTkVUXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4MzAtXFx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyMDk9aW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDMtXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNDQ6I2lmZGVmIENPTkZJR19LUFJPQkVfRVZFTlRTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDUtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfS1BST0JFKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDktI2VuZGlmXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNTA6I2lmZGVmIENPTkZJR19VUFJPQkVfRVZFTlRTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNTEtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfVVBST0JFKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyNzM9c3Vic3lzX2luaXRjYWxsKHNlbmRfc2lnbmFsX2lycV93b3JrX2luaXQpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjc1OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc2LXN0YXRpYyBpbnQgYnBmX2V2ZW50X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG9wLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIzMjk9c3RydWN0IGJwZl9zZXNzaW9uX3J1bl9jdHgge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzQtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIzMzU6I2lmZGVmIENPTkZJR19GUFJPQkVcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjMzNi1zdHJ1Y3QgYnBmX2twcm9iZV9tdWx0aV9saW5rIHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNDQ5PXN0YXRpYyBpbnQgYnBmX2twcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk4LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyNDk5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNTAwLXN0YXRpYyB2b2lkIGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI1MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX2twcm9iZV9tdWx0aV9saW5rX2xvcHMgPSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUyOC1cXHQuZmlsbF9saW5rX2luZm8gPSBicGZfa3Byb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI1Mjk6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI1MzAtXFx0LnNob3dfZmRpbmZvID0gYnBmX2twcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yOTQ0PXN0YXRpYyB1NjQgYnBmX2twcm9iZV9tdWx0aV9lbnRyeV9pcChzdHJ1Y3QgYnBmX3J1bl9jdHggKmN0eClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTQ5LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyOTUwOiNpZmRlZiBDT05GSUdfVVBST0JFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTUxLXN0cnVjdCBicGZfdXByb2JlX211bHRpX2xpbms7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzAwOD1zdGF0aWMgaW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzA3NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzA3NTojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzA3Ni1zdGF0aWMgdm9pZCBicGZfdXByb2JlX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl91cHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMxMTktXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMTIwOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTIxLVxcdC5zaG93X2ZkaW5mbyA9IGJwZl91cHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzcwMz1zdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTYtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3NTc6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTgtc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODctXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc4ODojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4OS1cXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6NTEuNjQwMzgwNzI3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzA0NzE4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIE11bHRpLUF0dGFjaCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHJldmlld2luZyB0aGUgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgZmlsZSwgYW5kIEknbSBub3QgaW1tZWRpYXRlbHkgc3BvdHRpbmcgdGhlIGAjaWZkZWZgIGNvbmRpdGlvbmFsIHN1cnJvdW5kaW5nIHRoZSBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBmdW5jdGlvbi4gVGhhdCBzZWVtcy4uLiBvZGQuIEkgd2FzIGV4cGVjdGluZyBpdCB0byBiZSB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0IGlzbid0LCBvciB3aGVyZSBpdCBtaWdodCBoYXZlIGJlZW4gcGxhY2VkLiBSaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGAjZWxzZWAgYmxvY2sgc3RhcnRpbmcgYXJvdW5kIGxpbmUgMzkyOS4gUGVyaGFwcyB0aGUgcHJlcHJvY2Vzc29yIGxvZ2ljIGlzIG1vcmUgY29tcGxleCB0aGFuIEkgaW5pdGlhbGx5IGFzc3VtZWQsIGFuZCB0aGUgZnVuY3Rpb24ncyBpbmNsdXNpb24gaXMgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCBtYW5uZXIsIG9yIHVuZGVyIGEgZGlmZmVyZW50IGNvbmRpdGlvbiB0aGF0IGlzIGRlZmluZWQgZWxzZXdoZXJlLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIG11bHRpLWF0dGFjaCBjYXBhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzY5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6NTYuNjEwODU1MzQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzkyMDpcXHRlcnJvcjpcXG4zOTIxOlxcdFxcdGt2ZnJlZShmZXhpdHMpO1xcbjM5MjI6XFx0XFx0a3ZmcmVlKGNvb2tpZXMpO1xcbjM5MjM6XFx0XFx0a3ZmcmVlKGlkcyk7XFxuMzkyNDpcXHRcXHRrdmZyZWUobGluayk7XFxuMzkyNTpcXHRcXHRyZXR1cm4gZXJyO1xcbjM5MjY6XFx0fVxcbjM5Mjc6XFx0XFxuMzkyODpcXHQjZWxzZVxcbjM5Mjk6XFx0XFxuMzkzMDpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzkzMTpcXHR7XFxuMzkzMjpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMzkzMzpcXHR9XFxuMzkzNDpcXHRcXG4zOTM1OlxcdCNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjU2LjYxMTA4NTc0NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTEwMzU4MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzOlxuXG4qKkRlY29kaW5nIHRoaXMgUHJlcHJvY2Vzc29yIE1hemUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYCNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgXHUwMDI2XHUwMDI2IENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AuIFRoYXQncyB0aGUgc3RhcnQsIG9yIG1heWJlIGl0J3Mgbm90LiBXYWl0IGEgbWludXRlLi4uIG5vLCBJJ20gYmVpbmcgZm9vbGVkIGhlcmUuIFRoYXQncyBhY3R1YWxseSBhbiBgI2Vsc2VgIGJsb2NrLiBUaGUgcmVhbCBrZXkgaXMgdW5kZXJzdGFuZGluZyB0aGUgYCNpZmAgc3RhdGVtZW50IHRoYXQgdGhpcyBgI2Vsc2VgIGlzIHRpZWQgdG8uIEkndmUgZ290IHRvIHRyYWNlIGJhY2sgYW5kIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgYCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKWAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBicmFuY2ggYmVnaW5zLiBHb3R0YSBmaW5kIHdoZXJlIHRoYXQgaW5pdGlhbCBjb25kaXRpb25hbCBzdGF0ZW1lbnQgaXMgZGVmaW5lZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgYCNlbHNlYCBpcyBldmVuIGFjdGl2ZSBoZXJlLiBJIG5lZWQgdGhlIGNvbnRleHQgb2YgdGhhdCBgI2lmYCB0byBtYWtlIHNlbnNlIG9mIHdoYXQgdGhpcyBibG9jayBpcyBhY3R1YWxseSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NTcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjAyLjcyMTQ0NzQwOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNjkzMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzY4MD1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjgxLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjgyOiNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjgzLSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zOTMwPWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTM0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTM1OiNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjAyLjc2ODgyNDMzM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjMwMTg1NjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqVmVyaWZ5aW5nIEZUUkFDRSBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IHdlJ3ZlIGdvdCB0aGUgZm91bmRhdGlvbmFsIEZUUkFDRSBjb21wb25lbnRzIHNldCB1cCBjb3JyZWN0bHkuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nLCB5ZXMsIGJvdGggYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGFyZSBhYnNvbHV0ZWx5IGVzc2VudGlhbCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGV5IGFyZSBub24tbmVnb3RpYWJsZSBwcmVyZXF1aXNpdGVzLiBOb3csIGp1c3QgdG8gbWFrZSBkb3VibHkgc3VyZSwgbGV0J3Mgc3RhcnQgd2l0aCBhIGNoZWNrIG9mIGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBJIHdhbnQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBjcml0aWNhbCBvcHRpb24gaXMgZW5hYmxlZCBhbmQgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIEl0J3MgdGhlIGx5bmNocGluIG9mIHRoZSBkaXJlY3QgY2FsbCBvcHRpbWl6YXRpb24sIHNvIHdlIGhhdmUgdG8gZW5zdXJlIGl0J3MgaW4gcGxhY2UgYmVmb3JlIHdlIGxvb2sgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDU5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTg6MTUuMDcwNjgzNDU4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkwMzU2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTMyND1jb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjgtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjE1LjUwOTcyNjAyM1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDMyOTY1NTUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIEtlcm5lbCdzIER5bmFtaWMgRnRyYWNlIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCBtZSBicmVhayBkb3duIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBgRFlOQU1JQ19GVFJBQ0VgIGNvbmZpZ3VyYXRpb24gYSBiaXQuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIGJ1dCBsaWtlIGFueSBnb29kIHN5c3RlbSwgdGhlcmUgYXJlIGRlcGVuZGVuY2llcyB0byBjb25zaWRlci4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgcmVsaWVzIGhlYXZpbHkgb24gYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGRpcmVjdCBjYWxscyBwcm9iYWJseSBuZWVkIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiBhbmQgdHJhY2tpbmcsIHdoaWNoIHRoZSBcIldJVEhfUkVHU1wiIHBhcnQgd291bGQgZmFjaWxpdGF0ZS4gSXQncyBhbG1vc3QgbGlrZSBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTYCBsYXlzIHRoZSBncm91bmR3b3JrIGFuZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGJ1aWxkcyB1cG9uIGl0LCBwcm92aWRpbmcgdGhhdCBmZWF0dXJlLlxuXG5Ob3csIHRoYXQgc2FpZCBJIG5lZWQgdG8gY29uc2lkZXIgYEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCB3aGljaCBJIG5lZWQgdG8gY2hlY2sgdG8gc2VlIGlmIG15IGFyY2hpdGVjdHVyZSBldmVuICpzdXBwb3J0cyogdGhpcyBkaXJlY3QgY2FsbCBtZXRob2QuIEl0J3MgYWx3YXlzIGltcG9ydGFudCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLCBhcyBzb21lIGFyY2hpdGVjdHVyZXMgbWlnaHQgbm90IGhhdmUgdGhlIGNhcGFiaWxpdGllcyB0byBpbXBsZW1lbnQgdGhhdCBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgyOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjI1LjgzOTM4NTQxNloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzI1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzI1OlxcdFxcdGRlZl9ib29sIHlcXG4gMzI2OlxcdFxcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VcXG4gMzI3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG4gMzI4OlxcdFxcbiAzMjk6XFx0Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxuIDMzMDpcXHRcXHRkZWZfYm9vbCB5XFxuIDMzMTpcXHRcXHRkZXBlbmRzIG9uIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHUyB8fCBEWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NcXG4gMzMyOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1ODoyNS44Mzk1MDI0NDZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NzAwNTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipDb25maWd1cmF0aW9uIENvbnVuZHJ1bXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byB0aGUgd2VlZHMgd2l0aCBmdHJhY2UgYWdhaW4uIFJpZ2h0LCB3ZSBhYnNvbHV0ZWx5IG5lZWQgYm90aCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGFuZCBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiBpc24ndCBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbj8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgbm90IG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgaGVyZSBhbmQgdGhhdCBvdXIgcGxhdGZvcm0gaXMgYWN0dWFsbHkgY2FwYWJsZSBvZiB3aGF0IHdlJ3JlIGFpbWluZyBmb3IuIExldCdzIGdvIHZlcmlmeSB0aGlzIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzMTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjI5Ljc5NjUxMDMxNVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1NDc0NjE3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjMwLjEyMTk5MjQ0MloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQ5NjU0NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgVHJhY2UgRmVhdHVyZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMuIEknbSB0aGlua2luZyBJIHNob3VsZCB1c2UgYGdyZXBgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaW5kIG91dCB3aGVyZSB0aGUgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBJcyBpdCBpbiBhIEtjb25maWcgZmlsZT8gTWF5YmUgaXQncyBkZWZpbmVkIGluIG11bHRpcGxlIHBsYWNlcy4gVGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBga2VybmVsL3RyYWNlL0tjb25maWdgLCBidXQgSSB3YW50IHRvIGJlIGNvbXByZWhlbnNpdmUsIGp1c3QgaW4gY2FzZSB0aGlzIGlzIGEgbW9yZSBjb21wbGV4IHNpdHVhdGlvbi4gU28sIEkgbmVlZCB0byBjaGVjayBlaXRoZXIgdGhlcmUgb3IsIGlkZWFsbHksIHNlYXJjaCB0aGUgd2hvbGUga2VybmVsIHRyZWUgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLiBJJ2xsIGdldCB0aGF0IHNlYXJjaCBnb2luZyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTU3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTg6MzYuMTcxNjUwMjE5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU4NDQwMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9NTA9Y29uZmlnIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjUzOmNvbmZpZyBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU0LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTg6MzguMDMwMDk5MTNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzMzc3NzU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5LiBIZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwcm92aWRlZCB0ZXh0IGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgdGhvdWdodCBwcm9jZXNzLCBhbmQgYXNzdW1pbmcgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipBbmFseXppbmcgdGhlIFNlbGVjdGlvbiBQcm9jZXNzKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbiBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKnByZWNpc2VseSogd2hhdCB0aGUgcHJvY2VzcyBpcyB0cnlpbmcgdG8gc2VsZWN0LiBJcyBpdCBhIHNwZWNpZmljIGVsZW1lbnQsIGEgZGF0YSBwb2ludCwgYW4gYWxnb3JpdGhtPyBXaGF0IGFyZSB0aGUgaW5oZXJlbnQgY2hhcmFjdGVyaXN0aWNzIG9mIHdoYXRldmVyJ3MgYmVpbmcgc2VsZWN0ZWQ/IFVuZGVyc3RhbmRpbmcgdGhlICppbnB1dHMqIGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdGhpbmsgYWJvdXQgdGhlIHNlbGVjdGlvbiBtZWNoYW5pc20gaXRzZWxmLiBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCBjb25kaXRpb25hbCBzdGF0ZW1lbnQsIGEgY29tcGxleCB3ZWlnaHRpbmcgc3lzdGVtLCBvciBzb21ldGhpbmcgbW9yZSBhZHZhbmNlZCBsaWtlIGEgbWFjaGluZSBsZWFybmluZyBtb2RlbCBhdCBwbGF5PyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBwb3NzaWJpbGl0aWVzLiBNeSBleHBlcmllbmNlIGRpY3RhdGVzIHRoYXQgSSBtdXN0IGxvb2sgY2xvc2VseSBhdCB0aGUgZGF0YS4gSSd2ZSBzZWVuIGl0IGFsbCwgYW5kIGtub3cgdG8gY29uc2lkZXIgYWxsIGFuZ2xlcyBhbmQgcG9zc2liaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4NzIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjQzLjY2Mzg4MTYwOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NTY0MzIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0zMzctXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0NIRURfTUNcXHRcXHRpZiBTTVBcXG5hcmNoL3g4Ni9LY29uZmlnOjMzODpcXHRzZWxlY3QgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcXHRpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5hcmNoL3g4Ni9LY29uZmlnLTMzOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTg6NDUuNTI5NTMxNzlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1MjQ0OTY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRGlyZWN0IENhbGwgQlBGIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBpbnRlZ3JhdGlvbiBhbmQgc2VlaW5nIHdoYXQncyByZXF1aXJlZCBmb3IgdGhlIGRpcmVjdCBjYWxsIGZ1bmN0aW9uYWxpdHkuIFRoZSBmaXJzdCB0aGluZyBJJ20gbm90aW5nIGlzIHRoYXQgaXQncyBnYXRlZCBieSBgWDg2XzY0IFx1MDAyNlx1MDAyNiBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIHdoaWNoIG1lYW5zIHdlJ3JlIGxvb2tpbmcgYXQgeDg2XzY0IGFyY2hpdGVjdHVyZSBzcGVjaWZpY2FsbHkuIFRoYXTigJlzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9FVkVOVFNgLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZXJlJ3MgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgd2hpY2ggaW4gdHVybiByZWxpZXMgb24gYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AgYW5kIGBEWU5BTUlDX0ZUUkFDRWAuIFdlIGFsc28gbmVlZCBgS1BST0JFX0VWRU5UU2AgYW5kIGBQRVJGX0VWRU5UU2AuXG5cbkhvbGQgb24uLi50aGlua2luZyBhYm91dCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGEgYml0IG1vcmUsIGl0J3MgYSBgZGVmX2Jvb2wgeWAgd2hlbiBhbGwgaXRzIGRlcGVuZGVuY2llcyBhcmUgbWV0LiBTbywgcmVhbGx5LCBpdCdzIGp1c3QgaW5kaWNhdGluZyB0aGF0IHRoZSBmZWF0dXJlIGlzIGF2YWlsYWJsZS4gSW5zdGVhZCBvZiBsaXN0aW5nIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBEWU5BTUlDX0ZUUkFDRWAsIGl0IGZlZWxzIGNsZWFuZXIgdG8ganVzdCBsaXN0IHRoZSBkaXJlY3QgY2FsbCBvbmUuIFNvLCB0byBiZSBjbGVhciwgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYEJQRl9FVkVOVFNgLCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCBgS1BST0JFX0VWRU5UU2AsIGFuZCBgUEVSRl9FVkVOVFNgLlxuXG5GaW5hbGx5LCB0byB2ZXJpZnkgdGhpcywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvZGUuIEknbGwgdGFrZSBhIGxvb2sgYXQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCB0byBjb25maXJtIGl0IGlzIGd1YXJkZWQgYnkgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjUxLjM4MTk4Mzc2NloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMjQ5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTg5LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1OTA6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTkxLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYxNS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjE2OnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9yb2xsYmFjayhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MTcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzMi1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjMzOmludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM0LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3OS1cXHRmb3JfZWFjaF9tbm9kZShtbm9kZSwgbGluaykge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODA6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODEtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA3LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MDg6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MDktXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzE3LVxcdFxcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lLCBcXHUwMDI2bW5vZGUtXFx1MDAzZW5vZGUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MTg6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzE5LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MzM9dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0My1cXHRcXHRkYXRhLVxcdTAwM2VlbnRyeSA9IFxcdTAwMjZtbm9kZS1cXHUwMDNlZW50cnk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc0NDpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0NS1cXHRcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSwgbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzU1LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NTY6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjUxLjQyOTIxOTI5MVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM2NzI3MzgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFRyYW1wb2xpbmUgTXVsdGktQXR0YWNoIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgXCJXaGVyZSBkb2VzIHRoaXMgbGl2ZT9cIiBJdCdzIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhhdCBmaWxlIGNvbXBpbGVkIHdpdGggYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2A/IE5vLCBhIHF1aWNrIGNoZWNrIHNob3dzIGl0J3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9KSVRgLiBUaGF0J3MgaW1wb3J0YW50IHRvIG5vdGUuXG5cbk5vdywgSSByZW1lbWJlciBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBpcyBvbmx5IGNhbGxlZCBieSBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gQ3J1Y2lhbGx5LCB0aGF0IGNhbGwgaXMgZ3VhcmRlZCBieSAqYm90aCogYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLiBTbywgdGhhdCBkaWN0YXRlcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cblRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIGNvbmZpZ3MgZm9yIHRoaXMgd2hvbGUgdGhpbmcgYXJlOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBCUEZfRVZFTlRTYCwgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgYW5kLCBldmVuIHRob3VnaCBpdCdzIHNlbGVjdGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUsIGBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AuIEknbGwga2VlcCBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGluIG1pbmQsIGVzcGVjaWFsbHkgd2l0aCB0aGUgcG90ZW50aWFsIG5lZWRzIG9mIHN5emthbGxlciBjb25maWcgZ2VuZXJhdGlvbiAtIHRob3VnaCwgc3l6a2FsbGVyIGRvZXNuJ3QgZGlyZWN0bHkgdXNlIGBIQVZFXypgIGNvbmZpZ3MuIFNvIEkgY2FuIGVpdGhlciBsaXN0IGl0IG9yIGp1c3Qgc3RpY2sgd2l0aCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgYEZUUkFDRWAgYW5kIGBEWU5BTUlDX0ZUUkFDRWAgY29uZmlncy5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvZiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYC4gSXMgaXQgZXhwb3J0ZWQgb3Igc3RhdGljPyBJdCdzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGtlZXAgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGZvY3VzOiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAsIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYC4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIGlzIGFjdHVhbGx5IGNhbGxlZCBmcm9tIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2VgLCBqdXN0IHRvIGNvbXBsZXRlIHRoZSBwaWN0dXJlLiBUaGlzIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXJlYSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1OTowMS43OTY0OTY2MTJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mzk0NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2ODA9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjg0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjg1OnN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2ODYte1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg1OlxcdC5yZWxlYXNlID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg2LVxcdC5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1OTowMS44NDM4OTc1OTdaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzNTAxOTMxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFRyYW1wb2xpbmUgRml4KipcblxuT2theSwgc28gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZWAgZG9lcyBpbmRlZWQgY2FsbCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgd2hpY2ggaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBwYXRjaC4gVGhlIG1haW4gdGhydXN0IGlzIGZpeGluZyBhIFVzZS1BZnRlci1GcmVlIHZ1bG5lcmFiaWxpdHkgbHVya2luZyB3aXRoaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYC4gSXQgc2VlbXMgdGhlIGJ1ZyBzdXJmYWNlcyB3aGVuIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbGx5IGltcG9ydGFudCBmaXgsIGRlYWxpbmcgd2l0aCBhIGNvcmUgY29tcG9uZW50IG9mIHRoZSBCUEYgdHJhbXBvbGluZSBtZWNoYW5pc20uIEdpdmVuIGl0cyBjcml0aWNhbGl0eSwgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHdhcnJhbnRlZC4gTm8gcXVlc3Rpb24gYWJvdXQgaXQuXG5cbkxldCBtZSBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBXZSBhcmUgbG9va2luZyBhdCBhIGBXb3J0aEZ1enppbmc6IHRydWVgIHNpdHVhdGlvbi4gVGhlIGZ1bmN0aW9uIHN5bWJvbHMgdG8gcmVhbGx5IHRhcmdldCBkdXJpbmcgZnV6emluZyBhcmU6IGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgYW5kIG5hdHVyYWxseSwgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZWAuXG5cbkZvciBjb25maWd1cmF0aW9uLCBJJ2xsIG5lZWQgdGhlc2UgZW5hYmxlZDogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBgQlBGX0VWRU5UU2AsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGFuZCBgRFlOQU1JQ19GVFJBQ0VgLiBOb3csIGxldCdzIGRvdWJsZS1jaGVjayBhbnkgZGVwZW5kZW5jaWVzLiBSaWdodCwgYEJQRl9FVkVOVFNgIGFsc28gaGluZ2VzIG9uIGBLUFJPQkVfRVZFTlRTYCBvciBgVVBST0JFX0VWRU5UU2AgKmFuZCogYFBFUkZfRVZFTlRTYC4gSSBuZWVkIHRvIGVuc3VyZSB0aG9zZSBhcmUgYWxzbyBlbmFibGVkLiBUaGVyZWZvcmUsIEkgd2lsbCBpbmNsdWRlIGBLUFJPQkVfRVZFTlRTYCBhbmQgYFBFUkZfRVZFTlRTYCBpbiBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gVGhhdCBzaG91bGQgY292ZXIgYWxsIHRoZSBuZWNlc3NhcnkgcmVxdWlyZW1lbnRzIGZvciBmdXp6aW5nIHRoaXMgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NDUsIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU5OjEzLjE5NDA5MzcxN1oiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDQwNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFXCIsXG4gICAgXCJLUFJPQkVfRVZFTlRTXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaFwiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoXCIsXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIFVzZS1BZnRlci1GcmVlIGJ1ZyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgIGJ5IGNvcnJlY3RseSBpZGVudGlmeWluZyB3aGVuIHRoZSBvbGQgaW1hZ2UgaXMgc2FmZSB0byBmcmVlLiBJdCBhbHNvIGNoYW5nZXMgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAgdG8gcmV0dXJuIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgQlBGIHRyYW1wb2xpbmUgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHN5c2NhbGxzLCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRVwiLFxuICAgIFwiS1BST0JFX0VWRU5UU1wiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hcIixcbiAgICBcImJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaFwiLFxuICAgIFwiYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCBieSBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgd2hlbiB0aGUgb2xkIGltYWdlIGlzIHNhZmUgdG8gZnJlZS4gSXQgYWxzbyBjaGFuZ2VzIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIHRvIHJldHVybiB2b2lkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiB0cmFtcG9saW5lIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBzeXNjYWxscywgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1OToxMy4yNjk1NDA5NjlaIiwiU2VxIjo1NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzgwMzcwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1OToxMy4yNzAxMTQzNjlaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODEzNzQ1OTQxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCwgd2hlcmUgYG9sZF9pbWFnZWAgY291bGQgYmUgZnJlZWQgd2hpbGUgc3RpbGwgYmVpbmcgdGhlIGFjdGl2ZSBpbWFnZSAoYGN1cl9pbWFnZWApIGlmIGBicGZfdHJhbXBvbGluZV91cGRhdGUoKWAgZmFpbHMuIFVBRiBidWdzIGFyZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjE5ZjMwZWVlY2YwOWMzNGYwNzg4ZDQ2MTU4MGI5YTM5NTgwN2ZmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDAyOjU0OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDczYmFjZmM2NDQ0ZGYuLjMyNTVjNmY1ZWE2YjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMTUxOCw4ICsxNTE4LDggQEAgaW50IGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcih2b2lkICppbWFnZSwgdm9pZCAqYnVmLCBzNjQgKmZ1bmNzLCBpbnQgbnVtX2Z1bmNcbiBcbiBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7XG4taW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tXHRcdFx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7XG4rdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuK1x0XHRcdFx0IHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcbiB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpO1xuIFxuIC8qXG5AQCAtMTYzOSwxMCArMTYzOSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuIHtcbiBcdHJldHVybiAtRU5PVFNVUFA7XG4gfVxuLXN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuK1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4ge1xuLVx0cmV0dXJuIC1FTk9UU1VQUDtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpIHt9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuaW5kZXggZWQ3OTk5YWQ2YzY2Yy4uNTQ0YWI0MWEzYzI1NiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuQEAgLTE1OTUsNyArMTU5NSwxOCBAQCBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuIFxuIHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG4ge1xuLVx0aWYgKHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UpXG4rXHQvKlxuK1x0ICogT25seSBmcmVlIG9sZF9pbWFnZSBpZiBpdCBpcyBubyBsb25nZXIgdGhlIGFjdGl2ZSBpbWFnZS5cbitcdCAqIFdoZW4gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKCkgZmFpbHMgYmVmb3JlIG1vZGlmeV9mZW50cnlfbXVsdGkoKS9cbitcdCAqIHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKCkgaXMgY2FsbGVkLCBjdXJfaW1hZ2UgaXMgdW5jaGFuZ2VkXG4rXHQgKiAoY3VyX2ltYWdlID09IG9sZF9pbWFnZSkgYW5kIGZ0cmFjZSBzdGlsbCBwb2ludHMgdG8gaXQuIEZyZWVpbmdcbitcdCAqIGl0IHdvdWxkIGNhdXNlIGEgVUFGIHdoZW4gZnRyYWNlIGNhbGxzIGludG8gdGhlIGZyZWVkIG1lbW9yeS5cbitcdCAqIE9uIHN1Y2Nlc3MsIGN1cl9pbWFnZSBpcyBlaXRoZXIgYSBuZXcgaW1hZ2Ugb3IgTlVMTCwgc29cbitcdCAqIG9sZF9pbWFnZSAhPSBjdXJfaW1hZ2UgY29ycmVjdGx5IGlkZW50aWZpZXMgYSBzdGFsZSBpbWFnZSB0aGF0XG4rXHQgKiBpcyBzYWZlIHRvIGZyZWUuXG4rXHQgKi9cbitcdGlmICh0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgIT0gdHItXHUwMDNlY3VyX2ltYWdlKVxuIFx0XHRicGZfdHJhbXBfaW1hZ2VfcHV0KHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UpO1xuIFxuIFx0dHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSA9IE5VTEw7XG5AQCAtMTcxOSw3ICsxNzMwLDggQEAgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuK3ZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbitcdFx0XHRcdCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbiB7XG4gXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9IFx1MDAyNmxpbmstXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9ub2RlICptbm9kZTtcbkBAIC0xNzQ5LDcgKzE3NjEsNiBAQCBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX1xuIFx0XHRicGZfdHJhbXBvbGluZV9wdXQobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG4gXG4gXHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4gI3VuZGVmIGZvcl9lYWNoX21ub2RlX2NudFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuaW5kZXggODkxODk3ZjhhMWIzNS4uMjkyNjA5NTFhYTg3MSAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuKysrIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5AQCAtMzY4Nyw3ICszNjg3LDcgQEAgc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcbiBcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICp0cl9saW5rID1cbiBcdFx0Y29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rLCBsaW5rKTtcbiBcbi1cdFdBUk5fT05fT05DRShicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gobGluay1cdTAwM2Vwcm9nLCB0cl9saW5rKSk7XG4rXHRicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gobGluay1cdTAwM2Vwcm9nLCB0cl9saW5rKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU5OjEzLjI3MDExNTQ5OVoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTM3NDM3NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFRyYW1wb2xpbmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBmaXgsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYSBVc2UtQWZ0ZXItRnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgQlBGIHRyYW1wb2xpbmUgbWVjaGFuaXNtLiBMZXQncyBicmVhayBpdCBkb3duLiBUaGUgbWFpbiBjaGFuZ2UgSSdtIHNlZWluZyBpcyBhIG1vZGlmaWNhdGlvbiBvZiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCB0byByZXR1cm4gYHZvaWRgIGluc3RlYWQgb2YgYGludGAuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY2xlYW51cCwgYXMgdGhlIGZ1bmN0aW9uIHdhcyBhbHdheXMgcmV0dXJuaW5nIHplcm8gYW55d2F5LCBhIG1pbm9yIGNvZGUgc3R5bGUgaW1wcm92ZW1lbnQgcmVhbGx5LlxuXG5UaGUgY3JpdGljYWwgYml0LCBob3dldmVyLCBpcyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBjcnVjaWFsIGNoZWNrIGJlZm9yZSBmcmVlaW5nIGBvbGRfaW1hZ2VgLiBOb3cgaXQgb25seSBmcmVlcyBgb2xkX2ltYWdlYCBpZiBpdCBpcyBubyBsb25nZXIgdGhlIGFjdGl2ZSBpbWFnZSAoYHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgIT0gdHItXHUwMDNlY3VyX2ltYWdlYCkuIFRoaXMgcHJldmVudHMgdGhlIFVBRiB3aGVuIGBicGZfdHJhbXBvbGluZV91cGRhdGUoKWAgZmFpbHMgYnV0IHRoZSBhc3NvY2lhdGVkIGNsZWFudXAgaXNuJ3QgY2FsbGVkLCBhcyB0aGUgY29tbWVudCBjbGVhcmx5IHN0YXRlczogXCJGcmVlaW5nIGl0IHdvdWxkIGNhdXNlIGEgVUFGIHdoZW4gZnRyYWNlIGNhbGxzIGludG8gdGhlIGZyZWVkIG1lbW9yeS5cIiBUaGF0IGZhaWx1cmUgY2FzZSBpcyB0aGUga2V5LlxuXG5UaGlzIFVBRiB2dWxuZXJhYmlsaXR5IGlzIHdoYXQgaXQgaXMsIGFuZCBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBjYXRjaCB0aGlzIHR5cGUgb2YgYnVnLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBpcyBiZWluZyBleHBvc2VkIG9yIGZpeGVkIGJ5IHRoaXMsIHNvIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoYXQgY29kZSBhZ2FpbiwgYW5kIGl0IGNvbmZpcm1zIG15IHN1c3BpY2lvbjtcbmBgYGNcbi1cdGlmICh0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlKVxuK1x0aWYgKHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgXHUwMDI2XHUwMDI2XG4rXHQgICAgdHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAhPSB0ci1cdTAwM2VjdXJfaW1hZ2UpXG4gXHRcdGJwZl90cmFtcF9pbWFnZV9wdXQodHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSk7XG5gYGBcblRoYXQgYG9sZF9pbWFnZSAhPSBjdXJfaW1hZ2VgIGNoZWNrIGlzIHRoZSBjb3JlIG9mIHRoaXMgZml4LiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzMywiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1OToyMS40MDc1NTYxMjRaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgYnVnIGluIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZWAsIHdoZXJlIGBvbGRfaW1hZ2VgIGNvdWxkIGJlIGZyZWVkIHdoaWxlIHN0aWxsIGJlaW5nIHRoZSBhY3RpdmUgaW1hZ2UgKGBjdXJfaW1hZ2VgKSBpZiBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKClgIGZhaWxzLiBVQUYgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgYnVnIGluIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZWAsIHdoZXJlIGBvbGRfaW1hZ2VgIGNvdWxkIGJlIGZyZWVkIHdoaWxlIHN0aWxsIGJlaW5nIHRoZSBhY3RpdmUgaW1hZ2UgKGBjdXJfaW1hZ2VgKSBpZiBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKClgIGZhaWxzLiBVQUYgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowj9qmp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 02:37:58 +0000 UTC FinishedAt: 2026-08-10 02:59:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7db0a00445f1a40bacfe9b747405c11cb5f10fc9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "BPF_EVENTS", "DYNAMIC_FTRACE_WITH_DIRECT_CALLS", "DYNAMIC_FTRACE", "KPROBE_EVENTS", "PERF_EVENTS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7db0a00445f1a40bacfe9b747405c11cb5f10fc9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "BPF_EVENTS", "DYNAMIC_FTRACE_WITH_DIRECT_CALLS", "DYNAMIC_FTRACE", "KPROBE_EVENTS", "PERF_EVENTS" ], "series_id": "3c0dbb35-890d-4530-a2d6-6e1984e8dfdf" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_trampoline_multi_attach", "bpf_trampoline_multi_detach", "bpf_tracing_multi_link_release" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtLUFJPQkVfRVZFTlRTJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2RldGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIFVzZS1BZnRlci1GcmVlIChVQUYpIGJ1ZyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgLCB3aGVyZSBgb2xkX2ltYWdlYCBjb3VsZCBiZSBmcmVlZCB3aGlsZSBzdGlsbCBiZWluZyB0aGUgYWN0aXZlIGltYWdlIChgY3VyX2ltYWdlYCkgaWYgYGJwZl90cmFtcG9saW5lX3VwZGF0ZSgpYCBmYWlscy4gVUFGIGJ1Z3MgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCBieSBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgd2hlbiB0aGUgb2xkIGltYWdlIGlzIHNhZmUgdG8gZnJlZS4gSXQgYWxzbyBjaGFuZ2VzIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIHRvIHJldHVybiB2b2lkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiB0cmFtcG9saW5lIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBzeXNjYWxscywgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjE5ZjMwZWVlY2YwOWMzNGYwNzg4ZDQ2MTU4MGI5YTM5NTgwN2ZmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDAyOjU0OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCA3M2JhY2ZjNjQ0NGRmLi4zMjU1YzZmNWVhNmI0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTE1MTgsOCAmIzQzOzE1MTgsOCBAQCBpbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY1xuIFxuIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbiBcdFx0XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcbi1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi1cdFx0XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcbiYjNDM7dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7XG4gdm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzKTtcbiBcbiAvKlxuQEAgLTE2MzksMTAgJiM0MzsxNjM5LDkgQEAgc3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4ge1xuIFx0cmV0dXJuIC1FTk9UU1VQUDtcbiB9XG4tc3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuIHtcbi1cdHJldHVybiAtRU5PVFNVUFA7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzKSB7fVxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IGVkNzk5OWFkNmM2NmMuLjU0NGFiNDFhM2MyNTYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC0xNTk1LDcgJiM0MzsxNTk1LDE4IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG4gXG4gc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbiB7XG4tXHRpZiAodHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSlcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9ubHkgZnJlZSBvbGRfaW1hZ2UgaWYgaXQgaXMgbm8gbG9uZ2VyIHRoZSBhY3RpdmUgaW1hZ2UuXG4mIzQzO1x0ICogV2hlbiBicGZfdHJhbXBvbGluZV91cGRhdGUoKSBmYWlscyBiZWZvcmUgbW9kaWZ5X2ZlbnRyeV9tdWx0aSgpL1xuJiM0MztcdCAqIHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKCkgaXMgY2FsbGVkLCBjdXJfaW1hZ2UgaXMgdW5jaGFuZ2VkXG4mIzQzO1x0ICogKGN1cl9pbWFnZSA9PSBvbGRfaW1hZ2UpIGFuZCBmdHJhY2Ugc3RpbGwgcG9pbnRzIHRvIGl0LiBGcmVlaW5nXG4mIzQzO1x0ICogaXQgd291bGQgY2F1c2UgYSBVQUYgd2hlbiBmdHJhY2UgY2FsbHMgaW50byB0aGUgZnJlZWQgbWVtb3J5LlxuJiM0MztcdCAqIE9uIHN1Y2Nlc3MsIGN1cl9pbWFnZSBpcyBlaXRoZXIgYSBuZXcgaW1hZ2Ugb3IgTlVMTCwgc29cbiYjNDM7XHQgKiBvbGRfaW1hZ2UgIT0gY3VyX2ltYWdlIGNvcnJlY3RseSBpZGVudGlmaWVzIGEgc3RhbGUgaW1hZ2UgdGhhdFxuJiM0MztcdCAqIGlzIHNhZmUgdG8gZnJlZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAhPSB0ci1cdTAwM2VjdXJfaW1hZ2UpXG4gXHRcdGJwZl90cmFtcF9pbWFnZV9wdXQodHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSk7XG4gXG4gXHR0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlID0gTlVMTDtcbkBAIC0xNzE5LDcgJiM0MzsxNzMwLDggQEAgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuJiM0Mzt2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuIHtcbiBcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhID0gXHUwMDI2bGluay1cdTAwM2VkYXRhO1xuIFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX25vZGUgKm1ub2RlO1xuQEAgLTE3NDksNyAmIzQzOzE3NjEsNiBAQCBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX1xuIFx0XHRicGZfdHJhbXBvbGluZV9wdXQobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG4gXG4gXHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4gI3VuZGVmIGZvcl9lYWNoX21ub2RlX2NudFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuaW5kZXggODkxODk3ZjhhMWIzNS4uMjkyNjA5NTFhYTg3MSAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5AQCAtMzY4Nyw3ICYjNDM7MzY4Nyw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluayA9XG4gXHRcdGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluaywgbGluayk7XG4gXG4tXHRXQVJOX09OX09OQ0UoYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKGxpbmstXHUwMDNlcHJvZywgdHJfbGluaykpO1xuJiM0MztcdGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChsaW5rLVx1MDAzZXByb2csIHRyX2xpbmspO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0UmIzM0OywKICAgICYjMzQ7S1BST0JFX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gmIzM0OywKICAgICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgVXNlLUFmdGVyLUZyZWUgYnVnIGluIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZWAgYnkgY29ycmVjdGx5IGlkZW50aWZ5aW5nIHdoZW4gdGhlIG9sZCBpbWFnZSBpcyBzYWZlIHRvIGZyZWUuIEl0IGFsc28gY2hhbmdlcyBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCB0byByZXR1cm4gdm9pZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBCUEYgdHJhbXBvbGluZSBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgc3lzY2FsbHMsIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxOWYzMGVlZWNmMDljMzRmMDc4OGQ0NjE1ODBiOWEzOTU4MDdmZjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwMjo1NDowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oCmluZGV4IDczYmFjZmM2NDQ0ZGYuLjMyNTVjNmY1ZWE2YjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGYuaApAQCAtMTUxOCw4ICYjNDM7MTUxOCw4IEBAIGludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jCiAKIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcywKIAkJCQlzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7Ci1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywKLQkJCQlzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7CiYjNDM7dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLAomIzQzOwkJCQkgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspOwogdm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzKTsKIAogLyoKQEAgLTE2MzksMTAgJiM0MzsxNjM5LDkgQEAgc3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsCiB7CiAJcmV0dXJuIC1FTk9UU1VQUDsKIH0KLXN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCi0JCQkJCSAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKQogewotCXJldHVybiAtRU5PVFNVUFA7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFncykge30KICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwppbmRleCBlZDc5OTlhZDZjNjZjLi41NDRhYjQxYTNjMjU2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYwpAQCAtMTU5NSw3ICYjNDM7MTU5NSwxOCBAQCBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKQogCiBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKQogewotCWlmICh0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSkKJiM0MzsJLyoKJiM0MzsJICogT25seSBmcmVlIG9sZF9pbWFnZSBpZiBpdCBpcyBubyBsb25nZXIgdGhlIGFjdGl2ZSBpbWFnZS4KJiM0MzsJICogV2hlbiBicGZfdHJhbXBvbGluZV91cGRhdGUoKSBmYWlscyBiZWZvcmUgbW9kaWZ5X2ZlbnRyeV9tdWx0aSgpLwomIzQzOwkgKiB1bnJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSgpIGlzIGNhbGxlZCwgY3VyX2ltYWdlIGlzIHVuY2hhbmdlZAomIzQzOwkgKiAoY3VyX2ltYWdlID09IG9sZF9pbWFnZSkgYW5kIGZ0cmFjZSBzdGlsbCBwb2ludHMgdG8gaXQuIEZyZWVpbmcKJiM0MzsJICogaXQgd291bGQgY2F1c2UgYSBVQUYgd2hlbiBmdHJhY2UgY2FsbHMgaW50byB0aGUgZnJlZWQgbWVtb3J5LgomIzQzOwkgKiBPbiBzdWNjZXNzLCBjdXJfaW1hZ2UgaXMgZWl0aGVyIGEgbmV3IGltYWdlIG9yIE5VTEwsIHNvCiYjNDM7CSAqIG9sZF9pbWFnZSAhPSBjdXJfaW1hZ2UgY29ycmVjdGx5IGlkZW50aWZpZXMgYSBzdGFsZSBpbWFnZSB0aGF0CiYjNDM7CSAqIGlzIHNhZmUgdG8gZnJlZS4KJiM0MzsJICovCiYjNDM7CWlmICh0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAmYW1wOyZhbXA7CiYjNDM7CSAgICB0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAhPSB0ci0mZ3Q7Y3VyX2ltYWdlKQogCQlicGZfdHJhbXBfaW1hZ2VfcHV0KHRyLSZndDttdWx0aV9hdHRhY2gub2xkX2ltYWdlKTsKIAogCXRyLSZndDttdWx0aV9hdHRhY2gub2xkX2ltYWdlID0gTlVMTDsKQEAgLTE3MTksNyAmIzQzOzE3MzAsOCBAQCBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsCiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKQomIzQzO3ZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywKJiM0MzsJCQkJIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKQogewogCXN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9kYXRhICpkYXRhID0gJmFtcDtsaW5rLSZndDtkYXRhOwogCXN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9ub2RlICptbm9kZTsKQEAgLTE3NDksNyAmIzQzOzE3NjEsNiBAQCBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpXwogCQlicGZfdHJhbXBvbGluZV9wdXQobW5vZGUtJmd0O3RyYW1wb2xpbmUpOwogCiAJY2xlYXJfdHJhY2luZ19tdWx0aV9kYXRhKGRhdGEpOwotCXJldHVybiAwOwogfQogCiAjdW5kZWYgZm9yX2VhY2hfbW5vZGVfY250CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKaW5kZXggODkxODk3ZjhhMWIzNS4uMjkyNjA5NTFhYTg3MSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwpAQCAtMzY4Nyw3ICYjNDM7MzY4Nyw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspCiAJc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKnRyX2xpbmsgPQogCQljb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmssIGxpbmspOwogCi0JV0FSTl9PTl9PTkNFKGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChsaW5rLSZndDtwcm9nLCB0cl9saW5rKSk7CiYjNDM7CWJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChsaW5rLSZndDtwcm9nLCB0cl9saW5rKTsKIH0KIAogc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgVHJhbXBvbGluZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQmIzM5O3MgdG91Y2hpbmcgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAsIGNoYW5naW5nIGl0cyByZXR1cm4gdHlwZSB0byBgdm9pZGAgaW5zdGVhZCBvZiBgaW50YC4gIFRoYXQmIzM5O3MgYSBiaXQgdW51c3VhbCwgYW5kIEkmIzM5O2QgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIGl0IHRvIGJlIGNvbmZpZGVudCBpbiB0aGUgY2hhbmdlIOKAkyBhcmUgdGhleSB1c2luZyB0aGUgcmV0dXJuIHZhbHVlIHNvbWV3aGVyZSBpbXBvcnRhbnQ/ICBJdCYjMzk7cyBhbHNvIGZpeGluZyBhIFVzZS1BZnRlci1GcmVlIChVQUYpIGlzc3VlIGluIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZWAgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGB0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAhPSB0ci0mZ3Q7Y3VyX2ltYWdlYC4gIFRoYXQgc291bmRzIGNyaXRpY2FsOyBVQUZzIGFyZSBuYXN0eSBhbmQgdGhpcyBsaWtlbHkgYWRkcmVzc2VzIGEgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0eS4KClRoZSBjaGFuZ2VzIGFyZSBpbiBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGFuZCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlcXVpcmVkIGZvciB0aGVzZSBmaWxlcyB0byBlbnN1cmUgdGhlIHBhdGNoIGFwcGxpZXMgY29ycmVjdGx5IHRvIHRoZSB0YXJnZXRlZCBlbnZpcm9ubWVudHMuIFNwZWNpZmljYWxseSwgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCByZWxpZXMgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX0pJVGAuIExldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGlzIHByb3Blcmx5IGd1YXJkZWQgYnkgdGhlIHJlbGV2YW50IGJ1aWxkIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjaGFuZ2UgYWZmZWN0cyBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIG5lY2Vzc2FyeSBCUEYgZmVhdHVyZXMgYXJlbiYjMzk7dCBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW1wb2xpbmUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gdHJhbXBvbGluZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJ0Zi5vIG1lbWFsbG9jLm8gcnFzcGlubG9jay5vIHN0cmVhbS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBKSVQgUmVxdWlyZW1lbnRzKioKCkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXQgc2VlbXMgdGhhdCBgQ09ORklHX0JQRl9KSVRgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBoZXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSB3b3VsZG4mIzM5O3QgZXhwZWN0IEJQRiBmdW5jdGlvbmFsaXR5IHRvIHdvcmsgd2l0aG91dCB0aGUgSklUIGNvbXBpbGVyIGVuYWJsZWQuIEl0JiMzOTtzIHRoZSBjb3JlIG9mIHRyYW5zbGF0aW5nIHRob3NlIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBpbnRvIG5hdGl2ZSBtYWNoaW5lIGNvZGUgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UuCgpOb3csIG15IG1pbmQgc2hpZnRzIHRvIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJJiMzOTttIGN1cmlvdXMgaG93IHRoaXMgcGxheXMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSB0cmFjaW5nIGZ1bmN0aW9uYWxpdHkgaXMgZGVwZW5kZW50IG9uIHRoZSBKSVQsIG9yIGlmIGl0IGNhbiB1c2Ugc29tZSBhbHRlcm5hdGl2ZSBCUEYgaW50ZXJwcmV0ZXIuIERvZXMgdGhlIHRyYWNpbmcgdXNlIG9mIEJQRiBkZW1hbmQgdGhlIEpJVD8gS25vd2luZyB0aGUgYW5zd2VyIGlzIGtleSB0byBidWlsZGluZyBhbiBvdmVyYWxsIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01NS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo1NjpDRkxBR1NfYnBmX3RyYWNlLm8gOj0gLUkkKHNyYylcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cbi0tXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU9MTA5PW9iai0kKENPTkZJR19VU0VSX0VWRU5UUykgJiM0Mzs9IHRyYWNlX2V2ZW50c191c2VyLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZToxMTA6b2JqLSQoQ09ORklHX0JQRl9FVkVOVFMpICYjNDM7PSBicGZfdHJhY2Uub1xua2VybmVsL3RyYWNlL01ha2VmaWxlLTExMS1vYmotJChDT05GSUdfS1BST0JFX0VWRU5UUykgJiM0Mzs9IHRyYWNlX2twcm9iZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE0MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkFuYWx5c2lzIG9mIGVCUEYgRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgc28gYENPTkZJR19CUEZfRVZFTlRTYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGhlcmUuIFdlIG5lZWQgdGhhdCBlbmFibGVkIHRvIGV2ZW4gYmUgaW4gdGhlIGJhbGxwYXJrLiBOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IGFuZCBhbmFseXplIHRoZSBpbXBhY3RlZCBmdW5jdGlvbnMuIExvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCwgYW5kIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2VgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgY29tcG9uZW50cyBpbiB0aGUgZUJQRiB0cmFjaW5nL3RyYW1wb2xpbmUgbGlmZWN5Y2xlLCBjbGVhcmx5LgoKSW50ZXJlc3RpbmcuLi4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCBpcyBvbiB0aGUgbGlzdC4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IHRoZSBjYWxsIGdyYXBoIGZvciB0aGF0IG9uZS4gRG9lcyBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBjYWxsIGl0IGFuZCBpcyBpdCBhbHNvIGJlaW5nIGNhbGxlZCBieSBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYD8gV2UgbmVlZCB0byB2ZXJpZnkgdGhlIHVzYWdlIHRvIGRldGVybWluZSBob3cgdGhpcyBmcmVlaW5nIG9wZXJhdGlvbiBpcyBjb29yZGluYXRlZCB3aXRoaW4gdGhlIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQgcHJvY2Vzc2VzLiBUaGUgY2FsbCBjaGFpbiBpcyB2ZXJ5IGltcG9ydGFudC4gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW50ZXJhY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1OTA9c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5Ny17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYzMz1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcwNy1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcwODpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA5LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MzM9dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTUtXHRmb3JfZWFjaF9tbm9kZShtbm9kZSwgbGluaylcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NTY6XHRcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc1Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODk4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFRyYW1wb2xpbmUgTXVsdGktQXR0YWNoL0RldGFjaCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBpcyBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjbGVhbnVwIGhhcHBlbnMsIGFuZCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24uCgpNeSBpbW1lZGlhdGUgZm9jdXMsIHRoZW4sIG5lZWRzIHRvIGJlIG9uIHRoZXNlIHRocmVlIGZ1bmN0aW9uczogYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLCBhbmQgYWxzbyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGNhbiBhY3R1YWxseSBiZSB0cmlnZ2VyZWQgZnJvbSBhIHVzZXItc3BhY2Ugc3lzY2FsbC4gVGhpbmtpbmcgYWJvdXQgdGhlIHVzdWFsIGVudHJ5IHBvaW50cywgaXQmIzM5O3MgaGlnaGx5IHByb2JhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBJIHN1c3BlY3QgaXQmIzM5O3MgcmVhY2hhYmxlIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYGJwZl9saW5rX2NyZWF0ZWAgb3IgYSBzaW1pbGFyIEFQSS4gSWYgc28sIHRoYXQgb3BlbnMgdXAgYWxsIHNvcnRzIG9mIHBvdGVudGlhbCBzZWN1cml0eSBjb25jZXJucywgd2hpY2ggSSBuZWVkIHRvIGFuYWx5emUgY2FyZWZ1bGx5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgaXRzZWxmIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfbXVsdGlfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1ODktXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTkwOnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTkxLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5Ny17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYxNS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MTY6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjE3LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjMyLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYzMzppbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM0LVx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3OS1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjgwOlx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODEtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcwNy1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcwODpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA5LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MTctXHRcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcxODpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcxOS1cdH1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzMzPXZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQzLVx0XHRkYXRhLVx1MDAzZWVudHJ5ID0gXHUwMDI2bW5vZGUtXHUwMDNlZW50cnk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzQ0Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDUtXHRcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXHUwMDI2bW5vZGUtXHUwMDNlbm9kZSwgbW5vZGUtXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzU1LVx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzU2Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgQ2FsbHMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBubyBkb3VidCwgYnV0IHRvIHJlYWxseSBncmFzcCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBxdWlja2x5IGlkZW50aWZ5aW5nICp3aGVyZSogaXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGRlc2lnbiBkZWNpc2lvbnMgc3Vycm91bmRpbmcgdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVsYXRpb25zaGlwcyBoZXJlLiBLbm93aW5nIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgYW5kIG1vZHVsZXMgdGhhdCB1c2UgdGhpcyBoZWxwcyBtZSBkZXRlcm1pbmUgdGhlIHVzZS1jYXNlcyBhbmQgcG90ZW50aWFsIGltcGFjdCB0byB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODQwPWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkxMS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTEyOlx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHByb2csIGlkcywgbGluayk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkxMy1cdGt2ZnJlZShpZHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBDYWxsIENoYWluKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIGRvd24gaG93IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGdldHMgaW52b2tlZC4gVGhlIGNvbnRleHQgaXMgdGhhdCBJIHN1c3BlY3QgYGJwZl9saW5rX2NyZWF0ZWAgbWlnaHQgYmUgcmVzcG9uc2libGUuIExldCBtZSBwdWxsIHVwIHRoZSByZWxldmFudCBjb2RlIGFuZCB2ZXJpZnkgdGhhdCBoeXBvdGhlc2lzLiBUaGUgZnVuY3Rpb24gbmFtZSBpbXBsaWVzIHNvbWUgc29ydCBvZiBtdWx0aXBsZSBhdHRhY2htZW50LCBhbmQgYGJwZl9saW5rX2NyZWF0ZWAgaXMgY2VydGFpbmx5IHRoZSBwbGFjZSB3aGVyZSBhIG5ldyBlQlBGIGxpbmsg4oCTIHdoaWNoLCBpbiBzb21lIGNhc2VzLCBpbnZvbHZlcyB0cmFjaW5nIOKAkyBpcyBlc3RhYmxpc2hlZCwgc28gdGhhdCB3b3VsZCBtYWtlIHNlbnNlIGFzIHRoZSByb290IGNhdXNlLiBJIHdpbGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBjYWxscyBhbmQgc2VlIGlmIGl0IHNlZW1zIGRpcmVjdGx5IGludm9sdmVkLCBvciBpZiBzb21lIGludGVybWVkaWFyeSBpcyBtYWtpbmcgdGhlIGNhbGwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjaW5nX211bHRpX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTU3ODQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTgzNC1cdFx0ZWxzZSBpZiAoaXNfdHJhY2luZ19tdWx0aShwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4MzU6XHRcdFx0cmV0ID0gYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHByb2csIGF0dHIpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTgzNi1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODkwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBFbnRyeSBQb2ludCBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUuIEkgY2FuIHNlZSB0aGF0IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGluZGVlZCBjYWxsZWQgZnJvbSBgbGlua19jcmVhdGVgIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGVyZWZvcmUsIG15IHByaW1hcnkgZW50cnkgcG9pbnRzIG9mIGludGVyZXN0IGFyZSBjbGVhcmx5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZGVidWdnaW5nIG9yIGFuYWx5c2lzLgoKTm93LCBjb25jZXJuaW5nIGNvbmZpZ3VyYXRpb25zLCBJJiMzOTttIGRlYWxpbmcgd2l0aCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgQlBGX0VWRU5UU2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGBCUEZfRVZFTlRTYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgYSBrZXkgY29uZmlndXJhdGlvbiwgc28gdW5kZXJzdGFuZGluZyBpdHMgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGFueSBkZWVwZXIgd29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCByZWxpZXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfRVZFTlRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9ODM5PWNvbmZpZyBFUFJPQkVfRVZFTlRTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxua2VybmVsL3RyYWNlL0tjb25maWc6ODUzOmNvbmZpZyBCUEZfRVZFTlRTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTQtXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRiBFdmVudHMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgQlBGX0VWRU5UU2AgaXMgZGVmaW5pdGVseSB0aWVkIHRvIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQgbXVjaCBpcyBjbGVhci4gTm93LCBsZXQmIzM5O3MgZGlnIGEgbGl0dGxlIGRlZXBlci4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGl0ICpyZXF1aXJlKiBgRlRSQUNFYD8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBgQlBGX0VWRU5UU2Agb2Z0ZW4gbGVhbnMgb24gZWl0aGVyIGBGVFJBQ0VgIG9yIGBLUFJPQkVfRVZFTlRTYCwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBiZSBwcmVjaXNlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgZGVwZW5kZW5jaWVzIGhlcmUuIFRoZSBiZXN0IGNvdXJzZSBvZiBhY3Rpb24gaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGZ1bGwgZGVmaW5pdGlvbiBvZiBgQlBGX0VWRU5UU2AgYW5kIHNlZSBwcmVjaXNlbHkgd2hhdCBpdCBzYXlzLiBObyBhc3N1bXB0aW9ucywganVzdCB0aGUgZGVmaW5pdGl2ZSB0cnV0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXG4gODUxOlx0XHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cbiA4NTI6XHRcbiA4NTM6XHRjb25maWcgQlBGX0VWRU5UU1xuIDg1NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDg1NTpcdFx0ZGVwZW5kcyBvbiAoS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTKSBcdTAwMjZcdTAwMjYgUEVSRl9FVkVOVFNcbiA4NTY6XHRcdGJvb2xcbiA4NTc6XHRcdGRlZmF1bHQgeVxuIDg1ODpcdFx0aGVscFxuIDg1OTpcdFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcbiA4NjA6XHRcdCAgdHJhY2Vwb2ludCBldmVudHMuXG4gODYxOlx0XG4gODYyOlx0Y29uZmlnIERZTkFNSUNfRVZFTlRTXG4gODYzOlx0XHRkZWZfYm9vbCBuXG4gODY0Olx0XG4gODY1Olx0Y29uZmlnIFBST0JFX0VWRU5UU1xuIDg2NjpcdFx0ZGVmX2Jvb2wgblxuIDg2NzpcdFxuIDg2ODpcdGNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXG4gODY5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgcHJvZ3JhbXMgdG8gb3ZlcnJpZGUgYSBrcHJvYmVkIGZ1bmN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBCUEYgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBzZXQgdXAgbXkgQlBGIGVudmlyb25tZW50LiBJdCBzZWVtcyBsaWtlIHRoZSBgQlBGX0VWRU5UU2AgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gaGF2aW5nIGBLUFJPQkVfRVZFTlRTYCBvciBgVVBST0JFX0VWRU5UU2AsIGFuZCBhbHNvIGBQRVJGX0VWRU5UU2AgZW5hYmxlZC4gVGhlcmVmb3JlLCB0byBlbnN1cmUgZXZlcnl0aGluZyYjMzk7cyBwcm9wZXJseSBlbmFibGVkLCBteSBpbW1lZGlhdGUgc3RyYXRlZ3kgaXMgdG8gZW5hYmxlIGBLUFJPQkVfRVZFTlRTYCwgYFBFUkZfRVZFTlRTYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBCUEZfSklUYC4gVGhhdCBzaG91bGQgY292ZXIgdGhlIG5lY2Vzc2FyeSBiYXNlcy4gTm93LCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgS1BST0JFX0VWRU5UU2AgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYWRkcmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtQUk9CRV9FVkVOVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz03NzA9Y29uZmlnIFBST0JFX0VWRU5UU19CVEZfQVJHU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTc4MS1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjc4Mjpjb25maWcgS1BST0JFX0VWRU5UU1xua2VybmVsL3RyYWNlL0tjb25maWctNzgzLVx0ZGVwZW5kcyBvbiBLUFJPQkVTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctODAwLVxua2VybmVsL3RyYWNlL0tjb25maWc6ODAxOmNvbmZpZyBLUFJPQkVfRVZFTlRTX09OX05PVFJBQ0Vcbmtlcm5lbC90cmFjZS9LY29uZmlnLTgwMi1cdGJvb2wgXCYjMzQ7RG8gTk9UIHByb3RlY3Qgbm90cmFjZSBmdW5jdGlvbiBmcm9tIGtwcm9iZSBldmVudHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIxNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRlcGVuZGVuY2llcyBhbmQgSklUIENvbXBpbGF0aW9uOiBBIFF1aWNrIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYEtQUk9CRV9FVkVOVFNgLiBJdCYjMzk7cyBwcmV0dHkgZnVuZGFtZW50YWwga25vd2xlZGdlIHRoYXQgdGhpcyBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byBgS1BST0JFU2AgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGhlcmUsIGVzcGVjaWFsbHkgaWYgc29tZXRoaW5nIGlzIGJlaW5nIHVwZGF0ZWQgaW4gbXkgY29kZSBvciBjb25maWd1cmF0aW9uLiBTaW5jZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBrcHJvYmVzIGluZnJhc3RydWN0dXJlLCBJIGNhbiBlYXNpbHkgcmVjYWxsIHRoaXMgcG9pbnQuCgpOb3csIGEgcmVsYXRlZCBhcmVhIHRoYXQgYWx3YXlzIHBpcXVlcyBteSBpbnRlcmVzdCBpcyB0aGUgcGVyZm9ybWFuY2UgYXNwZWN0LCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBpbXBsaWNhdGlvbnMgb2YgSklUIGNvbXBpbGF0aW9uLCBvciBgQlBGX0pJVGAsIGluIHRoaXMgY29udGV4dC4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUmIzM5O3MgYW55IHJlbGF0aW9uIGJldHdlZW4gdGhlIGtwcm9iZSBldmVudHMgYW5kIHRoZSBKSVQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1pbmQgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uIGFuZCB1c2FnZSBvZiB0aGUgQlBGIEpJVC4gVGltZSB0byBjcm9zcy1jaGVjayB0aGUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBgQlBGX0pJVGAuIFRoZXJlIGNvdWxkIGJlIHNvbWUgc3VidGxlIGludGVyYWN0aW9ucyBJIHNob3VsZCBjb25zaWRlciwgbGlrZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBLUFJPQkVfRVZFTlRTYCBhbmQgYEJQRl9KSVRgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkJQRiBKSVQgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEJQRl9KSVRgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCBzZWVtcyB0byByZWx5IG9uIGVpdGhlciBgSEFWRV9DQlBGX0pJVGAgb3IgYEhBVkVfRUJQRl9KSVRgLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgcG90ZW50aWFsIGFyY2hpdGVjdHVyZXMgaW52b2x2ZWQsICphbmQqIGFsc28gcmVxdWlyZXMgYE1PRFVMRVNgLiBHb3QgaXQuIEp1c3QgZG91YmxlLWNoZWNraW5nIHRvIGNvbmZpcm0gdGhhdCB1bmRlcnN0YW5kaW5nLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IGBrZXJuZWwvYnBmL0tjb25maWdgLiBJdCYjMzk7cyBhbHdheXMgc21hcnQgdG8gY29uZmlybSBhc3N1bXB0aW9ucywgZXZlbiB3aGVuIHRoZXkgc2VlbSBvYnZpb3VzLiBJdCYjMzk7cyB0b28gZWFzeSB0byBtYWtlIGEgc21hbGwgZXJyb3IgYW5kIHRoZW4gc3BlbmQgYSB3aGlsZSBkZWJ1Z2dpbmcgaXQgbGF0ZXIuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHN1YnRsZXR5IEkmIzM5O3ZlIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTXkgVGhpbmtpbmcgb24gQlBGIEpJVCBEZXBlbmRlbmNpZXMgYW5kIFRyYW1wb2xpbmVzKioKClJpZ2h0LCBzbyBgQlBGX0pJVGAgaGluZ2VzIG9uIGBCUEZgIGl0c2VsZiwgbmF0dXJhbGx5LiBBbmQgaXQmIzM5O3MgYWxzbyBjb25kaXRpb25hbCBvbiBlaXRoZXIgYEhBVkVfQ0JQRl9KSVRgIG9yIGBIQVZFX0VCUEZfSklUYCBiZWluZyBkZWZpbmVkLiBUaGF0IG1ha2VzIHNlbnNlOyB3ZSBuZWVkICpzb21lKiBraW5kIG9mIEpJVCBjYXBhYmlsaXR5IHRvIGVuYWJsZSB0aGUgYnJvYWRlciBKSVQgZmVhdHVyZS4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLiBUaGlzIGhhcyBtZSB3b25kZXJpbmcgaWYgYEZQUk9CRWAgb3IgYEZUUkFDRWAgYXJlIGFsc28gcHJlcmVxdWlzaXRlcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb25uZWN0aW9ucyBoZXJlLCBzbyBsZXQmIzM5O3MgY2hlY2sgaXRzIHNvdXJjZSBsb2NhdGlvbi4uLiBhaCwgaXQmIzM5O3MgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gR29vZCwgdGhhdCBuYXJyb3dzIHRoZSBzY29wZS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzOiBBcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcyBhc3NvY2lhdGVkIHdpdGggdGhpcywgYmV5b25kIHRoZSBvYnZpb3VzPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY29uZGl0aW9uYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU4OS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1OTA6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTEte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTk2OnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk3LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjE1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYxNjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfcm9sbGJhY2soc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MTcte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzItXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjMzOmludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzQtXHRcdFx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc5LVx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODA6XHRcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4MS1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA3LVx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzA4Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MDktXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcxNy1cdFx0YnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2cobW5vZGUtXHUwMDNldHJhbXBvbGluZSwgXHUwMDI2bW5vZGUtXHUwMDNlbm9kZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzE4Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfcm9sbGJhY2sobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzE5LVx0fVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MzM9dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDMtXHRcdGRhdGEtXHUwMDNlZW50cnkgPSBcdTAwMjZtbm9kZS1cdTAwM2VlbnRyeTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NDQ6XHRcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0NS1cdFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhcdTAwMjZtbm9kZS1cdTAwM2Vub2RlLCBtbm9kZS1cdTAwM2V0cmFtcG9saW5lLCBOVUxMLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTUtXHRmb3JfZWFjaF9tbm9kZShtbm9kZSwgbGluaylcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NTY6XHRcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc1Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1MTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBQcm9jZXNzIGZvciBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCoqCgpSaWdodCwgc28gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IGZ1bmN0aW9uIGdldHMgY29tcGlsZWQgd2hlbiBgdHJhbXBvbGluZS5jYCBnZXRzIGNvbXBpbGVkLiBUaGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBsaWtlIGFuIGAjaWZkZWZgLCBjb250cm9sbGluZyBpdHMgY29tcGlsYXRpb24/IElzIGl0IGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQgYmFzZWQgb24gc29tZSBmZWF0dXJlIGZsYWcgb3IgY29uZmlndXJhdGlvbiBvcHRpb24/IFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGF2YWlsYWJpbGl0eSBhbmQgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggb3RoZXIgY29tcG9uZW50cy4gR290dGEgY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBndWFyZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0xNTE3PWludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcyk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE1MTgtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE1MTk6aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTIwLVx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspO1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MTYzMz1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaGFzX3RyYW1wb2xpbmUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMTYzNi19XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE2Mzc6c3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTE2MzgtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk4OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgQlBGIEhlYWRlciYjMzk7cyBHdWFyZHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpdGhpbiBgaW5jbHVkZS9saW51eC9icGYuaGAuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB3aGljaCBgI2lmZGVmYCBkaXJlY3RpdmVzLCBvciBzaW1pbGFyIGNvbnN0cnVjdHMgbGlrZSBgI2lmIGRlZmluZWQoKWAsIGFyZSB1c2VkIHRvIGd1YXJkIHRoZSBjb3JlIGRlY2xhcmF0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLiBJIHdhbnQgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIG9yIGtlcm5lbCB2ZXJzaW9ucywgb3IgcGVyaGFwcyBldmVuIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMsIHRyaWdnZXIgb3IgZGlzYWJsZSBjZXJ0YWluIEJQRiBmdW5jdGlvbmFsaXRpZXMuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGV2b2x1dGlvbiBvZiB0aGUgQlBGIEFQSSBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQgYWNyb3NzIHZhcmlvdXMgY29uZmlndXJhdGlvbnMuIEtub3dpbmcgdGhlc2UgZ3VhcmRzIGlzIGNydWNpYWwgZm9yIGNvbXBhdGliaWxpdHkgYW5hbHlzaXMgYW5kIHVuZGVyc3RhbmRpbmcgd2hpY2ggQlBGIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIHdoaWNoIGFyZSBkZXByZWNhdGVkIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIHVuZGVybHlpbmcga2VybmVsIHZlcnNpb25zLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZ3VhcmRzIHJlbGF0aW5nIHRvIGtlcm5lbCB2ZXJzaW9ucywgc3BlY2lmaWMgaGFyZHdhcmUgKGxpa2UgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgc3BlY2lhbGl6ZWQgaW5zdHJ1Y3Rpb25zKSwgb3IgcG9zc2libHkgZXZlbiBvcHRpb25hbCBCUEYgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTUwMDpcdFx0XHRyZXR1cm4gLUUyQklHO1xuMTUwMTpcdFxuMTUwMjpcdFx0cmV0dXJuIDA7XG4xNTAzOlx0fVxuMTUwNDpcdFxuMTUwNTpcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rO1xuMTUwNjpcdFxuMTUwNzpcdCNpZmRlZiBDT05GSUdfQlBGX0pJVFxuMTUwODpcdGludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuMTUwOTpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbjE1MTA6XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpO1xuMTUxMTpcdGludCBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4xNTEyOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4xNTEzOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2cpO1xuMTUxNDpcdHN0cnVjdCBicGZfdHJhbXBvbGluZSAqYnBmX3RyYW1wb2xpbmVfZ2V0KHU2NCBrZXksXG4xNTE1Olx0XHRcdFx0XHRcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKTtcbjE1MTY6XHR2b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKTtcbjE1MTc6XHRpbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY3MpO1xuMTUxODpcdFxuMTUxOTpcdGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbjE1MjA6XHRcdFx0XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcbjE1MjE6XHR2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4xNTIyOlx0XHRcdFx0XHQgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspO1xuMTUyMzpcdHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFncyk7XG4xNTI0Olx0XG4xNTI1Olx0LypcbjE1MjY6XHQgKiBXaGVuIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydHMgU1RBVElDX0NBTEwgcmVwbGFjZSB0aGUgYnBmX2Rpc3BhdGNoZXJfZm5cbjE1Mjc6XHQgKiBpbmRpcmVjdGlvbiB3aXRoIGEgZGlyZWN0IGNhbGwgdG8gdGhlIGJwZiBwcm9ncmFtLiBJZiB0aGUgYXJjaGl0ZWN0dXJlIGRvZXNcbjE1Mjg6XHQgKiBub3QgaGF2ZSBTVEFUSUNfQ0FMTCwgYXZvaWQgYSBkb3VibGUtaW5kaXJlY3Rpb24uXG4xNTI5Olx0ICovXG4xNTMwOlx0I2lmZGVmIENPTkZJR19IQVZFX1NUQVRJQ19DQUxMXG4xNTMxOlx0XG4xNTMyOlx0I2RlZmluZSBfX0JQRl9ESVNQQVRDSEVSX1NDX0lOSVQoX25hbWUpXHRcdFx0XHRcXFxuMTUzMzpcdFx0LnNjX2tleSA9IFx1MDAyNlNUQVRJQ19DQUxMX0tFWShfbmFtZSksXHRcdFx0XFxcbjE1MzQ6XHRcdC5zY190cmFtcCA9IFNUQVRJQ19DQUxMX1RSQU1QX0FERFIoX25hbWUpLFxuMTUzNTpcdFxuMTUzNjpcdCNkZWZpbmUgX19CUEZfRElTUEFUQ0hFUl9TQyhuYW1lKVx0XHRcdFx0XFxcbjE1Mzc6XHRcdERFRklORV9TVEFUSUNfQ0FMTChicGZfZGlzcGF0Y2hlcl8jI25hbWUjI19jYWxsLCBicGZfZGlzcGF0Y2hlcl9ub3BfZnVuYylcbjE1Mzg6XHRcbjE1Mzk6XHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfQ0FMTChuYW1lKVx0XHRcdFx0XFxcbjE1NDA6XHRcdHN0YXRpY19jYWxsKGJwZl9kaXNwYXRjaGVyXyMjbmFtZSMjX2NhbGwpKGN0eCwgaW5zbnNpLCBicGZfZnVuYylcbjE1NDE6XHRcbjE1NDI6XHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfVVBEQVRFKF9kLCBfbmV3KVx0XHRcdFxcXG4xNTQzOlx0XHRfX3N0YXRpY19jYWxsX3VwZGF0ZSgoX2QpLVx1MDAzZXNjX2tleSwgKF9kKS1cdTAwM2VzY190cmFtcCwgKF9uZXcpKVxuMTU0NDpcdFxuMTU0NTpcdCNlbHNlXG4xNTQ2Olx0I2RlZmluZSBfX0JQRl9ESVNQQVRDSEVSX1NDX0lOSVQobmFtZSlcbjE1NDc6XHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfU0MobmFtZSlcbjE1NDg6XHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfQ0FMTChuYW1lKVx0XHRicGZfZnVuYyhjdHgsIGluc25zaSlcbjE1NDk6XHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfVVBEQVRFKF9kLCBfbmV3KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIEJQRiBKSVQgQ29uZmlndXJhdGlvbiBhbmQgTXVsdGktQXR0YWNoKioKClJpZ2h0LCBzbyBgQ09ORklHX0JQRl9KSVRgIGlzIHRoZSBiaWcga2FodW5hLCB0aGUgcHJpbWFyeSBzd2l0Y2ggdGhhdCBjb250cm9scyB0aGUgZW50aXJlIEJQRiBKdXN0LUluLVRpbWUgY29tcGlsZXIuIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCByZWFsbHkuIEFueSBCUEYtcmVsYXRlZCB3b3JrLCBlc3BlY2lhbGx5IG9wdGltaXphdGlvbnMsIGxpa2VseSBoaW5nZXMgb24gdGhpcyBiZWluZyBlbmFibGVkIGF0IGNvbXBpbGUgdGltZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11bHRpLWF0dGFjaCB0cmFjaW5nIGlzIGhhbmRsZWQuIExldCBtZSBsb29rIGF0IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGF0IGZ1bmN0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgbG93ZG93biBvbiBob3cgbXVsdGlwbGUgQlBGIHByb2dyYW1zIGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgc2FtZSB0cmFjZXBvaW50LCBrcHJvYmUsIG9yIHVwcm9iZS4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBjb25jdXJyZW5jeSBhbmQgdGhlIGltcGFjdCBvbiB0aGUgSklUIHByb2Nlc3MuIEkgYmV0IHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgaW4gdGhlcmUgYWJvdXQgcHJvZ3JhbSBvcmRlcmluZywgcmVzb3VyY2UgY29udGVudGlvbiwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIEkmIzM5O20gdHJ5aW5nIHRvIG9wdGltaXplLiBUaW1lIHRvIGRpdmUgaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODE5PXN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM5LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4NDA6aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4NDEte1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTI5LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM5MzA6aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc1OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgQ29uZnVzaW9uKioKCkhvbGQgb24gYSBzZWNvbmQuLi4gSSYjMzk7bSBqdXN0IHJldmlld2luZyB0aGUgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgZmlsZSBhbmQsIHdhaXQgYSBtaW51dGUsIGFyZSB0aGVyZSAqdHdvKiBkZWZpbml0aW9ucyBvZiBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpbiB0aGVyZT8gVGhpcyBpcyBkZWZpbml0ZWx5IHVudXN1YWwgYW5kIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgaXMgdGhlIGNhc2UuIElzIG9uZSBvZiB0aGVtIGEgcHJvdG90eXBlIGFuZCB0aGUgb3RoZXIgdGhlIGFjdHVhbCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbj8gT3IgYXJlIHRoZXkgYm90aCBpbXBsZW1lbnRhdGlvbnMsIHBlcmhhcHMgZm9yIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIG9yIGtlcm5lbCB2ZXJzaW9ucywgY29uZGl0aW9uYWwgb24gc29tZSBtYWNybz8gT3IgbWF5YmUgaXTigJlzIGEgY2FzZSBvZiBvbmUgYmVpbmcgYSBsZWdhY3kgZnVuY3Rpb24gYW5kIHRoZSBvdGhlciB0aGUgbmV3IHJlcGxhY2VtZW50PyBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgY2xhcmlmeSB0aGUgcHVycG9zZSBvZiBlYWNoIGRlZmluaXRpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVpciBwcmVzZW5jZS4gVGhpcyBjb3VsZCBpbmRpY2F0ZSBhIHN1YnRsZSBidWcgb3IsIHdvcnNlLCBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGlmIGEgY29uZnVzaW9uIGluIGZ1bmN0aW9uIGNhbGxzIGNhbiBiZSBleHBsb2l0ZWQuIEkgbXVzdCBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4MzA6XHRcbjM4MzE6XHRcdGZvciAoaW50IGkgPSAxOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4zODMyOlx0XHRcdGlmIChpZHNbaV0gPT0gaWRzW2kgLSAxXSkge1xuMzgzMzpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4zODM0Olx0XHRcdFx0YnJlYWs7XG4zODM1Olx0XHRcdH1cbjM4MzY6XHRcdH1cbjM4Mzc6XHRcdHJldHVybiBlcnI7XG4zODM4Olx0fVxuMzgzOTpcdFxuMzg0MDpcdGludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbjM4NDE6XHR7XG4zODQyOlx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XG4zODQzOlx0XHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XG4zODQ0Olx0XHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xuMzg0NTpcdFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XG4zODQ2Olx0XHR1NjQgX191c2VyICp1Y29va2llcztcbjM4NDc6XHRcdHU2NCAqY29va2llcyA9IE5VTEw7XG4zODQ4Olx0XHR1MzIgX191c2VyICp1aWRzO1xuMzg0OTpcdFx0aW50IGVycjtcbjM4NTA6XHRcbjM4NTE6XHRcdHVpZHMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmlkcyk7XG4zODUyOlx0XHRjbnQgPSBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuY250O1xuMzg1MzpcdFxuMzg1NDpcdFx0aWYgKCFjbnQgfHwgIXVpZHMpXG4zODU1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzg1NjpcdFx0aWYgKGNudCBcdTAwM2UgTUFYX1RSQUNJTkdfTVVMVElfQ05UKVxuMzg1NzpcdFx0XHRyZXR1cm4gLUUyQklHO1xuMzg1ODpcdFx0aWYgKGF0dHItXHUwMDNlbGlua19jcmVhdGUuZmxhZ3MgfHwgYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50YXJnZXRfZmQpXG4zODU5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzg2MDpcdFxuMzg2MTpcdFx0aWRzID0ga3ZtYWxsb2Nfb2JqcygqaWRzLCBjbnQpO1xuMzg2MjpcdFx0aWYgKCFpZHMpXG4zODYzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzg2NDpcdFxuMzg2NTpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGlkcywgdWlkcywgY250ICogc2l6ZW9mKCppZHMpKSkge1xuMzg2NjpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMzg2NzpcdFx0XHRnb3RvIGVycm9yO1xuMzg2ODpcdFx0fVxuMzg2OTpcdFxuMzg3MDpcdFx0dWNvb2tpZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmNvb2tpZXMpO1xuMzg3MTpcdFx0aWYgKHVjb29raWVzKSB7XG4zODcyOlx0XHRcdGNvb2tpZXMgPSBrdm1hbGxvY19vYmpzKCpjb29raWVzLCBjbnQpO1xuMzg3MzpcdFx0XHRpZiAoIWNvb2tpZXMpIHtcbjM4NzQ6XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMzg3NTpcdFx0XHRcdGdvdG8gZXJyb3I7XG4zODc2Olx0XHRcdH1cbjM4Nzc6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGNvb2tpZXMsIHVjb29raWVzLCBjbnQgKiBzaXplb2YoKmNvb2tpZXMpKSkge1xuMzg3ODpcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4zODc5Olx0XHRcdFx0Z290byBlcnJvcjtcbjM4ODA6XHRcdFx0fVxuMzg4MTpcdFx0fVxuMzg4MjpcdFxuMzg4MzpcdFx0ZXJyID0gY2hlY2tfZHVwX2lkcyhpZHMsIGNvb2tpZXMsIGNudCk7XG4zODg0Olx0XHRpZiAoZXJyKVxuMzg4NTpcdFx0XHRnb3RvIGVycm9yO1xuMzg4NjpcdFxuMzg4NzpcdFx0aWYgKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1RSQUNFX0ZTRVNTSU9OX01VTFRJKSB7XG4zODg4Olx0XHRcdGZleGl0cyA9IGt2bWFsbG9jX29ianMoKmZleGl0cywgY250KTtcbjM4ODk6XHRcdFx0aWYgKCFmZXhpdHMpIHtcbjM4OTA6XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMzg5MTpcdFx0XHRcdGdvdG8gZXJyb3I7XG4zODkyOlx0XHRcdH1cbjM4OTM6XHRcdH1cbjM4OTQ6XHRcbjM4OTU6XHRcdGxpbmsgPSBrdnphbGxvY19mbGV4KCpsaW5rLCBub2RlcywgY250KTtcbjM4OTY6XHRcdGlmICghbGluaykge1xuMzg5NzpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMzg5ODpcdFx0XHRnb3RvIGVycm9yO1xuMzg5OTpcdFx0fVxuMzkwMDpcdFxuMzkwMTpcdFx0YnBmX2xpbmtfaW5pdChcdTAwMjZsaW5rLVx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSxcbjM5MDI6XHRcdFx0ICAgICAgXHUwMDI2YnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKTtcbjM5MDM6XHRcbjM5MDQ6XHRcdGVyciA9IGJwZl9saW5rX3ByaW1lKFx1MDAyNmxpbmstXHUwMDNlbGluaywgXHUwMDI2bGlua19wcmltZXIpO1xuMzkwNTpcdFx0aWYgKGVycilcbjM5MDY6XHRcdFx0Z290byBlcnJvcjtcbjM5MDc6XHRcbjM5MDg6XHRcdGxpbmstXHUwMDNlbm9kZXNfY250ID0gY250O1xuMzkwOTpcdFx0bGluay1cdTAwM2Vjb29raWVzID0gY29va2llcztcbjM5MTA6XHRcdGxpbmstXHUwMDNlZmV4aXRzID0gZmV4aXRzO1xuMzkxMTpcdFxuMzkxMjpcdFx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHByb2csIGlkcywgbGluayk7XG4zOTEzOlx0XHRrdmZyZWUoaWRzKTtcbjM5MTQ6XHRcdGlmIChlcnIpIHtcbjM5MTU6XHRcdFx0YnBmX2xpbmtfY2xlYW51cChcdTAwMjZsaW5rX3ByaW1lcik7XG4zOTE2Olx0XHRcdHJldHVybiBlcnI7XG4zOTE3Olx0XHR9XG4zOTE4Olx0XHRyZXR1cm4gYnBmX2xpbmtfc2V0dGxlKFx1MDAyNmxpbmtfcHJpbWVyKTtcbjM5MTk6XHRcbjM5MjA6XHRlcnJvcjpcbjM5MjE6XHRcdGt2ZnJlZShmZXhpdHMpO1xuMzkyMjpcdFx0a3ZmcmVlKGNvb2tpZXMpO1xuMzkyMzpcdFx0a3ZmcmVlKGlkcyk7XG4zOTI0Olx0XHRrdmZyZWUobGluayk7XG4zOTI1Olx0XHRyZXR1cm4gZXJyO1xuMzkyNjpcdH1cbjM5Mjc6XHRcbjM5Mjg6XHQjZWxzZVxuMzkyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQzNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIGhlcmUgd2UgYXJlLCBzdGFyaW5nIGRvd24gdGhpcyBgI2Vsc2VgIGJsb2NrLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzIGRyaXZpbmcgaXQ/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3RhdGUgdGhhdCBsZWFkcyB0byB0aGlzIGJyYW5jaC4gVGhlIGNydWNpYWwgY29udGV4dCBoZXJlIGlzIHRoZSBwcmVjZWRpbmcgYCNpZmRlZmAgb3IgYCNpZm5kZWZgIGNvbnN0cnVjdC4gVGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIHRoZSBrZXkgaGVyZS4KCk15IG1pbmQgaW1tZWRpYXRlbHkgcmFjZXMgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zOiBXaGF0IHByZXByb2Nlc3NvciBzeW1ib2xzIGFyZSBkZWZpbmVkPyBBbmQsIGltcG9ydGFudGx5LCAqaG93KiBhcmUgdGhleSBkZWZpbmVkPyBJcyB0aGlzIGEgc2ltcGxlIGZsYWcsIGEgbWFjcm8gd2l0aCBhcmd1bWVudHMsIG9yIGEgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb24gc2V0dGluZz8gQXJlIHRoZXJlIG5lc3RlZCBjb25kaXRpb25hbHMgSSBuZWVkIHRvIHVudGFuZ2xlPyBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byB3aGVyZSB0aGUgYCNpZmRlZmAgb3IgYCNpZm5kZWZgIGlzIHVzZWQgYW5kIGNvbnNpZGVyIGFsbCB0aGUgZmlsZXMuCgpUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBsb2dpY2FsIGZsb3cgb2YgdGhlIGNvZGUgYXQgY29tcGlsZSB0aW1lLiBJbiBvcmRlciB0byB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gcGF0aHdheSwgSSBoYXZlIHRvIGtub3cgdGhlIHN5bWJvbCBkZWZpbml0aW9uLiBUaGlzIGlzIHRoZSBseW5jaHBpbiwgdGhlIGNvbmRpdGlvbiB0aGF0IGRpY3RhdGVzIHdoZXRoZXIgdGhpcyBgI2Vsc2VgIGJsb2NrIGlzIGV2ZW4gaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGNvbXBpbGF0aW9uIHVuaXQuIFdoYXQgaXMgdGhlIHZhbHVlIG9mIHRoaXMgc3ltYm9sLCBpdHMgc2NvcGUsIGFuZCBob3cgaXQgaXMgYmVpbmcgZGVmaW5lZD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00Ny1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo0ODojaWZkZWYgQ09ORklHX01PRFVMRVNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00OS1zdHJ1Y3QgYnBmX3RyYWNlX21vZHVsZSB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE3Mz11bnNpZ25lZCBpbnQgdHJhY2VfY2FsbF9icGZfZmF1bHRhYmxlKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsLCB2b2lkICpjdHgpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4NC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxODU6I2lmZGVmIENPTkZJR19CUEZfS1BST0JFX09WRVJSSURFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTg2LUJQRl9DQUxMXzIoYnBmX292ZXJyaWRlX3JldHVybiwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdW5zaWduZWQgbG9uZywgcmMpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMwNj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfa2VybmVsX3N0cl9wcm90byA9IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMxNTojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE2LUJQRl9DQUxMXzMoYnBmX3Byb2JlX3JlYWRfY29tcGF0LCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05NjE9QlRGX1NFVF9TVEFSVChidGZfYWxsb3dsaXN0X2RfcGF0aClcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5NjI6I2lmZGVmIENPTkZJR19TRUNVUklUWVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2My1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05NjU9QlRGX0lEKGZ1bmMsIHNlY3VyaXR5X2ZpbGVfb3Blbilcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05NjYtI2VuZGlmXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTY3OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfUEFUSFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2OC1CVEZfSUQoZnVuYywgc2VjdXJpdHlfcGF0aF90cnVuY2F0ZSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTA3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2VudHJ5X2lwKHVuc2lnbmVkIGxvbmcgZmVudHJ5X2lwKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwNzYte1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwNzc6I2lmZGVmIENPTkZJR19YODZfS0VSTkVMX0lCVFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwNzgtXHRpZiAoaXNfZW5kYnIoKHZvaWQgKikoZmVudHJ5X2lwIC0gRU5EQlJfSU5TTl9TSVpFKSkpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEwODQ9QlBGX0NBTExfMShicGZfZ2V0X2Z1bmNfaXBfa3Byb2JlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDg4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwODk6I2lmZGVmIENPTkZJR19VUFJPQkVTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA5MC1cdHJ1bl9jdHggPSBjb250YWluZXJfb2YoY3VycmVudC1cdTAwM2VicGZfY3R4LCBzdHJ1Y3QgYnBmX3RyYWNlX3J1bl9jdHgsIHJ1bl9jdHgpO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMjc0PWJwZl90cmFjaW5nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEyODAtXHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG87XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTI4MTojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTI4Mi1cdGNhc2UgQlBGX0ZVTkNfcHJvYmVfcmVhZDpcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTM0Mz1rcHJvYmVfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMzUxLVx0XHRyZXR1cm4gcHJvZy1cdTAwM2VzbGVlcGFibGUgPyBcdTAwMjZicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA6IFx1MDAyNmJwZl9nZXRfc3RhY2tfcHJvdG87XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTM1MjojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMzUzLVx0Y2FzZSBCUEZfRlVOQ19vdmVycmlkZV9yZXR1cm46XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE3MjY9dHJhY2luZ19wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MzAtXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNzMxOiNpZmRlZiBDT05GSUdfTkVUXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTczMi1cdGNhc2UgQlBGX0ZVTkNfc2tiX291dHB1dDpcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTgyOD1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHJhd190cmFjZXBvaW50X3Byb2dfb3BzID0ge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4Mjk6I2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODMwLVx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjA5PWludCBicGZfZ2V0X3BlcmZfZXZlbnRfaW5mbyhjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHUzMiAqcHJvZ19pZCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI0My1cdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjI0NDojaWZkZWYgQ09ORklHX0tQUk9CRV9FVkVOVFNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ1LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IFRSQUNFX0VWRU5UX0ZMX0tQUk9CRSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI0OS0jZW5kaWZcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjUwOiNpZmRlZiBDT05GSUdfVVBST0JFX0VWRU5UU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNTEtXHRcdGlmIChmbGFncyBcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfVVBST0JFKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjczPXN1YnN5c19pbml0Y2FsbChzZW5kX3NpZ25hbF9pcnFfd29ya19pbml0KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNzU6I2lmZGVmIENPTkZJR19NT0RVTEVTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3Ni1zdGF0aWMgaW50IGJwZl9ldmVudF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBvcCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjMyOT1zdHJ1Y3QgYnBmX3Nlc3Npb25fcnVuX2N0eCB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjMzNTojaWZkZWYgQ09ORklHX0ZQUk9CRVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzYtc3RydWN0IGJwZl9rcHJvYmVfbXVsdGlfbGluayB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI0NDk9c3RhdGljIGludCBicGZfa3Byb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI0OTk6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUwMC1zdGF0aWMgdm9pZCBicGZfa3Byb2JlX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjUyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfa3Byb2JlX211bHRpX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUyOC1cdC5maWxsX2xpbmtfaW5mbyA9IGJwZl9rcHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyNTI5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI1MzAtXHQuc2hvd19mZGluZm8gPSBicGZfa3Byb2JlX211bHRpX3Nob3dfZmRpbmZvLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yOTQ0PXN0YXRpYyB1NjQgYnBmX2twcm9iZV9tdWx0aV9lbnRyeV9pcChzdHJ1Y3QgYnBmX3J1bl9jdHggKmN0eClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk0OS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyOTUwOiNpZmRlZiBDT05GSUdfVVBST0JFU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI5NTEtc3RydWN0IGJwZl91cHJvYmVfbXVsdGlfbGluaztcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzAwOD1zdGF0aWMgaW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzA3NTojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMDc2LXN0YXRpYyB2b2lkIGJwZl91cHJvYmVfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl91cHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTE5LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMxMjA6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzEyMS1cdC5zaG93X2ZkaW5mbyA9IGJwZl91cHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3MDM9c3RhdGljIGludCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc1Ni1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzU3OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTgtc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNzg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4Ny1cdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc4ODojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg5LVx0LnNob3dfZmRpbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzY5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIE11bHRpLUF0dGFjaCBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gcmV2aWV3aW5nIHRoZSBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBmaWxlLCBhbmQgSSYjMzk7bSBub3QgaW1tZWRpYXRlbHkgc3BvdHRpbmcgdGhlIGAjaWZkZWZgIGNvbmRpdGlvbmFsIHN1cnJvdW5kaW5nIHRoZSBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBmdW5jdGlvbi4gVGhhdCBzZWVtcy4uLiBvZGQuIEkgd2FzIGV4cGVjdGluZyBpdCB0byBiZSB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0IGlzbiYjMzk7dCwgb3Igd2hlcmUgaXQgbWlnaHQgaGF2ZSBiZWVuIHBsYWNlZC4gUmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgYCNlbHNlYCBibG9jayBzdGFydGluZyBhcm91bmQgbGluZSAzOTI5LiBQZXJoYXBzIHRoZSBwcmVwcm9jZXNzb3IgbG9naWMgaXMgbW9yZSBjb21wbGV4IHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZCwgYW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBpbmNsdXNpb24gaXMgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCBtYW5uZXIsIG9yIHVuZGVyIGEgZGlmZmVyZW50IGNvbmRpdGlvbiB0aGF0IGlzIGRlZmluZWQgZWxzZXdoZXJlLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZSBtdWx0aS1hdHRhY2ggY2FwYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzkyMDpcdGVycm9yOlxuMzkyMTpcdFx0a3ZmcmVlKGZleGl0cyk7XG4zOTIyOlx0XHRrdmZyZWUoY29va2llcyk7XG4zOTIzOlx0XHRrdmZyZWUoaWRzKTtcbjM5MjQ6XHRcdGt2ZnJlZShsaW5rKTtcbjM5MjU6XHRcdHJldHVybiBlcnI7XG4zOTI2Olx0fVxuMzkyNzpcdFxuMzkyODpcdCNlbHNlXG4zOTI5Olx0XG4zOTMwOlx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuMzkzMTpcdHtcbjM5MzI6XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjM5MzM6XHR9XG4zOTM0Olx0XG4zOTM1Olx0I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyBcdTAwMjZcdTAwMjYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODU3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzOgoKKipEZWNvZGluZyB0aGlzIFByZXByb2Nlc3NvciBNYXplKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTICZhbXA7JmFtcDsgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnQsIG9yIG1heWJlIGl0JiMzOTtzIG5vdC4gV2FpdCBhIG1pbnV0ZS4uLiBubywgSSYjMzk7bSBiZWluZyBmb29sZWQgaGVyZS4gVGhhdCYjMzk7cyBhY3R1YWxseSBhbiBgI2Vsc2VgIGJsb2NrLiBUaGUgcmVhbCBrZXkgaXMgdW5kZXJzdGFuZGluZyB0aGUgYCNpZmAgc3RhdGVtZW50IHRoYXQgdGhpcyBgI2Vsc2VgIGlzIHRpZWQgdG8uIEkmIzM5O3ZlIGdvdCB0byB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBicmFuY2ggYmVnaW5zLiBHb3R0YSBmaW5kIHdoZXJlIHRoYXQgaW5pdGlhbCBjb25kaXRpb25hbCBzdGF0ZW1lbnQgaXMgZGVmaW5lZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgYCNlbHNlYCBpcyBldmVuIGFjdGl2ZSBoZXJlLiBJIG5lZWQgdGhlIGNvbnRleHQgb2YgdGhhdCBgI2lmYCB0byBtYWtlIHNlbnNlIG9mIHdoYXQgdGhpcyBibG9jayBpcyBhY3R1YWxseSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNjgwPV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY4MS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjgyOiNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXHUwMDI2XHUwMDI2IFxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY4My0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM5MzA9aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTM0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM5MzU6I2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyBcdTAwMjZcdTAwMjYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDU5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqVmVyaWZ5aW5nIEZUUkFDRSBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgdGhhdCB3ZSYjMzk7dmUgZ290IHRoZSBmb3VuZGF0aW9uYWwgRlRSQUNFIGNvbXBvbmVudHMgc2V0IHVwIGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nLCB5ZXMsIGJvdGggYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGFyZSBhYnNvbHV0ZWx5IGVzc2VudGlhbCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGV5IGFyZSBub24tbmVnb3RpYWJsZSBwcmVyZXF1aXNpdGVzLiBOb3csIGp1c3QgdG8gbWFrZSBkb3VibHkgc3VyZSwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBjaGVjayBvZiBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gSSB3YW50IHRvIHZlcmlmeSB0aGF0IHRoaXMgY3JpdGljYWwgb3B0aW9uIGlzIGVuYWJsZWQgYW5kIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4gb2YgdGhlIGRpcmVjdCBjYWxsIG9wdGltaXphdGlvbiwgc28gd2UgaGF2ZSB0byBlbnN1cmUgaXQmIzM5O3MgaW4gcGxhY2UgYmVmb3JlIHdlIGxvb2sgYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTMyND1jb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgyOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipVbmRlcnN0YW5kaW5nIHRoZSBLZXJuZWwmIzM5O3MgRHluYW1pYyBGdHJhY2UgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCBtZSBicmVhayBkb3duIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBgRFlOQU1JQ19GVFJBQ0VgIGNvbmZpZ3VyYXRpb24gYSBiaXQuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIGJ1dCBsaWtlIGFueSBnb29kIHN5c3RlbSwgdGhlcmUgYXJlIGRlcGVuZGVuY2llcyB0byBjb25zaWRlci4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgcmVsaWVzIGhlYXZpbHkgb24gYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGRpcmVjdCBjYWxscyBwcm9iYWJseSBuZWVkIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiBhbmQgdHJhY2tpbmcsIHdoaWNoIHRoZSAmIzM0O1dJVEhfUkVHUyYjMzQ7IHBhcnQgd291bGQgZmFjaWxpdGF0ZS4gSXQmIzM5O3MgYWxtb3N0IGxpa2UgYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AgbGF5cyB0aGUgZ3JvdW5kd29yayBhbmQgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBidWlsZHMgdXBvbiBpdCwgcHJvdmlkaW5nIHRoYXQgZmVhdHVyZS4KCk5vdywgdGhhdCBzYWlkIEkgbmVlZCB0byBjb25zaWRlciBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIHdoaWNoIEkgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgbXkgYXJjaGl0ZWN0dXJlIGV2ZW4gKnN1cHBvcnRzKiB0aGlzIGRpcmVjdCBjYWxsIG1ldGhvZC4gSXQmIzM5O3MgYWx3YXlzIGltcG9ydGFudCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLCBhcyBzb21lIGFyY2hpdGVjdHVyZXMgbWlnaHQgbm90IGhhdmUgdGhlIGNhcGFiaWxpdGllcyB0byBpbXBsZW1lbnQgdGhhdCBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjU6XHRcdGRlZl9ib29sIHlcbiAzMjY6XHRcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VcbiAzMjc6XHRcdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcbiAzMjg6XHRcbiAzMjk6XHRjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbiAzMzA6XHRcdGRlZl9ib29sIHlcbiAzMzE6XHRcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTIHx8IERZTkFNSUNfRlRSQUNFX1dJVEhfQVJHU1xuIDMzMjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG4gMzMzOlx0XG4gMzM0Olx0Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfQ0FMTF9PUFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzMTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkNvbmZpZ3VyYXRpb24gQ29udW5kcnVtcyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIHdlZWRzIHdpdGggZnRyYWNlIGFnYWluLiBSaWdodCwgd2UgYWJzb2x1dGVseSBuZWVkIGJvdGggYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYC4gQnV0IGhhbmcgb24gYSBzZWNvbmQuLi4gaXNuJiMzOTt0IGBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgaGVyZSBhbmQgdGhhdCBvdXIgcGxhdGZvcm0gaXMgYWN0dWFsbHkgY2FwYWJsZSBvZiB3aGF0IHdlJiMzOTtyZSBhaW1pbmcgZm9yLiBMZXQmIzM5O3MgZ28gdmVyaWZ5IHRoaXMgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgVHJhY2UgRmVhdHVyZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGlzLiBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHVzZSBgZ3JlcGAuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIElzIGl0IGluIGEgS2NvbmZpZyBmaWxlPyBNYXliZSBpdCYjMzk7cyBkZWZpbmVkIGluIG11bHRpcGxlIHBsYWNlcy4gVGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBga2VybmVsL3RyYWNlL0tjb25maWdgLCBidXQgSSB3YW50IHRvIGJlIGNvbXByZWhlbnNpdmUsIGp1c3QgaW4gY2FzZSB0aGlzIGlzIGEgbW9yZSBjb21wbGV4IHNpdHVhdGlvbi4gU28sIEkgbmVlZCB0byBjaGVjayBlaXRoZXIgdGhlcmUgb3IsIGlkZWFsbHksIHNlYXJjaCB0aGUgd2hvbGUga2VybmVsIHRyZWUgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLiBJJiMzOTtsbCBnZXQgdGhhdCBzZWFyY2ggZ29pbmcgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9NTA9Y29uZmlnIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjUzOmNvbmZpZyBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xua2VybmVsL3RyYWNlL0tjb25maWctNTQtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODcyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeS4gSGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHByb3ZpZGVkIHRleHQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSB0aG91Z2h0IHByb2Nlc3MsIGFuZCBhc3N1bWluZyBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqQW5hbHl6aW5nIHRoZSBTZWxlY3Rpb24gUHJvY2VzcyoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbiBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKnByZWNpc2VseSogd2hhdCB0aGUgcHJvY2VzcyBpcyB0cnlpbmcgdG8gc2VsZWN0LiBJcyBpdCBhIHNwZWNpZmljIGVsZW1lbnQsIGEgZGF0YSBwb2ludCwgYW4gYWxnb3JpdGhtPyBXaGF0IGFyZSB0aGUgaW5oZXJlbnQgY2hhcmFjdGVyaXN0aWNzIG9mIHdoYXRldmVyJiMzOTtzIGJlaW5nIHNlbGVjdGVkPyBVbmRlcnN0YW5kaW5nIHRoZSAqaW5wdXRzKiBpcyBjcnVjaWFsIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIHRoaW5rIGFib3V0IHRoZSBzZWxlY3Rpb24gbWVjaGFuaXNtIGl0c2VsZi4gSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgY29uZGl0aW9uYWwgc3RhdGVtZW50LCBhIGNvbXBsZXggd2VpZ2h0aW5nIHN5c3RlbSwgb3Igc29tZXRoaW5nIG1vcmUgYWR2YW5jZWQgbGlrZSBhIG1hY2hpbmUgbGVhcm5pbmcgbW9kZWwgYXQgcGxheT8gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCB0aGUgcG9zc2liaWxpdGllcy4gTXkgZXhwZXJpZW5jZSBkaWN0YXRlcyB0aGF0IEkgbXVzdCBsb29rIGNsb3NlbHkgYXQgdGhlIGRhdGEuIEkmIzM5O3ZlIHNlZW4gaXQgYWxsLCBhbmQga25vdyB0byBjb25zaWRlciBhbGwgYW5nbGVzIGFuZCBwb3NzaWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0zMzctXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TQ0hFRF9NQ1x0XHRpZiBTTVBcbmFyY2gveDg2L0tjb25maWc6MzM4Olx0c2VsZWN0IEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTXHRpZiBYODZfNjQgXHUwMDI2XHUwMDI2IERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG5hcmNoL3g4Ni9LY29uZmlnLTMzOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyMDkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIERpcmVjdCBDYWxsIEJQRiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBpbnRlZ3JhdGlvbiBhbmQgc2VlaW5nIHdoYXQmIzM5O3MgcmVxdWlyZWQgZm9yIHRoZSBkaXJlY3QgY2FsbCBmdW5jdGlvbmFsaXR5LiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBub3RpbmcgaXMgdGhhdCBpdCYjMzk7cyBnYXRlZCBieSBgWDg2XzY0ICZhbXA7JmFtcDsgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgbG9va2luZyBhdCB4ODZfNjQgYXJjaGl0ZWN0dXJlIHNwZWNpZmljYWxseS4gVGhhdOKAmXMgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBCUEZfRVZFTlRTYC4gVGhlbiwgb2YgY291cnNlLCB0aGVyZSYjMzk7cyBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCB3aGljaCBpbiB0dXJuIHJlbGllcyBvbiBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTYCBhbmQgYERZTkFNSUNfRlRSQUNFYC4gV2UgYWxzbyBuZWVkIGBLUFJPQkVfRVZFTlRTYCBhbmQgYFBFUkZfRVZFTlRTYC4KCkhvbGQgb24uLi50aGlua2luZyBhYm91dCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGEgYml0IG1vcmUsIGl0JiMzOTtzIGEgYGRlZl9ib29sIHlgIHdoZW4gYWxsIGl0cyBkZXBlbmRlbmNpZXMgYXJlIG1ldC4gU28sIHJlYWxseSwgaXQmIzM5O3MganVzdCBpbmRpY2F0aW5nIHRoYXQgdGhlIGZlYXR1cmUgaXMgYXZhaWxhYmxlLiBJbnN0ZWFkIG9mIGxpc3RpbmcgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYERZTkFNSUNfRlRSQUNFYCwgaXQgZmVlbHMgY2xlYW5lciB0byBqdXN0IGxpc3QgdGhlIGRpcmVjdCBjYWxsIG9uZS4gU28sIHRvIGJlIGNsZWFyLCB0aGUgcmVsZXZhbnQgY29uZmlncyBhcmUgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBgQlBGX0VWRU5UU2AsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGBLUFJPQkVfRVZFTlRTYCwgYW5kIGBQRVJGX0VWRU5UU2AuCgpGaW5hbGx5LCB0byB2ZXJpZnkgdGhpcywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvZGUuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgdG8gY29uZmlybSBpdCBpcyBndWFyZGVkIGJ5IGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfbXVsdGlfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1ODktXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTkwOnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTkxLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTk1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5Ny17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYxNS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MTY6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjE3LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjMyLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTYzMzppbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM0LVx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3OS1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjgwOlx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODEtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcwNy1cdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcwODpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA5LVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MTctXHRcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUsIFx1MDAyNm1ub2RlLVx1MDAzZW5vZGUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcxODpcdFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcxOS1cdH1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzMzPXZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQzLVx0XHRkYXRhLVx1MDAzZWVudHJ5ID0gXHUwMDI2bW5vZGUtXHUwMDNlZW50cnk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzQ0Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDUtXHRcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXHUwMDI2bW5vZGUtXHUwMDNlbm9kZSwgbW5vZGUtXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzU1LVx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzU2Olx0XHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cdTAwM2V0cmFtcG9saW5lKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzczCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgVHJhbXBvbGluZSBNdWx0aS1BdHRhY2ggQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgZG9lcyB0aGlzIGxpdmU/JiMzNDsgSXQmIzM5O3MgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGF0IGZpbGUgY29tcGlsZWQgd2l0aCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYD8gTm8sIGEgcXVpY2sgY2hlY2sgc2hvd3MgaXQmIzM5O3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9KSVRgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byBub3RlLgoKTm93LCBJIHJlbWVtYmVyIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGlzIG9ubHkgY2FsbGVkIGJ5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBDcnVjaWFsbHksIHRoYXQgY2FsbCBpcyBndWFyZGVkIGJ5ICpib3RoKiBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AuIFNvLCB0aGF0IGRpY3RhdGVzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4KClRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIGNvbmZpZ3MgZm9yIHRoaXMgd2hvbGUgdGhpbmcgYXJlOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBCUEZfRVZFTlRTYCwgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgYW5kLCBldmVuIHRob3VnaCBpdCYjMzk7cyBzZWxlY3RlZCBieSB0aGUgYXJjaGl0ZWN0dXJlLCBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLiBJJiMzOTtsbCBrZWVwIGBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AgaW4gbWluZCwgZXNwZWNpYWxseSB3aXRoIHRoZSBwb3RlbnRpYWwgbmVlZHMgb2Ygc3l6a2FsbGVyIGNvbmZpZyBnZW5lcmF0aW9uIC0gdGhvdWdoLCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZGlyZWN0bHkgdXNlIGBIQVZFXypgIGNvbmZpZ3MuIFNvIEkgY2FuIGVpdGhlciBsaXN0IGl0IG9yIGp1c3Qgc3RpY2sgd2l0aCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgYEZUUkFDRWAgYW5kIGBEWU5BTUlDX0ZUUkFDRWAgY29uZmlncy4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgc2NvcGUgb2YgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAuIElzIGl0IGV4cG9ydGVkIG9yIHN0YXRpYz8gSXQmIzM5O3Mgbm9uLXN0YXRpYywgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKRmluYWxseSwgSSBuZWVkIHRvIGtlZXAgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGZvY3VzOiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAsIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYC4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBpcyBhY3R1YWxseSBjYWxsZWQgZnJvbSBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYCwganVzdCB0byBjb21wbGV0ZSB0aGUgcGljdHVyZS4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGFyZWEgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNjgwPV9fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2ODQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzY4NTpzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2ODYte1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNzg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyA9IHtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg1Olx0LnJlbGVhc2UgPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2UsXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4Ni1cdC5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk0NQoJCQkJCQkJb3V0cHV0OiAyMDgKCQkJCQkJCXRob3VnaHRzOiAyNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFRyYW1wb2xpbmUgRml4KioKCk9rYXksIHNvIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2VgIGRvZXMgaW5kZWVkIGNhbGwgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAsIHdoaWNoIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgcGF0Y2guIFRoZSBtYWluIHRocnVzdCBpcyBmaXhpbmcgYSBVc2UtQWZ0ZXItRnJlZSB2dWxuZXJhYmlsaXR5IGx1cmtpbmcgd2l0aGluIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZWAuIEl0IHNlZW1zIHRoZSBidWcgc3VyZmFjZXMgd2hlbiBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlYCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWxseSBpbXBvcnRhbnQgZml4LCBkZWFsaW5nIHdpdGggYSBjb3JlIGNvbXBvbmVudCBvZiB0aGUgQlBGIHRyYW1wb2xpbmUgbWVjaGFuaXNtLiBHaXZlbiBpdHMgY3JpdGljYWxpdHksIGZ1enppbmcgaXMgYWJzb2x1dGVseSB3YXJyYW50ZWQuIE5vIHF1ZXN0aW9uIGFib3V0IGl0LgoKTGV0IG1lIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgZm9yIGZ1enppbmcgcHVycG9zZXMuIFdlIGFyZSBsb29raW5nIGF0IGEgYFdvcnRoRnV6emluZzogdHJ1ZWAgc2l0dWF0aW9uLiBUaGUgZnVuY3Rpb24gc3ltYm9scyB0byByZWFsbHkgdGFyZ2V0IGR1cmluZyBmdXp6aW5nIGFyZTogYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLCBhbmQgbmF0dXJhbGx5LCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYC4KCkZvciBjb25maWd1cmF0aW9uLCBJJiMzOTtsbCBuZWVkIHRoZXNlIGVuYWJsZWQ6IGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYEJQRl9FVkVOVFNgLCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCBhbmQgYERZTkFNSUNfRlRSQUNFYC4gTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGFueSBkZXBlbmRlbmNpZXMuIFJpZ2h0LCBgQlBGX0VWRU5UU2AgYWxzbyBoaW5nZXMgb24gYEtQUk9CRV9FVkVOVFNgIG9yIGBVUFJPQkVfRVZFTlRTYCAqYW5kKiBgUEVSRl9FVkVOVFNgLiBJIG5lZWQgdG8gZW5zdXJlIHRob3NlIGFyZSBhbHNvIGVuYWJsZWQuIFRoZXJlZm9yZSwgSSB3aWxsIGluY2x1ZGUgYEtQUk9CRV9FVkVOVFNgIGFuZCBgUEVSRl9FVkVOVFNgIGluIG15IGBFbmFibGVDb25maWdzYCBsaXN0LiBUaGF0IHNob3VsZCBjb3ZlciBhbGwgdGhlIG5lY2Vzc2FyeSByZXF1aXJlbWVudHMgZm9yIGZ1enppbmcgdGhpcyB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDssCiAgICAmIzM0O0tQUk9CRV9FVkVOVFMmIzM0OywKICAgICYjMzQ7UEVSRl9FVkVOVFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoJiMzNDssCiAgICAmIzM0O2JwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIFVzZS1BZnRlci1GcmVlIGJ1ZyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgIGJ5IGNvcnJlY3RseSBpZGVudGlmeWluZyB3aGVuIHRoZSBvbGQgaW1hZ2UgaXMgc2FmZSB0byBmcmVlLiBJdCBhbHNvIGNoYW5nZXMgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAgdG8gcmV0dXJuIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgQlBGIHRyYW1wb2xpbmUgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHN5c2NhbGxzLCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtLUFJPQkVfRVZFTlRTJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2RldGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCBieSBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgd2hlbiB0aGUgb2xkIGltYWdlIGlzIHNhZmUgdG8gZnJlZS4gSXQgYWxzbyBjaGFuZ2VzIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIHRvIHJldHVybiB2b2lkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiB0cmFtcG9saW5lIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBzeXNjYWxscywgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDAyOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgYnVnIGluIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZWAsIHdoZXJlIGBvbGRfaW1hZ2VgIGNvdWxkIGJlIGZyZWVkIHdoaWxlIHN0aWxsIGJlaW5nIHRoZSBhY3RpdmUgaW1hZ2UgKGBjdXJfaW1hZ2VgKSBpZiBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKClgIGZhaWxzLiBVQUYgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MTlmMzBlZWVjZjA5YzM0ZjA3ODhkNDYxNTgwYjlhMzk1ODA3ZmY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMDI6NTQ6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCA3M2JhY2ZjNjQ0NGRmLi4zMjU1YzZmNWVhNmI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTE1MTgsOCAmIzQzOzE1MTgsOCBAQCBpbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuYwogCiBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsCiAJCQkJc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspOwotaW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCi0JCQkJc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspOwomIzQzO3ZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywKJiM0MzsJCQkJIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTsKIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFncyk7CiAKIC8qCkBAIC0xNjM5LDEwICYjNDM7MTYzOSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLAogewogCXJldHVybiAtRU5PVFNVUFA7CiB9Ci1zdGF0aWMgaW5saW5lIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLAotCQkJCQkgICAgICBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaykKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywKJiM0MzsJCQkJCSAgICAgICBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaykKIHsKLQlyZXR1cm4gLUVOT1RTVVBQOwogfQogc3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpIHt9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKaW5kZXggZWQ3OTk5YWQ2YzY2Yy4uNTQ0YWI0MWEzYzI1NiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKQEAgLTE1OTUsNyAmIzQzOzE1OTUsMTggQEAgc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cikKIAogc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cikKIHsKLQlpZiAodHItJmd0O211bHRpX2F0dGFjaC5vbGRfaW1hZ2UpCiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgZnJlZSBvbGRfaW1hZ2UgaWYgaXQgaXMgbm8gbG9uZ2VyIHRoZSBhY3RpdmUgaW1hZ2UuCiYjNDM7CSAqIFdoZW4gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKCkgZmFpbHMgYmVmb3JlIG1vZGlmeV9mZW50cnlfbXVsdGkoKS8KJiM0MzsJICogdW5yZWdpc3Rlcl9mZW50cnlfbXVsdGkoKSBpcyBjYWxsZWQsIGN1cl9pbWFnZSBpcyB1bmNoYW5nZWQKJiM0MzsJICogKGN1cl9pbWFnZSA9PSBvbGRfaW1hZ2UpIGFuZCBmdHJhY2Ugc3RpbGwgcG9pbnRzIHRvIGl0LiBGcmVlaW5nCiYjNDM7CSAqIGl0IHdvdWxkIGNhdXNlIGEgVUFGIHdoZW4gZnRyYWNlIGNhbGxzIGludG8gdGhlIGZyZWVkIG1lbW9yeS4KJiM0MzsJICogT24gc3VjY2VzcywgY3VyX2ltYWdlIGlzIGVpdGhlciBhIG5ldyBpbWFnZSBvciBOVUxMLCBzbwomIzQzOwkgKiBvbGRfaW1hZ2UgIT0gY3VyX2ltYWdlIGNvcnJlY3RseSBpZGVudGlmaWVzIGEgc3RhbGUgaW1hZ2UgdGhhdAomIzQzOwkgKiBpcyBzYWZlIHRvIGZyZWUuCiYjNDM7CSAqLwomIzQzOwlpZiAodHItJmd0O211bHRpX2F0dGFjaC5vbGRfaW1hZ2UgJmFtcDsmYW1wOwomIzQzOwkgICAgdHItJmd0O211bHRpX2F0dGFjaC5vbGRfaW1hZ2UgIT0gdHItJmd0O2N1cl9pbWFnZSkKIAkJYnBmX3RyYW1wX2ltYWdlX3B1dCh0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSk7CiAKIAl0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSA9IE5VTEw7CkBAIC0xNzE5LDcgJiM0MzsxNzMwLDggQEAgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLAogCXJldHVybiBlcnI7CiB9CiAKLWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaykKJiM0Mzt2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiYjNDM7CQkJCSBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaykKIHsKIAlzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9ICZhbXA7bGluay0mZ3Q7ZGF0YTsKIAlzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGU7CkBAIC0xNzQ5LDcgJiM0MzsxNzYxLDYgQEAgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV8KIAkJYnBmX3RyYW1wb2xpbmVfcHV0KG1ub2RlLSZndDt0cmFtcG9saW5lKTsKIAogCWNsZWFyX3RyYWNpbmdfbXVsdGlfZGF0YShkYXRhKTsKLQlyZXR1cm4gMDsKIH0KIAogI3VuZGVmIGZvcl9lYWNoX21ub2RlX2NudApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCmluZGV4IDg5MTg5N2Y4YTFiMzUuLjI5MjYwOTUxYWE4NzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKQEAgLTM2ODcsNyAmIzQzOzM2ODcsNyBAQCBzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKQogCXN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICp0cl9saW5rID0KIAkJY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rLCBsaW5rKTsKIAotCVdBUk5fT05fT05DRShicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gobGluay0mZ3Q7cHJvZywgdHJfbGluaykpOwomIzQzOwlicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gobGluay0mZ3Q7cHJvZywgdHJfbGluayk7CiB9CiAKIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTMzCgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDM3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBUcmFtcG9saW5lIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBmaXgsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYSBVc2UtQWZ0ZXItRnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgQlBGIHRyYW1wb2xpbmUgbWVjaGFuaXNtLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gVGhlIG1haW4gY2hhbmdlIEkmIzM5O20gc2VlaW5nIGlzIGEgbW9kaWZpY2F0aW9uIG9mIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIHRvIHJldHVybiBgdm9pZGAgaW5zdGVhZCBvZiBgaW50YC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBjbGVhbnVwLCBhcyB0aGUgZnVuY3Rpb24gd2FzIGFsd2F5cyByZXR1cm5pbmcgemVybyBhbnl3YXksIGEgbWlub3IgY29kZSBzdHlsZSBpbXByb3ZlbWVudCByZWFsbHkuCgpUaGUgY3JpdGljYWwgYml0LCBob3dldmVyLCBpcyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY3J1Y2lhbCBjaGVjayBiZWZvcmUgZnJlZWluZyBgb2xkX2ltYWdlYC4gTm93IGl0IG9ubHkgZnJlZXMgYG9sZF9pbWFnZWAgaWYgaXQgaXMgbm8gbG9uZ2VyIHRoZSBhY3RpdmUgaW1hZ2UgKGB0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAhPSB0ci0mZ3Q7Y3VyX2ltYWdlYCkuIFRoaXMgcHJldmVudHMgdGhlIFVBRiB3aGVuIGBicGZfdHJhbXBvbGluZV91cGRhdGUoKWAgZmFpbHMgYnV0IHRoZSBhc3NvY2lhdGVkIGNsZWFudXAgaXNuJiMzOTt0IGNhbGxlZCwgYXMgdGhlIGNvbW1lbnQgY2xlYXJseSBzdGF0ZXM6ICYjMzQ7RnJlZWluZyBpdCB3b3VsZCBjYXVzZSBhIFVBRiB3aGVuIGZ0cmFjZSBjYWxscyBpbnRvIHRoZSBmcmVlZCBtZW1vcnkuJiMzNDsgVGhhdCBmYWlsdXJlIGNhc2UgaXMgdGhlIGtleS4KClRoaXMgVUFGIHZ1bG5lcmFiaWxpdHkgaXMgd2hhdCBpdCBpcywgYW5kIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoaXMgdHlwZSBvZiBidWcuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGlzIGJlaW5nIGV4cG9zZWQgb3IgZml4ZWQgYnkgdGhpcywgc28gS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IGhlcmUuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGF0IGNvZGUgYWdhaW4sIGFuZCBpdCBjb25maXJtcyBteSBzdXNwaWNpb247CmBgYGMKLQlpZiAodHItJmd0O211bHRpX2F0dGFjaC5vbGRfaW1hZ2UpCiYjNDM7CWlmICh0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAmYW1wOyZhbXA7CiYjNDM7CSAgICB0ci0mZ3Q7bXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAhPSB0ci0mZ3Q7Y3VyX2ltYWdlKQogCQlicGZfdHJhbXBfaW1hZ2VfcHV0KHRyLSZndDttdWx0aV9hdHRhY2gub2xkX2ltYWdlKTsKYGBgClRoYXQgYG9sZF9pbWFnZSAhPSBjdXJfaW1hZ2VgIGNoZWNrIGlzIHRoZSBjb3JlIG9mIHRoaXMgZml4LiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCwgd2hlcmUgYG9sZF9pbWFnZWAgY291bGQgYmUgZnJlZWQgd2hpbGUgc3RpbGwgYmVpbmcgdGhlIGFjdGl2ZSBpbWFnZSAoYGN1cl9pbWFnZWApIGlmIGBicGZfdHJhbXBvbGluZV91cGRhdGUoKWAgZmFpbHMuIFVBRiBidWdzIGFyZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIFVzZS1BZnRlci1GcmVlIChVQUYpIGJ1ZyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgLCB3aGVyZSBgb2xkX2ltYWdlYCBjb3VsZCBiZSBmcmVlZCB3aGlsZSBzdGlsbCBiZWluZyB0aGUgYWN0aXZlIGltYWdlIChgY3VyX2ltYWdlYCkgaWYgYGJwZl90cmFtcG9saW5lX3VwZGF0ZSgpYCBmYWlscy4gVUFGIGJ1Z3MgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MDcuODY3MzQyNzg2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzNTQwMjQ1MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfRVZFTlRTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VcIixcbiAgICBcIktQUk9CRV9FVkVOVFNcIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hcIixcbiAgICBcImJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCwgd2hlcmUgYG9sZF9pbWFnZWAgY291bGQgYmUgZnJlZWQgd2hpbGUgc3RpbGwgYmVpbmcgdGhlIGFjdGl2ZSBpbWFnZSAoYGN1cl9pbWFnZWApIGlmIGBicGZfdHJhbXBvbGluZV91cGRhdGUoKWAgZmFpbHMuIFVBRiBidWdzIGFyZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCBieSBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgd2hlbiB0aGUgb2xkIGltYWdlIGlzIHNhZmUgdG8gZnJlZS4gSXQgYWxzbyBjaGFuZ2VzIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIHRvIHJldHVybiB2b2lkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiB0cmFtcG9saW5lIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBzeXNjYWxscywgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDowNy44NjczNTA2MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTgzOTMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxOWYzMGVlZWNmMDljMzRmMDc4OGQ0NjE1ODBiOWEzOTU4MDdmZjlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDI6NTQ6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5pbmRleCA3M2JhY2ZjNjQ0NGRmLi4zMjU1YzZmNWVhNmI0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXFxuQEAgLTE1MTgsOCArMTUxOCw4IEBAIGludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jXFxuIFxcbiBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcXG4taW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcXG4rdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspO1xcbiB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpO1xcbiBcXG4gLypcXG5AQCAtMTYzOSwxMCArMTYzOSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbiB7XFxuIFxcdHJldHVybiAtRU5PVFNVUFA7XFxuIH1cXG4tc3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuIHtcXG4tXFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4gfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfc2V0X2ZsYWdzKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBmbGFncykge31cXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG5pbmRleCBlZDc5OTlhZDZjNjZjLi41NDRhYjQxYTNjMjU2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXFxuKysrIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG5AQCAtMTU5NSw3ICsxNTk1LDE4IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxuIFxcbiBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbiB7XFxuLVxcdGlmICh0ci1cXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSlcXG4rXFx0LypcXG4rXFx0ICogT25seSBmcmVlIG9sZF9pbWFnZSBpZiBpdCBpcyBubyBsb25nZXIgdGhlIGFjdGl2ZSBpbWFnZS5cXG4rXFx0ICogV2hlbiBicGZfdHJhbXBvbGluZV91cGRhdGUoKSBmYWlscyBiZWZvcmUgbW9kaWZ5X2ZlbnRyeV9tdWx0aSgpL1xcbitcXHQgKiB1bnJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSgpIGlzIGNhbGxlZCwgY3VyX2ltYWdlIGlzIHVuY2hhbmdlZFxcbitcXHQgKiAoY3VyX2ltYWdlID09IG9sZF9pbWFnZSkgYW5kIGZ0cmFjZSBzdGlsbCBwb2ludHMgdG8gaXQuIEZyZWVpbmdcXG4rXFx0ICogaXQgd291bGQgY2F1c2UgYSBVQUYgd2hlbiBmdHJhY2UgY2FsbHMgaW50byB0aGUgZnJlZWQgbWVtb3J5LlxcbitcXHQgKiBPbiBzdWNjZXNzLCBjdXJfaW1hZ2UgaXMgZWl0aGVyIGEgbmV3IGltYWdlIG9yIE5VTEwsIHNvXFxuK1xcdCAqIG9sZF9pbWFnZSAhPSBjdXJfaW1hZ2UgY29ycmVjdGx5IGlkZW50aWZpZXMgYSBzdGFsZSBpbWFnZSB0aGF0XFxuK1xcdCAqIGlzIHNhZmUgdG8gZnJlZS5cXG4rXFx0ICovXFxuK1xcdGlmICh0ci1cXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdHItXFx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgIT0gdHItXFx1MDAzZWN1cl9pbWFnZSlcXG4gXFx0XFx0YnBmX3RyYW1wX2ltYWdlX3B1dCh0ci1cXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSk7XFxuIFxcbiBcXHR0ci1cXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSA9IE5VTEw7XFxuQEAgLTE3MTksNyArMTczMCw4IEBAIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4taW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbit2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9IFxcdTAwMjZsaW5rLVxcdTAwM2VkYXRhO1xcbiBcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGU7XFxuQEAgLTE3NDksNyArMTc2MSw2IEBAIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfXFxuIFxcdFxcdGJwZl90cmFtcG9saW5lX3B1dChtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxuIFxcbiBcXHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XFxuLVxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAjdW5kZWYgZm9yX2VhY2hfbW5vZGVfY250XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xcbmluZGV4IDg5MTg5N2Y4YTFiMzUuLjI5MjYwOTUxYWE4NzEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXFxuKysrIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXFxuQEAgLTM2ODcsNyArMzY4Nyw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuIFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICp0cl9saW5rID1cXG4gXFx0XFx0Y29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rLCBsaW5rKTtcXG4gXFxuLVxcdFdBUk5fT05fT05DRShicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gobGluay1cXHUwMDNlcHJvZywgdHJfbGluaykpO1xcbitcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gobGluay1cXHUwMDNlcHJvZywgdHJfbGluayk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU0OjA4LjM1MzkzNTMzNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMwNDkxNTYwMTY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFXCIsXG4gICAgXCJLUFJPQkVfRVZFTlRTXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaFwiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoXCIsXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIFVzZS1BZnRlci1GcmVlIGJ1ZyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgIGJ5IGNvcnJlY3RseSBpZGVudGlmeWluZyB3aGVuIHRoZSBvbGQgaW1hZ2UgaXMgc2FmZSB0byBmcmVlLiBJdCBhbHNvIGNoYW5nZXMgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAgdG8gcmV0dXJuIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgQlBGIHRyYW1wb2xpbmUgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHN5c2NhbGxzLCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxOWYzMGVlZWNmMDljMzRmMDc4OGQ0NjE1ODBiOWEzOTU4MDdmZjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwMjo1NDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCA3M2JhY2ZjNjQ0NGRmLi4zMjU1YzZmNWVhNmI0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTE1MTgsOCArMTUxOCw4IEBAIGludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jXG4gXG4gaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuIFx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspO1xuLWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLVx0XHRcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspO1xuK3ZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbitcdFx0XHRcdCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7XG4gdm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzKTtcbiBcbiAvKlxuQEAgLTE2MzksMTAgKzE2MzksOSBAQCBzdGF0aWMgaW5saW5lIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbiB7XG4gXHRyZXR1cm4gLUVOT1RTVVBQO1xuIH1cbi1zdGF0aWMgaW5saW5lIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbitzdGF0aWMgaW5saW5lIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbitcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuIHtcbi1cdHJldHVybiAtRU5PVFNVUFA7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9zZXRfZmxhZ3Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIGZsYWdzKSB7fVxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IGVkNzk5OWFkNmM2NmMuLjU0NGFiNDFhM2MyNTYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuKysrIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC0xNTk1LDcgKzE1OTUsMTggQEAgc3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbiBcbiBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuIHtcbi1cdGlmICh0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlKVxuK1x0LypcbitcdCAqIE9ubHkgZnJlZSBvbGRfaW1hZ2UgaWYgaXQgaXMgbm8gbG9uZ2VyIHRoZSBhY3RpdmUgaW1hZ2UuXG4rXHQgKiBXaGVuIGJwZl90cmFtcG9saW5lX3VwZGF0ZSgpIGZhaWxzIGJlZm9yZSBtb2RpZnlfZmVudHJ5X211bHRpKCkvXG4rXHQgKiB1bnJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSgpIGlzIGNhbGxlZCwgY3VyX2ltYWdlIGlzIHVuY2hhbmdlZFxuK1x0ICogKGN1cl9pbWFnZSA9PSBvbGRfaW1hZ2UpIGFuZCBmdHJhY2Ugc3RpbGwgcG9pbnRzIHRvIGl0LiBGcmVlaW5nXG4rXHQgKiBpdCB3b3VsZCBjYXVzZSBhIFVBRiB3aGVuIGZ0cmFjZSBjYWxscyBpbnRvIHRoZSBmcmVlZCBtZW1vcnkuXG4rXHQgKiBPbiBzdWNjZXNzLCBjdXJfaW1hZ2UgaXMgZWl0aGVyIGEgbmV3IGltYWdlIG9yIE5VTEwsIHNvXG4rXHQgKiBvbGRfaW1hZ2UgIT0gY3VyX2ltYWdlIGNvcnJlY3RseSBpZGVudGlmaWVzIGEgc3RhbGUgaW1hZ2UgdGhhdFxuK1x0ICogaXMgc2FmZSB0byBmcmVlLlxuK1x0ICovXG4rXHRpZiAodHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSBcdTAwMjZcdTAwMjZcbitcdCAgICB0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlICE9IHRyLVx1MDAzZWN1cl9pbWFnZSlcbiBcdFx0YnBmX3RyYW1wX2ltYWdlX3B1dCh0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlKTtcbiBcbiBcdHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgPSBOVUxMO1xuQEAgLTE3MTksNyArMTczMCw4IEBAIGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbit2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4rXHRcdFx0XHQgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4ge1xuIFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2RhdGEgKmRhdGEgPSBcdTAwMjZsaW5rLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGU7XG5AQCAtMTc0OSw3ICsxNzYxLDYgQEAgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9cbiBcdFx0YnBmX3RyYW1wb2xpbmVfcHV0KG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xuIFxuIFx0Y2xlYXJfdHJhY2luZ19tdWx0aV9kYXRhKGRhdGEpO1xuLVx0cmV0dXJuIDA7XG4gfVxuIFxuICN1bmRlZiBmb3JfZWFjaF9tbm9kZV9jbnRcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbmluZGV4IDg5MTg5N2Y4YTFiMzUuLjI5MjYwOTUxYWE4NzEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbisrKyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuQEAgLTM2ODcsNyArMzY4Nyw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluayA9XG4gXHRcdGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluaywgbGluayk7XG4gXG4tXHRXQVJOX09OX09OQ0UoYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKGxpbmstXHUwMDNlcHJvZywgdHJfbGluaykpO1xuK1x0YnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKGxpbmstXHUwMDNlcHJvZywgdHJfbGluayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDowOC4zNTM5MzY4MjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzg3MzkyOTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBUcmFtcG9saW5lIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQncyB0b3VjaGluZyBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgY2hhbmdpbmcgaXRzIHJldHVybiB0eXBlIHRvIGB2b2lkYCBpbnN0ZWFkIG9mIGBpbnRgLiAgVGhhdCdzIGEgYml0IHVudXN1YWwsIGFuZCBJJ2QgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIGl0IHRvIGJlIGNvbmZpZGVudCBpbiB0aGUgY2hhbmdlIOKAkyBhcmUgdGhleSB1c2luZyB0aGUgcmV0dXJuIHZhbHVlIHNvbWV3aGVyZSBpbXBvcnRhbnQ/ICBJdCdzIGFsc28gZml4aW5nIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgaXNzdWUgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCBieSBhZGRpbmcgYSBjaGVjayBmb3IgYHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgIT0gdHItXHUwMDNlY3VyX2ltYWdlYC4gIFRoYXQgc291bmRzIGNyaXRpY2FsOyBVQUZzIGFyZSBuYXN0eSBhbmQgdGhpcyBsaWtlbHkgYWRkcmVzc2VzIGEgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0eS5cblxuVGhlIGNoYW5nZXMgYXJlIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiAgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhlc2UgZmlsZXMgdG8gZW5zdXJlIHRoZSBwYXRjaCBhcHBsaWVzIGNvcnJlY3RseSB0byB0aGUgdGFyZ2V0ZWQgZW52aXJvbm1lbnRzLiBTcGVjaWZpY2FsbHksIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgcmVsaWVzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9KSVRgLiBMZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdCBhc3N1bXB0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGlzIHByb3Blcmx5IGd1YXJkZWQgYnkgdGhlIHJlbGV2YW50IGJ1aWxkIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjaGFuZ2UgYWZmZWN0cyBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIG5lY2Vzc2FyeSBCUEYgZmVhdHVyZXMgYXJlbid0IGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDoxNS43NDEzMzI0ODRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ2NDcxMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhbXBvbGluZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRpc2FzbS5vIG1wcm9nLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MTUuODI1OTg1NjM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NjQ0NDc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgSklUIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXQgc2VlbXMgdGhhdCBgQ09ORklHX0JQRl9KSVRgIGlzIGEgaGFyZCByZXF1aXJlbWVudCBoZXJlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSB3b3VsZG4ndCBleHBlY3QgQlBGIGZ1bmN0aW9uYWxpdHkgdG8gd29yayB3aXRob3V0IHRoZSBKSVQgY29tcGlsZXIgZW5hYmxlZC4gSXQncyB0aGUgY29yZSBvZiB0cmFuc2xhdGluZyB0aG9zZSBieXRlY29kZSBpbnN0cnVjdGlvbnMgaW50byBuYXRpdmUgbWFjaGluZSBjb2RlIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlLlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHRvIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBJJ20gY3VyaW91cyBob3cgdGhpcyBwbGF5cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSBpcyBkZXBlbmRlbnQgb24gdGhlIEpJVCwgb3IgaWYgaXQgY2FuIHVzZSBzb21lIGFsdGVybmF0aXZlIEJQRiBpbnRlcnByZXRlci4gRG9lcyB0aGUgdHJhY2luZyB1c2Ugb2YgQlBGIGRlbWFuZCB0aGUgSklUPyBLbm93aW5nIHRoZSBhbnN3ZXIgaXMga2V5IHRvIGJ1aWxkaW5nIGFuIG92ZXJhbGwgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDoxOS41MDI0MzI5OTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzNzQzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSArPSB0cmFjZV9ldmVudHNfdXNlci5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgKz0gYnBmX3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSArPSB0cmFjZV9rcHJvYmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDoxOS41NTA4MTM3ODhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDIxMDcxMjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkFuYWx5c2lzIG9mIGVCUEYgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBzbyBgQ09ORklHX0JQRl9FVkVOVFNgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgaGVyZS4gV2UgbmVlZCB0aGF0IGVuYWJsZWQgdG8gZXZlbiBiZSBpbiB0aGUgYmFsbHBhcmsuIE5vdywgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgYW5hbHl6ZSB0aGUgaW1wYWN0ZWQgZnVuY3Rpb25zLiBMb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCwgYW5kIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2VgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgY29tcG9uZW50cyBpbiB0aGUgZUJQRiB0cmFjaW5nL3RyYW1wb2xpbmUgbGlmZWN5Y2xlLCBjbGVhcmx5LlxuXG5JbnRlcmVzdGluZy4uLiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgIGlzIG9uIHRoZSBsaXN0LiBJJ20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCB0aGUgY2FsbCBncmFwaCBmb3IgdGhhdCBvbmUuIERvZXMgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgY2FsbCBpdCBhbmQgaXMgaXQgYWxzbyBiZWluZyBjYWxsZWQgYnkgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGA/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoZSB1c2FnZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgZnJlZWluZyBvcGVyYXRpb24gaXMgY29vcmRpbmF0ZWQgd2l0aGluIHRoZSBhdHRhY2htZW50IGFuZCBkZXRhY2htZW50IHByb2Nlc3Nlcy4gVGhlIGNhbGwgY2hhaW4gaXMgdmVyeSBpbXBvcnRhbnQuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGludGVyYWN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNDAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MjQuOTcxODg3NDU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA3MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1OTA9c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYzMz1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA3LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MDg6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MDktXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzMzPXZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTUtXFx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc1NjpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc1Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MjUuMDIxMDk5NzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzYwNjIzODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFRyYW1wb2xpbmUgTXVsdGktQXR0YWNoL0RldGFjaCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBCUEYgY29kZSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUgaXMgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYC4gVGhhdCdzIHdoZXJlIHRoZSBjbGVhbnVwIGhhcHBlbnMsIGFuZCBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLCB3aGljaCBpcyBhIGtleSBvYnNlcnZhdGlvbi5cblxuTXkgaW1tZWRpYXRlIGZvY3VzLCB0aGVuLCBuZWVkcyB0byBiZSBvbiB0aGVzZSB0aHJlZSBmdW5jdGlvbnM6IGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgYW5kIGFsc28gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5Ob3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGNhbiBhY3R1YWxseSBiZSB0cmlnZ2VyZWQgZnJvbSBhIHVzZXItc3BhY2Ugc3lzY2FsbC4gVGhpbmtpbmcgYWJvdXQgdGhlIHVzdWFsIGVudHJ5IHBvaW50cywgaXQncyBoaWdobHkgcHJvYmFibGUuIEknbGwgbmVlZCB0byBjb25maXJtLCBidXQgSSBzdXNwZWN0IGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYGJwZl9saW5rX2NyZWF0ZWAgb3IgYSBzaW1pbGFyIEFQSS4gSWYgc28sIHRoYXQgb3BlbnMgdXAgYWxsIHNvcnRzIG9mIHBvdGVudGlhbCBzZWN1cml0eSBjb25jZXJucywgd2hpY2ggSSBuZWVkIHRvIGFuYWx5emUgY2FyZWZ1bGx5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgaXRzZWxmIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCdzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4OTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MjkuNzgxNzI2MDc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg2NjMwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTU4ND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1ODktXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5MDpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTEte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5NS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTk2OnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5Ny17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjE1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MTY6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYxNy17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjMyLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MzM6aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzQtXFx0XFx0XFx0XFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc5LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4MDpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4MS1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MDctXFx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcwODpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTcwOS1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MTctXFx0XFx0YnBmX3RyYW1wb2xpbmVfcmVtb3ZlX3Byb2cobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsIFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTcxODpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfcm9sbGJhY2sobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MTktXFx0fVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTczMz12b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQzLVxcdFxcdGRhdGEtXFx1MDAzZWVudHJ5ID0gXFx1MDAyNm1ub2RlLVxcdTAwM2VlbnRyeTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzQ0OlxcdFxcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQ1LVxcdFxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTUtXFx0Zm9yX2VhY2hfbW5vZGUobW5vZGUsIGxpbmspXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc1NjpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc1Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MjkuODMwNjIxMzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEwOTQyNjQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipJbnZlc3RpZ2F0aW5nIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIENhbGxzKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLiBJdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24sIG5vIGRvdWJ0LCBidXQgdG8gcmVhbGx5IGdyYXNwIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LCBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcXVpY2tseSBpZGVudGlmeWluZyAqd2hlcmUqIGl0J3MgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGRlc2lnbiBkZWNpc2lvbnMgc3Vycm91bmRpbmcgdGhpcyBmdW5jdGlvbi4gTGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSByZWxhdGlvbnNoaXBzIGhlcmUuIEtub3dpbmcgdGhlIHVwc3RyZWFtIGZ1bmN0aW9ucyBhbmQgbW9kdWxlcyB0aGF0IHVzZSB0aGlzIGhlbHBzIG1lIGRldGVybWluZSB0aGUgdXNlLWNhc2VzIGFuZCBwb3RlbnRpYWwgaW1wYWN0IHRvIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDozNS45NDAwNTAyMjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDg3MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODQwPWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTExLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTEyOlxcdGVyciA9IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChwcm9nLCBpZHMsIGxpbmspO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTEzLVxcdGt2ZnJlZShpZHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDozNS45OTI1NDEzMTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5ODIyNDAwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBDYWxsIENoYWluKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSBkb3duIGhvdyBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBnZXRzIGludm9rZWQuIFRoZSBjb250ZXh0IGlzIHRoYXQgSSBzdXNwZWN0IGBicGZfbGlua19jcmVhdGVgIG1pZ2h0IGJlIHJlc3BvbnNpYmxlLiBMZXQgbWUgcHVsbCB1cCB0aGUgcmVsZXZhbnQgY29kZSBhbmQgdmVyaWZ5IHRoYXQgaHlwb3RoZXNpcy4gVGhlIGZ1bmN0aW9uIG5hbWUgaW1wbGllcyBzb21lIHNvcnQgb2YgbXVsdGlwbGUgYXR0YWNobWVudCwgYW5kIGBicGZfbGlua19jcmVhdGVgIGlzIGNlcnRhaW5seSB0aGUgcGxhY2Ugd2hlcmUgYSBuZXcgZUJQRiBsaW5rIOKAkyB3aGljaCwgaW4gc29tZSBjYXNlcywgaW52b2x2ZXMgdHJhY2luZyDigJMgaXMgZXN0YWJsaXNoZWQsIHNvIHRoYXQgd291bGQgbWFrZSBzZW5zZSBhcyB0aGUgcm9vdCBjYXVzZS4gSSB3aWxsIGNyb3NzLXJlZmVyZW5jZSB0aGUgY2FsbHMgYW5kIHNlZSBpZiBpdCBzZWVtcyBkaXJlY3RseSBpbnZvbHZlZCwgb3IgaWYgc29tZSBpbnRlcm1lZGlhcnkgaXMgbWFraW5nIHRoZSBjYWxsLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTIzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTQ6MzkuNTkwNzY4MzY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODExNzUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9NTc4ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4MzQtXFx0XFx0ZWxzZSBpZiAoaXNfdHJhY2luZ19tdWx0aShwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTgzNTpcXHRcXHRcXHRyZXQgPSBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2gocHJvZywgYXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTgzNi1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU0OjM5LjYzODg5MjE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MjQzNDczMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEVudHJ5IFBvaW50IENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGhlcmUuIEkgY2FuIHNlZSB0aGF0IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGluZGVlZCBjYWxsZWQgZnJvbSBgbGlua19jcmVhdGVgIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGVyZWZvcmUsIG15IHByaW1hcnkgZW50cnkgcG9pbnRzIG9mIGludGVyZXN0IGFyZSBjbGVhcmx5IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMuXG5cbk5vdywgY29uY2VybmluZyBjb25maWd1cmF0aW9ucywgSSdtIGRlYWxpbmcgd2l0aCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgQlBGX0VWRU5UU2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGBCUEZfRVZFTlRTYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gSXQncyBhIGtleSBjb25maWd1cmF0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYW55IGRlZXBlciB3b3JrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0IHJlbGllcyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg5MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NDo0NS4xNjMyNDE5NzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Mzg3MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfRVZFTlRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1NC1cXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU0OjQ1LjIxMTYzNTAyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzY4MzI5OTM4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBCUEYgRXZlbnRzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQlBGX0VWRU5UU2AgaXMgZGVmaW5pdGVseSB0aWVkIHRvIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQgbXVjaCBpcyBjbGVhci4gTm93LCBsZXQncyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgaXQgKnJlcXVpcmUqIGBGVFJBQ0VgPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIGBCUEZfRVZFTlRTYCBvZnRlbiBsZWFucyBvbiBlaXRoZXIgYEZUUkFDRWAgb3IgYEtQUk9CRV9FVkVOVFNgLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gYmUgcHJlY2lzZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlcGVuZGVuY2llcyBoZXJlLiBUaGUgYmVzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIHB1bGwgdXAgdGhlIGZ1bGwgZGVmaW5pdGlvbiBvZiBgQlBGX0VWRU5UU2AgYW5kIHNlZSBwcmVjaXNlbHkgd2hhdCBpdCBzYXlzLiBObyBhc3N1bXB0aW9ucywganVzdCB0aGUgZGVmaW5pdGl2ZSB0cnV0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI4NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjAyLjA0NDYzMjI3OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0XFx0ICBjb252ZXJ0IHRoZSB0eXBlIG9mIGFuIGV2ZW50IGZpZWxkLiBGb3IgZXhhbXBsZSwgdHVybiBhblxcbiA4NTE6XFx0XFx0ICBhZGRyZXNzIGludG8gYSBzdHJpbmcuXFxuIDg1MjpcXHRcXG4gODUzOlxcdGNvbmZpZyBCUEZfRVZFTlRTXFxuIDg1NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDg1NTpcXHRcXHRkZXBlbmRzIG9uIChLUFJPQkVfRVZFTlRTIHx8IFVQUk9CRV9FVkVOVFMpIFxcdTAwMjZcXHUwMDI2IFBFUkZfRVZFTlRTXFxuIDg1NjpcXHRcXHRib29sXFxuIDg1NzpcXHRcXHRkZWZhdWx0IHlcXG4gODU4OlxcdFxcdGhlbHBcXG4gODU5OlxcdFxcdCAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gYXR0YWNoIEJQRiBwcm9ncmFtcyB0byBrcHJvYmUsIHVwcm9iZSwgYW5kXFxuIDg2MDpcXHRcXHQgIHRyYWNlcG9pbnQgZXZlbnRzLlxcbiA4NjE6XFx0XFxuIDg2MjpcXHRjb25maWcgRFlOQU1JQ19FVkVOVFNcXG4gODYzOlxcdFxcdGRlZl9ib29sIG5cXG4gODY0OlxcdFxcbiA4NjU6XFx0Y29uZmlnIFBST0JFX0VWRU5UU1xcbiA4NjY6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4Njc6XFx0XFxuIDg2ODpcXHRjb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxcbiA4Njk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBwcm9ncmFtcyB0byBvdmVycmlkZSBhIGtwcm9iZWQgZnVuY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjAyLjA0NDczMzAxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjY0MzkzNTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBzZXQgdXAgbXkgQlBGIGVudmlyb25tZW50LiBJdCBzZWVtcyBsaWtlIHRoZSBgQlBGX0VWRU5UU2AgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gaGF2aW5nIGBLUFJPQkVfRVZFTlRTYCBvciBgVVBST0JFX0VWRU5UU2AsIGFuZCBhbHNvIGBQRVJGX0VWRU5UU2AgZW5hYmxlZC4gVGhlcmVmb3JlLCB0byBlbnN1cmUgZXZlcnl0aGluZydzIHByb3Blcmx5IGVuYWJsZWQsIG15IGltbWVkaWF0ZSBzdHJhdGVneSBpcyB0byBlbmFibGUgYEtQUk9CRV9FVkVOVFNgLCBgUEVSRl9FVkVOVFNgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9KSVRgLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgbmVjZXNzYXJ5IGJhc2VzLiBOb3csIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEtQUk9CRV9FVkVOVFNgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGFkZHJlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjA3LjMwOTEyOTI3NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAzNjQ3NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLUFJPQkVfRVZFTlRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTc3MD1jb25maWcgUFJPQkVfRVZFTlRTX0JURl9BUkdTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03ODEtXFxua2VybmVsL3RyYWNlL0tjb25maWc6NzgyOmNvbmZpZyBLUFJPQkVfRVZFTlRTXFxua2VybmVsL3RyYWNlL0tjb25maWctNzgzLVxcdGRlcGVuZHMgb24gS1BST0JFU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctODAwLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjgwMTpjb25maWcgS1BST0JFX0VWRU5UU19PTl9OT1RSQUNFXFxua2VybmVsL3RyYWNlL0tjb25maWctODAyLVxcdGJvb2wgXFxcIkRvIE5PVCBwcm90ZWN0IG5vdHJhY2UgZnVuY3Rpb24gZnJvbSBrcHJvYmUgZXZlbnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NzowNy43MTI3ODM2NjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyNDIwODEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnJvbSBhbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBKSVQgQ29tcGlsYXRpb246IEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYEtQUk9CRV9FVkVOVFNgLiBJdCdzIHByZXR0eSBmdW5kYW1lbnRhbCBrbm93bGVkZ2UgdGhhdCB0aGlzIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBLUFJPQkVTYCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gaGVyZSwgZXNwZWNpYWxseSBpZiBzb21ldGhpbmcgaXMgYmVpbmcgdXBkYXRlZCBpbiBteSBjb2RlIG9yIGNvbmZpZ3VyYXRpb24uIFNpbmNlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGtwcm9iZXMgaW5mcmFzdHJ1Y3R1cmUsIEkgY2FuIGVhc2lseSByZWNhbGwgdGhpcyBwb2ludC5cblxuTm93LCBhIHJlbGF0ZWQgYXJlYSB0aGF0IGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QgaXMgdGhlIHBlcmZvcm1hbmNlIGFzcGVjdCwgYW5kIHNwZWNpZmljYWxseSB0aGUgaW1wbGljYXRpb25zIG9mIEpJVCBjb21waWxhdGlvbiwgb3IgYEJQRl9KSVRgLCBpbiB0aGlzIGNvbnRleHQuIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlJ3MgYW55IHJlbGF0aW9uIGJldHdlZW4gdGhlIGtwcm9iZSBldmVudHMgYW5kIHRoZSBKSVQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1pbmQgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uIGFuZCB1c2FnZSBvZiB0aGUgQlBGIEpJVC4gVGltZSB0byBjcm9zcy1jaGVjayB0aGUgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBgQlBGX0pJVGAuIFRoZXJlIGNvdWxkIGJlIHNvbWUgc3VidGxlIGludGVyYWN0aW9ucyBJIHNob3VsZCBjb25zaWRlciwgbGlrZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBLUFJPQkVfRVZFTlRTYCBhbmQgYEJQRl9KSVRgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjE1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6MTEuNjM2OTk1MTE2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMwNTU1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6MTEuNjgyMzA4MzExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODU2NTM5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkJQRiBKSVQgRGVwZW5kZW5jeSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBCUEZfSklUYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCBzZWVtcyB0byByZWx5IG9uIGVpdGhlciBgSEFWRV9DQlBGX0pJVGAgb3IgYEhBVkVfRUJQRl9KSVRgLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgcG90ZW50aWFsIGFyY2hpdGVjdHVyZXMgaW52b2x2ZWQsICphbmQqIGFsc28gcmVxdWlyZXMgYE1PRFVMRVNgLiBHb3QgaXQuIEp1c3QgZG91YmxlLWNoZWNraW5nIHRvIGNvbmZpcm0gdGhhdCB1bmRlcnN0YW5kaW5nLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgYGtlcm5lbC9icGYvS2NvbmZpZ2AuIEl0J3MgYWx3YXlzIHNtYXJ0IHRvIGNvbmZpcm0gYXNzdW1wdGlvbnMsIGV2ZW4gd2hlbiB0aGV5IHNlZW0gb2J2aW91cy4gSXQncyB0b28gZWFzeSB0byBtYWtlIGEgc21hbGwgZXJyb3IgYW5kIHRoZW4gc3BlbmQgYSB3aGlsZSBkZWJ1Z2dpbmcgaXQgbGF0ZXIuIExldCdzIHNlZSBpZiB0aGVyZSdzIGFueSBzdWJ0bGV0eSBJJ3ZlIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjE2LjI2Nzk2NDQ2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9DQlBGX0pJVCB8fCBIQVZFX0VCUEZfSklUXFxuICA0NjpcXHRcXHRzZWxlY3QgRVhFQ01FTVxcbiAgNDc6XFx0XFx0aGVscFxcbiAgNDg6XFx0XFx0ICBCUEYgcHJvZ3JhbXMgYXJlIG5vcm1hbGx5IGhhbmRsZWQgYnkgYSBCUEYgaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uXFxuICA0OTpcXHRcXHQgIGFsbG93cyB0aGUga2VybmVsIHRvIGdlbmVyYXRlIG5hdGl2ZSBjb2RlIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZFxcbiAgNTA6XFx0XFx0ICBpbnRvIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHNwZWVkLXVwIHByb2Nlc3Npbmcgb2YgQlBGXFxuICA1MTpcXHRcXHQgIHByb2dyYW1zLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRcXHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxcbiAgNTQ6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcXG4gIDU1OlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxcbiAgNTY6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXFxuICA1NzpcXHRcXG4gIDU4OlxcdGNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbiAgNTk6XFx0XFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjE2LjI2ODAyNTUzOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDk4MjM1MTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgVGhpbmtpbmcgb24gQlBGIEpJVCBEZXBlbmRlbmNpZXMgYW5kIFRyYW1wb2xpbmVzKipcblxuUmlnaHQsIHNvIGBCUEZfSklUYCBoaW5nZXMgb24gYEJQRmAgaXRzZWxmLCBuYXR1cmFsbHkuIEFuZCBpdCdzIGFsc28gY29uZGl0aW9uYWwgb24gZWl0aGVyIGBIQVZFX0NCUEZfSklUYCBvciBgSEFWRV9FQlBGX0pJVGAgYmVpbmcgZGVmaW5lZC4gVGhhdCBtYWtlcyBzZW5zZTsgd2UgbmVlZCAqc29tZSoga2luZCBvZiBKSVQgY2FwYWJpbGl0eSB0byBlbmFibGUgdGhlIGJyb2FkZXIgSklUIGZlYXR1cmUuXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLiBUaGlzIGhhcyBtZSB3b25kZXJpbmcgaWYgYEZQUk9CRWAgb3IgYEZUUkFDRWAgYXJlIGFsc28gcHJlcmVxdWlzaXRlcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb25uZWN0aW9ucyBoZXJlLCBzbyBsZXQncyBjaGVjayBpdHMgc291cmNlIGxvY2F0aW9uLi4uIGFoLCBpdCdzIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIEdvb2QsIHRoYXQgbmFycm93cyB0aGUgc2NvcGUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpczogQXJlIHRoZXJlICphbnkqIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMsIGJleW9uZCB0aGUgb2J2aW91cz8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgY29uZGl0aW9uYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjIxLjc2NjI2MzgxMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzNzA2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTg5LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1OTA6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTkxLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYxNS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjE2OnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9yb2xsYmFjayhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MTcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzMi1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjMzOmludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM0LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3OS1cXHRmb3JfZWFjaF9tbm9kZShtbm9kZSwgbGluaykge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODA6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODEtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA3LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MDg6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MDktXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzE3LVxcdFxcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lLCBcXHUwMDI2bW5vZGUtXFx1MDAzZW5vZGUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MTg6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzE5LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MzM9dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0My1cXHRcXHRkYXRhLVxcdTAwM2VlbnRyeSA9IFxcdTAwMjZtbm9kZS1cXHUwMDNlZW50cnk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc0NDpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0NS1cXHRcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSwgbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzU1LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NTY6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjIxLjgxNjY0NDQ1N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDk1NTg2NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgQ29tcGlsYXRpb24gUHJvY2VzcyBmb3IgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAqKlxuXG5SaWdodCwgc28gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAuLi4gSSdtIHByZXR0eSBzdXJlIHRoYXQgZnVuY3Rpb24gZ2V0cyBjb21waWxlZCB3aGVuIGB0cmFtcG9saW5lLmNgIGdldHMgY29tcGlsZWQuIFRoYXQgbXVjaCBpcyBzdHJhaWdodGZvcndhcmQuIEJ1dCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgdGhlcmUgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIGxpa2UgYW4gYCNpZmRlZmAsIGNvbnRyb2xsaW5nIGl0cyBjb21waWxhdGlvbj8gSXMgaXQgY29uZGl0aW9uYWxseSBpbmNsdWRlZCBiYXNlZCBvbiBzb21lIGZlYXR1cmUgZmxhZyBvciBjb25maWd1cmF0aW9uIG9wdGlvbj8gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBhdmFpbGFiaWxpdHkgYW5kIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIGNvbXBvbmVudHMuIEdvdHRhIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZ3VhcmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUxOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjI1LjkxMjIzNDUwM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NDY2NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0xNTE3PWludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTE4LVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MTUxOTppbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTIwLVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MTYzMz1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaGFzX3RyYW1wb2xpbmUoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjM2LX1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjE2Mzc6c3RhdGljIGlubGluZSBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuaW5jbHVkZS9saW51eC9icGYuaC0xNjM4LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1NzoyNS45NTk3ODg0MzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzNzIwODMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBCUEYgSGVhZGVyJ3MgR3VhcmRzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gd2l0aGluIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hpY2ggYCNpZmRlZmAgZGlyZWN0aXZlcywgb3Igc2ltaWxhciBjb25zdHJ1Y3RzIGxpa2UgYCNpZiBkZWZpbmVkKClgLCBhcmUgdXNlZCB0byBndWFyZCB0aGUgY29yZSBkZWNsYXJhdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gSSB3YW50IHRvIHNlZSB3aGljaCBmZWF0dXJlcyBvciBrZXJuZWwgdmVyc2lvbnMsIG9yIHBlcmhhcHMgZXZlbiBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzLCB0cmlnZ2VyIG9yIGRpc2FibGUgY2VydGFpbiBCUEYgZnVuY3Rpb25hbGl0aWVzLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGV2b2x1dGlvbiBvZiB0aGUgQlBGIEFQSSBhbmQgaG93IGl0J3MgaGFuZGxlZCBhY3Jvc3MgdmFyaW91cyBjb25maWd1cmF0aW9ucy4gS25vd2luZyB0aGVzZSBndWFyZHMgaXMgY3J1Y2lhbCBmb3IgY29tcGF0aWJpbGl0eSBhbmFseXNpcyBhbmQgdW5kZXJzdGFuZGluZyB3aGljaCBCUEYgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSwgd2hpY2ggYXJlIGRlcHJlY2F0ZWQgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBrZXJuZWwgdmVyc2lvbnMuIEknbGwgZm9jdXMgb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZ3VhcmRzIHJlbGF0aW5nIHRvIGtlcm5lbCB2ZXJzaW9ucywgc3BlY2lmaWMgaGFyZHdhcmUgKGxpa2UgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgc3BlY2lhbGl6ZWQgaW5zdHJ1Y3Rpb25zKSwgb3IgcG9zc2libHkgZXZlbiBvcHRpb25hbCBCUEYgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTg4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6MzAuNTk2OTk5OTg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MDA6XFx0XFx0XFx0cmV0dXJuIC1FMkJJRztcXG4xNTAxOlxcdFxcbjE1MDI6XFx0XFx0cmV0dXJuIDA7XFxuMTUwMzpcXHR9XFxuMTUwNDpcXHRcXG4xNTA1OlxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rO1xcbjE1MDY6XFx0XFxuMTUwNzpcXHQjaWZkZWYgQ09ORklHX0JQRl9KSVRcXG4xNTA4OlxcdGludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbjE1MDk6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbjE1MTA6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nKTtcXG4xNTExOlxcdGludCBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXFxuMTUxMjpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4xNTEzOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nKTtcXG4xNTE0OlxcdHN0cnVjdCBicGZfdHJhbXBvbGluZSAqYnBmX3RyYW1wb2xpbmVfZ2V0KHU2NCBrZXksXFxuMTUxNTpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbyk7XFxuMTUxNjpcXHR2b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKTtcXG4xNTE3OlxcdGludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcyk7XFxuMTUxODpcXHRcXG4xNTE5OlxcdGludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4xNTIwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcXG4xNTIxOlxcdHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4xNTIyOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7XFxuMTUyMzpcXHR2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpO1xcbjE1MjQ6XFx0XFxuMTUyNTpcXHQvKlxcbjE1MjY6XFx0ICogV2hlbiB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIFNUQVRJQ19DQUxMIHJlcGxhY2UgdGhlIGJwZl9kaXNwYXRjaGVyX2ZuXFxuMTUyNzpcXHQgKiBpbmRpcmVjdGlvbiB3aXRoIGEgZGlyZWN0IGNhbGwgdG8gdGhlIGJwZiBwcm9ncmFtLiBJZiB0aGUgYXJjaGl0ZWN0dXJlIGRvZXNcXG4xNTI4OlxcdCAqIG5vdCBoYXZlIFNUQVRJQ19DQUxMLCBhdm9pZCBhIGRvdWJsZS1pbmRpcmVjdGlvbi5cXG4xNTI5OlxcdCAqL1xcbjE1MzA6XFx0I2lmZGVmIENPTkZJR19IQVZFX1NUQVRJQ19DQUxMXFxuMTUzMTpcXHRcXG4xNTMyOlxcdCNkZWZpbmUgX19CUEZfRElTUEFUQ0hFUl9TQ19JTklUKF9uYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4xNTMzOlxcdFxcdC5zY19rZXkgPSBcXHUwMDI2U1RBVElDX0NBTExfS0VZKF9uYW1lKSxcXHRcXHRcXHRcXFxcXFxuMTUzNDpcXHRcXHQuc2NfdHJhbXAgPSBTVEFUSUNfQ0FMTF9UUkFNUF9BRERSKF9uYW1lKSxcXG4xNTM1OlxcdFxcbjE1MzY6XFx0I2RlZmluZSBfX0JQRl9ESVNQQVRDSEVSX1NDKG5hbWUpXFx0XFx0XFx0XFx0XFxcXFxcbjE1Mzc6XFx0XFx0REVGSU5FX1NUQVRJQ19DQUxMKGJwZl9kaXNwYXRjaGVyXyMjbmFtZSMjX2NhbGwsIGJwZl9kaXNwYXRjaGVyX25vcF9mdW5jKVxcbjE1Mzg6XFx0XFxuMTUzOTpcXHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfQ0FMTChuYW1lKVxcdFxcdFxcdFxcdFxcXFxcXG4xNTQwOlxcdFxcdHN0YXRpY19jYWxsKGJwZl9kaXNwYXRjaGVyXyMjbmFtZSMjX2NhbGwpKGN0eCwgaW5zbnNpLCBicGZfZnVuYylcXG4xNTQxOlxcdFxcbjE1NDI6XFx0I2RlZmluZSBfX0JQRl9ESVNQQVRDSEVSX1VQREFURShfZCwgX25ldylcXHRcXHRcXHRcXFxcXFxuMTU0MzpcXHRcXHRfX3N0YXRpY19jYWxsX3VwZGF0ZSgoX2QpLVxcdTAwM2VzY19rZXksIChfZCktXFx1MDAzZXNjX3RyYW1wLCAoX25ldykpXFxuMTU0NDpcXHRcXG4xNTQ1OlxcdCNlbHNlXFxuMTU0NjpcXHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfU0NfSU5JVChuYW1lKVxcbjE1NDc6XFx0I2RlZmluZSBfX0JQRl9ESVNQQVRDSEVSX1NDKG5hbWUpXFxuMTU0ODpcXHQjZGVmaW5lIF9fQlBGX0RJU1BBVENIRVJfQ0FMTChuYW1lKVxcdFxcdGJwZl9mdW5jKGN0eCwgaW5zbnNpKVxcbjE1NDk6XFx0I2RlZmluZSBfX0JQRl9ESVNQQVRDSEVSX1VQREFURShfZCwgX25ldylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6MzAuNTk3MTkwNzA4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NzQxMDY3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIEJQRiBKSVQgQ29uZmlndXJhdGlvbiBhbmQgTXVsdGktQXR0YWNoKipcblxuUmlnaHQsIHNvIGBDT05GSUdfQlBGX0pJVGAgaXMgdGhlIGJpZyBrYWh1bmEsIHRoZSBwcmltYXJ5IHN3aXRjaCB0aGF0IGNvbnRyb2xzIHRoZSBlbnRpcmUgQlBGIEp1c3QtSW4tVGltZSBjb21waWxlci4gSXQncyB0aGUgZ2F0ZWtlZXBlciwgcmVhbGx5LiBBbnkgQlBGLXJlbGF0ZWQgd29yaywgZXNwZWNpYWxseSBvcHRpbWl6YXRpb25zLCBsaWtlbHkgaGluZ2VzIG9uIHRoaXMgYmVpbmcgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11bHRpLWF0dGFjaCB0cmFjaW5nIGlzIGhhbmRsZWQuIExldCBtZSBsb29rIGF0IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaGF0IGZ1bmN0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgbG93ZG93biBvbiBob3cgbXVsdGlwbGUgQlBGIHByb2dyYW1zIGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgc2FtZSB0cmFjZXBvaW50LCBrcHJvYmUsIG9yIHVwcm9iZS4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGNvbmN1cnJlbmN5IGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBKSVQgcHJvY2Vzcy4gSSBiZXQgdGhlcmUncyBzb21lIGludGVyZXN0aW5nIHN0dWZmIGluIHRoZXJlIGFib3V0IHByb2dyYW0gb3JkZXJpbmcsIHJlc291cmNlIGNvbnRlbnRpb24sIGFuZCwgb2YgY291cnNlLCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBJJ20gdHJ5aW5nIHRvIG9wdGltaXplLiBUaW1lIHRvIGRpdmUgaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjQwLjQ3MTMwMDkzNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMTYwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOT1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM5LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODQwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MS17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkzMDppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1Nzo0MC41MTk1MjIxNzlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyOTc1MjYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBDb25mdXNpb24qKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIEknbSBqdXN0IHJldmlld2luZyB0aGUgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgZmlsZSBhbmQsIHdhaXQgYSBtaW51dGUsIGFyZSB0aGVyZSAqdHdvKiBkZWZpbml0aW9ucyBvZiBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpbiB0aGVyZT8gVGhpcyBpcyBkZWZpbml0ZWx5IHVudXN1YWwgYW5kIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgaXMgdGhlIGNhc2UuIElzIG9uZSBvZiB0aGVtIGEgcHJvdG90eXBlIGFuZCB0aGUgb3RoZXIgdGhlIGFjdHVhbCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbj8gT3IgYXJlIHRoZXkgYm90aCBpbXBsZW1lbnRhdGlvbnMsIHBlcmhhcHMgZm9yIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIG9yIGtlcm5lbCB2ZXJzaW9ucywgY29uZGl0aW9uYWwgb24gc29tZSBtYWNybz8gT3IgbWF5YmUgaXTigJlzIGEgY2FzZSBvZiBvbmUgYmVpbmcgYSBsZWdhY3kgZnVuY3Rpb24gYW5kIHRoZSBvdGhlciB0aGUgbmV3IHJlcGxhY2VtZW50PyBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgY2xhcmlmeSB0aGUgcHVycG9zZSBvZiBlYWNoIGRlZmluaXRpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVpciBwcmVzZW5jZS4gVGhpcyBjb3VsZCBpbmRpY2F0ZSBhIHN1YnRsZSBidWcgb3IsIHdvcnNlLCBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGlmIGEgY29uZnVzaW9uIGluIGZ1bmN0aW9uIGNhbGxzIGNhbiBiZSBleHBsb2l0ZWQuIEkgbXVzdCBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc1OSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjQ2LjU0OTI3NzUyOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MzAsXG4gIFwiTGluZUNvdW50XCI6IDExMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzODMwOlxcdFxcbjM4MzE6XFx0XFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbjM4MzI6XFx0XFx0XFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XFxuMzgzMzpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM4MzQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzgzNTpcXHRcXHRcXHR9XFxuMzgzNjpcXHRcXHR9XFxuMzgzNzpcXHRcXHRyZXR1cm4gZXJyO1xcbjM4Mzg6XFx0fVxcbjM4Mzk6XFx0XFxuMzg0MDpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzg0MTpcXHR7XFxuMzg0MjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XFxuMzg0MzpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XFxuMzg0NDpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcbjM4NDU6XFx0XFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XFxuMzg0NjpcXHRcXHR1NjQgX191c2VyICp1Y29va2llcztcXG4zODQ3OlxcdFxcdHU2NCAqY29va2llcyA9IE5VTEw7XFxuMzg0ODpcXHRcXHR1MzIgX191c2VyICp1aWRzO1xcbjM4NDk6XFx0XFx0aW50IGVycjtcXG4zODUwOlxcdFxcbjM4NTE6XFx0XFx0dWlkcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmlkcyk7XFxuMzg1MjpcXHRcXHRjbnQgPSBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmNudDtcXG4zODUzOlxcdFxcbjM4NTQ6XFx0XFx0aWYgKCFjbnQgfHwgIXVpZHMpXFxuMzg1NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zODU2OlxcdFxcdGlmIChjbnQgXFx1MDAzZSBNQVhfVFJBQ0lOR19NVUxUSV9DTlQpXFxuMzg1NzpcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbjM4NTg6XFx0XFx0aWYgKGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmZsYWdzIHx8IGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZClcXG4zODU5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM4NjA6XFx0XFxuMzg2MTpcXHRcXHRpZHMgPSBrdm1hbGxvY19vYmpzKCppZHMsIGNudCk7XFxuMzg2MjpcXHRcXHRpZiAoIWlkcylcXG4zODYzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM4NjQ6XFx0XFxuMzg2NTpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoaWRzLCB1aWRzLCBjbnQgKiBzaXplb2YoKmlkcykpKSB7XFxuMzg2NjpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjM4Njc6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODY4OlxcdFxcdH1cXG4zODY5OlxcdFxcbjM4NzA6XFx0XFx0dWNvb2tpZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudHJhY2luZ19tdWx0aS5jb29raWVzKTtcXG4zODcxOlxcdFxcdGlmICh1Y29va2llcykge1xcbjM4NzI6XFx0XFx0XFx0Y29va2llcyA9IGt2bWFsbG9jX29ianMoKmNvb2tpZXMsIGNudCk7XFxuMzg3MzpcXHRcXHRcXHRpZiAoIWNvb2tpZXMpIHtcXG4zODc0OlxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMzg3NTpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM4NzY6XFx0XFx0XFx0fVxcbjM4Nzc6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGNvb2tpZXMsIHVjb29raWVzLCBjbnQgKiBzaXplb2YoKmNvb2tpZXMpKSkge1xcbjM4Nzg6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4zODc5OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg4MDpcXHRcXHRcXHR9XFxuMzg4MTpcXHRcXHR9XFxuMzg4MjpcXHRcXG4zODgzOlxcdFxcdGVyciA9IGNoZWNrX2R1cF9pZHMoaWRzLCBjb29raWVzLCBjbnQpO1xcbjM4ODQ6XFx0XFx0aWYgKGVycilcXG4zODg1OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg4NjpcXHRcXG4zODg3OlxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEkpIHtcXG4zODg4OlxcdFxcdFxcdGZleGl0cyA9IGt2bWFsbG9jX29ianMoKmZleGl0cywgY250KTtcXG4zODg5OlxcdFxcdFxcdGlmICghZmV4aXRzKSB7XFxuMzg5MDpcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjM4OTE6XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODkyOlxcdFxcdFxcdH1cXG4zODkzOlxcdFxcdH1cXG4zODk0OlxcdFxcbjM4OTU6XFx0XFx0bGluayA9IGt2emFsbG9jX2ZsZXgoKmxpbmssIG5vZGVzLCBjbnQpO1xcbjM4OTY6XFx0XFx0aWYgKCFsaW5rKSB7XFxuMzg5NzpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjM4OTg6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODk5OlxcdFxcdH1cXG4zOTAwOlxcdFxcbjM5MDE6XFx0XFx0YnBmX2xpbmtfaW5pdChcXHUwMDI2bGluay1cXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJLFxcbjM5MDI6XFx0XFx0XFx0ICAgICAgXFx1MDAyNmJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcywgcHJvZywgcHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpO1xcbjM5MDM6XFx0XFxuMzkwNDpcXHRcXHRlcnIgPSBicGZfbGlua19wcmltZShcXHUwMDI2bGluay1cXHUwMDNlbGluaywgXFx1MDAyNmxpbmtfcHJpbWVyKTtcXG4zOTA1OlxcdFxcdGlmIChlcnIpXFxuMzkwNjpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM5MDc6XFx0XFxuMzkwODpcXHRcXHRsaW5rLVxcdTAwM2Vub2Rlc19jbnQgPSBjbnQ7XFxuMzkwOTpcXHRcXHRsaW5rLVxcdTAwM2Vjb29raWVzID0gY29va2llcztcXG4zOTEwOlxcdFxcdGxpbmstXFx1MDAzZWZleGl0cyA9IGZleGl0cztcXG4zOTExOlxcdFxcbjM5MTI6XFx0XFx0ZXJyID0gYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHByb2csIGlkcywgbGluayk7XFxuMzkxMzpcXHRcXHRrdmZyZWUoaWRzKTtcXG4zOTE0OlxcdFxcdGlmIChlcnIpIHtcXG4zOTE1OlxcdFxcdFxcdGJwZl9saW5rX2NsZWFudXAoXFx1MDAyNmxpbmtfcHJpbWVyKTtcXG4zOTE2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzkxNzpcXHRcXHR9XFxuMzkxODpcXHRcXHRyZXR1cm4gYnBmX2xpbmtfc2V0dGxlKFxcdTAwMjZsaW5rX3ByaW1lcik7XFxuMzkxOTpcXHRcXG4zOTIwOlxcdGVycm9yOlxcbjM5MjE6XFx0XFx0a3ZmcmVlKGZleGl0cyk7XFxuMzkyMjpcXHRcXHRrdmZyZWUoY29va2llcyk7XFxuMzkyMzpcXHRcXHRrdmZyZWUoaWRzKTtcXG4zOTI0OlxcdFxcdGt2ZnJlZShsaW5rKTtcXG4zOTI1OlxcdFxcdHJldHVybiBlcnI7XFxuMzkyNjpcXHR9XFxuMzkyNzpcXHRcXG4zOTI4OlxcdCNlbHNlXFxuMzkyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6NDYuNTQ5NTI4MTc5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNDIyMDk2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgaGVyZSB3ZSBhcmUsIHN0YXJpbmcgZG93biB0aGlzIGAjZWxzZWAgYmxvY2suIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQncyBkcml2aW5nIGl0PyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHN0YXRlIHRoYXQgbGVhZHMgdG8gdGhpcyBicmFuY2guIFRoZSBjcnVjaWFsIGNvbnRleHQgaGVyZSBpcyB0aGUgcHJlY2VkaW5nIGAjaWZkZWZgIG9yIGAjaWZuZGVmYCBjb25zdHJ1Y3QuIFRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyB0aGUga2V5IGhlcmUuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgcmFjZXMgdGhyb3VnaCBwb3RlbnRpYWwgc2NlbmFyaW9zOiBXaGF0IHByZXByb2Nlc3NvciBzeW1ib2xzIGFyZSBkZWZpbmVkPyBBbmQsIGltcG9ydGFudGx5LCAqaG93KiBhcmUgdGhleSBkZWZpbmVkPyBJcyB0aGlzIGEgc2ltcGxlIGZsYWcsIGEgbWFjcm8gd2l0aCBhcmd1bWVudHMsIG9yIGEgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb24gc2V0dGluZz8gQXJlIHRoZXJlIG5lc3RlZCBjb25kaXRpb25hbHMgSSBuZWVkIHRvIHVudGFuZ2xlPyBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byB3aGVyZSB0aGUgYCNpZmRlZmAgb3IgYCNpZm5kZWZgIGlzIHVzZWQgYW5kIGNvbnNpZGVyIGFsbCB0aGUgZmlsZXMuXG5cblRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljYWwgZmxvdyBvZiB0aGUgY29kZSBhdCBjb21waWxlIHRpbWUuIEluIG9yZGVyIHRvIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBwYXRod2F5LCBJIGhhdmUgdG8ga25vdyB0aGUgc3ltYm9sIGRlZmluaXRpb24uIFRoaXMgaXMgdGhlIGx5bmNocGluLCB0aGUgY29uZGl0aW9uIHRoYXQgZGljdGF0ZXMgd2hldGhlciB0aGlzIGAjZWxzZWAgYmxvY2sgaXMgZXZlbiBpbmNsdWRlZCBpbiB0aGUgZmluYWwgY29tcGlsYXRpb24gdW5pdC4gV2hhdCBpcyB0aGUgdmFsdWUgb2YgdGhpcyBzeW1ib2wsIGl0cyBzY29wZSwgYW5kIGhvdyBpdCBpcyBiZWluZyBkZWZpbmVkP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6NTEuNTkxNzQyMTYyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYzMjU3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00Ny1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6NDg6I2lmZGVmIENPTkZJR19NT0RVTEVTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTQ5LXN0cnVjdCBicGZfdHJhY2VfbW9kdWxlIHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzM9dW5zaWduZWQgaW50IHRyYWNlX2NhbGxfYnBmX2ZhdWx0YWJsZShzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqY3R4KVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTg1OiNpZmRlZiBDT05GSUdfQlBGX0tQUk9CRV9PVkVSUklERVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODYtQlBGX0NBTExfMihicGZfb3ZlcnJpZGVfcmV0dXJuLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB1bnNpZ25lZCBsb25nLCByYylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMDY9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9zdHJfcHJvdG8gPSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMTU6I2lmZGVmIENPTkZJR19BUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTYtQlBGX0NBTExfMyhicGZfcHJvYmVfcmVhZF9jb21wYXQsIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9OTYxPUJURl9TRVRfU1RBUlQoYnRmX2FsbG93bGlzdF9kX3BhdGgpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjk2MjojaWZkZWYgQ09ORklHX1NFQ1VSSVRZXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2My1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2NT1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9vcGVuKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05NjYtI2VuZGlmXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjk2NzojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1BBVEhcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTY4LUJURl9JRChmdW5jLCBzZWN1cml0eV9wYXRoX3RydW5jYXRlKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEwNzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9lbnRyeV9pcCh1bnNpZ25lZCBsb25nIGZlbnRyeV9pcClcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3Ni17XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwNzc6I2lmZGVmIENPTkZJR19YODZfS0VSTkVMX0lCVFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDc4LVxcdGlmIChpc19lbmRicigodm9pZCAqKShmZW50cnlfaXAgLSBFTkRCUl9JTlNOX1NJWkUpKSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMDg0PUJQRl9DQUxMXzEoYnBmX2dldF9mdW5jX2lwX2twcm9iZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDg4LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMDg5OiNpZmRlZiBDT05GSUdfVVBST0JFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDkwLVxcdHJ1bl9jdHggPSBjb250YWluZXJfb2YoY3VycmVudC1cXHUwMDNlYnBmX2N0eCwgc3RydWN0IGJwZl90cmFjZV9ydW5fY3R4LCBydW5fY3R4KTtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMjc0PWJwZl90cmFjaW5nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTI4MC1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZF9wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTI4MTojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEyODItXFx0Y2FzZSBCUEZfRlVOQ19wcm9iZV9yZWFkOlxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEzNDM9a3Byb2JlX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMzUxLVxcdFxcdHJldHVybiBwcm9nLVxcdTAwM2VzbGVlcGFibGUgPyBcXHUwMDI2YnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG8gOiBcXHUwMDI2YnBmX2dldF9zdGFja19wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTM1MjojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTM1My1cXHRjYXNlIEJQRl9GVU5DX292ZXJyaWRlX3JldHVybjpcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI2PXRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MzAtXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3MzE6I2lmZGVmIENPTkZJR19ORVRcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTczMi1cXHRjYXNlIEJQRl9GVU5DX3NrYl9vdXRwdXQ6XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTgyOD1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHJhd190cmFjZXBvaW50X3Byb2dfb3BzID0ge1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxODI5OiNpZmRlZiBDT05GSUdfTkVUXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4MzAtXFx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyMDk9aW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDMtXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNDQ6I2lmZGVmIENPTkZJR19LUFJPQkVfRVZFTlRTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDUtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfS1BST0JFKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDktI2VuZGlmXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNTA6I2lmZGVmIENPTkZJR19VUFJPQkVfRVZFTlRTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNTEtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfVVBST0JFKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyNzM9c3Vic3lzX2luaXRjYWxsKHNlbmRfc2lnbmFsX2lycV93b3JrX2luaXQpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjc1OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc2LXN0YXRpYyBpbnQgYnBmX2V2ZW50X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG9wLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIzMjk9c3RydWN0IGJwZl9zZXNzaW9uX3J1bl9jdHgge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzQtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIzMzU6I2lmZGVmIENPTkZJR19GUFJPQkVcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjMzNi1zdHJ1Y3QgYnBmX2twcm9iZV9tdWx0aV9saW5rIHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNDQ5PXN0YXRpYyBpbnQgYnBmX2twcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk4LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyNDk5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNTAwLXN0YXRpYyB2b2lkIGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI1MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX2twcm9iZV9tdWx0aV9saW5rX2xvcHMgPSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUyOC1cXHQuZmlsbF9saW5rX2luZm8gPSBicGZfa3Byb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI1Mjk6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI1MzAtXFx0LnNob3dfZmRpbmZvID0gYnBmX2twcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yOTQ0PXN0YXRpYyB1NjQgYnBmX2twcm9iZV9tdWx0aV9lbnRyeV9pcChzdHJ1Y3QgYnBmX3J1bl9jdHggKmN0eClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTQ5LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyOTUwOiNpZmRlZiBDT05GSUdfVVBST0JFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTUxLXN0cnVjdCBicGZfdXByb2JlX211bHRpX2xpbms7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzAwOD1zdGF0aWMgaW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzA3NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzA3NTojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzA3Ni1zdGF0aWMgdm9pZCBicGZfdXByb2JlX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl91cHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMxMTktXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMTIwOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTIxLVxcdC5zaG93X2ZkaW5mbyA9IGJwZl91cHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzcwMz1zdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTYtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3NTc6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTgtc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODctXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc4ODojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4OS1cXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6NTEuNjQwMzgwNzI3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzA0NzE4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIE11bHRpLUF0dGFjaCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHJldmlld2luZyB0aGUgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgZmlsZSwgYW5kIEknbSBub3QgaW1tZWRpYXRlbHkgc3BvdHRpbmcgdGhlIGAjaWZkZWZgIGNvbmRpdGlvbmFsIHN1cnJvdW5kaW5nIHRoZSBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBmdW5jdGlvbi4gVGhhdCBzZWVtcy4uLiBvZGQuIEkgd2FzIGV4cGVjdGluZyBpdCB0byBiZSB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0IGlzbid0LCBvciB3aGVyZSBpdCBtaWdodCBoYXZlIGJlZW4gcGxhY2VkLiBSaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGAjZWxzZWAgYmxvY2sgc3RhcnRpbmcgYXJvdW5kIGxpbmUgMzkyOS4gUGVyaGFwcyB0aGUgcHJlcHJvY2Vzc29yIGxvZ2ljIGlzIG1vcmUgY29tcGxleCB0aGFuIEkgaW5pdGlhbGx5IGFzc3VtZWQsIGFuZCB0aGUgZnVuY3Rpb24ncyBpbmNsdXNpb24gaXMgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCBtYW5uZXIsIG9yIHVuZGVyIGEgZGlmZmVyZW50IGNvbmRpdGlvbiB0aGF0IGlzIGRlZmluZWQgZWxzZXdoZXJlLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIG11bHRpLWF0dGFjaCBjYXBhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzY5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTc6NTYuNjEwODU1MzQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzkyMDpcXHRlcnJvcjpcXG4zOTIxOlxcdFxcdGt2ZnJlZShmZXhpdHMpO1xcbjM5MjI6XFx0XFx0a3ZmcmVlKGNvb2tpZXMpO1xcbjM5MjM6XFx0XFx0a3ZmcmVlKGlkcyk7XFxuMzkyNDpcXHRcXHRrdmZyZWUobGluayk7XFxuMzkyNTpcXHRcXHRyZXR1cm4gZXJyO1xcbjM5MjY6XFx0fVxcbjM5Mjc6XFx0XFxuMzkyODpcXHQjZWxzZVxcbjM5Mjk6XFx0XFxuMzkzMDpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzkzMTpcXHR7XFxuMzkzMjpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMzkzMzpcXHR9XFxuMzkzNDpcXHRcXG4zOTM1OlxcdCNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU3OjU2LjYxMTA4NTc0NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTEwMzU4MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzOlxuXG4qKkRlY29kaW5nIHRoaXMgUHJlcHJvY2Vzc29yIE1hemUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYCNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgXHUwMDI2XHUwMDI2IENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AuIFRoYXQncyB0aGUgc3RhcnQsIG9yIG1heWJlIGl0J3Mgbm90LiBXYWl0IGEgbWludXRlLi4uIG5vLCBJJ20gYmVpbmcgZm9vbGVkIGhlcmUuIFRoYXQncyBhY3R1YWxseSBhbiBgI2Vsc2VgIGJsb2NrLiBUaGUgcmVhbCBrZXkgaXMgdW5kZXJzdGFuZGluZyB0aGUgYCNpZmAgc3RhdGVtZW50IHRoYXQgdGhpcyBgI2Vsc2VgIGlzIHRpZWQgdG8uIEkndmUgZ290IHRvIHRyYWNlIGJhY2sgYW5kIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgYCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKWAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBicmFuY2ggYmVnaW5zLiBHb3R0YSBmaW5kIHdoZXJlIHRoYXQgaW5pdGlhbCBjb25kaXRpb25hbCBzdGF0ZW1lbnQgaXMgZGVmaW5lZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgYCNlbHNlYCBpcyBldmVuIGFjdGl2ZSBoZXJlLiBJIG5lZWQgdGhlIGNvbnRleHQgb2YgdGhhdCBgI2lmYCB0byBtYWtlIHNlbnNlIG9mIHdoYXQgdGhpcyBibG9jayBpcyBhY3R1YWxseSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NTcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjAyLjcyMTQ0NzQwOFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNjkzMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzY4MD1fX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjgxLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjgyOiNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjgzLSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zOTMwPWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTM0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozOTM1OiNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjAyLjc2ODgyNDMzM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjMwMTg1NjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqVmVyaWZ5aW5nIEZUUkFDRSBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybSBpcyB0aGF0IHdlJ3ZlIGdvdCB0aGUgZm91bmRhdGlvbmFsIEZUUkFDRSBjb21wb25lbnRzIHNldCB1cCBjb3JyZWN0bHkuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nLCB5ZXMsIGJvdGggYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGFyZSBhYnNvbHV0ZWx5IGVzc2VudGlhbCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGV5IGFyZSBub24tbmVnb3RpYWJsZSBwcmVyZXF1aXNpdGVzLiBOb3csIGp1c3QgdG8gbWFrZSBkb3VibHkgc3VyZSwgbGV0J3Mgc3RhcnQgd2l0aCBhIGNoZWNrIG9mIGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBJIHdhbnQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBjcml0aWNhbCBvcHRpb24gaXMgZW5hYmxlZCBhbmQgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIEl0J3MgdGhlIGx5bmNocGluIG9mIHRoZSBkaXJlY3QgY2FsbCBvcHRpbWl6YXRpb24sIHNvIHdlIGhhdmUgdG8gZW5zdXJlIGl0J3MgaW4gcGxhY2UgYmVmb3JlIHdlIGxvb2sgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDU5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTg6MTUuMDcwNjgzNDU4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkwMzU2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTMyND1jb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMjgtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjE1LjUwOTcyNjAyM1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDMyOTY1NTUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIEtlcm5lbCdzIER5bmFtaWMgRnRyYWNlIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCBtZSBicmVhayBkb3duIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBgRFlOQU1JQ19GVFJBQ0VgIGNvbmZpZ3VyYXRpb24gYSBiaXQuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIGJ1dCBsaWtlIGFueSBnb29kIHN5c3RlbSwgdGhlcmUgYXJlIGRlcGVuZGVuY2llcyB0byBjb25zaWRlci4gRnJvbSB3aGF0IEkgc2VlIGhlcmUsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgcmVsaWVzIGhlYXZpbHkgb24gYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGRpcmVjdCBjYWxscyBwcm9iYWJseSBuZWVkIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiBhbmQgdHJhY2tpbmcsIHdoaWNoIHRoZSBcIldJVEhfUkVHU1wiIHBhcnQgd291bGQgZmFjaWxpdGF0ZS4gSXQncyBhbG1vc3QgbGlrZSBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTYCBsYXlzIHRoZSBncm91bmR3b3JrIGFuZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGJ1aWxkcyB1cG9uIGl0LCBwcm92aWRpbmcgdGhhdCBmZWF0dXJlLlxuXG5Ob3csIHRoYXQgc2FpZCBJIG5lZWQgdG8gY29uc2lkZXIgYEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCB3aGljaCBJIG5lZWQgdG8gY2hlY2sgdG8gc2VlIGlmIG15IGFyY2hpdGVjdHVyZSBldmVuICpzdXBwb3J0cyogdGhpcyBkaXJlY3QgY2FsbCBtZXRob2QuIEl0J3MgYWx3YXlzIGltcG9ydGFudCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzLCBhcyBzb21lIGFyY2hpdGVjdHVyZXMgbWlnaHQgbm90IGhhdmUgdGhlIGNhcGFiaWxpdGllcyB0byBpbXBsZW1lbnQgdGhhdCBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgyOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjI1LjgzOTM4NTQxNloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzI1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzI1OlxcdFxcdGRlZl9ib29sIHlcXG4gMzI2OlxcdFxcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VcXG4gMzI3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG4gMzI4OlxcdFxcbiAzMjk6XFx0Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxuIDMzMDpcXHRcXHRkZWZfYm9vbCB5XFxuIDMzMTpcXHRcXHRkZXBlbmRzIG9uIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHUyB8fCBEWU5BTUlDX0ZUUkFDRV9XSVRIX0FSR1NcXG4gMzMyOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9DQUxMX09QU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1ODoyNS44Mzk1MDI0NDZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NzAwNTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipDb25maWd1cmF0aW9uIENvbnVuZHJ1bXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byB0aGUgd2VlZHMgd2l0aCBmdHJhY2UgYWdhaW4uIFJpZ2h0LCB3ZSBhYnNvbHV0ZWx5IG5lZWQgYm90aCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGFuZCBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiBpc24ndCBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbj8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgbm90IG1ha2luZyBhbnkgYXNzdW1wdGlvbnMgaGVyZSBhbmQgdGhhdCBvdXIgcGxhdGZvcm0gaXMgYWN0dWFsbHkgY2FwYWJsZSBvZiB3aGF0IHdlJ3JlIGFpbWluZyBmb3IuIExldCdzIGdvIHZlcmlmeSB0aGlzIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzMTUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjI5Ljc5NjUxMDMxNVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI1NDc0NjE3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjMwLjEyMTk5MjQ0MloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQ5NjU0NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgVHJhY2UgRmVhdHVyZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMuIEknbSB0aGlua2luZyBJIHNob3VsZCB1c2UgYGdyZXBgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaW5kIG91dCB3aGVyZSB0aGUgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBJcyBpdCBpbiBhIEtjb25maWcgZmlsZT8gTWF5YmUgaXQncyBkZWZpbmVkIGluIG11bHRpcGxlIHBsYWNlcy4gVGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyBga2VybmVsL3RyYWNlL0tjb25maWdgLCBidXQgSSB3YW50IHRvIGJlIGNvbXByZWhlbnNpdmUsIGp1c3QgaW4gY2FzZSB0aGlzIGlzIGEgbW9yZSBjb21wbGV4IHNpdHVhdGlvbi4gU28sIEkgbmVlZCB0byBjaGVjayBlaXRoZXIgdGhlcmUgb3IsIGlkZWFsbHksIHNlYXJjaCB0aGUgd2hvbGUga2VybmVsIHRyZWUgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLiBJJ2xsIGdldCB0aGF0IHNlYXJjaCBnb2luZyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTU3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTg6MzYuMTcxNjUwMjE5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU4NDQwMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9NTA9Y29uZmlnIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTUyLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjUzOmNvbmZpZyBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU0LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTg6MzguMDMwMDk5MTNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzMzc3NzU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5LiBIZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwcm92aWRlZCB0ZXh0IGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgdGhvdWdodCBwcm9jZXNzLCBhbmQgYXNzdW1pbmcgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipBbmFseXppbmcgdGhlIFNlbGVjdGlvbiBQcm9jZXNzKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbiBoZXJlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKnByZWNpc2VseSogd2hhdCB0aGUgcHJvY2VzcyBpcyB0cnlpbmcgdG8gc2VsZWN0LiBJcyBpdCBhIHNwZWNpZmljIGVsZW1lbnQsIGEgZGF0YSBwb2ludCwgYW4gYWxnb3JpdGhtPyBXaGF0IGFyZSB0aGUgaW5oZXJlbnQgY2hhcmFjdGVyaXN0aWNzIG9mIHdoYXRldmVyJ3MgYmVpbmcgc2VsZWN0ZWQ/IFVuZGVyc3RhbmRpbmcgdGhlICppbnB1dHMqIGlzIGNydWNpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdGhpbmsgYWJvdXQgdGhlIHNlbGVjdGlvbiBtZWNoYW5pc20gaXRzZWxmLiBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCBjb25kaXRpb25hbCBzdGF0ZW1lbnQsIGEgY29tcGxleCB3ZWlnaHRpbmcgc3lzdGVtLCBvciBzb21ldGhpbmcgbW9yZSBhZHZhbmNlZCBsaWtlIGEgbWFjaGluZSBsZWFybmluZyBtb2RlbCBhdCBwbGF5PyBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBwb3NzaWJpbGl0aWVzLiBNeSBleHBlcmllbmNlIGRpY3RhdGVzIHRoYXQgSSBtdXN0IGxvb2sgY2xvc2VseSBhdCB0aGUgZGF0YS4gSSd2ZSBzZWVuIGl0IGFsbCwgYW5kIGtub3cgdG8gY29uc2lkZXIgYWxsIGFuZ2xlcyBhbmQgcG9zc2liaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4NzIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjQzLjY2Mzg4MTYwOVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NTY0MzIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0zMzctXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0NIRURfTUNcXHRcXHRpZiBTTVBcXG5hcmNoL3g4Ni9LY29uZmlnOjMzODpcXHRzZWxlY3QgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcXHRpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5hcmNoL3g4Ni9LY29uZmlnLTMzOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDI6NTg6NDUuNTI5NTMxNzlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg1MjQ0OTY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRGlyZWN0IENhbGwgQlBGIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBpbnRlZ3JhdGlvbiBhbmQgc2VlaW5nIHdoYXQncyByZXF1aXJlZCBmb3IgdGhlIGRpcmVjdCBjYWxsIGZ1bmN0aW9uYWxpdHkuIFRoZSBmaXJzdCB0aGluZyBJJ20gbm90aW5nIGlzIHRoYXQgaXQncyBnYXRlZCBieSBgWDg2XzY0IFx1MDAyNlx1MDAyNiBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIHdoaWNoIG1lYW5zIHdlJ3JlIGxvb2tpbmcgYXQgeDg2XzY0IGFyY2hpdGVjdHVyZSBzcGVjaWZpY2FsbHkuIFRoYXTigJlzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYEJQRl9FVkVOVFNgLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZXJlJ3MgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgd2hpY2ggaW4gdHVybiByZWxpZXMgb24gYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AgYW5kIGBEWU5BTUlDX0ZUUkFDRWAuIFdlIGFsc28gbmVlZCBgS1BST0JFX0VWRU5UU2AgYW5kIGBQRVJGX0VWRU5UU2AuXG5cbkhvbGQgb24uLi50aGlua2luZyBhYm91dCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGEgYml0IG1vcmUsIGl0J3MgYSBgZGVmX2Jvb2wgeWAgd2hlbiBhbGwgaXRzIGRlcGVuZGVuY2llcyBhcmUgbWV0LiBTbywgcmVhbGx5LCBpdCdzIGp1c3QgaW5kaWNhdGluZyB0aGF0IHRoZSBmZWF0dXJlIGlzIGF2YWlsYWJsZS4gSW5zdGVhZCBvZiBsaXN0aW5nIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBEWU5BTUlDX0ZUUkFDRWAsIGl0IGZlZWxzIGNsZWFuZXIgdG8ganVzdCBsaXN0IHRoZSBkaXJlY3QgY2FsbCBvbmUuIFNvLCB0byBiZSBjbGVhciwgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYEJQRl9FVkVOVFNgLCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCBgS1BST0JFX0VWRU5UU2AsIGFuZCBgUEVSRl9FVkVOVFNgLlxuXG5GaW5hbGx5LCB0byB2ZXJpZnkgdGhpcywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGNvZGUuIEknbGwgdGFrZSBhIGxvb2sgYXQgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCB0byBjb25maXJtIGl0IGlzIGd1YXJkZWQgYnkgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjUxLjM4MTk4Mzc2NloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMjQ5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9tdWx0aV9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTg5LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1OTA6c3RhdGljIHZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTkxLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU5NjpzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OTcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYxNS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjE2OnN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9yb2xsYmFjayhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MTcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzMi1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjMzOmludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM0LVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3OS1cXHRmb3JfZWFjaF9tbm9kZShtbm9kZSwgbGluaykge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODA6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODEtXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzA3LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MDg6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MDktXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzE3LVxcdFxcdGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lLCBcXHUwMDI2bW5vZGUtXFx1MDAzZW5vZGUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MTg6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX3JvbGxiYWNrKG1ub2RlLVxcdTAwM2V0cmFtcG9saW5lKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzE5LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MzM9dm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0My1cXHRcXHRkYXRhLVxcdTAwM2VlbnRyeSA9IFxcdTAwMjZtbm9kZS1cXHUwMDNlZW50cnk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc0NDpcXHRcXHRicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChtbm9kZS1cXHUwMDNldHJhbXBvbGluZSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0NS1cXHRcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKFxcdTAwMjZtbm9kZS1cXHUwMDNlbm9kZSwgbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUsIE5VTEwsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzU1LVxcdGZvcl9lYWNoX21ub2RlKG1ub2RlLCBsaW5rKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NTY6XFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWUobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU4OjUxLjQyOTIxOTI5MVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM2NzI3MzgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFRyYW1wb2xpbmUgTXVsdGktQXR0YWNoIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgXCJXaGVyZSBkb2VzIHRoaXMgbGl2ZT9cIiBJdCdzIGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhhdCBmaWxlIGNvbXBpbGVkIHdpdGggYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2A/IE5vLCBhIHF1aWNrIGNoZWNrIHNob3dzIGl0J3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9KSVRgLiBUaGF0J3MgaW1wb3J0YW50IHRvIG5vdGUuXG5cbk5vdywgSSByZW1lbWJlciBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBpcyBvbmx5IGNhbGxlZCBieSBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4gQ3J1Y2lhbGx5LCB0aGF0IGNhbGwgaXMgZ3VhcmRlZCBieSAqYm90aCogYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLiBTbywgdGhhdCBkaWN0YXRlcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cblRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIGNvbmZpZ3MgZm9yIHRoaXMgd2hvbGUgdGhpbmcgYXJlOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBCUEZfRVZFTlRTYCwgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgYW5kLCBldmVuIHRob3VnaCBpdCdzIHNlbGVjdGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUsIGBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AuIEknbGwga2VlcCBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGluIG1pbmQsIGVzcGVjaWFsbHkgd2l0aCB0aGUgcG90ZW50aWFsIG5lZWRzIG9mIHN5emthbGxlciBjb25maWcgZ2VuZXJhdGlvbiAtIHRob3VnaCwgc3l6a2FsbGVyIGRvZXNuJ3QgZGlyZWN0bHkgdXNlIGBIQVZFXypgIGNvbmZpZ3MuIFNvIEkgY2FuIGVpdGhlciBsaXN0IGl0IG9yIGp1c3Qgc3RpY2sgd2l0aCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgYEZUUkFDRWAgYW5kIGBEWU5BTUlDX0ZUUkFDRWAgY29uZmlncy5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvZiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYC4gSXMgaXQgZXhwb3J0ZWQgb3Igc3RhdGljPyBJdCdzIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGtlZXAgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGZvY3VzOiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAsIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlYC4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIGlzIGFjdHVhbGx5IGNhbGxlZCBmcm9tIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2VgLCBqdXN0IHRvIGNvbXBsZXRlIHRoZSBwaWN0dXJlLiBUaGlzIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXJlYSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1OTowMS43OTY0OTY2MTJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Mzk0NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2ODA9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjg0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNjg1OnN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM2ODYte1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg1OlxcdC5yZWxlYXNlID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg2LVxcdC5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1OTowMS44NDM4OTc1OTdaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzNTAxOTMxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFRyYW1wb2xpbmUgRml4KipcblxuT2theSwgc28gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZWAgZG9lcyBpbmRlZWQgY2FsbCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgd2hpY2ggaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhpcyBwYXRjaC4gVGhlIG1haW4gdGhydXN0IGlzIGZpeGluZyBhIFVzZS1BZnRlci1GcmVlIHZ1bG5lcmFiaWxpdHkgbHVya2luZyB3aXRoaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYC4gSXQgc2VlbXMgdGhlIGJ1ZyBzdXJmYWNlcyB3aGVuIGBicGZfdHJhbXBvbGluZV91cGRhdGVgIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbGx5IGltcG9ydGFudCBmaXgsIGRlYWxpbmcgd2l0aCBhIGNvcmUgY29tcG9uZW50IG9mIHRoZSBCUEYgdHJhbXBvbGluZSBtZWNoYW5pc20uIEdpdmVuIGl0cyBjcml0aWNhbGl0eSwgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHdhcnJhbnRlZC4gTm8gcXVlc3Rpb24gYWJvdXQgaXQuXG5cbkxldCBtZSBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBXZSBhcmUgbG9va2luZyBhdCBhIGBXb3J0aEZ1enppbmc6IHRydWVgIHNpdHVhdGlvbi4gVGhlIGZ1bmN0aW9uIHN5bWJvbHMgdG8gcmVhbGx5IHRhcmdldCBkdXJpbmcgZnV6emluZyBhcmU6IGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCwgYW5kIG5hdHVyYWxseSwgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZWAuXG5cbkZvciBjb25maWd1cmF0aW9uLCBJJ2xsIG5lZWQgdGhlc2UgZW5hYmxlZDogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBgQlBGX0VWRU5UU2AsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIGFuZCBgRFlOQU1JQ19GVFJBQ0VgLiBOb3csIGxldCdzIGRvdWJsZS1jaGVjayBhbnkgZGVwZW5kZW5jaWVzLiBSaWdodCwgYEJQRl9FVkVOVFNgIGFsc28gaGluZ2VzIG9uIGBLUFJPQkVfRVZFTlRTYCBvciBgVVBST0JFX0VWRU5UU2AgKmFuZCogYFBFUkZfRVZFTlRTYC4gSSBuZWVkIHRvIGVuc3VyZSB0aG9zZSBhcmUgYWxzbyBlbmFibGVkLiBUaGVyZWZvcmUsIEkgd2lsbCBpbmNsdWRlIGBLUFJPQkVfRVZFTlRTYCBhbmQgYFBFUkZfRVZFTlRTYCBpbiBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gVGhhdCBzaG91bGQgY292ZXIgYWxsIHRoZSBuZWNlc3NhcnkgcmVxdWlyZW1lbnRzIGZvciBmdXp6aW5nIHRoaXMgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NDUsIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU5OjEzLjE5NDA5MzcxN1oiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDQwNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFXCIsXG4gICAgXCJLUFJPQkVfRVZFTlRTXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaFwiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoXCIsXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIFVzZS1BZnRlci1GcmVlIGJ1ZyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgIGJ5IGNvcnJlY3RseSBpZGVudGlmeWluZyB3aGVuIHRoZSBvbGQgaW1hZ2UgaXMgc2FmZSB0byBmcmVlLiBJdCBhbHNvIGNoYW5nZXMgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAgdG8gcmV0dXJuIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgQlBGIHRyYW1wb2xpbmUgbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHN5c2NhbGxzLCBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRVwiLFxuICAgIFwiS1BST0JFX0VWRU5UU1wiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hcIixcbiAgICBcImJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaFwiLFxuICAgIFwiYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCBieSBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgd2hlbiB0aGUgb2xkIGltYWdlIGlzIHNhZmUgdG8gZnJlZS4gSXQgYWxzbyBjaGFuZ2VzIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIHRvIHJldHVybiB2b2lkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIEJQRiB0cmFtcG9saW5lIGxvZ2ljLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBzeXNjYWxscywgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1OToxMy4yNjk1NDA5NjlaIiwiU2VxIjo1NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzgwMzcwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1OToxMy4yNzAxMTQzNjlaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODEzNzQ1OTQxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBVc2UtQWZ0ZXItRnJlZSAoVUFGKSBidWcgaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlYCwgd2hlcmUgYG9sZF9pbWFnZWAgY291bGQgYmUgZnJlZWQgd2hpbGUgc3RpbGwgYmVpbmcgdGhlIGFjdGl2ZSBpbWFnZSAoYGN1cl9pbWFnZWApIGlmIGBicGZfdHJhbXBvbGluZV91cGRhdGUoKWAgZmFpbHMuIFVBRiBidWdzIGFyZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjE5ZjMwZWVlY2YwOWMzNGYwNzg4ZDQ2MTU4MGI5YTM5NTgwN2ZmOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDAyOjU0OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDczYmFjZmM2NDQ0ZGYuLjMyNTVjNmY1ZWE2YjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMTUxOCw4ICsxNTE4LDggQEAgaW50IGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcih2b2lkICppbWFnZSwgdm9pZCAqYnVmLCBzNjQgKmZ1bmNzLCBpbnQgbnVtX2Z1bmNcbiBcbiBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7XG4taW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tXHRcdFx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayk7XG4rdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuK1x0XHRcdFx0IHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKTtcbiB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpO1xuIFxuIC8qXG5AQCAtMTYzOSwxMCArMTYzOSw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuIHtcbiBcdHJldHVybiAtRU5PVFNVUFA7XG4gfVxuLXN0YXRpYyBpbmxpbmUgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuK1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXG4ge1xuLVx0cmV0dXJuIC1FTk9UU1VQUDtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIGJwZl90cmFtcG9saW5lX3NldF9mbGFncyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgZmxhZ3MpIHt9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuaW5kZXggZWQ3OTk5YWQ2YzY2Yy4uNTQ0YWI0MWEzYzI1NiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuQEAgLTE1OTUsNyArMTU5NSwxOCBAQCBzdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfaW5pdChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuIFxuIHN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG4ge1xuLVx0aWYgKHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UpXG4rXHQvKlxuK1x0ICogT25seSBmcmVlIG9sZF9pbWFnZSBpZiBpdCBpcyBubyBsb25nZXIgdGhlIGFjdGl2ZSBpbWFnZS5cbitcdCAqIFdoZW4gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKCkgZmFpbHMgYmVmb3JlIG1vZGlmeV9mZW50cnlfbXVsdGkoKS9cbitcdCAqIHVucmVnaXN0ZXJfZmVudHJ5X211bHRpKCkgaXMgY2FsbGVkLCBjdXJfaW1hZ2UgaXMgdW5jaGFuZ2VkXG4rXHQgKiAoY3VyX2ltYWdlID09IG9sZF9pbWFnZSkgYW5kIGZ0cmFjZSBzdGlsbCBwb2ludHMgdG8gaXQuIEZyZWVpbmdcbitcdCAqIGl0IHdvdWxkIGNhdXNlIGEgVUFGIHdoZW4gZnRyYWNlIGNhbGxzIGludG8gdGhlIGZyZWVkIG1lbW9yeS5cbitcdCAqIE9uIHN1Y2Nlc3MsIGN1cl9pbWFnZSBpcyBlaXRoZXIgYSBuZXcgaW1hZ2Ugb3IgTlVMTCwgc29cbitcdCAqIG9sZF9pbWFnZSAhPSBjdXJfaW1hZ2UgY29ycmVjdGx5IGlkZW50aWZpZXMgYSBzdGFsZSBpbWFnZSB0aGF0XG4rXHQgKiBpcyBzYWZlIHRvIGZyZWUuXG4rXHQgKi9cbitcdGlmICh0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgIT0gdHItXHUwMDNlY3VyX2ltYWdlKVxuIFx0XHRicGZfdHJhbXBfaW1hZ2VfcHV0KHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UpO1xuIFxuIFx0dHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSA9IE5VTEw7XG5AQCAtMTcxOSw3ICsxNzMwLDggQEAgaW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuK3ZvaWQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbitcdFx0XHRcdCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbiB7XG4gXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfZGF0YSAqZGF0YSA9IFx1MDAyNmxpbmstXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9ub2RlICptbm9kZTtcbkBAIC0xNzQ5LDcgKzE3NjEsNiBAQCBpbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX1xuIFx0XHRicGZfdHJhbXBvbGluZV9wdXQobW5vZGUtXHUwMDNldHJhbXBvbGluZSk7XG4gXG4gXHRjbGVhcl90cmFjaW5nX211bHRpX2RhdGEoZGF0YSk7XG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4gI3VuZGVmIGZvcl9lYWNoX21ub2RlX2NudFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuaW5kZXggODkxODk3ZjhhMWIzNS4uMjkyNjA5NTFhYTg3MSAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuKysrIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5AQCAtMzY4Nyw3ICszNjg3LDcgQEAgc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlKHN0cnVjdCBicGZfbGluayAqbGluaylcbiBcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICp0cl9saW5rID1cbiBcdFx0Y29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rLCBsaW5rKTtcbiBcbi1cdFdBUk5fT05fT05DRShicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gobGluay1cdTAwM2Vwcm9nLCB0cl9saW5rKSk7XG4rXHRicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gobGluay1cdTAwM2Vwcm9nLCB0cl9saW5rKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDAyOjU5OjEzLjI3MDExNTQ5OVoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTM3NDM3NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFRyYW1wb2xpbmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBmaXgsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYSBVc2UtQWZ0ZXItRnJlZSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgQlBGIHRyYW1wb2xpbmUgbWVjaGFuaXNtLiBMZXQncyBicmVhayBpdCBkb3duLiBUaGUgbWFpbiBjaGFuZ2UgSSdtIHNlZWluZyBpcyBhIG1vZGlmaWNhdGlvbiBvZiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCB0byByZXR1cm4gYHZvaWRgIGluc3RlYWQgb2YgYGludGAuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgY2xlYW51cCwgYXMgdGhlIGZ1bmN0aW9uIHdhcyBhbHdheXMgcmV0dXJuaW5nIHplcm8gYW55d2F5LCBhIG1pbm9yIGNvZGUgc3R5bGUgaW1wcm92ZW1lbnQgcmVhbGx5LlxuXG5UaGUgY3JpdGljYWwgYml0LCBob3dldmVyLCBpcyBpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2ZyZWVgLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBjcnVjaWFsIGNoZWNrIGJlZm9yZSBmcmVlaW5nIGBvbGRfaW1hZ2VgLiBOb3cgaXQgb25seSBmcmVlcyBgb2xkX2ltYWdlYCBpZiBpdCBpcyBubyBsb25nZXIgdGhlIGFjdGl2ZSBpbWFnZSAoYHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgIT0gdHItXHUwMDNlY3VyX2ltYWdlYCkuIFRoaXMgcHJldmVudHMgdGhlIFVBRiB3aGVuIGBicGZfdHJhbXBvbGluZV91cGRhdGUoKWAgZmFpbHMgYnV0IHRoZSBhc3NvY2lhdGVkIGNsZWFudXAgaXNuJ3QgY2FsbGVkLCBhcyB0aGUgY29tbWVudCBjbGVhcmx5IHN0YXRlczogXCJGcmVlaW5nIGl0IHdvdWxkIGNhdXNlIGEgVUFGIHdoZW4gZnRyYWNlIGNhbGxzIGludG8gdGhlIGZyZWVkIG1lbW9yeS5cIiBUaGF0IGZhaWx1cmUgY2FzZSBpcyB0aGUga2V5LlxuXG5UaGlzIFVBRiB2dWxuZXJhYmlsaXR5IGlzIHdoYXQgaXQgaXMsIGFuZCBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBjYXRjaCB0aGlzIHR5cGUgb2YgYnVnLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBpcyBiZWluZyBleHBvc2VkIG9yIGZpeGVkIGJ5IHRoaXMsIHNvIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoYXQgY29kZSBhZ2FpbiwgYW5kIGl0IGNvbmZpcm1zIG15IHN1c3BpY2lvbjtcbmBgYGNcbi1cdGlmICh0ci1cdTAwM2VtdWx0aV9hdHRhY2gub2xkX2ltYWdlKVxuK1x0aWYgKHRyLVx1MDAzZW11bHRpX2F0dGFjaC5vbGRfaW1hZ2UgXHUwMDI2XHUwMDI2XG4rXHQgICAgdHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSAhPSB0ci1cdTAwM2VjdXJfaW1hZ2UpXG4gXHRcdGJwZl90cmFtcF9pbWFnZV9wdXQodHItXHUwMDNlbXVsdGlfYXR0YWNoLm9sZF9pbWFnZSk7XG5gYGBcblRoYXQgYG9sZF9pbWFnZSAhPSBjdXJfaW1hZ2VgIGNoZWNrIGlzIHRoZSBjb3JlIG9mIHRoaXMgZml4LiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEzMywiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwMjo1OToyMS40MDc1NTYxMjRaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgYnVnIGluIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZWAsIHdoZXJlIGBvbGRfaW1hZ2VgIGNvdWxkIGJlIGZyZWVkIHdoaWxlIHN0aWxsIGJlaW5nIHRoZSBhY3RpdmUgaW1hZ2UgKGBjdXJfaW1hZ2VgKSBpZiBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKClgIGZhaWxzLiBVQUYgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgVXNlLUFmdGVyLUZyZWUgKFVBRikgYnVnIGluIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hfZnJlZWAsIHdoZXJlIGBvbGRfaW1hZ2VgIGNvdWxkIGJlIGZyZWVkIHdoaWxlIHN0aWxsIGJlaW5nIHRoZSBhY3RpdmUgaW1hZ2UgKGBjdXJfaW1hZ2VgKSBpZiBgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKClgIGZhaWxzLiBVQUYgYnVncyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowj9qmp[1] Phase: Succeeded StartedAt: 2026-08-10 02:59:32 +0000 UTC FinishedAt: 2026-08-10 02:59:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 02:59:32 +0000 UTC FinishedAt: 2026-08-10 02:59:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2] Phase: Succeeded StartedAt: 2026-08-10 02:59:32 +0000 UTC FinishedAt: 2026-08-10 06:39:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 02:59:32 +0000 UTC FinishedAt: 2026-08-10 06:39:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 02:59:32 +0000 UTC FinishedAt: 2026-08-10 02:59:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 02:59:32 +0000 UTC FinishedAt: 2026-08-10 02:59:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj9qmp/series-workflowj9qmp-convert-artifact-1911053220/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 02:59:43 +0000 UTC FinishedAt: 2026-08-10 03:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 02:59:43 +0000 UTC FinishedAt: 2026-08-10 03:16:51 +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:*788e987f-61e3-4326-963c-34f26f4ef8d6,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-workflowj9qmp/series-workflowj9qmp-convert-artifact-1911053220/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": "21f8c435-80a1-420e-9935-6e339e035012", "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-workflowj9qmp/series-workflowj9qmp-build-action-3932679650/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 02:59:43 +0000 UTC FinishedAt: 2026-08-10 03:16:41 +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:*788e987f-61e3-4326-963c-34f26f4ef8d6,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-workflowj9qmp/series-workflowj9qmp-convert-artifact-1911053220/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": "21f8c435-80a1-420e-9935-6e339e035012", "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-workflowj9qmp/series-workflowj9qmp-build-action-3932679650/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 03:16:51 +0000 UTC FinishedAt: 2026-08-10 03:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 03:16:51 +0000 UTC FinishedAt: 2026-08-10 03:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 03:16:51 +0000 UTC FinishedAt: 2026-08-10 03:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 03:16:51 +0000 UTC FinishedAt: 2026-08-10 03:16:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj9qmp/series-workflowj9qmp-convert-artifact-2520287651/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 03:17:01 +0000 UTC FinishedAt: 2026-08-10 03:18:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 03:17:01 +0000 UTC FinishedAt: 2026-08-10 03:18:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*21f8c435-80a1-420e-9935-6e339e035012,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-workflowj9qmp/series-workflowj9qmp-build-action-3932679650/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-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 03:18:53 +0000 UTC FinishedAt: 2026-08-10 03:18:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 03:18:53 +0000 UTC FinishedAt: 2026-08-10 03:18:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 03:18:53 +0000 UTC FinishedAt: 2026-08-10 03:35:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 03:18:53 +0000 UTC FinishedAt: 2026-08-10 03:35:24 +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:*788e987f-61e3-4326-963c-34f26f4ef8d6,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-workflowj9qmp/series-workflowj9qmp-convert-artifact-2520287651/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": "4449de93-1192-4cf3-9789-a2cec12771dc", "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-workflowj9qmp/series-workflowj9qmp-build-action-3191049815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 03:18:53 +0000 UTC FinishedAt: 2026-08-10 03:35:14 +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:*788e987f-61e3-4326-963c-34f26f4ef8d6,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-workflowj9qmp/series-workflowj9qmp-convert-artifact-2520287651/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": "4449de93-1192-4cf3-9789-a2cec12771dc", "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-workflowj9qmp/series-workflowj9qmp-build-action-3191049815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 03:35:24 +0000 UTC FinishedAt: 2026-08-10 03:35:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 03:35:24 +0000 UTC FinishedAt: 2026-08-10 03:35:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 03:35:24 +0000 UTC FinishedAt: 2026-08-10 03:37:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 03:35:24 +0000 UTC FinishedAt: 2026-08-10 03:37:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4449de93-1192-4cf3-9789-a2cec12771dc,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-workflowj9qmp/series-workflowj9qmp-build-action-3191049815/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-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 03:37:25 +0000 UTC FinishedAt: 2026-08-10 06:39:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 03:37:25 +0000 UTC FinishedAt: 2026-08-10 06:39:48 +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"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},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:*21f8c435-80a1-420e-9935-6e339e035012,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4449de93-1192-4cf3-9789-a2cec12771dc,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-workflowj9qmp/series-workflowj9qmp-build-action-3932679650/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-workflowj9qmp/series-workflowj9qmp-build-action-3191049815/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 03:37:25 +0000 UTC FinishedAt: 2026-08-10 03:37:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 03:37:25 +0000 UTC FinishedAt: 2026-08-10 03:37:30 +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"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},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-workflowj9qmp/series-workflowj9qmp-convert-artifact-1747122620/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 03:37:25 +0000 UTC FinishedAt: 2026-08-10 03:37:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 03:37:25 +0000 UTC FinishedAt: 2026-08-10 03:37:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 03:37:25 +0000 UTC FinishedAt: 2026-08-10 03:37:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 03:37:35 +0000 UTC FinishedAt: 2026-08-10 06:39:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9qmp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","bpf_tracing_multi_link_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7db0a00445f1a40bacfe9b747405c11cb5f10fc9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","BPF_EVENTS","DYNAMIC_FTRACE_WITH_DIRECT_CALLS","DYNAMIC_FTRACE","KPROBE_EVENTS","PERF_EVENTS"],"series_id":"3c0dbb35-890d-4530-a2d6-6e1984e8dfdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 03:37:35 +0000 UTC FinishedAt: 2026-08-10 06:39:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*21f8c435-80a1-420e-9935-6e339e035012,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4449de93-1192-4cf3-9789-a2cec12771dc,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-workflowj9qmp/series-workflowj9qmp-build-action-3932679650/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-workflowj9qmp/series-workflowj9qmp-build-action-3191049815/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-workflowj9qmp/series-workflowj9qmp-convert-artifact-1747122620/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,}