Name: series-workflowf5q2s Phase: Succeeded StartedAt: 2026-07-30 06:31:22 +0000 UTC FinishedAt: 2026-07-30 10:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[0] Phase: Succeeded StartedAt: 2026-07-30 06:31:22 +0000 UTC FinishedAt: 2026-07-30 06:49:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 06:31:22 +0000 UTC FinishedAt: 2026-07-30 06:49:07 +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": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "FTRACE", "DYNAMIC_FTRACE", "KPROBES" ], "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": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "FTRACE", "DYNAMIC_FTRACE", "KPROBES" ], "series_id": "8d9252bb-45b4-475f-9178-3d2bb2bece52" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_trampoline_link_prog", "bpf_trampoline_unlink_prog", "bpf_trampoline_multi_attach", "bpf_trampoline_multi_detach", "register_kprobe", "unregister_kprobe", "register_kretprobe", "unregister_kretprobe", "ftrace_enable_sysctl" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDssCiAgICAmIzM0O0tQUk9CRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBvbGluZV9saW5rX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2RldGFjaCYjMzQ7LAogICAgJiMzNDtyZWdpc3Rlcl9rcHJvYmUmIzM0OywKICAgICYjMzQ7dW5yZWdpc3Rlcl9rcHJvYmUmIzM0OywKICAgICYjMzQ7cmVnaXN0ZXJfa3JldHByb2JlJiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfa3JldHByb2JlJiMzNDssCiAgICAmIzM0O2Z0cmFjZV9lbmFibGVfc3lzY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNldHMgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQgb24gZGlyZWN0X29wcyBhbmQga3Byb2JlX2Z0cmFjZV9vcHMva3Byb2JlX2lwbW9kaWZ5X29wcy4gVGhpcyBwcmV2ZW50cyBkaXNhYmxpbmcgZnRyYWNlIGdsb2JhbGx5IHZpYSAvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9lbmFibGVkIHdoaWxlIEJQRiB0cmFtcG9saW5lcyBvciBrcHJvYmVzIGFyZSBhY3RpdmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHRyYW1wb2xpbmUgYW5kIGtwcm9iZXMpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgcHJldmVudHMgZnRyYWNlIGRpc2FibGluZyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYXR0YWNoL2RldGFjaCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzYyMDAxMjRmZTNkOTQ4ZTRjODIzYzQwMTM4MjkzMmEwNTdiMWFiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDA2OjQ3OjQwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IDEyOWQwN2RiMTE3ZWMuLjNkNTA2OTA5MWRiNzYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC0yMjQsNiAmIzQzOzIyNCw4IEBAIHZvaWQgYnBmX2ltYWdlX2tzeW1fZGVsKHN0cnVjdCBicGZfa3N5bSAqa3N5bSlcbiAgKi9cbiBzdHJ1Y3QgZnRyYWNlX29wcyBkaXJlY3Rfb3BzID0ge1xuIFx0Lm9wc19mdW5jID0gYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyxcbiYjNDM7XHQvKiBTYW1lIHByb3RlY3Rpb24gbGl2ZXBhdGNoIGdpdmVzIGl0cyBvd24gZnRyYWNlX29wcy4gKi9cbiYjNDM7XHQuZmxhZ3MgPSBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuQEAgLTMwMyw2ICYjNDM7MzA1LDggQEAgc3RhdGljIGludCBkaXJlY3Rfb3BzX2FsbG9jKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0dHItXHUwMDNlZm9wcy1cdTAwM2Vwcml2YXRlID0gdHI7XG4gXHR0ci1cdTAwM2Vmb3BzLVx1MDAzZW9wc19mdW5jID0gYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYztcbiYjNDM7XHQvKiBTZWUgdGhlIGRpcmVjdF9vcHMgaW5pdGlhbGl6ZXIgYWJvdmUgZm9yIHdoeS4gKi9cbiYjNDM7XHR0ci1cdTAwM2Vmb3BzLVx1MDAzZWZsYWdzIHw9IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rcHJvYmVzLmMgYi9rZXJuZWwva3Byb2Jlcy5jXG5pbmRleCBiZmM4OTA4M2RhYTkzLi41YTU0NTExZWVlNzkxIDEwMDY0NFxuLS0tIGEva2VybmVsL2twcm9iZXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2twcm9iZXMuY1xuQEAgLTExMjIsMTQgJiM0MzsxMTIyLDE1IEBAIHN0YXRpYyBzdHJ1Y3Qga3Byb2JlICphbGxvY19hZ2dyX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKVxuICNlbmRpZiAvKiBDT05GSUdfT1BUUFJPQkVTICovXG4gXG4gI2lmZGVmIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRVxuJiM0MzsvKiBTYW1lIHByb3RlY3Rpb24gbGl2ZXBhdGNoIGdpdmVzIGl0cyBvd24gZnRyYWNlX29wcy4gKi9cbiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMga3Byb2JlX2Z0cmFjZV9vcHMgX19yZWFkX21vc3RseSA9IHtcbiBcdC5mdW5jID0ga3Byb2JlX2Z0cmFjZV9oYW5kbGVyLFxuLVx0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MsXG4mIzQzO1x0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MgfCBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyBrcHJvYmVfaXBtb2RpZnlfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4gXHQuZnVuYyA9IGtwcm9iZV9mdHJhY2VfaGFuZGxlcixcbi1cdC5mbGFncyA9IEZUUkFDRV9PUFNfRkxfU0FWRV9SRUdTIHwgRlRSQUNFX09QU19GTF9JUE1PRElGWSxcbiYjNDM7XHQuZmxhZ3MgPSBGVFJBQ0VfT1BTX0ZMX1NBVkVfUkVHUyB8IEZUUkFDRV9PUFNfRkxfSVBNT0RJRlkgfCBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQga3Byb2JlX2lwbW9kaWZ5X2VuYWJsZWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnRyYWNlX3Blcm1hbmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnRyYWNlX3Blcm1hbmVudC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGJlNzgwMDlhMjkxM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnRyYWNlX3Blcm1hbmVudC5jXG5AQCAtMCwwICYjNDM7MSwxNDQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IENyb3dkU3RyaWtlICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtmdHJhY2VfcGVybWFuZW50LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogZmVudHJ5L2ZleGl0L2twcm9iZS9rcmV0cHJvYmUgbm93IGNhcnJ5IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULCBzb1xuJiM0MzsgKiBrZXJuZWwuZnRyYWNlX2VuYWJsZWQ9MCBtdXN0IGJlIHJlZnVzZWQgd2l0aCBFQlVTWSB3aGlsZSBhbnkgb2YgdGhlbVxuJiM0MzsgKiBpcyBhdHRhY2hlZCwgYW5kIGFsbG93ZWQgYWdhaW4gb25jZSBkZXRhY2hlZC5cbiYjNDM7ICpcbiYjNDM7ICoga3Byb2JlLm11bHRpL2tyZXRwcm9iZS5tdWx0aS9rcHJvYmUuc2Vzc2lvbiBhcmUgb3V0IG9mIHNjb3BlLlxuJiM0MzsgKiBrcHJvYmUva3JldHByb2JlIHN1YnRlc3RzIG5lZWQgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFIChlLmcuIG5vdCBvblxuJiM0MzsgKiBhcm02NCkgYW5kIGFyZSBza2lwcGVkIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZUUkFDRV9FTkFCTEVEX1BBVEggXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCByZWFkX2Z0cmFjZV9lbmFibGVkKGludCAqdmFsKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMTZdID0ge307XG4mIzQzO1x0aW50IGZkLCBuO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oRlRSQUNFX0VOQUJMRURfUEFUSCwgT19SRE9OTFkpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1x0biA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKG4gXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0KnZhbCA9IGF0b2koYnVmKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIC1lcnJubyBvbiB3cml0ZSBmYWlsdXJlLiAqL1xuJiM0MztzdGF0aWMgaW50IHdyaXRlX2Z0cmFjZV9lbmFibGVkKGludCB2YWwpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1Zls0XTtcbiYjNDM7XHRpbnQgZmQsIG4sIGxlbiwgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKEZUUkFDRV9FTkFCTEVEX1BBVEgsIE9fV1JPTkxZKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcdGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0OyVkXCYjMzQ7LCB2YWwpO1xuJiM0MztcdG4gPSB3cml0ZShmZCwgYnVmLCBsZW4pO1xuJiM0MztcdGlmIChuIFx1MDAzYyAwKVxuJiM0MztcdFx0ZXJyID0gLWVycm5vO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBdHRhY2ggQHByb2csIGFzc2VydCBrZXJuZWwuZnRyYWNlX2VuYWJsZWQ9MCBpcyByZWZ1c2VkIHdoaWxlIGF0dGFjaGVkXG4mIzQzOyAqIGFuZCBzdGF5cyBhdCAxLCB0aGVuIGRldGFjaCBhbmQgYXNzZXJ0IHRoZSBkaXNhYmxlIG5vdyBzdWNjZWVkcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGNoZWNrX2Jsb2Nrc19kaXNhYmxlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluaztcbiYjNDM7XHRpbnQgdmFsLCBlcnI7XG4mIzQzO1xuJiM0MztcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHByb2cpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBuYW1lKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gd3JpdGVfZnRyYWNlX2VuYWJsZWQoMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGVyciwgLUVCVVNZLCBcJiMzNDtkaXNhYmxlX3JlZnVzZWRcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJlYWRfZnRyYWNlX2VuYWJsZWQoXHUwMDI2dmFsKSwgXCYjMzQ7cmVhZF9iYWNrXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZGV0YWNoO1xuJiM0MztcdEFTU0VSVF9FUSh2YWwsIDEsIFwmIzM0O3N0aWxsX2VuYWJsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7ZGV0YWNoOlxuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfT0sod3JpdGVfZnRyYWNlX2VuYWJsZWQoMCksIFwmIzM0O2Rpc2FibGVfYWZ0ZXJfZGV0YWNoXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfT0sod3JpdGVfZnRyYWNlX2VuYWJsZWQoMSksIFwmIzM0O3JlZW5hYmxlXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQXR0YWNoIEBwcm9nIHdoaWxlIGZ0cmFjZV9lbmFibGVkPTAgYW5kIGFzc2VydCBpdCBpcyByZWZ1c2VkLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBjaGVja19hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHdyaXRlX2Z0cmFjZV9lbmFibGVkKDApLCBcJiMzNDtkaXNhYmxlXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2gocHJvZyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVJSX1BUUihsaW5rLCBuYW1lKSlcbiYjNDM7XHRcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfT0sod3JpdGVfZnRyYWNlX2VuYWJsZWQoMSksIFwmIzM0O3JlZW5hYmxlXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2Z0cmFjZV9wZXJtYW5lbnQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmdHJhY2VfcGVybWFuZW50ICpza2VsO1xuJiM0MztcdGJvb2wga3Byb2Jlc19vbl9mdHJhY2U7XG4mIzQzO1x0aW50IG9yaWcgPSAxO1xuJiM0MztcbiYjNDM7XHQvKiBTYXZlIGFuZCBhbHdheXMgcmVzdG9yZSBmdHJhY2VfZW5hYmxlZC4gKi9cbiYjNDM7XHRpZiAocmVhZF9mdHJhY2VfZW5hYmxlZChcdTAwMjZvcmlnKSkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGZ0cmFjZV9wZXJtYW5lbnRfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0a3Byb2Jlc19vbl9mdHJhY2UgPSBza2VsLVx1MDAzZWtjb25maWctXHUwMDNlQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtmZW50cnlfYmxvY2tzX2Rpc2FibGVcJiMzNDspKVxuJiM0MztcdFx0Y2hlY2tfYmxvY2tzX2Rpc2FibGUoc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2ZlbnRyeSwgXCYjMzQ7YXR0YWNoX2ZlbnRyeVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ZleGl0X2Jsb2Nrc19kaXNhYmxlXCYjMzQ7KSlcbiYjNDM7XHRcdGNoZWNrX2Jsb2Nrc19kaXNhYmxlKHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9mZXhpdCwgXCYjMzQ7YXR0YWNoX2ZleGl0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7a3Byb2JlX2Jsb2Nrc19kaXNhYmxlXCYjMzQ7KSkge1xuJiM0MztcdFx0aWYgKGtwcm9iZXNfb25fZnRyYWNlKVxuJiM0MztcdFx0XHRjaGVja19ibG9ja3NfZGlzYWJsZShza2VsLVx1MDAzZXByb2dzLnRlc3Rfa3Byb2JlLCBcJiMzNDthdHRhY2hfa3Byb2JlXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7a3JldHByb2JlX2Jsb2Nrc19kaXNhYmxlXCYjMzQ7KSkge1xuJiM0MztcdFx0aWYgKGtwcm9iZXNfb25fZnRyYWNlKVxuJiM0MztcdFx0XHRjaGVja19ibG9ja3NfZGlzYWJsZShza2VsLVx1MDAzZXByb2dzLnRlc3Rfa3JldHByb2JlLCBcJiMzNDthdHRhY2hfa3JldHByb2JlXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZmVudHJ5X2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkXCYjMzQ7KSlcbiYjNDM7XHRcdGNoZWNrX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkKHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9mZW50cnksIFwmIzM0O2F0dGFjaF9mZW50cnlcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtrcHJvYmVfYXR0YWNoX3doaWxlX2Rpc2FibGVkX3JlZnVzZWRcJiMzNDspKSB7XG4mIzQzO1x0XHRpZiAoa3Byb2Jlc19vbl9mdHJhY2UpXG4mIzQzO1x0XHRcdGNoZWNrX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkKHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9rcHJvYmUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFwmIzM0O2F0dGFjaF9rcHJvYmVcJiMzNDspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmdHJhY2VfcGVybWFuZW50X19kZXN0cm95KHNrZWwpO1xuJiM0MztyZXN0b3JlOlxuJiM0MztcdHdyaXRlX2Z0cmFjZV9lbmFibGVkKG9yaWcpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Z0cmFjZV9wZXJtYW5lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mdHJhY2VfcGVybWFuZW50LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jYTcwNmQ4ZWRjMjNiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZnRyYWNlX3Blcm1hbmVudC5jXG5AQCAtMCwwICYjNDM7MSw0MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ3Jvd2RTdHJpa2UgKi9cbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzO2V4dGVybiBib29sIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSBfX2tjb25maWcgX193ZWFrO1xuJiM0MztcbiYjNDM7LyogVGhpcyBmdW5jdGlvbiBpcyBoZXJlIHRvIGhhdmUgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFIHVzZWQgYW5kXG4mIzQzOyAqIGFkZGVkIHRvIG9iamVjdCBCVEYsIHNvIHRoZSB1c2Vyc3BhY2Ugc2lkZSBjYW4gcmVhZCBpdCBiYWNrIHZpYVxuJiM0MzsgKiBza2VsLVx1MDAzZWtjb25maWctXHUwMDNlQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFLlxuJiM0MzsgKi9cbiYjNDM7aW50IHVudXNlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSA/IDAgOiAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2ZlbnRyeSwgaW50IGEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2ZleGl0L2JwZl9mZW50cnlfdGVzdDJcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2ZleGl0LCBpbnQgYSwgX191NjQgYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7a3Byb2JlL2JwZl9mZW50cnlfdGVzdDNcJiMzNDspXG4mIzQzO2ludCB0ZXN0X2twcm9iZShzdHJ1Y3QgcHRfcmVncyAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtrcmV0cHJvYmUvYnBmX2ZlbnRyeV90ZXN0NFwmIzM0OylcbiYjNDM7aW50IEJQRl9LUkVUUFJPQkUodGVzdF9rcmV0cHJvYmUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gmIzM0OywKICAgICYjMzQ7cmVnaXN0ZXJfa3Byb2JlJiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfa3Byb2JlJiMzNDssCiAgICAmIzM0O3JlZ2lzdGVyX2tyZXRwcm9iZSYjMzQ7LAogICAgJiMzNDt1bnJlZ2lzdGVyX2tyZXRwcm9iZSYjMzQ7LAogICAgJiMzNDtmdHJhY2VfZW5hYmxlX3N5c2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXRzIEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UIG9uIGRpcmVjdF9vcHMgYW5kIGtwcm9iZV9mdHJhY2Vfb3BzL2twcm9iZV9pcG1vZGlmeV9vcHMuIFRoaXMgcHJldmVudHMgZGlzYWJsaW5nIGZ0cmFjZSBnbG9iYWxseSB2aWEgL3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZCB3aGlsZSBCUEYgdHJhbXBvbGluZXMgb3Iga3Byb2JlcyBhcmUgYWN0aXZlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgKEJQRiB0cmFtcG9saW5lIGFuZCBrcHJvYmVzKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IHByZXZlbnRzIGZ0cmFjZSBkaXNhYmxpbmcgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGF0dGFjaC9kZXRhY2ggb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM2MjAwMTI0ZmUzZDk0OGU0YzgyM2M0MDEzODI5MzJhMDU3YjFhYjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwNjo0Nzo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKaW5kZXggMTI5ZDA3ZGIxMTdlYy4uM2Q1MDY5MDkxZGI3NiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKQEAgLTIyNCw2ICYjNDM7MjI0LDggQEAgdm9pZCBicGZfaW1hZ2Vfa3N5bV9kZWwoc3RydWN0IGJwZl9rc3ltICprc3ltKQogICovCiBzdHJ1Y3QgZnRyYWNlX29wcyBkaXJlY3Rfb3BzID0gewogCS5vcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMsCiYjNDM7CS8qIFNhbWUgcHJvdGVjdGlvbiBsaXZlcGF0Y2ggZ2l2ZXMgaXRzIG93biBmdHJhY2Vfb3BzLiAqLwomIzQzOwkuZmxhZ3MgPSBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCwKIH07CiAKIHN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKQpAQCAtMzAzLDYgJiM0MzszMDUsOCBAQCBzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWxsb2Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0cikKIAkJcmV0dXJuIC1FTk9NRU07CiAJdHItJmd0O2ZvcHMtJmd0O3ByaXZhdGUgPSB0cjsKIAl0ci0mZ3Q7Zm9wcy0mZ3Q7b3BzX2Z1bmMgPSBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jOwomIzQzOwkvKiBTZWUgdGhlIGRpcmVjdF9vcHMgaW5pdGlhbGl6ZXIgYWJvdmUgZm9yIHdoeS4gKi8KJiM0MzsJdHItJmd0O2ZvcHMtJmd0O2ZsYWdzIHw9IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCBiZmM4OTA4M2RhYTkzLi41YTU0NTExZWVlNzkxIDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTExMjIsMTQgJiM0MzsxMTIyLDE1IEBAIHN0YXRpYyBzdHJ1Y3Qga3Byb2JlICphbGxvY19hZ2dyX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogI2VuZGlmIC8qIENPTkZJR19PUFRQUk9CRVMgKi8KIAogI2lmZGVmIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRQomIzQzOy8qIFNhbWUgcHJvdGVjdGlvbiBsaXZlcGF0Y2ggZ2l2ZXMgaXRzIG93biBmdHJhY2Vfb3BzLiAqLwogc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIGtwcm9iZV9mdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CiAJLmZ1bmMgPSBrcHJvYmVfZnRyYWNlX2hhbmRsZXIsCi0JLmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MsCiYjNDM7CS5mbGFncyA9IEZUUkFDRV9PUFNfRkxfU0FWRV9SRUdTIHwgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMga3Byb2JlX2lwbW9kaWZ5X29wcyBfX3JlYWRfbW9zdGx5ID0gewogCS5mdW5jID0ga3Byb2JlX2Z0cmFjZV9oYW5kbGVyLAotCS5mbGFncyA9IEZUUkFDRV9PUFNfRkxfU0FWRV9SRUdTIHwgRlRSQUNFX09QU19GTF9JUE1PRElGWSwKJiM0MzsJLmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MgfCBGVFJBQ0VfT1BTX0ZMX0lQTU9ESUZZIHwgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQsCiB9OwogCiBzdGF0aWMgaW50IGtwcm9iZV9pcG1vZGlmeV9lbmFibGVkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnRyYWNlX3Blcm1hbmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnRyYWNlX3Blcm1hbmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmRiZTc4MDA5YTI5MTMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mdHJhY2VfcGVybWFuZW50LmMKQEAgLTAsMCAmIzQzOzEsMTQ0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ3Jvd2RTdHJpa2UgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZnRyYWNlX3Blcm1hbmVudC5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogZmVudHJ5L2ZleGl0L2twcm9iZS9rcmV0cHJvYmUgbm93IGNhcnJ5IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULCBzbwomIzQzOyAqIGtlcm5lbC5mdHJhY2VfZW5hYmxlZD0wIG11c3QgYmUgcmVmdXNlZCB3aXRoIEVCVVNZIHdoaWxlIGFueSBvZiB0aGVtCiYjNDM7ICogaXMgYXR0YWNoZWQsIGFuZCBhbGxvd2VkIGFnYWluIG9uY2UgZGV0YWNoZWQuCiYjNDM7ICoKJiM0MzsgKiBrcHJvYmUubXVsdGkva3JldHByb2JlLm11bHRpL2twcm9iZS5zZXNzaW9uIGFyZSBvdXQgb2Ygc2NvcGUuCiYjNDM7ICoga3Byb2JlL2tyZXRwcm9iZSBzdWJ0ZXN0cyBuZWVkIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSAoZS5nLiBub3Qgb24KJiM0MzsgKiBhcm02NCkgYW5kIGFyZSBza2lwcGVkIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIEZUUkFDRV9FTkFCTEVEX1BBVEggJiMzNDsvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9lbmFibGVkJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJlYWRfZnRyYWNlX2VuYWJsZWQoaW50ICp2YWwpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsxNl0gPSB7fTsKJiM0MzsJaW50IGZkLCBuOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oRlRSQUNFX0VOQUJMRURfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsJbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAobiAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CSp2YWwgPSBhdG9pKGJ1Zik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgLWVycm5vIG9uIHdyaXRlIGZhaWx1cmUuICovCiYjNDM7c3RhdGljIGludCB3cml0ZV9mdHJhY2VfZW5hYmxlZChpbnQgdmFsKQomIzQzO3sKJiM0MzsJY2hhciBidWZbNF07CiYjNDM7CWludCBmZCwgbiwgbGVuLCBlcnIgPSAwOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oRlRSQUNFX0VOQUJMRURfUEFUSCwgT19XUk9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslZCYjMzQ7LCB2YWwpOwomIzQzOwluID0gd3JpdGUoZmQsIGJ1ZiwgbGVuKTsKJiM0MzsJaWYgKG4gJmx0OyAwKQomIzQzOwkJZXJyID0gLWVycm5vOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQXR0YWNoIEBwcm9nLCBhc3NlcnQga2VybmVsLmZ0cmFjZV9lbmFibGVkPTAgaXMgcmVmdXNlZCB3aGlsZSBhdHRhY2hlZAomIzQzOyAqIGFuZCBzdGF5cyBhdCAxLCB0aGVuIGRldGFjaCBhbmQgYXNzZXJ0IHRoZSBkaXNhYmxlIG5vdyBzdWNjZWVkcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBjaGVja19ibG9ja3NfZGlzYWJsZShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CWludCB2YWwsIGVycjsKJiM0MzsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2gocHJvZyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCBuYW1lKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gd3JpdGVfZnRyYWNlX2VuYWJsZWQoMCk7CiYjNDM7CUFTU0VSVF9FUShlcnIsIC1FQlVTWSwgJiMzNDtkaXNhYmxlX3JlZnVzZWQmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKHJlYWRfZnRyYWNlX2VuYWJsZWQoJmFtcDt2YWwpLCAmIzM0O3JlYWRfYmFjayYjMzQ7KSkKJiM0MzsJCWdvdG8gZGV0YWNoOwomIzQzOwlBU1NFUlRfRVEodmFsLCAxLCAmIzM0O3N0aWxsX2VuYWJsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7ZGV0YWNoOgomIzQzOwlicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsKJiM0MzsJQVNTRVJUX09LKHdyaXRlX2Z0cmFjZV9lbmFibGVkKDApLCAmIzM0O2Rpc2FibGVfYWZ0ZXJfZGV0YWNoJiMzNDspOwomIzQzOwlBU1NFUlRfT0sod3JpdGVfZnRyYWNlX2VuYWJsZWQoMSksICYjMzQ7cmVlbmFibGUmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEF0dGFjaCBAcHJvZyB3aGlsZSBmdHJhY2VfZW5hYmxlZD0wIGFuZCBhc3NlcnQgaXQgaXMgcmVmdXNlZC4gKi8KJiM0MztzdGF0aWMgdm9pZCBjaGVja19hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKHdyaXRlX2Z0cmFjZV9lbmFibGVkKDApLCAmIzM0O2Rpc2FibGUmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHByb2cpOwomIzQzOwlpZiAoIUFTU0VSVF9FUlJfUFRSKGxpbmssIG5hbWUpKQomIzQzOwkJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CiYjNDM7CUFTU0VSVF9PSyh3cml0ZV9mdHJhY2VfZW5hYmxlZCgxKSwgJiMzNDtyZWVuYWJsZSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2Z0cmFjZV9wZXJtYW5lbnQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmdHJhY2VfcGVybWFuZW50ICpza2VsOwomIzQzOwlib29sIGtwcm9iZXNfb25fZnRyYWNlOwomIzQzOwlpbnQgb3JpZyA9IDE7CiYjNDM7CiYjNDM7CS8qIFNhdmUgYW5kIGFsd2F5cyByZXN0b3JlIGZ0cmFjZV9lbmFibGVkLiAqLwomIzQzOwlpZiAocmVhZF9mdHJhY2VfZW5hYmxlZCgmYW1wO29yaWcpKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tlbCA9IGZ0cmFjZV9wZXJtYW5lbnRfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byByZXN0b3JlOwomIzQzOwomIzQzOwlrcHJvYmVzX29uX2Z0cmFjZSA9IHNrZWwtJmd0O2tjb25maWctJmd0O0NPTkZJR19LUFJPQkVTX09OX0ZUUkFDRTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtmZW50cnlfYmxvY2tzX2Rpc2FibGUmIzM0OykpCiYjNDM7CQljaGVja19ibG9ja3NfZGlzYWJsZShza2VsLSZndDtwcm9ncy50ZXN0X2ZlbnRyeSwgJiMzNDthdHRhY2hfZmVudHJ5JiMzNDspOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2ZleGl0X2Jsb2Nrc19kaXNhYmxlJiMzNDspKQomIzQzOwkJY2hlY2tfYmxvY2tzX2Rpc2FibGUoc2tlbC0mZ3Q7cHJvZ3MudGVzdF9mZXhpdCwgJiMzNDthdHRhY2hfZmV4aXQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a3Byb2JlX2Jsb2Nrc19kaXNhYmxlJiMzNDspKSB7CiYjNDM7CQlpZiAoa3Byb2Jlc19vbl9mdHJhY2UpCiYjNDM7CQkJY2hlY2tfYmxvY2tzX2Rpc2FibGUoc2tlbC0mZ3Q7cHJvZ3MudGVzdF9rcHJvYmUsICYjMzQ7YXR0YWNoX2twcm9iZSYjMzQ7KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl0ZXN0X19za2lwKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtrcmV0cHJvYmVfYmxvY2tzX2Rpc2FibGUmIzM0OykpIHsKJiM0MzsJCWlmIChrcHJvYmVzX29uX2Z0cmFjZSkKJiM0MzsJCQljaGVja19ibG9ja3NfZGlzYWJsZShza2VsLSZndDtwcm9ncy50ZXN0X2tyZXRwcm9iZSwgJiMzNDthdHRhY2hfa3JldHByb2JlJiMzNDspOwomIzQzOwkJZWxzZQomIzQzOwkJCXRlc3RfX3NraXAoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2ZlbnRyeV9hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZCYjMzQ7KSkKJiM0MzsJCWNoZWNrX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkKHNrZWwtJmd0O3Byb2dzLnRlc3RfZmVudHJ5LCAmIzM0O2F0dGFjaF9mZW50cnkmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a3Byb2JlX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkJiMzNDspKSB7CiYjNDM7CQlpZiAoa3Byb2Jlc19vbl9mdHJhY2UpCiYjNDM7CQkJY2hlY2tfYXR0YWNoX3doaWxlX2Rpc2FibGVkX3JlZnVzZWQoc2tlbC0mZ3Q7cHJvZ3MudGVzdF9rcHJvYmUsCiYjNDM7CQkJCQkJCSAgICAmIzM0O2F0dGFjaF9rcHJvYmUmIzM0Oyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJdGVzdF9fc2tpcCgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZ0cmFjZV9wZXJtYW5lbnRfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7cmVzdG9yZToKJiM0MzsJd3JpdGVfZnRyYWNlX2VuYWJsZWQob3JpZyk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Z0cmFjZV9wZXJtYW5lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mdHJhY2VfcGVybWFuZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uY2E3MDZkOGVkYzIzYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mdHJhY2VfcGVybWFuZW50LmMKQEAgLTAsMCAmIzQzOzEsNDMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBDcm93ZFN0cmlrZSAqLwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO2V4dGVybiBib29sIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSBfX2tjb25maWcgX193ZWFrOwomIzQzOwomIzQzOy8qIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSB0byBoYXZlIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSB1c2VkIGFuZAomIzQzOyAqIGFkZGVkIHRvIG9iamVjdCBCVEYsIHNvIHRoZSB1c2Vyc3BhY2Ugc2lkZSBjYW4gcmVhZCBpdCBiYWNrIHZpYQomIzQzOyAqIHNrZWwtJmd0O2tjb25maWctJmd0O0NPTkZJR19LUFJPQkVTX09OX0ZUUkFDRS4KJiM0MzsgKi8KJiM0MztpbnQgdW51c2VkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFID8gMCA6IDE7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfZmVudHJ5LCBpbnQgYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtmZXhpdC9icGZfZmVudHJ5X3Rlc3QyJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfZmV4aXQsIGludCBhLCBfX3U2NCBiKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2twcm9iZS9icGZfZmVudHJ5X3Rlc3QzJiMzNDspCiYjNDM7aW50IHRlc3Rfa3Byb2JlKHN0cnVjdCBwdF9yZWdzICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7a3JldHByb2JlL2JwZl9mZW50cnlfdGVzdDQmIzM0OykKJiM0MztpbnQgQlBGX0tSRVRQUk9CRSh0ZXN0X2tyZXRwcm9iZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgdGhleSYjMzk7cmUgYWRkaW5nIGBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVGAgdG8gdGhlIGBkaXJlY3Rfb3BzLmZsYWdzYCB3aXRoaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCwgYW5kIGFsc28gdG8gYGtwcm9iZV9mdHJhY2Vfb3BzLmZsYWdzYCBhbmQgYGtwcm9iZV9pcG1vZGlmeV9vcHMuZmxhZ3NgIGluIGBrZXJuZWwva3Byb2Jlcy5jYC4mIzM0OyBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEFkZGluZyB0aGF0IGZsYWcgbWVhbnMgdGhlc2UgZnRyYWNlIG9wZXJhdGlvbnMsIGluIHRoZSBjb250ZXh0IG9mIEJQRiBhbmQga3Byb2JlcyByZXNwZWN0aXZlbHksIGFyZSBub3cgKnBlcm1hbmVudCouIFRoZXkgY2FuJiMzOTt0IGJlIGRpc2FibGVkIG9uY2UgcmVnaXN0ZXJlZCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBiZWhhdmlvcmFsIG1vZGlmaWNhdGlvbi4KClRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZXNlIGFyZSBiZWluZyBlbXBsb3llZC4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGFuZCBga2VybmVsL2twcm9iZXMuY2AuIEkgcmVjYWxsIHRoYXQgYGRpcmVjdF9vcHNgIGlzIGRlZmluaXRlbHkgdXNlZCBpbiBgYnBmX3RyYW1wb2xpbmUuY2AgKG9yIGEgc2ltaWxhciBmaWxlKSB0byByZWdpc3RlciB0aGUgZnRyYWNlIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgdHJhbXBvbGluZS4gQW5kIG9idmlvdXNseSwgYGtwcm9iZV9mdHJhY2Vfb3BzYCBhbmQgYGtwcm9iZV9pcG1vZGlmeV9vcHNgIGFyZSB1dGlsaXplZCBpbiBga3Byb2Jlcy5jYCBpdHNlbGYuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGVyZSB0aGVzZSBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgYXJlIHJlZmVyZW5jZWQgYmV5b25kIHRob3NlIGltbWVkaWF0ZSBmaWxlcy4gS25vd2luZyB0aGUgYnJvYWRlciB1c2FnZSBjb250ZXh0IHdpbGwgYmUgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIHRoZSBwYXRjaCYjMzk7cyBvdmVyYWxsIGltcGFjdCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBhZGRpdGlvbiBvZiB0aGUgQlBGIHNlbGZ0ZXN0IGBmdHJhY2VfcGVybWFuZW50LmNgIGNvbmZpcm1zIHRoaXMgaXMgYSBjaGFuZ2Ugd2l0aCBzcGVjaWZpYyBjb25zZXF1ZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlyZWN0X29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfb3BzO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc0LSNpZmRlZiBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc1OnN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmRpcmVjdF9vcHNfaXBfbG9va3VwKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXApXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03Ni17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTEtI2Vsc2Vcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjkyOnN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmRpcmVjdF9vcHNfaXBfbG9va3VwKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXApXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05My17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTg9c3RhdGljIGludCBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXAsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAzLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTA0Olx0dHIgPSBkaXJlY3Rfb3BzX2lwX2xvb2t1cChvcHMsIGlwKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNS1cdGlmICghdHIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MjEwPXZvaWQgYnBmX2ltYWdlX2tzeW1fZGVsKHN0cnVjdCBicGZfa3N5bSAqa3N5bSlcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTktLypcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIyMDogKiBXZSBoYXZlIG9ubHkgc2luZ2xlIGRpcmVjdF9vcHMgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBkaXJlY3QgY2FsbFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjIxLSAqIHNpdGVzIGFuZCBpcyB0aGUgb25seSBnbG9iYWwgZnRyYWNlX29wcyBmb3IgYWxsIHRyYW1wb2xpbmVzLlxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIyNC0gKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIyNTpzdHJ1Y3QgZnRyYWNlX29wcyBkaXJlY3Rfb3BzID0ge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjI2LVx0Lm9wc19mdW5jID0gYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMzAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMzE6c3RhdGljIGludCBkaXJlY3Rfb3BzX2FsbG9jKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMzIte1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjMzOlx0dHItXHUwMDNlZm9wcyA9IFx1MDAyNmRpcmVjdF9vcHM7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMzQtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMzYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMzc6c3RhdGljIHZvaWQgZGlyZWN0X29wc19mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpIHsgfVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjM4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MjM5PXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2hfZnJvbV9pcChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjU4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjU5OnN0YXRpYyBpbnQgZGlyZWN0X29wc19hZGQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkcilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI2MC17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjcwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjcxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19kZWwoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkcilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI3Mi17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjgyLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjgzOnN0YXRpYyBpbnQgZGlyZWN0X29wc19tb2Qoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleClcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI4NC17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzAwLSAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzAxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzAyLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMDctXHR0ci1cdTAwM2Vmb3BzLVx1MDAzZW9wc19mdW5jID0gYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYztcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMwODpcdC8qIFNlZSB0aGUgZGlyZWN0X29wcyBpbml0aWFsaXplciBhYm92ZSBmb3Igd2h5LiAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzA5LVx0dHItXHUwMDNlZm9wcy1cdTAwM2VmbGFncyB8PSBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVDtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMTItXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozMTM6c3RhdGljIHZvaWQgZGlyZWN0X29wc19mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMTQte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMyMC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMyMTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWRkKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMyMi17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzM1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzM2OnN0YXRpYyBpbnQgZGlyZWN0X29wc19kZWwoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkcilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMzNy17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzQwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzQxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19tb2Qoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqcHRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4KVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzQyLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNTMtI2Vsc2Vcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM1NDpzdGF0aWMgdm9pZCBkaXJlY3Rfb3BzX2ZyZWUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cikgeyB9XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNTUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNTY6c3RhdGljIGludCBkaXJlY3Rfb3BzX2FsbG9jKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNTcte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM2MC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM2MTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWRkKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNjIte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM2NS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM2NjpzdGF0aWMgaW50IGRpcmVjdF9vcHNfZGVsKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNjcte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM3MC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM3MTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfbW9kKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKnB0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleClcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM3Mi17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9Mzc3PXN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmJwZl90cmFtcG9saW5lX2xvb2t1cCh1NjQga2V5LCB1bnNpZ25lZCBsb25nIGlwKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM5My1cdFx0Z290byBvdXQ7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozOTQ6XHRpZiAoZGlyZWN0X29wc19hbGxvYyh0cikpIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM5NS1cdFx0a2ZyZWUodHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQzNj1zdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ0MS1cdGlmICh0ci1cdTAwM2VmdW5jLmZ0cmFjZV9tYW5hZ2VkKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDQyOlx0XHRyZXQgPSBkaXJlY3Rfb3BzX2RlbCh0ciwgb2xkX2FkZHIpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDQzLVx0ZWxzZVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ1ND1zdGF0aWMgaW50IG1vZGlmeV9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ2MS1cdGlmICh0ci1cdTAwM2VmdW5jLmZ0cmFjZV9tYW5hZ2VkKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0NjI6XHRcdHJldCA9IGRpcmVjdF9vcHNfbW9kKHRyLCBuZXdfYWRkciwgbG9ja19kaXJlY3RfbXV0ZXgpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDYzLVx0fSBlbHNlIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00Nzc9c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDkyLVx0aWYgKHRyLVx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQpIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQ5MzpcdFx0cmV0ID0gZGlyZWN0X29wc19hZGQodHIsIG5ld19hZGRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ5NC1cdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTE5OD12b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEyMTktXHRobGlzdF9kZWwoXHUwMDI2dHItXHUwMDNlaGxpc3RfaXApO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTIyMDpcdGRpcmVjdF9vcHNfZnJlZSh0cik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjIxLVx0a2ZyZWUodHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MjM9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODItXHRpZiAoZnRyYWNlX2hhc2hfY291bnQoZGF0YS1cdTAwM2VyZWcpKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjgzOlx0XHRlcnIgPSB1cGRhdGVfZnRyYWNlX2RpcmVjdF9hZGQoXHUwMDI2ZGlyZWN0X29wcywgZGF0YS1cdTAwM2VyZWcpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4NC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjg4LVx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXHUwMDNlbW9kaWZ5KSkge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4OTpcdFx0ZXJyID0gdXBkYXRlX2Z0cmFjZV9kaXJlY3RfbW9kKFx1MDAyNmRpcmVjdF9vcHMsIGRhdGEtXHUwMDNlbW9kaWZ5LCB0cnVlKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTAtXHRcdGlmIChlcnIpIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTEtXHRcdFx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXHUwMDNlcmVnKSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2OTI6XHRcdFx0XHRXQVJOX09OX09OQ0UodXBkYXRlX2Z0cmFjZV9kaXJlY3RfZGVsKFx1MDAyNmRpcmVjdF9vcHMsIGRhdGEtXHUwMDNlcmVnKSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkzLVx0XHRcdGdvdG8gcm9sbGJhY2tfdW5saW5rO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MjM9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MzgtXHRpZiAoZnRyYWNlX2hhc2hfY291bnQoZGF0YS1cdTAwM2V1bnJlZykpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzM5Olx0XHRXQVJOX09OX09OQ0UodXBkYXRlX2Z0cmFjZV9kaXJlY3RfZGVsKFx1MDAyNmRpcmVjdF9vcHMsIGRhdGEtXHUwMDNldW5yZWcpKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDAtXHRpZiAoZnRyYWNlX2hhc2hfY291bnQoZGF0YS1cdTAwM2Vtb2RpZnkpKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc0MTpcdFx0V0FSTl9PTl9PTkNFKHVwZGF0ZV9mdHJhY2VfZGlyZWN0X21vZChcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVx1MDAzZW1vZGlmeSwgdHJ1ZSkpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZ0cmFjZSBQZXJtYW5lbmNlIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIHRoZSBjb2RlJiMzOTtzIHNldHRpbmcgYEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UYCBpbiBhIGZldyBrZXkgcGxhY2VzLiBJdCYjMzk7cyBkb2luZyB0aGlzIG9uIGBkaXJlY3Rfb3BzYCBhbmQgYHRyLSZndDtmb3BzYCB3aXRoaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCwgYW5kIGFsc28gb24gYGtwcm9iZV9mdHJhY2Vfb3BzYCBhbmQgYGtwcm9iZV9pcG1vZGlmeV9vcHNgIGluIGBrZXJuZWwva3Byb2Jlcy5jYC4gVGhlIGNvcmUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRoaXMgcHJldmVudHMgc29tZW9uZSBmcm9tIGdsb2JhbGx5IGRpc2FibGluZyBGdHJhY2UgdGhyb3VnaCBgL3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZGAgaWYgQlBGIHRyYW1wb2xpbmVzIG9yIGtwcm9iZXMgYXJlIGFjdGl2ZS4gVGhpcyBpcyBhIGRlbGliZXJhdGUgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGVyZWZvcmUsIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludC4KClRoZSBzZWxmdGVzdCBgZnRyYWNlX3Blcm1hbmVudC5jYCBjb25maXJtcyB0aGlzIGJlaGF2aW9yIGJ5IHVzaW5nIGBicGZfcHJvZ3JhbV9fYXR0YWNoYCBmb3IgYGZlbnRyeWAsIGBmZXhpdGAsIGBrcHJvYmVgLCBhbmQgYGtyZXRwcm9iZWAgYXR0YWNobWVudHMuIFRoYXTigJlzIGhlbHBmdWw7IGl0IG1lYW5zIHdlIGhhdmUgYSBrbm93biB0ZXN0aW5nIGJhc2VsaW5lLiBTaW5jZSB0aGUgYWltIGlzIHRvIGZpbmQgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdGhpcyAmIzM0O3Blcm1hbmVudCYjMzQ7IHN0YXRlLCB0aGUgZnVuY3Rpb25zIGhhbmRsaW5nIEJQRiB0cmFtcG9saW5lIGFuZCBrcHJvYmUgYXR0YWNobWVudC9kZXRhY2htZW50IGFyZSBnb2luZyB0byBiZSBteSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nLgoKRm9yIEJQRiB0cmFtcG9saW5lcyBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB6b29tIGluIG9uIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgLCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzIHRvIHRyaWdnZXIgdGhlIHBlcm1hbmVuY2UgYmVoYXZpb3IuIE9uIHRoZSBrcHJvYmUgc2lkZSwgYHJlZ2lzdGVyX2twcm9iZWAgYW5kIGB1bnJlZ2lzdGVyX2twcm9iZWAgYXJlIGdvaW5nIHRvIGJlIGtleS4KCkkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBga2VybmVsL2twcm9iZXMuY2AgYW5kIHNwZWNpZmljYWxseSBga3Byb2JlX2Z0cmFjZV9vcHNgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIGlzIHNldCB1cCB3aWxsIGdpdmUgYSBnb29kIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3Byb2JlX2Z0cmFjZV9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwva3Byb2Jlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rcHJvYmVzLmM9MTExOD1zdGF0aWMgc3RydWN0IGtwcm9iZSAqYWxsb2NfYWdncl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcClcbi0tXG5rZXJuZWwva3Byb2Jlcy5jLTExMjUtLyogU2FtZSBwcm90ZWN0aW9uIGxpdmVwYXRjaCBnaXZlcyBpdHMgb3duIGZ0cmFjZV9vcHMuICovXG5rZXJuZWwva3Byb2Jlcy5jOjExMjY6c3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIGtwcm9iZV9mdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5rZXJuZWwva3Byb2Jlcy5jLTExMjctXHQuZnVuYyA9IGtwcm9iZV9mdHJhY2VfaGFuZGxlcixcbi0tXG5rZXJuZWwva3Byb2Jlcy5jPTExNjc9c3RhdGljIGludCBhcm1fa3Byb2JlX2Z0cmFjZShzdHJ1Y3Qga3Byb2JlICpwKVxuLS1cbmtlcm5lbC9rcHJvYmVzLmMtMTE3MS1cdHJldHVybiBfX2FybV9rcHJvYmVfZnRyYWNlKHAsXG5rZXJuZWwva3Byb2Jlcy5jOjExNzI6XHRcdGlwbW9kaWZ5ID8gXHUwMDI2a3Byb2JlX2lwbW9kaWZ5X29wcyA6IFx1MDAyNmtwcm9iZV9mdHJhY2Vfb3BzLFxua2VybmVsL2twcm9iZXMuYy0xMTczLVx0XHRpcG1vZGlmeSA/IFx1MDAyNmtwcm9iZV9pcG1vZGlmeV9lbmFibGVkIDogXHUwMDI2a3Byb2JlX2Z0cmFjZV9lbmFibGVkKTtcbi0tXG5rZXJuZWwva3Byb2Jlcy5jPTEyMDE9c3RhdGljIGludCBkaXNhcm1fa3Byb2JlX2Z0cmFjZShzdHJ1Y3Qga3Byb2JlICpwKVxuLS1cbmtlcm5lbC9rcHJvYmVzLmMtMTIwNS1cdHJldHVybiBfX2Rpc2FybV9rcHJvYmVfZnRyYWNlKHAsXG5rZXJuZWwva3Byb2Jlcy5jOjEyMDY6XHRcdGlwbW9kaWZ5ID8gXHUwMDI2a3Byb2JlX2lwbW9kaWZ5X29wcyA6IFx1MDAyNmtwcm9iZV9mdHJhY2Vfb3BzLFxua2VybmVsL2twcm9iZXMuYy0xMjA3LVx0XHRpcG1vZGlmeSA/IFx1MDAyNmtwcm9iZV9pcG1vZGlmeV9lbmFibGVkIDogXHUwMDI2a3Byb2JlX2Z0cmFjZV9lbmFibGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipLcHJvYmUvRnRyYWNlIEludGVncmF0aW9uIHdpdGggQlBGIFRyYW1wb2xpbmVzKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IGBhcm1fa3Byb2JlX2Z0cmFjZWAgYW5kIGBkaXNhcm1fa3Byb2JlX2Z0cmFjZWAgYXJlIHNwZWNpZmljYWxseSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGtwcm9iZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIHdoZW4gZGVhbGluZyB3aXRoIGZ0cmFjZS4gVGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCYjMzk7cyB0aGUgZ2x1ZSBiZXR3ZWVuIHRoZSBrcHJvYmUgbWVjaGFuaXNtIGFuZCB0aGUgZnRyYWNlIGluZnJhc3RydWN0dXJlLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoZSBCUEYgdHJhbXBvbGluZSBmdW5jdGlvbnMuIFdlIGhhdmUgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AsIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AsIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLCBhbmQgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAuIFRoZXNlIGFyZSB0aGUgY29yZSBCUEYgZnVuY3Rpb25zIGludm9sdmVkLiBTcGVjaWZpY2FsbHkgdGhlIGxpbmtpbmcvdW5saW5raW5nLCBhbmQgbXVsdGktYXR0YWNoL2RldGFjaCBzdWdnZXN0IHRoZXkgYXJlIGhhbmRsaW5nIHRoZSBpbmplY3Rpb24vcmVtb3ZhbCBvZiBCUEYgcHJvZ3JhbXMgaW50byB0aGUgZXhlY3V0aW9uIGZsb3cuCgpJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0IG1lIHB1bGwgdXAgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbWFnaWMgaGFwcGVucywgSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBwcm9ncmFtcyBhcmUgYmVpbmcgaG9va2VkIGFuZCB1bmhvb2tlZC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHRyYW1wb2xpbmUgYXJjaGl0ZWN0dXJlLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGluc3RydWN0aW9uIHBhdGNoaW5nLCBhbmQgYW55IHBvdGVudGlhbCBjYXZlYXRzIGluIHRoYXQgcHJvY2Vzcy4gSSBzdXNwZWN0IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGRvZXMgdGhlIGluaXRpYWwgc2V0dXAsIGFuZCB0aGVuIHRoZSBvdGhlcnMgaGFuZGxlIGNsZWFudXAgYW5kIG11bHRpLXByb2dyYW0gc2NlbmFyaW9zLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmM9ODk3PXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTE1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTE2OnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTE3LVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NTc6aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTgtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk2My1cdHRyYW1wb2xpbmVfbG9jayh0cik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NjQ6XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk2NS1cdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDg3PWludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTI5LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTEzMDpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFx1MDAyNnNoaW1fbGluay1cdTAwM2VsaW5rLm5vZGUsIHRyLCBOVUxMLCBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTMxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjIzPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjcyLVx0XHRkYXRhLVx1MDAzZWVudHJ5ID0gXHUwMDI2bW5vZGUtXHUwMDNlZW50cnk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjczOlx0XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcdTAwMjZtbm9kZS1cdTAwM2Vub2RlLCBtbm9kZS1cdTAwM2V0cmFtcG9saW5lLCBOVUxMLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3NC1cdFx0XHRcdFx0XHQgXHUwMDI2dHJhbXBvbGluZV9tdWx0aV9vcHMsIGRhdGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzkxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRhcmdldGluZyBLZXkgRnVuY3Rpb25zIGZvciBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGlua2luZyBhYm91dCB3aGVyZSB0byBzdGFydCBteSBkZWVwIGRpdmUsIEkmIzM5O20gbGVhbmluZyBoZWF2aWx5IHRvd2FyZHMgdGhvc2UgQlBGIHRyYW1wb2xpbmUgZnVuY3Rpb25zOiBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYC4gVGhleSBzZWVtIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgdW5kZXJzdGFuZGluZyBob3cgQlBGIHByb2dyYW1zIGFyZSBsaW5rZWQgYW5kIHVubGlua2VkLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggbXVsdGktYXR0YWNoIHNjZW5hcmlvcy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aG9zZSBob29rcyBhcmUgaW1wbGVtZW50ZWQuCgpUaGVuLCBtb3Zpbmcgb24gdG8ga3Byb2JlcywgdGhlIG9idmlvdXMgc3VzcGVjdHMgYXJlIGByZWdpc3Rlcl9rcHJvYmVgLCBgdW5yZWdpc3Rlcl9rcHJvYmVgLCBgcmVnaXN0ZXJfa3JldHByb2JlYCwgYW5kIGB1bnJlZ2lzdGVyX2tyZXRwcm9iZWAuIFRoYXQgd2hvbGUgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBsaWZlY3ljbGUgZm9yIGtlcm5lbCBwcm9iZXMgaXMgY3J1Y2lhbCwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyB0aGVyZSB3aWxsIGJlIGtleS4KCkZpbmFsbHksIGxldCYjMzk7cyBub3QgZm9yZ2V0IHRoYXQgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYCBmdW5jdGlvbiwgYXNzb2NpYXRlZCB3aXRoIHRoYXQgYGZ0cmFjZV9lbmFibGVkYCBzeXNjdGwgd3JpdGUuIEkgbmVlZCB0byB0cmFjZSBpdHMgbG9jYXRpb24gYW5kIHdoYXQgaXQmIzM5O3MgcmVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kLiBGdHJhY2UmIzM5O3MgY29udHJvbCBvZiB0cmFjaW5nIGlzIGEgcG93ZXJmdWwgbWVjaGFuaXNtLCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgaXQgdGllcyBpbiB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnRyYWNlX2VuYWJsZV9zeXNjdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9mdHJhY2UuYz05MzkyPXN0YXRpYyBpbnRcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo5MzkzOmZ0cmFjZV9lbmFibGVfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTM5NC1cdFx0ICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz05NDMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGZ0cmFjZV9zeXNjdGxzW10gPSB7XG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTk0MzgtXHRcdC5tb2RlICAgICAgICAgICA9IDA2NDQsXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6OTQzOTpcdFx0LnByb2NfaGFuZGxlciAgID0gZnRyYWNlX2VuYWJsZV9zeXNjdGwsXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTQ0MC1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDA2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2gmIzM5O3Mgc3VjY2VzcyBvciBmYWlsdXJlIGhpbmdlcyBkaXJlY3RseSBvbiBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGEgZm9jdXNlZCBpbnZlc3RpZ2F0aW9uLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGxvb2tpbmcgYXQgc29tZSBrZXkgQlBGIGFuZCB0cmFjaW5nIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19LUFJPQkVTYCwgYENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRWAsIGBDT05GSUdfRlRSQUNFYCwgYENPTkZJR19EWU5BTUlDX0ZUUkFDRWAsIGFuZCBjcnVjaWFsbHksIGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLgoKR2l2ZW4gdGhhdCBsYXN0IG9uZSwgSSBzaG91bGQgcmVhbGx5IGNoZWNrIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCB3aWxsIGNvbWUgaW50byBwbGF5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02Mj1zdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwLXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MjEwPXZvaWQgYnBmX2ltYWdlX2tzeW1fZGVsKHN0cnVjdCBicGZfa3N5bSAqa3N5bSlcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMTc6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjE4LSNpZmRlZiBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0zNzE9c3RhdGljIGludCBkaXJlY3Rfb3BzX21vZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzc0LX1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM3NTojZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNzYtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9Njg0PXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzE3LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzE4OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcxOS1hZ2Fpbjpcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NzAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NzE6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzcyLVx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTQ3OD1pbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDgzLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTQ4NDojaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFx1MDAyNlx1MDAyNiBcXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTQ4NS0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpIFx1MDAyNlx1MDAyNiBcXFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MjM9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTctXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzU4OiNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzU5LVx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTU5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBkaXJlY3Rfb3BzYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBkaXJlY3QgY2FsbHMgaW4gZnRyYWNlLiBUaGUgYCNpZmRlZmAgZGlyZWN0aXZlcywgc3BlY2lmaWNhbGx5IHRob3NlIHJlbGF0ZWQgdG8gYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLCBjb25maXJtIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMgYmVpbmcgYWN0aXZlIG9yIGluYWN0aXZlLCBhcyB0aGV5JiMzOTtsbCBvYnZpb3VzbHkgY29uZGl0aW9uIHRoZSBiZWhhdmlvciBvZiB0aGUgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgdGhlc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJlIGJlaW5nIGFwcGxpZWQgYW5kIHdoYXQgZWZmZWN0IHRoYXQgd2lsbCBoYXZlIG9uIHRoZSBmdW5jdGlvbmFsaXR5LgoKR2l2ZW4gdGhlIGNvbm5lY3Rpb24gdG8gZGlyZWN0IGNhbGxzIGFuZCBmdHJhY2UsIEkgc2hvdWxkIGFsc28gZG91YmxlIGNoZWNrIHRoZSByZWxhdGVkIGtwcm9iZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFYCBpcyBhcHByb3ByaWF0ZWx5IGhhbmRsZWQsIHNpbmNlIGtwcm9iZXMgb2Z0ZW4gd29yayBpbiB0YW5kZW0gd2l0aCBmdW5jdGlvbiB0cmFjaW5nLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBsb29raW5nIGluIGBrZXJuZWwva3Byb2Jlcy5jYCBmb3IgYW55IHJlbGF0ZWQgbG9naWMgb3IgcG90ZW50aWFsIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0tQUk9CRVNfT05fRlRSQUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2twcm9iZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwva3Byb2Jlcy5jPTExMTg9c3RhdGljIHN0cnVjdCBrcHJvYmUgKmFsbG9jX2FnZ3Jfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApXG4tLVxua2VybmVsL2twcm9iZXMuYy0xMTIzLVxua2VybmVsL2twcm9iZXMuYzoxMTI0OiNpZmRlZiBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0Vcbmtlcm5lbC9rcHJvYmVzLmMtMTEyNS0vKiBTYW1lIHByb3RlY3Rpb24gbGl2ZXBhdGNoIGdpdmVzIGl0cyBvd24gZnRyYWNlX29wcy4gKi9cbi0tXG5rZXJuZWwva3Byb2Jlcy5jPTEyMTA9dm9pZCBrcHJvYmVfZnRyYWNlX2tpbGwodm9pZClcbi0tXG5rZXJuZWwva3Byb2Jlcy5jLTEyMTMtfVxua2VybmVsL2twcm9iZXMuYzoxMjE0OiNlbHNlXHQvKiAhQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFICovXG5rZXJuZWwva3Byb2Jlcy5jLTEyMTUtc3RhdGljIGlubGluZSBpbnQgYXJtX2twcm9iZV9mdHJhY2Uoc3RydWN0IGtwcm9iZSAqcClcbi0tXG5rZXJuZWwva3Byb2Jlcy5jPTE1OTQ9c3RhdGljIGludCBjaGVja19mdHJhY2VfbG9jYXRpb24oc3RydWN0IGtwcm9iZSAqcClcbi0tXG5rZXJuZWwva3Byb2Jlcy5jLTE1OTgtXHRpZiAoZnRyYWNlX2xvY2F0aW9uKGFkZHIpID09IGFkZHIpIHtcbmtlcm5lbC9rcHJvYmVzLmM6MTU5OTojaWZkZWYgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFXG5rZXJuZWwva3Byb2Jlcy5jLTE2MDAtXHRcdHAtXHUwMDNlZmxhZ3MgfD0gS1BST0JFX0ZMQUdfRlRSQUNFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgyNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmF0aW9uIENvbnVuZHJ1bXMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgdHJhY2luZyBzZXR1cC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSBuZWVkZWQgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYCwgYW5kIGBLUFJPQkVTX09OX0ZUUkFDRWAuIEJ1dCB0aGVuIGl0IGhpdHMgbWU6IGhvbGQgb24sIGBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AgaXMgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmcsIHJpZ2h0PyBXZSBkb24mIzM5O3QgbmVlZCB0byBleHBsaWNpdGx5IGRlZmluZSBpdCBpZiB0aGUgYXJjaGl0ZWN0dXJlIGFscmVhZHkgdGFrZXMgY2FyZSBvZiBpdC4gQW5kIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuLi4gdGhhdCYjMzk7cyBvZnRlbiBhcmNoaXRlY3R1cmUtc2VsZWN0ZWQgdG9vLCBpc24mIzM5O3QgaXQ/IFNhbWUgZ29lcyBmb3IgYEtQUk9CRVNfT05fRlRSQUNFYDsgaXQmIzM5O3Mgc2VsZWN0ZWQgYnkgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQuCgpBbHJpZ2h0LCBhIGNsZWFuZXIsIG1vcmUgZ2VuZXJhbGl6ZWQgYXBwcm9hY2ggdGhlbi4gU2VlbXMgbGlrZSBJIHNob3VsZCBqdXN0IHNwZWNpZnkgdGhlIGNvcmUsIGFyY2hpdGVjdHVyZS1hZ25vc3RpYyBvcHRpb25zOiBgRlRSQUNFYCwgYERZTkFNSUNfRlRSQUNFYCwgYEtQUk9CRVNgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9KSVRgLiBUaGF0IHNob3VsZCBnaXZlIHVzIHRoZSBmb3VuZGF0aW9uIHdlIG5lZWQuIEJ1dCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGlmIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgZXZlciBhY3R1YWxseSBhIHVzZXItc2VsZWN0YWJsZSBjb25maWc7IGp1c3QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0zMjQ9Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyOC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyOTpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MDkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgZGlhbG9ndWU6CgoqKkRlcGVuZGVuY3kgRXZhbHVhdGlvbiBmb3IgYGRlZl9ib29sIHlgKioKCkFscmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3QgdGhpcyBgZGVmX2Jvb2wgeWAuIFRoZSBjb3JlIGNvbmNlcHQgaGVyZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IGl0cyBkZWZpbmVkIHN0YXRlIGRlcGVuZHMgb24gdGhlIHN1Y2Nlc3NmdWwgZnVsZmlsbG1lbnQgb2YgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBjbGFzc2ljLCByaWdodD8gSXQmIzM5O3Mgbm90IG1hZ2ljLCBpdCYjMzk7cyBqdXN0IGhvdyBhbnkgbG9naWNhbCBjb25zdHJ1Y3Rpb24gd29ya3MuIElmIHRoZSBpbnB1dHMgYXJlbiYjMzk7dCB2YWxpZCwgdGhlIG91dHB1dCBjYW4mIzM5O3QgYmUgdHJ1c3RlZC4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAsIGxvZ2ljYWxseSwgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHZhbGlkYXRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzLiBXaGF0IGFyZSB0aGV5PyBBcmUgdGhleSBzYXRpc2ZpZWQ/IFdoYXQmIzM5O3MgdGhlIHN0YXRlIG9mIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMgb3Igd2hhdGV2ZXIgdGhleSYjMzk7cmUgbGlua2VkIHRvPyBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY3Vyc29yeSBnbGFuY2U7IEkgbmVlZCB0byBkcmlsbCBkb3duIHRvIGNvbmZpcm0gdGhlIHZhbGlkaXR5IG9mIGVhY2ggZWxlbWVudCB1cG9uIHdoaWNoIGB5YCByZWxpZXMuIE5vIHNob3J0Y3V0cy4gV2UgbmVlZCB0byBiZSByaWdvcm91c2x5IHRob3JvdWdoIHRvIGF2b2lkIGFueSBjYXNjYWRpbmcgZmFpbHVyZXMgZG93biB0aGUgbGluZS4gV2UgY2FuJiMzOTt0IGhhdmUgYHlgIHJldHVybmluZyBhIHZhbHVlIGJhc2VkIG9uIGEgZmF1bHR5IHByZWRpY2F0ZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4gV2UgbmVlZCB0byBiZSBtZXRpY3Vsb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTQ3PWNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTQ5LVxua2VybmVsL3RyYWNlL0tjb25maWc6NTA6Y29uZmlnIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTUxLVx0Ym9vbFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTMyND1jb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVx0ZGVmX2Jvb2wgeVxua2VybmVsL3RyYWNlL0tjb25maWctMzMxLVx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1MgfHwgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMzI6XHRkZXBlbmRzIG9uIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMy1cbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0zNDM9Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfSk1QXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzQ1LVx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWc6MzQ2Olx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctMzQ3LVx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfSk1QXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDUxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKk15IEFuYWx5c2lzIG9mIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoZSBlbmFibGVtZW50IG9mIHRoaXMgZmVhdHVyZSBoaW5nZXMgb24gYEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBBbmQgdGhhdCYjMzk7cyBhcmNoLWRlcGVuZGVudCwgd2hpY2ggbWVhbnMgdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlIGlzIGdvaW5nIHRvIGRpY3RhdGUgd2hldGhlciB3ZSBjYW4gZXZlbiB1c2UgdGhpcyBlZmZlY3RpdmVseS4KClRvIGJlIHRob3JvdWdoLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBhbHNvIGdvdCBgRlRSQUNFYCwgYERZTkFNSUNfRlRSQUNFYCwgYEtQUk9CRVNgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9KSVRgIGFsbCBzZXQuIFRoZXkmIzM5O3JlIGFsbCByZWxhdGVkLCBhbmQgSSYjMzk7bGwgbmVlZCBhbGwgdGhvc2UgcGllY2VzIHRvIGJlIGluIHBsYWNlIGZvciBhIHJvYnVzdCBzb2x1dGlvbi4KCk9rYXksIGFuZCBub3csIGJlZm9yZSBJIG1vdmUgZm9yd2FyZCwgSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBzdGF0dXMgb2YgYEtQUk9CRVNfT05fRlRSQUNFYC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueSBjb25maWd1cmF0aW9uIGNvbmZsaWN0cywgZXNwZWNpYWxseSBzaW5jZSB0aGlzIHJlbGllcyBvbiBLcHJvYmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1BST0JFU19PTl9GVFJBQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTE2OD1jb25maWcgT1BUUFJPQkVTXG4tLVxuYXJjaC9LY29uZmlnLTE3Mi1cbmFyY2gvS2NvbmZpZzoxNzM6Y29uZmlnIEtQUk9CRVNfT05fRlRSQUNFXG5hcmNoL0tjb25maWctMTc0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBmb3IgQ29yZSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21lIGNvcmUgQlBGIHRyYW1wb2xpbmUgZnVuY3Rpb25hbGl0eSwgYW5kIGl0IGxvb2tzIGxpa2UgYGRlZl9ib29sIHlgIGlzIGFsc28gcmVsZXZhbnQuIFRoZSBrZXkgZm9jdXMgYXJlYXMgZm9yIG15IGFuYWx5c2lzIHJpZ2h0IG5vdyBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgQlBGIHRyYW1wb2xpbmUgZnVuY3Rpb25zOiBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYC4gV2UmIzM5O3ZlIGFsc28gZ290IHNvbWUgY2xhc3NpYyB0cmFjaW5nIGhvb2tzIGluIHRoZXJlOiBgcmVnaXN0ZXJfa3Byb2JlYCwgYHVucmVnaXN0ZXJfa3Byb2JlYCwgYHJlZ2lzdGVyX2tyZXRwcm9iZWAsIGB1bnJlZ2lzdGVyX2tyZXRwcm9iZWAsIGFuZCBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgLiBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQgY2hlY2sgaWYgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCBleGlzdHMsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgaXMgYSB2aWFibGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NTc9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTY5OnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NzAtXHRcdFx0XHRcdHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTkyLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTkzOi8qIGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nKCkgc2hvdWxkIG5ldmVyIGZhaWwuICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5OTQ6aW50IGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk5NS1cdFx0XHQgICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDAwLVx0dHJhbXBvbGluZV9sb2NrKHRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMDE6XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAwMi1cdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDA3PXN0YXRpYyB2b2lkIGJwZl9zaGltX3RyYW1wX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxNS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMTY6XHRXQVJOX09OX09OQ0UoYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXHUwMDI2c2hpbV9saW5rLVx1MDAzZWxpbmsubm9kZSwgc2hpbV9saW5rLVx1MDAzZXRyYW1wb2xpbmUsIE5VTEwpKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTctXHRicGZfdHJhbXBvbGluZV9wdXQoc2hpbV9saW5rLVx1MDAzZXRyYW1wb2xpbmUpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MjM9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MzMtXHRcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTczNDpcdFx0V0FSTl9PTl9PTkNFKF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXHUwMDI2bW5vZGUtXHUwMDNlbm9kZSwgbW5vZGUtXHUwMDNldHJhbXBvbGluZSxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MzUtXHRcdFx0XHRcdE5VTEwsIFx1MDAyNnRyYW1wb2xpbmVfbXVsdGlfb3BzLCBkYXRhKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgS2VybmVsIFN5bWJvbHMgZm9yIFBhdGNoIEltcGFjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgY29uZmlybWluZyB0aGF0LCB5ZXMsIGl0IGV4aXN0cy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYC4gTXkgZmlyc3QgdGhvdWdodCB3YXMgdG8gY2hlY2sgaWYgaXQmIzM5O3MgZXhwb3J0ZWQgb3Igc3RhdGljLCBhbmQgSSBzZWUgaXQmIzM5O3Mgc3RhdGljIGluIGBrZXJuZWwvdHJhY2UvZnRyYWNlLmNgLiBXaGlsZSBhIHN0YXRpYyBmdW5jdGlvbiBpc24mIzM5O3QgKmlkZWFsKiBhcyBhIGZvY3VzLCBpdCAqaXMqIHRoZSBzeXNjdGwgaGFuZGxlciwgc28gaXQmIzM5O3MgcmVsZXZhbnQuIEkgY29uc2lkZXJlZCBpZiB0aGVyZSB3YXMgYSBiZXR0ZXIgc3ltYm9sLCBsaWtlIGBmdHJhY2Vfc2V0X2ZpbHRlcmAsIGJ1dCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgYGZ0cmFjZV9lbmFibGVkYCwgd2hpY2ggaXMgbWFuYWdlZCBieSBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgLiBTaW5jZSBpdCBpcyBzdGF0aWMgSSBiZXR0ZXIgY2hlY2sgaWYgYGZ0cmFjZV9zeXNjdGxzYCBpcyByZWdpc3RlcmVkIHNvbWV3aGVyZS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgaG93ZXZlciwgdGhhdCB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSAqZG9lcyogdGhlIHdvcmsgaXMgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYC4gU28gdGhhdCBuZWVkcyB0byBiZSBpbmNsdWRlZC4KClRoZW4gSSBzaGlmdGVkIGdlYXJzIGEgYml0LiBJIHJlbWVtYmVyZWQgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgYW5kIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AuIFRob3NlIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIHRoZSBhbmFseXNpcy4gQWxzbywgYHJlZ2lzdGVyX2twcm9iZWAgYW5kIGB1bnJlZ2lzdGVyX2twcm9iZWAgYXJlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIHRoaW5raW5nOiBgRlRSQUNFYCwgYERZTkFNSUNfRlRSQUNFYCwgYEtQUk9CRVNgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9KSVRgLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgY29uZmlncy4gVGhlIHNlbGZ0ZXN0cyB1c2UgYGZlbnRyeWAgYW5kIGBmZXhpdGAsIHdoaWNoIHJlcXVpcmUgYEJQRl9KSVRgIGFuZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBTbywgeWVzLCB0aGF0IGNvbmZpcm1zOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBGVFJBQ0VgLCBgRFlOQU1JQ19GVFJBQ0VgLCBhbmQgYEtQUk9CRVNgLgoKSSYjMzk7bSBub3cgY29uc2lkZXJpbmcgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLiBUaGV5JiMzOTtyZSByZWxldmFudCB0byBga3Byb2JlLm11bHRpYCBhbmQgYGtyZXRwcm9iZS5tdWx0aWAuIEJ1dCwgd2FpdCwgdGhlIHBhdGNoICpleHBsaWNpdGx5KiBzYXlzICYjMzQ7a3Byb2JlLm11bHRpL2tyZXRwcm9iZS5tdWx0aS9rcHJvYmUuc2Vzc2lvbiBhcmUgb3V0IG9mIHNjb3BlLiYjMzQ7IE9rYXksIHRoZSBjb21taXQgbWVzc2FnZSBhbHNvIHNheXMgdGhhdCB0aGV5IGFyZSBvdXQgb2Ygc2NvcGUuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFmZmVjdCB0aGVtLiBXaHk/IEJlY2F1c2UgYGtwcm9iZS5tdWx0aWAgdXNlcyBgZnByb2JlYCwgd2hpY2ggbGlrZWx5IGhhcyBpdHMgb3duIGBmdHJhY2Vfb3BzYC4gSSBzaG91bGQgY29uZmlybSB0aGF0IGBmcHJvYmVgIHVzZXMgYEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RlRSQUNFX09QU19GTF9QRVJNQU5FTlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9mdHJhY2UuYz0zMzA9aW50IF9fcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpXG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTM1MC0jZW5kaWZcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzozNTE6XHRpZiAoIWZ0cmFjZV9lbmFibGVkIFx1MDAyNlx1MDAyNiAob3BzLVx1MDAzZWZsYWdzIFx1MDAyNiBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCkpXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtMzUyLVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz05MzgwPXN0YXRpYyBib29sIGlzX3Blcm1hbmVudF9vcHNfcmVnaXN0ZXJlZCh2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYy05Mzg0LVx0ZG9fZm9yX2VhY2hfZnRyYWNlX29wKG9wLCBmdHJhY2Vfb3BzX2xpc3QpIHtcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo5Mzg1Olx0XHRpZiAob3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UKVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTkzODYtXHRcdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzI2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UYC4gRnJvbSB3aGF0IEkgc2VlLCBpdCYjMzk7cyBleGNsdXNpdmVseSBhZGRlZCB0byBgZGlyZWN0X29wc2AsIGFuZCB0aGVuIHdpdGhpbiB0aGUgY29udGV4dCBvZiBrcHJvYmVzLCB0byBga3Byb2JlX2Z0cmFjZV9vcHNgIGFuZCBga3Byb2JlX2lwbW9kaWZ5X29wc2AuIFRoaXMgbWVhbnMgbXkgbWFpbiBwb2ludHMgb2YgZW50cnkgZm9yIG9ic2VydmluZyB0aGlzIGJlaGF2aW9yIHdvdWxkIGJlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFuZCBgcmVnaXN0ZXJfa3Byb2JlYCwgcmlnaHQ/IEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZsYWcgaXMgYmVpbmcgdXNlZC4KCkhvbGQgb24uLi4gSSBzZWVtIHRvIHJlY2FsbCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBtYWtpbmcgdXNlIG9mIGBkaXJlY3Rfb3BzYC4gVGhhdCB3YXJyYW50cyBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYW5kIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gTGV0IG1lIGp1bXAgaW50byBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGFuZCBoYXZlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAuIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7dmUgYWNjb3VudGVkIGZvciBldmVyeSBwbGFjZSB0aGF0IHRoaXMgZmxhZyBpcyBzZXQgYW5kIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpcmVjdF9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX29wcztcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NC0jaWZkZWYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NTpzdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpkaXJlY3Rfb3BzX2lwX2xvb2t1cChzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkxLSNlbHNlXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5MjpzdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpkaXJlY3Rfb3BzX2lwX2xvb2t1cChzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTMte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk4PXN0YXRpYyBpbnQgYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyhzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMy1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwNDpcdHRyID0gZGlyZWN0X29wc19pcF9sb29rdXAob3BzLCBpcCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDUtXHRpZiAoIXRyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTIxMD12b2lkIGJwZl9pbWFnZV9rc3ltX2RlbChzdHJ1Y3QgYnBmX2tzeW0gKmtzeW0pXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjE5LS8qXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMjA6ICogV2UgaGF2ZSBvbmx5IHNpbmdsZSBkaXJlY3Rfb3BzIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgZGlyZWN0IGNhbGxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIyMS0gKiBzaXRlcyBhbmQgaXMgdGhlIG9ubHkgZ2xvYmFsIGZ0cmFjZV9vcHMgZm9yIGFsbCB0cmFtcG9saW5lcy5cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMjQtICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMjU6c3RydWN0IGZ0cmFjZV9vcHMgZGlyZWN0X29wcyA9IHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIyNi1cdC5vcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjMwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjMxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjMyLXtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIzMzpcdHRyLVx1MDAzZWZvcHMgPSBcdTAwMjZkaXJlY3Rfb3BzO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjM0LVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjM2LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjM3OnN0YXRpYyB2b2lkIGRpcmVjdF9vcHNfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKSB7IH1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIzOC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTIzOT1zdGF0aWMgc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoX2Zyb21faXAoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqcHRyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI1OC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjI1OTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWRkKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yNjAte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI3MC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjI3MTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfZGVsKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yNzIte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI4Mi1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjI4MzpzdGF0aWMgaW50IGRpcmVjdF9vcHNfbW9kKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yODQte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMwMC0gKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMwMTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWxsb2Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMwMi17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzA3LVx0dHItXHUwMDNlZm9wcy1cdTAwM2VvcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmM7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozMDg6XHQvKiBTZWUgdGhlIGRpcmVjdF9vcHMgaW5pdGlhbGl6ZXIgYWJvdmUgZm9yIHdoeS4gKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMwOS1cdHRyLVx1MDAzZWZvcHMtXHUwMDNlZmxhZ3MgfD0gRlRSQUNFX09QU19GTF9QRVJNQU5FTlQ7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzEyLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzEzOnN0YXRpYyB2b2lkIGRpcmVjdF9vcHNfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzE0LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMjAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozMjE6c3RhdGljIGludCBkaXJlY3Rfb3BzX2FkZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMjIte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMzNS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMzNjpzdGF0aWMgaW50IGRpcmVjdF9vcHNfZGVsKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMzcte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM0MC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM0MTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfbW9kKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKnB0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleClcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM0Mi17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzUzLSNlbHNlXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNTQ6c3RhdGljIHZvaWQgZGlyZWN0X29wc19mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpIHsgfVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzU1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzU2OnN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzU3LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNjAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNjE6c3RhdGljIGludCBkaXJlY3Rfb3BzX2FkZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICphZGRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzYyLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNjUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNjY6c3RhdGljIGludCBkaXJlY3Rfb3BzX2RlbChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICphZGRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzY3LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNzAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNzE6c3RhdGljIGludCBkaXJlY3Rfb3BzX21vZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNzIte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTM3Nz1zdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpicGZfdHJhbXBvbGluZV9sb29rdXAodTY0IGtleSwgdW5zaWduZWQgbG9uZyBpcClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zOTMtXHRcdGdvdG8gb3V0O1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Mzk0Olx0aWYgKGRpcmVjdF9vcHNfYWxsb2ModHIpKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zOTUtXHRcdGtmcmVlKHRyKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00MzY9c3RhdGljIGludCB1bnJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NDEtXHRpZiAodHItXHUwMDNlZnVuYy5mdHJhY2VfbWFuYWdlZClcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQ0MjpcdFx0cmV0ID0gZGlyZWN0X29wc19kZWwodHIsIG9sZF9hZGRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ0My1cdGVsc2Vcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00NTQ9c3RhdGljIGludCBtb2RpZnlfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NjEtXHRpZiAodHItXHUwMDNlZnVuYy5mdHJhY2VfbWFuYWdlZCkge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDYyOlx0XHRyZXQgPSBkaXJlY3Rfb3BzX21vZCh0ciwgbmV3X2FkZHIsIGxvY2tfZGlyZWN0X211dGV4KTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ2My1cdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDc3PXN0YXRpYyBpbnQgcmVnaXN0ZXJfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ5Mi1cdGlmICh0ci1cdTAwM2VmdW5jLmZ0cmFjZV9tYW5hZ2VkKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0OTM6XHRcdHJldCA9IGRpcmVjdF9vcHNfYWRkKHRyLCBuZXdfYWRkcik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTQtXHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExOTg9dm9pZCBicGZfdHJhbXBvbGluZV9wdXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjE5LVx0aGxpc3RfZGVsKFx1MDAyNnRyLVx1MDAzZWhsaXN0X2lwKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEyMjA6XHRkaXJlY3Rfb3BzX2ZyZWUodHIpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTIyMS1cdGtmcmVlKHRyKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjIzPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjgyLVx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXHUwMDNlcmVnKSkge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4MzpcdFx0ZXJyID0gdXBkYXRlX2Z0cmFjZV9kaXJlY3RfYWRkKFx1MDAyNmRpcmVjdF9vcHMsIGRhdGEtXHUwMDNlcmVnKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODQtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4OC1cdGlmIChmdHJhY2VfaGFzaF9jb3VudChkYXRhLVx1MDAzZW1vZGlmeSkpIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODk6XHRcdGVyciA9IHVwZGF0ZV9mdHJhY2VfZGlyZWN0X21vZChcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVx1MDAzZW1vZGlmeSwgdHJ1ZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkwLVx0XHRpZiAoZXJyKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkxLVx0XHRcdGlmIChmdHJhY2VfaGFzaF9jb3VudChkYXRhLVx1MDAzZXJlZykpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjkyOlx0XHRcdFx0V0FSTl9PTl9PTkNFKHVwZGF0ZV9mdHJhY2VfZGlyZWN0X2RlbChcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVx1MDAzZXJlZykpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5My1cdFx0XHRnb3RvIHJvbGxiYWNrX3VubGluaztcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzIzPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzM4LVx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXHUwMDNldW5yZWcpKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTczOTpcdFx0V0FSTl9PTl9PTkNFKHVwZGF0ZV9mdHJhY2VfZGlyZWN0X2RlbChcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVx1MDAzZXVucmVnKSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQwLVx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXHUwMDNlbW9kaWZ5KSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NDE6XHRcdFdBUk5fT05fT05DRSh1cGRhdGVfZnRyYWNlX2RpcmVjdF9tb2QoXHUwMDI2ZGlyZWN0X29wcywgZGF0YS1cdTAwM2Vtb2RpZnksIHRydWUpKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTQwCgkJCQkJCQlvdXRwdXQ6IDI2MwoJCQkJCQkJdGhvdWdodHM6IDY5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFzb25pbmcgZm9yIEZ1enppbmcgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUmIzM5O3MgbXkgdHJhaW4gb2YgdGhvdWdodC4gIEluaXRpYWxseSwgdGhlIGNvZGUgdXRpbGl6ZXMgYGRpcmVjdF9vcHNgIHdpdGhpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgd2hpY2ggbWFrZXMgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIGludGVyZXN0aW5nIHRhcmdldHMgZm9yIGZ1enppbmcsIGFsb25nIHdpdGggdGhlIHN0YW5kYXJkIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFuZCBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgLiBXZSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGtwcm9iZSBmdW5jdGlvbnMuIFRoaXMgYWxzbyBtYWtlcyB0aGUga3Byb2JlLXJlbGF0ZWQgc3ltYm9scyBvZiBgcmVnaXN0ZXJfa3Byb2JlYCwgYHVucmVnaXN0ZXJfa3Byb2JlYCwgYHJlZ2lzdGVyX2tyZXRwcm9iZWAsIGFuZCBgdW5yZWdpc3Rlcl9rcmV0cHJvYmVgIGltcG9ydGFudC4gTGFzdGx5LCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGBmdHJhY2VfZW5hYmxlX3N5c2N0bGAgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBvdGhlciBmdW5jdGlvbnMuCgpOb3csIGNvbmNlcm5pbmcgY29uZmlndXJhdGlvbnMsIHdlIGRlZmluaXRlbHkgbmVlZCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBGVFJBQ0VgLCBgRFlOQU1JQ19GVFJBQ0VgLCBhbmQgYEtQUk9CRVNgIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS4gIFRoZSBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgIGlzIGEgYml0IG9mIGEgd3JpbmtsZSBzaW5jZSBpdCYjMzk7cyBzdGF0aWMsIGJ1dCBTeXprYWxsZXIgKmNhbiogZnV6eiBpdCB0aHJvdWdoIGAvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9lbmFibGVkYCwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYCB1c2VzIHRoZSBzeXNjdGwgaGFuZGxlciBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgLgoKSSBkaWQgYSBiaXQgb2YgY3Jvc3MtY2hlY2tpbmcsIGFuZCB0aGUgc2VsZnRlc3RzIHVzZSBgZmVudHJ5YCBhbmQgYGZleGl0YCwgd2hpY2ggZGVwZW5kIG9uIGBCUEZfSklUYCBhbmQgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gIEhvd2V2ZXIsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseSBpZiBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgbWV0LCBzbyB3ZSBkb24mIzM5O3QgbmVlZCB0byBzcGVjaWZ5IGl0IGRpcmVjdGx5LiBUaGUgc2FtZSBhcHBsaWVzIGZvciBgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFYCwgYXMgaXQmIzM5O3MgYXV0b21hdGljYWxseSBlbmFibGVkIHdpdGggYEhBVkVfS1BST0JFU19PTl9GVFJBQ0VgLgoKRmluYWxseSwgdGhlIGNvcmUgcmVhc29uIHRvIGZ1enogdGhpcyBwYXRjaCBpcyBiZWNhdXNlIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGZ1bmRhbWVudGFsIGtlcm5lbCBsb2dpYy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggc2V0cyBgRlRSQUNFX09QU19GTF9QRVJNQU5FTlRgIG9uIGBkaXJlY3Rfb3BzYCBhbmQgYGtwcm9iZV9mdHJhY2Vfb3BzYCAvIGBrcHJvYmVfaXBtb2RpZnlfb3BzYC4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBwcmV2ZW50aW5nIGdsb2JhbCBmdHJhY2UgZGlzYWJsaW5nIHZpYSBgL3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZGAgd2hlbiBCUEYgdHJhbXBvbGluZXMgb3Iga3Byb2JlcyBhcmUgYWN0aXZlLiBUaGlzIGtpbmQgb2YgY2hhbmdlIGlzIGV4YWN0bHkgdGhlIHNvcnQgdGhhdCB3YXJyYW50cyBkZWVwIGZ1enppbmcuIFdlIHdhbnQgdG8gZW5zdXJlIGl0IHdvcmtzIGFzIGludGVuZGVkLCBwcmV2ZW50cyB1bmV4cGVjdGVkIHNpZGUtZWZmZWN0cywgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmFjZXMuCgpJbiBzaG9ydCwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOgoKKiAgIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgCiogICBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgCiogICBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYAoqICAgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAKKiAgIGByZWdpc3Rlcl9rcHJvYmVgCiogICBgdW5yZWdpc3Rlcl9rcHJvYmVgCiogICBgcmVnaXN0ZXJfa3JldHByb2JlYAoqICAgYHVucmVnaXN0ZXJfa3JldHByb2JlYAoqICAgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYAoKd2l0aCB0aGVzZSBlbmFibGVkIGNvbmZpZ3M6CgoqICAgYEJQRl9TWVNDQUxMYAoqICAgYEJQRl9KSVRgCiogICBgRlRSQUNFYAoqICAgYERZTkFNSUNfRlRSQUNFYAoqICAgYEtQUk9CRVNgCgpBbmQgdGhlbiBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gmIzM0OywKICAgICYjMzQ7cmVnaXN0ZXJfa3Byb2JlJiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfa3Byb2JlJiMzNDssCiAgICAmIzM0O3JlZ2lzdGVyX2tyZXRwcm9iZSYjMzQ7LAogICAgJiMzNDt1bnJlZ2lzdGVyX2tyZXRwcm9iZSYjMzQ7LAogICAgJiMzNDtmdHJhY2VfZW5hYmxlX3N5c2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXRzIEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UIG9uIGRpcmVjdF9vcHMgYW5kIGtwcm9iZV9mdHJhY2Vfb3BzL2twcm9iZV9pcG1vZGlmeV9vcHMuIFRoaXMgcHJldmVudHMgZGlzYWJsaW5nIGZ0cmFjZSBnbG9iYWxseSB2aWEgL3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZCB3aGlsZSBCUEYgdHJhbXBvbGluZXMgb3Iga3Byb2JlcyBhcmUgYWN0aXZlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgKEJQRiB0cmFtcG9saW5lIGFuZCBrcHJvYmVzKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IHByZXZlbnRzIGZ0cmFjZSBkaXNhYmxpbmcgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGF0dGFjaC9kZXRhY2ggb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtGVFJBQ0UmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0UmIzM0OywKICAgICYjMzQ7S1BST0JFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoJiMzNDssCiAgICAmIzM0O3JlZ2lzdGVyX2twcm9iZSYjMzQ7LAogICAgJiMzNDt1bnJlZ2lzdGVyX2twcm9iZSYjMzQ7LAogICAgJiMzNDtyZWdpc3Rlcl9rcmV0cHJvYmUmIzM0OywKICAgICYjMzQ7dW5yZWdpc3Rlcl9rcmV0cHJvYmUmIzM0OywKICAgICYjMzQ7ZnRyYWNlX2VuYWJsZV9zeXNjdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2V0cyBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCBvbiBkaXJlY3Rfb3BzIGFuZCBrcHJvYmVfZnRyYWNlX29wcy9rcHJvYmVfaXBtb2RpZnlfb3BzLiBUaGlzIHByZXZlbnRzIGRpc2FibGluZyBmdHJhY2UgZ2xvYmFsbHkgdmlhIC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2VuYWJsZWQgd2hpbGUgQlBGIHRyYW1wb2xpbmVzIG9yIGtwcm9iZXMgYXJlIGFjdGl2ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgdHJhbXBvbGluZSBhbmQga3Byb2JlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBwcmV2ZW50cyBmdHJhY2UgZGlzYWJsaW5nIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyBhdHRhY2gvZGV0YWNoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0Nzo0MS40MzA5MDM5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDkzMTg4ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFXCIsXG4gICAgXCJLUFJPQkVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ1wiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hcIixcbiAgICBcInJlZ2lzdGVyX2twcm9iZVwiLFxuICAgIFwidW5yZWdpc3Rlcl9rcHJvYmVcIixcbiAgICBcInJlZ2lzdGVyX2tyZXRwcm9iZVwiLFxuICAgIFwidW5yZWdpc3Rlcl9rcmV0cHJvYmVcIixcbiAgICBcImZ0cmFjZV9lbmFibGVfc3lzY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2V0cyBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCBvbiBkaXJlY3Rfb3BzIGFuZCBrcHJvYmVfZnRyYWNlX29wcy9rcHJvYmVfaXBtb2RpZnlfb3BzLiBUaGlzIHByZXZlbnRzIGRpc2FibGluZyBmdHJhY2UgZ2xvYmFsbHkgdmlhIC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2VuYWJsZWQgd2hpbGUgQlBGIHRyYW1wb2xpbmVzIG9yIGtwcm9iZXMgYXJlIGFjdGl2ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgdHJhbXBvbGluZSBhbmQga3Byb2JlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBwcmV2ZW50cyBmdHJhY2UgZGlzYWJsaW5nIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGF0dGFjaC9kZXRhY2ggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDc6NDEuNDMwOTA4ODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTE4NTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM2MjAwMTI0ZmUzZDk0OGU0YzgyM2M0MDEzODI5MzJhMDU3YjFhYjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMDY6NDc6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbmluZGV4IDEyOWQwN2RiMTE3ZWMuLjNkNTA2OTA5MWRiNzYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbkBAIC0yMjQsNiArMjI0LDggQEAgdm9pZCBicGZfaW1hZ2Vfa3N5bV9kZWwoc3RydWN0IGJwZl9rc3ltICprc3ltKVxcbiAgKi9cXG4gc3RydWN0IGZ0cmFjZV9vcHMgZGlyZWN0X29wcyA9IHtcXG4gXFx0Lm9wc19mdW5jID0gYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyxcXG4rXFx0LyogU2FtZSBwcm90ZWN0aW9uIGxpdmVwYXRjaCBnaXZlcyBpdHMgb3duIGZ0cmFjZV9vcHMuICovXFxuK1xcdC5mbGFncyA9IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBkaXJlY3Rfb3BzX2FsbG9jKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxuQEAgLTMwMyw2ICszMDUsOCBAQCBzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWxsb2Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdHRyLVxcdTAwM2Vmb3BzLVxcdTAwM2Vwcml2YXRlID0gdHI7XFxuIFxcdHRyLVxcdTAwM2Vmb3BzLVxcdTAwM2VvcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmM7XFxuK1xcdC8qIFNlZSB0aGUgZGlyZWN0X29wcyBpbml0aWFsaXplciBhYm92ZSBmb3Igd2h5LiAqL1xcbitcXHR0ci1cXHUwMDNlZm9wcy1cXHUwMDNlZmxhZ3MgfD0gRlRSQUNFX09QU19GTF9QRVJNQU5FTlQ7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuY1xcbmluZGV4IGJmYzg5MDgzZGFhOTMuLjVhNTQ1MTFlZWU3OTEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2twcm9iZXMuY1xcbisrKyBiL2tlcm5lbC9rcHJvYmVzLmNcXG5AQCAtMTEyMiwxNCArMTEyMiwxNSBAQCBzdGF0aWMgc3RydWN0IGtwcm9iZSAqYWxsb2NfYWdncl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcClcXG4gI2VuZGlmIC8qIENPTkZJR19PUFRQUk9CRVMgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0VcXG4rLyogU2FtZSBwcm90ZWN0aW9uIGxpdmVwYXRjaCBnaXZlcyBpdHMgb3duIGZ0cmFjZV9vcHMuICovXFxuIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyBrcHJvYmVfZnRyYWNlX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbiBcXHQuZnVuYyA9IGtwcm9iZV9mdHJhY2VfaGFuZGxlcixcXG4tXFx0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MsXFxuK1xcdC5mbGFncyA9IEZUUkFDRV9PUFNfRkxfU0FWRV9SRUdTIHwgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQsXFxuIH07XFxuIFxcbiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMga3Byb2JlX2lwbW9kaWZ5X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbiBcXHQuZnVuYyA9IGtwcm9iZV9mdHJhY2VfaGFuZGxlcixcXG4tXFx0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MgfCBGVFJBQ0VfT1BTX0ZMX0lQTU9ESUZZLFxcbitcXHQuZmxhZ3MgPSBGVFJBQ0VfT1BTX0ZMX1NBVkVfUkVHUyB8IEZUUkFDRV9PUFNfRkxfSVBNT0RJRlkgfCBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQga3Byb2JlX2lwbW9kaWZ5X2VuYWJsZWQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Z0cmFjZV9wZXJtYW5lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Z0cmFjZV9wZXJtYW5lbnQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGJlNzgwMDlhMjkxM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mdHJhY2VfcGVybWFuZW50LmNcXG5AQCAtMCwwICsxLDE0NCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ3Jvd2RTdHJpa2UgKi9cXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImZ0cmFjZV9wZXJtYW5lbnQuc2tlbC5oXFxcIlxcbitcXG4rLypcXG4rICogZmVudHJ5L2ZleGl0L2twcm9iZS9rcmV0cHJvYmUgbm93IGNhcnJ5IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULCBzb1xcbisgKiBrZXJuZWwuZnRyYWNlX2VuYWJsZWQ9MCBtdXN0IGJlIHJlZnVzZWQgd2l0aCBFQlVTWSB3aGlsZSBhbnkgb2YgdGhlbVxcbisgKiBpcyBhdHRhY2hlZCwgYW5kIGFsbG93ZWQgYWdhaW4gb25jZSBkZXRhY2hlZC5cXG4rICpcXG4rICoga3Byb2JlLm11bHRpL2tyZXRwcm9iZS5tdWx0aS9rcHJvYmUuc2Vzc2lvbiBhcmUgb3V0IG9mIHNjb3BlLlxcbisgKiBrcHJvYmUva3JldHByb2JlIHN1YnRlc3RzIG5lZWQgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFIChlLmcuIG5vdCBvblxcbisgKiBhcm02NCkgYW5kIGFyZSBza2lwcGVkIG90aGVyd2lzZS5cXG4rICovXFxuK1xcbisjZGVmaW5lIEZUUkFDRV9FTkFCTEVEX1BBVEggXFxcIi9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2VuYWJsZWRcXFwiXFxuK1xcbitzdGF0aWMgaW50IHJlYWRfZnRyYWNlX2VuYWJsZWQoaW50ICp2YWwpXFxuK3tcXG4rXFx0Y2hhciBidWZbMTZdID0ge307XFxuK1xcdGludCBmZCwgbjtcXG4rXFxuK1xcdGZkID0gb3BlbihGVFJBQ0VfRU5BQkxFRF9QQVRILCBPX1JET05MWSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcdG4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSk7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0aWYgKG4gXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdCp2YWwgPSBhdG9pKGJ1Zik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgLWVycm5vIG9uIHdyaXRlIGZhaWx1cmUuICovXFxuK3N0YXRpYyBpbnQgd3JpdGVfZnRyYWNlX2VuYWJsZWQoaW50IHZhbClcXG4re1xcbitcXHRjaGFyIGJ1Zls0XTtcXG4rXFx0aW50IGZkLCBuLCBsZW4sIGVyciA9IDA7XFxuK1xcbitcXHRmZCA9IG9wZW4oRlRSQUNFX0VOQUJMRURfUEFUSCwgT19XUk9OTFkpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJWRcXFwiLCB2YWwpO1xcbitcXHRuID0gd3JpdGUoZmQsIGJ1ZiwgbGVuKTtcXG4rXFx0aWYgKG4gXFx1MDAzYyAwKVxcbitcXHRcXHRlcnIgPSAtZXJybm87XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLypcXG4rICogQXR0YWNoIEBwcm9nLCBhc3NlcnQga2VybmVsLmZ0cmFjZV9lbmFibGVkPTAgaXMgcmVmdXNlZCB3aGlsZSBhdHRhY2hlZFxcbisgKiBhbmQgc3RheXMgYXQgMSwgdGhlbiBkZXRhY2ggYW5kIGFzc2VydCB0aGUgZGlzYWJsZSBub3cgc3VjY2VlZHMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBjaGVja19ibG9ja3NfZGlzYWJsZShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbitcXHRpbnQgdmFsLCBlcnI7XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChwcm9nKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIG5hbWUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSB3cml0ZV9mdHJhY2VfZW5hYmxlZCgwKTtcXG4rXFx0QVNTRVJUX0VRKGVyciwgLUVCVVNZLCBcXFwiZGlzYWJsZV9yZWZ1c2VkXFxcIik7XFxuK1xcdGlmICghQVNTRVJUX09LKHJlYWRfZnRyYWNlX2VuYWJsZWQoXFx1MDAyNnZhbCksIFxcXCJyZWFkX2JhY2tcXFwiKSlcXG4rXFx0XFx0Z290byBkZXRhY2g7XFxuK1xcdEFTU0VSVF9FUSh2YWwsIDEsIFxcXCJzdGlsbF9lbmFibGVkXFxcIik7XFxuK1xcbitkZXRhY2g6XFxuK1xcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbitcXG4rXFx0QVNTRVJUX09LKHdyaXRlX2Z0cmFjZV9lbmFibGVkKDApLCBcXFwiZGlzYWJsZV9hZnRlcl9kZXRhY2hcXFwiKTtcXG4rXFx0QVNTRVJUX09LKHdyaXRlX2Z0cmFjZV9lbmFibGVkKDEpLCBcXFwicmVlbmFibGVcXFwiKTtcXG4rfVxcbitcXG4rLyogQXR0YWNoIEBwcm9nIHdoaWxlIGZ0cmFjZV9lbmFibGVkPTAgYW5kIGFzc2VydCBpdCBpcyByZWZ1c2VkLiAqL1xcbitzdGF0aWMgdm9pZCBjaGVja19hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0sod3JpdGVfZnRyYWNlX2VuYWJsZWQoMCksIFxcXCJkaXNhYmxlXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHByb2cpO1xcbitcXHRpZiAoIUFTU0VSVF9FUlJfUFRSKGxpbmssIG5hbWUpKVxcbitcXHRcXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcXG4rXFxuK1xcdEFTU0VSVF9PSyh3cml0ZV9mdHJhY2VfZW5hYmxlZCgxKSwgXFxcInJlZW5hYmxlXFxcIik7XFxuK31cXG4rXFxuK3ZvaWQgdGVzdF9mdHJhY2VfcGVybWFuZW50KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGZ0cmFjZV9wZXJtYW5lbnQgKnNrZWw7XFxuK1xcdGJvb2wga3Byb2Jlc19vbl9mdHJhY2U7XFxuK1xcdGludCBvcmlnID0gMTtcXG4rXFxuK1xcdC8qIFNhdmUgYW5kIGFsd2F5cyByZXN0b3JlIGZ0cmFjZV9lbmFibGVkLiAqL1xcbitcXHRpZiAocmVhZF9mdHJhY2VfZW5hYmxlZChcXHUwMDI2b3JpZykpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHNrZWwgPSBmdHJhY2VfcGVybWFuZW50X19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gcmVzdG9yZTtcXG4rXFxuK1xcdGtwcm9iZXNfb25fZnRyYWNlID0gc2tlbC1cXHUwMDNla2NvbmZpZy1cXHUwMDNlQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImZlbnRyeV9ibG9ja3NfZGlzYWJsZVxcXCIpKVxcbitcXHRcXHRjaGVja19ibG9ja3NfZGlzYWJsZShza2VsLVxcdTAwM2Vwcm9ncy50ZXN0X2ZlbnRyeSwgXFxcImF0dGFjaF9mZW50cnlcXFwiKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJmZXhpdF9ibG9ja3NfZGlzYWJsZVxcXCIpKVxcbitcXHRcXHRjaGVja19ibG9ja3NfZGlzYWJsZShza2VsLVxcdTAwM2Vwcm9ncy50ZXN0X2ZleGl0LCBcXFwiYXR0YWNoX2ZleGl0XFxcIik7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwia3Byb2JlX2Jsb2Nrc19kaXNhYmxlXFxcIikpIHtcXG4rXFx0XFx0aWYgKGtwcm9iZXNfb25fZnRyYWNlKVxcbitcXHRcXHRcXHRjaGVja19ibG9ja3NfZGlzYWJsZShza2VsLVxcdTAwM2Vwcm9ncy50ZXN0X2twcm9iZSwgXFxcImF0dGFjaF9rcHJvYmVcXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJrcmV0cHJvYmVfYmxvY2tzX2Rpc2FibGVcXFwiKSkge1xcbitcXHRcXHRpZiAoa3Byb2Jlc19vbl9mdHJhY2UpXFxuK1xcdFxcdFxcdGNoZWNrX2Jsb2Nrc19kaXNhYmxlKHNrZWwtXFx1MDAzZXByb2dzLnRlc3Rfa3JldHByb2JlLCBcXFwiYXR0YWNoX2tyZXRwcm9iZVxcXCIpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImZlbnRyeV9hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZFxcXCIpKVxcbitcXHRcXHRjaGVja19hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZChza2VsLVxcdTAwM2Vwcm9ncy50ZXN0X2ZlbnRyeSwgXFxcImF0dGFjaF9mZW50cnlcXFwiKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJrcHJvYmVfYXR0YWNoX3doaWxlX2Rpc2FibGVkX3JlZnVzZWRcXFwiKSkge1xcbitcXHRcXHRpZiAoa3Byb2Jlc19vbl9mdHJhY2UpXFxuK1xcdFxcdFxcdGNoZWNrX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkKHNrZWwtXFx1MDAzZXByb2dzLnRlc3Rfa3Byb2JlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcImF0dGFjaF9rcHJvYmVcXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdH1cXG4rXFxuK1xcdGZ0cmFjZV9wZXJtYW5lbnRfX2Rlc3Ryb3koc2tlbCk7XFxuK3Jlc3RvcmU6XFxuK1xcdHdyaXRlX2Z0cmFjZV9lbmFibGVkKG9yaWcpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mdHJhY2VfcGVybWFuZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZnRyYWNlX3Blcm1hbmVudC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jYTcwNmQ4ZWRjMjNiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mdHJhY2VfcGVybWFuZW50LmNcXG5AQCAtMCwwICsxLDQzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDcm93ZFN0cmlrZSAqL1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rZXh0ZXJuIGJvb2wgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFIF9fa2NvbmZpZyBfX3dlYWs7XFxuK1xcbisvKiBUaGlzIGZ1bmN0aW9uIGlzIGhlcmUgdG8gaGF2ZSBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0UgdXNlZCBhbmRcXG4rICogYWRkZWQgdG8gb2JqZWN0IEJURiwgc28gdGhlIHVzZXJzcGFjZSBzaWRlIGNhbiByZWFkIGl0IGJhY2sgdmlhXFxuKyAqIHNrZWwtXFx1MDAzZWtjb25maWctXFx1MDAzZUNPTkZJR19LUFJPQkVTX09OX0ZUUkFDRS5cXG4rICovXFxuK2ludCB1bnVzZWQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFID8gMCA6IDE7XFxuK31cXG4rXFxuK1NFQyhcXFwiZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9mZW50cnksIGludCBhKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcImZleGl0L2JwZl9mZW50cnlfdGVzdDJcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9mZXhpdCwgaW50IGEsIF9fdTY0IGIpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwia3Byb2JlL2JwZl9mZW50cnlfdGVzdDNcXFwiKVxcbitpbnQgdGVzdF9rcHJvYmUoc3RydWN0IHB0X3JlZ3MgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJrcmV0cHJvYmUvYnBmX2ZlbnRyeV90ZXN0NFxcXCIpXFxuK2ludCBCUEZfS1JFVFBST0JFKHRlc3Rfa3JldHByb2JlKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ3OjQxLjc2NjY0NTk3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc1MTU3NDM4NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFXCIsXG4gICAgXCJLUFJPQkVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ1wiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hcIixcbiAgICBcInJlZ2lzdGVyX2twcm9iZVwiLFxuICAgIFwidW5yZWdpc3Rlcl9rcHJvYmVcIixcbiAgICBcInJlZ2lzdGVyX2tyZXRwcm9iZVwiLFxuICAgIFwidW5yZWdpc3Rlcl9rcmV0cHJvYmVcIixcbiAgICBcImZ0cmFjZV9lbmFibGVfc3lzY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2V0cyBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCBvbiBkaXJlY3Rfb3BzIGFuZCBrcHJvYmVfZnRyYWNlX29wcy9rcHJvYmVfaXBtb2RpZnlfb3BzLiBUaGlzIHByZXZlbnRzIGRpc2FibGluZyBmdHJhY2UgZ2xvYmFsbHkgdmlhIC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2VuYWJsZWQgd2hpbGUgQlBGIHRyYW1wb2xpbmVzIG9yIGtwcm9iZXMgYXJlIGFjdGl2ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgdHJhbXBvbGluZSBhbmQga3Byb2JlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBwcmV2ZW50cyBmdHJhY2UgZGlzYWJsaW5nIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGF0dGFjaC9kZXRhY2ggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzYyMDAxMjRmZTNkOTQ4ZTRjODIzYzQwMTM4MjkzMmEwNTdiMWFiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDA2OjQ3OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuaW5kZXggMTI5ZDA3ZGIxMTdlYy4uM2Q1MDY5MDkxZGI3NiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuQEAgLTIyNCw2ICsyMjQsOCBAQCB2b2lkIGJwZl9pbWFnZV9rc3ltX2RlbChzdHJ1Y3QgYnBmX2tzeW0gKmtzeW0pXG4gICovXG4gc3RydWN0IGZ0cmFjZV9vcHMgZGlyZWN0X29wcyA9IHtcbiBcdC5vcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMsXG4rXHQvKiBTYW1lIHByb3RlY3Rpb24gbGl2ZXBhdGNoIGdpdmVzIGl0cyBvd24gZnRyYWNlX29wcy4gKi9cbitcdC5mbGFncyA9IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULFxuIH07XG4gXG4gc3RhdGljIGludCBkaXJlY3Rfb3BzX2FsbG9jKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5AQCAtMzAzLDYgKzMwNSw4IEBAIHN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHRyLVx1MDAzZWZvcHMtXHUwMDNlcHJpdmF0ZSA9IHRyO1xuIFx0dHItXHUwMDNlZm9wcy1cdTAwM2VvcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmM7XG4rXHQvKiBTZWUgdGhlIGRpcmVjdF9vcHMgaW5pdGlhbGl6ZXIgYWJvdmUgZm9yIHdoeS4gKi9cbitcdHRyLVx1MDAzZWZvcHMtXHUwMDNlZmxhZ3MgfD0gRlRSQUNFX09QU19GTF9QRVJNQU5FTlQ7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmNcbmluZGV4IGJmYzg5MDgzZGFhOTMuLjVhNTQ1MTFlZWU3OTEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwva3Byb2Jlcy5jXG4rKysgYi9rZXJuZWwva3Byb2Jlcy5jXG5AQCAtMTEyMiwxNCArMTEyMiwxNSBAQCBzdGF0aWMgc3RydWN0IGtwcm9iZSAqYWxsb2NfYWdncl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcClcbiAjZW5kaWYgLyogQ09ORklHX09QVFBST0JFUyAqL1xuIFxuICNpZmRlZiBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0VcbisvKiBTYW1lIHByb3RlY3Rpb24gbGl2ZXBhdGNoIGdpdmVzIGl0cyBvd24gZnRyYWNlX29wcy4gKi9cbiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMga3Byb2JlX2Z0cmFjZV9vcHMgX19yZWFkX21vc3RseSA9IHtcbiBcdC5mdW5jID0ga3Byb2JlX2Z0cmFjZV9oYW5kbGVyLFxuLVx0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MsXG4rXHQuZmxhZ3MgPSBGVFJBQ0VfT1BTX0ZMX1NBVkVfUkVHUyB8IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULFxuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIGtwcm9iZV9pcG1vZGlmeV9vcHMgX19yZWFkX21vc3RseSA9IHtcbiBcdC5mdW5jID0ga3Byb2JlX2Z0cmFjZV9oYW5kbGVyLFxuLVx0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MgfCBGVFJBQ0VfT1BTX0ZMX0lQTU9ESUZZLFxuK1x0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MgfCBGVFJBQ0VfT1BTX0ZMX0lQTU9ESUZZIHwgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGtwcm9iZV9pcG1vZGlmeV9lbmFibGVkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Z0cmFjZV9wZXJtYW5lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Z0cmFjZV9wZXJtYW5lbnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRiZTc4MDA5YTI5MTNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Z0cmFjZV9wZXJtYW5lbnQuY1xuQEAgLTAsMCArMSwxNDQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDcm93ZFN0cmlrZSAqL1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFwiZnRyYWNlX3Blcm1hbmVudC5za2VsLmhcIlxuK1xuKy8qXG4rICogZmVudHJ5L2ZleGl0L2twcm9iZS9rcmV0cHJvYmUgbm93IGNhcnJ5IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULCBzb1xuKyAqIGtlcm5lbC5mdHJhY2VfZW5hYmxlZD0wIG11c3QgYmUgcmVmdXNlZCB3aXRoIEVCVVNZIHdoaWxlIGFueSBvZiB0aGVtXG4rICogaXMgYXR0YWNoZWQsIGFuZCBhbGxvd2VkIGFnYWluIG9uY2UgZGV0YWNoZWQuXG4rICpcbisgKiBrcHJvYmUubXVsdGkva3JldHByb2JlLm11bHRpL2twcm9iZS5zZXNzaW9uIGFyZSBvdXQgb2Ygc2NvcGUuXG4rICoga3Byb2JlL2tyZXRwcm9iZSBzdWJ0ZXN0cyBuZWVkIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSAoZS5nLiBub3Qgb25cbisgKiBhcm02NCkgYW5kIGFyZSBza2lwcGVkIG90aGVyd2lzZS5cbisgKi9cbitcbisjZGVmaW5lIEZUUkFDRV9FTkFCTEVEX1BBVEggXCIvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9lbmFibGVkXCJcbitcbitzdGF0aWMgaW50IHJlYWRfZnRyYWNlX2VuYWJsZWQoaW50ICp2YWwpXG4re1xuK1x0Y2hhciBidWZbMTZdID0ge307XG4rXHRpbnQgZmQsIG47XG4rXG4rXHRmZCA9IG9wZW4oRlRSQUNFX0VOQUJMRURfUEFUSCwgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1x0biA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTtcbitcdGNsb3NlKGZkKTtcbitcdGlmIChuIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIC1FSU87XG4rXHQqdmFsID0gYXRvaShidWYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciAtZXJybm8gb24gd3JpdGUgZmFpbHVyZS4gKi9cbitzdGF0aWMgaW50IHdyaXRlX2Z0cmFjZV9lbmFibGVkKGludCB2YWwpXG4re1xuK1x0Y2hhciBidWZbNF07XG4rXHRpbnQgZmQsIG4sIGxlbiwgZXJyID0gMDtcbitcbitcdGZkID0gb3BlbihGVFJBQ0VfRU5BQkxFRF9QQVRILCBPX1dST05MWSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtZXJybm87XG4rXHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVkXCIsIHZhbCk7XG4rXHRuID0gd3JpdGUoZmQsIGJ1ZiwgbGVuKTtcbitcdGlmIChuIFx1MDAzYyAwKVxuK1x0XHRlcnIgPSAtZXJybm87XG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbisvKlxuKyAqIEF0dGFjaCBAcHJvZywgYXNzZXJ0IGtlcm5lbC5mdHJhY2VfZW5hYmxlZD0wIGlzIHJlZnVzZWQgd2hpbGUgYXR0YWNoZWRcbisgKiBhbmQgc3RheXMgYXQgMSwgdGhlbiBkZXRhY2ggYW5kIGFzc2VydCB0aGUgZGlzYWJsZSBub3cgc3VjY2VlZHMuXG4rICovXG4rc3RhdGljIHZvaWQgY2hlY2tfYmxvY2tzX2Rpc2FibGUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHN0cnVjdCBicGZfbGluayAqbGluaztcbitcdGludCB2YWwsIGVycjtcbitcbitcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHByb2cpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIG5hbWUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSB3cml0ZV9mdHJhY2VfZW5hYmxlZCgwKTtcbitcdEFTU0VSVF9FUShlcnIsIC1FQlVTWSwgXCJkaXNhYmxlX3JlZnVzZWRcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZWFkX2Z0cmFjZV9lbmFibGVkKFx1MDAyNnZhbCksIFwicmVhZF9iYWNrXCIpKVxuK1x0XHRnb3RvIGRldGFjaDtcbitcdEFTU0VSVF9FUSh2YWwsIDEsIFwic3RpbGxfZW5hYmxlZFwiKTtcbitcbitkZXRhY2g6XG4rXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcbitcdEFTU0VSVF9PSyh3cml0ZV9mdHJhY2VfZW5hYmxlZCgwKSwgXCJkaXNhYmxlX2FmdGVyX2RldGFjaFwiKTtcbitcdEFTU0VSVF9PSyh3cml0ZV9mdHJhY2VfZW5hYmxlZCgxKSwgXCJyZWVuYWJsZVwiKTtcbit9XG4rXG4rLyogQXR0YWNoIEBwcm9nIHdoaWxlIGZ0cmFjZV9lbmFibGVkPTAgYW5kIGFzc2VydCBpdCBpcyByZWZ1c2VkLiAqL1xuK3N0YXRpYyB2b2lkIGNoZWNrX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyh3cml0ZV9mdHJhY2VfZW5hYmxlZCgwKSwgXCJkaXNhYmxlXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChwcm9nKTtcbitcdGlmICghQVNTRVJUX0VSUl9QVFIobGluaywgbmFtZSkpXG4rXHRcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuK1xuK1x0QVNTRVJUX09LKHdyaXRlX2Z0cmFjZV9lbmFibGVkKDEpLCBcInJlZW5hYmxlXCIpO1xuK31cbitcbit2b2lkIHRlc3RfZnRyYWNlX3Blcm1hbmVudCh2b2lkKVxuK3tcbitcdHN0cnVjdCBmdHJhY2VfcGVybWFuZW50ICpza2VsO1xuK1x0Ym9vbCBrcHJvYmVzX29uX2Z0cmFjZTtcbitcdGludCBvcmlnID0gMTtcbitcbitcdC8qIFNhdmUgYW5kIGFsd2F5cyByZXN0b3JlIGZ0cmFjZV9lbmFibGVkLiAqL1xuK1x0aWYgKHJlYWRfZnRyYWNlX2VuYWJsZWQoXHUwMDI2b3JpZykpIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRza2VsID0gZnRyYWNlX3Blcm1hbmVudF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRnb3RvIHJlc3RvcmU7XG4rXG4rXHRrcHJvYmVzX29uX2Z0cmFjZSA9IHNrZWwtXHUwMDNla2NvbmZpZy1cdTAwM2VDT05GSUdfS1BST0JFU19PTl9GVFJBQ0U7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImZlbnRyeV9ibG9ja3NfZGlzYWJsZVwiKSlcbitcdFx0Y2hlY2tfYmxvY2tzX2Rpc2FibGUoc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2ZlbnRyeSwgXCJhdHRhY2hfZmVudHJ5XCIpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJmZXhpdF9ibG9ja3NfZGlzYWJsZVwiKSlcbitcdFx0Y2hlY2tfYmxvY2tzX2Rpc2FibGUoc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2ZleGl0LCBcImF0dGFjaF9mZXhpdFwiKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia3Byb2JlX2Jsb2Nrc19kaXNhYmxlXCIpKSB7XG4rXHRcdGlmIChrcHJvYmVzX29uX2Z0cmFjZSlcbitcdFx0XHRjaGVja19ibG9ja3NfZGlzYWJsZShza2VsLVx1MDAzZXByb2dzLnRlc3Rfa3Byb2JlLCBcImF0dGFjaF9rcHJvYmVcIik7XG4rXHRcdGVsc2VcbitcdFx0XHR0ZXN0X19za2lwKCk7XG4rXHR9XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImtyZXRwcm9iZV9ibG9ja3NfZGlzYWJsZVwiKSkge1xuK1x0XHRpZiAoa3Byb2Jlc19vbl9mdHJhY2UpXG4rXHRcdFx0Y2hlY2tfYmxvY2tzX2Rpc2FibGUoc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2tyZXRwcm9iZSwgXCJhdHRhY2hfa3JldHByb2JlXCIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0dGVzdF9fc2tpcCgpO1xuK1x0fVxuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJmZW50cnlfYXR0YWNoX3doaWxlX2Rpc2FibGVkX3JlZnVzZWRcIikpXG4rXHRcdGNoZWNrX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkKHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9mZW50cnksIFwiYXR0YWNoX2ZlbnRyeVwiKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia3Byb2JlX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkXCIpKSB7XG4rXHRcdGlmIChrcHJvYmVzX29uX2Z0cmFjZSlcbitcdFx0XHRjaGVja19hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZChza2VsLVx1MDAzZXByb2dzLnRlc3Rfa3Byb2JlLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFwiYXR0YWNoX2twcm9iZVwiKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHRlc3RfX3NraXAoKTtcbitcdH1cbitcbitcdGZ0cmFjZV9wZXJtYW5lbnRfX2Rlc3Ryb3koc2tlbCk7XG4rcmVzdG9yZTpcbitcdHdyaXRlX2Z0cmFjZV9lbmFibGVkKG9yaWcpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZnRyYWNlX3Blcm1hbmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Z0cmFjZV9wZXJtYW5lbnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmNhNzA2ZDhlZGMyM2Jcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mdHJhY2VfcGVybWFuZW50LmNcbkBAIC0wLDAgKzEsNDMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDcm93ZFN0cmlrZSAqL1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK2V4dGVybiBib29sIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSBfX2tjb25maWcgX193ZWFrO1xuK1xuKy8qIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSB0byBoYXZlIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSB1c2VkIGFuZFxuKyAqIGFkZGVkIHRvIG9iamVjdCBCVEYsIHNvIHRoZSB1c2Vyc3BhY2Ugc2lkZSBjYW4gcmVhZCBpdCBiYWNrIHZpYVxuKyAqIHNrZWwtXHUwMDNla2NvbmZpZy1cdTAwM2VDT05GSUdfS1BST0JFU19PTl9GVFJBQ0UuXG4rICovXG4raW50IHVudXNlZCh2b2lkKVxuK3tcbitcdHJldHVybiBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0UgPyAwIDogMTtcbit9XG4rXG4rU0VDKFwiZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcIilcbitpbnQgQlBGX1BST0codGVzdF9mZW50cnksIGludCBhKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJmZXhpdC9icGZfZmVudHJ5X3Rlc3QyXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfZmV4aXQsIGludCBhLCBfX3U2NCBiKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJrcHJvYmUvYnBmX2ZlbnRyeV90ZXN0M1wiKVxuK2ludCB0ZXN0X2twcm9iZShzdHJ1Y3QgcHRfcmVncyAqY3R4KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJrcmV0cHJvYmUvYnBmX2ZlbnRyeV90ZXN0NFwiKVxuK2ludCBCUEZfS1JFVFBST0JFKHRlc3Rfa3JldHByb2JlKVxuK3tcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ3OjQxLjc2NjY0NzI4N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MzIzODAwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCB0aGV5J3JlIGFkZGluZyBgRlRSQUNFX09QU19GTF9QRVJNQU5FTlRgIHRvIHRoZSBgZGlyZWN0X29wcy5mbGFnc2Agd2l0aGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AsIGFuZCBhbHNvIHRvIGBrcHJvYmVfZnRyYWNlX29wcy5mbGFnc2AgYW5kIGBrcHJvYmVfaXBtb2RpZnlfb3BzLmZsYWdzYCBpbiBga2VybmVsL2twcm9iZXMuY2AuXCIgVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBBZGRpbmcgdGhhdCBmbGFnIG1lYW5zIHRoZXNlIGZ0cmFjZSBvcGVyYXRpb25zLCBpbiB0aGUgY29udGV4dCBvZiBCUEYgYW5kIGtwcm9iZXMgcmVzcGVjdGl2ZWx5LCBhcmUgbm93ICpwZXJtYW5lbnQqLiBUaGV5IGNhbid0IGJlIGRpc2FibGVkIG9uY2UgcmVnaXN0ZXJlZCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBiZWhhdmlvcmFsIG1vZGlmaWNhdGlvbi5cblxuVG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgYXJlIGJlaW5nIGVtcGxveWVkLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIGBrZXJuZWwva3Byb2Jlcy5jYC4gSSByZWNhbGwgdGhhdCBgZGlyZWN0X29wc2AgaXMgZGVmaW5pdGVseSB1c2VkIGluIGBicGZfdHJhbXBvbGluZS5jYCAob3IgYSBzaW1pbGFyIGZpbGUpIHRvIHJlZ2lzdGVyIHRoZSBmdHJhY2Ugb3BlcmF0aW9ucyB3aXRoaW4gdGhlIEJQRiB0cmFtcG9saW5lLiBBbmQgb2J2aW91c2x5LCBga3Byb2JlX2Z0cmFjZV9vcHNgIGFuZCBga3Byb2JlX2lwbW9kaWZ5X29wc2AgYXJlIHV0aWxpemVkIGluIGBrcHJvYmVzLmNgIGl0c2VsZi5cblxuQWxyaWdodCwgbGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGVyZSB0aGVzZSBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgYXJlIHJlZmVyZW5jZWQgYmV5b25kIHRob3NlIGltbWVkaWF0ZSBmaWxlcy4gS25vd2luZyB0aGUgYnJvYWRlciB1c2FnZSBjb250ZXh0IHdpbGwgYmUgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIHRoZSBwYXRjaCdzIG92ZXJhbGwgaW1wYWN0IGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gVGhlIGFkZGl0aW9uIG9mIHRoZSBCUEYgc2VsZnRlc3QgYGZ0cmFjZV9wZXJtYW5lbnQuY2AgY29uZmlybXMgdGhpcyBpcyBhIGNoYW5nZSB3aXRoIHNwZWNpZmljIGNvbnNlcXVlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ3OjQ3LjM5OTAzMDIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODYzNTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpcmVjdF9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9vcHM7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NC0jaWZkZWYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzU6c3RhdGljIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqZGlyZWN0X29wc19pcF9sb29rdXAoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03Ni17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MS0jZWxzZVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjkyOnN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmRpcmVjdF9vcHNfaXBfbG9va3VwKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXApXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTMte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTg9c3RhdGljIGludCBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXAsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDMtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTA0OlxcdHRyID0gZGlyZWN0X29wc19pcF9sb29rdXAob3BzLCBpcCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTA1LVxcdGlmICghdHIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0yMTA9dm9pZCBicGZfaW1hZ2Vfa3N5bV9kZWwoc3RydWN0IGJwZl9rc3ltICprc3ltKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjE5LS8qXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjIwOiAqIFdlIGhhdmUgb25seSBzaW5nbGUgZGlyZWN0X29wcyB3aGljaCBjb250YWlucyBhbGwgdGhlIGRpcmVjdCBjYWxsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjIxLSAqIHNpdGVzIGFuZCBpcyB0aGUgb25seSBnbG9iYWwgZnRyYWNlX29wcyBmb3IgYWxsIHRyYW1wb2xpbmVzLlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjI0LSAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIyNTpzdHJ1Y3QgZnRyYWNlX29wcyBkaXJlY3Rfb3BzID0ge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIyNi1cXHQub3BzX2Z1bmMgPSBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjMwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIzMTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWxsb2Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMzIte1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIzMzpcXHR0ci1cXHUwMDNlZm9wcyA9IFxcdTAwMjZkaXJlY3Rfb3BzO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIzNC1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIzNi1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMzc6c3RhdGljIHZvaWQgZGlyZWN0X29wc19mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpIHsgfVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIzOC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0yMzk9c3RhdGljIHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaF9mcm9tX2lwKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKnB0cilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI1OC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyNTk6c3RhdGljIGludCBkaXJlY3Rfb3BzX2FkZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICphZGRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI2MC17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yNzAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjcxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19kZWwoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkcilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yNzIte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjgyLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjI4MzpzdGF0aWMgaW50IGRpcmVjdF9vcHNfbW9kKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjg0LXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMwMC0gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozMDE6c3RhdGljIGludCBkaXJlY3Rfb3BzX2FsbG9jKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzAyLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMwNy1cXHR0ci1cXHUwMDNlZm9wcy1cXHUwMDNlb3BzX2Z1bmMgPSBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMwODpcXHQvKiBTZWUgdGhlIGRpcmVjdF9vcHMgaW5pdGlhbGl6ZXIgYWJvdmUgZm9yIHdoeS4gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMDktXFx0dHItXFx1MDAzZWZvcHMtXFx1MDAzZWZsYWdzIHw9IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzEyLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMxMzpzdGF0aWMgdm9pZCBkaXJlY3Rfb3BzX2ZyZWUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMTQte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzIwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMyMTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWRkKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKnB0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMjIte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzM1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMzNjpzdGF0aWMgaW50IGRpcmVjdF9vcHNfZGVsKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzM3LXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM0MC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNDE6c3RhdGljIGludCBkaXJlY3Rfb3BzX21vZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzQyLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM1My0jZWxzZVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM1NDpzdGF0aWMgdm9pZCBkaXJlY3Rfb3BzX2ZyZWUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cikgeyB9XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzU1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM1NjpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWxsb2Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNTcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzYwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM2MTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWRkKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzYyLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM2NS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNjY6c3RhdGljIGludCBkaXJlY3Rfb3BzX2RlbChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICphZGRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM2Ny17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNzAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzcxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19tb2Qoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqcHRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4KVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM3Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0zNzc9c3RhdGljIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqYnBmX3RyYW1wb2xpbmVfbG9va3VwKHU2NCBrZXksIHVuc2lnbmVkIGxvbmcgaXApXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zOTMtXFx0XFx0Z290byBvdXQ7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Mzk0OlxcdGlmIChkaXJlY3Rfb3BzX2FsbG9jKHRyKSkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM5NS1cXHRcXHRrZnJlZSh0cik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00MzY9c3RhdGljIGludCB1bnJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ0MS1cXHRpZiAodHItXFx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDQyOlxcdFxcdHJldCA9IGRpcmVjdF9vcHNfZGVsKHRyLCBvbGRfYWRkcik7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDQzLVxcdGVsc2VcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ1ND1zdGF0aWMgaW50IG1vZGlmeV9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDYxLVxcdGlmICh0ci1cXHUwMDNlZnVuYy5mdHJhY2VfbWFuYWdlZCkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQ2MjpcXHRcXHRyZXQgPSBkaXJlY3Rfb3BzX21vZCh0ciwgbmV3X2FkZHIsIGxvY2tfZGlyZWN0X211dGV4KTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NjMtXFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ3Nz1zdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ5Mi1cXHRpZiAodHItXFx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQpIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0OTM6XFx0XFx0cmV0ID0gZGlyZWN0X29wc19hZGQodHIsIG5ld19hZGRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTQtXFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExOTg9dm9pZCBicGZfdHJhbXBvbGluZV9wdXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEyMTktXFx0aGxpc3RfZGVsKFxcdTAwMjZ0ci1cXHUwMDNlaGxpc3RfaXApO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEyMjA6XFx0ZGlyZWN0X29wc19mcmVlKHRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjIxLVxcdGtmcmVlKHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MjM9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4Mi1cXHRpZiAoZnRyYWNlX2hhc2hfY291bnQoZGF0YS1cXHUwMDNlcmVnKSkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODM6XFx0XFx0ZXJyID0gdXBkYXRlX2Z0cmFjZV9kaXJlY3RfYWRkKFxcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVxcdTAwM2VyZWcpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODgtXFx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXFx1MDAzZW1vZGlmeSkpIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjg5OlxcdFxcdGVyciA9IHVwZGF0ZV9mdHJhY2VfZGlyZWN0X21vZChcXHUwMDI2ZGlyZWN0X29wcywgZGF0YS1cXHUwMDNlbW9kaWZ5LCB0cnVlKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkwLVxcdFxcdGlmIChlcnIpIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkxLVxcdFxcdFxcdGlmIChmdHJhY2VfaGFzaF9jb3VudChkYXRhLVxcdTAwM2VyZWcpKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2OTI6XFx0XFx0XFx0XFx0V0FSTl9PTl9PTkNFKHVwZGF0ZV9mdHJhY2VfZGlyZWN0X2RlbChcXHUwMDI2ZGlyZWN0X29wcywgZGF0YS1cXHUwMDNlcmVnKSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5My1cXHRcXHRcXHRnb3RvIHJvbGxiYWNrX3VubGluaztcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MjM9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTczOC1cXHRpZiAoZnRyYWNlX2hhc2hfY291bnQoZGF0YS1cXHUwMDNldW5yZWcpKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3Mzk6XFx0XFx0V0FSTl9PTl9PTkNFKHVwZGF0ZV9mdHJhY2VfZGlyZWN0X2RlbChcXHUwMDI2ZGlyZWN0X29wcywgZGF0YS1cXHUwMDNldW5yZWcpKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQwLVxcdGlmIChmdHJhY2VfaGFzaF9jb3VudChkYXRhLVxcdTAwM2Vtb2RpZnkpKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NDE6XFx0XFx0V0FSTl9PTl9PTkNFKHVwZGF0ZV9mdHJhY2VfZGlyZWN0X21vZChcXHUwMDI2ZGlyZWN0X29wcywgZGF0YS1cXHUwMDNlbW9kaWZ5LCB0cnVlKSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDc6NDcuNDQwODk4MDExWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MjYxNzczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGdHJhY2UgUGVybWFuZW5jZSBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIHRoZSBjb2RlJ3Mgc2V0dGluZyBgRlRSQUNFX09QU19GTF9QRVJNQU5FTlRgIGluIGEgZmV3IGtleSBwbGFjZXMuIEl0J3MgZG9pbmcgdGhpcyBvbiBgZGlyZWN0X29wc2AgYW5kIGB0ci1cdTAwM2Vmb3BzYCB3aXRoaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCwgYW5kIGFsc28gb24gYGtwcm9iZV9mdHJhY2Vfb3BzYCBhbmQgYGtwcm9iZV9pcG1vZGlmeV9vcHNgIGluIGBrZXJuZWwva3Byb2Jlcy5jYC4gVGhlIGNvcmUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRoaXMgcHJldmVudHMgc29tZW9uZSBmcm9tIGdsb2JhbGx5IGRpc2FibGluZyBGdHJhY2UgdGhyb3VnaCBgL3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZGAgaWYgQlBGIHRyYW1wb2xpbmVzIG9yIGtwcm9iZXMgYXJlIGFjdGl2ZS4gVGhpcyBpcyBhIGRlbGliZXJhdGUgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGVyZWZvcmUsIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludC5cblxuVGhlIHNlbGZ0ZXN0IGBmdHJhY2VfcGVybWFuZW50LmNgIGNvbmZpcm1zIHRoaXMgYmVoYXZpb3IgYnkgdXNpbmcgYGJwZl9wcm9ncmFtX19hdHRhY2hgIGZvciBgZmVudHJ5YCwgYGZleGl0YCwgYGtwcm9iZWAsIGFuZCBga3JldHByb2JlYCBhdHRhY2htZW50cy4gVGhhdOKAmXMgaGVscGZ1bDsgaXQgbWVhbnMgd2UgaGF2ZSBhIGtub3duIHRlc3RpbmcgYmFzZWxpbmUuIFNpbmNlIHRoZSBhaW0gaXMgdG8gZmluZCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB0aGlzIFwicGVybWFuZW50XCIgc3RhdGUsIHRoZSBmdW5jdGlvbnMgaGFuZGxpbmcgQlBGIHRyYW1wb2xpbmUgYW5kIGtwcm9iZSBhdHRhY2htZW50L2RldGFjaG1lbnQgYXJlIGdvaW5nIHRvIGJlIG15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcuXG5cbkZvciBCUEYgdHJhbXBvbGluZXMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50cyB0byB0cmlnZ2VyIHRoZSBwZXJtYW5lbmNlIGJlaGF2aW9yLiBPbiB0aGUga3Byb2JlIHNpZGUsIGByZWdpc3Rlcl9rcHJvYmVgIGFuZCBgdW5yZWdpc3Rlcl9rcHJvYmVgIGFyZSBnb2luZyB0byBiZSBrZXkuXG5cbkkgdGhpbmsgSSdsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBrZXJuZWwva3Byb2Jlcy5jYCBhbmQgc3BlY2lmaWNhbGx5IGBrcHJvYmVfZnRyYWNlX29wc2AuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaXMgc2V0IHVwIHdpbGwgZ2l2ZSBhIGdvb2QgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0Nzo1My43MzM1MTgwMzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2NTk2MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3Byb2JlX2Z0cmFjZV9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2twcm9iZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwva3Byb2Jlcy5jPTExMTg9c3RhdGljIHN0cnVjdCBrcHJvYmUgKmFsbG9jX2FnZ3Jfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApXFxuLS1cXG5rZXJuZWwva3Byb2Jlcy5jLTExMjUtLyogU2FtZSBwcm90ZWN0aW9uIGxpdmVwYXRjaCBnaXZlcyBpdHMgb3duIGZ0cmFjZV9vcHMuICovXFxua2VybmVsL2twcm9iZXMuYzoxMTI2OnN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyBrcHJvYmVfZnRyYWNlX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbmtlcm5lbC9rcHJvYmVzLmMtMTEyNy1cXHQuZnVuYyA9IGtwcm9iZV9mdHJhY2VfaGFuZGxlcixcXG4tLVxcbmtlcm5lbC9rcHJvYmVzLmM9MTE2Nz1zdGF0aWMgaW50IGFybV9rcHJvYmVfZnRyYWNlKHN0cnVjdCBrcHJvYmUgKnApXFxuLS1cXG5rZXJuZWwva3Byb2Jlcy5jLTExNzEtXFx0cmV0dXJuIF9fYXJtX2twcm9iZV9mdHJhY2UocCxcXG5rZXJuZWwva3Byb2Jlcy5jOjExNzI6XFx0XFx0aXBtb2RpZnkgPyBcXHUwMDI2a3Byb2JlX2lwbW9kaWZ5X29wcyA6IFxcdTAwMjZrcHJvYmVfZnRyYWNlX29wcyxcXG5rZXJuZWwva3Byb2Jlcy5jLTExNzMtXFx0XFx0aXBtb2RpZnkgPyBcXHUwMDI2a3Byb2JlX2lwbW9kaWZ5X2VuYWJsZWQgOiBcXHUwMDI2a3Byb2JlX2Z0cmFjZV9lbmFibGVkKTtcXG4tLVxcbmtlcm5lbC9rcHJvYmVzLmM9MTIwMT1zdGF0aWMgaW50IGRpc2FybV9rcHJvYmVfZnRyYWNlKHN0cnVjdCBrcHJvYmUgKnApXFxuLS1cXG5rZXJuZWwva3Byb2Jlcy5jLTEyMDUtXFx0cmV0dXJuIF9fZGlzYXJtX2twcm9iZV9mdHJhY2UocCxcXG5rZXJuZWwva3Byb2Jlcy5jOjEyMDY6XFx0XFx0aXBtb2RpZnkgPyBcXHUwMDI2a3Byb2JlX2lwbW9kaWZ5X29wcyA6IFxcdTAwMjZrcHJvYmVfZnRyYWNlX29wcyxcXG5rZXJuZWwva3Byb2Jlcy5jLTEyMDctXFx0XFx0aXBtb2RpZnkgPyBcXHUwMDI2a3Byb2JlX2lwbW9kaWZ5X2VuYWJsZWQgOiBcXHUwMDI2a3Byb2JlX2Z0cmFjZV9lbmFibGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDc6NTMuNzc2MTc5OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDY4NTgwODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqS3Byb2JlL0Z0cmFjZSBJbnRlZ3JhdGlvbiB3aXRoIEJQRiBUcmFtcG9saW5lcyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoYXQgYGFybV9rcHJvYmVfZnRyYWNlYCBhbmQgYGRpc2FybV9rcHJvYmVfZnRyYWNlYCBhcmUgc3BlY2lmaWNhbGx5IHVzZWQgaW4gdGhlIGNvbnRleHQgb2Yga3Byb2JlIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gd2hlbiBkZWFsaW5nIHdpdGggZnRyYWNlLiBUaGF0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaXQncyB0aGUgZ2x1ZSBiZXR3ZWVuIHRoZSBrcHJvYmUgbWVjaGFuaXNtIGFuZCB0aGUgZnRyYWNlIGluZnJhc3RydWN0dXJlLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhlIEJQRiB0cmFtcG9saW5lIGZ1bmN0aW9ucy4gV2UgaGF2ZSBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYC4gVGhlc2UgYXJlIHRoZSBjb3JlIEJQRiBmdW5jdGlvbnMgaW52b2x2ZWQuIFNwZWNpZmljYWxseSB0aGUgbGlua2luZy91bmxpbmtpbmcsIGFuZCBtdWx0aS1hdHRhY2gvZGV0YWNoIHN1Z2dlc3QgdGhleSBhcmUgaGFuZGxpbmcgdGhlIGluamVjdGlvbi9yZW1vdmFsIG9mIEJQRiBwcm9ncmFtcyBpbnRvIHRoZSBleGVjdXRpb24gZmxvdy5cblxuSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24uIExldCBtZSBwdWxsIHVwIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIHRha2UgYSBsb29rIGF0IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbWFnaWMgaGFwcGVucywgSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBwcm9ncmFtcyBhcmUgYmVpbmcgaG9va2VkIGFuZCB1bmhvb2tlZC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgdHJhbXBvbGluZSBhcmNoaXRlY3R1cmUsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcsIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMgaW4gdGhhdCBwcm9jZXNzLiBJIHN1c3BlY3QgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgZG9lcyB0aGUgaW5pdGlhbCBzZXR1cCwgYW5kIHRoZW4gdGhlIG90aGVycyBoYW5kbGUgY2xlYW51cCBhbmQgbXVsdGktcHJvZ3JhbSBzY2VuYXJpb3MuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzQxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ3OjU4LjI0NDc2MzQ5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDY3NDA0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9ODk3PXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MTUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTE2OnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkxNy1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTU2LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk1NzppbnQgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTYzLVxcdHRyYW1wb2xpbmVfbG9jayh0cik7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTY0OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NjUtXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA4Nz1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTI5LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMzA6XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNnNoaW1fbGluay1cXHUwMDNlbGluay5ub2RlLCB0ciwgTlVMTCwgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTMxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjIzPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NzItXFx0XFx0ZGF0YS1cXHUwMDNlZW50cnkgPSBcXHUwMDI2bW5vZGUtXFx1MDAzZWVudHJ5O1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2NzM6XFx0XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc0LVxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2dHJhbXBvbGluZV9tdWx0aV9vcHMsIGRhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0Nzo1OC4yODU0MzkzMThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDI5MjgwMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRhcmdldGluZyBLZXkgRnVuY3Rpb25zIGZvciBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gc3RhcnQgbXkgZGVlcCBkaXZlLCBJJ20gbGVhbmluZyBoZWF2aWx5IHRvd2FyZHMgdGhvc2UgQlBGIHRyYW1wb2xpbmUgZnVuY3Rpb25zOiBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYC4gVGhleSBzZWVtIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgdW5kZXJzdGFuZGluZyBob3cgQlBGIHByb2dyYW1zIGFyZSBsaW5rZWQgYW5kIHVubGlua2VkLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggbXVsdGktYXR0YWNoIHNjZW5hcmlvcy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IHRob3NlIGhvb2tzIGFyZSBpbXBsZW1lbnRlZC5cblxuVGhlbiwgbW92aW5nIG9uIHRvIGtwcm9iZXMsIHRoZSBvYnZpb3VzIHN1c3BlY3RzIGFyZSBgcmVnaXN0ZXJfa3Byb2JlYCwgYHVucmVnaXN0ZXJfa3Byb2JlYCwgYHJlZ2lzdGVyX2tyZXRwcm9iZWAsIGFuZCBgdW5yZWdpc3Rlcl9rcmV0cHJvYmVgLiBUaGF0IHdob2xlIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gbGlmZWN5Y2xlIGZvciBrZXJuZWwgcHJvYmVzIGlzIGNydWNpYWwsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUgd2lsbCBiZSBrZXkuXG5cbkZpbmFsbHksIGxldCdzIG5vdCBmb3JnZXQgdGhhdCBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgIGZ1bmN0aW9uLCBhc3NvY2lhdGVkIHdpdGggdGhhdCBgZnRyYWNlX2VuYWJsZWRgIHN5c2N0bCB3cml0ZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBsb2NhdGlvbiBhbmQgd2hhdCBpdCdzIHJlYWxseSBkb2luZyB1bmRlciB0aGUgaG9vZC4gRnRyYWNlJ3MgY29udHJvbCBvZiB0cmFjaW5nIGlzIGEgcG93ZXJmdWwgbWVjaGFuaXNtLCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgaXQgdGllcyBpbiB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6MDIuNzE0NzIyMTUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzg0MjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdHJhY2VfZW5hYmxlX3N5c2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9mdHJhY2UuYz05MzkyPXN0YXRpYyBpbnRcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6OTM5MzpmdHJhY2VfZW5hYmxlX3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy05Mzk0LVxcdFxcdCAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYz05NDMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGZ0cmFjZV9zeXNjdGxzW10gPSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTQzOC1cXHRcXHQubW9kZSAgICAgICAgICAgPSAwNjQ0LFxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo5NDM5OlxcdFxcdC5wcm9jX2hhbmRsZXIgICA9IGZ0cmFjZV9lbmFibGVfc3lzY3RsLFxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy05NDQwLVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ4OjAyLjc1ODU2OTA3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTE0MDE0MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCdzIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBoaW5nZXMgZGlyZWN0bHkgb24gYGZ0cmFjZV9lbmFibGVfc3lzY3RsYCwgbWFraW5nIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIGZvY3VzZWQgaW52ZXN0aWdhdGlvbi4gVGhlIGZpcnN0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgd2UncmUgbGlrZWx5IGxvb2tpbmcgYXQgc29tZSBrZXkgQlBGIGFuZCB0cmFjaW5nIG9wdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX0tQUk9CRVNgLCBgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFYCwgYENPTkZJR19GVFJBQ0VgLCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCwgYW5kIGNydWNpYWxseSwgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuXG5cbkdpdmVuIHRoYXQgbGFzdCBvbmUsIEkgc2hvdWxkIHJlYWxseSBjaGVjayBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2Agd2lsbCBjb21lIGludG8gcGxheSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMDYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6MDcuMjcyNTg1MDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODQxMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02Mj1zdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTY4LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MC1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MjEwPXZvaWQgYnBmX2ltYWdlX2tzeW1fZGVsKHN0cnVjdCBicGZfa3N5bSAqa3N5bSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIxNi1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMTc6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIxOC0jaWZkZWYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0zNzE9c3RhdGljIGludCBkaXJlY3Rfb3BzX21vZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNzQtfVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM3NTojZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzc2LVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9Njg0PXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MTctXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzE4OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MTktYWdhaW46XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NzAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzcxOiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NzItXFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNDc4PWludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTQ4My1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNDg0OiNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE0ODUtICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzIzPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTctXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc1ODojZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc1OS1cXHQgIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0ODowNy4zMTU0Mjk0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEyNTQyNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBkaXJlY3Rfb3BzYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIGRpcmVjdCBjYWxscyBpbiBmdHJhY2UuIFRoZSBgI2lmZGVmYCBkaXJlY3RpdmVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AsIGNvbmZpcm0gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjb25maWd1cmF0aW9ucyBiZWluZyBhY3RpdmUgb3IgaW5hY3RpdmUsIGFzIHRoZXknbGwgb2J2aW91c2x5IGNvbmRpdGlvbiB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoZXNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFyZSBiZWluZyBhcHBsaWVkIGFuZCB3aGF0IGVmZmVjdCB0aGF0IHdpbGwgaGF2ZSBvbiB0aGUgZnVuY3Rpb25hbGl0eS5cblxuR2l2ZW4gdGhlIGNvbm5lY3Rpb24gdG8gZGlyZWN0IGNhbGxzIGFuZCBmdHJhY2UsIEkgc2hvdWxkIGFsc28gZG91YmxlIGNoZWNrIHRoZSByZWxhdGVkIGtwcm9iZSBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0VgIGlzIGFwcHJvcHJpYXRlbHkgaGFuZGxlZCwgc2luY2Uga3Byb2JlcyBvZnRlbiB3b3JrIGluIHRhbmRlbSB3aXRoIGZ1bmN0aW9uIHRyYWNpbmcuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGxvb2tpbmcgaW4gYGtlcm5lbC9rcHJvYmVzLmNgIGZvciBhbnkgcmVsYXRlZCBsb2dpYyBvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE1OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ4OjEwLjkyNzk3NDU0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzNTk3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9rcHJvYmVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2twcm9iZXMuYz0xMTE4PXN0YXRpYyBzdHJ1Y3Qga3Byb2JlICphbGxvY19hZ2dyX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKVxcbi0tXFxua2VybmVsL2twcm9iZXMuYy0xMTIzLVxcbmtlcm5lbC9rcHJvYmVzLmM6MTEyNDojaWZkZWYgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFXFxua2VybmVsL2twcm9iZXMuYy0xMTI1LS8qIFNhbWUgcHJvdGVjdGlvbiBsaXZlcGF0Y2ggZ2l2ZXMgaXRzIG93biBmdHJhY2Vfb3BzLiAqL1xcbi0tXFxua2VybmVsL2twcm9iZXMuYz0xMjEwPXZvaWQga3Byb2JlX2Z0cmFjZV9raWxsKHZvaWQpXFxuLS1cXG5rZXJuZWwva3Byb2Jlcy5jLTEyMTMtfVxcbmtlcm5lbC9rcHJvYmVzLmM6MTIxNDojZWxzZVxcdC8qICFDT05GSUdfS1BST0JFU19PTl9GVFJBQ0UgKi9cXG5rZXJuZWwva3Byb2Jlcy5jLTEyMTUtc3RhdGljIGlubGluZSBpbnQgYXJtX2twcm9iZV9mdHJhY2Uoc3RydWN0IGtwcm9iZSAqcClcXG4tLVxcbmtlcm5lbC9rcHJvYmVzLmM9MTU5ND1zdGF0aWMgaW50IGNoZWNrX2Z0cmFjZV9sb2NhdGlvbihzdHJ1Y3Qga3Byb2JlICpwKVxcbi0tXFxua2VybmVsL2twcm9iZXMuYy0xNTk4LVxcdGlmIChmdHJhY2VfbG9jYXRpb24oYWRkcikgPT0gYWRkcikge1xcbmtlcm5lbC9rcHJvYmVzLmM6MTU5OTojaWZkZWYgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFXFxua2VybmVsL2twcm9iZXMuYy0xNjAwLVxcdFxcdHAtXFx1MDAzZWZsYWdzIHw9IEtQUk9CRV9GTEFHX0ZUUkFDRTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6MTAuOTcwMzM2ODA0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNDg3MTYzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBDb251bmRydW1zKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyB0cmFjaW5nIHNldHVwLiBJbml0aWFsbHksIEkgdGhvdWdodCBJIG5lZWRlZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLCBhbmQgYEtQUk9CRVNfT05fRlRSQUNFYC4gQnV0IHRoZW4gaXQgaGl0cyBtZTogaG9sZCBvbiwgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYCBpcyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZywgcmlnaHQ/IFdlIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgaXQgaWYgdGhlIGFyY2hpdGVjdHVyZSBhbHJlYWR5IHRha2VzIGNhcmUgb2YgaXQuIEFuZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLi4uIHRoYXQncyBvZnRlbiBhcmNoaXRlY3R1cmUtc2VsZWN0ZWQgdG9vLCBpc24ndCBpdD8gU2FtZSBnb2VzIGZvciBgS1BST0JFU19PTl9GVFJBQ0VgOyBpdCdzIHNlbGVjdGVkIGJ5IGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LlxuXG5BbHJpZ2h0LCBhIGNsZWFuZXIsIG1vcmUgZ2VuZXJhbGl6ZWQgYXBwcm9hY2ggdGhlbi4gU2VlbXMgbGlrZSBJIHNob3VsZCBqdXN0IHNwZWNpZnkgdGhlIGNvcmUsIGFyY2hpdGVjdHVyZS1hZ25vc3RpYyBvcHRpb25zOiBgRlRSQUNFYCwgYERZTkFNSUNfRlRSQUNFYCwgYEtQUk9CRVNgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9KSVRgLiBUaGF0IHNob3VsZCBnaXZlIHVzIHRoZSBmb3VuZGF0aW9uIHdlIG5lZWQuIEJ1dCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgaWYgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBpcyBldmVyIGFjdHVhbGx5IGEgdXNlci1zZWxlY3RhYmxlIGNvbmZpZzsganVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6MTYuMTE5MDU2MzQyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQwODY1OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MzI0PWNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyOC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMjk6Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6MTcuNjU5OTI2OTA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDk0Mzk4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCdzIG15IG93biBpbnRlcm5hbCBkaWFsb2d1ZTpcblxuKipEZXBlbmRlbmN5IEV2YWx1YXRpb24gZm9yIGBkZWZfYm9vbCB5YCoqXG5cbkFscmlnaHQsIHNvIHdlJ3ZlIGdvdCB0aGlzIGBkZWZfYm9vbCB5YC4gVGhlIGNvcmUgY29uY2VwdCBoZXJlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgaXRzIGRlZmluZWQgc3RhdGUgZGVwZW5kcyBvbiB0aGUgc3VjY2Vzc2Z1bCBmdWxmaWxsbWVudCBvZiBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGNsYXNzaWMsIHJpZ2h0PyBJdCdzIG5vdCBtYWdpYywgaXQncyBqdXN0IGhvdyBhbnkgbG9naWNhbCBjb25zdHJ1Y3Rpb24gd29ya3MuIElmIHRoZSBpbnB1dHMgYXJlbid0IHZhbGlkLCB0aGUgb3V0cHV0IGNhbid0IGJlIHRydXN0ZWQuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAsIGxvZ2ljYWxseSwgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHZhbGlkYXRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzLiBXaGF0IGFyZSB0aGV5PyBBcmUgdGhleSBzYXRpc2ZpZWQ/IFdoYXQncyB0aGUgc3RhdGUgb2YgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBvciB3aGF0ZXZlciB0aGV5J3JlIGxpbmtlZCB0bz8gVGhpcyBpc24ndCBqdXN0IGEgY3Vyc29yeSBnbGFuY2U7IEkgbmVlZCB0byBkcmlsbCBkb3duIHRvIGNvbmZpcm0gdGhlIHZhbGlkaXR5IG9mIGVhY2ggZWxlbWVudCB1cG9uIHdoaWNoIGB5YCByZWxpZXMuIE5vIHNob3J0Y3V0cy4gV2UgbmVlZCB0byBiZSByaWdvcm91c2x5IHRob3JvdWdoIHRvIGF2b2lkIGFueSBjYXNjYWRpbmcgZmFpbHVyZXMgZG93biB0aGUgbGluZS4gV2UgY2FuJ3QgaGF2ZSBgeWAgcmV0dXJuaW5nIGEgdmFsdWUgYmFzZWQgb24gYSBmYXVsdHkgcHJlZGljYXRlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLiBXZSBuZWVkIHRvIGJlIG1ldGljdWxvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDA5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6MjIuODY5MzY4NjgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTkyOTk4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz00Nz1jb25maWcgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTQ5LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjUwOmNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL3RyYWNlL0tjb25maWctNTEtXFx0Ym9vbFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MzI0PWNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyOC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMjk6Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVxcdGRlZl9ib29sIHlcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzEtXFx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1MgfHwgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzMyOlxcdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMy1cXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTM0Mz1jb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9KTVBcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTM0NS1cXHRkZXBlbmRzIG9uIERZTkFNSUNfRlRSQUNFXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzQ2OlxcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zNDctXFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfSk1QXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ4OjIyLjkxMTMwMzM1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYyNjI2NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgQW5hbHlzaXMgb2YgS2VybmVsIFRyYWNpbmcgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB0aGUgZW5hYmxlbWVudCBvZiB0aGlzIGZlYXR1cmUgaGluZ2VzIG9uIGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gQW5kIHRoYXQncyBhcmNoLWRlcGVuZGVudCwgd2hpY2ggbWVhbnMgdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlIGlzIGdvaW5nIHRvIGRpY3RhdGUgd2hldGhlciB3ZSBjYW4gZXZlbiB1c2UgdGhpcyBlZmZlY3RpdmVseS5cblxuVG8gYmUgdGhvcm91Z2gsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgYWxzbyBnb3QgYEZUUkFDRWAsIGBEWU5BTUlDX0ZUUkFDRWAsIGBLUFJPQkVTYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBCUEZfSklUYCBhbGwgc2V0LiBUaGV5J3JlIGFsbCByZWxhdGVkLCBhbmQgSSdsbCBuZWVkIGFsbCB0aG9zZSBwaWVjZXMgdG8gYmUgaW4gcGxhY2UgZm9yIGEgcm9idXN0IHNvbHV0aW9uLlxuXG5Pa2F5LCBhbmQgbm93LCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQsIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgc3RhdHVzIG9mIGBLUFJPQkVTX09OX0ZUUkFDRWAuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueSBjb25maWd1cmF0aW9uIGNvbmZsaWN0cywgZXNwZWNpYWxseSBzaW5jZSB0aGlzIHJlbGllcyBvbiBLcHJvYmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA1MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ4OjI2LjU3MzkzMzA0NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NTM4MTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1BST0JFU19PTl9GVFJBQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xNjg9Y29uZmlnIE9QVFBST0JFU1xcbi0tXFxuYXJjaC9LY29uZmlnLTE3Mi1cXG5hcmNoL0tjb25maWc6MTczOmNvbmZpZyBLUFJPQkVTX09OX0ZUUkFDRVxcbmFyY2gvS2NvbmZpZy0xNzQtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0ODoyOC4xMzkzMTg1NDNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNzc5MTg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBmb3IgQ29yZSBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21lIGNvcmUgQlBGIHRyYW1wb2xpbmUgZnVuY3Rpb25hbGl0eSwgYW5kIGl0IGxvb2tzIGxpa2UgYGRlZl9ib29sIHlgIGlzIGFsc28gcmVsZXZhbnQuIFRoZSBrZXkgZm9jdXMgYXJlYXMgZm9yIG15IGFuYWx5c2lzIHJpZ2h0IG5vdyBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgQlBGIHRyYW1wb2xpbmUgZnVuY3Rpb25zOiBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYC4gV2UndmUgYWxzbyBnb3Qgc29tZSBjbGFzc2ljIHRyYWNpbmcgaG9va3MgaW4gdGhlcmU6IGByZWdpc3Rlcl9rcHJvYmVgLCBgdW5yZWdpc3Rlcl9rcHJvYmVgLCBgcmVnaXN0ZXJfa3JldHByb2JlYCwgYHVucmVnaXN0ZXJfa3JldHByb2JlYCwgYW5kIGBmdHJhY2VfZW5hYmxlX3N5c2N0bGAuIEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCBjaGVjayBpZiBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgIGV4aXN0cywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBpcyBhIHZpYWJsZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQyMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0ODozMS43NzcxMTI1N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEyMjYzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTU3PWludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY4LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk2OTpzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk3MC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTkyLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk5MzovKiBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZygpIHNob3VsZCBuZXZlciBmYWlsLiAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk5NDppbnQgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk5NS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMDAtXFx0dHJhbXBvbGluZV9sb2NrKHRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDAxOlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMDItXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTAwNz1zdGF0aWMgdm9pZCBicGZfc2hpbV90cmFtcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxNS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDE2OlxcdFdBUk5fT05fT05DRShicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhcXHUwMDI2c2hpbV9saW5rLVxcdTAwM2VsaW5rLm5vZGUsIHNoaW1fbGluay1cXHUwMDNldHJhbXBvbGluZSwgTlVMTCkpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTctXFx0YnBmX3RyYW1wb2xpbmVfcHV0KHNoaW1fbGluay1cXHUwMDNldHJhbXBvbGluZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzIzPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MzMtXFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MzQ6XFx0XFx0V0FSTl9PTl9PTkNFKF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzM1LVxcdFxcdFxcdFxcdFxcdE5VTEwsIFxcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0ODozMS44MTgzNDA3NDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIzMzE3Mzk0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEtlcm5lbCBTeW1ib2xzIGZvciBQYXRjaCBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBjb25maXJtaW5nIHRoYXQsIHllcywgaXQgZXhpc3RzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgLiBNeSBmaXJzdCB0aG91Z2h0IHdhcyB0byBjaGVjayBpZiBpdCdzIGV4cG9ydGVkIG9yIHN0YXRpYywgYW5kIEkgc2VlIGl0J3Mgc3RhdGljIGluIGBrZXJuZWwvdHJhY2UvZnRyYWNlLmNgLiBXaGlsZSBhIHN0YXRpYyBmdW5jdGlvbiBpc24ndCAqaWRlYWwqIGFzIGEgZm9jdXMsIGl0ICppcyogdGhlIHN5c2N0bCBoYW5kbGVyLCBzbyBpdCdzIHJlbGV2YW50LiBJIGNvbnNpZGVyZWQgaWYgdGhlcmUgd2FzIGEgYmV0dGVyIHN5bWJvbCwgbGlrZSBgZnRyYWNlX3NldF9maWx0ZXJgLCBidXQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIGBmdHJhY2VfZW5hYmxlZGAsIHdoaWNoIGlzIG1hbmFnZWQgYnkgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYC4gU2luY2UgaXQgaXMgc3RhdGljIEkgYmV0dGVyIGNoZWNrIGlmIGBmdHJhY2Vfc3lzY3Rsc2AgaXMgcmVnaXN0ZXJlZCBzb21ld2hlcmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGhvd2V2ZXIsIHRoYXQgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmRvZXMqIHRoZSB3b3JrIGlzIGBmdHJhY2VfZW5hYmxlX3N5c2N0bGAuIFNvIHRoYXQgbmVlZHMgdG8gYmUgaW5jbHVkZWQuXG5cblRoZW4gSSBzaGlmdGVkIGdlYXJzIGEgYml0LiBJIHJlbWVtYmVyZWQgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgYW5kIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AuIFRob3NlIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIHRoZSBhbmFseXNpcy4gQWxzbywgYHJlZ2lzdGVyX2twcm9iZWAgYW5kIGB1bnJlZ2lzdGVyX2twcm9iZWAgYXJlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSB0aGlua2luZzogYEZUUkFDRWAsIGBEWU5BTUlDX0ZUUkFDRWAsIGBLUFJPQkVTYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBCUEZfSklUYC5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBjb25maWdzLiBUaGUgc2VsZnRlc3RzIHVzZSBgZmVudHJ5YCBhbmQgYGZleGl0YCwgd2hpY2ggcmVxdWlyZSBgQlBGX0pJVGAgYW5kIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuIFNvLCB5ZXMsIHRoYXQgY29uZmlybXM6IGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYEZUUkFDRWAsIGBEWU5BTUlDX0ZUUkFDRWAsIGFuZCBgS1BST0JFU2AuXG5cbkknbSBub3cgY29uc2lkZXJpbmcgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLiBUaGV5J3JlIHJlbGV2YW50IHRvIGBrcHJvYmUubXVsdGlgIGFuZCBga3JldHByb2JlLm11bHRpYC4gQnV0LCB3YWl0LCB0aGUgcGF0Y2ggKmV4cGxpY2l0bHkqIHNheXMgXCJrcHJvYmUubXVsdGkva3JldHByb2JlLm11bHRpL2twcm9iZS5zZXNzaW9uIGFyZSBvdXQgb2Ygc2NvcGUuXCIgT2theSwgdGhlIGNvbW1pdCBtZXNzYWdlIGFsc28gc2F5cyB0aGF0IHRoZXkgYXJlIG91dCBvZiBzY29wZS4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBhZmZlY3QgdGhlbS4gV2h5PyBCZWNhdXNlIGBrcHJvYmUubXVsdGlgIHVzZXMgYGZwcm9iZWAsIHdoaWNoIGxpa2VseSBoYXMgaXRzIG93biBgZnRyYWNlX29wc2AuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgZnByb2JlYCB1c2VzIGBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ4OjQwLjA1MTUxNjg1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NDYzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlRSQUNFX09QU19GTF9QRVJNQU5FTlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvZnRyYWNlLmM9MzMwPWludCBfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxcbi0tXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTM1MC0jZW5kaWZcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6MzUxOlxcdGlmICghZnRyYWNlX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgKG9wcy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCkpXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTM1Mi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jPTkzODA9c3RhdGljIGJvb2wgaXNfcGVybWFuZW50X29wc19yZWdpc3RlcmVkKHZvaWQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTM4NC1cXHRkb19mb3JfZWFjaF9mdHJhY2Vfb3Aob3AsIGZ0cmFjZV9vcHNfbGlzdCkge1xcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo5Mzg1OlxcdFxcdGlmIChvcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVClcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTM4Ni1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6NDAuMDk1MTY2OTg4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjkwMzg3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gYEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UYC4gRnJvbSB3aGF0IEkgc2VlLCBpdCdzIGV4Y2x1c2l2ZWx5IGFkZGVkIHRvIGBkaXJlY3Rfb3BzYCwgYW5kIHRoZW4gd2l0aGluIHRoZSBjb250ZXh0IG9mIGtwcm9iZXMsIHRvIGBrcHJvYmVfZnRyYWNlX29wc2AgYW5kIGBrcHJvYmVfaXBtb2RpZnlfb3BzYC4gVGhpcyBtZWFucyBteSBtYWluIHBvaW50cyBvZiBlbnRyeSBmb3Igb2JzZXJ2aW5nIHRoaXMgYmVoYXZpb3Igd291bGQgYmUgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgYW5kIGByZWdpc3Rlcl9rcHJvYmVgLCByaWdodD8gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZmxhZyBpcyBiZWluZyB1c2VkLlxuXG5Ib2xkIG9uLi4uIEkgc2VlbSB0byByZWNhbGwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgbWFraW5nIHVzZSBvZiBgZGlyZWN0X29wc2AuIFRoYXQgd2FycmFudHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIExldCBtZSBqdW1wIGludG8gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCBhbmQgaGF2ZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLiBJIG5lZWQgdG8gZW5zdXJlIEkndmUgYWNjb3VudGVkIGZvciBldmVyeSBwbGFjZSB0aGF0IHRoaXMgZmxhZyBpcyBzZXQgYW5kIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzI2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ4OjQ0LjQyNDIwOTAyNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwMDY3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlyZWN0X29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX29wcztcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc0LSNpZmRlZiBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NTpzdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpkaXJlY3Rfb3BzX2lwX2xvb2t1cChzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2LXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkxLSNlbHNlXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTI6c3RhdGljIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqZGlyZWN0X29wc19pcF9sb29rdXAoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05My17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05OD1zdGF0aWMgaW50IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMy1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDQ6XFx0dHIgPSBkaXJlY3Rfb3BzX2lwX2xvb2t1cChvcHMsIGlwKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDUtXFx0aWYgKCF0cilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTIxMD12b2lkIGJwZl9pbWFnZV9rc3ltX2RlbChzdHJ1Y3QgYnBmX2tzeW0gKmtzeW0pXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTktLypcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMjA6ICogV2UgaGF2ZSBvbmx5IHNpbmdsZSBkaXJlY3Rfb3BzIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgZGlyZWN0IGNhbGxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMjEtICogc2l0ZXMgYW5kIGlzIHRoZSBvbmx5IGdsb2JhbCBmdHJhY2Vfb3BzIGZvciBhbGwgdHJhbXBvbGluZXMuXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMjQtICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjI1OnN0cnVjdCBmdHJhY2Vfb3BzIGRpcmVjdF9vcHMgPSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjI2LVxcdC5vcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMzAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjMxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIzMi17XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjMzOlxcdHRyLVxcdTAwM2Vmb3BzID0gXFx1MDAyNmRpcmVjdF9vcHM7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjM0LVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjM2LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIzNzpzdGF0aWMgdm9pZCBkaXJlY3Rfb3BzX2ZyZWUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cikgeyB9XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjM4LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTIzOT1zdGF0aWMgc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoX2Zyb21faXAoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqcHRyKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjU4LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjI1OTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWRkKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjYwLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI3MC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyNzE6c3RhdGljIGludCBkaXJlY3Rfb3BzX2RlbChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICphZGRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI3Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yODItXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjgzOnN0YXRpYyBpbnQgZGlyZWN0X29wc19tb2Qoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yODQte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzAwLSAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMwMTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWxsb2Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMDIte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzA3LVxcdHRyLVxcdTAwM2Vmb3BzLVxcdTAwM2VvcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmM7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzA4OlxcdC8qIFNlZSB0aGUgZGlyZWN0X29wcyBpbml0aWFsaXplciBhYm92ZSBmb3Igd2h5LiAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMwOS1cXHR0ci1cXHUwMDNlZm9wcy1cXHUwMDNlZmxhZ3MgfD0gRlRSQUNFX09QU19GTF9QRVJNQU5FTlQ7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMTItXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzEzOnN0YXRpYyB2b2lkIGRpcmVjdF9vcHNfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMxNC17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMjAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzIxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19hZGQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMyMi17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMzUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzM2OnN0YXRpYyBpbnQgZGlyZWN0X29wc19kZWwoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkcilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMzcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzQwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM0MTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfbW9kKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKnB0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNDIte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzUzLSNlbHNlXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzU0OnN0YXRpYyB2b2lkIGRpcmVjdF9vcHNfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKSB7IH1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNTUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzU2OnN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM1Ny17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNjAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzYxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19hZGQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkcilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNjIte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzY1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM2NjpzdGF0aWMgaW50IGRpcmVjdF9vcHNfZGVsKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzY3LXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM3MC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNzE6c3RhdGljIGludCBkaXJlY3Rfb3BzX21vZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzcyLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTM3Nz1zdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpicGZfdHJhbXBvbGluZV9sb29rdXAodTY0IGtleSwgdW5zaWduZWQgbG9uZyBpcClcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM5My1cXHRcXHRnb3RvIG91dDtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozOTQ6XFx0aWYgKGRpcmVjdF9vcHNfYWxsb2ModHIpKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzk1LVxcdFxcdGtmcmVlKHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQzNj1zdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDQxLVxcdGlmICh0ci1cXHUwMDNlZnVuYy5mdHJhY2VfbWFuYWdlZClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0NDI6XFx0XFx0cmV0ID0gZGlyZWN0X29wc19kZWwodHIsIG9sZF9hZGRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NDMtXFx0ZWxzZVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDU0PXN0YXRpYyBpbnQgbW9kaWZ5X2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NjEtXFx0aWYgKHRyLVxcdTAwM2VmdW5jLmZ0cmFjZV9tYW5hZ2VkKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDYyOlxcdFxcdHJldCA9IGRpcmVjdF9vcHNfbW9kKHRyLCBuZXdfYWRkciwgbG9ja19kaXJlY3RfbXV0ZXgpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ2My1cXHR9IGVsc2Uge1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDc3PXN0YXRpYyBpbnQgcmVnaXN0ZXJfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDkyLVxcdGlmICh0ci1cXHUwMDNlZnVuYy5mdHJhY2VfbWFuYWdlZCkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQ5MzpcXHRcXHRyZXQgPSBkaXJlY3Rfb3BzX2FkZCh0ciwgbmV3X2FkZHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ5NC1cXHR9IGVsc2Uge1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTE5OD12b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTIxOS1cXHRobGlzdF9kZWwoXFx1MDAyNnRyLVxcdTAwM2VobGlzdF9pcCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTIyMDpcXHRkaXJlY3Rfb3BzX2ZyZWUodHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEyMjEtXFx0a2ZyZWUodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYyMz1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjgyLVxcdGlmIChmdHJhY2VfaGFzaF9jb3VudChkYXRhLVxcdTAwM2VyZWcpKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4MzpcXHRcXHRlcnIgPSB1cGRhdGVfZnRyYWNlX2RpcmVjdF9hZGQoXFx1MDAyNmRpcmVjdF9vcHMsIGRhdGEtXFx1MDAzZXJlZyk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4OC1cXHRpZiAoZnRyYWNlX2hhc2hfY291bnQoZGF0YS1cXHUwMDNlbW9kaWZ5KSkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODk6XFx0XFx0ZXJyID0gdXBkYXRlX2Z0cmFjZV9kaXJlY3RfbW9kKFxcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVxcdTAwM2Vtb2RpZnksIHRydWUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTAtXFx0XFx0aWYgKGVycikge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTEtXFx0XFx0XFx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXFx1MDAzZXJlZykpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY5MjpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0UodXBkYXRlX2Z0cmFjZV9kaXJlY3RfZGVsKFxcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVxcdTAwM2VyZWcpKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkzLVxcdFxcdFxcdGdvdG8gcm9sbGJhY2tfdW5saW5rO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTcyMz1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzM4LVxcdGlmIChmdHJhY2VfaGFzaF9jb3VudChkYXRhLVxcdTAwM2V1bnJlZykpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTczOTpcXHRcXHRXQVJOX09OX09OQ0UodXBkYXRlX2Z0cmFjZV9kaXJlY3RfZGVsKFxcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVxcdTAwM2V1bnJlZykpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDAtXFx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXFx1MDAzZW1vZGlmeSkpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc0MTpcXHRcXHRXQVJOX09OX09OQ0UodXBkYXRlX2Z0cmFjZV9kaXJlY3RfbW9kKFxcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVxcdTAwM2Vtb2RpZnksIHRydWUpKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0ODo0NC40NjUyMTk1NTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzODMwNTYzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhc29uaW5nIGZvciBGdXp6aW5nIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSdzIG15IHRyYWluIG9mIHRob3VnaHQuICBJbml0aWFsbHksIHRoZSBjb2RlIHV0aWxpemVzIGBkaXJlY3Rfb3BzYCB3aXRoaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIHdoaWNoIG1ha2VzIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBpbnRlcmVzdGluZyB0YXJnZXRzIGZvciBmdXp6aW5nLCBhbG9uZyB3aXRoIHRoZSBzdGFuZGFyZCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBhbmQgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYC4gV2UgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBrcHJvYmUgZnVuY3Rpb25zLiBUaGlzIGFsc28gbWFrZXMgdGhlIGtwcm9iZS1yZWxhdGVkIHN5bWJvbHMgb2YgYHJlZ2lzdGVyX2twcm9iZWAsIGB1bnJlZ2lzdGVyX2twcm9iZWAsIGByZWdpc3Rlcl9rcmV0cHJvYmVgLCBhbmQgYHVucmVnaXN0ZXJfa3JldHByb2JlYCBpbXBvcnRhbnQuIExhc3RseSwgd2UgbmVlZCB0byBjb25zaWRlciBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgb3RoZXIgZnVuY3Rpb25zLlxuXG5Ob3csIGNvbmNlcm5pbmcgY29uZmlndXJhdGlvbnMsIHdlIGRlZmluaXRlbHkgbmVlZCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBGVFJBQ0VgLCBgRFlOQU1JQ19GVFJBQ0VgLCBhbmQgYEtQUk9CRVNgIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS4gIFRoZSBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgIGlzIGEgYml0IG9mIGEgd3JpbmtsZSBzaW5jZSBpdCdzIHN0YXRpYywgYnV0IFN5emthbGxlciAqY2FuKiBmdXp6IGl0IHRocm91Z2ggYC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2VuYWJsZWRgLCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGBmdHJhY2VfZW5hYmxlX3N5c2N0bGAgdXNlcyB0aGUgc3lzY3RsIGhhbmRsZXIgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYC5cblxuSSBkaWQgYSBiaXQgb2YgY3Jvc3MtY2hlY2tpbmcsIGFuZCB0aGUgc2VsZnRlc3RzIHVzZSBgZmVudHJ5YCBhbmQgYGZleGl0YCwgd2hpY2ggZGVwZW5kIG9uIGBCUEZfSklUYCBhbmQgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gIEhvd2V2ZXIsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseSBpZiBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgbWV0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgaXQgZGlyZWN0bHkuIFRoZSBzYW1lIGFwcGxpZXMgZm9yIGBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0VgLCBhcyBpdCdzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aXRoIGBIQVZFX0tQUk9CRVNfT05fRlRSQUNFYC5cblxuRmluYWxseSwgdGhlIGNvcmUgcmVhc29uIHRvIGZ1enogdGhpcyBwYXRjaCBpcyBiZWNhdXNlIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgZnVuZGFtZW50YWwga2VybmVsIGxvZ2ljLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBzZXRzIGBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVGAgb24gYGRpcmVjdF9vcHNgIGFuZCBga3Byb2JlX2Z0cmFjZV9vcHNgIC8gYGtwcm9iZV9pcG1vZGlmeV9vcHNgLiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIHByZXZlbnRpbmcgZ2xvYmFsIGZ0cmFjZSBkaXNhYmxpbmcgdmlhIGAvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9lbmFibGVkYCB3aGVuIEJQRiB0cmFtcG9saW5lcyBvciBrcHJvYmVzIGFyZSBhY3RpdmUuIFRoaXMga2luZCBvZiBjaGFuZ2UgaXMgZXhhY3RseSB0aGUgc29ydCB0aGF0IHdhcnJhbnRzIGRlZXAgZnV6emluZy4gV2Ugd2FudCB0byBlbnN1cmUgaXQgd29ya3MgYXMgaW50ZW5kZWQsIHByZXZlbnRzIHVuZXhwZWN0ZWQgc2lkZS1lZmZlY3RzLCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJhY2VzLlxuXG5JbiBzaG9ydCwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6XG5cbiogICBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYFxuKiAgIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2BcbiogICBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYFxuKiAgIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgXG4qICAgYHJlZ2lzdGVyX2twcm9iZWBcbiogICBgdW5yZWdpc3Rlcl9rcHJvYmVgXG4qICAgYHJlZ2lzdGVyX2tyZXRwcm9iZWBcbiogICBgdW5yZWdpc3Rlcl9rcmV0cHJvYmVgXG4qICAgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYFxuXG53aXRoIHRoZXNlIGVuYWJsZWQgY29uZmlnczpcblxuKiAgIGBCUEZfU1lTQ0FMTGBcbiogICBgQlBGX0pJVGBcbiogICBgRlRSQUNFYFxuKiAgIGBEWU5BTUlDX0ZUUkFDRWBcbiogICBgS1BST0JFU2BcblxuQW5kIHRoZW4gSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTQwLCJPdXRwdXRUb2tlbnMiOjI2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0ODo1Ni44NDgyNzg0NjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTgwMzIxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZUUkFDRVwiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VcIixcbiAgICBcIktQUk9CRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgICBcImJwZl90cmFtcG9saW5lX3VubGlua19wcm9nXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hcIixcbiAgICBcImJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaFwiLFxuICAgIFwicmVnaXN0ZXJfa3Byb2JlXCIsXG4gICAgXCJ1bnJlZ2lzdGVyX2twcm9iZVwiLFxuICAgIFwicmVnaXN0ZXJfa3JldHByb2JlXCIsXG4gICAgXCJ1bnJlZ2lzdGVyX2tyZXRwcm9iZVwiLFxuICAgIFwiZnRyYWNlX2VuYWJsZV9zeXNjdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXRzIEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UIG9uIGRpcmVjdF9vcHMgYW5kIGtwcm9iZV9mdHJhY2Vfb3BzL2twcm9iZV9pcG1vZGlmeV9vcHMuIFRoaXMgcHJldmVudHMgZGlzYWJsaW5nIGZ0cmFjZSBnbG9iYWxseSB2aWEgL3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZCB3aGlsZSBCUEYgdHJhbXBvbGluZXMgb3Iga3Byb2JlcyBhcmUgYWN0aXZlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgKEJQRiB0cmFtcG9saW5lIGFuZCBrcHJvYmVzKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IHByZXZlbnRzIGZ0cmFjZSBkaXNhYmxpbmcgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYXR0YWNoL2RldGFjaCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFXCIsXG4gICAgXCJLUFJPQkVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ1wiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hcIixcbiAgICBcInJlZ2lzdGVyX2twcm9iZVwiLFxuICAgIFwidW5yZWdpc3Rlcl9rcHJvYmVcIixcbiAgICBcInJlZ2lzdGVyX2tyZXRwcm9iZVwiLFxuICAgIFwidW5yZWdpc3Rlcl9rcmV0cHJvYmVcIixcbiAgICBcImZ0cmFjZV9lbmFibGVfc3lzY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2V0cyBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCBvbiBkaXJlY3Rfb3BzIGFuZCBrcHJvYmVfZnRyYWNlX29wcy9rcHJvYmVfaXBtb2RpZnlfb3BzLiBUaGlzIHByZXZlbnRzIGRpc2FibGluZyBmdHJhY2UgZ2xvYmFsbHkgdmlhIC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2VuYWJsZWQgd2hpbGUgQlBGIHRyYW1wb2xpbmVzIG9yIGtwcm9iZXMgYXJlIGFjdGl2ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgdHJhbXBvbGluZSBhbmQga3Byb2JlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBwcmV2ZW50cyBmdHJhY2UgZGlzYWJsaW5nIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGF0dGFjaC9kZXRhY2ggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowf5q2s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 06:31:22 +0000 UTC FinishedAt: 2026-07-30 06:48:58 +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": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "FTRACE", "DYNAMIC_FTRACE", "KPROBES" ], "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": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "FTRACE", "DYNAMIC_FTRACE", "KPROBES" ], "series_id": "8d9252bb-45b4-475f-9178-3d2bb2bece52" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_trampoline_link_prog", "bpf_trampoline_unlink_prog", "bpf_trampoline_multi_attach", "bpf_trampoline_multi_detach", "register_kprobe", "unregister_kprobe", "register_kretprobe", "unregister_kretprobe", "ftrace_enable_sysctl" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDssCiAgICAmIzM0O0tQUk9CRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfdHJhbXBvbGluZV9saW5rX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2RldGFjaCYjMzQ7LAogICAgJiMzNDtyZWdpc3Rlcl9rcHJvYmUmIzM0OywKICAgICYjMzQ7dW5yZWdpc3Rlcl9rcHJvYmUmIzM0OywKICAgICYjMzQ7cmVnaXN0ZXJfa3JldHByb2JlJiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfa3JldHByb2JlJiMzNDssCiAgICAmIzM0O2Z0cmFjZV9lbmFibGVfc3lzY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNldHMgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQgb24gZGlyZWN0X29wcyBhbmQga3Byb2JlX2Z0cmFjZV9vcHMva3Byb2JlX2lwbW9kaWZ5X29wcy4gVGhpcyBwcmV2ZW50cyBkaXNhYmxpbmcgZnRyYWNlIGdsb2JhbGx5IHZpYSAvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9lbmFibGVkIHdoaWxlIEJQRiB0cmFtcG9saW5lcyBvciBrcHJvYmVzIGFyZSBhY3RpdmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHRyYW1wb2xpbmUgYW5kIGtwcm9iZXMpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgcHJldmVudHMgZnRyYWNlIGRpc2FibGluZyBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYXR0YWNoL2RldGFjaCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzYyMDAxMjRmZTNkOTQ4ZTRjODIzYzQwMTM4MjkzMmEwNTdiMWFiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDA2OjQ3OjQwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbmluZGV4IDEyOWQwN2RiMTE3ZWMuLjNkNTA2OTA5MWRiNzYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmNcbkBAIC0yMjQsNiAmIzQzOzIyNCw4IEBAIHZvaWQgYnBmX2ltYWdlX2tzeW1fZGVsKHN0cnVjdCBicGZfa3N5bSAqa3N5bSlcbiAgKi9cbiBzdHJ1Y3QgZnRyYWNlX29wcyBkaXJlY3Rfb3BzID0ge1xuIFx0Lm9wc19mdW5jID0gYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyxcbiYjNDM7XHQvKiBTYW1lIHByb3RlY3Rpb24gbGl2ZXBhdGNoIGdpdmVzIGl0cyBvd24gZnRyYWNlX29wcy4gKi9cbiYjNDM7XHQuZmxhZ3MgPSBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuQEAgLTMwMyw2ICYjNDM7MzA1LDggQEAgc3RhdGljIGludCBkaXJlY3Rfb3BzX2FsbG9jKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0dHItXHUwMDNlZm9wcy1cdTAwM2Vwcml2YXRlID0gdHI7XG4gXHR0ci1cdTAwM2Vmb3BzLVx1MDAzZW9wc19mdW5jID0gYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYztcbiYjNDM7XHQvKiBTZWUgdGhlIGRpcmVjdF9vcHMgaW5pdGlhbGl6ZXIgYWJvdmUgZm9yIHdoeS4gKi9cbiYjNDM7XHR0ci1cdTAwM2Vmb3BzLVx1MDAzZWZsYWdzIHw9IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9rcHJvYmVzLmMgYi9rZXJuZWwva3Byb2Jlcy5jXG5pbmRleCBiZmM4OTA4M2RhYTkzLi41YTU0NTExZWVlNzkxIDEwMDY0NFxuLS0tIGEva2VybmVsL2twcm9iZXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2twcm9iZXMuY1xuQEAgLTExMjIsMTQgJiM0MzsxMTIyLDE1IEBAIHN0YXRpYyBzdHJ1Y3Qga3Byb2JlICphbGxvY19hZ2dyX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKVxuICNlbmRpZiAvKiBDT05GSUdfT1BUUFJPQkVTICovXG4gXG4gI2lmZGVmIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRVxuJiM0MzsvKiBTYW1lIHByb3RlY3Rpb24gbGl2ZXBhdGNoIGdpdmVzIGl0cyBvd24gZnRyYWNlX29wcy4gKi9cbiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMga3Byb2JlX2Z0cmFjZV9vcHMgX19yZWFkX21vc3RseSA9IHtcbiBcdC5mdW5jID0ga3Byb2JlX2Z0cmFjZV9oYW5kbGVyLFxuLVx0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MsXG4mIzQzO1x0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MgfCBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyBrcHJvYmVfaXBtb2RpZnlfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4gXHQuZnVuYyA9IGtwcm9iZV9mdHJhY2VfaGFuZGxlcixcbi1cdC5mbGFncyA9IEZUUkFDRV9PUFNfRkxfU0FWRV9SRUdTIHwgRlRSQUNFX09QU19GTF9JUE1PRElGWSxcbiYjNDM7XHQuZmxhZ3MgPSBGVFJBQ0VfT1BTX0ZMX1NBVkVfUkVHUyB8IEZUUkFDRV9PUFNfRkxfSVBNT0RJRlkgfCBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCxcbiB9O1xuIFxuIHN0YXRpYyBpbnQga3Byb2JlX2lwbW9kaWZ5X2VuYWJsZWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnRyYWNlX3Blcm1hbmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnRyYWNlX3Blcm1hbmVudC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGJlNzgwMDlhMjkxM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnRyYWNlX3Blcm1hbmVudC5jXG5AQCAtMCwwICYjNDM7MSwxNDQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IENyb3dkU3RyaWtlICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtmdHJhY2VfcGVybWFuZW50LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogZmVudHJ5L2ZleGl0L2twcm9iZS9rcmV0cHJvYmUgbm93IGNhcnJ5IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULCBzb1xuJiM0MzsgKiBrZXJuZWwuZnRyYWNlX2VuYWJsZWQ9MCBtdXN0IGJlIHJlZnVzZWQgd2l0aCBFQlVTWSB3aGlsZSBhbnkgb2YgdGhlbVxuJiM0MzsgKiBpcyBhdHRhY2hlZCwgYW5kIGFsbG93ZWQgYWdhaW4gb25jZSBkZXRhY2hlZC5cbiYjNDM7ICpcbiYjNDM7ICoga3Byb2JlLm11bHRpL2tyZXRwcm9iZS5tdWx0aS9rcHJvYmUuc2Vzc2lvbiBhcmUgb3V0IG9mIHNjb3BlLlxuJiM0MzsgKiBrcHJvYmUva3JldHByb2JlIHN1YnRlc3RzIG5lZWQgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFIChlLmcuIG5vdCBvblxuJiM0MzsgKiBhcm02NCkgYW5kIGFyZSBza2lwcGVkIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZUUkFDRV9FTkFCTEVEX1BBVEggXCYjMzQ7L3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCByZWFkX2Z0cmFjZV9lbmFibGVkKGludCAqdmFsKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbMTZdID0ge307XG4mIzQzO1x0aW50IGZkLCBuO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oRlRSQUNFX0VOQUJMRURfUEFUSCwgT19SRE9OTFkpO1xuJiM0MztcdGlmIChmZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1x0biA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKG4gXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1x0KnZhbCA9IGF0b2koYnVmKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIC1lcnJubyBvbiB3cml0ZSBmYWlsdXJlLiAqL1xuJiM0MztzdGF0aWMgaW50IHdyaXRlX2Z0cmFjZV9lbmFibGVkKGludCB2YWwpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1Zls0XTtcbiYjNDM7XHRpbnQgZmQsIG4sIGxlbiwgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuKEZUUkFDRV9FTkFCTEVEX1BBVEgsIE9fV1JPTkxZKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcdGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0OyVkXCYjMzQ7LCB2YWwpO1xuJiM0MztcdG4gPSB3cml0ZShmZCwgYnVmLCBsZW4pO1xuJiM0MztcdGlmIChuIFx1MDAzYyAwKVxuJiM0MztcdFx0ZXJyID0gLWVycm5vO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBdHRhY2ggQHByb2csIGFzc2VydCBrZXJuZWwuZnRyYWNlX2VuYWJsZWQ9MCBpcyByZWZ1c2VkIHdoaWxlIGF0dGFjaGVkXG4mIzQzOyAqIGFuZCBzdGF5cyBhdCAxLCB0aGVuIGRldGFjaCBhbmQgYXNzZXJ0IHRoZSBkaXNhYmxlIG5vdyBzdWNjZWVkcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGNoZWNrX2Jsb2Nrc19kaXNhYmxlKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluaztcbiYjNDM7XHRpbnQgdmFsLCBlcnI7XG4mIzQzO1xuJiM0MztcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHByb2cpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBuYW1lKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gd3JpdGVfZnRyYWNlX2VuYWJsZWQoMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGVyciwgLUVCVVNZLCBcJiMzNDtkaXNhYmxlX3JlZnVzZWRcJiMzNDspO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJlYWRfZnRyYWNlX2VuYWJsZWQoXHUwMDI2dmFsKSwgXCYjMzQ7cmVhZF9iYWNrXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZGV0YWNoO1xuJiM0MztcdEFTU0VSVF9FUSh2YWwsIDEsIFwmIzM0O3N0aWxsX2VuYWJsZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7ZGV0YWNoOlxuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfT0sod3JpdGVfZnRyYWNlX2VuYWJsZWQoMCksIFwmIzM0O2Rpc2FibGVfYWZ0ZXJfZGV0YWNoXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfT0sod3JpdGVfZnRyYWNlX2VuYWJsZWQoMSksIFwmIzM0O3JlZW5hYmxlXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQXR0YWNoIEBwcm9nIHdoaWxlIGZ0cmFjZV9lbmFibGVkPTAgYW5kIGFzc2VydCBpdCBpcyByZWZ1c2VkLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBjaGVja19hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHdyaXRlX2Z0cmFjZV9lbmFibGVkKDApLCBcJiMzNDtkaXNhYmxlXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2gocHJvZyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVJSX1BUUihsaW5rLCBuYW1lKSlcbiYjNDM7XHRcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfT0sod3JpdGVfZnRyYWNlX2VuYWJsZWQoMSksIFwmIzM0O3JlZW5hYmxlXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2Z0cmFjZV9wZXJtYW5lbnQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmdHJhY2VfcGVybWFuZW50ICpza2VsO1xuJiM0MztcdGJvb2wga3Byb2Jlc19vbl9mdHJhY2U7XG4mIzQzO1x0aW50IG9yaWcgPSAxO1xuJiM0MztcbiYjNDM7XHQvKiBTYXZlIGFuZCBhbHdheXMgcmVzdG9yZSBmdHJhY2VfZW5hYmxlZC4gKi9cbiYjNDM7XHRpZiAocmVhZF9mdHJhY2VfZW5hYmxlZChcdTAwMjZvcmlnKSkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGZ0cmFjZV9wZXJtYW5lbnRfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0a3Byb2Jlc19vbl9mdHJhY2UgPSBza2VsLVx1MDAzZWtjb25maWctXHUwMDNlQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtmZW50cnlfYmxvY2tzX2Rpc2FibGVcJiMzNDspKVxuJiM0MztcdFx0Y2hlY2tfYmxvY2tzX2Rpc2FibGUoc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2ZlbnRyeSwgXCYjMzQ7YXR0YWNoX2ZlbnRyeVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ZleGl0X2Jsb2Nrc19kaXNhYmxlXCYjMzQ7KSlcbiYjNDM7XHRcdGNoZWNrX2Jsb2Nrc19kaXNhYmxlKHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9mZXhpdCwgXCYjMzQ7YXR0YWNoX2ZleGl0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7a3Byb2JlX2Jsb2Nrc19kaXNhYmxlXCYjMzQ7KSkge1xuJiM0MztcdFx0aWYgKGtwcm9iZXNfb25fZnRyYWNlKVxuJiM0MztcdFx0XHRjaGVja19ibG9ja3NfZGlzYWJsZShza2VsLVx1MDAzZXByb2dzLnRlc3Rfa3Byb2JlLCBcJiMzNDthdHRhY2hfa3Byb2JlXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7a3JldHByb2JlX2Jsb2Nrc19kaXNhYmxlXCYjMzQ7KSkge1xuJiM0MztcdFx0aWYgKGtwcm9iZXNfb25fZnRyYWNlKVxuJiM0MztcdFx0XHRjaGVja19ibG9ja3NfZGlzYWJsZShza2VsLVx1MDAzZXByb2dzLnRlc3Rfa3JldHByb2JlLCBcJiMzNDthdHRhY2hfa3JldHByb2JlXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZmVudHJ5X2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkXCYjMzQ7KSlcbiYjNDM7XHRcdGNoZWNrX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkKHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9mZW50cnksIFwmIzM0O2F0dGFjaF9mZW50cnlcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtrcHJvYmVfYXR0YWNoX3doaWxlX2Rpc2FibGVkX3JlZnVzZWRcJiMzNDspKSB7XG4mIzQzO1x0XHRpZiAoa3Byb2Jlc19vbl9mdHJhY2UpXG4mIzQzO1x0XHRcdGNoZWNrX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkKHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9rcHJvYmUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFwmIzM0O2F0dGFjaF9rcHJvYmVcJiMzNDspO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmdHJhY2VfcGVybWFuZW50X19kZXN0cm95KHNrZWwpO1xuJiM0MztyZXN0b3JlOlxuJiM0MztcdHdyaXRlX2Z0cmFjZV9lbmFibGVkKG9yaWcpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Z0cmFjZV9wZXJtYW5lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mdHJhY2VfcGVybWFuZW50LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jYTcwNmQ4ZWRjMjNiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZnRyYWNlX3Blcm1hbmVudC5jXG5AQCAtMCwwICYjNDM7MSw0MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ3Jvd2RTdHJpa2UgKi9cbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjNDM7XG4mIzQzO2V4dGVybiBib29sIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSBfX2tjb25maWcgX193ZWFrO1xuJiM0MztcbiYjNDM7LyogVGhpcyBmdW5jdGlvbiBpcyBoZXJlIHRvIGhhdmUgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFIHVzZWQgYW5kXG4mIzQzOyAqIGFkZGVkIHRvIG9iamVjdCBCVEYsIHNvIHRoZSB1c2Vyc3BhY2Ugc2lkZSBjYW4gcmVhZCBpdCBiYWNrIHZpYVxuJiM0MzsgKiBza2VsLVx1MDAzZWtjb25maWctXHUwMDNlQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFLlxuJiM0MzsgKi9cbiYjNDM7aW50IHVudXNlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSA/IDAgOiAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2ZlbnRyeSwgaW50IGEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2ZleGl0L2JwZl9mZW50cnlfdGVzdDJcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2ZleGl0LCBpbnQgYSwgX191NjQgYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7a3Byb2JlL2JwZl9mZW50cnlfdGVzdDNcJiMzNDspXG4mIzQzO2ludCB0ZXN0X2twcm9iZShzdHJ1Y3QgcHRfcmVncyAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtrcmV0cHJvYmUvYnBmX2ZlbnRyeV90ZXN0NFwmIzM0OylcbiYjNDM7aW50IEJQRl9LUkVUUFJPQkUodGVzdF9rcmV0cHJvYmUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gmIzM0OywKICAgICYjMzQ7cmVnaXN0ZXJfa3Byb2JlJiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfa3Byb2JlJiMzNDssCiAgICAmIzM0O3JlZ2lzdGVyX2tyZXRwcm9iZSYjMzQ7LAogICAgJiMzNDt1bnJlZ2lzdGVyX2tyZXRwcm9iZSYjMzQ7LAogICAgJiMzNDtmdHJhY2VfZW5hYmxlX3N5c2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXRzIEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UIG9uIGRpcmVjdF9vcHMgYW5kIGtwcm9iZV9mdHJhY2Vfb3BzL2twcm9iZV9pcG1vZGlmeV9vcHMuIFRoaXMgcHJldmVudHMgZGlzYWJsaW5nIGZ0cmFjZSBnbG9iYWxseSB2aWEgL3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZCB3aGlsZSBCUEYgdHJhbXBvbGluZXMgb3Iga3Byb2JlcyBhcmUgYWN0aXZlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgKEJQRiB0cmFtcG9saW5lIGFuZCBrcHJvYmVzKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IHByZXZlbnRzIGZ0cmFjZSBkaXNhYmxpbmcgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGF0dGFjaC9kZXRhY2ggb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM2MjAwMTI0ZmUzZDk0OGU0YzgyM2M0MDEzODI5MzJhMDU3YjFhYjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwNjo0Nzo0MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jIGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKaW5kZXggMTI5ZDA3ZGIxMTdlYy4uM2Q1MDY5MDkxZGI3NiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi90cmFtcG9saW5lLmMKQEAgLTIyNCw2ICYjNDM7MjI0LDggQEAgdm9pZCBicGZfaW1hZ2Vfa3N5bV9kZWwoc3RydWN0IGJwZl9rc3ltICprc3ltKQogICovCiBzdHJ1Y3QgZnRyYWNlX29wcyBkaXJlY3Rfb3BzID0gewogCS5vcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMsCiYjNDM7CS8qIFNhbWUgcHJvdGVjdGlvbiBsaXZlcGF0Y2ggZ2l2ZXMgaXRzIG93biBmdHJhY2Vfb3BzLiAqLwomIzQzOwkuZmxhZ3MgPSBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCwKIH07CiAKIHN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKQpAQCAtMzAzLDYgJiM0MzszMDUsOCBAQCBzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWxsb2Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0cikKIAkJcmV0dXJuIC1FTk9NRU07CiAJdHItJmd0O2ZvcHMtJmd0O3ByaXZhdGUgPSB0cjsKIAl0ci0mZ3Q7Zm9wcy0mZ3Q7b3BzX2Z1bmMgPSBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jOwomIzQzOwkvKiBTZWUgdGhlIGRpcmVjdF9vcHMgaW5pdGlhbGl6ZXIgYWJvdmUgZm9yIHdoeS4gKi8KJiM0MzsJdHItJmd0O2ZvcHMtJmd0O2ZsYWdzIHw9IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCBiZmM4OTA4M2RhYTkzLi41YTU0NTExZWVlNzkxIDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTExMjIsMTQgJiM0MzsxMTIyLDE1IEBAIHN0YXRpYyBzdHJ1Y3Qga3Byb2JlICphbGxvY19hZ2dyX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogI2VuZGlmIC8qIENPTkZJR19PUFRQUk9CRVMgKi8KIAogI2lmZGVmIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRQomIzQzOy8qIFNhbWUgcHJvdGVjdGlvbiBsaXZlcGF0Y2ggZ2l2ZXMgaXRzIG93biBmdHJhY2Vfb3BzLiAqLwogc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIGtwcm9iZV9mdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CiAJLmZ1bmMgPSBrcHJvYmVfZnRyYWNlX2hhbmRsZXIsCi0JLmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MsCiYjNDM7CS5mbGFncyA9IEZUUkFDRV9PUFNfRkxfU0FWRV9SRUdTIHwgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMga3Byb2JlX2lwbW9kaWZ5X29wcyBfX3JlYWRfbW9zdGx5ID0gewogCS5mdW5jID0ga3Byb2JlX2Z0cmFjZV9oYW5kbGVyLAotCS5mbGFncyA9IEZUUkFDRV9PUFNfRkxfU0FWRV9SRUdTIHwgRlRSQUNFX09QU19GTF9JUE1PRElGWSwKJiM0MzsJLmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MgfCBGVFJBQ0VfT1BTX0ZMX0lQTU9ESUZZIHwgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQsCiB9OwogCiBzdGF0aWMgaW50IGtwcm9iZV9pcG1vZGlmeV9lbmFibGVkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnRyYWNlX3Blcm1hbmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZnRyYWNlX3Blcm1hbmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmRiZTc4MDA5YTI5MTMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mdHJhY2VfcGVybWFuZW50LmMKQEAgLTAsMCAmIzQzOzEsMTQ0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ3Jvd2RTdHJpa2UgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZnRyYWNlX3Blcm1hbmVudC5za2VsLmgmIzM0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogZmVudHJ5L2ZleGl0L2twcm9iZS9rcmV0cHJvYmUgbm93IGNhcnJ5IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULCBzbwomIzQzOyAqIGtlcm5lbC5mdHJhY2VfZW5hYmxlZD0wIG11c3QgYmUgcmVmdXNlZCB3aXRoIEVCVVNZIHdoaWxlIGFueSBvZiB0aGVtCiYjNDM7ICogaXMgYXR0YWNoZWQsIGFuZCBhbGxvd2VkIGFnYWluIG9uY2UgZGV0YWNoZWQuCiYjNDM7ICoKJiM0MzsgKiBrcHJvYmUubXVsdGkva3JldHByb2JlLm11bHRpL2twcm9iZS5zZXNzaW9uIGFyZSBvdXQgb2Ygc2NvcGUuCiYjNDM7ICoga3Byb2JlL2tyZXRwcm9iZSBzdWJ0ZXN0cyBuZWVkIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSAoZS5nLiBub3Qgb24KJiM0MzsgKiBhcm02NCkgYW5kIGFyZSBza2lwcGVkIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIEZUUkFDRV9FTkFCTEVEX1BBVEggJiMzNDsvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9lbmFibGVkJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJlYWRfZnRyYWNlX2VuYWJsZWQoaW50ICp2YWwpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsxNl0gPSB7fTsKJiM0MzsJaW50IGZkLCBuOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oRlRSQUNFX0VOQUJMRURfUEFUSCwgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsJbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAobiAmbHQ7PSAwKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CSp2YWwgPSBhdG9pKGJ1Zik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgLWVycm5vIG9uIHdyaXRlIGZhaWx1cmUuICovCiYjNDM7c3RhdGljIGludCB3cml0ZV9mdHJhY2VfZW5hYmxlZChpbnQgdmFsKQomIzQzO3sKJiM0MzsJY2hhciBidWZbNF07CiYjNDM7CWludCBmZCwgbiwgbGVuLCBlcnIgPSAwOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oRlRSQUNFX0VOQUJMRURfUEFUSCwgT19XUk9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslZCYjMzQ7LCB2YWwpOwomIzQzOwluID0gd3JpdGUoZmQsIGJ1ZiwgbGVuKTsKJiM0MzsJaWYgKG4gJmx0OyAwKQomIzQzOwkJZXJyID0gLWVycm5vOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQXR0YWNoIEBwcm9nLCBhc3NlcnQga2VybmVsLmZ0cmFjZV9lbmFibGVkPTAgaXMgcmVmdXNlZCB3aGlsZSBhdHRhY2hlZAomIzQzOyAqIGFuZCBzdGF5cyBhdCAxLCB0aGVuIGRldGFjaCBhbmQgYXNzZXJ0IHRoZSBkaXNhYmxlIG5vdyBzdWNjZWVkcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBjaGVja19ibG9ja3NfZGlzYWJsZShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CWludCB2YWwsIGVycjsKJiM0MzsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2gocHJvZyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCBuYW1lKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gd3JpdGVfZnRyYWNlX2VuYWJsZWQoMCk7CiYjNDM7CUFTU0VSVF9FUShlcnIsIC1FQlVTWSwgJiMzNDtkaXNhYmxlX3JlZnVzZWQmIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX09LKHJlYWRfZnRyYWNlX2VuYWJsZWQoJmFtcDt2YWwpLCAmIzM0O3JlYWRfYmFjayYjMzQ7KSkKJiM0MzsJCWdvdG8gZGV0YWNoOwomIzQzOwlBU1NFUlRfRVEodmFsLCAxLCAmIzM0O3N0aWxsX2VuYWJsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7ZGV0YWNoOgomIzQzOwlicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsKJiM0MzsJQVNTRVJUX09LKHdyaXRlX2Z0cmFjZV9lbmFibGVkKDApLCAmIzM0O2Rpc2FibGVfYWZ0ZXJfZGV0YWNoJiMzNDspOwomIzQzOwlBU1NFUlRfT0sod3JpdGVfZnRyYWNlX2VuYWJsZWQoMSksICYjMzQ7cmVlbmFibGUmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEF0dGFjaCBAcHJvZyB3aGlsZSBmdHJhY2VfZW5hYmxlZD0wIGFuZCBhc3NlcnQgaXQgaXMgcmVmdXNlZC4gKi8KJiM0MztzdGF0aWMgdm9pZCBjaGVja19hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKHdyaXRlX2Z0cmFjZV9lbmFibGVkKDApLCAmIzM0O2Rpc2FibGUmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHByb2cpOwomIzQzOwlpZiAoIUFTU0VSVF9FUlJfUFRSKGxpbmssIG5hbWUpKQomIzQzOwkJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CiYjNDM7CUFTU0VSVF9PSyh3cml0ZV9mdHJhY2VfZW5hYmxlZCgxKSwgJiMzNDtyZWVuYWJsZSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2Z0cmFjZV9wZXJtYW5lbnQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmdHJhY2VfcGVybWFuZW50ICpza2VsOwomIzQzOwlib29sIGtwcm9iZXNfb25fZnRyYWNlOwomIzQzOwlpbnQgb3JpZyA9IDE7CiYjNDM7CiYjNDM7CS8qIFNhdmUgYW5kIGFsd2F5cyByZXN0b3JlIGZ0cmFjZV9lbmFibGVkLiAqLwomIzQzOwlpZiAocmVhZF9mdHJhY2VfZW5hYmxlZCgmYW1wO29yaWcpKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tlbCA9IGZ0cmFjZV9wZXJtYW5lbnRfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJZ290byByZXN0b3JlOwomIzQzOwomIzQzOwlrcHJvYmVzX29uX2Z0cmFjZSA9IHNrZWwtJmd0O2tjb25maWctJmd0O0NPTkZJR19LUFJPQkVTX09OX0ZUUkFDRTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtmZW50cnlfYmxvY2tzX2Rpc2FibGUmIzM0OykpCiYjNDM7CQljaGVja19ibG9ja3NfZGlzYWJsZShza2VsLSZndDtwcm9ncy50ZXN0X2ZlbnRyeSwgJiMzNDthdHRhY2hfZmVudHJ5JiMzNDspOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2ZleGl0X2Jsb2Nrc19kaXNhYmxlJiMzNDspKQomIzQzOwkJY2hlY2tfYmxvY2tzX2Rpc2FibGUoc2tlbC0mZ3Q7cHJvZ3MudGVzdF9mZXhpdCwgJiMzNDthdHRhY2hfZmV4aXQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a3Byb2JlX2Jsb2Nrc19kaXNhYmxlJiMzNDspKSB7CiYjNDM7CQlpZiAoa3Byb2Jlc19vbl9mdHJhY2UpCiYjNDM7CQkJY2hlY2tfYmxvY2tzX2Rpc2FibGUoc2tlbC0mZ3Q7cHJvZ3MudGVzdF9rcHJvYmUsICYjMzQ7YXR0YWNoX2twcm9iZSYjMzQ7KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl0ZXN0X19za2lwKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtrcmV0cHJvYmVfYmxvY2tzX2Rpc2FibGUmIzM0OykpIHsKJiM0MzsJCWlmIChrcHJvYmVzX29uX2Z0cmFjZSkKJiM0MzsJCQljaGVja19ibG9ja3NfZGlzYWJsZShza2VsLSZndDtwcm9ncy50ZXN0X2tyZXRwcm9iZSwgJiMzNDthdHRhY2hfa3JldHByb2JlJiMzNDspOwomIzQzOwkJZWxzZQomIzQzOwkJCXRlc3RfX3NraXAoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2ZlbnRyeV9hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZCYjMzQ7KSkKJiM0MzsJCWNoZWNrX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkKHNrZWwtJmd0O3Byb2dzLnRlc3RfZmVudHJ5LCAmIzM0O2F0dGFjaF9mZW50cnkmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7a3Byb2JlX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkJiMzNDspKSB7CiYjNDM7CQlpZiAoa3Byb2Jlc19vbl9mdHJhY2UpCiYjNDM7CQkJY2hlY2tfYXR0YWNoX3doaWxlX2Rpc2FibGVkX3JlZnVzZWQoc2tlbC0mZ3Q7cHJvZ3MudGVzdF9rcHJvYmUsCiYjNDM7CQkJCQkJCSAgICAmIzM0O2F0dGFjaF9rcHJvYmUmIzM0Oyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJdGVzdF9fc2tpcCgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZ0cmFjZV9wZXJtYW5lbnRfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7cmVzdG9yZToKJiM0MzsJd3JpdGVfZnRyYWNlX2VuYWJsZWQob3JpZyk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Z0cmFjZV9wZXJtYW5lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mdHJhY2VfcGVybWFuZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uY2E3MDZkOGVkYzIzYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mdHJhY2VfcGVybWFuZW50LmMKQEAgLTAsMCAmIzQzOzEsNDMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBDcm93ZFN0cmlrZSAqLwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRib29sLmgmZ3Q7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO2V4dGVybiBib29sIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSBfX2tjb25maWcgX193ZWFrOwomIzQzOwomIzQzOy8qIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSB0byBoYXZlIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSB1c2VkIGFuZAomIzQzOyAqIGFkZGVkIHRvIG9iamVjdCBCVEYsIHNvIHRoZSB1c2Vyc3BhY2Ugc2lkZSBjYW4gcmVhZCBpdCBiYWNrIHZpYQomIzQzOyAqIHNrZWwtJmd0O2tjb25maWctJmd0O0NPTkZJR19LUFJPQkVTX09OX0ZUUkFDRS4KJiM0MzsgKi8KJiM0MztpbnQgdW51c2VkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFID8gMCA6IDE7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfZmVudHJ5X3Rlc3QxJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfZmVudHJ5LCBpbnQgYSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtmZXhpdC9icGZfZmVudHJ5X3Rlc3QyJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfZmV4aXQsIGludCBhLCBfX3U2NCBiKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2twcm9iZS9icGZfZmVudHJ5X3Rlc3QzJiMzNDspCiYjNDM7aW50IHRlc3Rfa3Byb2JlKHN0cnVjdCBwdF9yZWdzICpjdHgpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7a3JldHByb2JlL2JwZl9mZW50cnlfdGVzdDQmIzM0OykKJiM0MztpbnQgQlBGX0tSRVRQUk9CRSh0ZXN0X2tyZXRwcm9iZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgdGhleSYjMzk7cmUgYWRkaW5nIGBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVGAgdG8gdGhlIGBkaXJlY3Rfb3BzLmZsYWdzYCB3aXRoaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCwgYW5kIGFsc28gdG8gYGtwcm9iZV9mdHJhY2Vfb3BzLmZsYWdzYCBhbmQgYGtwcm9iZV9pcG1vZGlmeV9vcHMuZmxhZ3NgIGluIGBrZXJuZWwva3Byb2Jlcy5jYC4mIzM0OyBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEFkZGluZyB0aGF0IGZsYWcgbWVhbnMgdGhlc2UgZnRyYWNlIG9wZXJhdGlvbnMsIGluIHRoZSBjb250ZXh0IG9mIEJQRiBhbmQga3Byb2JlcyByZXNwZWN0aXZlbHksIGFyZSBub3cgKnBlcm1hbmVudCouIFRoZXkgY2FuJiMzOTt0IGJlIGRpc2FibGVkIG9uY2UgcmVnaXN0ZXJlZCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBiZWhhdmlvcmFsIG1vZGlmaWNhdGlvbi4KClRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZXNlIGFyZSBiZWluZyBlbXBsb3llZC4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGFuZCBga2VybmVsL2twcm9iZXMuY2AuIEkgcmVjYWxsIHRoYXQgYGRpcmVjdF9vcHNgIGlzIGRlZmluaXRlbHkgdXNlZCBpbiBgYnBmX3RyYW1wb2xpbmUuY2AgKG9yIGEgc2ltaWxhciBmaWxlKSB0byByZWdpc3RlciB0aGUgZnRyYWNlIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgdHJhbXBvbGluZS4gQW5kIG9idmlvdXNseSwgYGtwcm9iZV9mdHJhY2Vfb3BzYCBhbmQgYGtwcm9iZV9pcG1vZGlmeV9vcHNgIGFyZSB1dGlsaXplZCBpbiBga3Byb2Jlcy5jYCBpdHNlbGYuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGVyZSB0aGVzZSBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgYXJlIHJlZmVyZW5jZWQgYmV5b25kIHRob3NlIGltbWVkaWF0ZSBmaWxlcy4gS25vd2luZyB0aGUgYnJvYWRlciB1c2FnZSBjb250ZXh0IHdpbGwgYmUgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIHRoZSBwYXRjaCYjMzk7cyBvdmVyYWxsIGltcGFjdCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIFRoZSBhZGRpdGlvbiBvZiB0aGUgQlBGIHNlbGZ0ZXN0IGBmdHJhY2VfcGVybWFuZW50LmNgIGNvbmZpcm1zIHRoaXMgaXMgYSBjaGFuZ2Ugd2l0aCBzcGVjaWZpYyBjb25zZXF1ZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlyZWN0X29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdHJhbXBvbGluZS5jPTcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfb3BzO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc0LSNpZmRlZiBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjc1OnN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmRpcmVjdF9vcHNfaXBfbG9va3VwKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXApXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03Ni17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTEtI2Vsc2Vcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjkyOnN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmRpcmVjdF9vcHNfaXBfbG9va3VwKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXApXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05My17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTg9c3RhdGljIGludCBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXAsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAzLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTA0Olx0dHIgPSBkaXJlY3Rfb3BzX2lwX2xvb2t1cChvcHMsIGlwKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwNS1cdGlmICghdHIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MjEwPXZvaWQgYnBmX2ltYWdlX2tzeW1fZGVsKHN0cnVjdCBicGZfa3N5bSAqa3N5bSlcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTktLypcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIyMDogKiBXZSBoYXZlIG9ubHkgc2luZ2xlIGRpcmVjdF9vcHMgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBkaXJlY3QgY2FsbFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjIxLSAqIHNpdGVzIGFuZCBpcyB0aGUgb25seSBnbG9iYWwgZnRyYWNlX29wcyBmb3IgYWxsIHRyYW1wb2xpbmVzLlxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIyNC0gKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIyNTpzdHJ1Y3QgZnRyYWNlX29wcyBkaXJlY3Rfb3BzID0ge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjI2LVx0Lm9wc19mdW5jID0gYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMzAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMzE6c3RhdGljIGludCBkaXJlY3Rfb3BzX2FsbG9jKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMzIte1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjMzOlx0dHItXHUwMDNlZm9wcyA9IFx1MDAyNmRpcmVjdF9vcHM7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMzQtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMzYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMzc6c3RhdGljIHZvaWQgZGlyZWN0X29wc19mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpIHsgfVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjM4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MjM5PXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2hfZnJvbV9pcChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjU4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjU5OnN0YXRpYyBpbnQgZGlyZWN0X29wc19hZGQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkcilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI2MC17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjcwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjcxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19kZWwoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkcilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI3Mi17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjgyLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjgzOnN0YXRpYyBpbnQgZGlyZWN0X29wc19tb2Qoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleClcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI4NC17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzAwLSAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzAxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzAyLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMDctXHR0ci1cdTAwM2Vmb3BzLVx1MDAzZW9wc19mdW5jID0gYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYztcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMwODpcdC8qIFNlZSB0aGUgZGlyZWN0X29wcyBpbml0aWFsaXplciBhYm92ZSBmb3Igd2h5LiAqL1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzA5LVx0dHItXHUwMDNlZm9wcy1cdTAwM2VmbGFncyB8PSBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVDtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMTItXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozMTM6c3RhdGljIHZvaWQgZGlyZWN0X29wc19mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMTQte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMyMC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMyMTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWRkKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKnB0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMyMi17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzM1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzM2OnN0YXRpYyBpbnQgZGlyZWN0X29wc19kZWwoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkcilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMzNy17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzQwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzQxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19tb2Qoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqcHRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4KVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzQyLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNTMtI2Vsc2Vcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM1NDpzdGF0aWMgdm9pZCBkaXJlY3Rfb3BzX2ZyZWUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cikgeyB9XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNTUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNTY6c3RhdGljIGludCBkaXJlY3Rfb3BzX2FsbG9jKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNTcte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM2MC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM2MTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWRkKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNjIte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM2NS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM2NjpzdGF0aWMgaW50IGRpcmVjdF9vcHNfZGVsKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNjcte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM3MC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM3MTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfbW9kKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKnB0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleClcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM3Mi17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9Mzc3PXN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmJwZl90cmFtcG9saW5lX2xvb2t1cCh1NjQga2V5LCB1bnNpZ25lZCBsb25nIGlwKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM5My1cdFx0Z290byBvdXQ7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozOTQ6XHRpZiAoZGlyZWN0X29wc19hbGxvYyh0cikpIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM5NS1cdFx0a2ZyZWUodHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQzNj1zdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ0MS1cdGlmICh0ci1cdTAwM2VmdW5jLmZ0cmFjZV9tYW5hZ2VkKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDQyOlx0XHRyZXQgPSBkaXJlY3Rfb3BzX2RlbCh0ciwgb2xkX2FkZHIpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDQzLVx0ZWxzZVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ1ND1zdGF0aWMgaW50IG1vZGlmeV9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ2MS1cdGlmICh0ci1cdTAwM2VmdW5jLmZ0cmFjZV9tYW5hZ2VkKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0NjI6XHRcdHJldCA9IGRpcmVjdF9vcHNfbW9kKHRyLCBuZXdfYWRkciwgbG9ja19kaXJlY3RfbXV0ZXgpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDYzLVx0fSBlbHNlIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00Nzc9c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDkyLVx0aWYgKHRyLVx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQpIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQ5MzpcdFx0cmV0ID0gZGlyZWN0X29wc19hZGQodHIsIG5ld19hZGRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ5NC1cdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTE5OD12b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEyMTktXHRobGlzdF9kZWwoXHUwMDI2dHItXHUwMDNlaGxpc3RfaXApO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTIyMDpcdGRpcmVjdF9vcHNfZnJlZSh0cik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjIxLVx0a2ZyZWUodHIpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MjM9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODItXHRpZiAoZnRyYWNlX2hhc2hfY291bnQoZGF0YS1cdTAwM2VyZWcpKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjgzOlx0XHRlcnIgPSB1cGRhdGVfZnRyYWNlX2RpcmVjdF9hZGQoXHUwMDI2ZGlyZWN0X29wcywgZGF0YS1cdTAwM2VyZWcpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4NC1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjg4LVx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXHUwMDNlbW9kaWZ5KSkge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4OTpcdFx0ZXJyID0gdXBkYXRlX2Z0cmFjZV9kaXJlY3RfbW9kKFx1MDAyNmRpcmVjdF9vcHMsIGRhdGEtXHUwMDNlbW9kaWZ5LCB0cnVlKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTAtXHRcdGlmIChlcnIpIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTEtXHRcdFx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXHUwMDNlcmVnKSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2OTI6XHRcdFx0XHRXQVJOX09OX09OQ0UodXBkYXRlX2Z0cmFjZV9kaXJlY3RfZGVsKFx1MDAyNmRpcmVjdF9vcHMsIGRhdGEtXHUwMDNlcmVnKSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkzLVx0XHRcdGdvdG8gcm9sbGJhY2tfdW5saW5rO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MjM9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MzgtXHRpZiAoZnRyYWNlX2hhc2hfY291bnQoZGF0YS1cdTAwM2V1bnJlZykpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzM5Olx0XHRXQVJOX09OX09OQ0UodXBkYXRlX2Z0cmFjZV9kaXJlY3RfZGVsKFx1MDAyNmRpcmVjdF9vcHMsIGRhdGEtXHUwMDNldW5yZWcpKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDAtXHRpZiAoZnRyYWNlX2hhc2hfY291bnQoZGF0YS1cdTAwM2Vtb2RpZnkpKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc0MTpcdFx0V0FSTl9PTl9PTkNFKHVwZGF0ZV9mdHJhY2VfZGlyZWN0X21vZChcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVx1MDAzZW1vZGlmeSwgdHJ1ZSkpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZ0cmFjZSBQZXJtYW5lbmNlIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIHRoZSBjb2RlJiMzOTtzIHNldHRpbmcgYEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UYCBpbiBhIGZldyBrZXkgcGxhY2VzLiBJdCYjMzk7cyBkb2luZyB0aGlzIG9uIGBkaXJlY3Rfb3BzYCBhbmQgYHRyLSZndDtmb3BzYCB3aXRoaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCwgYW5kIGFsc28gb24gYGtwcm9iZV9mdHJhY2Vfb3BzYCBhbmQgYGtwcm9iZV9pcG1vZGlmeV9vcHNgIGluIGBrZXJuZWwva3Byb2Jlcy5jYC4gVGhlIGNvcmUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRoaXMgcHJldmVudHMgc29tZW9uZSBmcm9tIGdsb2JhbGx5IGRpc2FibGluZyBGdHJhY2UgdGhyb3VnaCBgL3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZGAgaWYgQlBGIHRyYW1wb2xpbmVzIG9yIGtwcm9iZXMgYXJlIGFjdGl2ZS4gVGhpcyBpcyBhIGRlbGliZXJhdGUgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGVyZWZvcmUsIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludC4KClRoZSBzZWxmdGVzdCBgZnRyYWNlX3Blcm1hbmVudC5jYCBjb25maXJtcyB0aGlzIGJlaGF2aW9yIGJ5IHVzaW5nIGBicGZfcHJvZ3JhbV9fYXR0YWNoYCBmb3IgYGZlbnRyeWAsIGBmZXhpdGAsIGBrcHJvYmVgLCBhbmQgYGtyZXRwcm9iZWAgYXR0YWNobWVudHMuIFRoYXTigJlzIGhlbHBmdWw7IGl0IG1lYW5zIHdlIGhhdmUgYSBrbm93biB0ZXN0aW5nIGJhc2VsaW5lLiBTaW5jZSB0aGUgYWltIGlzIHRvIGZpbmQgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdGhpcyAmIzM0O3Blcm1hbmVudCYjMzQ7IHN0YXRlLCB0aGUgZnVuY3Rpb25zIGhhbmRsaW5nIEJQRiB0cmFtcG9saW5lIGFuZCBrcHJvYmUgYXR0YWNobWVudC9kZXRhY2htZW50IGFyZSBnb2luZyB0byBiZSBteSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nLgoKRm9yIEJQRiB0cmFtcG9saW5lcyBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB6b29tIGluIG9uIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLCBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgLCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzIHRvIHRyaWdnZXIgdGhlIHBlcm1hbmVuY2UgYmVoYXZpb3IuIE9uIHRoZSBrcHJvYmUgc2lkZSwgYHJlZ2lzdGVyX2twcm9iZWAgYW5kIGB1bnJlZ2lzdGVyX2twcm9iZWAgYXJlIGdvaW5nIHRvIGJlIGtleS4KCkkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBga2VybmVsL2twcm9iZXMuY2AgYW5kIHNwZWNpZmljYWxseSBga3Byb2JlX2Z0cmFjZV9vcHNgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIGlzIHNldCB1cCB3aWxsIGdpdmUgYSBnb29kIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3Byb2JlX2Z0cmFjZV9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwva3Byb2Jlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9rcHJvYmVzLmM9MTExOD1zdGF0aWMgc3RydWN0IGtwcm9iZSAqYWxsb2NfYWdncl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcClcbi0tXG5rZXJuZWwva3Byb2Jlcy5jLTExMjUtLyogU2FtZSBwcm90ZWN0aW9uIGxpdmVwYXRjaCBnaXZlcyBpdHMgb3duIGZ0cmFjZV9vcHMuICovXG5rZXJuZWwva3Byb2Jlcy5jOjExMjY6c3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIGtwcm9iZV9mdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5rZXJuZWwva3Byb2Jlcy5jLTExMjctXHQuZnVuYyA9IGtwcm9iZV9mdHJhY2VfaGFuZGxlcixcbi0tXG5rZXJuZWwva3Byb2Jlcy5jPTExNjc9c3RhdGljIGludCBhcm1fa3Byb2JlX2Z0cmFjZShzdHJ1Y3Qga3Byb2JlICpwKVxuLS1cbmtlcm5lbC9rcHJvYmVzLmMtMTE3MS1cdHJldHVybiBfX2FybV9rcHJvYmVfZnRyYWNlKHAsXG5rZXJuZWwva3Byb2Jlcy5jOjExNzI6XHRcdGlwbW9kaWZ5ID8gXHUwMDI2a3Byb2JlX2lwbW9kaWZ5X29wcyA6IFx1MDAyNmtwcm9iZV9mdHJhY2Vfb3BzLFxua2VybmVsL2twcm9iZXMuYy0xMTczLVx0XHRpcG1vZGlmeSA/IFx1MDAyNmtwcm9iZV9pcG1vZGlmeV9lbmFibGVkIDogXHUwMDI2a3Byb2JlX2Z0cmFjZV9lbmFibGVkKTtcbi0tXG5rZXJuZWwva3Byb2Jlcy5jPTEyMDE9c3RhdGljIGludCBkaXNhcm1fa3Byb2JlX2Z0cmFjZShzdHJ1Y3Qga3Byb2JlICpwKVxuLS1cbmtlcm5lbC9rcHJvYmVzLmMtMTIwNS1cdHJldHVybiBfX2Rpc2FybV9rcHJvYmVfZnRyYWNlKHAsXG5rZXJuZWwva3Byb2Jlcy5jOjEyMDY6XHRcdGlwbW9kaWZ5ID8gXHUwMDI2a3Byb2JlX2lwbW9kaWZ5X29wcyA6IFx1MDAyNmtwcm9iZV9mdHJhY2Vfb3BzLFxua2VybmVsL2twcm9iZXMuYy0xMjA3LVx0XHRpcG1vZGlmeSA/IFx1MDAyNmtwcm9iZV9pcG1vZGlmeV9lbmFibGVkIDogXHUwMDI2a3Byb2JlX2Z0cmFjZV9lbmFibGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipLcHJvYmUvRnRyYWNlIEludGVncmF0aW9uIHdpdGggQlBGIFRyYW1wb2xpbmVzKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGF0IGBhcm1fa3Byb2JlX2Z0cmFjZWAgYW5kIGBkaXNhcm1fa3Byb2JlX2Z0cmFjZWAgYXJlIHNwZWNpZmljYWxseSB1c2VkIGluIHRoZSBjb250ZXh0IG9mIGtwcm9iZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIHdoZW4gZGVhbGluZyB3aXRoIGZ0cmFjZS4gVGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCYjMzk7cyB0aGUgZ2x1ZSBiZXR3ZWVuIHRoZSBrcHJvYmUgbWVjaGFuaXNtIGFuZCB0aGUgZnRyYWNlIGluZnJhc3RydWN0dXJlLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoZSBCUEYgdHJhbXBvbGluZSBmdW5jdGlvbnMuIFdlIGhhdmUgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AsIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AsIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLCBhbmQgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAuIFRoZXNlIGFyZSB0aGUgY29yZSBCUEYgZnVuY3Rpb25zIGludm9sdmVkLiBTcGVjaWZpY2FsbHkgdGhlIGxpbmtpbmcvdW5saW5raW5nLCBhbmQgbXVsdGktYXR0YWNoL2RldGFjaCBzdWdnZXN0IHRoZXkgYXJlIGhhbmRsaW5nIHRoZSBpbmplY3Rpb24vcmVtb3ZhbCBvZiBCUEYgcHJvZ3JhbXMgaW50byB0aGUgZXhlY3V0aW9uIGZsb3cuCgpJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0IG1lIHB1bGwgdXAgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbWFnaWMgaGFwcGVucywgSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBwcm9ncmFtcyBhcmUgYmVpbmcgaG9va2VkIGFuZCB1bmhvb2tlZC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIHRyYW1wb2xpbmUgYXJjaGl0ZWN0dXJlLCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGluc3RydWN0aW9uIHBhdGNoaW5nLCBhbmQgYW55IHBvdGVudGlhbCBjYXZlYXRzIGluIHRoYXQgcHJvY2Vzcy4gSSBzdXNwZWN0IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGRvZXMgdGhlIGluaXRpYWwgc2V0dXAsIGFuZCB0aGVuIHRoZSBvdGhlcnMgaGFuZGxlIGNsZWFudXAgYW5kIG11bHRpLXByb2dyYW0gc2NlbmFyaW9zLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90cmFtcG9saW5lLmM9ODk3PXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTE1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTE2OnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTE3LVx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NTc6aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTgtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk2My1cdHRyYW1wb2xpbmVfbG9jayh0cik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5NjQ6XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk2NS1cdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDg3PWludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTI5LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTEzMDpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKFx1MDAyNnNoaW1fbGluay1cdTAwM2VsaW5rLm5vZGUsIHRyLCBOVUxMLCBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTMxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjIzPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjcyLVx0XHRkYXRhLVx1MDAzZWVudHJ5ID0gXHUwMDI2bW5vZGUtXHUwMDNlZW50cnk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjczOlx0XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcdTAwMjZtbm9kZS1cdTAwM2Vub2RlLCBtbm9kZS1cdTAwM2V0cmFtcG9saW5lLCBOVUxMLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY3NC1cdFx0XHRcdFx0XHQgXHUwMDI2dHJhbXBvbGluZV9tdWx0aV9vcHMsIGRhdGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzkxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRhcmdldGluZyBLZXkgRnVuY3Rpb25zIGZvciBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGlua2luZyBhYm91dCB3aGVyZSB0byBzdGFydCBteSBkZWVwIGRpdmUsIEkmIzM5O20gbGVhbmluZyBoZWF2aWx5IHRvd2FyZHMgdGhvc2UgQlBGIHRyYW1wb2xpbmUgZnVuY3Rpb25zOiBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYC4gVGhleSBzZWVtIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgdW5kZXJzdGFuZGluZyBob3cgQlBGIHByb2dyYW1zIGFyZSBsaW5rZWQgYW5kIHVubGlua2VkLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggbXVsdGktYXR0YWNoIHNjZW5hcmlvcy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aG9zZSBob29rcyBhcmUgaW1wbGVtZW50ZWQuCgpUaGVuLCBtb3Zpbmcgb24gdG8ga3Byb2JlcywgdGhlIG9idmlvdXMgc3VzcGVjdHMgYXJlIGByZWdpc3Rlcl9rcHJvYmVgLCBgdW5yZWdpc3Rlcl9rcHJvYmVgLCBgcmVnaXN0ZXJfa3JldHByb2JlYCwgYW5kIGB1bnJlZ2lzdGVyX2tyZXRwcm9iZWAuIFRoYXQgd2hvbGUgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBsaWZlY3ljbGUgZm9yIGtlcm5lbCBwcm9iZXMgaXMgY3J1Y2lhbCwgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyB0aGVyZSB3aWxsIGJlIGtleS4KCkZpbmFsbHksIGxldCYjMzk7cyBub3QgZm9yZ2V0IHRoYXQgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYCBmdW5jdGlvbiwgYXNzb2NpYXRlZCB3aXRoIHRoYXQgYGZ0cmFjZV9lbmFibGVkYCBzeXNjdGwgd3JpdGUuIEkgbmVlZCB0byB0cmFjZSBpdHMgbG9jYXRpb24gYW5kIHdoYXQgaXQmIzM5O3MgcmVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kLiBGdHJhY2UmIzM5O3MgY29udHJvbCBvZiB0cmFjaW5nIGlzIGEgcG93ZXJmdWwgbWVjaGFuaXNtLCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgaXQgdGllcyBpbiB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnRyYWNlX2VuYWJsZV9zeXNjdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9mdHJhY2UuYz05MzkyPXN0YXRpYyBpbnRcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo5MzkzOmZ0cmFjZV9lbmFibGVfc3lzY3RsKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTM5NC1cdFx0ICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz05NDMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGZ0cmFjZV9zeXNjdGxzW10gPSB7XG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTk0MzgtXHRcdC5tb2RlICAgICAgICAgICA9IDA2NDQsXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6OTQzOTpcdFx0LnByb2NfaGFuZGxlciAgID0gZnRyYWNlX2VuYWJsZV9zeXNjdGwsXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTQ0MC1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDA2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2gmIzM5O3Mgc3VjY2VzcyBvciBmYWlsdXJlIGhpbmdlcyBkaXJlY3RseSBvbiBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGEgZm9jdXNlZCBpbnZlc3RpZ2F0aW9uLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGxvb2tpbmcgYXQgc29tZSBrZXkgQlBGIGFuZCB0cmFjaW5nIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19LUFJPQkVTYCwgYENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRWAsIGBDT05GSUdfRlRSQUNFYCwgYENPTkZJR19EWU5BTUlDX0ZUUkFDRWAsIGFuZCBjcnVjaWFsbHksIGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLgoKR2l2ZW4gdGhhdCBsYXN0IG9uZSwgSSBzaG91bGQgcmVhbGx5IGNoZWNrIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCB3aWxsIGNvbWUgaW50byBwbGF5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02Mj1zdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02OC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcwLXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MjEwPXZvaWQgYnBmX2ltYWdlX2tzeW1fZGVsKHN0cnVjdCBicGZfa3N5bSAqa3N5bSlcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMTc6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjE4LSNpZmRlZiBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0zNzE9c3RhdGljIGludCBkaXJlY3Rfb3BzX21vZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzc0LX1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM3NTojZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNzYtXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9Njg0PXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzE3LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzE4OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTcxOS1hZ2Fpbjpcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NzAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NzE6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzcyLVx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTQ3OD1pbnQgX193ZWFrIGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNDgzLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTQ4NDojaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFx1MDAyNlx1MDAyNiBcXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTQ4NS0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpIFx1MDAyNlx1MDAyNiBcXFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MjM9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTctXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNzU4OiNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzU5LVx0ICBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTU5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBkaXJlY3Rfb3BzYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBkaXJlY3QgY2FsbHMgaW4gZnRyYWNlLiBUaGUgYCNpZmRlZmAgZGlyZWN0aXZlcywgc3BlY2lmaWNhbGx5IHRob3NlIHJlbGF0ZWQgdG8gYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLCBjb25maXJtIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMgYmVpbmcgYWN0aXZlIG9yIGluYWN0aXZlLCBhcyB0aGV5JiMzOTtsbCBvYnZpb3VzbHkgY29uZGl0aW9uIHRoZSBiZWhhdmlvciBvZiB0aGUgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgdGhlc2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYXJlIGJlaW5nIGFwcGxpZWQgYW5kIHdoYXQgZWZmZWN0IHRoYXQgd2lsbCBoYXZlIG9uIHRoZSBmdW5jdGlvbmFsaXR5LgoKR2l2ZW4gdGhlIGNvbm5lY3Rpb24gdG8gZGlyZWN0IGNhbGxzIGFuZCBmdHJhY2UsIEkgc2hvdWxkIGFsc28gZG91YmxlIGNoZWNrIHRoZSByZWxhdGVkIGtwcm9iZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFYCBpcyBhcHByb3ByaWF0ZWx5IGhhbmRsZWQsIHNpbmNlIGtwcm9iZXMgb2Z0ZW4gd29yayBpbiB0YW5kZW0gd2l0aCBmdW5jdGlvbiB0cmFjaW5nLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBsb29raW5nIGluIGBrZXJuZWwva3Byb2Jlcy5jYCBmb3IgYW55IHJlbGF0ZWQgbG9naWMgb3IgcG90ZW50aWFsIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0tQUk9CRVNfT05fRlRSQUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2twcm9iZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwva3Byb2Jlcy5jPTExMTg9c3RhdGljIHN0cnVjdCBrcHJvYmUgKmFsbG9jX2FnZ3Jfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApXG4tLVxua2VybmVsL2twcm9iZXMuYy0xMTIzLVxua2VybmVsL2twcm9iZXMuYzoxMTI0OiNpZmRlZiBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0Vcbmtlcm5lbC9rcHJvYmVzLmMtMTEyNS0vKiBTYW1lIHByb3RlY3Rpb24gbGl2ZXBhdGNoIGdpdmVzIGl0cyBvd24gZnRyYWNlX29wcy4gKi9cbi0tXG5rZXJuZWwva3Byb2Jlcy5jPTEyMTA9dm9pZCBrcHJvYmVfZnRyYWNlX2tpbGwodm9pZClcbi0tXG5rZXJuZWwva3Byb2Jlcy5jLTEyMTMtfVxua2VybmVsL2twcm9iZXMuYzoxMjE0OiNlbHNlXHQvKiAhQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFICovXG5rZXJuZWwva3Byb2Jlcy5jLTEyMTUtc3RhdGljIGlubGluZSBpbnQgYXJtX2twcm9iZV9mdHJhY2Uoc3RydWN0IGtwcm9iZSAqcClcbi0tXG5rZXJuZWwva3Byb2Jlcy5jPTE1OTQ9c3RhdGljIGludCBjaGVja19mdHJhY2VfbG9jYXRpb24oc3RydWN0IGtwcm9iZSAqcClcbi0tXG5rZXJuZWwva3Byb2Jlcy5jLTE1OTgtXHRpZiAoZnRyYWNlX2xvY2F0aW9uKGFkZHIpID09IGFkZHIpIHtcbmtlcm5lbC9rcHJvYmVzLmM6MTU5OTojaWZkZWYgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFXG5rZXJuZWwva3Byb2Jlcy5jLTE2MDAtXHRcdHAtXHUwMDNlZmxhZ3MgfD0gS1BST0JFX0ZMQUdfRlRSQUNFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgyNQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmF0aW9uIENvbnVuZHJ1bXMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgdHJhY2luZyBzZXR1cC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgSSBuZWVkZWQgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCwgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYCwgYW5kIGBLUFJPQkVTX09OX0ZUUkFDRWAuIEJ1dCB0aGVuIGl0IGhpdHMgbWU6IGhvbGQgb24sIGBIQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AgaXMgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmcsIHJpZ2h0PyBXZSBkb24mIzM5O3QgbmVlZCB0byBleHBsaWNpdGx5IGRlZmluZSBpdCBpZiB0aGUgYXJjaGl0ZWN0dXJlIGFscmVhZHkgdGFrZXMgY2FyZSBvZiBpdC4gQW5kIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuLi4gdGhhdCYjMzk7cyBvZnRlbiBhcmNoaXRlY3R1cmUtc2VsZWN0ZWQgdG9vLCBpc24mIzM5O3QgaXQ/IFNhbWUgZ29lcyBmb3IgYEtQUk9CRVNfT05fRlRSQUNFYDsgaXQmIzM5O3Mgc2VsZWN0ZWQgYnkgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQuCgpBbHJpZ2h0LCBhIGNsZWFuZXIsIG1vcmUgZ2VuZXJhbGl6ZWQgYXBwcm9hY2ggdGhlbi4gU2VlbXMgbGlrZSBJIHNob3VsZCBqdXN0IHNwZWNpZnkgdGhlIGNvcmUsIGFyY2hpdGVjdHVyZS1hZ25vc3RpYyBvcHRpb25zOiBgRlRSQUNFYCwgYERZTkFNSUNfRlRSQUNFYCwgYEtQUk9CRVNgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9KSVRgLiBUaGF0IHNob3VsZCBnaXZlIHVzIHRoZSBmb3VuZGF0aW9uIHdlIG5lZWQuIEJ1dCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGlmIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgZXZlciBhY3R1YWxseSBhIHVzZXItc2VsZWN0YWJsZSBjb25maWc7IGp1c3QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0zMjQ9Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyOC1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyOTpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MDkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgZGlhbG9ndWU6CgoqKkRlcGVuZGVuY3kgRXZhbHVhdGlvbiBmb3IgYGRlZl9ib29sIHlgKioKCkFscmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3QgdGhpcyBgZGVmX2Jvb2wgeWAuIFRoZSBjb3JlIGNvbmNlcHQgaGVyZSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IGl0cyBkZWZpbmVkIHN0YXRlIGRlcGVuZHMgb24gdGhlIHN1Y2Nlc3NmdWwgZnVsZmlsbG1lbnQgb2YgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBjbGFzc2ljLCByaWdodD8gSXQmIzM5O3Mgbm90IG1hZ2ljLCBpdCYjMzk7cyBqdXN0IGhvdyBhbnkgbG9naWNhbCBjb25zdHJ1Y3Rpb24gd29ya3MuIElmIHRoZSBpbnB1dHMgYXJlbiYjMzk7dCB2YWxpZCwgdGhlIG91dHB1dCBjYW4mIzM5O3QgYmUgdHJ1c3RlZC4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAsIGxvZ2ljYWxseSwgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHZhbGlkYXRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzLiBXaGF0IGFyZSB0aGV5PyBBcmUgdGhleSBzYXRpc2ZpZWQ/IFdoYXQmIzM5O3MgdGhlIHN0YXRlIG9mIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMgb3Igd2hhdGV2ZXIgdGhleSYjMzk7cmUgbGlua2VkIHRvPyBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY3Vyc29yeSBnbGFuY2U7IEkgbmVlZCB0byBkcmlsbCBkb3duIHRvIGNvbmZpcm0gdGhlIHZhbGlkaXR5IG9mIGVhY2ggZWxlbWVudCB1cG9uIHdoaWNoIGB5YCByZWxpZXMuIE5vIHNob3J0Y3V0cy4gV2UgbmVlZCB0byBiZSByaWdvcm91c2x5IHRob3JvdWdoIHRvIGF2b2lkIGFueSBjYXNjYWRpbmcgZmFpbHVyZXMgZG93biB0aGUgbGluZS4gV2UgY2FuJiMzOTt0IGhhdmUgYHlgIHJldHVybmluZyBhIHZhbHVlIGJhc2VkIG9uIGEgZmF1bHR5IHByZWRpY2F0ZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4gV2UgbmVlZCB0byBiZSBtZXRpY3Vsb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTQ3PWNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTQ5LVxua2VybmVsL3RyYWNlL0tjb25maWc6NTA6Y29uZmlnIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTUxLVx0Ym9vbFxuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnPTMyND1jb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVx0ZGVmX2Jvb2wgeVxua2VybmVsL3RyYWNlL0tjb25maWctMzMxLVx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1MgfHwgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMzI6XHRkZXBlbmRzIG9uIEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMy1cbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0zNDM9Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfSk1QXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzQ1LVx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRVxua2VybmVsL3RyYWNlL0tjb25maWc6MzQ2Olx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctMzQ3LVx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfSk1QXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDUxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKk15IEFuYWx5c2lzIG9mIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoZSBlbmFibGVtZW50IG9mIHRoaXMgZmVhdHVyZSBoaW5nZXMgb24gYEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBBbmQgdGhhdCYjMzk7cyBhcmNoLWRlcGVuZGVudCwgd2hpY2ggbWVhbnMgdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlIGlzIGdvaW5nIHRvIGRpY3RhdGUgd2hldGhlciB3ZSBjYW4gZXZlbiB1c2UgdGhpcyBlZmZlY3RpdmVseS4KClRvIGJlIHRob3JvdWdoLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBhbHNvIGdvdCBgRlRSQUNFYCwgYERZTkFNSUNfRlRSQUNFYCwgYEtQUk9CRVNgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9KSVRgIGFsbCBzZXQuIFRoZXkmIzM5O3JlIGFsbCByZWxhdGVkLCBhbmQgSSYjMzk7bGwgbmVlZCBhbGwgdGhvc2UgcGllY2VzIHRvIGJlIGluIHBsYWNlIGZvciBhIHJvYnVzdCBzb2x1dGlvbi4KCk9rYXksIGFuZCBub3csIGJlZm9yZSBJIG1vdmUgZm9yd2FyZCwgSSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoZSBzdGF0dXMgb2YgYEtQUk9CRVNfT05fRlRSQUNFYC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueSBjb25maWd1cmF0aW9uIGNvbmZsaWN0cywgZXNwZWNpYWxseSBzaW5jZSB0aGlzIHJlbGllcyBvbiBLcHJvYmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1BST0JFU19PTl9GVFJBQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTE2OD1jb25maWcgT1BUUFJPQkVTXG4tLVxuYXJjaC9LY29uZmlnLTE3Mi1cbmFyY2gvS2NvbmZpZzoxNzM6Y29uZmlnIEtQUk9CRVNfT05fRlRSQUNFXG5hcmNoL0tjb25maWctMTc0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBmb3IgQ29yZSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21lIGNvcmUgQlBGIHRyYW1wb2xpbmUgZnVuY3Rpb25hbGl0eSwgYW5kIGl0IGxvb2tzIGxpa2UgYGRlZl9ib29sIHlgIGlzIGFsc28gcmVsZXZhbnQuIFRoZSBrZXkgZm9jdXMgYXJlYXMgZm9yIG15IGFuYWx5c2lzIHJpZ2h0IG5vdyBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgQlBGIHRyYW1wb2xpbmUgZnVuY3Rpb25zOiBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYC4gV2UmIzM5O3ZlIGFsc28gZ290IHNvbWUgY2xhc3NpYyB0cmFjaW5nIGhvb2tzIGluIHRoZXJlOiBgcmVnaXN0ZXJfa3Byb2JlYCwgYHVucmVnaXN0ZXJfa3Byb2JlYCwgYHJlZ2lzdGVyX2tyZXRwcm9iZWAsIGB1bnJlZ2lzdGVyX2tyZXRwcm9iZWAsIGFuZCBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgLiBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQgY2hlY2sgaWYgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCBleGlzdHMsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgaXMgYSB2aWFibGUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05NTc9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY4LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTY5OnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NzAtXHRcdFx0XHRcdHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTkyLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTkzOi8qIGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nKCkgc2hvdWxkIG5ldmVyIGZhaWwuICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5OTQ6aW50IGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk5NS1cdFx0XHQgICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDAwLVx0dHJhbXBvbGluZV9sb2NrKHRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMDE6XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAwMi1cdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDA3PXN0YXRpYyB2b2lkIGJwZl9zaGltX3RyYW1wX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxNS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwMTY6XHRXQVJOX09OX09OQ0UoYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXHUwMDI2c2hpbV9saW5rLVx1MDAzZWxpbmsubm9kZSwgc2hpbV9saW5rLVx1MDAzZXRyYW1wb2xpbmUsIE5VTEwpKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTctXHRicGZfdHJhbXBvbGluZV9wdXQoc2hpbV9saW5rLVx1MDAzZXRyYW1wb2xpbmUpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MjM9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MzMtXHRcdGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaF9pbml0KG1ub2RlLVx1MDAzZXRyYW1wb2xpbmUpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTczNDpcdFx0V0FSTl9PTl9PTkNFKF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXHUwMDI2bW5vZGUtXHUwMDNlbm9kZSwgbW5vZGUtXHUwMDNldHJhbXBvbGluZSxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MzUtXHRcdFx0XHRcdE5VTEwsIFx1MDAyNnRyYW1wb2xpbmVfbXVsdGlfb3BzLCBkYXRhKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgS2VybmVsIFN5bWJvbHMgZm9yIFBhdGNoIEltcGFjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgY29uZmlybWluZyB0aGF0LCB5ZXMsIGl0IGV4aXN0cy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYC4gTXkgZmlyc3QgdGhvdWdodCB3YXMgdG8gY2hlY2sgaWYgaXQmIzM5O3MgZXhwb3J0ZWQgb3Igc3RhdGljLCBhbmQgSSBzZWUgaXQmIzM5O3Mgc3RhdGljIGluIGBrZXJuZWwvdHJhY2UvZnRyYWNlLmNgLiBXaGlsZSBhIHN0YXRpYyBmdW5jdGlvbiBpc24mIzM5O3QgKmlkZWFsKiBhcyBhIGZvY3VzLCBpdCAqaXMqIHRoZSBzeXNjdGwgaGFuZGxlciwgc28gaXQmIzM5O3MgcmVsZXZhbnQuIEkgY29uc2lkZXJlZCBpZiB0aGVyZSB3YXMgYSBiZXR0ZXIgc3ltYm9sLCBsaWtlIGBmdHJhY2Vfc2V0X2ZpbHRlcmAsIGJ1dCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgYGZ0cmFjZV9lbmFibGVkYCwgd2hpY2ggaXMgbWFuYWdlZCBieSBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgLiBTaW5jZSBpdCBpcyBzdGF0aWMgSSBiZXR0ZXIgY2hlY2sgaWYgYGZ0cmFjZV9zeXNjdGxzYCBpcyByZWdpc3RlcmVkIHNvbWV3aGVyZS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgaG93ZXZlciwgdGhhdCB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSAqZG9lcyogdGhlIHdvcmsgaXMgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYC4gU28gdGhhdCBuZWVkcyB0byBiZSBpbmNsdWRlZC4KClRoZW4gSSBzaGlmdGVkIGdlYXJzIGEgYml0LiBJIHJlbWVtYmVyZWQgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgYW5kIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AuIFRob3NlIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIHRoZSBhbmFseXNpcy4gQWxzbywgYHJlZ2lzdGVyX2twcm9iZWAgYW5kIGB1bnJlZ2lzdGVyX2twcm9iZWAgYXJlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIHRoaW5raW5nOiBgRlRSQUNFYCwgYERZTkFNSUNfRlRSQUNFYCwgYEtQUk9CRVNgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9KSVRgLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgY29uZmlncy4gVGhlIHNlbGZ0ZXN0cyB1c2UgYGZlbnRyeWAgYW5kIGBmZXhpdGAsIHdoaWNoIHJlcXVpcmUgYEJQRl9KSVRgIGFuZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLiBTbywgeWVzLCB0aGF0IGNvbmZpcm1zOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBGVFJBQ0VgLCBgRFlOQU1JQ19GVFJBQ0VgLCBhbmQgYEtQUk9CRVNgLgoKSSYjMzk7bSBub3cgY29uc2lkZXJpbmcgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLiBUaGV5JiMzOTtyZSByZWxldmFudCB0byBga3Byb2JlLm11bHRpYCBhbmQgYGtyZXRwcm9iZS5tdWx0aWAuIEJ1dCwgd2FpdCwgdGhlIHBhdGNoICpleHBsaWNpdGx5KiBzYXlzICYjMzQ7a3Byb2JlLm11bHRpL2tyZXRwcm9iZS5tdWx0aS9rcHJvYmUuc2Vzc2lvbiBhcmUgb3V0IG9mIHNjb3BlLiYjMzQ7IE9rYXksIHRoZSBjb21taXQgbWVzc2FnZSBhbHNvIHNheXMgdGhhdCB0aGV5IGFyZSBvdXQgb2Ygc2NvcGUuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFmZmVjdCB0aGVtLiBXaHk/IEJlY2F1c2UgYGtwcm9iZS5tdWx0aWAgdXNlcyBgZnByb2JlYCwgd2hpY2ggbGlrZWx5IGhhcyBpdHMgb3duIGBmdHJhY2Vfb3BzYC4gSSBzaG91bGQgY29uZmlybSB0aGF0IGBmcHJvYmVgIHVzZXMgYEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDY6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RlRSQUNFX09QU19GTF9QRVJNQU5FTlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9mdHJhY2UuYz0zMzA9aW50IF9fcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpXG4tLVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTM1MC0jZW5kaWZcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzozNTE6XHRpZiAoIWZ0cmFjZV9lbmFibGVkIFx1MDAyNlx1MDAyNiAob3BzLVx1MDAzZWZsYWdzIFx1MDAyNiBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCkpXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtMzUyLVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz05MzgwPXN0YXRpYyBib29sIGlzX3Blcm1hbmVudF9vcHNfcmVnaXN0ZXJlZCh2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYy05Mzg0LVx0ZG9fZm9yX2VhY2hfZnRyYWNlX29wKG9wLCBmdHJhY2Vfb3BzX2xpc3QpIHtcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo5Mzg1Olx0XHRpZiAob3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UKVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTkzODYtXHRcdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzI2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UYC4gRnJvbSB3aGF0IEkgc2VlLCBpdCYjMzk7cyBleGNsdXNpdmVseSBhZGRlZCB0byBgZGlyZWN0X29wc2AsIGFuZCB0aGVuIHdpdGhpbiB0aGUgY29udGV4dCBvZiBrcHJvYmVzLCB0byBga3Byb2JlX2Z0cmFjZV9vcHNgIGFuZCBga3Byb2JlX2lwbW9kaWZ5X29wc2AuIFRoaXMgbWVhbnMgbXkgbWFpbiBwb2ludHMgb2YgZW50cnkgZm9yIG9ic2VydmluZyB0aGlzIGJlaGF2aW9yIHdvdWxkIGJlIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFuZCBgcmVnaXN0ZXJfa3Byb2JlYCwgcmlnaHQ/IEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZsYWcgaXMgYmVpbmcgdXNlZC4KCkhvbGQgb24uLi4gSSBzZWVtIHRvIHJlY2FsbCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCBtYWtpbmcgdXNlIG9mIGBkaXJlY3Rfb3BzYC4gVGhhdCB3YXJyYW50cyBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoYXQgYW5kIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gTGV0IG1lIGp1bXAgaW50byBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgIGFuZCBoYXZlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAuIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7dmUgYWNjb3VudGVkIGZvciBldmVyeSBwbGFjZSB0aGF0IHRoaXMgZmxhZyBpcyBzZXQgYW5kIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpcmVjdF9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX29wcztcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NC0jaWZkZWYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NTpzdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpkaXJlY3Rfb3BzX2lwX2xvb2t1cChzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNzYte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkxLSNlbHNlXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5MjpzdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpkaXJlY3Rfb3BzX2lwX2xvb2t1cChzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTMte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk4PXN0YXRpYyBpbnQgYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyhzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMy1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwNDpcdHRyID0gZGlyZWN0X29wc19pcF9sb29rdXAob3BzLCBpcCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDUtXHRpZiAoIXRyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTIxMD12b2lkIGJwZl9pbWFnZV9rc3ltX2RlbChzdHJ1Y3QgYnBmX2tzeW0gKmtzeW0pXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjE5LS8qXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMjA6ICogV2UgaGF2ZSBvbmx5IHNpbmdsZSBkaXJlY3Rfb3BzIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgZGlyZWN0IGNhbGxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIyMS0gKiBzaXRlcyBhbmQgaXMgdGhlIG9ubHkgZ2xvYmFsIGZ0cmFjZV9vcHMgZm9yIGFsbCB0cmFtcG9saW5lcy5cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMjQtICovXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMjU6c3RydWN0IGZ0cmFjZV9vcHMgZGlyZWN0X29wcyA9IHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIyNi1cdC5vcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjMwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjMxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjMyLXtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIzMzpcdHRyLVx1MDAzZWZvcHMgPSBcdTAwMjZkaXJlY3Rfb3BzO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjM0LVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjM2LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjM3OnN0YXRpYyB2b2lkIGRpcmVjdF9vcHNfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKSB7IH1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIzOC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTIzOT1zdGF0aWMgc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoX2Zyb21faXAoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqcHRyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI1OC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjI1OTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWRkKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yNjAte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI3MC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjI3MTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfZGVsKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yNzIte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI4Mi1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjI4MzpzdGF0aWMgaW50IGRpcmVjdF9vcHNfbW9kKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yODQte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMwMC0gKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMwMTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWxsb2Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMwMi17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzA3LVx0dHItXHUwMDNlZm9wcy1cdTAwM2VvcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmM7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozMDg6XHQvKiBTZWUgdGhlIGRpcmVjdF9vcHMgaW5pdGlhbGl6ZXIgYWJvdmUgZm9yIHdoeS4gKi9cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMwOS1cdHRyLVx1MDAzZWZvcHMtXHUwMDNlZmxhZ3MgfD0gRlRSQUNFX09QU19GTF9QRVJNQU5FTlQ7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzEyLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzEzOnN0YXRpYyB2b2lkIGRpcmVjdF9vcHNfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzE0LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMjAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozMjE6c3RhdGljIGludCBkaXJlY3Rfb3BzX2FkZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMjIte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMzNS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMzNjpzdGF0aWMgaW50IGRpcmVjdF9vcHNfZGVsKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMzcte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM0MC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM0MTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfbW9kKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKnB0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleClcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM0Mi17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzUzLSNlbHNlXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNTQ6c3RhdGljIHZvaWQgZGlyZWN0X29wc19mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpIHsgfVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzU1LVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzU2OnN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzU3LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNjAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNjE6c3RhdGljIGludCBkaXJlY3Rfb3BzX2FkZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICphZGRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzYyLXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNjUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNjY6c3RhdGljIGludCBkaXJlY3Rfb3BzX2RlbChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICphZGRyKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzY3LXtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNzAtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNzE6c3RhdGljIGludCBkaXJlY3Rfb3BzX21vZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNzIte1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTM3Nz1zdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpicGZfdHJhbXBvbGluZV9sb29rdXAodTY0IGtleSwgdW5zaWduZWQgbG9uZyBpcClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zOTMtXHRcdGdvdG8gb3V0O1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Mzk0Olx0aWYgKGRpcmVjdF9vcHNfYWxsb2ModHIpKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zOTUtXHRcdGtmcmVlKHRyKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00MzY9c3RhdGljIGludCB1bnJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NDEtXHRpZiAodHItXHUwMDNlZnVuYy5mdHJhY2VfbWFuYWdlZClcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQ0MjpcdFx0cmV0ID0gZGlyZWN0X29wc19kZWwodHIsIG9sZF9hZGRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ0My1cdGVsc2Vcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00NTQ9c3RhdGljIGludCBtb2RpZnlfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NjEtXHRpZiAodHItXHUwMDNlZnVuYy5mdHJhY2VfbWFuYWdlZCkge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDYyOlx0XHRyZXQgPSBkaXJlY3Rfb3BzX21vZCh0ciwgbmV3X2FkZHIsIGxvY2tfZGlyZWN0X211dGV4KTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ2My1cdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDc3PXN0YXRpYyBpbnQgcmVnaXN0ZXJfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ5Mi1cdGlmICh0ci1cdTAwM2VmdW5jLmZ0cmFjZV9tYW5hZ2VkKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0OTM6XHRcdHJldCA9IGRpcmVjdF9vcHNfYWRkKHRyLCBuZXdfYWRkcik7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTQtXHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExOTg9dm9pZCBicGZfdHJhbXBvbGluZV9wdXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjE5LVx0aGxpc3RfZGVsKFx1MDAyNnRyLVx1MDAzZWhsaXN0X2lwKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEyMjA6XHRkaXJlY3Rfb3BzX2ZyZWUodHIpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTIyMS1cdGtmcmVlKHRyKTtcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjIzPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjgyLVx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXHUwMDNlcmVnKSkge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4MzpcdFx0ZXJyID0gdXBkYXRlX2Z0cmFjZV9kaXJlY3RfYWRkKFx1MDAyNmRpcmVjdF9vcHMsIGRhdGEtXHUwMDNlcmVnKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODQtXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4OC1cdGlmIChmdHJhY2VfaGFzaF9jb3VudChkYXRhLVx1MDAzZW1vZGlmeSkpIHtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODk6XHRcdGVyciA9IHVwZGF0ZV9mdHJhY2VfZGlyZWN0X21vZChcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVx1MDAzZW1vZGlmeSwgdHJ1ZSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkwLVx0XHRpZiAoZXJyKSB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkxLVx0XHRcdGlmIChmdHJhY2VfaGFzaF9jb3VudChkYXRhLVx1MDAzZXJlZykpXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjkyOlx0XHRcdFx0V0FSTl9PTl9PTkNFKHVwZGF0ZV9mdHJhY2VfZGlyZWN0X2RlbChcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVx1MDAzZXJlZykpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5My1cdFx0XHRnb3RvIHJvbGxiYWNrX3VubGluaztcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzIzPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzM4LVx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXHUwMDNldW5yZWcpKVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTczOTpcdFx0V0FSTl9PTl9PTkNFKHVwZGF0ZV9mdHJhY2VfZGlyZWN0X2RlbChcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVx1MDAzZXVucmVnKSk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQwLVx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXHUwMDNlbW9kaWZ5KSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NDE6XHRcdFdBUk5fT05fT05DRSh1cGRhdGVfZnRyYWNlX2RpcmVjdF9tb2QoXHUwMDI2ZGlyZWN0X29wcywgZGF0YS1cdTAwM2Vtb2RpZnksIHRydWUpKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTQwCgkJCQkJCQlvdXRwdXQ6IDI2MwoJCQkJCQkJdGhvdWdodHM6IDY5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFzb25pbmcgZm9yIEZ1enppbmcgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUmIzM5O3MgbXkgdHJhaW4gb2YgdGhvdWdodC4gIEluaXRpYWxseSwgdGhlIGNvZGUgdXRpbGl6ZXMgYGRpcmVjdF9vcHNgIHdpdGhpbiBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYCwgd2hpY2ggbWFrZXMgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgIGludGVyZXN0aW5nIHRhcmdldHMgZm9yIGZ1enppbmcsIGFsb25nIHdpdGggdGhlIHN0YW5kYXJkIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgIGFuZCBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgLiBXZSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGtwcm9iZSBmdW5jdGlvbnMuIFRoaXMgYWxzbyBtYWtlcyB0aGUga3Byb2JlLXJlbGF0ZWQgc3ltYm9scyBvZiBgcmVnaXN0ZXJfa3Byb2JlYCwgYHVucmVnaXN0ZXJfa3Byb2JlYCwgYHJlZ2lzdGVyX2tyZXRwcm9iZWAsIGFuZCBgdW5yZWdpc3Rlcl9rcmV0cHJvYmVgIGltcG9ydGFudC4gTGFzdGx5LCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGBmdHJhY2VfZW5hYmxlX3N5c2N0bGAgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBvdGhlciBmdW5jdGlvbnMuCgpOb3csIGNvbmNlcm5pbmcgY29uZmlndXJhdGlvbnMsIHdlIGRlZmluaXRlbHkgbmVlZCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBGVFJBQ0VgLCBgRFlOQU1JQ19GVFJBQ0VgLCBhbmQgYEtQUk9CRVNgIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS4gIFRoZSBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgIGlzIGEgYml0IG9mIGEgd3JpbmtsZSBzaW5jZSBpdCYjMzk7cyBzdGF0aWMsIGJ1dCBTeXprYWxsZXIgKmNhbiogZnV6eiBpdCB0aHJvdWdoIGAvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9lbmFibGVkYCwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYCB1c2VzIHRoZSBzeXNjdGwgaGFuZGxlciBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgLgoKSSBkaWQgYSBiaXQgb2YgY3Jvc3MtY2hlY2tpbmcsIGFuZCB0aGUgc2VsZnRlc3RzIHVzZSBgZmVudHJ5YCBhbmQgYGZleGl0YCwgd2hpY2ggZGVwZW5kIG9uIGBCUEZfSklUYCBhbmQgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gIEhvd2V2ZXIsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseSBpZiBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgbWV0LCBzbyB3ZSBkb24mIzM5O3QgbmVlZCB0byBzcGVjaWZ5IGl0IGRpcmVjdGx5LiBUaGUgc2FtZSBhcHBsaWVzIGZvciBgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFYCwgYXMgaXQmIzM5O3MgYXV0b21hdGljYWxseSBlbmFibGVkIHdpdGggYEhBVkVfS1BST0JFU19PTl9GVFJBQ0VgLgoKRmluYWxseSwgdGhlIGNvcmUgcmVhc29uIHRvIGZ1enogdGhpcyBwYXRjaCBpcyBiZWNhdXNlIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGZ1bmRhbWVudGFsIGtlcm5lbCBsb2dpYy4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggc2V0cyBgRlRSQUNFX09QU19GTF9QRVJNQU5FTlRgIG9uIGBkaXJlY3Rfb3BzYCBhbmQgYGtwcm9iZV9mdHJhY2Vfb3BzYCAvIGBrcHJvYmVfaXBtb2RpZnlfb3BzYC4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBwcmV2ZW50aW5nIGdsb2JhbCBmdHJhY2UgZGlzYWJsaW5nIHZpYSBgL3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZGAgd2hlbiBCUEYgdHJhbXBvbGluZXMgb3Iga3Byb2JlcyBhcmUgYWN0aXZlLiBUaGlzIGtpbmQgb2YgY2hhbmdlIGlzIGV4YWN0bHkgdGhlIHNvcnQgdGhhdCB3YXJyYW50cyBkZWVwIGZ1enppbmcuIFdlIHdhbnQgdG8gZW5zdXJlIGl0IHdvcmtzIGFzIGludGVuZGVkLCBwcmV2ZW50cyB1bmV4cGVjdGVkIHNpZGUtZWZmZWN0cywgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmFjZXMuCgpJbiBzaG9ydCwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOgoKKiAgIGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgCiogICBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgCiogICBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYAoqICAgYGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaGAKKiAgIGByZWdpc3Rlcl9rcHJvYmVgCiogICBgdW5yZWdpc3Rlcl9rcHJvYmVgCiogICBgcmVnaXN0ZXJfa3JldHByb2JlYAoqICAgYHVucmVnaXN0ZXJfa3JldHByb2JlYAoqICAgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYAoKd2l0aCB0aGVzZSBlbmFibGVkIGNvbmZpZ3M6CgoqICAgYEJQRl9TWVNDQUxMYAoqICAgYEJQRl9KSVRgCiogICBgRlRSQUNFYAoqICAgYERZTkFNSUNfRlRSQUNFYAoqICAgYEtQUk9CRVNgCgpBbmQgdGhlbiBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA2OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtLUFJPQkVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbGlua19wcm9nJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX3VubGlua19wcm9nJiMzNDssCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaCYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2gmIzM0OywKICAgICYjMzQ7cmVnaXN0ZXJfa3Byb2JlJiMzNDssCiAgICAmIzM0O3VucmVnaXN0ZXJfa3Byb2JlJiMzNDssCiAgICAmIzM0O3JlZ2lzdGVyX2tyZXRwcm9iZSYjMzQ7LAogICAgJiMzNDt1bnJlZ2lzdGVyX2tyZXRwcm9iZSYjMzQ7LAogICAgJiMzNDtmdHJhY2VfZW5hYmxlX3N5c2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXRzIEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UIG9uIGRpcmVjdF9vcHMgYW5kIGtwcm9iZV9mdHJhY2Vfb3BzL2twcm9iZV9pcG1vZGlmeV9vcHMuIFRoaXMgcHJldmVudHMgZGlzYWJsaW5nIGZ0cmFjZSBnbG9iYWxseSB2aWEgL3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZCB3aGlsZSBCUEYgdHJhbXBvbGluZXMgb3Iga3Byb2JlcyBhcmUgYWN0aXZlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgKEJQRiB0cmFtcG9saW5lIGFuZCBrcHJvYmVzKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IHByZXZlbnRzIGZ0cmFjZSBkaXNhYmxpbmcgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGF0dGFjaC9kZXRhY2ggb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtGVFJBQ0UmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0UmIzM0OywKICAgICYjMzQ7S1BST0JFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyYjMzQ7LAogICAgJiMzNDticGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gmIzM0OywKICAgICYjMzQ7YnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoJiMzNDssCiAgICAmIzM0O3JlZ2lzdGVyX2twcm9iZSYjMzQ7LAogICAgJiMzNDt1bnJlZ2lzdGVyX2twcm9iZSYjMzQ7LAogICAgJiMzNDtyZWdpc3Rlcl9rcmV0cHJvYmUmIzM0OywKICAgICYjMzQ7dW5yZWdpc3Rlcl9rcmV0cHJvYmUmIzM0OywKICAgICYjMzQ7ZnRyYWNlX2VuYWJsZV9zeXNjdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2V0cyBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCBvbiBkaXJlY3Rfb3BzIGFuZCBrcHJvYmVfZnRyYWNlX29wcy9rcHJvYmVfaXBtb2RpZnlfb3BzLiBUaGlzIHByZXZlbnRzIGRpc2FibGluZyBmdHJhY2UgZ2xvYmFsbHkgdmlhIC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2VuYWJsZWQgd2hpbGUgQlBGIHRyYW1wb2xpbmVzIG9yIGtwcm9iZXMgYXJlIGFjdGl2ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgdHJhbXBvbGluZSBhbmQga3Byb2JlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBwcmV2ZW50cyBmdHJhY2UgZGlzYWJsaW5nIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyBhdHRhY2gvZGV0YWNoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0Nzo0MS40MzA5MDM5NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NDkzMTg4ODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFXCIsXG4gICAgXCJLUFJPQkVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ1wiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hcIixcbiAgICBcInJlZ2lzdGVyX2twcm9iZVwiLFxuICAgIFwidW5yZWdpc3Rlcl9rcHJvYmVcIixcbiAgICBcInJlZ2lzdGVyX2tyZXRwcm9iZVwiLFxuICAgIFwidW5yZWdpc3Rlcl9rcmV0cHJvYmVcIixcbiAgICBcImZ0cmFjZV9lbmFibGVfc3lzY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2V0cyBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCBvbiBkaXJlY3Rfb3BzIGFuZCBrcHJvYmVfZnRyYWNlX29wcy9rcHJvYmVfaXBtb2RpZnlfb3BzLiBUaGlzIHByZXZlbnRzIGRpc2FibGluZyBmdHJhY2UgZ2xvYmFsbHkgdmlhIC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2VuYWJsZWQgd2hpbGUgQlBGIHRyYW1wb2xpbmVzIG9yIGtwcm9iZXMgYXJlIGFjdGl2ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgdHJhbXBvbGluZSBhbmQga3Byb2JlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBwcmV2ZW50cyBmdHJhY2UgZGlzYWJsaW5nIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGF0dGFjaC9kZXRhY2ggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDc6NDEuNDMwOTA4ODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTE4NTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM2MjAwMTI0ZmUzZDk0OGU0YzgyM2M0MDEzODI5MzJhMDU3YjFhYjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMDY6NDc6NDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbmluZGV4IDEyOWQwN2RiMTE3ZWMuLjNkNTA2OTA5MWRiNzYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi90cmFtcG9saW5lLmNcXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xcbkBAIC0yMjQsNiArMjI0LDggQEAgdm9pZCBicGZfaW1hZ2Vfa3N5bV9kZWwoc3RydWN0IGJwZl9rc3ltICprc3ltKVxcbiAgKi9cXG4gc3RydWN0IGZ0cmFjZV9vcHMgZGlyZWN0X29wcyA9IHtcXG4gXFx0Lm9wc19mdW5jID0gYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyxcXG4rXFx0LyogU2FtZSBwcm90ZWN0aW9uIGxpdmVwYXRjaCBnaXZlcyBpdHMgb3duIGZ0cmFjZV9vcHMuICovXFxuK1xcdC5mbGFncyA9IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBkaXJlY3Rfb3BzX2FsbG9jKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxuQEAgLTMwMyw2ICszMDUsOCBAQCBzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWxsb2Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdHRyLVxcdTAwM2Vmb3BzLVxcdTAwM2Vwcml2YXRlID0gdHI7XFxuIFxcdHRyLVxcdTAwM2Vmb3BzLVxcdTAwM2VvcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmM7XFxuK1xcdC8qIFNlZSB0aGUgZGlyZWN0X29wcyBpbml0aWFsaXplciBhYm92ZSBmb3Igd2h5LiAqL1xcbitcXHR0ci1cXHUwMDNlZm9wcy1cXHUwMDNlZmxhZ3MgfD0gRlRSQUNFX09QU19GTF9QRVJNQU5FTlQ7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuY1xcbmluZGV4IGJmYzg5MDgzZGFhOTMuLjVhNTQ1MTFlZWU3OTEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2twcm9iZXMuY1xcbisrKyBiL2tlcm5lbC9rcHJvYmVzLmNcXG5AQCAtMTEyMiwxNCArMTEyMiwxNSBAQCBzdGF0aWMgc3RydWN0IGtwcm9iZSAqYWxsb2NfYWdncl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcClcXG4gI2VuZGlmIC8qIENPTkZJR19PUFRQUk9CRVMgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0VcXG4rLyogU2FtZSBwcm90ZWN0aW9uIGxpdmVwYXRjaCBnaXZlcyBpdHMgb3duIGZ0cmFjZV9vcHMuICovXFxuIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyBrcHJvYmVfZnRyYWNlX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbiBcXHQuZnVuYyA9IGtwcm9iZV9mdHJhY2VfaGFuZGxlcixcXG4tXFx0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MsXFxuK1xcdC5mbGFncyA9IEZUUkFDRV9PUFNfRkxfU0FWRV9SRUdTIHwgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQsXFxuIH07XFxuIFxcbiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMga3Byb2JlX2lwbW9kaWZ5X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbiBcXHQuZnVuYyA9IGtwcm9iZV9mdHJhY2VfaGFuZGxlcixcXG4tXFx0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MgfCBGVFJBQ0VfT1BTX0ZMX0lQTU9ESUZZLFxcbitcXHQuZmxhZ3MgPSBGVFJBQ0VfT1BTX0ZMX1NBVkVfUkVHUyB8IEZUUkFDRV9PUFNfRkxfSVBNT0RJRlkgfCBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQga3Byb2JlX2lwbW9kaWZ5X2VuYWJsZWQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Z0cmFjZV9wZXJtYW5lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Z0cmFjZV9wZXJtYW5lbnQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGJlNzgwMDlhMjkxM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9mdHJhY2VfcGVybWFuZW50LmNcXG5AQCAtMCwwICsxLDE0NCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgQ3Jvd2RTdHJpa2UgKi9cXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImZ0cmFjZV9wZXJtYW5lbnQuc2tlbC5oXFxcIlxcbitcXG4rLypcXG4rICogZmVudHJ5L2ZleGl0L2twcm9iZS9rcmV0cHJvYmUgbm93IGNhcnJ5IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULCBzb1xcbisgKiBrZXJuZWwuZnRyYWNlX2VuYWJsZWQ9MCBtdXN0IGJlIHJlZnVzZWQgd2l0aCBFQlVTWSB3aGlsZSBhbnkgb2YgdGhlbVxcbisgKiBpcyBhdHRhY2hlZCwgYW5kIGFsbG93ZWQgYWdhaW4gb25jZSBkZXRhY2hlZC5cXG4rICpcXG4rICoga3Byb2JlLm11bHRpL2tyZXRwcm9iZS5tdWx0aS9rcHJvYmUuc2Vzc2lvbiBhcmUgb3V0IG9mIHNjb3BlLlxcbisgKiBrcHJvYmUva3JldHByb2JlIHN1YnRlc3RzIG5lZWQgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFIChlLmcuIG5vdCBvblxcbisgKiBhcm02NCkgYW5kIGFyZSBza2lwcGVkIG90aGVyd2lzZS5cXG4rICovXFxuK1xcbisjZGVmaW5lIEZUUkFDRV9FTkFCTEVEX1BBVEggXFxcIi9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2VuYWJsZWRcXFwiXFxuK1xcbitzdGF0aWMgaW50IHJlYWRfZnRyYWNlX2VuYWJsZWQoaW50ICp2YWwpXFxuK3tcXG4rXFx0Y2hhciBidWZbMTZdID0ge307XFxuK1xcdGludCBmZCwgbjtcXG4rXFxuK1xcdGZkID0gb3BlbihGVFJBQ0VfRU5BQkxFRF9QQVRILCBPX1JET05MWSk7XFxuK1xcdGlmIChmZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcdG4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSk7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0aWYgKG4gXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdCp2YWwgPSBhdG9pKGJ1Zik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgLWVycm5vIG9uIHdyaXRlIGZhaWx1cmUuICovXFxuK3N0YXRpYyBpbnQgd3JpdGVfZnRyYWNlX2VuYWJsZWQoaW50IHZhbClcXG4re1xcbitcXHRjaGFyIGJ1Zls0XTtcXG4rXFx0aW50IGZkLCBuLCBsZW4sIGVyciA9IDA7XFxuK1xcbitcXHRmZCA9IG9wZW4oRlRSQUNFX0VOQUJMRURfUEFUSCwgT19XUk9OTFkpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJWRcXFwiLCB2YWwpO1xcbitcXHRuID0gd3JpdGUoZmQsIGJ1ZiwgbGVuKTtcXG4rXFx0aWYgKG4gXFx1MDAzYyAwKVxcbitcXHRcXHRlcnIgPSAtZXJybm87XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rLypcXG4rICogQXR0YWNoIEBwcm9nLCBhc3NlcnQga2VybmVsLmZ0cmFjZV9lbmFibGVkPTAgaXMgcmVmdXNlZCB3aGlsZSBhdHRhY2hlZFxcbisgKiBhbmQgc3RheXMgYXQgMSwgdGhlbiBkZXRhY2ggYW5kIGFzc2VydCB0aGUgZGlzYWJsZSBub3cgc3VjY2VlZHMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBjaGVja19ibG9ja3NfZGlzYWJsZShzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbitcXHRpbnQgdmFsLCBlcnI7XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChwcm9nKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIG5hbWUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSB3cml0ZV9mdHJhY2VfZW5hYmxlZCgwKTtcXG4rXFx0QVNTRVJUX0VRKGVyciwgLUVCVVNZLCBcXFwiZGlzYWJsZV9yZWZ1c2VkXFxcIik7XFxuK1xcdGlmICghQVNTRVJUX09LKHJlYWRfZnRyYWNlX2VuYWJsZWQoXFx1MDAyNnZhbCksIFxcXCJyZWFkX2JhY2tcXFwiKSlcXG4rXFx0XFx0Z290byBkZXRhY2g7XFxuK1xcdEFTU0VSVF9FUSh2YWwsIDEsIFxcXCJzdGlsbF9lbmFibGVkXFxcIik7XFxuK1xcbitkZXRhY2g6XFxuK1xcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbitcXG4rXFx0QVNTRVJUX09LKHdyaXRlX2Z0cmFjZV9lbmFibGVkKDApLCBcXFwiZGlzYWJsZV9hZnRlcl9kZXRhY2hcXFwiKTtcXG4rXFx0QVNTRVJUX09LKHdyaXRlX2Z0cmFjZV9lbmFibGVkKDEpLCBcXFwicmVlbmFibGVcXFwiKTtcXG4rfVxcbitcXG4rLyogQXR0YWNoIEBwcm9nIHdoaWxlIGZ0cmFjZV9lbmFibGVkPTAgYW5kIGFzc2VydCBpdCBpcyByZWZ1c2VkLiAqL1xcbitzdGF0aWMgdm9pZCBjaGVja19hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfT0sod3JpdGVfZnRyYWNlX2VuYWJsZWQoMCksIFxcXCJkaXNhYmxlXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHByb2cpO1xcbitcXHRpZiAoIUFTU0VSVF9FUlJfUFRSKGxpbmssIG5hbWUpKVxcbitcXHRcXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcXG4rXFxuK1xcdEFTU0VSVF9PSyh3cml0ZV9mdHJhY2VfZW5hYmxlZCgxKSwgXFxcInJlZW5hYmxlXFxcIik7XFxuK31cXG4rXFxuK3ZvaWQgdGVzdF9mdHJhY2VfcGVybWFuZW50KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGZ0cmFjZV9wZXJtYW5lbnQgKnNrZWw7XFxuK1xcdGJvb2wga3Byb2Jlc19vbl9mdHJhY2U7XFxuK1xcdGludCBvcmlnID0gMTtcXG4rXFxuK1xcdC8qIFNhdmUgYW5kIGFsd2F5cyByZXN0b3JlIGZ0cmFjZV9lbmFibGVkLiAqL1xcbitcXHRpZiAocmVhZF9mdHJhY2VfZW5hYmxlZChcXHUwMDI2b3JpZykpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHNrZWwgPSBmdHJhY2VfcGVybWFuZW50X19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwic2tlbF9vcGVuX2FuZF9sb2FkXFxcIikpXFxuK1xcdFxcdGdvdG8gcmVzdG9yZTtcXG4rXFxuK1xcdGtwcm9iZXNfb25fZnRyYWNlID0gc2tlbC1cXHUwMDNla2NvbmZpZy1cXHUwMDNlQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImZlbnRyeV9ibG9ja3NfZGlzYWJsZVxcXCIpKVxcbitcXHRcXHRjaGVja19ibG9ja3NfZGlzYWJsZShza2VsLVxcdTAwM2Vwcm9ncy50ZXN0X2ZlbnRyeSwgXFxcImF0dGFjaF9mZW50cnlcXFwiKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJmZXhpdF9ibG9ja3NfZGlzYWJsZVxcXCIpKVxcbitcXHRcXHRjaGVja19ibG9ja3NfZGlzYWJsZShza2VsLVxcdTAwM2Vwcm9ncy50ZXN0X2ZleGl0LCBcXFwiYXR0YWNoX2ZleGl0XFxcIik7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwia3Byb2JlX2Jsb2Nrc19kaXNhYmxlXFxcIikpIHtcXG4rXFx0XFx0aWYgKGtwcm9iZXNfb25fZnRyYWNlKVxcbitcXHRcXHRcXHRjaGVja19ibG9ja3NfZGlzYWJsZShza2VsLVxcdTAwM2Vwcm9ncy50ZXN0X2twcm9iZSwgXFxcImF0dGFjaF9rcHJvYmVcXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJrcmV0cHJvYmVfYmxvY2tzX2Rpc2FibGVcXFwiKSkge1xcbitcXHRcXHRpZiAoa3Byb2Jlc19vbl9mdHJhY2UpXFxuK1xcdFxcdFxcdGNoZWNrX2Jsb2Nrc19kaXNhYmxlKHNrZWwtXFx1MDAzZXByb2dzLnRlc3Rfa3JldHByb2JlLCBcXFwiYXR0YWNoX2tyZXRwcm9iZVxcXCIpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImZlbnRyeV9hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZFxcXCIpKVxcbitcXHRcXHRjaGVja19hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZChza2VsLVxcdTAwM2Vwcm9ncy50ZXN0X2ZlbnRyeSwgXFxcImF0dGFjaF9mZW50cnlcXFwiKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJrcHJvYmVfYXR0YWNoX3doaWxlX2Rpc2FibGVkX3JlZnVzZWRcXFwiKSkge1xcbitcXHRcXHRpZiAoa3Byb2Jlc19vbl9mdHJhY2UpXFxuK1xcdFxcdFxcdGNoZWNrX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkKHNrZWwtXFx1MDAzZXByb2dzLnRlc3Rfa3Byb2JlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcImF0dGFjaF9rcHJvYmVcXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdH1cXG4rXFxuK1xcdGZ0cmFjZV9wZXJtYW5lbnRfX2Rlc3Ryb3koc2tlbCk7XFxuK3Jlc3RvcmU6XFxuK1xcdHdyaXRlX2Z0cmFjZV9lbmFibGVkKG9yaWcpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mdHJhY2VfcGVybWFuZW50LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZnRyYWNlX3Blcm1hbmVudC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jYTcwNmQ4ZWRjMjNiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mdHJhY2VfcGVybWFuZW50LmNcXG5AQCAtMCwwICsxLDQzIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDcm93ZFN0cmlrZSAqL1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rZXh0ZXJuIGJvb2wgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFIF9fa2NvbmZpZyBfX3dlYWs7XFxuK1xcbisvKiBUaGlzIGZ1bmN0aW9uIGlzIGhlcmUgdG8gaGF2ZSBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0UgdXNlZCBhbmRcXG4rICogYWRkZWQgdG8gb2JqZWN0IEJURiwgc28gdGhlIHVzZXJzcGFjZSBzaWRlIGNhbiByZWFkIGl0IGJhY2sgdmlhXFxuKyAqIHNrZWwtXFx1MDAzZWtjb25maWctXFx1MDAzZUNPTkZJR19LUFJPQkVTX09OX0ZUUkFDRS5cXG4rICovXFxuK2ludCB1bnVzZWQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFID8gMCA6IDE7XFxuK31cXG4rXFxuK1NFQyhcXFwiZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9mZW50cnksIGludCBhKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcImZleGl0L2JwZl9mZW50cnlfdGVzdDJcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9mZXhpdCwgaW50IGEsIF9fdTY0IGIpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwia3Byb2JlL2JwZl9mZW50cnlfdGVzdDNcXFwiKVxcbitpbnQgdGVzdF9rcHJvYmUoc3RydWN0IHB0X3JlZ3MgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJrcmV0cHJvYmUvYnBmX2ZlbnRyeV90ZXN0NFxcXCIpXFxuK2ludCBCUEZfS1JFVFBST0JFKHRlc3Rfa3JldHByb2JlKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ3OjQxLjc2NjY0NTk3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc1MTU3NDM4NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFXCIsXG4gICAgXCJLUFJPQkVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ1wiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hcIixcbiAgICBcInJlZ2lzdGVyX2twcm9iZVwiLFxuICAgIFwidW5yZWdpc3Rlcl9rcHJvYmVcIixcbiAgICBcInJlZ2lzdGVyX2tyZXRwcm9iZVwiLFxuICAgIFwidW5yZWdpc3Rlcl9rcmV0cHJvYmVcIixcbiAgICBcImZ0cmFjZV9lbmFibGVfc3lzY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2V0cyBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCBvbiBkaXJlY3Rfb3BzIGFuZCBrcHJvYmVfZnRyYWNlX29wcy9rcHJvYmVfaXBtb2RpZnlfb3BzLiBUaGlzIHByZXZlbnRzIGRpc2FibGluZyBmdHJhY2UgZ2xvYmFsbHkgdmlhIC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2VuYWJsZWQgd2hpbGUgQlBGIHRyYW1wb2xpbmVzIG9yIGtwcm9iZXMgYXJlIGFjdGl2ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgdHJhbXBvbGluZSBhbmQga3Byb2JlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBwcmV2ZW50cyBmdHJhY2UgZGlzYWJsaW5nIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGF0dGFjaC9kZXRhY2ggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzYyMDAxMjRmZTNkOTQ4ZTRjODIzYzQwMTM4MjkzMmEwNTdiMWFiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDA2OjQ3OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi90cmFtcG9saW5lLmMgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuaW5kZXggMTI5ZDA3ZGIxMTdlYy4uM2Q1MDY5MDkxZGI3NiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdHJhbXBvbGluZS5jXG4rKysgYi9rZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1xuQEAgLTIyNCw2ICsyMjQsOCBAQCB2b2lkIGJwZl9pbWFnZV9rc3ltX2RlbChzdHJ1Y3QgYnBmX2tzeW0gKmtzeW0pXG4gICovXG4gc3RydWN0IGZ0cmFjZV9vcHMgZGlyZWN0X29wcyA9IHtcbiBcdC5vcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMsXG4rXHQvKiBTYW1lIHByb3RlY3Rpb24gbGl2ZXBhdGNoIGdpdmVzIGl0cyBvd24gZnRyYWNlX29wcy4gKi9cbitcdC5mbGFncyA9IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULFxuIH07XG4gXG4gc3RhdGljIGludCBkaXJlY3Rfb3BzX2FsbG9jKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXG5AQCAtMzAzLDYgKzMwNSw4IEBAIHN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHRyLVx1MDAzZWZvcHMtXHUwMDNlcHJpdmF0ZSA9IHRyO1xuIFx0dHItXHUwMDNlZm9wcy1cdTAwM2VvcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmM7XG4rXHQvKiBTZWUgdGhlIGRpcmVjdF9vcHMgaW5pdGlhbGl6ZXIgYWJvdmUgZm9yIHdoeS4gKi9cbitcdHRyLVx1MDAzZWZvcHMtXHUwMDNlZmxhZ3MgfD0gRlRSQUNFX09QU19GTF9QRVJNQU5FTlQ7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmNcbmluZGV4IGJmYzg5MDgzZGFhOTMuLjVhNTQ1MTFlZWU3OTEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwva3Byb2Jlcy5jXG4rKysgYi9rZXJuZWwva3Byb2Jlcy5jXG5AQCAtMTEyMiwxNCArMTEyMiwxNSBAQCBzdGF0aWMgc3RydWN0IGtwcm9iZSAqYWxsb2NfYWdncl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcClcbiAjZW5kaWYgLyogQ09ORklHX09QVFBST0JFUyAqL1xuIFxuICNpZmRlZiBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0VcbisvKiBTYW1lIHByb3RlY3Rpb24gbGl2ZXBhdGNoIGdpdmVzIGl0cyBvd24gZnRyYWNlX29wcy4gKi9cbiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMga3Byb2JlX2Z0cmFjZV9vcHMgX19yZWFkX21vc3RseSA9IHtcbiBcdC5mdW5jID0ga3Byb2JlX2Z0cmFjZV9oYW5kbGVyLFxuLVx0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MsXG4rXHQuZmxhZ3MgPSBGVFJBQ0VfT1BTX0ZMX1NBVkVfUkVHUyB8IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULFxuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIGtwcm9iZV9pcG1vZGlmeV9vcHMgX19yZWFkX21vc3RseSA9IHtcbiBcdC5mdW5jID0ga3Byb2JlX2Z0cmFjZV9oYW5kbGVyLFxuLVx0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MgfCBGVFJBQ0VfT1BTX0ZMX0lQTU9ESUZZLFxuK1x0LmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MgfCBGVFJBQ0VfT1BTX0ZMX0lQTU9ESUZZIHwgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGtwcm9iZV9pcG1vZGlmeV9lbmFibGVkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Z0cmFjZV9wZXJtYW5lbnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Z0cmFjZV9wZXJtYW5lbnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRiZTc4MDA5YTI5MTNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2Z0cmFjZV9wZXJtYW5lbnQuY1xuQEAgLTAsMCArMSwxNDQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDcm93ZFN0cmlrZSAqL1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFwiZnRyYWNlX3Blcm1hbmVudC5za2VsLmhcIlxuK1xuKy8qXG4rICogZmVudHJ5L2ZleGl0L2twcm9iZS9rcmV0cHJvYmUgbm93IGNhcnJ5IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5ULCBzb1xuKyAqIGtlcm5lbC5mdHJhY2VfZW5hYmxlZD0wIG11c3QgYmUgcmVmdXNlZCB3aXRoIEVCVVNZIHdoaWxlIGFueSBvZiB0aGVtXG4rICogaXMgYXR0YWNoZWQsIGFuZCBhbGxvd2VkIGFnYWluIG9uY2UgZGV0YWNoZWQuXG4rICpcbisgKiBrcHJvYmUubXVsdGkva3JldHByb2JlLm11bHRpL2twcm9iZS5zZXNzaW9uIGFyZSBvdXQgb2Ygc2NvcGUuXG4rICoga3Byb2JlL2tyZXRwcm9iZSBzdWJ0ZXN0cyBuZWVkIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSAoZS5nLiBub3Qgb25cbisgKiBhcm02NCkgYW5kIGFyZSBza2lwcGVkIG90aGVyd2lzZS5cbisgKi9cbitcbisjZGVmaW5lIEZUUkFDRV9FTkFCTEVEX1BBVEggXCIvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9lbmFibGVkXCJcbitcbitzdGF0aWMgaW50IHJlYWRfZnRyYWNlX2VuYWJsZWQoaW50ICp2YWwpXG4re1xuK1x0Y2hhciBidWZbMTZdID0ge307XG4rXHRpbnQgZmQsIG47XG4rXG4rXHRmZCA9IG9wZW4oRlRSQUNFX0VOQUJMRURfUEFUSCwgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1x0biA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTtcbitcdGNsb3NlKGZkKTtcbitcdGlmIChuIFx1MDAzYz0gMClcbitcdFx0cmV0dXJuIC1FSU87XG4rXHQqdmFsID0gYXRvaShidWYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciAtZXJybm8gb24gd3JpdGUgZmFpbHVyZS4gKi9cbitzdGF0aWMgaW50IHdyaXRlX2Z0cmFjZV9lbmFibGVkKGludCB2YWwpXG4re1xuK1x0Y2hhciBidWZbNF07XG4rXHRpbnQgZmQsIG4sIGxlbiwgZXJyID0gMDtcbitcbitcdGZkID0gb3BlbihGVFJBQ0VfRU5BQkxFRF9QQVRILCBPX1dST05MWSk7XG4rXHRpZiAoZmQgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtZXJybm87XG4rXHRsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVkXCIsIHZhbCk7XG4rXHRuID0gd3JpdGUoZmQsIGJ1ZiwgbGVuKTtcbitcdGlmIChuIFx1MDAzYyAwKVxuK1x0XHRlcnIgPSAtZXJybm87XG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbisvKlxuKyAqIEF0dGFjaCBAcHJvZywgYXNzZXJ0IGtlcm5lbC5mdHJhY2VfZW5hYmxlZD0wIGlzIHJlZnVzZWQgd2hpbGUgYXR0YWNoZWRcbisgKiBhbmQgc3RheXMgYXQgMSwgdGhlbiBkZXRhY2ggYW5kIGFzc2VydCB0aGUgZGlzYWJsZSBub3cgc3VjY2VlZHMuXG4rICovXG4rc3RhdGljIHZvaWQgY2hlY2tfYmxvY2tzX2Rpc2FibGUoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHN0cnVjdCBicGZfbGluayAqbGluaztcbitcdGludCB2YWwsIGVycjtcbitcbitcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKHByb2cpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGxpbmssIG5hbWUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSB3cml0ZV9mdHJhY2VfZW5hYmxlZCgwKTtcbitcdEFTU0VSVF9FUShlcnIsIC1FQlVTWSwgXCJkaXNhYmxlX3JlZnVzZWRcIik7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZWFkX2Z0cmFjZV9lbmFibGVkKFx1MDAyNnZhbCksIFwicmVhZF9iYWNrXCIpKVxuK1x0XHRnb3RvIGRldGFjaDtcbitcdEFTU0VSVF9FUSh2YWwsIDEsIFwic3RpbGxfZW5hYmxlZFwiKTtcbitcbitkZXRhY2g6XG4rXHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbitcbitcdEFTU0VSVF9PSyh3cml0ZV9mdHJhY2VfZW5hYmxlZCgwKSwgXCJkaXNhYmxlX2FmdGVyX2RldGFjaFwiKTtcbitcdEFTU0VSVF9PSyh3cml0ZV9mdHJhY2VfZW5hYmxlZCgxKSwgXCJyZWVuYWJsZVwiKTtcbit9XG4rXG4rLyogQXR0YWNoIEBwcm9nIHdoaWxlIGZ0cmFjZV9lbmFibGVkPTAgYW5kIGFzc2VydCBpdCBpcyByZWZ1c2VkLiAqL1xuK3N0YXRpYyB2b2lkIGNoZWNrX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3QgY2hhciAqbmFtZSlcbit7XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyh3cml0ZV9mdHJhY2VfZW5hYmxlZCgwKSwgXCJkaXNhYmxlXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChwcm9nKTtcbitcdGlmICghQVNTRVJUX0VSUl9QVFIobGluaywgbmFtZSkpXG4rXHRcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuK1xuK1x0QVNTRVJUX09LKHdyaXRlX2Z0cmFjZV9lbmFibGVkKDEpLCBcInJlZW5hYmxlXCIpO1xuK31cbitcbit2b2lkIHRlc3RfZnRyYWNlX3Blcm1hbmVudCh2b2lkKVxuK3tcbitcdHN0cnVjdCBmdHJhY2VfcGVybWFuZW50ICpza2VsO1xuK1x0Ym9vbCBrcHJvYmVzX29uX2Z0cmFjZTtcbitcdGludCBvcmlnID0gMTtcbitcbitcdC8qIFNhdmUgYW5kIGFsd2F5cyByZXN0b3JlIGZ0cmFjZV9lbmFibGVkLiAqL1xuK1x0aWYgKHJlYWRfZnRyYWNlX2VuYWJsZWQoXHUwMDI2b3JpZykpIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRza2VsID0gZnRyYWNlX3Blcm1hbmVudF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRnb3RvIHJlc3RvcmU7XG4rXG4rXHRrcHJvYmVzX29uX2Z0cmFjZSA9IHNrZWwtXHUwMDNla2NvbmZpZy1cdTAwM2VDT05GSUdfS1BST0JFU19PTl9GVFJBQ0U7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImZlbnRyeV9ibG9ja3NfZGlzYWJsZVwiKSlcbitcdFx0Y2hlY2tfYmxvY2tzX2Rpc2FibGUoc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2ZlbnRyeSwgXCJhdHRhY2hfZmVudHJ5XCIpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJmZXhpdF9ibG9ja3NfZGlzYWJsZVwiKSlcbitcdFx0Y2hlY2tfYmxvY2tzX2Rpc2FibGUoc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2ZleGl0LCBcImF0dGFjaF9mZXhpdFwiKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia3Byb2JlX2Jsb2Nrc19kaXNhYmxlXCIpKSB7XG4rXHRcdGlmIChrcHJvYmVzX29uX2Z0cmFjZSlcbitcdFx0XHRjaGVja19ibG9ja3NfZGlzYWJsZShza2VsLVx1MDAzZXByb2dzLnRlc3Rfa3Byb2JlLCBcImF0dGFjaF9rcHJvYmVcIik7XG4rXHRcdGVsc2VcbitcdFx0XHR0ZXN0X19za2lwKCk7XG4rXHR9XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImtyZXRwcm9iZV9ibG9ja3NfZGlzYWJsZVwiKSkge1xuK1x0XHRpZiAoa3Byb2Jlc19vbl9mdHJhY2UpXG4rXHRcdFx0Y2hlY2tfYmxvY2tzX2Rpc2FibGUoc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2tyZXRwcm9iZSwgXCJhdHRhY2hfa3JldHByb2JlXCIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0dGVzdF9fc2tpcCgpO1xuK1x0fVxuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJmZW50cnlfYXR0YWNoX3doaWxlX2Rpc2FibGVkX3JlZnVzZWRcIikpXG4rXHRcdGNoZWNrX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkKHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9mZW50cnksIFwiYXR0YWNoX2ZlbnRyeVwiKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwia3Byb2JlX2F0dGFjaF93aGlsZV9kaXNhYmxlZF9yZWZ1c2VkXCIpKSB7XG4rXHRcdGlmIChrcHJvYmVzX29uX2Z0cmFjZSlcbitcdFx0XHRjaGVja19hdHRhY2hfd2hpbGVfZGlzYWJsZWRfcmVmdXNlZChza2VsLVx1MDAzZXByb2dzLnRlc3Rfa3Byb2JlLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFwiYXR0YWNoX2twcm9iZVwiKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHRlc3RfX3NraXAoKTtcbitcdH1cbitcbitcdGZ0cmFjZV9wZXJtYW5lbnRfX2Rlc3Ryb3koc2tlbCk7XG4rcmVzdG9yZTpcbitcdHdyaXRlX2Z0cmFjZV9lbmFibGVkKG9yaWcpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZnRyYWNlX3Blcm1hbmVudC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2Z0cmFjZV9wZXJtYW5lbnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmNhNzA2ZDhlZGMyM2Jcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9mdHJhY2VfcGVybWFuZW50LmNcbkBAIC0wLDAgKzEsNDMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBDcm93ZFN0cmlrZSAqL1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK2V4dGVybiBib29sIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSBfX2tjb25maWcgX193ZWFrO1xuK1xuKy8qIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSB0byBoYXZlIENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSB1c2VkIGFuZFxuKyAqIGFkZGVkIHRvIG9iamVjdCBCVEYsIHNvIHRoZSB1c2Vyc3BhY2Ugc2lkZSBjYW4gcmVhZCBpdCBiYWNrIHZpYVxuKyAqIHNrZWwtXHUwMDNla2NvbmZpZy1cdTAwM2VDT05GSUdfS1BST0JFU19PTl9GVFJBQ0UuXG4rICovXG4raW50IHVudXNlZCh2b2lkKVxuK3tcbitcdHJldHVybiBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0UgPyAwIDogMTtcbit9XG4rXG4rU0VDKFwiZmVudHJ5L2JwZl9mZW50cnlfdGVzdDFcIilcbitpbnQgQlBGX1BST0codGVzdF9mZW50cnksIGludCBhKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJmZXhpdC9icGZfZmVudHJ5X3Rlc3QyXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfZmV4aXQsIGludCBhLCBfX3U2NCBiKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJrcHJvYmUvYnBmX2ZlbnRyeV90ZXN0M1wiKVxuK2ludCB0ZXN0X2twcm9iZShzdHJ1Y3QgcHRfcmVncyAqY3R4KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJrcmV0cHJvYmUvYnBmX2ZlbnRyeV90ZXN0NFwiKVxuK2ludCBCUEZfS1JFVFBST0JFKHRlc3Rfa3JldHByb2JlKVxuK3tcbitcdHJldHVybiAwO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ3OjQxLjc2NjY0NzI4N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MzIzODAwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCB0aGV5J3JlIGFkZGluZyBgRlRSQUNFX09QU19GTF9QRVJNQU5FTlRgIHRvIHRoZSBgZGlyZWN0X29wcy5mbGFnc2Agd2l0aGluIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AsIGFuZCBhbHNvIHRvIGBrcHJvYmVfZnRyYWNlX29wcy5mbGFnc2AgYW5kIGBrcHJvYmVfaXBtb2RpZnlfb3BzLmZsYWdzYCBpbiBga2VybmVsL2twcm9iZXMuY2AuXCIgVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBBZGRpbmcgdGhhdCBmbGFnIG1lYW5zIHRoZXNlIGZ0cmFjZSBvcGVyYXRpb25zLCBpbiB0aGUgY29udGV4dCBvZiBCUEYgYW5kIGtwcm9iZXMgcmVzcGVjdGl2ZWx5LCBhcmUgbm93ICpwZXJtYW5lbnQqLiBUaGV5IGNhbid0IGJlIGRpc2FibGVkIG9uY2UgcmVnaXN0ZXJlZCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBiZWhhdmlvcmFsIG1vZGlmaWNhdGlvbi5cblxuVG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgYXJlIGJlaW5nIGVtcGxveWVkLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIGBrZXJuZWwva3Byb2Jlcy5jYC4gSSByZWNhbGwgdGhhdCBgZGlyZWN0X29wc2AgaXMgZGVmaW5pdGVseSB1c2VkIGluIGBicGZfdHJhbXBvbGluZS5jYCAob3IgYSBzaW1pbGFyIGZpbGUpIHRvIHJlZ2lzdGVyIHRoZSBmdHJhY2Ugb3BlcmF0aW9ucyB3aXRoaW4gdGhlIEJQRiB0cmFtcG9saW5lLiBBbmQgb2J2aW91c2x5LCBga3Byb2JlX2Z0cmFjZV9vcHNgIGFuZCBga3Byb2JlX2lwbW9kaWZ5X29wc2AgYXJlIHV0aWxpemVkIGluIGBrcHJvYmVzLmNgIGl0c2VsZi5cblxuQWxyaWdodCwgbGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGVyZSB0aGVzZSBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgYXJlIHJlZmVyZW5jZWQgYmV5b25kIHRob3NlIGltbWVkaWF0ZSBmaWxlcy4gS25vd2luZyB0aGUgYnJvYWRlciB1c2FnZSBjb250ZXh0IHdpbGwgYmUgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIHRoZSBwYXRjaCdzIG92ZXJhbGwgaW1wYWN0IGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gVGhlIGFkZGl0aW9uIG9mIHRoZSBCUEYgc2VsZnRlc3QgYGZ0cmFjZV9wZXJtYW5lbnQuY2AgY29uZmlybXMgdGhpcyBpcyBhIGNoYW5nZSB3aXRoIHNwZWNpZmljIGNvbnNlcXVlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ3OjQ3LjM5OTAzMDIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODYzNTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpcmVjdF9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9vcHM7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NC0jaWZkZWYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzU6c3RhdGljIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqZGlyZWN0X29wc19pcF9sb29rdXAoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03Ni17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MS0jZWxzZVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjkyOnN0YXRpYyBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKmRpcmVjdF9vcHNfaXBfbG9va3VwKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXApXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTMte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTg9c3RhdGljIGludCBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXAsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDMtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTA0OlxcdHRyID0gZGlyZWN0X29wc19pcF9sb29rdXAob3BzLCBpcCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTA1LVxcdGlmICghdHIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0yMTA9dm9pZCBicGZfaW1hZ2Vfa3N5bV9kZWwoc3RydWN0IGJwZl9rc3ltICprc3ltKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjE5LS8qXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjIwOiAqIFdlIGhhdmUgb25seSBzaW5nbGUgZGlyZWN0X29wcyB3aGljaCBjb250YWlucyBhbGwgdGhlIGRpcmVjdCBjYWxsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjIxLSAqIHNpdGVzIGFuZCBpcyB0aGUgb25seSBnbG9iYWwgZnRyYWNlX29wcyBmb3IgYWxsIHRyYW1wb2xpbmVzLlxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjI0LSAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIyNTpzdHJ1Y3QgZnRyYWNlX29wcyBkaXJlY3Rfb3BzID0ge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIyNi1cXHQub3BzX2Z1bmMgPSBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjMwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIzMTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWxsb2Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMzIte1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIzMzpcXHR0ci1cXHUwMDNlZm9wcyA9IFxcdTAwMjZkaXJlY3Rfb3BzO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIzNC1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIzNi1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMzc6c3RhdGljIHZvaWQgZGlyZWN0X29wc19mcmVlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpIHsgfVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIzOC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0yMzk9c3RhdGljIHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaF9mcm9tX2lwKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKnB0cilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI1OC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyNTk6c3RhdGljIGludCBkaXJlY3Rfb3BzX2FkZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICphZGRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI2MC17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yNzAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjcxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19kZWwoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkcilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yNzIte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjgyLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjI4MzpzdGF0aWMgaW50IGRpcmVjdF9vcHNfbW9kKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjg0LXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMwMC0gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozMDE6c3RhdGljIGludCBkaXJlY3Rfb3BzX2FsbG9jKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzAyLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMwNy1cXHR0ci1cXHUwMDNlZm9wcy1cXHUwMDNlb3BzX2Z1bmMgPSBicGZfdHJhbXBfZnRyYWNlX29wc19mdW5jO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMwODpcXHQvKiBTZWUgdGhlIGRpcmVjdF9vcHMgaW5pdGlhbGl6ZXIgYWJvdmUgZm9yIHdoeS4gKi9cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMDktXFx0dHItXFx1MDAzZWZvcHMtXFx1MDAzZWZsYWdzIHw9IEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzEyLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMxMzpzdGF0aWMgdm9pZCBkaXJlY3Rfb3BzX2ZyZWUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMTQte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzIwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMyMTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWRkKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKnB0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMjIte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzM1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMzNjpzdGF0aWMgaW50IGRpcmVjdF9vcHNfZGVsKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzM3LXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM0MC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNDE6c3RhdGljIGludCBkaXJlY3Rfb3BzX21vZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzQyLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM1My0jZWxzZVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM1NDpzdGF0aWMgdm9pZCBkaXJlY3Rfb3BzX2ZyZWUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cikgeyB9XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzU1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM1NjpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWxsb2Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNTcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzYwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM2MTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWRkKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzYyLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM2NS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNjY6c3RhdGljIGludCBkaXJlY3Rfb3BzX2RlbChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICphZGRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM2Ny17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNzAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzcxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19tb2Qoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqcHRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4KVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM3Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0zNzc9c3RhdGljIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqYnBmX3RyYW1wb2xpbmVfbG9va3VwKHU2NCBrZXksIHVuc2lnbmVkIGxvbmcgaXApXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zOTMtXFx0XFx0Z290byBvdXQ7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Mzk0OlxcdGlmIChkaXJlY3Rfb3BzX2FsbG9jKHRyKSkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM5NS1cXHRcXHRrZnJlZSh0cik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00MzY9c3RhdGljIGludCB1bnJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ0MS1cXHRpZiAodHItXFx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDQyOlxcdFxcdHJldCA9IGRpcmVjdF9vcHNfZGVsKHRyLCBvbGRfYWRkcik7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDQzLVxcdGVsc2VcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ1ND1zdGF0aWMgaW50IG1vZGlmeV9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDYxLVxcdGlmICh0ci1cXHUwMDNlZnVuYy5mdHJhY2VfbWFuYWdlZCkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQ2MjpcXHRcXHRyZXQgPSBkaXJlY3Rfb3BzX21vZCh0ciwgbmV3X2FkZHIsIGxvY2tfZGlyZWN0X211dGV4KTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NjMtXFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQ3Nz1zdGF0aWMgaW50IHJlZ2lzdGVyX2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ5Mi1cXHRpZiAodHItXFx1MDAzZWZ1bmMuZnRyYWNlX21hbmFnZWQpIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0OTM6XFx0XFx0cmV0ID0gZGlyZWN0X29wc19hZGQodHIsIG5ld19hZGRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00OTQtXFx0fSBlbHNlIHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExOTg9dm9pZCBicGZfdHJhbXBvbGluZV9wdXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEyMTktXFx0aGxpc3RfZGVsKFxcdTAwMjZ0ci1cXHUwMDNlaGxpc3RfaXApO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEyMjA6XFx0ZGlyZWN0X29wc19mcmVlKHRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMjIxLVxcdGtmcmVlKHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MjM9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4Mi1cXHRpZiAoZnRyYWNlX2hhc2hfY291bnQoZGF0YS1cXHUwMDNlcmVnKSkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODM6XFx0XFx0ZXJyID0gdXBkYXRlX2Z0cmFjZV9kaXJlY3RfYWRkKFxcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVxcdTAwM2VyZWcpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODgtXFx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXFx1MDAzZW1vZGlmeSkpIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjg5OlxcdFxcdGVyciA9IHVwZGF0ZV9mdHJhY2VfZGlyZWN0X21vZChcXHUwMDI2ZGlyZWN0X29wcywgZGF0YS1cXHUwMDNlbW9kaWZ5LCB0cnVlKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkwLVxcdFxcdGlmIChlcnIpIHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkxLVxcdFxcdFxcdGlmIChmdHJhY2VfaGFzaF9jb3VudChkYXRhLVxcdTAwM2VyZWcpKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2OTI6XFx0XFx0XFx0XFx0V0FSTl9PTl9PTkNFKHVwZGF0ZV9mdHJhY2VfZGlyZWN0X2RlbChcXHUwMDI2ZGlyZWN0X29wcywgZGF0YS1cXHUwMDNlcmVnKSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY5My1cXHRcXHRcXHRnb3RvIHJvbGxiYWNrX3VubGluaztcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE3MjM9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTczOC1cXHRpZiAoZnRyYWNlX2hhc2hfY291bnQoZGF0YS1cXHUwMDNldW5yZWcpKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3Mzk6XFx0XFx0V0FSTl9PTl9PTkNFKHVwZGF0ZV9mdHJhY2VfZGlyZWN0X2RlbChcXHUwMDI2ZGlyZWN0X29wcywgZGF0YS1cXHUwMDNldW5yZWcpKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQwLVxcdGlmIChmdHJhY2VfaGFzaF9jb3VudChkYXRhLVxcdTAwM2Vtb2RpZnkpKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3NDE6XFx0XFx0V0FSTl9PTl9PTkNFKHVwZGF0ZV9mdHJhY2VfZGlyZWN0X21vZChcXHUwMDI2ZGlyZWN0X29wcywgZGF0YS1cXHUwMDNlbW9kaWZ5LCB0cnVlKSk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDc6NDcuNDQwODk4MDExWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MjYxNzczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGdHJhY2UgUGVybWFuZW5jZSBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIHRoZSBjb2RlJ3Mgc2V0dGluZyBgRlRSQUNFX09QU19GTF9QRVJNQU5FTlRgIGluIGEgZmV3IGtleSBwbGFjZXMuIEl0J3MgZG9pbmcgdGhpcyBvbiBgZGlyZWN0X29wc2AgYW5kIGB0ci1cdTAwM2Vmb3BzYCB3aXRoaW4gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCwgYW5kIGFsc28gb24gYGtwcm9iZV9mdHJhY2Vfb3BzYCBhbmQgYGtwcm9iZV9pcG1vZGlmeV9vcHNgIGluIGBrZXJuZWwva3Byb2Jlcy5jYC4gVGhlIGNvcmUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRoaXMgcHJldmVudHMgc29tZW9uZSBmcm9tIGdsb2JhbGx5IGRpc2FibGluZyBGdHJhY2UgdGhyb3VnaCBgL3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZGAgaWYgQlBGIHRyYW1wb2xpbmVzIG9yIGtwcm9iZXMgYXJlIGFjdGl2ZS4gVGhpcyBpcyBhIGRlbGliZXJhdGUgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGVyZWZvcmUsIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludC5cblxuVGhlIHNlbGZ0ZXN0IGBmdHJhY2VfcGVybWFuZW50LmNgIGNvbmZpcm1zIHRoaXMgYmVoYXZpb3IgYnkgdXNpbmcgYGJwZl9wcm9ncmFtX19hdHRhY2hgIGZvciBgZmVudHJ5YCwgYGZleGl0YCwgYGtwcm9iZWAsIGFuZCBga3JldHByb2JlYCBhdHRhY2htZW50cy4gVGhhdOKAmXMgaGVscGZ1bDsgaXQgbWVhbnMgd2UgaGF2ZSBhIGtub3duIHRlc3RpbmcgYmFzZWxpbmUuIFNpbmNlIHRoZSBhaW0gaXMgdG8gZmluZCB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byB0aGlzIFwicGVybWFuZW50XCIgc3RhdGUsIHRoZSBmdW5jdGlvbnMgaGFuZGxpbmcgQlBGIHRyYW1wb2xpbmUgYW5kIGtwcm9iZSBhdHRhY2htZW50L2RldGFjaG1lbnQgYXJlIGdvaW5nIHRvIGJlIG15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcuXG5cbkZvciBCUEYgdHJhbXBvbGluZXMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50cyB0byB0cmlnZ2VyIHRoZSBwZXJtYW5lbmNlIGJlaGF2aW9yLiBPbiB0aGUga3Byb2JlIHNpZGUsIGByZWdpc3Rlcl9rcHJvYmVgIGFuZCBgdW5yZWdpc3Rlcl9rcHJvYmVgIGFyZSBnb2luZyB0byBiZSBrZXkuXG5cbkkgdGhpbmsgSSdsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBrZXJuZWwva3Byb2Jlcy5jYCBhbmQgc3BlY2lmaWNhbGx5IGBrcHJvYmVfZnRyYWNlX29wc2AuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaXMgc2V0IHVwIHdpbGwgZ2l2ZSBhIGdvb2QgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0Nzo1My43MzM1MTgwMzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2NTk2MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3Byb2JlX2Z0cmFjZV9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2twcm9iZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwva3Byb2Jlcy5jPTExMTg9c3RhdGljIHN0cnVjdCBrcHJvYmUgKmFsbG9jX2FnZ3Jfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApXFxuLS1cXG5rZXJuZWwva3Byb2Jlcy5jLTExMjUtLyogU2FtZSBwcm90ZWN0aW9uIGxpdmVwYXRjaCBnaXZlcyBpdHMgb3duIGZ0cmFjZV9vcHMuICovXFxua2VybmVsL2twcm9iZXMuYzoxMTI2OnN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyBrcHJvYmVfZnRyYWNlX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbmtlcm5lbC9rcHJvYmVzLmMtMTEyNy1cXHQuZnVuYyA9IGtwcm9iZV9mdHJhY2VfaGFuZGxlcixcXG4tLVxcbmtlcm5lbC9rcHJvYmVzLmM9MTE2Nz1zdGF0aWMgaW50IGFybV9rcHJvYmVfZnRyYWNlKHN0cnVjdCBrcHJvYmUgKnApXFxuLS1cXG5rZXJuZWwva3Byb2Jlcy5jLTExNzEtXFx0cmV0dXJuIF9fYXJtX2twcm9iZV9mdHJhY2UocCxcXG5rZXJuZWwva3Byb2Jlcy5jOjExNzI6XFx0XFx0aXBtb2RpZnkgPyBcXHUwMDI2a3Byb2JlX2lwbW9kaWZ5X29wcyA6IFxcdTAwMjZrcHJvYmVfZnRyYWNlX29wcyxcXG5rZXJuZWwva3Byb2Jlcy5jLTExNzMtXFx0XFx0aXBtb2RpZnkgPyBcXHUwMDI2a3Byb2JlX2lwbW9kaWZ5X2VuYWJsZWQgOiBcXHUwMDI2a3Byb2JlX2Z0cmFjZV9lbmFibGVkKTtcXG4tLVxcbmtlcm5lbC9rcHJvYmVzLmM9MTIwMT1zdGF0aWMgaW50IGRpc2FybV9rcHJvYmVfZnRyYWNlKHN0cnVjdCBrcHJvYmUgKnApXFxuLS1cXG5rZXJuZWwva3Byb2Jlcy5jLTEyMDUtXFx0cmV0dXJuIF9fZGlzYXJtX2twcm9iZV9mdHJhY2UocCxcXG5rZXJuZWwva3Byb2Jlcy5jOjEyMDY6XFx0XFx0aXBtb2RpZnkgPyBcXHUwMDI2a3Byb2JlX2lwbW9kaWZ5X29wcyA6IFxcdTAwMjZrcHJvYmVfZnRyYWNlX29wcyxcXG5rZXJuZWwva3Byb2Jlcy5jLTEyMDctXFx0XFx0aXBtb2RpZnkgPyBcXHUwMDI2a3Byb2JlX2lwbW9kaWZ5X2VuYWJsZWQgOiBcXHUwMDI2a3Byb2JlX2Z0cmFjZV9lbmFibGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDc6NTMuNzc2MTc5OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDY4NTgwODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqS3Byb2JlL0Z0cmFjZSBJbnRlZ3JhdGlvbiB3aXRoIEJQRiBUcmFtcG9saW5lcyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoYXQgYGFybV9rcHJvYmVfZnRyYWNlYCBhbmQgYGRpc2FybV9rcHJvYmVfZnRyYWNlYCBhcmUgc3BlY2lmaWNhbGx5IHVzZWQgaW4gdGhlIGNvbnRleHQgb2Yga3Byb2JlIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gd2hlbiBkZWFsaW5nIHdpdGggZnRyYWNlLiBUaGF0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaXQncyB0aGUgZ2x1ZSBiZXR3ZWVuIHRoZSBrcHJvYmUgbWVjaGFuaXNtIGFuZCB0aGUgZnRyYWNlIGluZnJhc3RydWN0dXJlLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhlIEJQRiB0cmFtcG9saW5lIGZ1bmN0aW9ucy4gV2UgaGF2ZSBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYC4gVGhlc2UgYXJlIHRoZSBjb3JlIEJQRiBmdW5jdGlvbnMgaW52b2x2ZWQuIFNwZWNpZmljYWxseSB0aGUgbGlua2luZy91bmxpbmtpbmcsIGFuZCBtdWx0aS1hdHRhY2gvZGV0YWNoIHN1Z2dlc3QgdGhleSBhcmUgaGFuZGxpbmcgdGhlIGluamVjdGlvbi9yZW1vdmFsIG9mIEJQRiBwcm9ncmFtcyBpbnRvIHRoZSBleGVjdXRpb24gZmxvdy5cblxuSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24uIExldCBtZSBwdWxsIHVwIGBrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY2AgYW5kIHRha2UgYSBsb29rIGF0IGBicGZfdHJhbXBvbGluZV9saW5rX3Byb2dgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbWFnaWMgaGFwcGVucywgSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBwcm9ncmFtcyBhcmUgYmVpbmcgaG9va2VkIGFuZCB1bmhvb2tlZC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgdHJhbXBvbGluZSBhcmNoaXRlY3R1cmUsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24gcGF0Y2hpbmcsIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMgaW4gdGhhdCBwcm9jZXNzLiBJIHN1c3BlY3QgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgZG9lcyB0aGUgaW5pdGlhbCBzZXR1cCwgYW5kIHRoZW4gdGhlIG90aGVycyBoYW5kbGUgY2xlYW51cCBhbmQgbXVsdGktcHJvZ3JhbSBzY2VuYXJpb3MuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzQxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ3OjU4LjI0NDc2MzQ5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDY3NDA0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9ODk3PXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MTUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTE2OnN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkxNy1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTU2LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk1NzppbnQgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTYzLVxcdHRyYW1wb2xpbmVfbG9jayh0cik7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTY0OlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKG5vZGUsIHRyLCB0Z3RfcHJvZywgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NjUtXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA4Nz1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTI5LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMzA6XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNnNoaW1fbGluay1cXHUwMDNlbGluay5ub2RlLCB0ciwgTlVMTCwgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMTMxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjIzPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NzItXFx0XFx0ZGF0YS1cXHUwMDNlZW50cnkgPSBcXHUwMDI2bW5vZGUtXFx1MDAzZWVudHJ5O1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2NzM6XFx0XFx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSwgTlVMTCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjc0LVxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2dHJhbXBvbGluZV9tdWx0aV9vcHMsIGRhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0Nzo1OC4yODU0MzkzMThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDI5MjgwMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRhcmdldGluZyBLZXkgRnVuY3Rpb25zIGZvciBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gc3RhcnQgbXkgZGVlcCBkaXZlLCBJJ20gbGVhbmluZyBoZWF2aWx5IHRvd2FyZHMgdGhvc2UgQlBGIHRyYW1wb2xpbmUgZnVuY3Rpb25zOiBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYC4gVGhleSBzZWVtIGxpa2UgcHJpbWUgY2FuZGlkYXRlcyBmb3IgdW5kZXJzdGFuZGluZyBob3cgQlBGIHByb2dyYW1zIGFyZSBsaW5rZWQgYW5kIHVubGlua2VkLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggbXVsdGktYXR0YWNoIHNjZW5hcmlvcy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IHRob3NlIGhvb2tzIGFyZSBpbXBsZW1lbnRlZC5cblxuVGhlbiwgbW92aW5nIG9uIHRvIGtwcm9iZXMsIHRoZSBvYnZpb3VzIHN1c3BlY3RzIGFyZSBgcmVnaXN0ZXJfa3Byb2JlYCwgYHVucmVnaXN0ZXJfa3Byb2JlYCwgYHJlZ2lzdGVyX2tyZXRwcm9iZWAsIGFuZCBgdW5yZWdpc3Rlcl9rcmV0cHJvYmVgLiBUaGF0IHdob2xlIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gbGlmZWN5Y2xlIGZvciBrZXJuZWwgcHJvYmVzIGlzIGNydWNpYWwsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgdGhlcmUgd2lsbCBiZSBrZXkuXG5cbkZpbmFsbHksIGxldCdzIG5vdCBmb3JnZXQgdGhhdCBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgIGZ1bmN0aW9uLCBhc3NvY2lhdGVkIHdpdGggdGhhdCBgZnRyYWNlX2VuYWJsZWRgIHN5c2N0bCB3cml0ZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBsb2NhdGlvbiBhbmQgd2hhdCBpdCdzIHJlYWxseSBkb2luZyB1bmRlciB0aGUgaG9vZC4gRnRyYWNlJ3MgY29udHJvbCBvZiB0cmFjaW5nIGlzIGEgcG93ZXJmdWwgbWVjaGFuaXNtLCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgaXQgdGllcyBpbiB3aXRoIGV2ZXJ5dGhpbmcgZWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzOTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6MDIuNzE0NzIyMTUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzg0MjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdHJhY2VfZW5hYmxlX3N5c2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9mdHJhY2UuYz05MzkyPXN0YXRpYyBpbnRcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6OTM5MzpmdHJhY2VfZW5hYmxlX3N5c2N0bChjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy05Mzk0LVxcdFxcdCAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYz05NDMzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGZ0cmFjZV9zeXNjdGxzW10gPSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTQzOC1cXHRcXHQubW9kZSAgICAgICAgICAgPSAwNjQ0LFxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo5NDM5OlxcdFxcdC5wcm9jX2hhbmRsZXIgICA9IGZ0cmFjZV9lbmFibGVfc3lzY3RsLFxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy05NDQwLVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ4OjAyLjc1ODU2OTA3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTE0MDE0MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCdzIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBoaW5nZXMgZGlyZWN0bHkgb24gYGZ0cmFjZV9lbmFibGVfc3lzY3RsYCwgbWFraW5nIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBhIGZvY3VzZWQgaW52ZXN0aWdhdGlvbi4gVGhlIGZpcnN0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgd2UncmUgbGlrZWx5IGxvb2tpbmcgYXQgc29tZSBrZXkgQlBGIGFuZCB0cmFjaW5nIG9wdGlvbnMuIEknbGwgbmVlZCB0byBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfQlBGX1NZU0NBTExgLCBgQ09ORklHX0tQUk9CRVNgLCBgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFYCwgYENPTkZJR19GVFJBQ0VgLCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCwgYW5kIGNydWNpYWxseSwgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuXG5cbkdpdmVuIHRoYXQgbGFzdCBvbmUsIEkgc2hvdWxkIHJlYWxseSBjaGVjayBga2VybmVsL2JwZi90cmFtcG9saW5lLmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2Agd2lsbCBjb21lIGludG8gcGxheSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMDYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6MDcuMjcyNTg1MDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODQxMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02Mj1zdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTY4LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjY5OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MC1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MjEwPXZvaWQgYnBmX2ltYWdlX2tzeW1fZGVsKHN0cnVjdCBicGZfa3N5bSAqa3N5bSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIxNi1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMTc6I2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIxOC0jaWZkZWYgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0zNzE9c3RhdGljIGludCBkaXJlY3Rfb3BzX21vZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNzQtfVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM3NTojZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzc2LVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9Njg0PXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MTctXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzE4OiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03MTktYWdhaW46XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NzAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzcxOiNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03NzItXFx0aWYgKGVyciA9PSAtRUFHQUlOKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNDc4PWludCBfX3dlYWsgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTQ4My1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNDg0OiNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE0ODUtICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzIzPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NTctXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc1ODojZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTc1OS1cXHQgIENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUyBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0ODowNy4zMTU0Mjk0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEyNTQyNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBkaXJlY3Rfb3BzYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIGRpcmVjdCBjYWxscyBpbiBmdHJhY2UuIFRoZSBgI2lmZGVmYCBkaXJlY3RpdmVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgcmVsYXRlZCB0byBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AsIGNvbmZpcm0gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjb25maWd1cmF0aW9ucyBiZWluZyBhY3RpdmUgb3IgaW5hY3RpdmUsIGFzIHRoZXknbGwgb2J2aW91c2x5IGNvbmRpdGlvbiB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoZXNlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFyZSBiZWluZyBhcHBsaWVkIGFuZCB3aGF0IGVmZmVjdCB0aGF0IHdpbGwgaGF2ZSBvbiB0aGUgZnVuY3Rpb25hbGl0eS5cblxuR2l2ZW4gdGhlIGNvbm5lY3Rpb24gdG8gZGlyZWN0IGNhbGxzIGFuZCBmdHJhY2UsIEkgc2hvdWxkIGFsc28gZG91YmxlIGNoZWNrIHRoZSByZWxhdGVkIGtwcm9iZSBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0VgIGlzIGFwcHJvcHJpYXRlbHkgaGFuZGxlZCwgc2luY2Uga3Byb2JlcyBvZnRlbiB3b3JrIGluIHRhbmRlbSB3aXRoIGZ1bmN0aW9uIHRyYWNpbmcuIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGxvb2tpbmcgaW4gYGtlcm5lbC9rcHJvYmVzLmNgIGZvciBhbnkgcmVsYXRlZCBsb2dpYyBvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE1OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ4OjEwLjkyNzk3NDU0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzNTk3MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9rcHJvYmVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2twcm9iZXMuYz0xMTE4PXN0YXRpYyBzdHJ1Y3Qga3Byb2JlICphbGxvY19hZ2dyX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKVxcbi0tXFxua2VybmVsL2twcm9iZXMuYy0xMTIzLVxcbmtlcm5lbC9rcHJvYmVzLmM6MTEyNDojaWZkZWYgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFXFxua2VybmVsL2twcm9iZXMuYy0xMTI1LS8qIFNhbWUgcHJvdGVjdGlvbiBsaXZlcGF0Y2ggZ2l2ZXMgaXRzIG93biBmdHJhY2Vfb3BzLiAqL1xcbi0tXFxua2VybmVsL2twcm9iZXMuYz0xMjEwPXZvaWQga3Byb2JlX2Z0cmFjZV9raWxsKHZvaWQpXFxuLS1cXG5rZXJuZWwva3Byb2Jlcy5jLTEyMTMtfVxcbmtlcm5lbC9rcHJvYmVzLmM6MTIxNDojZWxzZVxcdC8qICFDT05GSUdfS1BST0JFU19PTl9GVFJBQ0UgKi9cXG5rZXJuZWwva3Byb2Jlcy5jLTEyMTUtc3RhdGljIGlubGluZSBpbnQgYXJtX2twcm9iZV9mdHJhY2Uoc3RydWN0IGtwcm9iZSAqcClcXG4tLVxcbmtlcm5lbC9rcHJvYmVzLmM9MTU5ND1zdGF0aWMgaW50IGNoZWNrX2Z0cmFjZV9sb2NhdGlvbihzdHJ1Y3Qga3Byb2JlICpwKVxcbi0tXFxua2VybmVsL2twcm9iZXMuYy0xNTk4LVxcdGlmIChmdHJhY2VfbG9jYXRpb24oYWRkcikgPT0gYWRkcikge1xcbmtlcm5lbC9rcHJvYmVzLmM6MTU5OTojaWZkZWYgQ09ORklHX0tQUk9CRVNfT05fRlRSQUNFXFxua2VybmVsL2twcm9iZXMuYy0xNjAwLVxcdFxcdHAtXFx1MDAzZWZsYWdzIHw9IEtQUk9CRV9GTEFHX0ZUUkFDRTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6MTAuOTcwMzM2ODA0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNDg3MTYzMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBDb251bmRydW1zKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyB0cmFjaW5nIHNldHVwLiBJbml0aWFsbHksIEkgdGhvdWdodCBJIG5lZWRlZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLCBhbmQgYEtQUk9CRVNfT05fRlRSQUNFYC4gQnV0IHRoZW4gaXQgaGl0cyBtZTogaG9sZCBvbiwgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYCBpcyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZywgcmlnaHQ/IFdlIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgaXQgaWYgdGhlIGFyY2hpdGVjdHVyZSBhbHJlYWR5IHRha2VzIGNhcmUgb2YgaXQuIEFuZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLi4uIHRoYXQncyBvZnRlbiBhcmNoaXRlY3R1cmUtc2VsZWN0ZWQgdG9vLCBpc24ndCBpdD8gU2FtZSBnb2VzIGZvciBgS1BST0JFU19PTl9GVFJBQ0VgOyBpdCdzIHNlbGVjdGVkIGJ5IGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LlxuXG5BbHJpZ2h0LCBhIGNsZWFuZXIsIG1vcmUgZ2VuZXJhbGl6ZWQgYXBwcm9hY2ggdGhlbi4gU2VlbXMgbGlrZSBJIHNob3VsZCBqdXN0IHNwZWNpZnkgdGhlIGNvcmUsIGFyY2hpdGVjdHVyZS1hZ25vc3RpYyBvcHRpb25zOiBgRlRSQUNFYCwgYERZTkFNSUNfRlRSQUNFYCwgYEtQUk9CRVNgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9KSVRgLiBUaGF0IHNob3VsZCBnaXZlIHVzIHRoZSBmb3VuZGF0aW9uIHdlIG5lZWQuIEJ1dCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgaWYgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBpcyBldmVyIGFjdHVhbGx5IGEgdXNlci1zZWxlY3RhYmxlIGNvbmZpZzsganVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4MjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6MTYuMTE5MDU2MzQyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQwODY1OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MzI0PWNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyOC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMjk6Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6MTcuNjU5OTI2OTA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDk0Mzk4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCdzIG15IG93biBpbnRlcm5hbCBkaWFsb2d1ZTpcblxuKipEZXBlbmRlbmN5IEV2YWx1YXRpb24gZm9yIGBkZWZfYm9vbCB5YCoqXG5cbkFscmlnaHQsIHNvIHdlJ3ZlIGdvdCB0aGlzIGBkZWZfYm9vbCB5YC4gVGhlIGNvcmUgY29uY2VwdCBoZXJlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgaXRzIGRlZmluZWQgc3RhdGUgZGVwZW5kcyBvbiB0aGUgc3VjY2Vzc2Z1bCBmdWxmaWxsbWVudCBvZiBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGNsYXNzaWMsIHJpZ2h0PyBJdCdzIG5vdCBtYWdpYywgaXQncyBqdXN0IGhvdyBhbnkgbG9naWNhbCBjb25zdHJ1Y3Rpb24gd29ya3MuIElmIHRoZSBpbnB1dHMgYXJlbid0IHZhbGlkLCB0aGUgb3V0cHV0IGNhbid0IGJlIHRydXN0ZWQuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAsIGxvZ2ljYWxseSwgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHZhbGlkYXRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzLiBXaGF0IGFyZSB0aGV5PyBBcmUgdGhleSBzYXRpc2ZpZWQ/IFdoYXQncyB0aGUgc3RhdGUgb2YgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBvciB3aGF0ZXZlciB0aGV5J3JlIGxpbmtlZCB0bz8gVGhpcyBpc24ndCBqdXN0IGEgY3Vyc29yeSBnbGFuY2U7IEkgbmVlZCB0byBkcmlsbCBkb3duIHRvIGNvbmZpcm0gdGhlIHZhbGlkaXR5IG9mIGVhY2ggZWxlbWVudCB1cG9uIHdoaWNoIGB5YCByZWxpZXMuIE5vIHNob3J0Y3V0cy4gV2UgbmVlZCB0byBiZSByaWdvcm91c2x5IHRob3JvdWdoIHRvIGF2b2lkIGFueSBjYXNjYWRpbmcgZmFpbHVyZXMgZG93biB0aGUgbGluZS4gV2UgY2FuJ3QgaGF2ZSBgeWAgcmV0dXJuaW5nIGEgdmFsdWUgYmFzZWQgb24gYSBmYXVsdHkgcHJlZGljYXRlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLiBXZSBuZWVkIHRvIGJlIG1ldGljdWxvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDA5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6MjIuODY5MzY4NjgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTkyOTk4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz00Nz1jb25maWcgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTQ5LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjUwOmNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL3RyYWNlL0tjb25maWctNTEtXFx0Ym9vbFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9MzI0PWNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMyOC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzozMjk6Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVxcdGRlZl9ib29sIHlcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzEtXFx0ZGVwZW5kcyBvbiBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1MgfHwgRFlOQU1JQ19GVFJBQ0VfV0lUSF9BUkdTXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzMyOlxcdGRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xcbmtlcm5lbC90cmFjZS9LY29uZmlnLTMzMy1cXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTM0Mz1jb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9KTVBcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTM0NS1cXHRkZXBlbmRzIG9uIERZTkFNSUNfRlRSQUNFXFxua2VybmVsL3RyYWNlL0tjb25maWc6MzQ2OlxcdGRlcGVuZHMgb24gRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zNDctXFx0ZGVwZW5kcyBvbiBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfSk1QXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ4OjIyLjkxMTMwMzM1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYyNjI2NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgQW5hbHlzaXMgb2YgS2VybmVsIFRyYWNpbmcgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB0aGUgZW5hYmxlbWVudCBvZiB0aGlzIGZlYXR1cmUgaGluZ2VzIG9uIGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gQW5kIHRoYXQncyBhcmNoLWRlcGVuZGVudCwgd2hpY2ggbWVhbnMgdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlIGlzIGdvaW5nIHRvIGRpY3RhdGUgd2hldGhlciB3ZSBjYW4gZXZlbiB1c2UgdGhpcyBlZmZlY3RpdmVseS5cblxuVG8gYmUgdGhvcm91Z2gsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgYWxzbyBnb3QgYEZUUkFDRWAsIGBEWU5BTUlDX0ZUUkFDRWAsIGBLUFJPQkVTYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBCUEZfSklUYCBhbGwgc2V0LiBUaGV5J3JlIGFsbCByZWxhdGVkLCBhbmQgSSdsbCBuZWVkIGFsbCB0aG9zZSBwaWVjZXMgdG8gYmUgaW4gcGxhY2UgZm9yIGEgcm9idXN0IHNvbHV0aW9uLlxuXG5Pa2F5LCBhbmQgbm93LCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQsIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgc3RhdHVzIG9mIGBLUFJPQkVTX09OX0ZUUkFDRWAuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueSBjb25maWd1cmF0aW9uIGNvbmZsaWN0cywgZXNwZWNpYWxseSBzaW5jZSB0aGlzIHJlbGllcyBvbiBLcHJvYmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA1MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ4OjI2LjU3MzkzMzA0NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NTM4MTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1BST0JFU19PTl9GVFJBQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz0xNjg9Y29uZmlnIE9QVFBST0JFU1xcbi0tXFxuYXJjaC9LY29uZmlnLTE3Mi1cXG5hcmNoL0tjb25maWc6MTczOmNvbmZpZyBLUFJPQkVTX09OX0ZUUkFDRVxcbmFyY2gvS2NvbmZpZy0xNzQtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0ODoyOC4xMzkzMTg1NDNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNzc5MTg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBmb3IgQ29yZSBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21lIGNvcmUgQlBGIHRyYW1wb2xpbmUgZnVuY3Rpb25hbGl0eSwgYW5kIGl0IGxvb2tzIGxpa2UgYGRlZl9ib29sIHlgIGlzIGFsc28gcmVsZXZhbnQuIFRoZSBrZXkgZm9jdXMgYXJlYXMgZm9yIG15IGFuYWx5c2lzIHJpZ2h0IG5vdyBhcmUgZ29pbmcgdG8gYmUgdGhvc2UgQlBGIHRyYW1wb2xpbmUgZnVuY3Rpb25zOiBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYCwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYC4gV2UndmUgYWxzbyBnb3Qgc29tZSBjbGFzc2ljIHRyYWNpbmcgaG9va3MgaW4gdGhlcmU6IGByZWdpc3Rlcl9rcHJvYmVgLCBgdW5yZWdpc3Rlcl9rcHJvYmVgLCBgcmVnaXN0ZXJfa3JldHByb2JlYCwgYHVucmVnaXN0ZXJfa3JldHByb2JlYCwgYW5kIGBmdHJhY2VfZW5hYmxlX3N5c2N0bGAuIEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCBjaGVjayBpZiBgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dgIGV4aXN0cywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBpcyBhIHZpYWJsZSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQyMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0ODozMS43NzcxMTI1N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEyMjYzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTU3PWludCBicGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTY4LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk2OTpzdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk3MC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTkyLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk5MzovKiBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZygpIHNob3VsZCBuZXZlciBmYWlsLiAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk5NDppbnQgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk5NS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl90cmFtcG9saW5lICp0cixcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMDAtXFx0dHJhbXBvbGluZV9sb2NrKHRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDAxOlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMDItXFx0dHJhbXBvbGluZV91bmxvY2sodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTAwNz1zdGF0aWMgdm9pZCBicGZfc2hpbV90cmFtcF9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTAxNS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDE2OlxcdFdBUk5fT05fT05DRShicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhcXHUwMDI2c2hpbV9saW5rLVxcdTAwM2VsaW5rLm5vZGUsIHNoaW1fbGluay1cXHUwMDNldHJhbXBvbGluZSwgTlVMTCkpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMTctXFx0YnBmX3RyYW1wb2xpbmVfcHV0KHNoaW1fbGluay1cXHUwMDNldHJhbXBvbGluZSk7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNzIzPWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3MzMtXFx0XFx0YnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoX2luaXQobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE3MzQ6XFx0XFx0V0FSTl9PTl9PTkNFKF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coXFx1MDAyNm1ub2RlLVxcdTAwM2Vub2RlLCBtbm9kZS1cXHUwMDNldHJhbXBvbGluZSxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzM1LVxcdFxcdFxcdFxcdFxcdE5VTEwsIFxcdTAwMjZ0cmFtcG9saW5lX211bHRpX29wcywgZGF0YSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0ODozMS44MTgzNDA3NDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIzMzE3Mzk0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEtlcm5lbCBTeW1ib2xzIGZvciBQYXRjaCBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBjb25maXJtaW5nIHRoYXQsIHllcywgaXQgZXhpc3RzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgLiBNeSBmaXJzdCB0aG91Z2h0IHdhcyB0byBjaGVjayBpZiBpdCdzIGV4cG9ydGVkIG9yIHN0YXRpYywgYW5kIEkgc2VlIGl0J3Mgc3RhdGljIGluIGBrZXJuZWwvdHJhY2UvZnRyYWNlLmNgLiBXaGlsZSBhIHN0YXRpYyBmdW5jdGlvbiBpc24ndCAqaWRlYWwqIGFzIGEgZm9jdXMsIGl0ICppcyogdGhlIHN5c2N0bCBoYW5kbGVyLCBzbyBpdCdzIHJlbGV2YW50LiBJIGNvbnNpZGVyZWQgaWYgdGhlcmUgd2FzIGEgYmV0dGVyIHN5bWJvbCwgbGlrZSBgZnRyYWNlX3NldF9maWx0ZXJgLCBidXQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIGBmdHJhY2VfZW5hYmxlZGAsIHdoaWNoIGlzIG1hbmFnZWQgYnkgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYC4gU2luY2UgaXQgaXMgc3RhdGljIEkgYmV0dGVyIGNoZWNrIGlmIGBmdHJhY2Vfc3lzY3Rsc2AgaXMgcmVnaXN0ZXJlZCBzb21ld2hlcmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGhvd2V2ZXIsIHRoYXQgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmRvZXMqIHRoZSB3b3JrIGlzIGBmdHJhY2VfZW5hYmxlX3N5c2N0bGAuIFNvIHRoYXQgbmVlZHMgdG8gYmUgaW5jbHVkZWQuXG5cblRoZW4gSSBzaGlmdGVkIGdlYXJzIGEgYml0LiBJIHJlbWVtYmVyZWQgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgYW5kIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2AuIFRob3NlIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIHRoZSBhbmFseXNpcy4gQWxzbywgYHJlZ2lzdGVyX2twcm9iZWAgYW5kIGB1bnJlZ2lzdGVyX2twcm9iZWAgYXJlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSB0aGlua2luZzogYEZUUkFDRWAsIGBEWU5BTUlDX0ZUUkFDRWAsIGBLUFJPQkVTYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBCUEZfSklUYC5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBjb25maWdzLiBUaGUgc2VsZnRlc3RzIHVzZSBgZmVudHJ5YCBhbmQgYGZleGl0YCwgd2hpY2ggcmVxdWlyZSBgQlBGX0pJVGAgYW5kIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AuIFNvLCB5ZXMsIHRoYXQgY29uZmlybXM6IGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYEZUUkFDRWAsIGBEWU5BTUlDX0ZUUkFDRWAsIGFuZCBgS1BST0JFU2AuXG5cbkknbSBub3cgY29uc2lkZXJpbmcgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgYW5kIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgLiBUaGV5J3JlIHJlbGV2YW50IHRvIGBrcHJvYmUubXVsdGlgIGFuZCBga3JldHByb2JlLm11bHRpYC4gQnV0LCB3YWl0LCB0aGUgcGF0Y2ggKmV4cGxpY2l0bHkqIHNheXMgXCJrcHJvYmUubXVsdGkva3JldHByb2JlLm11bHRpL2twcm9iZS5zZXNzaW9uIGFyZSBvdXQgb2Ygc2NvcGUuXCIgT2theSwgdGhlIGNvbW1pdCBtZXNzYWdlIGFsc28gc2F5cyB0aGF0IHRoZXkgYXJlIG91dCBvZiBzY29wZS4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBhZmZlY3QgdGhlbS4gV2h5PyBCZWNhdXNlIGBrcHJvYmUubXVsdGlgIHVzZXMgYGZwcm9iZWAsIHdoaWNoIGxpa2VseSBoYXMgaXRzIG93biBgZnRyYWNlX29wc2AuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgZnByb2JlYCB1c2VzIGBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ4OjQwLjA1MTUxNjg1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NDYzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRlRSQUNFX09QU19GTF9QRVJNQU5FTlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvZnRyYWNlLmM9MzMwPWludCBfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxcbi0tXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTM1MC0jZW5kaWZcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6MzUxOlxcdGlmICghZnRyYWNlX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgKG9wcy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCkpXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTM1Mi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jPTkzODA9c3RhdGljIGJvb2wgaXNfcGVybWFuZW50X29wc19yZWdpc3RlcmVkKHZvaWQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTM4NC1cXHRkb19mb3JfZWFjaF9mdHJhY2Vfb3Aob3AsIGZ0cmFjZV9vcHNfbGlzdCkge1xcbmtlcm5lbC90cmFjZS9mdHJhY2UuYzo5Mzg1OlxcdFxcdGlmIChvcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVClcXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtOTM4Ni1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDY6NDg6NDAuMDk1MTY2OTg4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjkwMzg3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgRlRSQUNFX09QU19GTF9QRVJNQU5FTlQqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gYEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UYC4gRnJvbSB3aGF0IEkgc2VlLCBpdCdzIGV4Y2x1c2l2ZWx5IGFkZGVkIHRvIGBkaXJlY3Rfb3BzYCwgYW5kIHRoZW4gd2l0aGluIHRoZSBjb250ZXh0IG9mIGtwcm9iZXMsIHRvIGBrcHJvYmVfZnRyYWNlX29wc2AgYW5kIGBrcHJvYmVfaXBtb2RpZnlfb3BzYC4gVGhpcyBtZWFucyBteSBtYWluIHBvaW50cyBvZiBlbnRyeSBmb3Igb2JzZXJ2aW5nIHRoaXMgYmVoYXZpb3Igd291bGQgYmUgYGJwZl90cmFtcG9saW5lX2xpbmtfcHJvZ2AgYW5kIGByZWdpc3Rlcl9rcHJvYmVgLCByaWdodD8gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZmxhZyBpcyBiZWluZyB1c2VkLlxuXG5Ib2xkIG9uLi4uIEkgc2VlbSB0byByZWNhbGwgYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAgbWFraW5nIHVzZSBvZiBgZGlyZWN0X29wc2AuIFRoYXQgd2FycmFudHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIExldCBtZSBqdW1wIGludG8gYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCBhbmQgaGF2ZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgLiBJIG5lZWQgdG8gZW5zdXJlIEkndmUgYWNjb3VudGVkIGZvciBldmVyeSBwbGFjZSB0aGF0IHRoaXMgZmxhZyBpcyBzZXQgYW5kIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzI2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA2OjQ4OjQ0LjQyNDIwOTAyNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwMDY3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlyZWN0X29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz03Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX29wcztcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc0LSNpZmRlZiBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3NTpzdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpkaXJlY3Rfb3BzX2lwX2xvb2t1cChzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTc2LXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkxLSNlbHNlXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTI6c3RhdGljIHN0cnVjdCBicGZfdHJhbXBvbGluZSAqZGlyZWN0X29wc19pcF9sb29rdXAoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05My17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05OD1zdGF0aWMgaW50IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcCxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwMy1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDQ6XFx0dHIgPSBkaXJlY3Rfb3BzX2lwX2xvb2t1cChvcHMsIGlwKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDUtXFx0aWYgKCF0cilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTIxMD12b2lkIGJwZl9pbWFnZV9rc3ltX2RlbChzdHJ1Y3QgYnBmX2tzeW0gKmtzeW0pXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMTktLypcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyMjA6ICogV2UgaGF2ZSBvbmx5IHNpbmdsZSBkaXJlY3Rfb3BzIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgZGlyZWN0IGNhbGxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMjEtICogc2l0ZXMgYW5kIGlzIHRoZSBvbmx5IGdsb2JhbCBmdHJhY2Vfb3BzIGZvciBhbGwgdHJhbXBvbGluZXMuXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMjQtICovXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjI1OnN0cnVjdCBmdHJhY2Vfb3BzIGRpcmVjdF9vcHMgPSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjI2LVxcdC5vcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yMzAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjMxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTIzMi17XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjMzOlxcdHRyLVxcdTAwM2Vmb3BzID0gXFx1MDAyNmRpcmVjdF9vcHM7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjM0LVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjM2LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjIzNzpzdGF0aWMgdm9pZCBkaXJlY3Rfb3BzX2ZyZWUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cikgeyB9XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjM4LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTIzOT1zdGF0aWMgc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoX2Zyb21faXAoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqcHRyKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjU4LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjI1OTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWRkKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMjYwLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI3MC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoyNzE6c3RhdGljIGludCBkaXJlY3Rfb3BzX2RlbChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICphZGRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTI3Mi17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yODItXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MjgzOnN0YXRpYyBpbnQgZGlyZWN0X29wc19tb2Qoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0yODQte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzAwLSAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjMwMTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfYWxsb2Moc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMDIte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzA3LVxcdHRyLVxcdTAwM2Vmb3BzLVxcdTAwM2VvcHNfZnVuYyA9IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmM7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzA4OlxcdC8qIFNlZSB0aGUgZGlyZWN0X29wcyBpbml0aWFsaXplciBhYm92ZSBmb3Igd2h5LiAqL1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMwOS1cXHR0ci1cXHUwMDNlZm9wcy1cXHUwMDNlZmxhZ3MgfD0gRlRSQUNFX09QU19GTF9QRVJNQU5FTlQ7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMTItXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzEzOnN0YXRpYyB2b2lkIGRpcmVjdF9vcHNfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMxNC17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMjAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzIxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19hZGQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqcHRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTMyMi17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMzUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzM2OnN0YXRpYyBpbnQgZGlyZWN0X29wc19kZWwoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkcilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zMzcte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzQwLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM0MTpzdGF0aWMgaW50IGRpcmVjdF9vcHNfbW9kKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKnB0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNDIte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzUzLSNlbHNlXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzU0OnN0YXRpYyB2b2lkIGRpcmVjdF9vcHNfZnJlZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKSB7IH1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNTUtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzU2OnN0YXRpYyBpbnQgZGlyZWN0X29wc19hbGxvYyhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM1Ny17XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNjAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MzYxOnN0YXRpYyBpbnQgZGlyZWN0X29wc19hZGQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdm9pZCAqYWRkcilcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0zNjIte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzY1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjM2NjpzdGF0aWMgaW50IGRpcmVjdF9vcHNfZGVsKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHZvaWQgKmFkZHIpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzY3LXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM3MC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozNzE6c3RhdGljIGludCBkaXJlY3Rfb3BzX21vZChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB2b2lkICpwdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzcyLXtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTM3Nz1zdGF0aWMgc3RydWN0IGJwZl90cmFtcG9saW5lICpicGZfdHJhbXBvbGluZV9sb29rdXAodTY0IGtleSwgdW5zaWduZWQgbG9uZyBpcClcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTM5My1cXHRcXHRnb3RvIG91dDtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzozOTQ6XFx0aWYgKGRpcmVjdF9vcHNfYWxsb2ModHIpKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMzk1LVxcdFxcdGtmcmVlKHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTQzNj1zdGF0aWMgaW50IHVucmVnaXN0ZXJfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDQxLVxcdGlmICh0ci1cXHUwMDNlZnVuYy5mdHJhY2VfbWFuYWdlZClcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo0NDI6XFx0XFx0cmV0ID0gZGlyZWN0X29wc19kZWwodHIsIG9sZF9hZGRyKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NDMtXFx0ZWxzZVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDU0PXN0YXRpYyBpbnQgbW9kaWZ5X2ZlbnRyeShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCB1MzIgb3JpZ19mbGFncywgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy00NjEtXFx0aWYgKHRyLVxcdTAwM2VmdW5jLmZ0cmFjZV9tYW5hZ2VkKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NDYyOlxcdFxcdHJldCA9IGRpcmVjdF9vcHNfbW9kKHRyLCBuZXdfYWRkciwgbG9ja19kaXJlY3RfbXV0ZXgpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ2My1cXHR9IGVsc2Uge1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NDc3PXN0YXRpYyBpbnQgcmVnaXN0ZXJfZmVudHJ5KHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNDkyLVxcdGlmICh0ci1cXHUwMDNlZnVuYy5mdHJhY2VfbWFuYWdlZCkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjQ5MzpcXHRcXHRyZXQgPSBkaXJlY3Rfb3BzX2FkZCh0ciwgbmV3X2FkZHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTQ5NC1cXHR9IGVsc2Uge1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTE5OD12b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTIxOS1cXHRobGlzdF9kZWwoXFx1MDAyNnRyLVxcdTAwM2VobGlzdF9pcCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTIyMDpcXHRkaXJlY3Rfb3BzX2ZyZWUodHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEyMjEtXFx0a2ZyZWUodHIpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYyMz1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjgyLVxcdGlmIChmdHJhY2VfaGFzaF9jb3VudChkYXRhLVxcdTAwM2VyZWcpKSB7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4MzpcXHRcXHRlcnIgPSB1cGRhdGVfZnRyYWNlX2RpcmVjdF9hZGQoXFx1MDAyNmRpcmVjdF9vcHMsIGRhdGEtXFx1MDAzZXJlZyk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4NC1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4OC1cXHRpZiAoZnRyYWNlX2hhc2hfY291bnQoZGF0YS1cXHUwMDNlbW9kaWZ5KSkge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODk6XFx0XFx0ZXJyID0gdXBkYXRlX2Z0cmFjZV9kaXJlY3RfbW9kKFxcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVxcdTAwM2Vtb2RpZnksIHRydWUpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTAtXFx0XFx0aWYgKGVycikge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2OTEtXFx0XFx0XFx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXFx1MDAzZXJlZykpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY5MjpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0UodXBkYXRlX2Z0cmFjZV9kaXJlY3RfZGVsKFxcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVxcdTAwM2VyZWcpKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjkzLVxcdFxcdFxcdGdvdG8gcm9sbGJhY2tfdW5saW5rO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTcyMz1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzM4LVxcdGlmIChmdHJhY2VfaGFzaF9jb3VudChkYXRhLVxcdTAwM2V1bnJlZykpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTczOTpcXHRcXHRXQVJOX09OX09OQ0UodXBkYXRlX2Z0cmFjZV9kaXJlY3RfZGVsKFxcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVxcdTAwM2V1bnJlZykpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE3NDAtXFx0aWYgKGZ0cmFjZV9oYXNoX2NvdW50KGRhdGEtXFx1MDAzZW1vZGlmeSkpXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTc0MTpcXHRcXHRXQVJOX09OX09OQ0UodXBkYXRlX2Z0cmFjZV9kaXJlY3RfbW9kKFxcdTAwMjZkaXJlY3Rfb3BzLCBkYXRhLVxcdTAwM2Vtb2RpZnksIHRydWUpKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNzQyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0ODo0NC40NjUyMTk1NTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzODMwNTYzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhc29uaW5nIGZvciBGdXp6aW5nIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSdzIG15IHRyYWluIG9mIHRob3VnaHQuICBJbml0aWFsbHksIHRoZSBjb2RlIHV0aWxpemVzIGBkaXJlY3Rfb3BzYCB3aXRoaW4gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAsIHdoaWNoIG1ha2VzIGBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hgIGFuZCBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfZGV0YWNoYCBpbnRlcmVzdGluZyB0YXJnZXRzIGZvciBmdXp6aW5nLCBhbG9uZyB3aXRoIHRoZSBzdGFuZGFyZCBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYCBhbmQgYGJwZl90cmFtcG9saW5lX3VubGlua19wcm9nYC4gV2UgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBrcHJvYmUgZnVuY3Rpb25zLiBUaGlzIGFsc28gbWFrZXMgdGhlIGtwcm9iZS1yZWxhdGVkIHN5bWJvbHMgb2YgYHJlZ2lzdGVyX2twcm9iZWAsIGB1bnJlZ2lzdGVyX2twcm9iZWAsIGByZWdpc3Rlcl9rcmV0cHJvYmVgLCBhbmQgYHVucmVnaXN0ZXJfa3JldHByb2JlYCBpbXBvcnRhbnQuIExhc3RseSwgd2UgbmVlZCB0byBjb25zaWRlciBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgb3RoZXIgZnVuY3Rpb25zLlxuXG5Ob3csIGNvbmNlcm5pbmcgY29uZmlndXJhdGlvbnMsIHdlIGRlZmluaXRlbHkgbmVlZCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGBGVFJBQ0VgLCBgRFlOQU1JQ19GVFJBQ0VgLCBhbmQgYEtQUk9CRVNgIHRvIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS4gIFRoZSBgZnRyYWNlX2VuYWJsZV9zeXNjdGxgIGlzIGEgYml0IG9mIGEgd3JpbmtsZSBzaW5jZSBpdCdzIHN0YXRpYywgYnV0IFN5emthbGxlciAqY2FuKiBmdXp6IGl0IHRocm91Z2ggYC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2VuYWJsZWRgLCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGBmdHJhY2VfZW5hYmxlX3N5c2N0bGAgdXNlcyB0aGUgc3lzY3RsIGhhbmRsZXIgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYC5cblxuSSBkaWQgYSBiaXQgb2YgY3Jvc3MtY2hlY2tpbmcsIGFuZCB0aGUgc2VsZnRlc3RzIHVzZSBgZmVudHJ5YCBhbmQgYGZleGl0YCwgd2hpY2ggZGVwZW5kIG9uIGBCUEZfSklUYCBhbmQgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gIEhvd2V2ZXIsIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgc2VsZWN0ZWQgYXV0b21hdGljYWxseSBpZiBgSEFWRV9EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgbWV0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgaXQgZGlyZWN0bHkuIFRoZSBzYW1lIGFwcGxpZXMgZm9yIGBDT05GSUdfS1BST0JFU19PTl9GVFJBQ0VgLCBhcyBpdCdzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aXRoIGBIQVZFX0tQUk9CRVNfT05fRlRSQUNFYC5cblxuRmluYWxseSwgdGhlIGNvcmUgcmVhc29uIHRvIGZ1enogdGhpcyBwYXRjaCBpcyBiZWNhdXNlIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgZnVuZGFtZW50YWwga2VybmVsIGxvZ2ljLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBzZXRzIGBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVGAgb24gYGRpcmVjdF9vcHNgIGFuZCBga3Byb2JlX2Z0cmFjZV9vcHNgIC8gYGtwcm9iZV9pcG1vZGlmeV9vcHNgLiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIHByZXZlbnRpbmcgZ2xvYmFsIGZ0cmFjZSBkaXNhYmxpbmcgdmlhIGAvcHJvYy9zeXMva2VybmVsL2Z0cmFjZV9lbmFibGVkYCB3aGVuIEJQRiB0cmFtcG9saW5lcyBvciBrcHJvYmVzIGFyZSBhY3RpdmUuIFRoaXMga2luZCBvZiBjaGFuZ2UgaXMgZXhhY3RseSB0aGUgc29ydCB0aGF0IHdhcnJhbnRzIGRlZXAgZnV6emluZy4gV2Ugd2FudCB0byBlbnN1cmUgaXQgd29ya3MgYXMgaW50ZW5kZWQsIHByZXZlbnRzIHVuZXhwZWN0ZWQgc2lkZS1lZmZlY3RzLCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJhY2VzLlxuXG5JbiBzaG9ydCwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6XG5cbiogICBgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nYFxuKiAgIGBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ2BcbiogICBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYFxuKiAgIGBicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hgXG4qICAgYHJlZ2lzdGVyX2twcm9iZWBcbiogICBgdW5yZWdpc3Rlcl9rcHJvYmVgXG4qICAgYHJlZ2lzdGVyX2tyZXRwcm9iZWBcbiogICBgdW5yZWdpc3Rlcl9rcmV0cHJvYmVgXG4qICAgYGZ0cmFjZV9lbmFibGVfc3lzY3RsYFxuXG53aXRoIHRoZXNlIGVuYWJsZWQgY29uZmlnczpcblxuKiAgIGBCUEZfU1lTQ0FMTGBcbiogICBgQlBGX0pJVGBcbiogICBgRlRSQUNFYFxuKiAgIGBEWU5BTUlDX0ZUUkFDRWBcbiogICBgS1BST0JFU2BcblxuQW5kIHRoZW4gSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTQwLCJPdXRwdXRUb2tlbnMiOjI2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNjo0ODo1Ni44NDgyNzg0NjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTgwMzIxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZUUkFDRVwiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VcIixcbiAgICBcIktQUk9CRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhbXBvbGluZV9saW5rX3Byb2dcIixcbiAgICBcImJwZl90cmFtcG9saW5lX3VubGlua19wcm9nXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2hcIixcbiAgICBcImJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaFwiLFxuICAgIFwicmVnaXN0ZXJfa3Byb2JlXCIsXG4gICAgXCJ1bnJlZ2lzdGVyX2twcm9iZVwiLFxuICAgIFwicmVnaXN0ZXJfa3JldHByb2JlXCIsXG4gICAgXCJ1bnJlZ2lzdGVyX2tyZXRwcm9iZVwiLFxuICAgIFwiZnRyYWNlX2VuYWJsZV9zeXNjdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXRzIEZUUkFDRV9PUFNfRkxfUEVSTUFORU5UIG9uIGRpcmVjdF9vcHMgYW5kIGtwcm9iZV9mdHJhY2Vfb3BzL2twcm9iZV9pcG1vZGlmeV9vcHMuIFRoaXMgcHJldmVudHMgZGlzYWJsaW5nIGZ0cmFjZSBnbG9iYWxseSB2aWEgL3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZW5hYmxlZCB3aGlsZSBCUEYgdHJhbXBvbGluZXMgb3Iga3Byb2JlcyBhcmUgYWN0aXZlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgKEJQRiB0cmFtcG9saW5lIGFuZCBrcHJvYmVzKSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IHByZXZlbnRzIGZ0cmFjZSBkaXNhYmxpbmcgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYXR0YWNoL2RldGFjaCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJGVFJBQ0VcIixcbiAgICBcIkRZTkFNSUNfRlRSQUNFXCIsXG4gICAgXCJLUFJPQkVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZ1wiLFxuICAgIFwiYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoXCIsXG4gICAgXCJicGZfdHJhbXBvbGluZV9tdWx0aV9kZXRhY2hcIixcbiAgICBcInJlZ2lzdGVyX2twcm9iZVwiLFxuICAgIFwidW5yZWdpc3Rlcl9rcHJvYmVcIixcbiAgICBcInJlZ2lzdGVyX2tyZXRwcm9iZVwiLFxuICAgIFwidW5yZWdpc3Rlcl9rcmV0cHJvYmVcIixcbiAgICBcImZ0cmFjZV9lbmFibGVfc3lzY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2V0cyBGVFJBQ0VfT1BTX0ZMX1BFUk1BTkVOVCBvbiBkaXJlY3Rfb3BzIGFuZCBrcHJvYmVfZnRyYWNlX29wcy9rcHJvYmVfaXBtb2RpZnlfb3BzLiBUaGlzIHByZXZlbnRzIGRpc2FibGluZyBmdHJhY2UgZ2xvYmFsbHkgdmlhIC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2VuYWJsZWQgd2hpbGUgQlBGIHRyYW1wb2xpbmVzIG9yIGtwcm9iZXMgYXJlIGFjdGl2ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgdHJhbXBvbGluZSBhbmQga3Byb2JlcykgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBwcmV2ZW50cyBmdHJhY2UgZGlzYWJsaW5nIGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGF0dGFjaC9kZXRhY2ggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowf5q2s[1] Phase: Succeeded StartedAt: 2026-07-30 06:49:07 +0000 UTC FinishedAt: 2026-07-30 06:49:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 06:49:07 +0000 UTC FinishedAt: 2026-07-30 06:49:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2] Phase: Succeeded StartedAt: 2026-07-30 06:49:07 +0000 UTC FinishedAt: 2026-07-30 10:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 06:49:07 +0000 UTC FinishedAt: 2026-07-30 10:33:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 06:49:07 +0000 UTC FinishedAt: 2026-07-30 06:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 06:49:07 +0000 UTC FinishedAt: 2026-07-30 06:49:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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-workflowf5q2s/series-workflowf5q2s-convert-artifact-3303218524/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 06:49:17 +0000 UTC FinishedAt: 2026-07-30 07:07:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 06:49:17 +0000 UTC FinishedAt: 2026-07-30 07:07:15 +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:*f3aa687d-7e06-4c2a-b551-c8d6cd148e73,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-workflowf5q2s/series-workflowf5q2s-convert-artifact-3303218524/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": "648443a9-9591-4b72-8d0c-b41072a35d9b", "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-workflowf5q2s/series-workflowf5q2s-build-action-330649738/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 06:49:17 +0000 UTC FinishedAt: 2026-07-30 07:07:05 +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:*f3aa687d-7e06-4c2a-b551-c8d6cd148e73,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-workflowf5q2s/series-workflowf5q2s-convert-artifact-3303218524/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": "648443a9-9591-4b72-8d0c-b41072a35d9b", "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-workflowf5q2s/series-workflowf5q2s-build-action-330649738/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:07:15 +0000 UTC FinishedAt: 2026-07-30 07:07:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:07:15 +0000 UTC FinishedAt: 2026-07-30 07:07:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:07:15 +0000 UTC FinishedAt: 2026-07-30 07:07:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:07:15 +0000 UTC FinishedAt: 2026-07-30 07:07:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-workflowf5q2s/series-workflowf5q2s-convert-artifact-889868955/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:07:25 +0000 UTC FinishedAt: 2026-07-30 07:09:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:07:25 +0000 UTC FinishedAt: 2026-07-30 07:09:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*648443a9-9591-4b72-8d0c-b41072a35d9b,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-workflowf5q2s/series-workflowf5q2s-build-action-330649738/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-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:09:38 +0000 UTC FinishedAt: 2026-07-30 07:09:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:09:38 +0000 UTC FinishedAt: 2026-07-30 07:09:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:09:38 +0000 UTC FinishedAt: 2026-07-30 07:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:09:38 +0000 UTC FinishedAt: 2026-07-30 07:29:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f3aa687d-7e06-4c2a-b551-c8d6cd148e73,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-workflowf5q2s/series-workflowf5q2s-convert-artifact-889868955/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": "ae399f53-1d7b-4884-ab2d-e941ff7485ee", "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-workflowf5q2s/series-workflowf5q2s-build-action-2539241023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:09:38 +0000 UTC FinishedAt: 2026-07-30 07:29:15 +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:*f3aa687d-7e06-4c2a-b551-c8d6cd148e73,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-workflowf5q2s/series-workflowf5q2s-convert-artifact-889868955/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": "ae399f53-1d7b-4884-ab2d-e941ff7485ee", "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-workflowf5q2s/series-workflowf5q2s-build-action-2539241023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:29:25 +0000 UTC FinishedAt: 2026-07-30 07:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:29:25 +0000 UTC FinishedAt: 2026-07-30 07:29:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:29:25 +0000 UTC FinishedAt: 2026-07-30 07:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:29:25 +0000 UTC FinishedAt: 2026-07-30 07:31:06 +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:*ae399f53-1d7b-4884-ab2d-e941ff7485ee,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-workflowf5q2s/series-workflowf5q2s-build-action-2539241023/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-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:31:17 +0000 UTC FinishedAt: 2026-07-30 10:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:31:17 +0000 UTC FinishedAt: 2026-07-30 10:33:46 +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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"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:*648443a9-9591-4b72-8d0c-b41072a35d9b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae399f53-1d7b-4884-ab2d-e941ff7485ee,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-workflowf5q2s/series-workflowf5q2s-build-action-330649738/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-workflowf5q2s/series-workflowf5q2s-build-action-2539241023/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:31:17 +0000 UTC FinishedAt: 2026-07-30 07:31:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:31:17 +0000 UTC FinishedAt: 2026-07-30 07:31:22 +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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"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-workflowf5q2s/series-workflowf5q2s-convert-artifact-1677247892/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:31:17 +0000 UTC FinishedAt: 2026-07-30 07:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:31:17 +0000 UTC FinishedAt: 2026-07-30 07:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:31:17 +0000 UTC FinishedAt: 2026-07-30 07:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:31:27 +0000 UTC FinishedAt: 2026-07-30 10:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf5q2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"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_link_prog","bpf_trampoline_unlink_prog","bpf_trampoline_multi_attach","bpf_trampoline_multi_detach","register_kprobe","unregister_kprobe","register_kretprobe","unregister_kretprobe","ftrace_enable_sysctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FTRACE","DYNAMIC_FTRACE","KPROBES"],"series_id":"8d9252bb-45b4-475f-9178-3d2bb2bece52","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-07-30 07:31:27 +0000 UTC FinishedAt: 2026-07-30 10:33:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*648443a9-9591-4b72-8d0c-b41072a35d9b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae399f53-1d7b-4884-ab2d-e941ff7485ee,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-workflowf5q2s/series-workflowf5q2s-build-action-330649738/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-workflowf5q2s/series-workflowf5q2s-build-action-2539241023/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-workflowf5q2s/series-workflowf5q2s-convert-artifact-1677247892/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,}