Name: series-workflownpfc2 Phase: Succeeded StartedAt: 2026-07-08 13:06:16 +0000 UTC FinishedAt: 2026-07-08 16:24:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[0] Phase: Succeeded StartedAt: 2026-07-08 13:06:16 +0000 UTC FinishedAt: 2026-07-08 13:41:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 13:06:16 +0000 UTC FinishedAt: 2026-07-08 13:41:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "d2c9a99135da931377240942d44f3dea104cedb8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FINEIBT", "X86_KERNEL_IBT", "CFI", "MITIGATION_RETPOLINE", "BPF_JIT", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "d2c9a99135da931377240942d44f3dea104cedb8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FINEIBT", "X86_KERNEL_IBT", "CFI", "MITIGATION_RETPOLINE", "BPF_JIT", "BPF_SYSCALL" ], "series_id": "56857440-8e4b-4d17-9a0d-847f28f9b1c1" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "emit_bpf_dispatcher", "arch_prepare_bpf_dispatcher" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZJTkVJQlQmIzM0OywKICAgICYjMzQ7WDg2X0tFUk5FTF9JQlQmIzM0OywKICAgICYjMzQ7Q0ZJJiMzNDssCiAgICAmIzM0O01JVElHQVRJT05fUkVUUE9MSU5FJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbWl0X2JwZl9kaXNwYXRjaGVyJiMzNDssCiAgICAmIzM0O2FyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gYWRkIEZpbmVJQlQgc3VwcG9ydCB0byB0aGUgQlBGIGRpc3BhdGNoZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWZmZWN0cyBob3cgQlBGIHByb2dyYW1zIGFyZSBleGVjdXRlZC4gV2Ugc2hvdWxkIGZ1enogdGhlIEJQRiBkaXNwYXRjaGVyIGxvZ2ljIHdpdGggRmluZUlCVCBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTA0ZmEwMjc3M2FmNzNiZmUwNGM0NzNmNjIzYjNmYTMzZTEwNGUxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTM6Mzk6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uMWM4MjQ5ZDhjYTNiMjAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTM3NDAsNiAmIzQzOzM3NDAsMTUgQEAgc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0XHQvKiBJZiBydW5uaW5nIHVuZGVyIEZpbmVJQlQsIGVudGVyIHRoZSBwcmVhbWJsZSBzbyB0aGUgZm9sbG93aW5nXG4mIzQzO1x0XHQgKiBpbmRpcmVjdCBqdW1wIGxhbmRzIG9uIGEgcmVhbCBFTkRCUiBpbnN0ZWFkIG9mIHRoZSBwb2lzb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChjZmlfbW9kZSA9PSBDRklfRklORUlCVCkge1xuJiM0MztcdFx0XHRFTUlUMV9vZmYzMigweGI4LCBjZmlfYnBmX2hhc2gpO1x0LyogbW92ICRjZmlfYnBmX2hhc2gsICVlYXggKi9cbiYjNDM7XHRcdFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgQlBGX1JFR18zKSk7XHQvKiBzdWIgcmR4LCBjZmlfZ2V0X29mZnNldCgpICovXG4mIzQzO1x0XHRcdEVNSVQyX29mZjMyKDB4ODEsIGFkZF8xcmVnKDB4RTgsIEJQRl9SRUdfMyksIGNmaV9nZXRfb2Zmc2V0KCkpO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0ZW1pdF9pbmRpcmVjdF9qdW1wKFx1MDAyNnByb2csIEJQRl9SRUdfMyAvKiBSMyAtXHUwMDNlIHJkeCAqLywgaW1hZ2UgJiM0MzsgKHByb2cgLSBidWYpKTtcbiBcbiBcdFx0KnBwcm9nID0gcHJvZztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmQzZmM0MDM0ZWI5MGNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuY1xuQEAgLTAsMCAmIzQzOzEsNDcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFdpbmRzb3IgKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhlIHg4NiBCUEYgZGlzcGF0Y2hlciYjMzk7cyBpbmRpcmVjdC1qdW1wIGZhbGxiYWNrXG4mIzQzOyAqIHVuZGVyIEZpbmVJQlQuXG4mIzQzOyAqXG4mIzQzOyAqIFdBUk5JTkdcbiYjNDM7ICogLS0tLS0tLVxuJiM0MzsgKiAgVGhpcyB0ZXN0IGNhbiBjcmFzaCB0aGUga2VybmVsLCB0aHVzIHNob3VsZCBiZSBydW4gaW4gYSBWTS5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWZfbGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXR3b3JrX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBJRklOREVYX0xPXHRcdDFcbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGRwX2Rpc3BhdGNoZXJfZmluZWlidCAqc2tlbDtcbiYjNDM7XHRpbnQgZXJyLCBhdHRhY2hlZF9mZCwgdW5hdHRhY2hlZF9mZDtcbiYjNDM7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzLFxuJiM0MztcdFx0LmRhdGFfaW4gPSBcdTAwMjZwa3RfdjQsXG4mIzQzO1x0XHQuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdF92NCksXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHhkcF9kaXNwYXRjaGVyX2ZpbmVpYnRfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YXR0YWNoZWRfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy54ZHBfZGlzcGF0Y2hlcl9hdHRhY2hlZCk7XG4mIzQzO1x0dW5hdHRhY2hlZF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9kaXNwYXRjaGVyX3VuYXR0YWNoZWQpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfeGRwX2F0dGFjaChJRklOREVYX0xPLCBhdHRhY2hlZF9mZCwgWERQX0ZMQUdTX1NLQl9NT0RFLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2F0dGFjaF9wcm9nXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHVuYXR0YWNoZWRfZmQsIFx1MDAyNnRvcHRzKTtcbiYjNDM7XHRBU1NFUlRfT0soZXJyLCBcJiMzNDt1bmF0dGFjaGVkX3Rlc3RfcnVuXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEodG9wdHMucmV0dmFsLCBYRFBfUEFTUywgXCYjMzQ7dW5hdHRhY2hlZF9yZXR2YWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRicGZfeGRwX2RldGFjaChJRklOREVYX0xPLCBYRFBfRkxBR1NfU0tCX01PREUsIE5VTEwpO1xuJiM0MztvdXQ6XG4mIzQzO1x0eGRwX2Rpc3BhdGNoZXJfZmluZWlidF9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI0OWI4NGYwMWM4ZWViXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXG5AQCAtMCwwICYjNDM7MSwxOCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgV2luZHNvciAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3hkcFwmIzM0OylcbiYjNDM7aW50IHhkcF9kaXNwYXRjaGVyX2F0dGFjaGVkKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBYRFBfUEFTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3hkcFwmIzM0OylcbiYjNDM7aW50IHhkcF9kaXNwYXRjaGVyX3VuYXR0YWNoZWQoc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFhEUF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZJTkVJQlQmIzM0OywKICAgICYjMzQ7WDg2X0tFUk5FTF9JQlQmIzM0OywKICAgICYjMzQ7Q0ZJJiMzNDssCiAgICAmIzM0O01JVElHQVRJT05fUkVUUE9MSU5FJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbWl0X2JwZl9kaXNwYXRjaGVyJiMzNDssCiAgICAmIzM0O2FyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gYWRkIEZpbmVJQlQgc3VwcG9ydCB0byB0aGUgQlBGIGRpc3BhdGNoZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWZmZWN0cyBob3cgQlBGIHByb2dyYW1zIGFyZSBleGVjdXRlZC4gV2Ugc2hvdWxkIGZ1enogdGhlIEJQRiBkaXNwYXRjaGVyIGxvZ2ljIHdpdGggRmluZUlCVCBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMDRmYTAyNzczYWY3M2JmZTA0YzQ3M2Y2MjNiM2ZhMzNlMTA0ZTFkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAxMzozOTo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBkZTc1MTVlYTFiZWFlOC4uMWM4MjQ5ZDhjYTNiMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTM3NDAsNiAmIzQzOzM3NDAsMTUgQEAgc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAomIzQzOwkJLyogSWYgcnVubmluZyB1bmRlciBGaW5lSUJULCBlbnRlciB0aGUgcHJlYW1ibGUgc28gdGhlIGZvbGxvd2luZwomIzQzOwkJICogaW5kaXJlY3QganVtcCBsYW5kcyBvbiBhIHJlYWwgRU5EQlIgaW5zdGVhZCBvZiB0aGUgcG9pc29uLgomIzQzOwkJICovCiYjNDM7CQlpZiAoY2ZpX21vZGUgPT0gQ0ZJX0ZJTkVJQlQpIHsKJiM0MzsJCQlFTUlUMV9vZmYzMigweGI4LCBjZmlfYnBmX2hhc2gpOwkvKiBtb3YgJGNmaV9icGZfaGFzaCwgJWVheCAqLwomIzQzOwkJCUVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpOwkvKiBzdWIgcmR4LCBjZmlfZ2V0X29mZnNldCgpICovCiYjNDM7CQkJRU1JVDJfb2ZmMzIoMHg4MSwgYWRkXzFyZWcoMHhFOCwgQlBGX1JFR18zKSwgY2ZpX2dldF9vZmZzZXQoKSk7CiYjNDM7CQl9CiYjNDM7CiAJCWVtaXRfaW5kaXJlY3RfanVtcCgmYW1wO3Byb2csIEJQRl9SRUdfMyAvKiBSMyAtJmd0OyByZHggKi8sIGltYWdlICYjNDM7IChwcm9nIC0gYnVmKSk7CiAKIAkJKnBwcm9nID0gcHJvZzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMmQzZmM0MDM0ZWI5MGMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmMKQEAgLTAsMCAmIzQzOzEsNDcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBXaW5kc29yICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3QgZm9yIHRoZSB4ODYgQlBGIGRpc3BhdGNoZXImIzM5O3MgaW5kaXJlY3QtanVtcCBmYWxsYmFjawomIzQzOyAqIHVuZGVyIEZpbmVJQlQuCiYjNDM7ICoKJiM0MzsgKiBXQVJOSU5HCiYjNDM7ICogLS0tLS0tLQomIzQzOyAqICBUaGlzIHRlc3QgY2FuIGNyYXNoIHRoZSBrZXJuZWwsIHRodXMgc2hvdWxkIGJlIHJ1biBpbiBhIFZNLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L2lmX2xpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXR3b3JrX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIElGSU5ERVhfTE8JCTEKJiM0MzsKJiM0Mzt2b2lkIHRlc3RfeGRwX2Rpc3BhdGNoZXJfZmluZWlidCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHhkcF9kaXNwYXRjaGVyX2ZpbmVpYnQgKnNrZWw7CiYjNDM7CWludCBlcnIsIGF0dGFjaGVkX2ZkLCB1bmF0dGFjaGVkX2ZkOwomIzQzOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsCiYjNDM7CQkuZGF0YV9pbiA9ICZhbXA7cGt0X3Y0LAomIzQzOwkJLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjQpLAomIzQzOwkpOwomIzQzOwomIzQzOwlza2VsID0geGRwX2Rpc3BhdGNoZXJfZmluZWlidF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWF0dGFjaGVkX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnhkcF9kaXNwYXRjaGVyX2F0dGFjaGVkKTsKJiM0MzsJdW5hdHRhY2hlZF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy54ZHBfZGlzcGF0Y2hlcl91bmF0dGFjaGVkKTsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3hkcF9hdHRhY2goSUZJTkRFWF9MTywgYXR0YWNoZWRfZmQsIFhEUF9GTEFHU19TS0JfTU9ERSwgTlVMTCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDthdHRhY2hfcHJvZyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHVuYXR0YWNoZWRfZmQsICZhbXA7dG9wdHMpOwomIzQzOwlBU1NFUlRfT0soZXJyLCAmIzM0O3VuYXR0YWNoZWRfdGVzdF9ydW4mIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUSh0b3B0cy5yZXR2YWwsIFhEUF9QQVNTLCAmIzM0O3VuYXR0YWNoZWRfcmV0dmFsJiMzNDspOwomIzQzOwomIzQzOwlicGZfeGRwX2RldGFjaChJRklOREVYX0xPLCBYRFBfRkxBR1NfU0tCX01PREUsIE5VTEwpOwomIzQzO291dDoKJiM0MzsJeGRwX2Rpc3BhdGNoZXJfZmluZWlidF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYjQ5Yjg0ZjAxYzhlZWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgV2luZHNvciAqLwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspCiYjNDM7aW50IHhkcF9kaXNwYXRjaGVyX2F0dGFjaGVkKHN0cnVjdCB4ZHBfbWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBYRFBfUEFTUzsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspCiYjNDM7aW50IHhkcF9kaXNwYXRjaGVyX3VuYXR0YWNoZWQoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIFhEUF9QQVNTOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGaW5lSUJUIEJQRiBKSVQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRzIEZpbmVJQlQgc3VwcG9ydCB0byB0aGUgQlBGIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhlIGNvcmUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIHdpdGhpbiB0aGUgYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGNsZWFybHkgc2hvd3MgbG9naWMgdG8gaW5qZWN0IGEgcHJlYW1ibGUgd2hlbiBgY2ZpX21vZGVgIGlzIHNldCB0byBgQ0ZJX0ZJTkVJQlRgLiBUaGlzIHByZWFtYmxlLCB1c2luZyBgbW92YCwgYGFkZGAgaW5zdHJ1Y3Rpb25zLCBhcHBlYXJzIGRlc2lnbmVkIHRvIHByZXBhcmUgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBiZWZvcmUgYW4gaW5kaXJlY3QganVtcCwgbGlrZWx5IGVuc3VyaW5nIGl0IGxhbmRzIG9uIGEgdmFsaWQgYEVOREJSYCBpbnN0cnVjdGlvbiBpbnN0ZWFkIG9mIHBvdGVudGlhbCAmIzM0O3BvaXNvbiYjMzQ7IGNvZGUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlLCBpcyB0aGlzIGNoYW5nZSBjb3JyZWN0bHkgcGxhY2VkLCBhbmQgaG93IGNhbiBJIGRldGVybWluZSBpZiB0aGlzIGZlYXR1cmUgaXMgYmVpbmcgY29tcGlsZWQgY29ycmVjdGx5PyBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIGJ1aWxkIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkga25vdyBCUEYgSklUIGlzIGdlbmVyYWxseSBlbmFibGVkIHZpYSBgQ09ORklHX0JQRl9KSVRgLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEZpbmVJQlQsIEnigJlsbCBhbHNvIGNoZWNrIGBDT05GSUdfRklORUlCVGAuIE5vdywgdG8gYmUgdGhvcm91Z2gsIEnigJlsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBmdW5jdGlvbiB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgaXRzZWxmLiBNYWtpbmcgc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIGNvcnJlY3RseSBjb25maWd1cmVkLCBhbmQgYWxsIGRlcGVuZGVuY2llcyBhcmUgbGlua2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtaXRfYnBmX2Rpc3BhdGNoZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM2OTg9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcyMS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzIyOnN0YXRpYyBpbnQgZW1pdF9icGZfZGlzcGF0Y2hlcih1OCAqKnBwcm9nLCBpbnQgYSwgaW50IGIsIHM2NCAqcHJvZ3MsIHU4ICppbWFnZSwgdTggKmJ1ZilcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzIzLXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc3NS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzc2Olx0ZXJyID0gZW1pdF9icGZfZGlzcGF0Y2hlcihcdTAwMjZwcm9nLCBhLCBhICYjNDM7IHBpdm90LFx0LyogZW1pdCBsb3dlcl9wYXJ0ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc3Ny1cdFx0XHRcdCAgcHJvZ3MsIGltYWdlLCBidWYpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzg5LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3OTA6XHRlcnIgPSBlbWl0X2JwZl9kaXNwYXRjaGVyKFx1MDAyNnByb2csIGEgJiM0MzsgcGl2b3QgJiM0MzsgMSxcdC8qIGVtaXQgdXBwZXJfcGFydCAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3OTEtXHRcdFx0XHQgIGIsIHByb2dzLCBpbWFnZSwgYnVmKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzgxMT1pbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY3MpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4MTUtXHRzb3J0KGZ1bmNzLCBudW1fZnVuY3MsIHNpemVvZihmdW5jc1swXSksIGNtcF9pcHMsIE5VTEwpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4MTY6XHRyZXR1cm4gZW1pdF9icGZfZGlzcGF0Y2hlcihcdTAwMjZwcm9nLCAwLCBudW1fZnVuY3MgLSAxLCBmdW5jcywgaW1hZ2UsIGJ1Zik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzgxNy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI1OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6CgoqKkRpc3NlY3RpbmcgdGhlIEJQRiBEaXNwYXRjaGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBCUEYgZGlzcGF0Y2hlciBpcyBzZXQgdXAuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBpcyBjbGVhcmx5IGEga2V5IGZ1bmN0aW9uLiBUaGUgZGVzY3JpcHRpb24gc2F5cyBpdCYjMzk7cyBjYWxsZWQgYnkgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAsIGFuZCBldmVuIG1vcmUgaW50ZXJlc3RpbmdseSwgaXQgKnJlY3Vyc2l2ZWx5KiBjYWxscyBpdHNlbGYuIFRoYXQgcmVjdXJzaXZlIG5hdHVyZSBpcyBzb21ldGhpbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0bzsgbGlrZWx5LCB0aGlzIGlzIGJ1aWxkaW5nIHNvbWUga2luZCBvZiBjaGFpbiBvciBzdHJ1Y3R1cmUuIFRoZSBmYWN0IHRoYXQgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAgaXMgY2FsbGVkIGJ5IEJQRiBkaXNwYXRjaGVyIGxvZ2ljIGp1c3QgcmVpbmZvcmNlcyB0aGF0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnQsIHRoZSBjcml0aWNhbCBjb25uZWN0aW9uLiBNeSBuZXh0IHN0ZXAgaXMgb2J2aW91cyDigJMgSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAgaXRzZWxmIGlzIGJlaW5nIGludm9rZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB3b3JrZmxvdyBvZiB0aGlzIEJQRiBkaXNwYXRjaGVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY2FsbCBncmFwaHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNzk5PXN0YXRpYyBpbnQgY21wX2lwcyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODEwLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4MTE6aW50IGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcih2b2lkICppbWFnZSwgdm9pZCAqYnVmLCBzNjQgKmZ1bmNzLCBpbnQgbnVtX2Z1bmNzKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4MTIte1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MTUyMD12b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MTUyMTppbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY3MpO1xuaW5jbHVkZS9saW51eC9icGYuaC0xNTIyLVxuLS1cbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jPTY4PXN0YXRpYyBib29sIGJwZl9kaXNwYXRjaGVyX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCxcbi0tXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYy04OC1cbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jOjg5OmludCBfX3dlYWsgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY3MpXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYy05MC17XG4tLVxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM9OTQ9c3RhdGljIGludCBicGZfZGlzcGF0Y2hlcl9wcmVwYXJlKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCwgdm9pZCAqaW1hZ2UsIHZvaWQgKmJ1Zilcbi0tXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYy0xMDItXHR9XG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYzoxMDM6XHRyZXR1cm4gYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKGltYWdlLCBidWYsIFx1MDAyNmlwc1swXSwgZC1cdTAwM2VudW1fcHJvZ3MpO1xua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtMTA0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDI3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgRGlzcGF0Y2hlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGJwZl9kaXNwYXRjaGVyX3ByZXBhcmVgIGZ1bmN0aW9uLCBmb3VuZCBpbiBga2VybmVsL2JwZi9kaXNwYXRjaGVyLmNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIE5hdHVyYWxseSwgSSBhbHJlYWR5IGtub3cgYENPTkZJR19CUEZfSklUYCBpcyBlc3NlbnRpYWwuIE5vdywgdGhlIG5ldyBjb2RlIHBhdGgsIHRoYXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IGBDT05GSUdfRklORUlCVGAsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyBzZXQuIFRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGEgcXVpY2sgY2hlY2sgdG8gY29uZmlybSB0aGUgZXhpc3RlbmNlIG9mIGBDT05GSUdfRklORUlCVGAuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGSU5FSUJUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MjM3OD1jb25maWcgQ0FMTF9QQURESU5HXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yMzgyLVxuYXJjaC94ODYvS2NvbmZpZzoyMzgzOmNvbmZpZyBGSU5FSUJUXG5hcmNoL3g4Ni9LY29uZmlnLTIzODQtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yMzg3LVxuYXJjaC94ODYvS2NvbmZpZzoyMzg4OmNvbmZpZyBGSU5FSUJUX0JISVxuYXJjaC94ODYvS2NvbmZpZy0yMzg5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgRklORUlCVCoqCgpPa2F5LCBzbyBgRklORUlCVGAgaXMgZmxhZ2dlZCBhcyBhIGBkZWZfYm9vbGAsIG1lYW5pbmcgaXQmIzM5O3MgZWl0aGVyIGRlZmluZWQgYXMgYHlgIG9yIG5vdCBkZWZpbmVkLCBidXQgdGhlIGtleSBpcyB0aGF0IGl0JiMzOTtzICpkZXBlbmRlbnQqIG9uIHNvbWV0aGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0ICYjMzQ7c29tZXRoaW5nJiMzNDsgaXMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggeDg2IGFyY2hpdGVjdHVyZSBhbmQgdGhpcyBsb29rcyBsaWtlIGEgbW9yZSByZWNlbnQgZmVhdHVyZSwgSSYjMzk7bGwgZ28gdG8gYGFyY2gveDg2L0tjb25maWdgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMjM4MyB0byBzZWUgd2hhdCBjb25kaXRpb25zIGFyZSBzZXR0aW5nIGl0cyBzdGF0ZS4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBlbmFibGluZyBmYWN0b3JzIGZvciB0aGlzIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzcwOlx0XG4yMzcxOlx0IyBCYXNpY2FsbHk6IEZVTkNUSU9OX0FMSUdOTUVOVCAtIDUqQ0ZJXG4yMzcyOlx0IyBleGNlcHQgS2NvbmZpZyBjYW4mIzM5O3QgZG8gYXJpdGhtZXRpYyA6L1xuMjM3MzpcdGNvbmZpZyBGVU5DVElPTl9QQURESU5HX0JZVEVTXG4yMzc0Olx0XHRpbnRcbjIzNzU6XHRcdGRlZmF1bHQgRlVOQ1RJT05fUEFERElOR19DRkkgaWYgQ0ZJXG4yMzc2Olx0XHRkZWZhdWx0IEZVTkNUSU9OX0FMSUdOTUVOVFxuMjM3NzpcdFxuMjM3ODpcdGNvbmZpZyBDQUxMX1BBRERJTkdcbjIzNzk6XHRcdGRlZl9ib29sIG5cbjIzODA6XHRcdGRlcGVuZHMgb24gQ0NfSEFTX0VOVFJZX1BBRERJTkcgXHUwMDI2XHUwMDI2IE9CSlRPT0xcbjIzODE6XHRcdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfMTZCXG4yMzgyOlx0XG4yMzgzOlx0Y29uZmlnIEZJTkVJQlRcbjIzODQ6XHRcdGRlZl9ib29sIHlcbjIzODU6XHRcdGRlcGVuZHMgb24gWDg2X0tFUk5FTF9JQlQgXHUwMDI2XHUwMDI2IENGSSBcdTAwMjZcdTAwMjYgTUlUSUdBVElPTl9SRVRQT0xJTkVcbjIzODY6XHRcdHNlbGVjdCBDQUxMX1BBRERJTkdcbjIzODc6XHRcbjIzODg6XHRjb25maWcgRklORUlCVF9CSElcbjIzODk6XHRcdGRlZl9ib29sIHlcbjIzOTA6XHRcdGRlcGVuZHMgb24gRklORUlCVCBcdTAwMjZcdTAwMjYgQ0NfSEFTX0tDRklfQVJJVFlcbjIzOTE6XHRcbjIzOTI6XHRjb25maWcgSEFWRV9DQUxMX1RIVU5LU1xuMjM5MzpcdFx0ZGVmX2Jvb2wgeVxuMjM5NDpcdFx0ZGVwZW5kcyBvbiBDQ19IQVNfRU5UUllfUEFERElORyBcdTAwMjZcdTAwMjYgTUlUSUdBVElPTl9SRVRIVU5LIFx1MDAyNlx1MDAyNiBPQkpUT09MXG4yMzk1Olx0XG4yMzk2Olx0Y29uZmlnIENBTExfVEhVTktTXG4yMzk3Olx0XHRkZWZfYm9vbCBuXG4yMzk4Olx0XHRzZWxlY3QgQ0FMTF9QQURESU5HXG4yMzk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDQKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEZJTkVJQlQgRGVwZW5kZW5jeSBDaGFpbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEZJTkVJQlRgIGhlcmUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBpbnRlZ3JhdGUgaXQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCByZWxpZXMgb24gYSBmZXcgY3JpdGljYWwgZmVhdHVyZXM6IGBYODZfS0VSTkVMX0lCVGAsIGBDRklgLCBhbmQgYE1JVElHQVRJT05fUkVUUE9MSU5FYC4gTWFrZXMgc2Vuc2UsIGFsbCBjb3JlIHRvIGNvbnRyb2wgZmxvdyBpbnRlZ3JpdHkuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSBvZiBgWDg2X0tFUk5FTF9JQlRgIGFuZCBhbHNvIGlmIENGSSBpcyBwcmVzZW50LiBIbW1tLCBob2xkIG9uLi4uIGBDRklgPyBUaGF0IGRvZXNuJiMzOTt0IHNlZW0gcmlnaHQuIEl0IGRvZXNuJiMzOTt0IHJpbmcgYSBiZWxsLiBQZXJoYXBzIGl0JiMzOTtzIHVuZGVyIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG5hbWU/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3g4Ni9LY29uZmlnYC4gTWF5YmUgaXQmIzM5O3MgYENGSV9DTEFOR2A/IEkgbmVlZCB0byBjbGFyaWZ5IHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBleHBlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz05MzA9Y29uZmlnIEFSQ0hfVVNFU19DRklfR0VORVJJQ19MTFZNX1BBU1Ncbi0tXG5hcmNoL0tjb25maWctOTM2LVxuYXJjaC9LY29uZmlnOjkzNzpjb25maWcgQ0ZJXG5hcmNoL0tjb25maWctOTM4LVx0Ym9vbCBcJiMzNDtVc2UgS2VybmVsIENvbnRyb2wgRmxvdyBJbnRlZ3JpdHkgKGtDRkkpXCYjMzQ7XG4tLVxuYXJjaC9LY29uZmlnLTk1Mi1cbmFyY2gvS2NvbmZpZzo5NTM6Y29uZmlnIENGSV9DTEFOR1xuYXJjaC9LY29uZmlnLTk1NC1cdGJvb2xcbi0tXG5hcmNoL0tjb25maWctOTU4LVxuYXJjaC9LY29uZmlnOjk1OTpjb25maWcgQ0ZJX0lDQUxMX05PUk1BTElaRV9JTlRFR0VSU1xuYXJjaC9LY29uZmlnLTk2MC1cdGJvb2wgXCYjMzQ7Tm9ybWFsaXplIENGSSB0YWdzIGZvciBpbnRlZ2Vyc1wmIzM0O1xuLS1cbmFyY2gvS2NvbmZpZz05ODE9Y29uZmlnIEhBVkVfQ0ZJX0lDQUxMX05PUk1BTElaRV9JTlRFR0VSU19SVVNUQ1xuLS1cbmFyY2gvS2NvbmZpZy05ODgtXG5hcmNoL0tjb25maWc6OTg5OmNvbmZpZyBDRklfUEVSTUlTU0lWRVxuYXJjaC9LY29uZmlnLTk5MC1cdGJvb2wgXCYjMzQ7VXNlIENGSSBpbiBwZXJtaXNzaXZlIG1vZGVcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTIyOTM9Y29uZmlnIFNUUklDVF9TSUdBTFRTVEFDS19TSVpFXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yMzA4LVxuYXJjaC94ODYvS2NvbmZpZzoyMzA5OmNvbmZpZyBDRklfQVVUT19ERUZBVUxUXG5hcmNoL3g4Ni9LY29uZmlnLTIzMTAtXHRib29sIFwmIzM0O0F0dGVtcHQgdG8gdXNlIEZpbmVJQlQgYnkgZGVmYXVsdCBhdCBib290IHRpbWVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcwNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBhIEtlcm5lbCBUZXN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHRlc3Qgc2V0dXAuIFJpZ2h0IG5vdywgaXQgbG9va3MgbGlrZSBgQ0ZJYCwgYFg4Nl9LRVJORUxfSUJUYCwgYW5kIGBNSVRJR0FUSU9OX1JFVFBPTElORWAgYXJlIHJlbGV2YW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvbmVzIHRvIGV4cGxpY2l0bHkgZW5hYmxlLiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIGFib3V0IGxpc3RpbmcgYEZJTkVJQlRgIGFzIGFuICplbmFibGUqIGNvbmZpZywgYnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYEZJTkVJQlRgIGlzIGEgYGRlZl9ib29sIHlgLCBtZWFuaW5nIGl0JiMzOTtzIGF1dG9tYXRpY2FsbHkgc2V0IHRvICYjMzQ7eWVzJiMzNDsgaWYgaXRzIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLiBTbywgcmVhbGx5LCBJIGp1c3QgbmVlZCB0byBmb2N1cyBvbiBleHBsaWNpdGx5IGVuYWJsaW5nIHRob3NlIGRlcGVuZGVuY2llcy4gR2l2ZW4gdGhhdCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBYODZfS0VSTkVMX0lCVGAsIGBDRklgLCBhbmQgYE1JVElHQVRJT05fUkVUUE9MSU5FYCBhcmUgdHVybmVkIG9uLgoKT2gsIHJpZ2h0LCB0aGlzIHRlc3QgaXMgYW4gWERQIHRlc3QuIFNpbmNlIHRoYXQgaXMgdGhlIGNhc2UsIGV2ZW4gdGhvdWdoIHRoZXkgbWF5IGJlIHN0YW5kYXJkLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX1hEUF9TT0NLRVRTYCBhcmUgZW5hYmxlZCwgYnV0IEkgYW0gbm90IHRvbyBjb25jZXJuZWQuCgpOb3csIEkmIzM5O20gY2hlY2tpbmcgYSBjb25kaXRpb24gYGNmaV9tb2RlID09IENGSV9GSU5FSUJUYC4gV2hlcmUgaXMgYGNmaV9tb2RlYCBldmVuIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayB0aGF0IGRvd24gdG8gY29uZmlybSB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NmaV9tb2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oLTkyLSAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY2ZpLmg6OTM6ZW51bSBjZmlfbW9kZSB7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jZmkuaC05NC1cdENGSV9BVVRPLFx0LyogRmluZUlCVCBpZiBoYXJkd2FyZSBoYXMgSUJULCBvdGhlcndpc2Uga0NGSSAqL1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oLTk5LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vY2ZpLmg6MTAwOmV4dGVybiBlbnVtIGNmaV9tb2RlIGNmaV9tb2RlO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY2ZpLmgtMTAxLVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oPTEyND1zdGF0aWMgaW5saW5lIGludCBjZmlfZ2V0X29mZnNldCh2b2lkKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vY2ZpLmgtMTI1LXtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oOjEyNjpcdHN3aXRjaCAoY2ZpX21vZGUpIHtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oLTEyNy1cdGNhc2UgQ0ZJX0ZJTkVJQlQ6XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9OTY4PXZvaWQgX19pbml0X29yX21vZHVsZSBub2lubGluZSBhcHBseV9yZXRwb2xpbmVzKHMzMiAqc3RhcnQsIHMzMiAqZW5kKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTk4OS1cdFx0XHQvKiBTZWUgY2ZpX3BhcmFub2lkLiAqL1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6OTkwOlx0XHRcdFdBUk5fT05fT05DRShjZmlfbW9kZSAhPSBDRklfRklORUlCVCk7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy05OTEtXHRcdFx0Y29udGludWU7XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtOTk3LVx0XHRcdGlmIChkZXN0Wy0xXSA9PSAweGQ2IFx1MDAyNlx1MDAyNiAoZGVzdFswXSBcdTAwMjYgMHhmMCkgPT0gMHg3MCkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6OTk4Olx0XHRcdFx0V0FSTl9PTl9PTkNFKGNmaV9tb2RlICE9IENGSV9GSU5FSUJUKTtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTk5OS1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jPTExOTE9dm9pZCBfX2luaXRfb3JfbW9kdWxlIGFwcGx5X3NlYWxfZW5kYnIoczMyICpzdGFydCwgczMyICplbmQpIHsgfVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyMDItXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjAzOmVudW0gY2ZpX21vZGUgY2ZpX21vZGUgX19yb19hZnRlcl9pbml0ID0gX19DRklfREVGQVVMVDtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyMDQtc3RhdGljIGJvb2wgY2ZpX2RlYnVnIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0xMjExPXUzMiBjZmlfZ2V0X2Z1bmNfaGFzaCh2b2lkICpmdW5jKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyMTUtXHRmdW5jIC09IGNmaV9nZXRfb2Zmc2V0KCk7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjE2Olx0c3dpdGNoIChjZmlfbW9kZSkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTIxNy1cdGNhc2UgQ0ZJX0ZJTkVJQlQ6XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MTIzMz1pbnQgY2ZpX2dldF9mdW5jX2FyaXR5KHZvaWQgKmZ1bmMpXG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTIzNy1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjEyMzg6XHRpZiAoY2ZpX21vZGUgIT0gQ0ZJX0ZJTkVJQlQgXHUwMDI2XHUwMDI2ICFjZmlfYmhpKVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTIzOS1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MTI3MD1zdGF0aWMgX19pbml0IGludCBjZmlfcGFyc2VfY21kbGluZShjaGFyICpzdHIpXG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI4Mi1cdFx0aWYgKCFzdHJjbXAoc3RyLCBcJiMzNDthdXRvXCYjMzQ7KSkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTI4MzpcdFx0XHRjZmlfbW9kZSA9IENGSV9BVVRPO1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI4NC1cdFx0fSBlbHNlIGlmICghc3RyY21wKHN0ciwgXCYjMzQ7b2ZmXCYjMzQ7KSkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTI4NTpcdFx0XHRjZmlfbW9kZSA9IENGSV9PRkY7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjg2LVx0XHRcdGNmaV9yYW5kID0gZmFsc2U7XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI4OS1cdFx0fSBlbHNlIGlmICghc3RyY21wKHN0ciwgXCYjMzQ7a2NmaVwmIzM0OykpIHtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjEyOTA6XHRcdFx0Y2ZpX21vZGUgPSBDRklfS0NGSTtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyOTEtXHRcdH0gZWxzZSBpZiAoIXN0cmNtcChzdHIsIFwmIzM0O2ZpbmVpYnRcJiMzNDspKSB7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjkyOlx0XHRcdGNmaV9tb2RlID0gQ0ZJX0ZJTkVJQlQ7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjkzLVx0XHR9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCBcJiMzNDtub3JhbmRcJiMzNDspKSB7XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI5OC1cdFx0fSBlbHNlIGlmICghc3RyY21wKHN0ciwgXCYjMzQ7cGFyYW5vaWRcJiMzNDspKSB7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjk5Olx0XHRcdGlmIChjZmlfbW9kZSA9PSBDRklfRklORUlCVCkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTMwMC1cdFx0XHRcdGNmaV9wYXJhbm9pZCA9IHRydWU7XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTMwNS0jaWZkZWYgQ09ORklHX0ZJTkVJQlRfQkhJXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMzA2Olx0XHRcdGlmIChjZmlfbW9kZSA9PSBDRklfRklORUlCVCkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTMwNy1cdFx0XHRcdGNmaV9iaGkgPSB0cnVlO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jPTE3Nzg9c3RhdGljIHZvaWQgX19hcHBseV9maW5laWJ0KHMzMiAqc3RhcnRfcmV0cG9saW5lLCBzMzIgKmVuZF9yZXRwb2xpbmUsXG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTc4OS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE3OTA6XHRpZiAoY2ZpX21vZGUgPT0gQ0ZJX0FVVE8pIHtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE3OTE6XHRcdGNmaV9tb2RlID0gQ0ZJX0tDRkk7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xNzkyLVx0XHRpZiAoSEFTX0tFUk5FTF9JQlQgXHUwMDI2XHUwMDI2IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSUJUKSkge1xuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTE3OTgtXHRcdFx0XHRjZmlfcGFyYW5vaWQgPSB0cnVlO1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTc5OTpcdFx0XHRjZmlfbW9kZSA9IENGSV9GSU5FSUJUO1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTgwMC1cdFx0fVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTE4MzMtXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxODM0Olx0c3dpdGNoIChjZmlfbW9kZSkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTgzNS1cdGNhc2UgQ0ZJX09GRjpcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0xODg4PXN0YXRpYyB2b2lkIHBvaXNvbl9jZmkodm9pZCAqYWRkcilcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xODk3LVx0ICovXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxODk4Olx0c3dpdGNoIChjZmlfbW9kZSkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTg5OS1cdGNhc2UgQ0ZJX0ZJTkVJQlQ6XG4tLVxuYXJjaC94ODYva2VybmVsL2NmaS5jPTY4PWVudW0gYnVnX3RyYXBfdHlwZSBoYW5kbGVfY2ZpX2ZhaWx1cmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC94ODYva2VybmVsL2NmaS5jLTcyLVxuYXJjaC94ODYva2VybmVsL2NmaS5jOjczOlx0c3dpdGNoIChjZmlfbW9kZSkge1xuYXJjaC94ODYva2VybmVsL2NmaS5jLTc0LVx0Y2FzZSBDRklfS0NGSTpcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDc4PXN0YXRpYyB2b2lkIGVtaXRfY2ZpKHU4ICoqcHByb2csIHU4ICppcCwgdTMyIGhhc2gsIGludCBhcml0eSlcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDgxLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQ4MjpcdHN3aXRjaCAoY2ZpX21vZGUpIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00ODMtXHRjYXNlIENGSV9GSU5FSUJUOlxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNzIyPXN0YXRpYyBpbnQgZW1pdF9icGZfZGlzcGF0Y2hlcih1OCAqKnBwcm9nLCBpbnQgYSwgaW50IGIsIHM2NCAqcHJvZ3MsIHU4ICppbWFnZSwgdTggKmJ1Zilcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc0NS1cdFx0ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzc0NjpcdFx0aWYgKGNmaV9tb2RlID09IENGSV9GSU5FSUJUKSB7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc0Ny1cdFx0XHRFTUlUMV9vZmYzMigweGI4LCBjZmlfYnBmX2hhc2gpO1x0LyogbW92ICRjZmlfYnBmX2hhc2gsICVlYXggKi9cbi0tXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYz00OTg9c3RydWN0IG10ZF9pbmZvICpjZmlfY21kc2V0XzAwMDEoc3RydWN0IG1hcF9pbmZvICptYXAsIGludCBwcmltYXJ5KVxuLS1cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jLTUyNi1cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jOjUyNzpcdGlmIChjZmktXHUwMDNlY2ZpX21vZGUgPT0gQ0ZJX01PREVfQ0ZJKSB7XG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYy01MjgtXHRcdC8qXG4tLVxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMtNTU1LVx0fVxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmM6NTU2Olx0ZWxzZSBpZiAoY2ZpLVx1MDAzZWNmaV9tb2RlID09IENGSV9NT0RFX0pFREVDKSB7XG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYy01NTctXHRcdC8qIEFwcGx5IGplZGVjIHNwZWNpZmljIGZpeHVwcyAqL1xuLS1cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jPTYwMD1zdHJ1Y3QgbXRkX2luZm8gKmNmaV9jbWRzZXRfMDAwMihzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgaW50IHByaW1hcnkpXG4tLVxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMtNjM2LVxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmM6NjM3Olx0aWYgKGNmaS1cdTAwM2VjZmlfbW9kZT09Q0ZJX01PREVfQ0ZJKXtcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jLTYzOC1cdFx0dW5zaWduZWQgY2hhciBib290bG9jO1xuLS1cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jLTcxOS1cdH0gLyogQ0ZJIG1vZGUgKi9cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jOjcyMDpcdGVsc2UgaWYgKGNmaS1cdTAwM2VjZmlfbW9kZSA9PSBDRklfTU9ERV9KRURFQykge1xuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMtNzIxLVx0XHQvKiBBcHBseSBqZWRlYyBzcGVjaWZpYyBmaXh1cHMgKi9cbi0tXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYz03NjY9c3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqY2ZpX2FtZHN0ZF9zZXR1cChzdHJ1Y3QgbXRkX2luZm8gKm10ZClcbi0tXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYy03NzQtXHRwcmludGsoS0VSTl9OT1RJQ0UgXCYjMzQ7bnVtYmVyIG9mICVzIGNoaXBzOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jOjc3NTpcdCAgICAgICAoY2ZpLVx1MDAzZWNmaV9tb2RlID09IENGSV9NT0RFX0NGSSk/XCYjMzQ7Q0ZJXCYjMzQ7OlwmIzM0O0pFREVDXCYjMzQ7LGNmaS1cdTAwM2VudW1jaGlwcyk7XG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYy03NzYtXHQvKiBTZWxlY3QgdGhlIGNvcnJlY3QgZ2VvbWV0cnkgc2V0dXAgKi9cbi0tXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYz0xMTQ9c3RydWN0IG10ZF9pbmZvICpjZmlfY21kc2V0XzAwMjAoc3RydWN0IG1hcF9pbmZvICptYXAsIGludCBwcmltYXJ5KVxuLS1cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jLTExOC1cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jOjExOTpcdGlmIChjZmktXHUwMDNlY2ZpX21vZGUpIHtcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jLTEyMC1cdFx0Lypcbi0tXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYz0xOTU9c3RhdGljIGludCBfX3hpcHJhbSBjZmlfY2hpcF9zZXR1cChzdHJ1Y3QgbWFwX2luZm8gKm1hcCxcbi0tXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYy0yMTYtXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYzoyMTc6XHRjZmktXHUwMDNlY2ZpX21vZGUgPSBDRklfTU9ERV9DRkk7XG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYy0yMTgtXG4tLVxuZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYz0xOTczPXN0YXRpYyBpbnQgY2ZpX2plZGVjX3NldHVwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSwgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMtMTk5OC1cdGNmaS1cdTAwM2VjZmlxLVx1MDAzZURldlNpemUgPSBqZWRlY190YWJsZVtpbmRleF0uZGV2X3NpemU7XG5kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jOjE5OTk6XHRjZmktXHUwMDNlY2ZpX21vZGUgPSBDRklfTU9ERV9KRURFQztcbmRyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMtMjAwMC1cdGNmaS1cdTAwM2VzZWN0b3JfZXJhc2VfY21kID0gQ01EKDB4MzApO1xuLS1cbmluY2x1ZGUvbGludXgvbXRkL2NmaS5oPTI3Mz1zdHJ1Y3QgY2ZpX3ByaXZhdGUge1xuLS1cbmluY2x1ZGUvbGludXgvbXRkL2NmaS5oLTI3Ny1cdGludCBkZXZpY2VfdHlwZTtcbmluY2x1ZGUvbGludXgvbXRkL2NmaS5oOjI3ODpcdGludCBjZmlfbW9kZTtcdFx0LyogQXJlIHdlIGEgSkVERUMgZGV2aWNlIHByZXRlbmRpbmcgdG8gYmUgQ0ZJPyAqL1xuaW5jbHVkZS9saW51eC9tdGQvY2ZpLmgtMjc5LVx0aW50IGFkZHJfdW5sb2NrMTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz02Njk9dm9pZCBicGZfcHJvZ19rYWxsc3ltc19hZGQoc3RydWN0IGJwZl9wcm9nICpmcClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy02ODUtXHQgKi9cbmtlcm5lbC9icGYvY29yZS5jOjY4NjpcdGlmIChjZmlfbW9kZSAhPSBDRklfRklORUlCVClcbmtlcm5lbC9icGYvY29yZS5jLTY4Ny1cdFx0cmV0dXJuO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTY5OT12b2lkIGJwZl9wcm9nX2thbGxzeW1zX2RlbChzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTcwNS0jaWZkZWYgQ09ORklHX0ZJTkVJQlRcbmtlcm5lbC9icGYvY29yZS5jOjcwNjpcdGlmIChjZmlfbW9kZSAhPSBDRklfRklORUlCVClcbmtlcm5lbC9icGYvY29yZS5jLTcwNy1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRmluZUlCVCBTdXBwb3J0IGluIHRoZSBCUEYgRGlzcGF0Y2hlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGNmaV9tb2RlYCwgdGhlIGNydWNpYWwgaW5kaWNhdG9yIGZvciBDb250cm9sLUZsb3cgSW50ZWdyaXR5IChDRkkpLCBwYXJ0aWN1bGFybHkgd2l0aCBGaW5lSUJULCBpcyBzZXQgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oYCBhbmQgYGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jYC4gSXQgaGluZ2VzIG9uIGBDRklfRklORUlCVGAgYmVpbmcgYWN0aXZlLCBjb250aW5nZW50IG9uIGVpdGhlciB0aGUgYEZJTkVJQlRgIGZlYXR1cmUgYmVpbmcgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSAqb3IqIGJlaW5nIGV4cGxpY2l0bHkgZm9yY2VkIHRocm91Z2ggYSBjb21tYW5kLWxpbmUgb3B0aW9uLiBTbywgYENPTkZJR19GSU5FSUJUYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS4KCk5vdywgbGV0IG1lIGNoZWNrIHRoZSByZWxhdGVkIEJQRiBjb25maWd1cmF0aW9ucy4gYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHByb2JhYmx5IGltcG9ydGFudCwgYW5kIGdpdmVuIHRoZSB0ZXN0JiMzOTtzIFhEUCBmb2N1cywgSSYjMzk7bGwga2VlcCBgQ09ORklHX1hEUF9TT0NLRVRTYCBpbiBtaW5kIGFzIGEgcG90ZW50aWFsIGRlcGVuZGVuY3ksIGV2ZW4gdGhvdWdoIHRoZSB0ZXN0IGl0c2VsZiBqdXN0IGZvY3VzZXMgb24gYGJwZl94ZHBfYXR0YWNoYCBhbmQgYGJwZl9wcm9nX3Rlc3RfcnVuX29wdHNgLiBJIHNob3VsZCBkaWcgaW50byB0aGUgdGVzdCBmaWxlIGl0c2VsZjogYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuY2AuIEkmIzM5O20gZXhwZWN0aW5nIHN0YW5kYXJkIEJQRiBmdW5jdGlvbmFsaXR5IHRoZXJlLCBiYXNlZCBvbiB0aGUgY2FsbHMuCgpSaWdodCwgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIHRoZSBgZW1pdF9icGZfZGlzcGF0Y2hlcmAgZnVuY3Rpb24uIElzIHRoZXJlIGFueSBhZGRpdGlvbmFsIG1vZGlmaWVkIGZ1bmN0aW9uPyBOb3BlLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4gVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgZW5oYW5jZXMgdGhlIEJQRiBkaXNwYXRjaGVyIHdpdGggRmluZUlCVCBzdXBwb3J0LgoKTm93LCB0byBhc3Nlc3MgdGhlIGltcGFjdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGZpdHMgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLiBJdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHRoZSBCUEYgcHJvZ3JhbSBsb2FkIG9yIGF0dGFjaCBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgZGlzcGF0Y2hlciBpcyB1cGRhdGVkLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzICpub3QqIGEgaG90LXBhdGggZnVuY3Rpb24gaW4gdGhlIHNlbnNlIG9mIGhpZ2gtZnJlcXVlbmN5IHBhY2tldCBwcm9jZXNzaW5nIG9yIHNpbWlsYXIuIEl0JiMzOTtzIGludm9sdmVkIGluIEpJVCBjb21waWxhdGlvbiwgd2hpY2ggZ2l2ZXMgdXMgYSBnb29kIGZvY3VzLiBBbmQgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAgaXMgbGlrZWx5IGFsc28gd29ydGggZXhhbWluaW5nLgoKRmluYWxseSwgSSBuZWVkIHRvIHNlZSB3aGV0aGVyIGBjZmlfYnBmX2hhc2hgIGlzIGRlZmluZWQuIFRoaXMgaXMgYSBjcnVjaWFsIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZmlfYnBmX2hhc2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9NTEzPXN0YXRpYyBpbnQgYnVpbGRfcHJvbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBlYnBmX2Zyb21fY2JwZilcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy01NTItXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzo1NTM6XHRlbWl0X2tjZmkoaXNfbWFpbl9wcm9nID8gY2ZpX2JwZl9oYXNoIDogY2ZpX2JwZl9zdWJwcm9nX2hhc2gsIGN0eCk7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy01NTQtXHRjb25zdCBpbnQgaWR4MCA9IGN0eC1cdTAwM2VpZHg7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0yMDAyPXZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgYm9vbCBpc19zdWJwcm9nKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjAzMy1cdC8qIGVtaXQga2NmaSB0eXBlIHByZWFtYmxlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIGZpcnN0IGluc24gKi9cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjAzNDpcdGVtaXRfa2NmaShpc19zdWJwcm9nID8gY2ZpX2JwZl9zdWJwcm9nX2hhc2ggOiBjZmlfYnBmX2hhc2gsIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwMzUtXG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MTc3OD1zdGF0aWMgdm9pZCBfX2FwcGx5X2ZpbmVpYnQoczMyICpzdGFydF9yZXRwb2xpbmUsIHMzMiAqZW5kX3JldHBvbGluZSxcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xODE1LVx0XHRcdGNmaV9zZWVkID0gZ2V0X3JhbmRvbV91MzIoKTtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE4MTY6XHRcdFx0Y2ZpX2JwZl9oYXNoID0gY2ZpX3JlaGFzaChjZmlfYnBmX2hhc2gpO1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTgxNy1cdFx0XHRjZmlfYnBmX3N1YnByb2dfaGFzaCA9IGNmaV9yZWhhc2goY2ZpX2JwZl9zdWJwcm9nX2hhc2gpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz01MzU9c3RhdGljIHZvaWQgZW1pdF9wcm9sb2d1ZSh1OCAqKnBwcm9nLCB1OCAqaXAsIHUzMiBzdGFja19kZXB0aCwgYm9vbCBlYnBmX2Zyb21fY2JwZixcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNTQzLVx0fSBlbHNlIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo1NDQ6XHRcdGVtaXRfY2ZpKFx1MDAyNnByb2csIGlwLCBjZmlfYnBmX2hhc2gsIDEpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTU0NS1cdH1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzcyMj1zdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NDYtXHRcdGlmIChjZmlfbW9kZSA9PSBDRklfRklORUlCVCkge1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3NDc6XHRcdFx0RU1JVDFfb2ZmMzIoMHhiOCwgY2ZpX2JwZl9oYXNoKTtcdC8qIG1vdiAkY2ZpX2JwZl9oYXNoLCAlZWF4ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc0OC1cdFx0XHRFTUlUMShhZGRfMW1vZCgweDQ4LCBCUEZfUkVHXzMpKTtcdC8qIHN1YiByZHgsIGNmaV9nZXRfb2Zmc2V0KCkgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2NmaS5oPTQxPXN0YXRpYyBpbmxpbmUgdTMyIGNmaV9nZXRfZnVuY19oYXNoKHZvaWQgKmZ1bmMpXG4tLVxuaW5jbHVkZS9saW51eC9jZmkuaC01Mi0vKiBDRkkgdHlwZSBoYXNoZXMgZm9yIEJQRiBmdW5jdGlvbiB0eXBlcyAqL1xuaW5jbHVkZS9saW51eC9jZmkuaDo1MzpleHRlcm4gdTMyIGNmaV9icGZfaGFzaDtcbmluY2x1ZGUvbGludXgvY2ZpLmgtNTQtZXh0ZXJuIHUzMiBjZmlfYnBmX3N1YnByb2dfaGFzaDtcbi0tXG5pbmNsdWRlL2xpbnV4L2NmaS5oPTU5PXN0YXRpYyBpbmxpbmUgdTMyIGNmaV9nZXRfZnVuY19oYXNoKHZvaWQgKmZ1bmMpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvY2ZpLmgtNjAtXG5pbmNsdWRlL2xpbnV4L2NmaS5oOjYxOiNkZWZpbmUgY2ZpX2JwZl9oYXNoIDBVXG5pbmNsdWRlL2xpbnV4L2NmaS5oLTYyLSNkZWZpbmUgY2ZpX2JwZl9zdWJwcm9nX2hhc2ggMFVcbi0tXG5rZXJuZWwvY2ZpLmM9Mzk9ZXh0ZXJuIHR5cGVvZigqKGJwZl9mdW5jX3QpMCkgX19icGZfcHJvZ19ydW5YO1xua2VybmVsL2NmaS5jOjQwOkRFRklORV9DRklfVFlQRShjZmlfYnBmX2hhc2gsIF9fYnBmX3Byb2dfcnVuWCk7XG5rZXJuZWwvY2ZpLmMtNDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTgwCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgY2ZpX2JwZl9oYXNoYCBpcyBkZWZpbml0ZWx5IGRlZmluZWQuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBpcyBiZWluZyBjb21waWxlZC4gTG9va2luZyBhdCB0aGUgY29kZWJhc2UsIEkgc2VlIGl0JiMzOTtzIGxvY2F0ZWQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQmIzM5O3MgZ29vZCwgYnV0IGRvZXMgdGhlIGJ1aWxkIHN5c3RlbSBrbm93IGFib3V0IGl0PyBMZXQmIzM5O3MgY2hlY2sgYGFyY2gveDg2L25ldC9NYWtlZmlsZWAuIEFoLCB0aGVyZSBpdCBpczogYG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wLm8gYnBmX2ppdF9jb21wMzIub2AuIE9rYXksIHNvIGBDT05GSUdfQlBGX0pJVGAgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgQ09ORklHX0ZJTkVJQlRgLiBXZSBmaWd1cmVkIG91dCBlYXJsaWVyIHRoYXQgaXQgZGVwZW5kcyBvbiBgWDg2X0tFUk5FTF9JQlRgLCBgQ0ZJYCwgYW5kIGBNSVRJR0FUSU9OX1JFVFBPTElORWAuIExldCBtZSBqdXN0IG1ha2UgYSBtZW50YWwgbm90ZSBvZiBhbGwgdGhlc2Ugb3B0aW9uczogYEZJTkVJQlRgLCBgWDg2X0tFUk5FTF9JQlRgLCBgQ0ZJYCwgYW5kIGBNSVRJR0FUSU9OX1JFVFBPTElORWAuIFdhaXQgYSBzZWNvbmTigKYgYENGSWA/IFRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBQcmV0dHkgc3VyZSBgQ0ZJYCBpcyBhIGdlbmVyaWMgdGVybSBhbmQgYENGSV9DTEFOR2AgaXMgdGhlIGFjdHVhbCBjb25maWcgb3B0aW9uLiBSaWdodCwgYmV0dGVyIGRvdWJsZS1jaGVjayBgYXJjaC9LY29uZmlnYCB0byBiZSBzdXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENGSSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9OTMwPWNvbmZpZyBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTXG4tLVxuYXJjaC9LY29uZmlnLTkzNi1cbmFyY2gvS2NvbmZpZzo5Mzc6Y29uZmlnIENGSVxuYXJjaC9LY29uZmlnLTkzOC1cdGJvb2wgXCYjMzQ7VXNlIEtlcm5lbCBDb250cm9sIEZsb3cgSW50ZWdyaXR5IChrQ0ZJKVwmIzM0O1xuLS1cbmFyY2gvS2NvbmZpZy05NTItXG5hcmNoL0tjb25maWc6OTUzOmNvbmZpZyBDRklfQ0xBTkdcbmFyY2gvS2NvbmZpZy05NTQtXHRib29sXG4tLVxuYXJjaC9LY29uZmlnLTk1OC1cbmFyY2gvS2NvbmZpZzo5NTk6Y29uZmlnIENGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNcbmFyY2gvS2NvbmZpZy05NjAtXHRib29sIFwmIzM0O05vcm1hbGl6ZSBDRkkgdGFncyBmb3IgaW50ZWdlcnNcJiMzNDtcbi0tXG5hcmNoL0tjb25maWc9OTgxPWNvbmZpZyBIQVZFX0NGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNfUlVTVENcbi0tXG5hcmNoL0tjb25maWctOTg4LVxuYXJjaC9LY29uZmlnOjk4OTpjb25maWcgQ0ZJX1BFUk1JU1NJVkVcbmFyY2gvS2NvbmZpZy05OTAtXHRib29sIFwmIzM0O1VzZSBDRkkgaW4gcGVybWlzc2l2ZSBtb2RlXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz0yMjkzPWNvbmZpZyBTVFJJQ1RfU0lHQUxUU1RBQ0tfU0laRVxuLS1cbmFyY2gveDg2L0tjb25maWctMjMwOC1cbmFyY2gveDg2L0tjb25maWc6MjMwOTpjb25maWcgQ0ZJX0FVVE9fREVGQVVMVFxuYXJjaC94ODYvS2NvbmZpZy0yMzEwLVx0Ym9vbCBcJiMzNDtBdHRlbXB0IHRvIHVzZSBGaW5lSUJUIGJ5IGRlZmF1bHQgYXQgYm9vdCB0aW1lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODkwCgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDU3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIERpc3BhdGNoZXIgZm9yIEZ1enppbmcqKgoKT2theSwgc28gYGNvbmZpZyBDRklgIGlzIGEgYm9vbGVhbiwgYW5kIHRoZXJlZm9yZSBgQ0ZJYCBpcyBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3MgbWFrZSBhIGxpc3QgdG8ga2VlcCB0aGluZ3Mgc3RyYWlnaHQuIEkmIzM5O2xsIGluY2x1ZGUgYEZJTkVJQlRgLCBgWDg2X0tFUk5FTF9JQlRgLCBgQ0ZJYCwgYW5kIGBNSVRJR0FUSU9OX1JFVFBPTElORWAuIFdhaXQgYSBtaW51dGUsIGBGSU5FSUJUYCBpcyBhIGBkZWZfYm9vbCB5YCBpZiBpdHMgZGVwZW5kZW5jaWVzIGFyZSBtZXQsIHNvIHdlIGRvbiYjMzk7dCAqbmVlZCogdG8gZXhwbGljaXRseSBlbmFibGUgaXQgaWYgdGhlIGRlcGVuZGVuY2llcyBhcmUgdGFrZW4gY2FyZSBvZiwgYnV0IGl0IGRvZXNuJiMzOTt0IGh1cnQgdG8gbGlzdCBpdC4gVGhlcmVmb3JlLCBJIHdpbGwgbGlzdCBgRklORUlCVGAsIGBYODZfS0VSTkVMX0lCVGAsIGBDRklgLCBhbmQgYE1JVElHQVRJT05fUkVUUE9MSU5FYC4KCkkgc2hvdWxkIHByb2JhYmx5IGFkZCBgQlBGX0pJVGAgdG8gdGhpcyBsaXN0IGFzIHdlbGwsIGFzIHdlbGwgYXMgYEJQRl9TWVNDQUxMYCBhbmQgYWxzbyBgWERQX1NPQ0tFVFNgLCBqdXN0IHRvIGJlIHNhZmUuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gWWVzLCBpdCBpcy4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXJgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGJwZl9kaXNwYXRjaGVyX3ByZXBhcmVgLiBgYnBmX2Rpc3BhdGNoZXJfcHJlcGFyZWAgaXMgaW4gdHVybiBjYWxsZWQgYnkgYGJwZl9kaXNwYXRjaGVyX3VwZGF0ZWAsIGFuZCB0aGF0IGhhcHBlbnMgd2hlbiBhbiBYRFAgcHJvZ3JhbSBpcyBhdHRhY2hlZC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBBaCwgYENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgY291bGQgYmUgdXNlZnVsIHRvIGd1YXJhbnRlZSB0aGUgSklUIGlzIHVzZWQsIGFuZCBgQ09ORklHX1hEUF9TT0NLRVRTYCBpcyBpbXBvcnRhbnQgZm9yIFhEUCBzdXBwb3J0LgoKU28sIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnk6CgoqICAgKipXb3J0aEZ1enppbmcqKjogdHJ1ZQoqICAgKipGb2N1c1N5bWJvbHMqKjogYGVtaXRfYnBmX2Rpc3BhdGNoZXJgLCBgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyYAoqICAgKipFbmFibGVDb25maWdzKio6IGBGSU5FSUJUYCwgYFg4Nl9LRVJORUxfSUJUYCwgYENGSWAsIGBNSVRJR0FUSU9OX1JFVFBPTElORWAsIGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYAoKTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBhZGQgRmluZUlCVCBzdXBwb3J0IHRvIHRoZSBCUEYgZGlzcGF0Y2hlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBkaXJlY3RseSBpbXBhY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGV4ZWN1dGVkLiBXZSBzaG91bGQgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiB0aGUgQlBGIGRpc3BhdGNoZXIgbG9naWMsIGVzcGVjaWFsbHkgd2l0aCBGaW5lSUJUIGVuYWJsZWQuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBzaWduYXR1cmVzIG9mIHRoZSBmdW5jdGlvbnMuIGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoIHRoZSBzaWduYXR1cmUgYHN0YXRpYyBpbnQgZW1pdF9icGZfZGlzcGF0Y2hlcih1OCAqKnBwcm9nLCBpbnQgYSwgaW50IGIsIHM2NCAqcHJvZ3MsIHU4ICppbWFnZSwgdTggKmJ1ZilgLiBZZXMsIHRoYXQmIzM5O3MgY29ycmVjdC4gYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAgaXMgYSBnbG9iYWwgZnVuY3Rpb24gd2l0aCB0aGUgc2lnbmF0dXJlIGBpbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY3MpYC4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkLiBJJiMzOTtsbCBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGSU5FSUJUJiMzNDssCiAgICAmIzM0O1g4Nl9LRVJORUxfSUJUJiMzNDssCiAgICAmIzM0O0NGSSYjMzQ7LAogICAgJiMzNDtNSVRJR0FUSU9OX1JFVFBPTElORSYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW1pdF9icGZfZGlzcGF0Y2hlciYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIGFkZCBGaW5lSUJUIHN1cHBvcnQgdG8gdGhlIEJQRiBkaXNwYXRjaGVyLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGFmZmVjdHMgaG93IEJQRiBwcm9ncmFtcyBhcmUgZXhlY3V0ZWQuIFdlIHNob3VsZCBmdXp6IHRoZSBCUEYgZGlzcGF0Y2hlciBsb2dpYyB3aXRoIEZpbmVJQlQgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RklORUlCVCYjMzQ7LAogICAgJiMzNDtYODZfS0VSTkVMX0lCVCYjMzQ7LAogICAgJiMzNDtDRkkmIzM0OywKICAgICYjMzQ7TUlUSUdBVElPTl9SRVRQT0xJTkUmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VtaXRfYnBmX2Rpc3BhdGNoZXImIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBhZGQgRmluZUlCVCBzdXBwb3J0IHRvIHRoZSBCUEYgZGlzcGF0Y2hlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGV4ZWN1dGVkLiBXZSBzaG91bGQgZnV6eiB0aGUgQlBGIGRpc3BhdGNoZXIgbG9naWMgd2l0aCBGaW5lSUJUIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzozOTo0OC4wMDA5Nzc4NzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDcwNzg5NTYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSU5FSUJUXCIsXG4gICAgXCJYODZfS0VSTkVMX0lCVFwiLFxuICAgIFwiQ0ZJXCIsXG4gICAgXCJNSVRJR0FUSU9OX1JFVFBPTElORVwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbWl0X2JwZl9kaXNwYXRjaGVyXCIsXG4gICAgXCJhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gYWRkIEZpbmVJQlQgc3VwcG9ydCB0byB0aGUgQlBGIGRpc3BhdGNoZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWZmZWN0cyBob3cgQlBGIHByb2dyYW1zIGFyZSBleGVjdXRlZC4gV2Ugc2hvdWxkIGZ1enogdGhlIEJQRiBkaXNwYXRjaGVyIGxvZ2ljIHdpdGggRmluZUlCVCBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzozOTo0OC4wMDA5ODcxMTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTExMTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUwNGZhMDI3NzNhZjczYmZlMDRjNDczZjYyM2IzZmEzM2UxMDRlMWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAxMzozOTo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uMWM4MjQ5ZDhjYTNiMjAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTM3NDAsNiArMzc0MCwxNSBAQCBzdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbitcXHRcXHQvKiBJZiBydW5uaW5nIHVuZGVyIEZpbmVJQlQsIGVudGVyIHRoZSBwcmVhbWJsZSBzbyB0aGUgZm9sbG93aW5nXFxuK1xcdFxcdCAqIGluZGlyZWN0IGp1bXAgbGFuZHMgb24gYSByZWFsIEVOREJSIGluc3RlYWQgb2YgdGhlIHBvaXNvbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChjZmlfbW9kZSA9PSBDRklfRklORUlCVCkge1xcbitcXHRcXHRcXHRFTUlUMV9vZmYzMigweGI4LCBjZmlfYnBmX2hhc2gpO1xcdC8qIG1vdiAkY2ZpX2JwZl9oYXNoLCAlZWF4ICovXFxuK1xcdFxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1xcdC8qIHN1YiByZHgsIGNmaV9nZXRfb2Zmc2V0KCkgKi9cXG4rXFx0XFx0XFx0RU1JVDJfb2ZmMzIoMHg4MSwgYWRkXzFyZWcoMHhFOCwgQlBGX1JFR18zKSwgY2ZpX2dldF9vZmZzZXQoKSk7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGVtaXRfaW5kaXJlY3RfanVtcChcXHUwMDI2cHJvZywgQlBGX1JFR18zIC8qIFIzIC1cXHUwMDNlIHJkeCAqLywgaW1hZ2UgKyAocHJvZyAtIGJ1ZikpO1xcbiBcXG4gXFx0XFx0KnBwcm9nID0gcHJvZztcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmQzZmM0MDM0ZWI5MGNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXFxuQEAgLTAsMCArMSw0NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgV2luZHNvciAqL1xcbitcXG4rLypcXG4rICogUmVncmVzc2lvbiB0ZXN0IGZvciB0aGUgeDg2IEJQRiBkaXNwYXRjaGVyJ3MgaW5kaXJlY3QtanVtcCBmYWxsYmFja1xcbisgKiB1bmRlciBGaW5lSUJULlxcbisgKlxcbisgKiBXQVJOSU5HXFxuKyAqIC0tLS0tLS1cXG4rICogIFRoaXMgdGVzdCBjYW4gY3Jhc2ggdGhlIGtlcm5lbCwgdGh1cyBzaG91bGQgYmUgcnVuIGluIGEgVk0uXFxuKyAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9pZl9saW5rLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXR3b3JrX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcInhkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuc2tlbC5oXFxcIlxcbitcXG4rI2RlZmluZSBJRklOREVYX0xPXFx0XFx0MVxcbitcXG4rdm9pZCB0ZXN0X3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgeGRwX2Rpc3BhdGNoZXJfZmluZWlidCAqc2tlbDtcXG4rXFx0aW50IGVyciwgYXR0YWNoZWRfZmQsIHVuYXR0YWNoZWRfZmQ7XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsXFxuK1xcdFxcdC5kYXRhX2luID0gXFx1MDAyNnBrdF92NCxcXG4rXFx0XFx0LmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjQpLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IHhkcF9kaXNwYXRjaGVyX2ZpbmVpYnRfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YXR0YWNoZWRfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MueGRwX2Rpc3BhdGNoZXJfYXR0YWNoZWQpO1xcbitcXHR1bmF0dGFjaGVkX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLnhkcF9kaXNwYXRjaGVyX3VuYXR0YWNoZWQpO1xcbitcXG4rXFx0ZXJyID0gYnBmX3hkcF9hdHRhY2goSUZJTkRFWF9MTywgYXR0YWNoZWRfZmQsIFhEUF9GTEFHU19TS0JfTU9ERSwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImF0dGFjaF9wcm9nXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh1bmF0dGFjaGVkX2ZkLCBcXHUwMDI2dG9wdHMpO1xcbitcXHRBU1NFUlRfT0soZXJyLCBcXFwidW5hdHRhY2hlZF90ZXN0X3J1blxcXCIpO1xcbitcXHRBU1NFUlRfRVEodG9wdHMucmV0dmFsLCBYRFBfUEFTUywgXFxcInVuYXR0YWNoZWRfcmV0dmFsXFxcIik7XFxuK1xcbitcXHRicGZfeGRwX2RldGFjaChJRklOREVYX0xPLCBYRFBfRkxBR1NfU0tCX01PREUsIE5VTEwpO1xcbitvdXQ6XFxuK1xcdHhkcF9kaXNwYXRjaGVyX2ZpbmVpYnRfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iNDliODRmMDFjOGVlYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXFxuQEAgLTAsMCArMSwxOCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgV2luZHNvciAqL1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IHhkcF9kaXNwYXRjaGVyX2F0dGFjaGVkKHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gWERQX1BBU1M7XFxuK31cXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IHhkcF9kaXNwYXRjaGVyX3VuYXR0YWNoZWQoc3RydWN0IHhkcF9tZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBYRFBfUEFTUztcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEzOjM5OjQ4LjUzNzExNDAwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQxNzE3NDc5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRklORUlCVFwiLFxuICAgIFwiWDg2X0tFUk5FTF9JQlRcIixcbiAgICBcIkNGSVwiLFxuICAgIFwiTUlUSUdBVElPTl9SRVRQT0xJTkVcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW1pdF9icGZfZGlzcGF0Y2hlclwiLFxuICAgIFwiYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIGFkZCBGaW5lSUJUIHN1cHBvcnQgdG8gdGhlIEJQRiBkaXNwYXRjaGVyLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGFmZmVjdHMgaG93IEJQRiBwcm9ncmFtcyBhcmUgZXhlY3V0ZWQuIFdlIHNob3VsZCBmdXp6IHRoZSBCUEYgZGlzcGF0Y2hlciBsb2dpYyB3aXRoIEZpbmVJQlQgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMDRmYTAyNzczYWY3M2JmZTA0YzQ3M2Y2MjNiM2ZhMzNlMTA0ZTFkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxMzozOTo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZGU3NTE1ZWExYmVhZTguLjFjODI0OWQ4Y2EzYjIwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0zNzQwLDYgKzM3NDAsMTUgQEAgc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4rXHRcdC8qIElmIHJ1bm5pbmcgdW5kZXIgRmluZUlCVCwgZW50ZXIgdGhlIHByZWFtYmxlIHNvIHRoZSBmb2xsb3dpbmdcbitcdFx0ICogaW5kaXJlY3QganVtcCBsYW5kcyBvbiBhIHJlYWwgRU5EQlIgaW5zdGVhZCBvZiB0aGUgcG9pc29uLlxuK1x0XHQgKi9cbitcdFx0aWYgKGNmaV9tb2RlID09IENGSV9GSU5FSUJUKSB7XG4rXHRcdFx0RU1JVDFfb2ZmMzIoMHhiOCwgY2ZpX2JwZl9oYXNoKTtcdC8qIG1vdiAkY2ZpX2JwZl9oYXNoLCAlZWF4ICovXG4rXHRcdFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgQlBGX1JFR18zKSk7XHQvKiBzdWIgcmR4LCBjZmlfZ2V0X29mZnNldCgpICovXG4rXHRcdFx0RU1JVDJfb2ZmMzIoMHg4MSwgYWRkXzFyZWcoMHhFOCwgQlBGX1JFR18zKSwgY2ZpX2dldF9vZmZzZXQoKSk7XG4rXHRcdH1cbitcbiBcdFx0ZW1pdF9pbmRpcmVjdF9qdW1wKFx1MDAyNnByb2csIEJQRl9SRUdfMyAvKiBSMyAtXHUwMDNlIHJkeCAqLywgaW1hZ2UgKyAocHJvZyAtIGJ1ZikpO1xuIFxuIFx0XHQqcHByb2cgPSBwcm9nO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZDNmYzQwMzRlYjkwY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXG5AQCAtMCwwICsxLDQ3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgV2luZHNvciAqL1xuK1xuKy8qXG4rICogUmVncmVzc2lvbiB0ZXN0IGZvciB0aGUgeDg2IEJQRiBkaXNwYXRjaGVyJ3MgaW5kaXJlY3QtanVtcCBmYWxsYmFja1xuKyAqIHVuZGVyIEZpbmVJQlQuXG4rICpcbisgKiBXQVJOSU5HXG4rICogLS0tLS0tLVxuKyAqICBUaGlzIHRlc3QgY2FuIGNyYXNoIHRoZSBrZXJuZWwsIHRodXMgc2hvdWxkIGJlIHJ1biBpbiBhIFZNLlxuKyAqL1xuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWZfbGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcInhkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuc2tlbC5oXCJcbitcbisjZGVmaW5lIElGSU5ERVhfTE9cdFx0MVxuK1xuK3ZvaWQgdGVzdF94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0KHZvaWQpXG4re1xuK1x0c3RydWN0IHhkcF9kaXNwYXRjaGVyX2ZpbmVpYnQgKnNrZWw7XG4rXHRpbnQgZXJyLCBhdHRhY2hlZF9mZCwgdW5hdHRhY2hlZF9mZDtcbitcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyxcbitcdFx0LmRhdGFfaW4gPSBcdTAwMjZwa3RfdjQsXG4rXHRcdC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcbitcdCk7XG4rXG4rXHRza2VsID0geGRwX2Rpc3BhdGNoZXJfZmluZWlidF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRhdHRhY2hlZF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9kaXNwYXRjaGVyX2F0dGFjaGVkKTtcbitcdHVuYXR0YWNoZWRfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy54ZHBfZGlzcGF0Y2hlcl91bmF0dGFjaGVkKTtcbitcbitcdGVyciA9IGJwZl94ZHBfYXR0YWNoKElGSU5ERVhfTE8sIGF0dGFjaGVkX2ZkLCBYRFBfRkxBR1NfU0tCX01PREUsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImF0dGFjaF9wcm9nXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHModW5hdHRhY2hlZF9mZCwgXHUwMDI2dG9wdHMpO1xuK1x0QVNTRVJUX09LKGVyciwgXCJ1bmF0dGFjaGVkX3Rlc3RfcnVuXCIpO1xuK1x0QVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgWERQX1BBU1MsIFwidW5hdHRhY2hlZF9yZXR2YWxcIik7XG4rXG4rXHRicGZfeGRwX2RldGFjaChJRklOREVYX0xPLCBYRFBfRkxBR1NfU0tCX01PREUsIE5VTEwpO1xuK291dDpcbitcdHhkcF9kaXNwYXRjaGVyX2ZpbmVpYnRfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI0OWI4NGYwMWM4ZWViXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXG5AQCAtMCwwICsxLDE4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgV2luZHNvciAqL1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbitTRUMoXCJ4ZHBcIilcbitpbnQgeGRwX2Rpc3BhdGNoZXJfYXR0YWNoZWQoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdHJldHVybiBYRFBfUEFTUztcbit9XG4rXG4rU0VDKFwieGRwXCIpXG4raW50IHhkcF9kaXNwYXRjaGVyX3VuYXR0YWNoZWQoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdHJldHVybiBYRFBfUEFTUztcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6Mzk6NDguNTM3MTE2MjU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4NzYwMTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZpbmVJQlQgQlBGIEpJVCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRzIEZpbmVJQlQgc3VwcG9ydCB0byB0aGUgQlBGIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhlIGNvcmUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIHdpdGhpbiB0aGUgYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGNsZWFybHkgc2hvd3MgbG9naWMgdG8gaW5qZWN0IGEgcHJlYW1ibGUgd2hlbiBgY2ZpX21vZGVgIGlzIHNldCB0byBgQ0ZJX0ZJTkVJQlRgLiBUaGlzIHByZWFtYmxlLCB1c2luZyBgbW92YCwgYGFkZGAgaW5zdHJ1Y3Rpb25zLCBhcHBlYXJzIGRlc2lnbmVkIHRvIHByZXBhcmUgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBiZWZvcmUgYW4gaW5kaXJlY3QganVtcCwgbGlrZWx5IGVuc3VyaW5nIGl0IGxhbmRzIG9uIGEgdmFsaWQgYEVOREJSYCBpbnN0cnVjdGlvbiBpbnN0ZWFkIG9mIHBvdGVudGlhbCBcInBvaXNvblwiIGNvZGUuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0cyBhcmUsIGlzIHRoaXMgY2hhbmdlIGNvcnJlY3RseSBwbGFjZWQsIGFuZCBob3cgY2FuIEkgZGV0ZXJtaW5lIGlmIHRoaXMgZmVhdHVyZSBpcyBiZWluZyBjb21waWxlZCBjb3JyZWN0bHk/IExldCdzIHZlcmlmeSB0aGF0IGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBpcyBhY3R1YWxseSByZWFjaGFibGUgd2l0aGluIHRoZSBidWlsZCBhbmQgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIGtub3cgQlBGIEpJVCBpcyBnZW5lcmFsbHkgZW5hYmxlZCB2aWEgYENPTkZJR19CUEZfSklUYC4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIEZpbmVJQlQsIEnigJlsbCBhbHNvIGNoZWNrIGBDT05GSUdfRklORUlCVGAuIE5vdywgdG8gYmUgdGhvcm91Z2gsIEnigJlsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBmdW5jdGlvbiB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgaXRzZWxmLiBNYWtpbmcgc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIGNvcnJlY3RseSBjb25maWd1cmVkLCBhbmQgYWxsIGRlcGVuZGVuY2llcyBhcmUgbGlua2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6Mzk6NTQuMzI0NzIwMDk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MjY4NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtaXRfYnBmX2Rpc3BhdGNoZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjk4PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcyMS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzcyMjpzdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MjMte1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NzUtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3NzY6XFx0ZXJyID0gZW1pdF9icGZfZGlzcGF0Y2hlcihcXHUwMDI2cHJvZywgYSwgYSArIHBpdm90LFxcdC8qIGVtaXQgbG93ZXJfcGFydCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzc3LVxcdFxcdFxcdFxcdCAgcHJvZ3MsIGltYWdlLCBidWYpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3ODktXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3OTA6XFx0ZXJyID0gZW1pdF9icGZfZGlzcGF0Y2hlcihcXHUwMDI2cHJvZywgYSArIHBpdm90ICsgMSxcXHQvKiBlbWl0IHVwcGVyX3BhcnQgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc5MS1cXHRcXHRcXHRcXHQgIGIsIHByb2dzLCBpbWFnZSwgYnVmKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODExPWludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODE1LVxcdHNvcnQoZnVuY3MsIG51bV9mdW5jcywgc2l6ZW9mKGZ1bmNzWzBdKSwgY21wX2lwcywgTlVMTCk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4MTY6XFx0cmV0dXJuIGVtaXRfYnBmX2Rpc3BhdGNoZXIoXFx1MDAyNnByb2csIDAsIG51bV9mdW5jcyAtIDEsIGZ1bmNzLCBpbWFnZSwgYnVmKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzgxNy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEzOjM5OjU0LjQyMDAwNDE1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzQ1MjE0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0OlxuXG4qKkRpc3NlY3RpbmcgdGhlIEJQRiBEaXNwYXRjaGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgQlBGIGRpc3BhdGNoZXIgaXMgc2V0IHVwLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgZW1pdF9icGZfZGlzcGF0Y2hlcmAgaXMgY2xlYXJseSBhIGtleSBmdW5jdGlvbi4gVGhlIGRlc2NyaXB0aW9uIHNheXMgaXQncyBjYWxsZWQgYnkgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAsIGFuZCBldmVuIG1vcmUgaW50ZXJlc3RpbmdseSwgaXQgKnJlY3Vyc2l2ZWx5KiBjYWxscyBpdHNlbGYuIFRoYXQgcmVjdXJzaXZlIG5hdHVyZSBpcyBzb21ldGhpbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0bzsgbGlrZWx5LCB0aGlzIGlzIGJ1aWxkaW5nIHNvbWUga2luZCBvZiBjaGFpbiBvciBzdHJ1Y3R1cmUuIFRoZSBmYWN0IHRoYXQgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAgaXMgY2FsbGVkIGJ5IEJQRiBkaXNwYXRjaGVyIGxvZ2ljIGp1c3QgcmVpbmZvcmNlcyB0aGF0LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGNvbm5lY3Rpb24uIE15IG5leHQgc3RlcCBpcyBvYnZpb3VzIOKAkyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyYCBpdHNlbGYgaXMgYmVpbmcgaW52b2tlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHdvcmtmbG93IG9mIHRoaXMgQlBGIGRpc3BhdGNoZXIuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjYWxsIGdyYXBocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEzOjM5OjU3Ljg5NDUzNTEyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA4OTI3NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzc5OT1zdGF0aWMgaW50IGNtcF9pcHMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODEwLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozODExOmludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzgxMi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE1MjA9dm9pZCBicGZfdHJhbXBvbGluZV9wdXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cik7XFxuaW5jbHVkZS9saW51eC9icGYuaDoxNTIxOmludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTIyLVxcbi0tXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM9Njg9c3RhdGljIGJvb2wgYnBmX2Rpc3BhdGNoZXJfcmVtb3ZlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLFxcbi0tXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtODgtXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM6ODk6aW50IF9fd2VhayBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcylcXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYy05MC17XFxuLS1cXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYz05ND1zdGF0aWMgaW50IGJwZl9kaXNwYXRjaGVyX3ByZXBhcmUoc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCB2b2lkICppbWFnZSwgdm9pZCAqYnVmKVxcbi0tXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtMTAyLVxcdH1cXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYzoxMDM6XFx0cmV0dXJuIGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcihpbWFnZSwgYnVmLCBcXHUwMDI2aXBzWzBdLCBkLVxcdTAwM2VudW1fcHJvZ3MpO1xcbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTEwNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEzOjQwOjAwLjEwMzQ2OTMwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODQwMjI1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgRGlzcGF0Y2hlcioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBicGZfZGlzcGF0Y2hlcl9wcmVwYXJlYCBmdW5jdGlvbiwgZm91bmQgaW4gYGtlcm5lbC9icGYvZGlzcGF0Y2hlci5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBOYXR1cmFsbHksIEkgYWxyZWFkeSBrbm93IGBDT05GSUdfQlBGX0pJVGAgaXMgZXNzZW50aWFsLiBOb3csIHRoZSBuZXcgY29kZSBwYXRoLCB0aGF0J3MgdHJpZ2dlcmVkIGJ5IGBDT05GSUdfRklORUlCVGAsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIHNldC4gVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgYSBxdWljayBjaGVjayB0byBjb25maXJtIHRoZSBleGlzdGVuY2Ugb2YgYENPTkZJR19GSU5FSUJUYC4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDI3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6NDA6MDMuMjg3NDk0NzgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODE1MTk2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZJTkVJQlRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0yMzc4PWNvbmZpZyBDQUxMX1BBRERJTkdcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjM4Mi1cXG5hcmNoL3g4Ni9LY29uZmlnOjIzODM6Y29uZmlnIEZJTkVJQlRcXG5hcmNoL3g4Ni9LY29uZmlnLTIzODQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMzg3LVxcbmFyY2gveDg2L0tjb25maWc6MjM4ODpjb25maWcgRklORUlCVF9CSElcXG5hcmNoL3g4Ni9LY29uZmlnLTIzODktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzo0MDowNS44NjkwMjE2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzg0NTE0NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBGSU5FSUJUKipcblxuT2theSwgc28gYEZJTkVJQlRgIGlzIGZsYWdnZWQgYXMgYSBgZGVmX2Jvb2xgLCBtZWFuaW5nIGl0J3MgZWl0aGVyIGRlZmluZWQgYXMgYHlgIG9yIG5vdCBkZWZpbmVkLCBidXQgdGhlIGtleSBpcyB0aGF0IGl0J3MgKmRlcGVuZGVudCogb24gc29tZXRoaW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgXCJzb21ldGhpbmdcIiBpcy4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIHg4NiBhcmNoaXRlY3R1cmUgYW5kIHRoaXMgbG9va3MgbGlrZSBhIG1vcmUgcmVjZW50IGZlYXR1cmUsIEknbGwgZ28gdG8gYGFyY2gveDg2L0tjb25maWdgLiBMZXQncyB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAyMzgzIHRvIHNlZSB3aGF0IGNvbmRpdGlvbnMgYXJlIHNldHRpbmcgaXRzIHN0YXRlLiBIb3BlZnVsbHksIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSB0aGUgZW5hYmxpbmcgZmFjdG9ycyBmb3IgdGhpcyBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzOTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzo0MDoxNy4yNTM1MzkzODNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjM3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM3MDpcXHRcXG4yMzcxOlxcdCMgQmFzaWNhbGx5OiBGVU5DVElPTl9BTElHTk1FTlQgLSA1KkNGSVxcbjIzNzI6XFx0IyBleGNlcHQgS2NvbmZpZyBjYW4ndCBkbyBhcml0aG1ldGljIDovXFxuMjM3MzpcXHRjb25maWcgRlVOQ1RJT05fUEFERElOR19CWVRFU1xcbjIzNzQ6XFx0XFx0aW50XFxuMjM3NTpcXHRcXHRkZWZhdWx0IEZVTkNUSU9OX1BBRERJTkdfQ0ZJIGlmIENGSVxcbjIzNzY6XFx0XFx0ZGVmYXVsdCBGVU5DVElPTl9BTElHTk1FTlRcXG4yMzc3OlxcdFxcbjIzNzg6XFx0Y29uZmlnIENBTExfUEFERElOR1xcbjIzNzk6XFx0XFx0ZGVmX2Jvb2wgblxcbjIzODA6XFx0XFx0ZGVwZW5kcyBvbiBDQ19IQVNfRU5UUllfUEFERElORyBcXHUwMDI2XFx1MDAyNiBPQkpUT09MXFxuMjM4MTpcXHRcXHRzZWxlY3QgRlVOQ1RJT05fQUxJR05NRU5UXzE2QlxcbjIzODI6XFx0XFxuMjM4MzpcXHRjb25maWcgRklORUlCVFxcbjIzODQ6XFx0XFx0ZGVmX2Jvb2wgeVxcbjIzODU6XFx0XFx0ZGVwZW5kcyBvbiBYODZfS0VSTkVMX0lCVCBcXHUwMDI2XFx1MDAyNiBDRkkgXFx1MDAyNlxcdTAwMjYgTUlUSUdBVElPTl9SRVRQT0xJTkVcXG4yMzg2OlxcdFxcdHNlbGVjdCBDQUxMX1BBRERJTkdcXG4yMzg3OlxcdFxcbjIzODg6XFx0Y29uZmlnIEZJTkVJQlRfQkhJXFxuMjM4OTpcXHRcXHRkZWZfYm9vbCB5XFxuMjM5MDpcXHRcXHRkZXBlbmRzIG9uIEZJTkVJQlQgXFx1MDAyNlxcdTAwMjYgQ0NfSEFTX0tDRklfQVJJVFlcXG4yMzkxOlxcdFxcbjIzOTI6XFx0Y29uZmlnIEhBVkVfQ0FMTF9USFVOS1NcXG4yMzkzOlxcdFxcdGRlZl9ib29sIHlcXG4yMzk0OlxcdFxcdGRlcGVuZHMgb24gQ0NfSEFTX0VOVFJZX1BBRERJTkcgXFx1MDAyNlxcdTAwMjYgTUlUSUdBVElPTl9SRVRIVU5LIFxcdTAwMjZcXHUwMDI2IE9CSlRPT0xcXG4yMzk1OlxcdFxcbjIzOTY6XFx0Y29uZmlnIENBTExfVEhVTktTXFxuMjM5NzpcXHRcXHRkZWZfYm9vbCBuXFxuMjM5ODpcXHRcXHRzZWxlY3QgQ0FMTF9QQURESU5HXFxuMjM5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6NDA6MTcuMjUzODgxNTkyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTIyOTMyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBGSU5FSUJUIERlcGVuZGVuY3kgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgRklORUlCVGAgaGVyZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBiZXN0IGludGVncmF0ZSBpdC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0IHJlbGllcyBvbiBhIGZldyBjcml0aWNhbCBmZWF0dXJlczogYFg4Nl9LRVJORUxfSUJUYCwgYENGSWAsIGFuZCBgTUlUSUdBVElPTl9SRVRQT0xJTkVgLiBNYWtlcyBzZW5zZSwgYWxsIGNvcmUgdG8gY29udHJvbCBmbG93IGludGVncml0eS5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgYFg4Nl9LRVJORUxfSUJUYCBhbmQgYWxzbyBpZiBDRkkgaXMgcHJlc2VudC4gSG1tbSwgaG9sZCBvbi4uLiBgQ0ZJYD8gVGhhdCBkb2Vzbid0IHNlZW0gcmlnaHQuIEl0IGRvZXNuJ3QgcmluZyBhIGJlbGwuIFBlcmhhcHMgaXQncyB1bmRlciBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lPyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSBpbiBgYXJjaC94ODYvS2NvbmZpZ2AuIE1heWJlIGl0J3MgYENGSV9DTEFOR2A/IEkgbmVlZCB0byBjbGFyaWZ5IHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBleHBlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQ0LCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzo0MDoyMC44NDYxNzgyNzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTAyMTQyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9OTMwPWNvbmZpZyBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTXFxuLS1cXG5hcmNoL0tjb25maWctOTM2LVxcbmFyY2gvS2NvbmZpZzo5Mzc6Y29uZmlnIENGSVxcbmFyY2gvS2NvbmZpZy05MzgtXFx0Ym9vbCBcXFwiVXNlIEtlcm5lbCBDb250cm9sIEZsb3cgSW50ZWdyaXR5IChrQ0ZJKVxcXCJcXG4tLVxcbmFyY2gvS2NvbmZpZy05NTItXFxuYXJjaC9LY29uZmlnOjk1Mzpjb25maWcgQ0ZJX0NMQU5HXFxuYXJjaC9LY29uZmlnLTk1NC1cXHRib29sXFxuLS1cXG5hcmNoL0tjb25maWctOTU4LVxcbmFyY2gvS2NvbmZpZzo5NTk6Y29uZmlnIENGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNcXG5hcmNoL0tjb25maWctOTYwLVxcdGJvb2wgXFxcIk5vcm1hbGl6ZSBDRkkgdGFncyBmb3IgaW50ZWdlcnNcXFwiXFxuLS1cXG5hcmNoL0tjb25maWc9OTgxPWNvbmZpZyBIQVZFX0NGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNfUlVTVENcXG4tLVxcbmFyY2gvS2NvbmZpZy05ODgtXFxuYXJjaC9LY29uZmlnOjk4OTpjb25maWcgQ0ZJX1BFUk1JU1NJVkVcXG5hcmNoL0tjb25maWctOTkwLVxcdGJvb2wgXFxcIlVzZSBDRkkgaW4gcGVybWlzc2l2ZSBtb2RlXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0yMjkzPWNvbmZpZyBTVFJJQ1RfU0lHQUxUU1RBQ0tfU0laRVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMzA4LVxcbmFyY2gveDg2L0tjb25maWc6MjMwOTpjb25maWcgQ0ZJX0FVVE9fREVGQVVMVFxcbmFyY2gveDg2L0tjb25maWctMjMxMC1cXHRib29sIFxcXCJBdHRlbXB0IHRvIHVzZSBGaW5lSUJUIGJ5IGRlZmF1bHQgYXQgYm9vdCB0aW1lXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzo0MDoyMy4yOTY0MDM5MjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkzNDMxMzgzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBmb3IgYSBLZXJuZWwgVGVzdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgdGVzdCBzZXR1cC4gUmlnaHQgbm93LCBpdCBsb29rcyBsaWtlIGBDRklgLCBgWDg2X0tFUk5FTF9JQlRgLCBhbmQgYE1JVElHQVRJT05fUkVUUE9MSU5FYCBhcmUgcmVsZXZhbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgdG8gZXhwbGljaXRseSBlbmFibGUuIEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgYWJvdXQgbGlzdGluZyBgRklORUlCVGAgYXMgYW4gKmVuYWJsZSogY29uZmlnLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBgRklORUlCVGAgaXMgYSBgZGVmX2Jvb2wgeWAsIG1lYW5pbmcgaXQncyBhdXRvbWF0aWNhbGx5IHNldCB0byBcInllc1wiIGlmIGl0cyBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZC4gU28sIHJlYWxseSwgSSBqdXN0IG5lZWQgdG8gZm9jdXMgb24gZXhwbGljaXRseSBlbmFibGluZyB0aG9zZSBkZXBlbmRlbmNpZXMuIEdpdmVuIHRoYXQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIGBYODZfS0VSTkVMX0lCVGAsIGBDRklgLCBhbmQgYE1JVElHQVRJT05fUkVUUE9MSU5FYCBhcmUgdHVybmVkIG9uLlxuXG5PaCwgcmlnaHQsIHRoaXMgdGVzdCBpcyBhbiBYRFAgdGVzdC4gU2luY2UgdGhhdCBpcyB0aGUgY2FzZSwgZXZlbiB0aG91Z2ggdGhleSBtYXkgYmUgc3RhbmRhcmQsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfWERQX1NPQ0tFVFNgIGFyZSBlbmFibGVkLCBidXQgSSBhbSBub3QgdG9vIGNvbmNlcm5lZC5cblxuTm93LCBJJ20gY2hlY2tpbmcgYSBjb25kaXRpb24gYGNmaV9tb2RlID09IENGSV9GSU5FSUJUYC4gV2hlcmUgaXMgYGNmaV9tb2RlYCBldmVuIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayB0aGF0IGRvd24gdG8gY29uZmlybSB0aGUgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MDYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6NDA6NDIuNjM5NTQ1MzU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjkyODA3MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNmaV9tb2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oLTkyLSAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oOjkzOmVudW0gY2ZpX21vZGUge1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oLTk0LVxcdENGSV9BVVRPLFxcdC8qIEZpbmVJQlQgaWYgaGFyZHdhcmUgaGFzIElCVCwgb3RoZXJ3aXNlIGtDRkkgKi9cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oLTk5LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oOjEwMDpleHRlcm4gZW51bSBjZmlfbW9kZSBjZmlfbW9kZTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jZmkuaC0xMDEtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jZmkuaD0xMjQ9c3RhdGljIGlubGluZSBpbnQgY2ZpX2dldF9vZmZzZXQodm9pZClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jZmkuaC0xMjUte1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oOjEyNjpcXHRzd2l0Y2ggKGNmaV9tb2RlKSB7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY2ZpLmgtMTI3LVxcdGNhc2UgQ0ZJX0ZJTkVJQlQ6XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz05Njg9dm9pZCBfX2luaXRfb3JfbW9kdWxlIG5vaW5saW5lIGFwcGx5X3JldHBvbGluZXMoczMyICpzdGFydCwgczMyICplbmQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy05ODktXFx0XFx0XFx0LyogU2VlIGNmaV9wYXJhbm9pZC4gKi9cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzo5OTA6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGNmaV9tb2RlICE9IENGSV9GSU5FSUJUKTtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy05OTEtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy05OTctXFx0XFx0XFx0aWYgKGRlc3RbLTFdID09IDB4ZDYgXFx1MDAyNlxcdTAwMjYgKGRlc3RbMF0gXFx1MDAyNiAweGYwKSA9PSAweDcwKSB7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6OTk4OlxcdFxcdFxcdFxcdFdBUk5fT05fT05DRShjZmlfbW9kZSAhPSBDRklfRklORUlCVCk7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtOTk5LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MTE5MT12b2lkIF9faW5pdF9vcl9tb2R1bGUgYXBwbHlfc2VhbF9lbmRicihzMzIgKnN0YXJ0LCBzMzIgKmVuZCkgeyB9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjAyLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjEyMDM6ZW51bSBjZmlfbW9kZSBjZmlfbW9kZSBfX3JvX2FmdGVyX2luaXQgPSBfX0NGSV9ERUZBVUxUO1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyMDQtc3RhdGljIGJvb2wgY2ZpX2RlYnVnIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jPTEyMTE9dTMyIGNmaV9nZXRfZnVuY19oYXNoKHZvaWQgKmZ1bmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjE1LVxcdGZ1bmMgLT0gY2ZpX2dldF9vZmZzZXQoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjE2OlxcdHN3aXRjaCAoY2ZpX21vZGUpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjE3LVxcdGNhc2UgQ0ZJX0ZJTkVJQlQ6XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0xMjMzPWludCBjZmlfZ2V0X2Z1bmNfYXJpdHkodm9pZCAqZnVuYylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyMzctXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTIzODpcXHRpZiAoY2ZpX21vZGUgIT0gQ0ZJX0ZJTkVJQlQgXFx1MDAyNlxcdTAwMjYgIWNmaV9iaGkpXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTIzOS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jPTEyNzA9c3RhdGljIF9faW5pdCBpbnQgY2ZpX3BhcnNlX2NtZGxpbmUoY2hhciAqc3RyKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI4Mi1cXHRcXHRpZiAoIXN0cmNtcChzdHIsIFxcXCJhdXRvXFxcIikpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjgzOlxcdFxcdFxcdGNmaV9tb2RlID0gQ0ZJX0FVVE87XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI4NC1cXHRcXHR9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCBcXFwib2ZmXFxcIikpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjg1OlxcdFxcdFxcdGNmaV9tb2RlID0gQ0ZJX09GRjtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjg2LVxcdFxcdFxcdGNmaV9yYW5kID0gZmFsc2U7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjg5LVxcdFxcdH0gZWxzZSBpZiAoIXN0cmNtcChzdHIsIFxcXCJrY2ZpXFxcIikpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjkwOlxcdFxcdFxcdGNmaV9tb2RlID0gQ0ZJX0tDRkk7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI5MS1cXHRcXHR9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCBcXFwiZmluZWlidFxcXCIpKSB7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTI5MjpcXHRcXHRcXHRjZmlfbW9kZSA9IENGSV9GSU5FSUJUO1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyOTMtXFx0XFx0fSBlbHNlIGlmICghc3RyY21wKHN0ciwgXFxcIm5vcmFuZFxcXCIpKSB7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjk4LVxcdFxcdH0gZWxzZSBpZiAoIXN0cmNtcChzdHIsIFxcXCJwYXJhbm9pZFxcXCIpKSB7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTI5OTpcXHRcXHRcXHRpZiAoY2ZpX21vZGUgPT0gQ0ZJX0ZJTkVJQlQpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMzAwLVxcdFxcdFxcdFxcdGNmaV9wYXJhbm9pZCA9IHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMzA1LSNpZmRlZiBDT05GSUdfRklORUlCVF9CSElcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMzA2OlxcdFxcdFxcdGlmIChjZmlfbW9kZSA9PSBDRklfRklORUlCVCkge1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEzMDctXFx0XFx0XFx0XFx0Y2ZpX2JoaSA9IHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0xNzc4PXN0YXRpYyB2b2lkIF9fYXBwbHlfZmluZWlidChzMzIgKnN0YXJ0X3JldHBvbGluZSwgczMyICplbmRfcmV0cG9saW5lLFxcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTc4OS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxNzkwOlxcdGlmIChjZmlfbW9kZSA9PSBDRklfQVVUTykge1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE3OTE6XFx0XFx0Y2ZpX21vZGUgPSBDRklfS0NGSTtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xNzkyLVxcdFxcdGlmIChIQVNfS0VSTkVMX0lCVCBcXHUwMDI2XFx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0lCVCkpIHtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTE3OTgtXFx0XFx0XFx0XFx0Y2ZpX3BhcmFub2lkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxNzk5OlxcdFxcdFxcdGNmaV9tb2RlID0gQ0ZJX0ZJTkVJQlQ7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTgwMC1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xODMzLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE4MzQ6XFx0c3dpdGNoIChjZmlfbW9kZSkge1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTE4MzUtXFx0Y2FzZSBDRklfT0ZGOlxcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MTg4OD1zdGF0aWMgdm9pZCBwb2lzb25fY2ZpKHZvaWQgKmFkZHIpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xODk3LVxcdCAqL1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE4OTg6XFx0c3dpdGNoIChjZmlfbW9kZSkge1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTE4OTktXFx0Y2FzZSBDRklfRklORUlCVDpcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jZmkuYz02OD1lbnVtIGJ1Z190cmFwX3R5cGUgaGFuZGxlX2NmaV9mYWlsdXJlKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NmaS5jLTcyLVxcbmFyY2gveDg2L2tlcm5lbC9jZmkuYzo3MzpcXHRzd2l0Y2ggKGNmaV9tb2RlKSB7XFxuYXJjaC94ODYva2VybmVsL2NmaS5jLTc0LVxcdGNhc2UgQ0ZJX0tDRkk6XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDc4PXN0YXRpYyB2b2lkIGVtaXRfY2ZpKHU4ICoqcHByb2csIHU4ICppcCwgdTMyIGhhc2gsIGludCBhcml0eSlcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00ODEtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQ4MjpcXHRzd2l0Y2ggKGNmaV9tb2RlKSB7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQ4My1cXHRjYXNlIENGSV9GSU5FSUJUOlxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM3MjI9c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NDUtXFx0XFx0ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3NDY6XFx0XFx0aWYgKGNmaV9tb2RlID09IENGSV9GSU5FSUJUKSB7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NDctXFx0XFx0XFx0RU1JVDFfb2ZmMzIoMHhiOCwgY2ZpX2JwZl9oYXNoKTtcXHQvKiBtb3YgJGNmaV9icGZfaGFzaCwgJWVheCAqL1xcbi0tXFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmM9NDk4PXN0cnVjdCBtdGRfaW5mbyAqY2ZpX2NtZHNldF8wMDAxKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBpbnQgcHJpbWFyeSlcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jLTUyNi1cXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYzo1Mjc6XFx0aWYgKGNmaS1cXHUwMDNlY2ZpX21vZGUgPT0gQ0ZJX01PREVfQ0ZJKSB7XFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMtNTI4LVxcdFxcdC8qXFxuLS1cXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYy01NTUtXFx0fVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jOjU1NjpcXHRlbHNlIGlmIChjZmktXFx1MDAzZWNmaV9tb2RlID09IENGSV9NT0RFX0pFREVDKSB7XFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMtNTU3LVxcdFxcdC8qIEFwcGx5IGplZGVjIHNwZWNpZmljIGZpeHVwcyAqL1xcbi0tXFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmM9NjAwPXN0cnVjdCBtdGRfaW5mbyAqY2ZpX2NtZHNldF8wMDAyKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBpbnQgcHJpbWFyeSlcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jLTYzNi1cXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYzo2Mzc6XFx0aWYgKGNmaS1cXHUwMDNlY2ZpX21vZGU9PUNGSV9NT0RFX0NGSSl7XFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMtNjM4LVxcdFxcdHVuc2lnbmVkIGNoYXIgYm9vdGxvYztcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jLTcxOS1cXHR9IC8qIENGSSBtb2RlICovXFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmM6NzIwOlxcdGVsc2UgaWYgKGNmaS1cXHUwMDNlY2ZpX21vZGUgPT0gQ0ZJX01PREVfSkVERUMpIHtcXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYy03MjEtXFx0XFx0LyogQXBwbHkgamVkZWMgc3BlY2lmaWMgZml4dXBzICovXFxuLS1cXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYz03NjY9c3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqY2ZpX2FtZHN0ZF9zZXR1cChzdHJ1Y3QgbXRkX2luZm8gKm10ZClcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jLTc3NC1cXHRwcmludGsoS0VSTl9OT1RJQ0UgXFxcIm51bWJlciBvZiAlcyBjaGlwczogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmM6Nzc1OlxcdCAgICAgICAoY2ZpLVxcdTAwM2VjZmlfbW9kZSA9PSBDRklfTU9ERV9DRkkpP1xcXCJDRklcXFwiOlxcXCJKRURFQ1xcXCIsY2ZpLVxcdTAwM2VudW1jaGlwcyk7XFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMtNzc2LVxcdC8qIFNlbGVjdCB0aGUgY29ycmVjdCBnZW9tZXRyeSBzZXR1cCAqL1xcbi0tXFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmM9MTE0PXN0cnVjdCBtdGRfaW5mbyAqY2ZpX2NtZHNldF8wMDIwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBpbnQgcHJpbWFyeSlcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jLTExOC1cXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYzoxMTk6XFx0aWYgKGNmaS1cXHUwMDNlY2ZpX21vZGUpIHtcXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYy0xMjAtXFx0XFx0LypcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jPTE5NT1zdGF0aWMgaW50IF9feGlwcmFtIGNmaV9jaGlwX3NldHVwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLFxcbi0tXFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMtMjE2LVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jOjIxNzpcXHRjZmktXFx1MDAzZWNmaV9tb2RlID0gQ0ZJX01PREVfQ0ZJO1xcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jLTIxOC1cXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmM9MTk3Mz1zdGF0aWMgaW50IGNmaV9qZWRlY19zZXR1cChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGNmaV9wcml2YXRlICpjZmksIGludCBpbmRleClcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMtMTk5OC1cXHRjZmktXFx1MDAzZWNmaXEtXFx1MDAzZURldlNpemUgPSBqZWRlY190YWJsZVtpbmRleF0uZGV2X3NpemU7XFxuZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYzoxOTk5OlxcdGNmaS1cXHUwMDNlY2ZpX21vZGUgPSBDRklfTU9ERV9KRURFQztcXG5kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jLTIwMDAtXFx0Y2ZpLVxcdTAwM2VzZWN0b3JfZXJhc2VfY21kID0gQ01EKDB4MzApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tdGQvY2ZpLmg9MjczPXN0cnVjdCBjZmlfcHJpdmF0ZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L210ZC9jZmkuaC0yNzctXFx0aW50IGRldmljZV90eXBlO1xcbmluY2x1ZGUvbGludXgvbXRkL2NmaS5oOjI3ODpcXHRpbnQgY2ZpX21vZGU7XFx0XFx0LyogQXJlIHdlIGEgSkVERUMgZGV2aWNlIHByZXRlbmRpbmcgdG8gYmUgQ0ZJPyAqL1xcbmluY2x1ZGUvbGludXgvbXRkL2NmaS5oLTI3OS1cXHRpbnQgYWRkcl91bmxvY2sxO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9NjY5PXZvaWQgYnBmX3Byb2dfa2FsbHN5bXNfYWRkKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy02ODUtXFx0ICovXFxua2VybmVsL2JwZi9jb3JlLmM6Njg2OlxcdGlmIChjZmlfbW9kZSAhPSBDRklfRklORUlCVClcXG5rZXJuZWwvYnBmL2NvcmUuYy02ODctXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9Njk5PXZvaWQgYnBmX3Byb2dfa2FsbHN5bXNfZGVsKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy03MDUtI2lmZGVmIENPTkZJR19GSU5FSUJUXFxua2VybmVsL2JwZi9jb3JlLmM6NzA2OlxcdGlmIChjZmlfbW9kZSAhPSBDRklfRklORUlCVClcXG5rZXJuZWwvYnBmL2NvcmUuYy03MDctXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzo0MDo0NS4zMzIzNjMxMDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk1MzI3NjUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRmluZUlCVCBTdXBwb3J0IGluIHRoZSBCUEYgRGlzcGF0Y2hlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBjZmlfbW9kZWAsIHRoZSBjcnVjaWFsIGluZGljYXRvciBmb3IgQ29udHJvbC1GbG93IEludGVncml0eSAoQ0ZJKSwgcGFydGljdWxhcmx5IHdpdGggRmluZUlCVCwgaXMgc2V0IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jZmkuaGAgYW5kIGBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY2AuIEl0IGhpbmdlcyBvbiBgQ0ZJX0ZJTkVJQlRgIGJlaW5nIGFjdGl2ZSwgY29udGluZ2VudCBvbiBlaXRoZXIgdGhlIGBGSU5FSUJUYCBmZWF0dXJlIGJlaW5nIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgKm9yKiBiZWluZyBleHBsaWNpdGx5IGZvcmNlZCB0aHJvdWdoIGEgY29tbWFuZC1saW5lIG9wdGlvbi4gU28sIGBDT05GSUdfRklORUlCVGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSByZWxhdGVkIEJQRiBjb25maWd1cmF0aW9ucy4gYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHByb2JhYmx5IGltcG9ydGFudCwgYW5kIGdpdmVuIHRoZSB0ZXN0J3MgWERQIGZvY3VzLCBJJ2xsIGtlZXAgYENPTkZJR19YRFBfU09DS0VUU2AgaW4gbWluZCBhcyBhIHBvdGVudGlhbCBkZXBlbmRlbmN5LCBldmVuIHRob3VnaCB0aGUgdGVzdCBpdHNlbGYganVzdCBmb2N1c2VzIG9uIGBicGZfeGRwX2F0dGFjaGAgYW5kIGBicGZfcHJvZ190ZXN0X3J1bl9vcHRzYC4gSSBzaG91bGQgZGlnIGludG8gdGhlIHRlc3QgZmlsZSBpdHNlbGY6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmNgLiBJJ20gZXhwZWN0aW5nIHN0YW5kYXJkIEJQRiBmdW5jdGlvbmFsaXR5IHRoZXJlLCBiYXNlZCBvbiB0aGUgY2FsbHMuXG5cblJpZ2h0LCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlIGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBmdW5jdGlvbi4gSXMgdGhlcmUgYW55IGFkZGl0aW9uYWwgbW9kaWZpZWQgZnVuY3Rpb24/IE5vcGUuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3IuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGVuaGFuY2VzIHRoZSBCUEYgZGlzcGF0Y2hlciB3aXRoIEZpbmVJQlQgc3VwcG9ydC5cblxuTm93LCB0byBhc3Nlc3MgdGhlIGltcGFjdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGZpdHMgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLiBJdCdzIGNhbGxlZCBkdXJpbmcgdGhlIEJQRiBwcm9ncmFtIGxvYWQgb3IgYXR0YWNoIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBkaXNwYXRjaGVyIGlzIHVwZGF0ZWQuIFRoYXQgdGVsbHMgbWUgaXQncyAqbm90KiBhIGhvdC1wYXRoIGZ1bmN0aW9uIGluIHRoZSBzZW5zZSBvZiBoaWdoLWZyZXF1ZW5jeSBwYWNrZXQgcHJvY2Vzc2luZyBvciBzaW1pbGFyLiBJdCdzIGludm9sdmVkIGluIEpJVCBjb21waWxhdGlvbiwgd2hpY2ggZ2l2ZXMgdXMgYSBnb29kIGZvY3VzLiBBbmQgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAgaXMgbGlrZWx5IGFsc28gd29ydGggZXhhbWluaW5nLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gc2VlIHdoZXRoZXIgYGNmaV9icGZfaGFzaGAgaXMgZGVmaW5lZC4gVGhpcyBpcyBhIGNydWNpYWwgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTEwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEzOjQwOjUyLjI4NTY0MzU4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0NTQ3OTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZmlfYnBmX2hhc2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9NTEzPXN0YXRpYyBpbnQgYnVpbGRfcHJvbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBlYnBmX2Zyb21fY2JwZilcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTU1Mi1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzo1NTM6XFx0ZW1pdF9rY2ZpKGlzX21haW5fcHJvZyA/IGNmaV9icGZfaGFzaCA6IGNmaV9icGZfc3VicHJvZ19oYXNoLCBjdHgpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTU1NC1cXHRjb25zdCBpbnQgaWR4MCA9IGN0eC1cXHUwMDNlaWR4O1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0yMDAyPXZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgYm9vbCBpc19zdWJwcm9nKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDMzLVxcdC8qIGVtaXQga2NmaSB0eXBlIHByZWFtYmxlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIGZpcnN0IGluc24gKi9cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIwMzQ6XFx0ZW1pdF9rY2ZpKGlzX3N1YnByb2cgPyBjZmlfYnBmX3N1YnByb2dfaGFzaCA6IGNmaV9icGZfaGFzaCwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwMzUtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0xNzc4PXN0YXRpYyB2b2lkIF9fYXBwbHlfZmluZWlidChzMzIgKnN0YXJ0X3JldHBvbGluZSwgczMyICplbmRfcmV0cG9saW5lLFxcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTgxNS1cXHRcXHRcXHRjZmlfc2VlZCA9IGdldF9yYW5kb21fdTMyKCk7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTgxNjpcXHRcXHRcXHRjZmlfYnBmX2hhc2ggPSBjZmlfcmVoYXNoKGNmaV9icGZfaGFzaCk7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTgxNy1cXHRcXHRcXHRjZmlfYnBmX3N1YnByb2dfaGFzaCA9IGNmaV9yZWhhc2goY2ZpX2JwZl9zdWJwcm9nX2hhc2gpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTUzNT1zdGF0aWMgdm9pZCBlbWl0X3Byb2xvZ3VlKHU4ICoqcHByb2csIHU4ICppcCwgdTMyIHN0YWNrX2RlcHRoLCBib29sIGVicGZfZnJvbV9jYnBmLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTU0My1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo1NDQ6XFx0XFx0ZW1pdF9jZmkoXFx1MDAyNnByb2csIGlwLCBjZmlfYnBmX2hhc2gsIDEpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy01NDUtXFx0fVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM3MjI9c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NDYtXFx0XFx0aWYgKGNmaV9tb2RlID09IENGSV9GSU5FSUJUKSB7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3NDc6XFx0XFx0XFx0RU1JVDFfb2ZmMzIoMHhiOCwgY2ZpX2JwZl9oYXNoKTtcXHQvKiBtb3YgJGNmaV9icGZfaGFzaCwgJWVheCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzQ4LVxcdFxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1xcdC8qIHN1YiByZHgsIGNmaV9nZXRfb2Zmc2V0KCkgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvY2ZpLmg9NDE9c3RhdGljIGlubGluZSB1MzIgY2ZpX2dldF9mdW5jX2hhc2godm9pZCAqZnVuYylcXG4tLVxcbmluY2x1ZGUvbGludXgvY2ZpLmgtNTItLyogQ0ZJIHR5cGUgaGFzaGVzIGZvciBCUEYgZnVuY3Rpb24gdHlwZXMgKi9cXG5pbmNsdWRlL2xpbnV4L2NmaS5oOjUzOmV4dGVybiB1MzIgY2ZpX2JwZl9oYXNoO1xcbmluY2x1ZGUvbGludXgvY2ZpLmgtNTQtZXh0ZXJuIHUzMiBjZmlfYnBmX3N1YnByb2dfaGFzaDtcXG4tLVxcbmluY2x1ZGUvbGludXgvY2ZpLmg9NTk9c3RhdGljIGlubGluZSB1MzIgY2ZpX2dldF9mdW5jX2hhc2godm9pZCAqZnVuYykgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvY2ZpLmgtNjAtXFxuaW5jbHVkZS9saW51eC9jZmkuaDo2MTojZGVmaW5lIGNmaV9icGZfaGFzaCAwVVxcbmluY2x1ZGUvbGludXgvY2ZpLmgtNjItI2RlZmluZSBjZmlfYnBmX3N1YnByb2dfaGFzaCAwVVxcbi0tXFxua2VybmVsL2NmaS5jPTM5PWV4dGVybiB0eXBlb2YoKihicGZfZnVuY190KTApIF9fYnBmX3Byb2dfcnVuWDtcXG5rZXJuZWwvY2ZpLmM6NDA6REVGSU5FX0NGSV9UWVBFKGNmaV9icGZfaGFzaCwgX19icGZfcHJvZ19ydW5YKTtcXG5rZXJuZWwvY2ZpLmMtNDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEzOjQwOjU0LjYzMTEzNTYyOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDU3NjM4MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYGNmaV9icGZfaGFzaGAgaXMgZGVmaW5pdGVseSBkZWZpbmVkLiBOb3csIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgZW1pdF9icGZfZGlzcGF0Y2hlcmAgaXMgYmVpbmcgY29tcGlsZWQuIExvb2tpbmcgYXQgdGhlIGNvZGViYXNlLCBJIHNlZSBpdCdzIGxvY2F0ZWQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQncyBnb29kLCBidXQgZG9lcyB0aGUgYnVpbGQgc3lzdGVtIGtub3cgYWJvdXQgaXQ/IExldCdzIGNoZWNrIGBhcmNoL3g4Ni9uZXQvTWFrZWZpbGVgLiBBaCwgdGhlcmUgaXQgaXM6IGBvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wLm8gYnBmX2ppdF9jb21wMzIub2AuIE9rYXksIHNvIGBDT05GSUdfQlBGX0pJVGAgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYENPTkZJR19GSU5FSUJUYC4gV2UgZmlndXJlZCBvdXQgZWFybGllciB0aGF0IGl0IGRlcGVuZHMgb24gYFg4Nl9LRVJORUxfSUJUYCwgYENGSWAsIGFuZCBgTUlUSUdBVElPTl9SRVRQT0xJTkVgLiBMZXQgbWUganVzdCBtYWtlIGEgbWVudGFsIG5vdGUgb2YgYWxsIHRoZXNlIG9wdGlvbnM6IGBGSU5FSUJUYCwgYFg4Nl9LRVJORUxfSUJUYCwgYENGSWAsIGFuZCBgTUlUSUdBVElPTl9SRVRQT0xJTkVgLiBXYWl0IGEgc2Vjb25k4oCmIGBDRklgPyBUaGF0J3Mgbm90IHJpZ2h0LiBQcmV0dHkgc3VyZSBgQ0ZJYCBpcyBhIGdlbmVyaWMgdGVybSBhbmQgYENGSV9DTEFOR2AgaXMgdGhlIGFjdHVhbCBjb25maWcgb3B0aW9uLiBSaWdodCwgYmV0dGVyIGRvdWJsZS1jaGVjayBgYXJjaC9LY29uZmlnYCB0byBiZSBzdXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODAsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6NDE6MDAuNjg4Nzc3NjY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk3MzQyNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRklcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTkzMD1jb25maWcgQVJDSF9VU0VTX0NGSV9HRU5FUklDX0xMVk1fUEFTU1xcbi0tXFxuYXJjaC9LY29uZmlnLTkzNi1cXG5hcmNoL0tjb25maWc6OTM3OmNvbmZpZyBDRklcXG5hcmNoL0tjb25maWctOTM4LVxcdGJvb2wgXFxcIlVzZSBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSlcXFwiXFxuLS1cXG5hcmNoL0tjb25maWctOTUyLVxcbmFyY2gvS2NvbmZpZzo5NTM6Y29uZmlnIENGSV9DTEFOR1xcbmFyY2gvS2NvbmZpZy05NTQtXFx0Ym9vbFxcbi0tXFxuYXJjaC9LY29uZmlnLTk1OC1cXG5hcmNoL0tjb25maWc6OTU5OmNvbmZpZyBDRklfSUNBTExfTk9STUFMSVpFX0lOVEVHRVJTXFxuYXJjaC9LY29uZmlnLTk2MC1cXHRib29sIFxcXCJOb3JtYWxpemUgQ0ZJIHRhZ3MgZm9yIGludGVnZXJzXFxcIlxcbi0tXFxuYXJjaC9LY29uZmlnPTk4MT1jb25maWcgSEFWRV9DRklfSUNBTExfTk9STUFMSVpFX0lOVEVHRVJTX1JVU1RDXFxuLS1cXG5hcmNoL0tjb25maWctOTg4LVxcbmFyY2gvS2NvbmZpZzo5ODk6Y29uZmlnIENGSV9QRVJNSVNTSVZFXFxuYXJjaC9LY29uZmlnLTk5MC1cXHRib29sIFxcXCJVc2UgQ0ZJIGluIHBlcm1pc3NpdmUgbW9kZVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MjI5Mz1jb25maWcgU1RSSUNUX1NJR0FMVFNUQUNLX1NJWkVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjMwOC1cXG5hcmNoL3g4Ni9LY29uZmlnOjIzMDk6Y29uZmlnIENGSV9BVVRPX0RFRkFVTFRcXG5hcmNoL3g4Ni9LY29uZmlnLTIzMTAtXFx0Ym9vbCBcXFwiQXR0ZW1wdCB0byB1c2UgRmluZUlCVCBieSBkZWZhdWx0IGF0IGJvb3QgdGltZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6NDE6MDMuMDg2MTM1NjI5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NzcwODkxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBEaXNwYXRjaGVyIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gYGNvbmZpZyBDRklgIGlzIGEgYm9vbGVhbiwgYW5kIHRoZXJlZm9yZSBgQ0ZJYCBpcyBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQncyBtYWtlIGEgbGlzdCB0byBrZWVwIHRoaW5ncyBzdHJhaWdodC4gSSdsbCBpbmNsdWRlIGBGSU5FSUJUYCwgYFg4Nl9LRVJORUxfSUJUYCwgYENGSWAsIGFuZCBgTUlUSUdBVElPTl9SRVRQT0xJTkVgLiBXYWl0IGEgbWludXRlLCBgRklORUlCVGAgaXMgYSBgZGVmX2Jvb2wgeWAgaWYgaXRzIGRlcGVuZGVuY2llcyBhcmUgbWV0LCBzbyB3ZSBkb24ndCAqbmVlZCogdG8gZXhwbGljaXRseSBlbmFibGUgaXQgaWYgdGhlIGRlcGVuZGVuY2llcyBhcmUgdGFrZW4gY2FyZSBvZiwgYnV0IGl0IGRvZXNuJ3QgaHVydCB0byBsaXN0IGl0LiBUaGVyZWZvcmUsIEkgd2lsbCBsaXN0IGBGSU5FSUJUYCwgYFg4Nl9LRVJORUxfSUJUYCwgYENGSWAsIGFuZCBgTUlUSUdBVElPTl9SRVRQT0xJTkVgLlxuXG5JIHNob3VsZCBwcm9iYWJseSBhZGQgYEJQRl9KSVRgIHRvIHRoaXMgbGlzdCBhcyB3ZWxsLCBhcyB3ZWxsIGFzIGBCUEZfU1lTQ0FMTGAgYW5kIGFsc28gYFhEUF9TT0NLRVRTYCwganVzdCB0byBiZSBzYWZlLlxuXG5Ob3csIGxldCdzIHNlZSBpZiBgZW1pdF9icGZfZGlzcGF0Y2hlcmAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBZZXMsIGl0IGlzLiBJdCdzIGNhbGxlZCBieSBgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBicGZfZGlzcGF0Y2hlcl9wcmVwYXJlYC4gYGJwZl9kaXNwYXRjaGVyX3ByZXBhcmVgIGlzIGluIHR1cm4gY2FsbGVkIGJ5IGBicGZfZGlzcGF0Y2hlcl91cGRhdGVgLCBhbmQgdGhhdCBoYXBwZW5zIHdoZW4gYW4gWERQIHByb2dyYW0gaXMgYXR0YWNoZWQuIFRoZXJlZm9yZSwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IEFoLCBgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCBjb3VsZCBiZSB1c2VmdWwgdG8gZ3VhcmFudGVlIHRoZSBKSVQgaXMgdXNlZCwgYW5kIGBDT05GSUdfWERQX1NPQ0tFVFNgIGlzIGltcG9ydGFudCBmb3IgWERQIHN1cHBvcnQuXG5cblNvLCBoZXJlJ3MgdGhlIHN1bW1hcnk6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiB0cnVlXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYGVtaXRfYnBmX2Rpc3BhdGNoZXJgLCBgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgRklORUlCVGAsIGBYODZfS0VSTkVMX0lCVGAsIGBDRklgLCBgTUlUSUdBVElPTl9SRVRQT0xJTkVgLCBgQlBGX0pJVGAsIGBCUEZfU1lTQ0FMTGBcblxuTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBhZGQgRmluZUlCVCBzdXBwb3J0IHRvIHRoZSBCUEYgZGlzcGF0Y2hlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBkaXJlY3RseSBpbXBhY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGV4ZWN1dGVkLiBXZSBzaG91bGQgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiB0aGUgQlBGIGRpc3BhdGNoZXIgbG9naWMsIGVzcGVjaWFsbHkgd2l0aCBGaW5lSUJUIGVuYWJsZWQuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHNpZ25hdHVyZXMgb2YgdGhlIGZ1bmN0aW9ucy4gYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGggdGhlIHNpZ25hdHVyZSBgc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKWAuIFllcywgdGhhdCdzIGNvcnJlY3QuIGBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXJgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uIHdpdGggdGhlIHNpZ25hdHVyZSBgaW50IGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcih2b2lkICppbWFnZSwgdm9pZCAqYnVmLCBzNjQgKmZ1bmNzLCBpbnQgbnVtX2Z1bmNzKWAuXG5cbkFscmlnaHQsIEknbSBzYXRpc2ZpZWQuIEknbGwgc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg5MCwiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6NDE6MTIuNTYzMjMwMTkxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NjI1NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSU5FSUJUXCIsXG4gICAgXCJYODZfS0VSTkVMX0lCVFwiLFxuICAgIFwiQ0ZJXCIsXG4gICAgXCJNSVRJR0FUSU9OX1JFVFBPTElORVwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbWl0X2JwZl9kaXNwYXRjaGVyXCIsXG4gICAgXCJhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gYWRkIEZpbmVJQlQgc3VwcG9ydCB0byB0aGUgQlBGIGRpc3BhdGNoZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWZmZWN0cyBob3cgQlBGIHByb2dyYW1zIGFyZSBleGVjdXRlZC4gV2Ugc2hvdWxkIGZ1enogdGhlIEJQRiBkaXNwYXRjaGVyIGxvZ2ljIHdpdGggRmluZUlCVCBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZJTkVJQlRcIixcbiAgICBcIlg4Nl9LRVJORUxfSUJUXCIsXG4gICAgXCJDRklcIixcbiAgICBcIk1JVElHQVRJT05fUkVUUE9MSU5FXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVtaXRfYnBmX2Rpc3BhdGNoZXJcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBhZGQgRmluZUlCVCBzdXBwb3J0IHRvIHRoZSBCUEYgZGlzcGF0Y2hlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGV4ZWN1dGVkLiBXZSBzaG91bGQgZnV6eiB0aGUgQlBGIGRpc3BhdGNoZXIgbG9naWMgd2l0aCBGaW5lSUJUIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownpfc2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 13:06:16 +0000 UTC FinishedAt: 2026-07-08 13:41:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "d2c9a99135da931377240942d44f3dea104cedb8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FINEIBT", "X86_KERNEL_IBT", "CFI", "MITIGATION_RETPOLINE", "BPF_JIT", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "d2c9a99135da931377240942d44f3dea104cedb8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FINEIBT", "X86_KERNEL_IBT", "CFI", "MITIGATION_RETPOLINE", "BPF_JIT", "BPF_SYSCALL" ], "series_id": "56857440-8e4b-4d17-9a0d-847f28f9b1c1" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "emit_bpf_dispatcher", "arch_prepare_bpf_dispatcher" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-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+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZJTkVJQlQmIzM0OywKICAgICYjMzQ7WDg2X0tFUk5FTF9JQlQmIzM0OywKICAgICYjMzQ7Q0ZJJiMzNDssCiAgICAmIzM0O01JVElHQVRJT05fUkVUUE9MSU5FJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbWl0X2JwZl9kaXNwYXRjaGVyJiMzNDssCiAgICAmIzM0O2FyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gYWRkIEZpbmVJQlQgc3VwcG9ydCB0byB0aGUgQlBGIGRpc3BhdGNoZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWZmZWN0cyBob3cgQlBGIHByb2dyYW1zIGFyZSBleGVjdXRlZC4gV2Ugc2hvdWxkIGZ1enogdGhlIEJQRiBkaXNwYXRjaGVyIGxvZ2ljIHdpdGggRmluZUlCVCBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTA0ZmEwMjc3M2FmNzNiZmUwNGM0NzNmNjIzYjNmYTMzZTEwNGUxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMTM6Mzk6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uMWM4MjQ5ZDhjYTNiMjAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTM3NDAsNiAmIzQzOzM3NDAsMTUgQEAgc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0XHQvKiBJZiBydW5uaW5nIHVuZGVyIEZpbmVJQlQsIGVudGVyIHRoZSBwcmVhbWJsZSBzbyB0aGUgZm9sbG93aW5nXG4mIzQzO1x0XHQgKiBpbmRpcmVjdCBqdW1wIGxhbmRzIG9uIGEgcmVhbCBFTkRCUiBpbnN0ZWFkIG9mIHRoZSBwb2lzb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChjZmlfbW9kZSA9PSBDRklfRklORUlCVCkge1xuJiM0MztcdFx0XHRFTUlUMV9vZmYzMigweGI4LCBjZmlfYnBmX2hhc2gpO1x0LyogbW92ICRjZmlfYnBmX2hhc2gsICVlYXggKi9cbiYjNDM7XHRcdFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgQlBGX1JFR18zKSk7XHQvKiBzdWIgcmR4LCBjZmlfZ2V0X29mZnNldCgpICovXG4mIzQzO1x0XHRcdEVNSVQyX29mZjMyKDB4ODEsIGFkZF8xcmVnKDB4RTgsIEJQRl9SRUdfMyksIGNmaV9nZXRfb2Zmc2V0KCkpO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0ZW1pdF9pbmRpcmVjdF9qdW1wKFx1MDAyNnByb2csIEJQRl9SRUdfMyAvKiBSMyAtXHUwMDNlIHJkeCAqLywgaW1hZ2UgJiM0MzsgKHByb2cgLSBidWYpKTtcbiBcbiBcdFx0KnBwcm9nID0gcHJvZztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmQzZmM0MDM0ZWI5MGNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuY1xuQEAgLTAsMCAmIzQzOzEsNDcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFdpbmRzb3IgKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhlIHg4NiBCUEYgZGlzcGF0Y2hlciYjMzk7cyBpbmRpcmVjdC1qdW1wIGZhbGxiYWNrXG4mIzQzOyAqIHVuZGVyIEZpbmVJQlQuXG4mIzQzOyAqXG4mIzQzOyAqIFdBUk5JTkdcbiYjNDM7ICogLS0tLS0tLVxuJiM0MzsgKiAgVGhpcyB0ZXN0IGNhbiBjcmFzaCB0aGUga2VybmVsLCB0aHVzIHNob3VsZCBiZSBydW4gaW4gYSBWTS5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWZfbGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXR3b3JrX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBJRklOREVYX0xPXHRcdDFcbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGRwX2Rpc3BhdGNoZXJfZmluZWlidCAqc2tlbDtcbiYjNDM7XHRpbnQgZXJyLCBhdHRhY2hlZF9mZCwgdW5hdHRhY2hlZF9mZDtcbiYjNDM7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzLFxuJiM0MztcdFx0LmRhdGFfaW4gPSBcdTAwMjZwa3RfdjQsXG4mIzQzO1x0XHQuZGF0YV9zaXplX2luID0gc2l6ZW9mKHBrdF92NCksXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHhkcF9kaXNwYXRjaGVyX2ZpbmVpYnRfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YXR0YWNoZWRfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy54ZHBfZGlzcGF0Y2hlcl9hdHRhY2hlZCk7XG4mIzQzO1x0dW5hdHRhY2hlZF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9kaXNwYXRjaGVyX3VuYXR0YWNoZWQpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfeGRwX2F0dGFjaChJRklOREVYX0xPLCBhdHRhY2hlZF9mZCwgWERQX0ZMQUdTX1NLQl9NT0RFLCBOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2F0dGFjaF9wcm9nXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHVuYXR0YWNoZWRfZmQsIFx1MDAyNnRvcHRzKTtcbiYjNDM7XHRBU1NFUlRfT0soZXJyLCBcJiMzNDt1bmF0dGFjaGVkX3Rlc3RfcnVuXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEodG9wdHMucmV0dmFsLCBYRFBfUEFTUywgXCYjMzQ7dW5hdHRhY2hlZF9yZXR2YWxcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRicGZfeGRwX2RldGFjaChJRklOREVYX0xPLCBYRFBfRkxBR1NfU0tCX01PREUsIE5VTEwpO1xuJiM0MztvdXQ6XG4mIzQzO1x0eGRwX2Rpc3BhdGNoZXJfZmluZWlidF9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI0OWI4NGYwMWM4ZWViXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXG5AQCAtMCwwICYjNDM7MSwxOCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgV2luZHNvciAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3hkcFwmIzM0OylcbiYjNDM7aW50IHhkcF9kaXNwYXRjaGVyX2F0dGFjaGVkKHN0cnVjdCB4ZHBfbWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBYRFBfUEFTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3hkcFwmIzM0OylcbiYjNDM7aW50IHhkcF9kaXNwYXRjaGVyX3VuYXR0YWNoZWQoc3RydWN0IHhkcF9tZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFhEUF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZJTkVJQlQmIzM0OywKICAgICYjMzQ7WDg2X0tFUk5FTF9JQlQmIzM0OywKICAgICYjMzQ7Q0ZJJiMzNDssCiAgICAmIzM0O01JVElHQVRJT05fUkVUUE9MSU5FJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbWl0X2JwZl9kaXNwYXRjaGVyJiMzNDssCiAgICAmIzM0O2FyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gYWRkIEZpbmVJQlQgc3VwcG9ydCB0byB0aGUgQlBGIGRpc3BhdGNoZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWZmZWN0cyBob3cgQlBGIHByb2dyYW1zIGFyZSBleGVjdXRlZC4gV2Ugc2hvdWxkIGZ1enogdGhlIEJQRiBkaXNwYXRjaGVyIGxvZ2ljIHdpdGggRmluZUlCVCBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMDRmYTAyNzczYWY3M2JmZTA0YzQ3M2Y2MjNiM2ZhMzNlMTA0ZTFkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAxMzozOTo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBkZTc1MTVlYTFiZWFlOC4uMWM4MjQ5ZDhjYTNiMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTM3NDAsNiAmIzQzOzM3NDAsMTUgQEAgc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAomIzQzOwkJLyogSWYgcnVubmluZyB1bmRlciBGaW5lSUJULCBlbnRlciB0aGUgcHJlYW1ibGUgc28gdGhlIGZvbGxvd2luZwomIzQzOwkJICogaW5kaXJlY3QganVtcCBsYW5kcyBvbiBhIHJlYWwgRU5EQlIgaW5zdGVhZCBvZiB0aGUgcG9pc29uLgomIzQzOwkJICovCiYjNDM7CQlpZiAoY2ZpX21vZGUgPT0gQ0ZJX0ZJTkVJQlQpIHsKJiM0MzsJCQlFTUlUMV9vZmYzMigweGI4LCBjZmlfYnBmX2hhc2gpOwkvKiBtb3YgJGNmaV9icGZfaGFzaCwgJWVheCAqLwomIzQzOwkJCUVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpOwkvKiBzdWIgcmR4LCBjZmlfZ2V0X29mZnNldCgpICovCiYjNDM7CQkJRU1JVDJfb2ZmMzIoMHg4MSwgYWRkXzFyZWcoMHhFOCwgQlBGX1JFR18zKSwgY2ZpX2dldF9vZmZzZXQoKSk7CiYjNDM7CQl9CiYjNDM7CiAJCWVtaXRfaW5kaXJlY3RfanVtcCgmYW1wO3Byb2csIEJQRl9SRUdfMyAvKiBSMyAtJmd0OyByZHggKi8sIGltYWdlICYjNDM7IChwcm9nIC0gYnVmKSk7CiAKIAkJKnBwcm9nID0gcHJvZzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMmQzZmM0MDM0ZWI5MGMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmMKQEAgLTAsMCAmIzQzOzEsNDcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBXaW5kc29yICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWdyZXNzaW9uIHRlc3QgZm9yIHRoZSB4ODYgQlBGIGRpc3BhdGNoZXImIzM5O3MgaW5kaXJlY3QtanVtcCBmYWxsYmFjawomIzQzOyAqIHVuZGVyIEZpbmVJQlQuCiYjNDM7ICoKJiM0MzsgKiBXQVJOSU5HCiYjNDM7ICogLS0tLS0tLQomIzQzOyAqICBUaGlzIHRlc3QgY2FuIGNyYXNoIHRoZSBrZXJuZWwsIHRodXMgc2hvdWxkIGJlIHJ1biBpbiBhIFZNLgomIzQzOyAqLwomIzQzOyNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L2lmX2xpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXR3b3JrX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIElGSU5ERVhfTE8JCTEKJiM0MzsKJiM0Mzt2b2lkIHRlc3RfeGRwX2Rpc3BhdGNoZXJfZmluZWlidCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHhkcF9kaXNwYXRjaGVyX2ZpbmVpYnQgKnNrZWw7CiYjNDM7CWludCBlcnIsIGF0dGFjaGVkX2ZkLCB1bmF0dGFjaGVkX2ZkOwomIzQzOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsCiYjNDM7CQkuZGF0YV9pbiA9ICZhbXA7cGt0X3Y0LAomIzQzOwkJLmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjQpLAomIzQzOwkpOwomIzQzOwomIzQzOwlza2VsID0geGRwX2Rpc3BhdGNoZXJfZmluZWlidF9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtza2VsX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWF0dGFjaGVkX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnhkcF9kaXNwYXRjaGVyX2F0dGFjaGVkKTsKJiM0MzsJdW5hdHRhY2hlZF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy54ZHBfZGlzcGF0Y2hlcl91bmF0dGFjaGVkKTsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3hkcF9hdHRhY2goSUZJTkRFWF9MTywgYXR0YWNoZWRfZmQsIFhEUF9GTEFHU19TS0JfTU9ERSwgTlVMTCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDthdHRhY2hfcHJvZyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKHVuYXR0YWNoZWRfZmQsICZhbXA7dG9wdHMpOwomIzQzOwlBU1NFUlRfT0soZXJyLCAmIzM0O3VuYXR0YWNoZWRfdGVzdF9ydW4mIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUSh0b3B0cy5yZXR2YWwsIFhEUF9QQVNTLCAmIzM0O3VuYXR0YWNoZWRfcmV0dmFsJiMzNDspOwomIzQzOwomIzQzOwlicGZfeGRwX2RldGFjaChJRklOREVYX0xPLCBYRFBfRkxBR1NfU0tCX01PREUsIE5VTEwpOwomIzQzO291dDoKJiM0MzsJeGRwX2Rpc3BhdGNoZXJfZmluZWlidF9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYjQ5Yjg0ZjAxYzhlZWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgV2luZHNvciAqLwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspCiYjNDM7aW50IHhkcF9kaXNwYXRjaGVyX2F0dGFjaGVkKHN0cnVjdCB4ZHBfbWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBYRFBfUEFTUzsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspCiYjNDM7aW50IHhkcF9kaXNwYXRjaGVyX3VuYXR0YWNoZWQoc3RydWN0IHhkcF9tZCAqY3R4KQomIzQzO3sKJiM0MzsJcmV0dXJuIFhEUF9QQVNTOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGaW5lSUJUIEJQRiBKSVQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRzIEZpbmVJQlQgc3VwcG9ydCB0byB0aGUgQlBGIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhlIGNvcmUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIHdpdGhpbiB0aGUgYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGNsZWFybHkgc2hvd3MgbG9naWMgdG8gaW5qZWN0IGEgcHJlYW1ibGUgd2hlbiBgY2ZpX21vZGVgIGlzIHNldCB0byBgQ0ZJX0ZJTkVJQlRgLiBUaGlzIHByZWFtYmxlLCB1c2luZyBgbW92YCwgYGFkZGAgaW5zdHJ1Y3Rpb25zLCBhcHBlYXJzIGRlc2lnbmVkIHRvIHByZXBhcmUgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBiZWZvcmUgYW4gaW5kaXJlY3QganVtcCwgbGlrZWx5IGVuc3VyaW5nIGl0IGxhbmRzIG9uIGEgdmFsaWQgYEVOREJSYCBpbnN0cnVjdGlvbiBpbnN0ZWFkIG9mIHBvdGVudGlhbCAmIzM0O3BvaXNvbiYjMzQ7IGNvZGUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlLCBpcyB0aGlzIGNoYW5nZSBjb3JyZWN0bHkgcGxhY2VkLCBhbmQgaG93IGNhbiBJIGRldGVybWluZSBpZiB0aGlzIGZlYXR1cmUgaXMgYmVpbmcgY29tcGlsZWQgY29ycmVjdGx5PyBMZXQmIzM5O3MgdmVyaWZ5IHRoYXQgYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIGJ1aWxkIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIEkga25vdyBCUEYgSklUIGlzIGdlbmVyYWxseSBlbmFibGVkIHZpYSBgQ09ORklHX0JQRl9KSVRgLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEZpbmVJQlQsIEnigJlsbCBhbHNvIGNoZWNrIGBDT05GSUdfRklORUlCVGAuIE5vdywgdG8gYmUgdGhvcm91Z2gsIEnigJlsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBmdW5jdGlvbiB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgaXRzZWxmLiBNYWtpbmcgc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIGNvcnJlY3RseSBjb25maWd1cmVkLCBhbmQgYWxsIGRlcGVuZGVuY2llcyBhcmUgbGlua2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VtaXRfYnBmX2Rpc3BhdGNoZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM2OTg9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcyMS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzIyOnN0YXRpYyBpbnQgZW1pdF9icGZfZGlzcGF0Y2hlcih1OCAqKnBwcm9nLCBpbnQgYSwgaW50IGIsIHM2NCAqcHJvZ3MsIHU4ICppbWFnZSwgdTggKmJ1ZilcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzIzLXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc3NS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzc2Olx0ZXJyID0gZW1pdF9icGZfZGlzcGF0Y2hlcihcdTAwMjZwcm9nLCBhLCBhICYjNDM7IHBpdm90LFx0LyogZW1pdCBsb3dlcl9wYXJ0ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc3Ny1cdFx0XHRcdCAgcHJvZ3MsIGltYWdlLCBidWYpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzg5LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3OTA6XHRlcnIgPSBlbWl0X2JwZl9kaXNwYXRjaGVyKFx1MDAyNnByb2csIGEgJiM0MzsgcGl2b3QgJiM0MzsgMSxcdC8qIGVtaXQgdXBwZXJfcGFydCAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3OTEtXHRcdFx0XHQgIGIsIHByb2dzLCBpbWFnZSwgYnVmKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzgxMT1pbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY3MpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4MTUtXHRzb3J0KGZ1bmNzLCBudW1fZnVuY3MsIHNpemVvZihmdW5jc1swXSksIGNtcF9pcHMsIE5VTEwpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4MTY6XHRyZXR1cm4gZW1pdF9icGZfZGlzcGF0Y2hlcihcdTAwMjZwcm9nLCAwLCBudW1fZnVuY3MgLSAxLCBmdW5jcywgaW1hZ2UsIGJ1Zik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzgxNy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI1OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6CgoqKkRpc3NlY3RpbmcgdGhlIEJQRiBEaXNwYXRjaGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBCUEYgZGlzcGF0Y2hlciBpcyBzZXQgdXAuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBpcyBjbGVhcmx5IGEga2V5IGZ1bmN0aW9uLiBUaGUgZGVzY3JpcHRpb24gc2F5cyBpdCYjMzk7cyBjYWxsZWQgYnkgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAsIGFuZCBldmVuIG1vcmUgaW50ZXJlc3RpbmdseSwgaXQgKnJlY3Vyc2l2ZWx5KiBjYWxscyBpdHNlbGYuIFRoYXQgcmVjdXJzaXZlIG5hdHVyZSBpcyBzb21ldGhpbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0bzsgbGlrZWx5LCB0aGlzIGlzIGJ1aWxkaW5nIHNvbWUga2luZCBvZiBjaGFpbiBvciBzdHJ1Y3R1cmUuIFRoZSBmYWN0IHRoYXQgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAgaXMgY2FsbGVkIGJ5IEJQRiBkaXNwYXRjaGVyIGxvZ2ljIGp1c3QgcmVpbmZvcmNlcyB0aGF0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnQsIHRoZSBjcml0aWNhbCBjb25uZWN0aW9uLiBNeSBuZXh0IHN0ZXAgaXMgb2J2aW91cyDigJMgSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAgaXRzZWxmIGlzIGJlaW5nIGludm9rZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgdGhlIGNydWNpYWwgY29udGV4dCBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB3b3JrZmxvdyBvZiB0aGlzIEJQRiBkaXNwYXRjaGVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY2FsbCBncmFwaHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNzk5PXN0YXRpYyBpbnQgY21wX2lwcyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODEwLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4MTE6aW50IGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcih2b2lkICppbWFnZSwgdm9pZCAqYnVmLCBzNjQgKmZ1bmNzLCBpbnQgbnVtX2Z1bmNzKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4MTIte1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MTUyMD12b2lkIGJwZl90cmFtcG9saW5lX3B1dChzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MTUyMTppbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY3MpO1xuaW5jbHVkZS9saW51eC9icGYuaC0xNTIyLVxuLS1cbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jPTY4PXN0YXRpYyBib29sIGJwZl9kaXNwYXRjaGVyX3JlbW92ZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCxcbi0tXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYy04OC1cbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jOjg5OmludCBfX3dlYWsgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY3MpXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYy05MC17XG4tLVxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM9OTQ9c3RhdGljIGludCBicGZfZGlzcGF0Y2hlcl9wcmVwYXJlKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCwgdm9pZCAqaW1hZ2UsIHZvaWQgKmJ1Zilcbi0tXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYy0xMDItXHR9XG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYzoxMDM6XHRyZXR1cm4gYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKGltYWdlLCBidWYsIFx1MDAyNmlwc1swXSwgZC1cdTAwM2VudW1fcHJvZ3MpO1xua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtMTA0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDI3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgRGlzcGF0Y2hlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGJwZl9kaXNwYXRjaGVyX3ByZXBhcmVgIGZ1bmN0aW9uLCBmb3VuZCBpbiBga2VybmVsL2JwZi9kaXNwYXRjaGVyLmNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIE5hdHVyYWxseSwgSSBhbHJlYWR5IGtub3cgYENPTkZJR19CUEZfSklUYCBpcyBlc3NlbnRpYWwuIE5vdywgdGhlIG5ldyBjb2RlIHBhdGgsIHRoYXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IGBDT05GSUdfRklORUlCVGAsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCYjMzk7cyBzZXQuIFRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGEgcXVpY2sgY2hlY2sgdG8gY29uZmlybSB0aGUgZXhpc3RlbmNlIG9mIGBDT05GSUdfRklORUlCVGAuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGSU5FSUJUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MjM3OD1jb25maWcgQ0FMTF9QQURESU5HXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yMzgyLVxuYXJjaC94ODYvS2NvbmZpZzoyMzgzOmNvbmZpZyBGSU5FSUJUXG5hcmNoL3g4Ni9LY29uZmlnLTIzODQtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yMzg3LVxuYXJjaC94ODYvS2NvbmZpZzoyMzg4OmNvbmZpZyBGSU5FSUJUX0JISVxuYXJjaC94ODYvS2NvbmZpZy0yMzg5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgRklORUlCVCoqCgpPa2F5LCBzbyBgRklORUlCVGAgaXMgZmxhZ2dlZCBhcyBhIGBkZWZfYm9vbGAsIG1lYW5pbmcgaXQmIzM5O3MgZWl0aGVyIGRlZmluZWQgYXMgYHlgIG9yIG5vdCBkZWZpbmVkLCBidXQgdGhlIGtleSBpcyB0aGF0IGl0JiMzOTtzICpkZXBlbmRlbnQqIG9uIHNvbWV0aGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0ICYjMzQ7c29tZXRoaW5nJiMzNDsgaXMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggeDg2IGFyY2hpdGVjdHVyZSBhbmQgdGhpcyBsb29rcyBsaWtlIGEgbW9yZSByZWNlbnQgZmVhdHVyZSwgSSYjMzk7bGwgZ28gdG8gYGFyY2gveDg2L0tjb25maWdgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMjM4MyB0byBzZWUgd2hhdCBjb25kaXRpb25zIGFyZSBzZXR0aW5nIGl0cyBzdGF0ZS4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBlbmFibGluZyBmYWN0b3JzIGZvciB0aGlzIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzcwOlx0XG4yMzcxOlx0IyBCYXNpY2FsbHk6IEZVTkNUSU9OX0FMSUdOTUVOVCAtIDUqQ0ZJXG4yMzcyOlx0IyBleGNlcHQgS2NvbmZpZyBjYW4mIzM5O3QgZG8gYXJpdGhtZXRpYyA6L1xuMjM3MzpcdGNvbmZpZyBGVU5DVElPTl9QQURESU5HX0JZVEVTXG4yMzc0Olx0XHRpbnRcbjIzNzU6XHRcdGRlZmF1bHQgRlVOQ1RJT05fUEFERElOR19DRkkgaWYgQ0ZJXG4yMzc2Olx0XHRkZWZhdWx0IEZVTkNUSU9OX0FMSUdOTUVOVFxuMjM3NzpcdFxuMjM3ODpcdGNvbmZpZyBDQUxMX1BBRERJTkdcbjIzNzk6XHRcdGRlZl9ib29sIG5cbjIzODA6XHRcdGRlcGVuZHMgb24gQ0NfSEFTX0VOVFJZX1BBRERJTkcgXHUwMDI2XHUwMDI2IE9CSlRPT0xcbjIzODE6XHRcdHNlbGVjdCBGVU5DVElPTl9BTElHTk1FTlRfMTZCXG4yMzgyOlx0XG4yMzgzOlx0Y29uZmlnIEZJTkVJQlRcbjIzODQ6XHRcdGRlZl9ib29sIHlcbjIzODU6XHRcdGRlcGVuZHMgb24gWDg2X0tFUk5FTF9JQlQgXHUwMDI2XHUwMDI2IENGSSBcdTAwMjZcdTAwMjYgTUlUSUdBVElPTl9SRVRQT0xJTkVcbjIzODY6XHRcdHNlbGVjdCBDQUxMX1BBRERJTkdcbjIzODc6XHRcbjIzODg6XHRjb25maWcgRklORUlCVF9CSElcbjIzODk6XHRcdGRlZl9ib29sIHlcbjIzOTA6XHRcdGRlcGVuZHMgb24gRklORUlCVCBcdTAwMjZcdTAwMjYgQ0NfSEFTX0tDRklfQVJJVFlcbjIzOTE6XHRcbjIzOTI6XHRjb25maWcgSEFWRV9DQUxMX1RIVU5LU1xuMjM5MzpcdFx0ZGVmX2Jvb2wgeVxuMjM5NDpcdFx0ZGVwZW5kcyBvbiBDQ19IQVNfRU5UUllfUEFERElORyBcdTAwMjZcdTAwMjYgTUlUSUdBVElPTl9SRVRIVU5LIFx1MDAyNlx1MDAyNiBPQkpUT09MXG4yMzk1Olx0XG4yMzk2Olx0Y29uZmlnIENBTExfVEhVTktTXG4yMzk3Olx0XHRkZWZfYm9vbCBuXG4yMzk4Olx0XHRzZWxlY3QgQ0FMTF9QQURESU5HXG4yMzk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDQKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiA5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEZJTkVJQlQgRGVwZW5kZW5jeSBDaGFpbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEZJTkVJQlRgIGhlcmUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gYmVzdCBpbnRlZ3JhdGUgaXQuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCByZWxpZXMgb24gYSBmZXcgY3JpdGljYWwgZmVhdHVyZXM6IGBYODZfS0VSTkVMX0lCVGAsIGBDRklgLCBhbmQgYE1JVElHQVRJT05fUkVUUE9MSU5FYC4gTWFrZXMgc2Vuc2UsIGFsbCBjb3JlIHRvIGNvbnRyb2wgZmxvdyBpbnRlZ3JpdHkuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSBvZiBgWDg2X0tFUk5FTF9JQlRgIGFuZCBhbHNvIGlmIENGSSBpcyBwcmVzZW50LiBIbW1tLCBob2xkIG9uLi4uIGBDRklgPyBUaGF0IGRvZXNuJiMzOTt0IHNlZW0gcmlnaHQuIEl0IGRvZXNuJiMzOTt0IHJpbmcgYSBiZWxsLiBQZXJoYXBzIGl0JiMzOTtzIHVuZGVyIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG5hbWU/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3g4Ni9LY29uZmlnYC4gTWF5YmUgaXQmIzM5O3MgYENGSV9DTEFOR2A/IEkgbmVlZCB0byBjbGFyaWZ5IHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBleHBlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz05MzA9Y29uZmlnIEFSQ0hfVVNFU19DRklfR0VORVJJQ19MTFZNX1BBU1Ncbi0tXG5hcmNoL0tjb25maWctOTM2LVxuYXJjaC9LY29uZmlnOjkzNzpjb25maWcgQ0ZJXG5hcmNoL0tjb25maWctOTM4LVx0Ym9vbCBcJiMzNDtVc2UgS2VybmVsIENvbnRyb2wgRmxvdyBJbnRlZ3JpdHkgKGtDRkkpXCYjMzQ7XG4tLVxuYXJjaC9LY29uZmlnLTk1Mi1cbmFyY2gvS2NvbmZpZzo5NTM6Y29uZmlnIENGSV9DTEFOR1xuYXJjaC9LY29uZmlnLTk1NC1cdGJvb2xcbi0tXG5hcmNoL0tjb25maWctOTU4LVxuYXJjaC9LY29uZmlnOjk1OTpjb25maWcgQ0ZJX0lDQUxMX05PUk1BTElaRV9JTlRFR0VSU1xuYXJjaC9LY29uZmlnLTk2MC1cdGJvb2wgXCYjMzQ7Tm9ybWFsaXplIENGSSB0YWdzIGZvciBpbnRlZ2Vyc1wmIzM0O1xuLS1cbmFyY2gvS2NvbmZpZz05ODE9Y29uZmlnIEhBVkVfQ0ZJX0lDQUxMX05PUk1BTElaRV9JTlRFR0VSU19SVVNUQ1xuLS1cbmFyY2gvS2NvbmZpZy05ODgtXG5hcmNoL0tjb25maWc6OTg5OmNvbmZpZyBDRklfUEVSTUlTU0lWRVxuYXJjaC9LY29uZmlnLTk5MC1cdGJvb2wgXCYjMzQ7VXNlIENGSSBpbiBwZXJtaXNzaXZlIG1vZGVcJiMzNDtcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTIyOTM9Y29uZmlnIFNUUklDVF9TSUdBTFRTVEFDS19TSVpFXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yMzA4LVxuYXJjaC94ODYvS2NvbmZpZzoyMzA5OmNvbmZpZyBDRklfQVVUT19ERUZBVUxUXG5hcmNoL3g4Ni9LY29uZmlnLTIzMTAtXHRib29sIFwmIzM0O0F0dGVtcHQgdG8gdXNlIEZpbmVJQlQgYnkgZGVmYXVsdCBhdCBib290IHRpbWVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcwNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBhIEtlcm5lbCBUZXN0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHRlc3Qgc2V0dXAuIFJpZ2h0IG5vdywgaXQgbG9va3MgbGlrZSBgQ0ZJYCwgYFg4Nl9LRVJORUxfSUJUYCwgYW5kIGBNSVRJR0FUSU9OX1JFVFBPTElORWAgYXJlIHJlbGV2YW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvbmVzIHRvIGV4cGxpY2l0bHkgZW5hYmxlLiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIGFib3V0IGxpc3RpbmcgYEZJTkVJQlRgIGFzIGFuICplbmFibGUqIGNvbmZpZywgYnV0IHRoZW4gSSByZW1lbWJlcmVkIHRoYXQgYEZJTkVJQlRgIGlzIGEgYGRlZl9ib29sIHlgLCBtZWFuaW5nIGl0JiMzOTtzIGF1dG9tYXRpY2FsbHkgc2V0IHRvICYjMzQ7eWVzJiMzNDsgaWYgaXRzIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLiBTbywgcmVhbGx5LCBJIGp1c3QgbmVlZCB0byBmb2N1cyBvbiBleHBsaWNpdGx5IGVuYWJsaW5nIHRob3NlIGRlcGVuZGVuY2llcy4gR2l2ZW4gdGhhdCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBYODZfS0VSTkVMX0lCVGAsIGBDRklgLCBhbmQgYE1JVElHQVRJT05fUkVUUE9MSU5FYCBhcmUgdHVybmVkIG9uLgoKT2gsIHJpZ2h0LCB0aGlzIHRlc3QgaXMgYW4gWERQIHRlc3QuIFNpbmNlIHRoYXQgaXMgdGhlIGNhc2UsIGV2ZW4gdGhvdWdoIHRoZXkgbWF5IGJlIHN0YW5kYXJkLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX1hEUF9TT0NLRVRTYCBhcmUgZW5hYmxlZCwgYnV0IEkgYW0gbm90IHRvbyBjb25jZXJuZWQuCgpOb3csIEkmIzM5O20gY2hlY2tpbmcgYSBjb25kaXRpb24gYGNmaV9tb2RlID09IENGSV9GSU5FSUJUYC4gV2hlcmUgaXMgYGNmaV9tb2RlYCBldmVuIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayB0aGF0IGRvd24gdG8gY29uZmlybSB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NmaV9tb2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oLTkyLSAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY2ZpLmg6OTM6ZW51bSBjZmlfbW9kZSB7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jZmkuaC05NC1cdENGSV9BVVRPLFx0LyogRmluZUlCVCBpZiBoYXJkd2FyZSBoYXMgSUJULCBvdGhlcndpc2Uga0NGSSAqL1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oLTk5LVxuYXJjaC94ODYvaW5jbHVkZS9hc20vY2ZpLmg6MTAwOmV4dGVybiBlbnVtIGNmaV9tb2RlIGNmaV9tb2RlO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vY2ZpLmgtMTAxLVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oPTEyND1zdGF0aWMgaW5saW5lIGludCBjZmlfZ2V0X29mZnNldCh2b2lkKVxuYXJjaC94ODYvaW5jbHVkZS9hc20vY2ZpLmgtMTI1LXtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oOjEyNjpcdHN3aXRjaCAoY2ZpX21vZGUpIHtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oLTEyNy1cdGNhc2UgQ0ZJX0ZJTkVJQlQ6XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9OTY4PXZvaWQgX19pbml0X29yX21vZHVsZSBub2lubGluZSBhcHBseV9yZXRwb2xpbmVzKHMzMiAqc3RhcnQsIHMzMiAqZW5kKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTk4OS1cdFx0XHQvKiBTZWUgY2ZpX3BhcmFub2lkLiAqL1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6OTkwOlx0XHRcdFdBUk5fT05fT05DRShjZmlfbW9kZSAhPSBDRklfRklORUlCVCk7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy05OTEtXHRcdFx0Y29udGludWU7XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtOTk3LVx0XHRcdGlmIChkZXN0Wy0xXSA9PSAweGQ2IFx1MDAyNlx1MDAyNiAoZGVzdFswXSBcdTAwMjYgMHhmMCkgPT0gMHg3MCkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6OTk4Olx0XHRcdFx0V0FSTl9PTl9PTkNFKGNmaV9tb2RlICE9IENGSV9GSU5FSUJUKTtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTk5OS1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jPTExOTE9dm9pZCBfX2luaXRfb3JfbW9kdWxlIGFwcGx5X3NlYWxfZW5kYnIoczMyICpzdGFydCwgczMyICplbmQpIHsgfVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyMDItXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjAzOmVudW0gY2ZpX21vZGUgY2ZpX21vZGUgX19yb19hZnRlcl9pbml0ID0gX19DRklfREVGQVVMVDtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyMDQtc3RhdGljIGJvb2wgY2ZpX2RlYnVnIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0xMjExPXUzMiBjZmlfZ2V0X2Z1bmNfaGFzaCh2b2lkICpmdW5jKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyMTUtXHRmdW5jIC09IGNmaV9nZXRfb2Zmc2V0KCk7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjE2Olx0c3dpdGNoIChjZmlfbW9kZSkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTIxNy1cdGNhc2UgQ0ZJX0ZJTkVJQlQ6XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MTIzMz1pbnQgY2ZpX2dldF9mdW5jX2FyaXR5KHZvaWQgKmZ1bmMpXG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTIzNy1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjEyMzg6XHRpZiAoY2ZpX21vZGUgIT0gQ0ZJX0ZJTkVJQlQgXHUwMDI2XHUwMDI2ICFjZmlfYmhpKVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTIzOS1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MTI3MD1zdGF0aWMgX19pbml0IGludCBjZmlfcGFyc2VfY21kbGluZShjaGFyICpzdHIpXG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI4Mi1cdFx0aWYgKCFzdHJjbXAoc3RyLCBcJiMzNDthdXRvXCYjMzQ7KSkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTI4MzpcdFx0XHRjZmlfbW9kZSA9IENGSV9BVVRPO1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI4NC1cdFx0fSBlbHNlIGlmICghc3RyY21wKHN0ciwgXCYjMzQ7b2ZmXCYjMzQ7KSkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTI4NTpcdFx0XHRjZmlfbW9kZSA9IENGSV9PRkY7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjg2LVx0XHRcdGNmaV9yYW5kID0gZmFsc2U7XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI4OS1cdFx0fSBlbHNlIGlmICghc3RyY21wKHN0ciwgXCYjMzQ7a2NmaVwmIzM0OykpIHtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjEyOTA6XHRcdFx0Y2ZpX21vZGUgPSBDRklfS0NGSTtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyOTEtXHRcdH0gZWxzZSBpZiAoIXN0cmNtcChzdHIsIFwmIzM0O2ZpbmVpYnRcJiMzNDspKSB7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjkyOlx0XHRcdGNmaV9tb2RlID0gQ0ZJX0ZJTkVJQlQ7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjkzLVx0XHR9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCBcJiMzNDtub3JhbmRcJiMzNDspKSB7XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI5OC1cdFx0fSBlbHNlIGlmICghc3RyY21wKHN0ciwgXCYjMzQ7cGFyYW5vaWRcJiMzNDspKSB7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjk5Olx0XHRcdGlmIChjZmlfbW9kZSA9PSBDRklfRklORUlCVCkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTMwMC1cdFx0XHRcdGNmaV9wYXJhbm9pZCA9IHRydWU7XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTMwNS0jaWZkZWYgQ09ORklHX0ZJTkVJQlRfQkhJXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMzA2Olx0XHRcdGlmIChjZmlfbW9kZSA9PSBDRklfRklORUlCVCkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTMwNy1cdFx0XHRcdGNmaV9iaGkgPSB0cnVlO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jPTE3Nzg9c3RhdGljIHZvaWQgX19hcHBseV9maW5laWJ0KHMzMiAqc3RhcnRfcmV0cG9saW5lLCBzMzIgKmVuZF9yZXRwb2xpbmUsXG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTc4OS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE3OTA6XHRpZiAoY2ZpX21vZGUgPT0gQ0ZJX0FVVE8pIHtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE3OTE6XHRcdGNmaV9tb2RlID0gQ0ZJX0tDRkk7XG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xNzkyLVx0XHRpZiAoSEFTX0tFUk5FTF9JQlQgXHUwMDI2XHUwMDI2IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfSUJUKSkge1xuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTE3OTgtXHRcdFx0XHRjZmlfcGFyYW5vaWQgPSB0cnVlO1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTc5OTpcdFx0XHRjZmlfbW9kZSA9IENGSV9GSU5FSUJUO1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTgwMC1cdFx0fVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTE4MzMtXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxODM0Olx0c3dpdGNoIChjZmlfbW9kZSkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTgzNS1cdGNhc2UgQ0ZJX09GRjpcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0xODg4PXN0YXRpYyB2b2lkIHBvaXNvbl9jZmkodm9pZCAqYWRkcilcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xODk3LVx0ICovXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxODk4Olx0c3dpdGNoIChjZmlfbW9kZSkge1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTg5OS1cdGNhc2UgQ0ZJX0ZJTkVJQlQ6XG4tLVxuYXJjaC94ODYva2VybmVsL2NmaS5jPTY4PWVudW0gYnVnX3RyYXBfdHlwZSBoYW5kbGVfY2ZpX2ZhaWx1cmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC94ODYva2VybmVsL2NmaS5jLTcyLVxuYXJjaC94ODYva2VybmVsL2NmaS5jOjczOlx0c3dpdGNoIChjZmlfbW9kZSkge1xuYXJjaC94ODYva2VybmVsL2NmaS5jLTc0LVx0Y2FzZSBDRklfS0NGSTpcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDc4PXN0YXRpYyB2b2lkIGVtaXRfY2ZpKHU4ICoqcHByb2csIHU4ICppcCwgdTMyIGhhc2gsIGludCBhcml0eSlcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNDgxLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQ4MjpcdHN3aXRjaCAoY2ZpX21vZGUpIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00ODMtXHRjYXNlIENGSV9GSU5FSUJUOlxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNzIyPXN0YXRpYyBpbnQgZW1pdF9icGZfZGlzcGF0Y2hlcih1OCAqKnBwcm9nLCBpbnQgYSwgaW50IGIsIHM2NCAqcHJvZ3MsIHU4ICppbWFnZSwgdTggKmJ1Zilcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc0NS1cdFx0ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzc0NjpcdFx0aWYgKGNmaV9tb2RlID09IENGSV9GSU5FSUJUKSB7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc0Ny1cdFx0XHRFTUlUMV9vZmYzMigweGI4LCBjZmlfYnBmX2hhc2gpO1x0LyogbW92ICRjZmlfYnBmX2hhc2gsICVlYXggKi9cbi0tXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYz00OTg9c3RydWN0IG10ZF9pbmZvICpjZmlfY21kc2V0XzAwMDEoc3RydWN0IG1hcF9pbmZvICptYXAsIGludCBwcmltYXJ5KVxuLS1cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jLTUyNi1cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jOjUyNzpcdGlmIChjZmktXHUwMDNlY2ZpX21vZGUgPT0gQ0ZJX01PREVfQ0ZJKSB7XG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYy01MjgtXHRcdC8qXG4tLVxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMtNTU1LVx0fVxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmM6NTU2Olx0ZWxzZSBpZiAoY2ZpLVx1MDAzZWNmaV9tb2RlID09IENGSV9NT0RFX0pFREVDKSB7XG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYy01NTctXHRcdC8qIEFwcGx5IGplZGVjIHNwZWNpZmljIGZpeHVwcyAqL1xuLS1cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jPTYwMD1zdHJ1Y3QgbXRkX2luZm8gKmNmaV9jbWRzZXRfMDAwMihzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgaW50IHByaW1hcnkpXG4tLVxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMtNjM2LVxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmM6NjM3Olx0aWYgKGNmaS1cdTAwM2VjZmlfbW9kZT09Q0ZJX01PREVfQ0ZJKXtcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jLTYzOC1cdFx0dW5zaWduZWQgY2hhciBib290bG9jO1xuLS1cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jLTcxOS1cdH0gLyogQ0ZJIG1vZGUgKi9cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jOjcyMDpcdGVsc2UgaWYgKGNmaS1cdTAwM2VjZmlfbW9kZSA9PSBDRklfTU9ERV9KRURFQykge1xuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMtNzIxLVx0XHQvKiBBcHBseSBqZWRlYyBzcGVjaWZpYyBmaXh1cHMgKi9cbi0tXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYz03NjY9c3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqY2ZpX2FtZHN0ZF9zZXR1cChzdHJ1Y3QgbXRkX2luZm8gKm10ZClcbi0tXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYy03NzQtXHRwcmludGsoS0VSTl9OT1RJQ0UgXCYjMzQ7bnVtYmVyIG9mICVzIGNoaXBzOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jOjc3NTpcdCAgICAgICAoY2ZpLVx1MDAzZWNmaV9tb2RlID09IENGSV9NT0RFX0NGSSk/XCYjMzQ7Q0ZJXCYjMzQ7OlwmIzM0O0pFREVDXCYjMzQ7LGNmaS1cdTAwM2VudW1jaGlwcyk7XG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYy03NzYtXHQvKiBTZWxlY3QgdGhlIGNvcnJlY3QgZ2VvbWV0cnkgc2V0dXAgKi9cbi0tXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYz0xMTQ9c3RydWN0IG10ZF9pbmZvICpjZmlfY21kc2V0XzAwMjAoc3RydWN0IG1hcF9pbmZvICptYXAsIGludCBwcmltYXJ5KVxuLS1cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jLTExOC1cbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jOjExOTpcdGlmIChjZmktXHUwMDNlY2ZpX21vZGUpIHtcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jLTEyMC1cdFx0Lypcbi0tXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYz0xOTU9c3RhdGljIGludCBfX3hpcHJhbSBjZmlfY2hpcF9zZXR1cChzdHJ1Y3QgbWFwX2luZm8gKm1hcCxcbi0tXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYy0yMTYtXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYzoyMTc6XHRjZmktXHUwMDNlY2ZpX21vZGUgPSBDRklfTU9ERV9DRkk7XG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYy0yMTgtXG4tLVxuZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYz0xOTczPXN0YXRpYyBpbnQgY2ZpX2plZGVjX3NldHVwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSwgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMtMTk5OC1cdGNmaS1cdTAwM2VjZmlxLVx1MDAzZURldlNpemUgPSBqZWRlY190YWJsZVtpbmRleF0uZGV2X3NpemU7XG5kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jOjE5OTk6XHRjZmktXHUwMDNlY2ZpX21vZGUgPSBDRklfTU9ERV9KRURFQztcbmRyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMtMjAwMC1cdGNmaS1cdTAwM2VzZWN0b3JfZXJhc2VfY21kID0gQ01EKDB4MzApO1xuLS1cbmluY2x1ZGUvbGludXgvbXRkL2NmaS5oPTI3Mz1zdHJ1Y3QgY2ZpX3ByaXZhdGUge1xuLS1cbmluY2x1ZGUvbGludXgvbXRkL2NmaS5oLTI3Ny1cdGludCBkZXZpY2VfdHlwZTtcbmluY2x1ZGUvbGludXgvbXRkL2NmaS5oOjI3ODpcdGludCBjZmlfbW9kZTtcdFx0LyogQXJlIHdlIGEgSkVERUMgZGV2aWNlIHByZXRlbmRpbmcgdG8gYmUgQ0ZJPyAqL1xuaW5jbHVkZS9saW51eC9tdGQvY2ZpLmgtMjc5LVx0aW50IGFkZHJfdW5sb2NrMTtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz02Njk9dm9pZCBicGZfcHJvZ19rYWxsc3ltc19hZGQoc3RydWN0IGJwZl9wcm9nICpmcClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy02ODUtXHQgKi9cbmtlcm5lbC9icGYvY29yZS5jOjY4NjpcdGlmIChjZmlfbW9kZSAhPSBDRklfRklORUlCVClcbmtlcm5lbC9icGYvY29yZS5jLTY4Ny1cdFx0cmV0dXJuO1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTY5OT12b2lkIGJwZl9wcm9nX2thbGxzeW1zX2RlbChzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTcwNS0jaWZkZWYgQ09ORklHX0ZJTkVJQlRcbmtlcm5lbC9icGYvY29yZS5jOjcwNjpcdGlmIChjZmlfbW9kZSAhPSBDRklfRklORUlCVClcbmtlcm5lbC9icGYvY29yZS5jLTcwNy1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRmluZUlCVCBTdXBwb3J0IGluIHRoZSBCUEYgRGlzcGF0Y2hlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGNmaV9tb2RlYCwgdGhlIGNydWNpYWwgaW5kaWNhdG9yIGZvciBDb250cm9sLUZsb3cgSW50ZWdyaXR5IChDRkkpLCBwYXJ0aWN1bGFybHkgd2l0aCBGaW5lSUJULCBpcyBzZXQgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oYCBhbmQgYGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jYC4gSXQgaGluZ2VzIG9uIGBDRklfRklORUlCVGAgYmVpbmcgYWN0aXZlLCBjb250aW5nZW50IG9uIGVpdGhlciB0aGUgYEZJTkVJQlRgIGZlYXR1cmUgYmVpbmcgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSAqb3IqIGJlaW5nIGV4cGxpY2l0bHkgZm9yY2VkIHRocm91Z2ggYSBjb21tYW5kLWxpbmUgb3B0aW9uLiBTbywgYENPTkZJR19GSU5FSUJUYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS4KCk5vdywgbGV0IG1lIGNoZWNrIHRoZSByZWxhdGVkIEJQRiBjb25maWd1cmF0aW9ucy4gYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHByb2JhYmx5IGltcG9ydGFudCwgYW5kIGdpdmVuIHRoZSB0ZXN0JiMzOTtzIFhEUCBmb2N1cywgSSYjMzk7bGwga2VlcCBgQ09ORklHX1hEUF9TT0NLRVRTYCBpbiBtaW5kIGFzIGEgcG90ZW50aWFsIGRlcGVuZGVuY3ksIGV2ZW4gdGhvdWdoIHRoZSB0ZXN0IGl0c2VsZiBqdXN0IGZvY3VzZXMgb24gYGJwZl94ZHBfYXR0YWNoYCBhbmQgYGJwZl9wcm9nX3Rlc3RfcnVuX29wdHNgLiBJIHNob3VsZCBkaWcgaW50byB0aGUgdGVzdCBmaWxlIGl0c2VsZjogYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuY2AuIEkmIzM5O20gZXhwZWN0aW5nIHN0YW5kYXJkIEJQRiBmdW5jdGlvbmFsaXR5IHRoZXJlLCBiYXNlZCBvbiB0aGUgY2FsbHMuCgpSaWdodCwgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIHRoZSBgZW1pdF9icGZfZGlzcGF0Y2hlcmAgZnVuY3Rpb24uIElzIHRoZXJlIGFueSBhZGRpdGlvbmFsIG1vZGlmaWVkIGZ1bmN0aW9uPyBOb3BlLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4gVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgZW5oYW5jZXMgdGhlIEJQRiBkaXNwYXRjaGVyIHdpdGggRmluZUlCVCBzdXBwb3J0LgoKTm93LCB0byBhc3Nlc3MgdGhlIGltcGFjdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGZpdHMgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLiBJdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHRoZSBCUEYgcHJvZ3JhbSBsb2FkIG9yIGF0dGFjaCBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgZGlzcGF0Y2hlciBpcyB1cGRhdGVkLiBUaGF0IHRlbGxzIG1lIGl0JiMzOTtzICpub3QqIGEgaG90LXBhdGggZnVuY3Rpb24gaW4gdGhlIHNlbnNlIG9mIGhpZ2gtZnJlcXVlbmN5IHBhY2tldCBwcm9jZXNzaW5nIG9yIHNpbWlsYXIuIEl0JiMzOTtzIGludm9sdmVkIGluIEpJVCBjb21waWxhdGlvbiwgd2hpY2ggZ2l2ZXMgdXMgYSBnb29kIGZvY3VzLiBBbmQgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAgaXMgbGlrZWx5IGFsc28gd29ydGggZXhhbWluaW5nLgoKRmluYWxseSwgSSBuZWVkIHRvIHNlZSB3aGV0aGVyIGBjZmlfYnBmX2hhc2hgIGlzIGRlZmluZWQuIFRoaXMgaXMgYSBjcnVjaWFsIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjZmlfYnBmX2hhc2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9NTEzPXN0YXRpYyBpbnQgYnVpbGRfcHJvbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBlYnBmX2Zyb21fY2JwZilcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy01NTItXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzo1NTM6XHRlbWl0X2tjZmkoaXNfbWFpbl9wcm9nID8gY2ZpX2JwZl9oYXNoIDogY2ZpX2JwZl9zdWJwcm9nX2hhc2gsIGN0eCk7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy01NTQtXHRjb25zdCBpbnQgaWR4MCA9IGN0eC1cdTAwM2VpZHg7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0yMDAyPXZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgYm9vbCBpc19zdWJwcm9nKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjAzMy1cdC8qIGVtaXQga2NmaSB0eXBlIHByZWFtYmxlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIGZpcnN0IGluc24gKi9cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjAzNDpcdGVtaXRfa2NmaShpc19zdWJwcm9nID8gY2ZpX2JwZl9zdWJwcm9nX2hhc2ggOiBjZmlfYnBmX2hhc2gsIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwMzUtXG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MTc3OD1zdGF0aWMgdm9pZCBfX2FwcGx5X2ZpbmVpYnQoczMyICpzdGFydF9yZXRwb2xpbmUsIHMzMiAqZW5kX3JldHBvbGluZSxcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xODE1LVx0XHRcdGNmaV9zZWVkID0gZ2V0X3JhbmRvbV91MzIoKTtcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE4MTY6XHRcdFx0Y2ZpX2JwZl9oYXNoID0gY2ZpX3JlaGFzaChjZmlfYnBmX2hhc2gpO1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTgxNy1cdFx0XHRjZmlfYnBmX3N1YnByb2dfaGFzaCA9IGNmaV9yZWhhc2goY2ZpX2JwZl9zdWJwcm9nX2hhc2gpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz01MzU9c3RhdGljIHZvaWQgZW1pdF9wcm9sb2d1ZSh1OCAqKnBwcm9nLCB1OCAqaXAsIHUzMiBzdGFja19kZXB0aCwgYm9vbCBlYnBmX2Zyb21fY2JwZixcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtNTQzLVx0fSBlbHNlIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo1NDQ6XHRcdGVtaXRfY2ZpKFx1MDAyNnByb2csIGlwLCBjZmlfYnBmX2hhc2gsIDEpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTU0NS1cdH1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzcyMj1zdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NDYtXHRcdGlmIChjZmlfbW9kZSA9PSBDRklfRklORUlCVCkge1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3NDc6XHRcdFx0RU1JVDFfb2ZmMzIoMHhiOCwgY2ZpX2JwZl9oYXNoKTtcdC8qIG1vdiAkY2ZpX2JwZl9oYXNoLCAlZWF4ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc0OC1cdFx0XHRFTUlUMShhZGRfMW1vZCgweDQ4LCBCUEZfUkVHXzMpKTtcdC8qIHN1YiByZHgsIGNmaV9nZXRfb2Zmc2V0KCkgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2NmaS5oPTQxPXN0YXRpYyBpbmxpbmUgdTMyIGNmaV9nZXRfZnVuY19oYXNoKHZvaWQgKmZ1bmMpXG4tLVxuaW5jbHVkZS9saW51eC9jZmkuaC01Mi0vKiBDRkkgdHlwZSBoYXNoZXMgZm9yIEJQRiBmdW5jdGlvbiB0eXBlcyAqL1xuaW5jbHVkZS9saW51eC9jZmkuaDo1MzpleHRlcm4gdTMyIGNmaV9icGZfaGFzaDtcbmluY2x1ZGUvbGludXgvY2ZpLmgtNTQtZXh0ZXJuIHUzMiBjZmlfYnBmX3N1YnByb2dfaGFzaDtcbi0tXG5pbmNsdWRlL2xpbnV4L2NmaS5oPTU5PXN0YXRpYyBpbmxpbmUgdTMyIGNmaV9nZXRfZnVuY19oYXNoKHZvaWQgKmZ1bmMpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvY2ZpLmgtNjAtXG5pbmNsdWRlL2xpbnV4L2NmaS5oOjYxOiNkZWZpbmUgY2ZpX2JwZl9oYXNoIDBVXG5pbmNsdWRlL2xpbnV4L2NmaS5oLTYyLSNkZWZpbmUgY2ZpX2JwZl9zdWJwcm9nX2hhc2ggMFVcbi0tXG5rZXJuZWwvY2ZpLmM9Mzk9ZXh0ZXJuIHR5cGVvZigqKGJwZl9mdW5jX3QpMCkgX19icGZfcHJvZ19ydW5YO1xua2VybmVsL2NmaS5jOjQwOkRFRklORV9DRklfVFlQRShjZmlfYnBmX2hhc2gsIF9fYnBmX3Byb2dfcnVuWCk7XG5rZXJuZWwvY2ZpLmMtNDEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTgwCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgY2ZpX2JwZl9oYXNoYCBpcyBkZWZpbml0ZWx5IGRlZmluZWQuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBpcyBiZWluZyBjb21waWxlZC4gTG9va2luZyBhdCB0aGUgY29kZWJhc2UsIEkgc2VlIGl0JiMzOTtzIGxvY2F0ZWQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQmIzM5O3MgZ29vZCwgYnV0IGRvZXMgdGhlIGJ1aWxkIHN5c3RlbSBrbm93IGFib3V0IGl0PyBMZXQmIzM5O3MgY2hlY2sgYGFyY2gveDg2L25ldC9NYWtlZmlsZWAuIEFoLCB0aGVyZSBpdCBpczogYG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gYnBmX2ppdF9jb21wLm8gYnBmX2ppdF9jb21wMzIub2AuIE9rYXksIHNvIGBDT05GSUdfQlBGX0pJVGAgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgQ09ORklHX0ZJTkVJQlRgLiBXZSBmaWd1cmVkIG91dCBlYXJsaWVyIHRoYXQgaXQgZGVwZW5kcyBvbiBgWDg2X0tFUk5FTF9JQlRgLCBgQ0ZJYCwgYW5kIGBNSVRJR0FUSU9OX1JFVFBPTElORWAuIExldCBtZSBqdXN0IG1ha2UgYSBtZW50YWwgbm90ZSBvZiBhbGwgdGhlc2Ugb3B0aW9uczogYEZJTkVJQlRgLCBgWDg2X0tFUk5FTF9JQlRgLCBgQ0ZJYCwgYW5kIGBNSVRJR0FUSU9OX1JFVFBPTElORWAuIFdhaXQgYSBzZWNvbmTigKYgYENGSWA/IFRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBQcmV0dHkgc3VyZSBgQ0ZJYCBpcyBhIGdlbmVyaWMgdGVybSBhbmQgYENGSV9DTEFOR2AgaXMgdGhlIGFjdHVhbCBjb25maWcgb3B0aW9uLiBSaWdodCwgYmV0dGVyIGRvdWJsZS1jaGVjayBgYXJjaC9LY29uZmlnYCB0byBiZSBzdXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENGSSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9OTMwPWNvbmZpZyBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTXG4tLVxuYXJjaC9LY29uZmlnLTkzNi1cbmFyY2gvS2NvbmZpZzo5Mzc6Y29uZmlnIENGSVxuYXJjaC9LY29uZmlnLTkzOC1cdGJvb2wgXCYjMzQ7VXNlIEtlcm5lbCBDb250cm9sIEZsb3cgSW50ZWdyaXR5IChrQ0ZJKVwmIzM0O1xuLS1cbmFyY2gvS2NvbmZpZy05NTItXG5hcmNoL0tjb25maWc6OTUzOmNvbmZpZyBDRklfQ0xBTkdcbmFyY2gvS2NvbmZpZy05NTQtXHRib29sXG4tLVxuYXJjaC9LY29uZmlnLTk1OC1cbmFyY2gvS2NvbmZpZzo5NTk6Y29uZmlnIENGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNcbmFyY2gvS2NvbmZpZy05NjAtXHRib29sIFwmIzM0O05vcm1hbGl6ZSBDRkkgdGFncyBmb3IgaW50ZWdlcnNcJiMzNDtcbi0tXG5hcmNoL0tjb25maWc9OTgxPWNvbmZpZyBIQVZFX0NGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNfUlVTVENcbi0tXG5hcmNoL0tjb25maWctOTg4LVxuYXJjaC9LY29uZmlnOjk4OTpjb25maWcgQ0ZJX1BFUk1JU1NJVkVcbmFyY2gvS2NvbmZpZy05OTAtXHRib29sIFwmIzM0O1VzZSBDRkkgaW4gcGVybWlzc2l2ZSBtb2RlXCYjMzQ7XG4tLVxuYXJjaC94ODYvS2NvbmZpZz0yMjkzPWNvbmZpZyBTVFJJQ1RfU0lHQUxUU1RBQ0tfU0laRVxuLS1cbmFyY2gveDg2L0tjb25maWctMjMwOC1cbmFyY2gveDg2L0tjb25maWc6MjMwOTpjb25maWcgQ0ZJX0FVVE9fREVGQVVMVFxuYXJjaC94ODYvS2NvbmZpZy0yMzEwLVx0Ym9vbCBcJiMzNDtBdHRlbXB0IHRvIHVzZSBGaW5lSUJUIGJ5IGRlZmF1bHQgYXQgYm9vdCB0aW1lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODkwCgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDU3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIERpc3BhdGNoZXIgZm9yIEZ1enppbmcqKgoKT2theSwgc28gYGNvbmZpZyBDRklgIGlzIGEgYm9vbGVhbiwgYW5kIHRoZXJlZm9yZSBgQ0ZJYCBpcyBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3MgbWFrZSBhIGxpc3QgdG8ga2VlcCB0aGluZ3Mgc3RyYWlnaHQuIEkmIzM5O2xsIGluY2x1ZGUgYEZJTkVJQlRgLCBgWDg2X0tFUk5FTF9JQlRgLCBgQ0ZJYCwgYW5kIGBNSVRJR0FUSU9OX1JFVFBPTElORWAuIFdhaXQgYSBtaW51dGUsIGBGSU5FSUJUYCBpcyBhIGBkZWZfYm9vbCB5YCBpZiBpdHMgZGVwZW5kZW5jaWVzIGFyZSBtZXQsIHNvIHdlIGRvbiYjMzk7dCAqbmVlZCogdG8gZXhwbGljaXRseSBlbmFibGUgaXQgaWYgdGhlIGRlcGVuZGVuY2llcyBhcmUgdGFrZW4gY2FyZSBvZiwgYnV0IGl0IGRvZXNuJiMzOTt0IGh1cnQgdG8gbGlzdCBpdC4gVGhlcmVmb3JlLCBJIHdpbGwgbGlzdCBgRklORUlCVGAsIGBYODZfS0VSTkVMX0lCVGAsIGBDRklgLCBhbmQgYE1JVElHQVRJT05fUkVUUE9MSU5FYC4KCkkgc2hvdWxkIHByb2JhYmx5IGFkZCBgQlBGX0pJVGAgdG8gdGhpcyBsaXN0IGFzIHdlbGwsIGFzIHdlbGwgYXMgYEJQRl9TWVNDQUxMYCBhbmQgYWxzbyBgWERQX1NPQ0tFVFNgLCBqdXN0IHRvIGJlIHNhZmUuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gWWVzLCBpdCBpcy4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXJgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGJwZl9kaXNwYXRjaGVyX3ByZXBhcmVgLiBgYnBmX2Rpc3BhdGNoZXJfcHJlcGFyZWAgaXMgaW4gdHVybiBjYWxsZWQgYnkgYGJwZl9kaXNwYXRjaGVyX3VwZGF0ZWAsIGFuZCB0aGF0IGhhcHBlbnMgd2hlbiBhbiBYRFAgcHJvZ3JhbSBpcyBhdHRhY2hlZC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBBaCwgYENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgY291bGQgYmUgdXNlZnVsIHRvIGd1YXJhbnRlZSB0aGUgSklUIGlzIHVzZWQsIGFuZCBgQ09ORklHX1hEUF9TT0NLRVRTYCBpcyBpbXBvcnRhbnQgZm9yIFhEUCBzdXBwb3J0LgoKU28sIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnk6CgoqICAgKipXb3J0aEZ1enppbmcqKjogdHJ1ZQoqICAgKipGb2N1c1N5bWJvbHMqKjogYGVtaXRfYnBmX2Rpc3BhdGNoZXJgLCBgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyYAoqICAgKipFbmFibGVDb25maWdzKio6IGBGSU5FSUJUYCwgYFg4Nl9LRVJORUxfSUJUYCwgYENGSWAsIGBNSVRJR0FUSU9OX1JFVFBPTElORWAsIGBCUEZfSklUYCwgYEJQRl9TWVNDQUxMYAoKTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBhZGQgRmluZUlCVCBzdXBwb3J0IHRvIHRoZSBCUEYgZGlzcGF0Y2hlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBkaXJlY3RseSBpbXBhY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGV4ZWN1dGVkLiBXZSBzaG91bGQgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiB0aGUgQlBGIGRpc3BhdGNoZXIgbG9naWMsIGVzcGVjaWFsbHkgd2l0aCBGaW5lSUJUIGVuYWJsZWQuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBzaWduYXR1cmVzIG9mIHRoZSBmdW5jdGlvbnMuIGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoIHRoZSBzaWduYXR1cmUgYHN0YXRpYyBpbnQgZW1pdF9icGZfZGlzcGF0Y2hlcih1OCAqKnBwcm9nLCBpbnQgYSwgaW50IGIsIHM2NCAqcHJvZ3MsIHU4ICppbWFnZSwgdTggKmJ1ZilgLiBZZXMsIHRoYXQmIzM5O3MgY29ycmVjdC4gYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAgaXMgYSBnbG9iYWwgZnVuY3Rpb24gd2l0aCB0aGUgc2lnbmF0dXJlIGBpbnQgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyKHZvaWQgKmltYWdlLCB2b2lkICpidWYsIHM2NCAqZnVuY3MsIGludCBudW1fZnVuY3MpYC4KCkFscmlnaHQsIEkmIzM5O20gc2F0aXNmaWVkLiBJJiMzOTtsbCBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGSU5FSUJUJiMzNDssCiAgICAmIzM0O1g4Nl9LRVJORUxfSUJUJiMzNDssCiAgICAmIzM0O0NGSSYjMzQ7LAogICAgJiMzNDtNSVRJR0FUSU9OX1JFVFBPTElORSYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW1pdF9icGZfZGlzcGF0Y2hlciYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIGFkZCBGaW5lSUJUIHN1cHBvcnQgdG8gdGhlIEJQRiBkaXNwYXRjaGVyLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGFmZmVjdHMgaG93IEJQRiBwcm9ncmFtcyBhcmUgZXhlY3V0ZWQuIFdlIHNob3VsZCBmdXp6IHRoZSBCUEYgZGlzcGF0Y2hlciBsb2dpYyB3aXRoIEZpbmVJQlQgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RklORUlCVCYjMzQ7LAogICAgJiMzNDtYODZfS0VSTkVMX0lCVCYjMzQ7LAogICAgJiMzNDtDRkkmIzM0OywKICAgICYjMzQ7TUlUSUdBVElPTl9SRVRQT0xJTkUmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VtaXRfYnBmX2Rpc3BhdGNoZXImIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBhZGQgRmluZUlCVCBzdXBwb3J0IHRvIHRoZSBCUEYgZGlzcGF0Y2hlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGV4ZWN1dGVkLiBXZSBzaG91bGQgZnV6eiB0aGUgQlBGIGRpc3BhdGNoZXIgbG9naWMgd2l0aCBGaW5lSUJUIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzozOTo0OC4wMDA5Nzc4NzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDcwNzg5NTYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSU5FSUJUXCIsXG4gICAgXCJYODZfS0VSTkVMX0lCVFwiLFxuICAgIFwiQ0ZJXCIsXG4gICAgXCJNSVRJR0FUSU9OX1JFVFBPTElORVwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbWl0X2JwZl9kaXNwYXRjaGVyXCIsXG4gICAgXCJhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gYWRkIEZpbmVJQlQgc3VwcG9ydCB0byB0aGUgQlBGIGRpc3BhdGNoZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWZmZWN0cyBob3cgQlBGIHByb2dyYW1zIGFyZSBleGVjdXRlZC4gV2Ugc2hvdWxkIGZ1enogdGhlIEJQRiBkaXNwYXRjaGVyIGxvZ2ljIHdpdGggRmluZUlCVCBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzozOTo0OC4wMDA5ODcxMTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTExMTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUwNGZhMDI3NzNhZjczYmZlMDRjNDczZjYyM2IzZmEzM2UxMDRlMWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAxMzozOTo0NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uMWM4MjQ5ZDhjYTNiMjAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTM3NDAsNiArMzc0MCwxNSBAQCBzdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbitcXHRcXHQvKiBJZiBydW5uaW5nIHVuZGVyIEZpbmVJQlQsIGVudGVyIHRoZSBwcmVhbWJsZSBzbyB0aGUgZm9sbG93aW5nXFxuK1xcdFxcdCAqIGluZGlyZWN0IGp1bXAgbGFuZHMgb24gYSByZWFsIEVOREJSIGluc3RlYWQgb2YgdGhlIHBvaXNvbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChjZmlfbW9kZSA9PSBDRklfRklORUlCVCkge1xcbitcXHRcXHRcXHRFTUlUMV9vZmYzMigweGI4LCBjZmlfYnBmX2hhc2gpO1xcdC8qIG1vdiAkY2ZpX2JwZl9oYXNoLCAlZWF4ICovXFxuK1xcdFxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1xcdC8qIHN1YiByZHgsIGNmaV9nZXRfb2Zmc2V0KCkgKi9cXG4rXFx0XFx0XFx0RU1JVDJfb2ZmMzIoMHg4MSwgYWRkXzFyZWcoMHhFOCwgQlBGX1JFR18zKSwgY2ZpX2dldF9vZmZzZXQoKSk7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGVtaXRfaW5kaXJlY3RfanVtcChcXHUwMDI2cHJvZywgQlBGX1JFR18zIC8qIFIzIC1cXHUwMDNlIHJkeCAqLywgaW1hZ2UgKyAocHJvZyAtIGJ1ZikpO1xcbiBcXG4gXFx0XFx0KnBwcm9nID0gcHJvZztcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmQzZmM0MDM0ZWI5MGNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXFxuQEAgLTAsMCArMSw0NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgV2luZHNvciAqL1xcbitcXG4rLypcXG4rICogUmVncmVzc2lvbiB0ZXN0IGZvciB0aGUgeDg2IEJQRiBkaXNwYXRjaGVyJ3MgaW5kaXJlY3QtanVtcCBmYWxsYmFja1xcbisgKiB1bmRlciBGaW5lSUJULlxcbisgKlxcbisgKiBXQVJOSU5HXFxuKyAqIC0tLS0tLS1cXG4rICogIFRoaXMgdGVzdCBjYW4gY3Jhc2ggdGhlIGtlcm5lbCwgdGh1cyBzaG91bGQgYmUgcnVuIGluIGEgVk0uXFxuKyAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9pZl9saW5rLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXR3b3JrX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcInhkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuc2tlbC5oXFxcIlxcbitcXG4rI2RlZmluZSBJRklOREVYX0xPXFx0XFx0MVxcbitcXG4rdm9pZCB0ZXN0X3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgeGRwX2Rpc3BhdGNoZXJfZmluZWlidCAqc2tlbDtcXG4rXFx0aW50IGVyciwgYXR0YWNoZWRfZmQsIHVuYXR0YWNoZWRfZmQ7XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMsXFxuK1xcdFxcdC5kYXRhX2luID0gXFx1MDAyNnBrdF92NCxcXG4rXFx0XFx0LmRhdGFfc2l6ZV9pbiA9IHNpemVvZihwa3RfdjQpLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IHhkcF9kaXNwYXRjaGVyX2ZpbmVpYnRfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YXR0YWNoZWRfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MueGRwX2Rpc3BhdGNoZXJfYXR0YWNoZWQpO1xcbitcXHR1bmF0dGFjaGVkX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLnhkcF9kaXNwYXRjaGVyX3VuYXR0YWNoZWQpO1xcbitcXG4rXFx0ZXJyID0gYnBmX3hkcF9hdHRhY2goSUZJTkRFWF9MTywgYXR0YWNoZWRfZmQsIFhEUF9GTEFHU19TS0JfTU9ERSwgTlVMTCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImF0dGFjaF9wcm9nXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyh1bmF0dGFjaGVkX2ZkLCBcXHUwMDI2dG9wdHMpO1xcbitcXHRBU1NFUlRfT0soZXJyLCBcXFwidW5hdHRhY2hlZF90ZXN0X3J1blxcXCIpO1xcbitcXHRBU1NFUlRfRVEodG9wdHMucmV0dmFsLCBYRFBfUEFTUywgXFxcInVuYXR0YWNoZWRfcmV0dmFsXFxcIik7XFxuK1xcbitcXHRicGZfeGRwX2RldGFjaChJRklOREVYX0xPLCBYRFBfRkxBR1NfU0tCX01PREUsIE5VTEwpO1xcbitvdXQ6XFxuK1xcdHhkcF9kaXNwYXRjaGVyX2ZpbmVpYnRfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iNDliODRmMDFjOGVlYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXFxuQEAgLTAsMCArMSwxOCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgV2luZHNvciAqL1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IHhkcF9kaXNwYXRjaGVyX2F0dGFjaGVkKHN0cnVjdCB4ZHBfbWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gWERQX1BBU1M7XFxuK31cXG4rXFxuK1NFQyhcXFwieGRwXFxcIilcXG4raW50IHhkcF9kaXNwYXRjaGVyX3VuYXR0YWNoZWQoc3RydWN0IHhkcF9tZCAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBYRFBfUEFTUztcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEzOjM5OjQ4LjUzNzExNDAwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQxNzE3NDc5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRklORUlCVFwiLFxuICAgIFwiWDg2X0tFUk5FTF9JQlRcIixcbiAgICBcIkNGSVwiLFxuICAgIFwiTUlUSUdBVElPTl9SRVRQT0xJTkVcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW1pdF9icGZfZGlzcGF0Y2hlclwiLFxuICAgIFwiYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHRvIGFkZCBGaW5lSUJUIHN1cHBvcnQgdG8gdGhlIEJQRiBkaXNwYXRjaGVyLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGFmZmVjdHMgaG93IEJQRiBwcm9ncmFtcyBhcmUgZXhlY3V0ZWQuIFdlIHNob3VsZCBmdXp6IHRoZSBCUEYgZGlzcGF0Y2hlciBsb2dpYyB3aXRoIEZpbmVJQlQgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlMDRmYTAyNzczYWY3M2JmZTA0YzQ3M2Y2MjNiM2ZhMzNlMTA0ZTFkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxMzozOTo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZGU3NTE1ZWExYmVhZTguLjFjODI0OWQ4Y2EzYjIwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0zNzQwLDYgKzM3NDAsMTUgQEAgc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4rXHRcdC8qIElmIHJ1bm5pbmcgdW5kZXIgRmluZUlCVCwgZW50ZXIgdGhlIHByZWFtYmxlIHNvIHRoZSBmb2xsb3dpbmdcbitcdFx0ICogaW5kaXJlY3QganVtcCBsYW5kcyBvbiBhIHJlYWwgRU5EQlIgaW5zdGVhZCBvZiB0aGUgcG9pc29uLlxuK1x0XHQgKi9cbitcdFx0aWYgKGNmaV9tb2RlID09IENGSV9GSU5FSUJUKSB7XG4rXHRcdFx0RU1JVDFfb2ZmMzIoMHhiOCwgY2ZpX2JwZl9oYXNoKTtcdC8qIG1vdiAkY2ZpX2JwZl9oYXNoLCAlZWF4ICovXG4rXHRcdFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgQlBGX1JFR18zKSk7XHQvKiBzdWIgcmR4LCBjZmlfZ2V0X29mZnNldCgpICovXG4rXHRcdFx0RU1JVDJfb2ZmMzIoMHg4MSwgYWRkXzFyZWcoMHhFOCwgQlBGX1JFR18zKSwgY2ZpX2dldF9vZmZzZXQoKSk7XG4rXHRcdH1cbitcbiBcdFx0ZW1pdF9pbmRpcmVjdF9qdW1wKFx1MDAyNnByb2csIEJQRl9SRUdfMyAvKiBSMyAtXHUwMDNlIHJkeCAqLywgaW1hZ2UgKyAocHJvZyAtIGJ1ZikpO1xuIFxuIFx0XHQqcHByb2cgPSBwcm9nO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZDNmYzQwMzRlYjkwY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXG5AQCAtMCwwICsxLDQ3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgV2luZHNvciAqL1xuK1xuKy8qXG4rICogUmVncmVzc2lvbiB0ZXN0IGZvciB0aGUgeDg2IEJQRiBkaXNwYXRjaGVyJ3MgaW5kaXJlY3QtanVtcCBmYWxsYmFja1xuKyAqIHVuZGVyIEZpbmVJQlQuXG4rICpcbisgKiBXQVJOSU5HXG4rICogLS0tLS0tLVxuKyAqICBUaGlzIHRlc3QgY2FuIGNyYXNoIHRoZSBrZXJuZWwsIHRodXMgc2hvdWxkIGJlIHJ1biBpbiBhIFZNLlxuKyAqL1xuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaWZfbGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcInhkcF9kaXNwYXRjaGVyX2ZpbmVpYnQuc2tlbC5oXCJcbitcbisjZGVmaW5lIElGSU5ERVhfTE9cdFx0MVxuK1xuK3ZvaWQgdGVzdF94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0KHZvaWQpXG4re1xuK1x0c3RydWN0IHhkcF9kaXNwYXRjaGVyX2ZpbmVpYnQgKnNrZWw7XG4rXHRpbnQgZXJyLCBhdHRhY2hlZF9mZCwgdW5hdHRhY2hlZF9mZDtcbitcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyxcbitcdFx0LmRhdGFfaW4gPSBcdTAwMjZwa3RfdjQsXG4rXHRcdC5kYXRhX3NpemVfaW4gPSBzaXplb2YocGt0X3Y0KSxcbitcdCk7XG4rXG4rXHRza2VsID0geGRwX2Rpc3BhdGNoZXJfZmluZWlidF9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRhdHRhY2hlZF9mZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnhkcF9kaXNwYXRjaGVyX2F0dGFjaGVkKTtcbitcdHVuYXR0YWNoZWRfZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy54ZHBfZGlzcGF0Y2hlcl91bmF0dGFjaGVkKTtcbitcbitcdGVyciA9IGJwZl94ZHBfYXR0YWNoKElGSU5ERVhfTE8sIGF0dGFjaGVkX2ZkLCBYRFBfRkxBR1NfU0tCX01PREUsIE5VTEwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImF0dGFjaF9wcm9nXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHModW5hdHRhY2hlZF9mZCwgXHUwMDI2dG9wdHMpO1xuK1x0QVNTRVJUX09LKGVyciwgXCJ1bmF0dGFjaGVkX3Rlc3RfcnVuXCIpO1xuK1x0QVNTRVJUX0VRKHRvcHRzLnJldHZhbCwgWERQX1BBU1MsIFwidW5hdHRhY2hlZF9yZXR2YWxcIik7XG4rXG4rXHRicGZfeGRwX2RldGFjaChJRklOREVYX0xPLCBYRFBfRkxBR1NfU0tCX01PREUsIE5VTEwpO1xuK291dDpcbitcdHhkcF9kaXNwYXRjaGVyX2ZpbmVpYnRfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI0OWI4NGYwMWM4ZWViXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveGRwX2Rpc3BhdGNoZXJfZmluZWlidC5jXG5AQCAtMCwwICsxLDE4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgV2luZHNvciAqL1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbitTRUMoXCJ4ZHBcIilcbitpbnQgeGRwX2Rpc3BhdGNoZXJfYXR0YWNoZWQoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdHJldHVybiBYRFBfUEFTUztcbit9XG4rXG4rU0VDKFwieGRwXCIpXG4raW50IHhkcF9kaXNwYXRjaGVyX3VuYXR0YWNoZWQoc3RydWN0IHhkcF9tZCAqY3R4KVxuK3tcbitcdHJldHVybiBYRFBfUEFTUztcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6Mzk6NDguNTM3MTE2MjU4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4NzYwMTA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZpbmVJQlQgQlBGIEpJVCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRzIEZpbmVJQlQgc3VwcG9ydCB0byB0aGUgQlBGIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhlIGNvcmUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIHdpdGhpbiB0aGUgYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGZ1bmN0aW9uLiBUaGUgY29kZSBzbmlwcGV0IGNsZWFybHkgc2hvd3MgbG9naWMgdG8gaW5qZWN0IGEgcHJlYW1ibGUgd2hlbiBgY2ZpX21vZGVgIGlzIHNldCB0byBgQ0ZJX0ZJTkVJQlRgLiBUaGlzIHByZWFtYmxlLCB1c2luZyBgbW92YCwgYGFkZGAgaW5zdHJ1Y3Rpb25zLCBhcHBlYXJzIGRlc2lnbmVkIHRvIHByZXBhcmUgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBiZWZvcmUgYW4gaW5kaXJlY3QganVtcCwgbGlrZWx5IGVuc3VyaW5nIGl0IGxhbmRzIG9uIGEgdmFsaWQgYEVOREJSYCBpbnN0cnVjdGlvbiBpbnN0ZWFkIG9mIHBvdGVudGlhbCBcInBvaXNvblwiIGNvZGUuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0cyBhcmUsIGlzIHRoaXMgY2hhbmdlIGNvcnJlY3RseSBwbGFjZWQsIGFuZCBob3cgY2FuIEkgZGV0ZXJtaW5lIGlmIHRoaXMgZmVhdHVyZSBpcyBiZWluZyBjb21waWxlZCBjb3JyZWN0bHk/IExldCdzIHZlcmlmeSB0aGF0IGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBpcyBhY3R1YWxseSByZWFjaGFibGUgd2l0aGluIHRoZSBidWlsZCBhbmQgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBJIGtub3cgQlBGIEpJVCBpcyBnZW5lcmFsbHkgZW5hYmxlZCB2aWEgYENPTkZJR19CUEZfSklUYC4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIEZpbmVJQlQsIEnigJlsbCBhbHNvIGNoZWNrIGBDT05GSUdfRklORUlCVGAuIE5vdywgdG8gYmUgdGhvcm91Z2gsIEnigJlsbCBjcm9zcy1yZWZlcmVuY2UgdGhlIGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBmdW5jdGlvbiB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgaXRzZWxmLiBNYWtpbmcgc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIGNvcnJlY3RseSBjb25maWd1cmVkLCBhbmQgYWxsIGRlcGVuZGVuY2llcyBhcmUgbGlua2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6Mzk6NTQuMzI0NzIwMDk3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MjY4NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtaXRfYnBmX2Rpc3BhdGNoZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjk4PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcyMS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzcyMjpzdGF0aWMgaW50IGVtaXRfYnBmX2Rpc3BhdGNoZXIodTggKipwcHJvZywgaW50IGEsIGludCBiLCBzNjQgKnByb2dzLCB1OCAqaW1hZ2UsIHU4ICpidWYpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MjMte1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NzUtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3NzY6XFx0ZXJyID0gZW1pdF9icGZfZGlzcGF0Y2hlcihcXHUwMDI2cHJvZywgYSwgYSArIHBpdm90LFxcdC8qIGVtaXQgbG93ZXJfcGFydCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzc3LVxcdFxcdFxcdFxcdCAgcHJvZ3MsIGltYWdlLCBidWYpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3ODktXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3OTA6XFx0ZXJyID0gZW1pdF9icGZfZGlzcGF0Y2hlcihcXHUwMDI2cHJvZywgYSArIHBpdm90ICsgMSxcXHQvKiBlbWl0IHVwcGVyX3BhcnQgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc5MS1cXHRcXHRcXHRcXHQgIGIsIHByb2dzLCBpbWFnZSwgYnVmKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODExPWludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODE1LVxcdHNvcnQoZnVuY3MsIG51bV9mdW5jcywgc2l6ZW9mKGZ1bmNzWzBdKSwgY21wX2lwcywgTlVMTCk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4MTY6XFx0cmV0dXJuIGVtaXRfYnBmX2Rpc3BhdGNoZXIoXFx1MDAyNnByb2csIDAsIG51bV9mdW5jcyAtIDEsIGZ1bmNzLCBpbWFnZSwgYnVmKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzgxNy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEzOjM5OjU0LjQyMDAwNDE1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzQ1MjE0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0OlxuXG4qKkRpc3NlY3RpbmcgdGhlIEJQRiBEaXNwYXRjaGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgQlBGIGRpc3BhdGNoZXIgaXMgc2V0IHVwLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBgZW1pdF9icGZfZGlzcGF0Y2hlcmAgaXMgY2xlYXJseSBhIGtleSBmdW5jdGlvbi4gVGhlIGRlc2NyaXB0aW9uIHNheXMgaXQncyBjYWxsZWQgYnkgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAsIGFuZCBldmVuIG1vcmUgaW50ZXJlc3RpbmdseSwgaXQgKnJlY3Vyc2l2ZWx5KiBjYWxscyBpdHNlbGYuIFRoYXQgcmVjdXJzaXZlIG5hdHVyZSBpcyBzb21ldGhpbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0bzsgbGlrZWx5LCB0aGlzIGlzIGJ1aWxkaW5nIHNvbWUga2luZCBvZiBjaGFpbiBvciBzdHJ1Y3R1cmUuIFRoZSBmYWN0IHRoYXQgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAgaXMgY2FsbGVkIGJ5IEJQRiBkaXNwYXRjaGVyIGxvZ2ljIGp1c3QgcmVpbmZvcmNlcyB0aGF0LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGNvbm5lY3Rpb24uIE15IG5leHQgc3RlcCBpcyBvYnZpb3VzIOKAkyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSBgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyYCBpdHNlbGYgaXMgYmVpbmcgaW52b2tlZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHdvcmtmbG93IG9mIHRoaXMgQlBGIGRpc3BhdGNoZXIuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjYWxsIGdyYXBocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEzOjM5OjU3Ljg5NDUzNTEyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA4OTI3NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzc5OT1zdGF0aWMgaW50IGNtcF9pcHMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODEwLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozODExOmludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzgxMi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTE1MjA9dm9pZCBicGZfdHJhbXBvbGluZV9wdXQoc3RydWN0IGJwZl90cmFtcG9saW5lICp0cik7XFxuaW5jbHVkZS9saW51eC9icGYuaDoxNTIxOmludCBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcyk7XFxuaW5jbHVkZS9saW51eC9icGYuaC0xNTIyLVxcbi0tXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM9Njg9c3RhdGljIGJvb2wgYnBmX2Rpc3BhdGNoZXJfcmVtb3ZlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLFxcbi0tXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtODgtXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmM6ODk6aW50IF9fd2VhayBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXIodm9pZCAqaW1hZ2UsIHZvaWQgKmJ1ZiwgczY0ICpmdW5jcywgaW50IG51bV9mdW5jcylcXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYy05MC17XFxuLS1cXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYz05ND1zdGF0aWMgaW50IGJwZl9kaXNwYXRjaGVyX3ByZXBhcmUoc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCB2b2lkICppbWFnZSwgdm9pZCAqYnVmKVxcbi0tXFxua2VybmVsL2JwZi9kaXNwYXRjaGVyLmMtMTAyLVxcdH1cXG5rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYzoxMDM6XFx0cmV0dXJuIGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcihpbWFnZSwgYnVmLCBcXHUwMDI2aXBzWzBdLCBkLVxcdTAwM2VudW1fcHJvZ3MpO1xcbmtlcm5lbC9icGYvZGlzcGF0Y2hlci5jLTEwNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEzOjQwOjAwLjEwMzQ2OTMwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODQwMjI1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgRGlzcGF0Y2hlcioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBicGZfZGlzcGF0Y2hlcl9wcmVwYXJlYCBmdW5jdGlvbiwgZm91bmQgaW4gYGtlcm5lbC9icGYvZGlzcGF0Y2hlci5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBOYXR1cmFsbHksIEkgYWxyZWFkeSBrbm93IGBDT05GSUdfQlBGX0pJVGAgaXMgZXNzZW50aWFsLiBOb3csIHRoZSBuZXcgY29kZSBwYXRoLCB0aGF0J3MgdHJpZ2dlcmVkIGJ5IGBDT05GSUdfRklORUlCVGAsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIHNldC4gVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgYSBxdWljayBjaGVjayB0byBjb25maXJtIHRoZSBleGlzdGVuY2Ugb2YgYENPTkZJR19GSU5FSUJUYC4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDI3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6NDA6MDMuMjg3NDk0NzgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODE1MTk2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZJTkVJQlRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0yMzc4PWNvbmZpZyBDQUxMX1BBRERJTkdcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjM4Mi1cXG5hcmNoL3g4Ni9LY29uZmlnOjIzODM6Y29uZmlnIEZJTkVJQlRcXG5hcmNoL3g4Ni9LY29uZmlnLTIzODQtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMzg3LVxcbmFyY2gveDg2L0tjb25maWc6MjM4ODpjb25maWcgRklORUlCVF9CSElcXG5hcmNoL3g4Ni9LY29uZmlnLTIzODktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzo0MDowNS44NjkwMjE2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzg0NTE0NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBGSU5FSUJUKipcblxuT2theSwgc28gYEZJTkVJQlRgIGlzIGZsYWdnZWQgYXMgYSBgZGVmX2Jvb2xgLCBtZWFuaW5nIGl0J3MgZWl0aGVyIGRlZmluZWQgYXMgYHlgIG9yIG5vdCBkZWZpbmVkLCBidXQgdGhlIGtleSBpcyB0aGF0IGl0J3MgKmRlcGVuZGVudCogb24gc29tZXRoaW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgXCJzb21ldGhpbmdcIiBpcy4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIHg4NiBhcmNoaXRlY3R1cmUgYW5kIHRoaXMgbG9va3MgbGlrZSBhIG1vcmUgcmVjZW50IGZlYXR1cmUsIEknbGwgZ28gdG8gYGFyY2gveDg2L0tjb25maWdgLiBMZXQncyB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAyMzgzIHRvIHNlZSB3aGF0IGNvbmRpdGlvbnMgYXJlIHNldHRpbmcgaXRzIHN0YXRlLiBIb3BlZnVsbHksIEknbGwgYmUgYWJsZSB0byBxdWlja2x5IGRldGVybWluZSB0aGUgZW5hYmxpbmcgZmFjdG9ycyBmb3IgdGhpcyBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzOTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzo0MDoxNy4yNTM1MzkzODNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjM3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM3MDpcXHRcXG4yMzcxOlxcdCMgQmFzaWNhbGx5OiBGVU5DVElPTl9BTElHTk1FTlQgLSA1KkNGSVxcbjIzNzI6XFx0IyBleGNlcHQgS2NvbmZpZyBjYW4ndCBkbyBhcml0aG1ldGljIDovXFxuMjM3MzpcXHRjb25maWcgRlVOQ1RJT05fUEFERElOR19CWVRFU1xcbjIzNzQ6XFx0XFx0aW50XFxuMjM3NTpcXHRcXHRkZWZhdWx0IEZVTkNUSU9OX1BBRERJTkdfQ0ZJIGlmIENGSVxcbjIzNzY6XFx0XFx0ZGVmYXVsdCBGVU5DVElPTl9BTElHTk1FTlRcXG4yMzc3OlxcdFxcbjIzNzg6XFx0Y29uZmlnIENBTExfUEFERElOR1xcbjIzNzk6XFx0XFx0ZGVmX2Jvb2wgblxcbjIzODA6XFx0XFx0ZGVwZW5kcyBvbiBDQ19IQVNfRU5UUllfUEFERElORyBcXHUwMDI2XFx1MDAyNiBPQkpUT09MXFxuMjM4MTpcXHRcXHRzZWxlY3QgRlVOQ1RJT05fQUxJR05NRU5UXzE2QlxcbjIzODI6XFx0XFxuMjM4MzpcXHRjb25maWcgRklORUlCVFxcbjIzODQ6XFx0XFx0ZGVmX2Jvb2wgeVxcbjIzODU6XFx0XFx0ZGVwZW5kcyBvbiBYODZfS0VSTkVMX0lCVCBcXHUwMDI2XFx1MDAyNiBDRkkgXFx1MDAyNlxcdTAwMjYgTUlUSUdBVElPTl9SRVRQT0xJTkVcXG4yMzg2OlxcdFxcdHNlbGVjdCBDQUxMX1BBRERJTkdcXG4yMzg3OlxcdFxcbjIzODg6XFx0Y29uZmlnIEZJTkVJQlRfQkhJXFxuMjM4OTpcXHRcXHRkZWZfYm9vbCB5XFxuMjM5MDpcXHRcXHRkZXBlbmRzIG9uIEZJTkVJQlQgXFx1MDAyNlxcdTAwMjYgQ0NfSEFTX0tDRklfQVJJVFlcXG4yMzkxOlxcdFxcbjIzOTI6XFx0Y29uZmlnIEhBVkVfQ0FMTF9USFVOS1NcXG4yMzkzOlxcdFxcdGRlZl9ib29sIHlcXG4yMzk0OlxcdFxcdGRlcGVuZHMgb24gQ0NfSEFTX0VOVFJZX1BBRERJTkcgXFx1MDAyNlxcdTAwMjYgTUlUSUdBVElPTl9SRVRIVU5LIFxcdTAwMjZcXHUwMDI2IE9CSlRPT0xcXG4yMzk1OlxcdFxcbjIzOTY6XFx0Y29uZmlnIENBTExfVEhVTktTXFxuMjM5NzpcXHRcXHRkZWZfYm9vbCBuXFxuMjM5ODpcXHRcXHRzZWxlY3QgQ0FMTF9QQURESU5HXFxuMjM5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6NDA6MTcuMjUzODgxNTkyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTIyOTMyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBGSU5FSUJUIERlcGVuZGVuY3kgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgRklORUlCVGAgaGVyZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBiZXN0IGludGVncmF0ZSBpdC4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0IHJlbGllcyBvbiBhIGZldyBjcml0aWNhbCBmZWF0dXJlczogYFg4Nl9LRVJORUxfSUJUYCwgYENGSWAsIGFuZCBgTUlUSUdBVElPTl9SRVRQT0xJTkVgLiBNYWtlcyBzZW5zZSwgYWxsIGNvcmUgdG8gY29udHJvbCBmbG93IGludGVncml0eS5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgYFg4Nl9LRVJORUxfSUJUYCBhbmQgYWxzbyBpZiBDRkkgaXMgcHJlc2VudC4gSG1tbSwgaG9sZCBvbi4uLiBgQ0ZJYD8gVGhhdCBkb2Vzbid0IHNlZW0gcmlnaHQuIEl0IGRvZXNuJ3QgcmluZyBhIGJlbGwuIFBlcmhhcHMgaXQncyB1bmRlciBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lPyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSBpbiBgYXJjaC94ODYvS2NvbmZpZ2AuIE1heWJlIGl0J3MgYENGSV9DTEFOR2A/IEkgbmVlZCB0byBjbGFyaWZ5IHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBleHBlY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQ0LCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzo0MDoyMC44NDYxNzgyNzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTAyMTQyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9OTMwPWNvbmZpZyBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTXFxuLS1cXG5hcmNoL0tjb25maWctOTM2LVxcbmFyY2gvS2NvbmZpZzo5Mzc6Y29uZmlnIENGSVxcbmFyY2gvS2NvbmZpZy05MzgtXFx0Ym9vbCBcXFwiVXNlIEtlcm5lbCBDb250cm9sIEZsb3cgSW50ZWdyaXR5IChrQ0ZJKVxcXCJcXG4tLVxcbmFyY2gvS2NvbmZpZy05NTItXFxuYXJjaC9LY29uZmlnOjk1Mzpjb25maWcgQ0ZJX0NMQU5HXFxuYXJjaC9LY29uZmlnLTk1NC1cXHRib29sXFxuLS1cXG5hcmNoL0tjb25maWctOTU4LVxcbmFyY2gvS2NvbmZpZzo5NTk6Y29uZmlnIENGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNcXG5hcmNoL0tjb25maWctOTYwLVxcdGJvb2wgXFxcIk5vcm1hbGl6ZSBDRkkgdGFncyBmb3IgaW50ZWdlcnNcXFwiXFxuLS1cXG5hcmNoL0tjb25maWc9OTgxPWNvbmZpZyBIQVZFX0NGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNfUlVTVENcXG4tLVxcbmFyY2gvS2NvbmZpZy05ODgtXFxuYXJjaC9LY29uZmlnOjk4OTpjb25maWcgQ0ZJX1BFUk1JU1NJVkVcXG5hcmNoL0tjb25maWctOTkwLVxcdGJvb2wgXFxcIlVzZSBDRkkgaW4gcGVybWlzc2l2ZSBtb2RlXFxcIlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0yMjkzPWNvbmZpZyBTVFJJQ1RfU0lHQUxUU1RBQ0tfU0laRVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMzA4LVxcbmFyY2gveDg2L0tjb25maWc6MjMwOTpjb25maWcgQ0ZJX0FVVE9fREVGQVVMVFxcbmFyY2gveDg2L0tjb25maWctMjMxMC1cXHRib29sIFxcXCJBdHRlbXB0IHRvIHVzZSBGaW5lSUJUIGJ5IGRlZmF1bHQgYXQgYm9vdCB0aW1lXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzo0MDoyMy4yOTY0MDM5MjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkzNDMxMzgzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBmb3IgYSBLZXJuZWwgVGVzdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgdGVzdCBzZXR1cC4gUmlnaHQgbm93LCBpdCBsb29rcyBsaWtlIGBDRklgLCBgWDg2X0tFUk5FTF9JQlRgLCBhbmQgYE1JVElHQVRJT05fUkVUUE9MSU5FYCBhcmUgcmVsZXZhbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9uZXMgdG8gZXhwbGljaXRseSBlbmFibGUuIEluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgYWJvdXQgbGlzdGluZyBgRklORUlCVGAgYXMgYW4gKmVuYWJsZSogY29uZmlnLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBgRklORUlCVGAgaXMgYSBgZGVmX2Jvb2wgeWAsIG1lYW5pbmcgaXQncyBhdXRvbWF0aWNhbGx5IHNldCB0byBcInllc1wiIGlmIGl0cyBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZC4gU28sIHJlYWxseSwgSSBqdXN0IG5lZWQgdG8gZm9jdXMgb24gZXhwbGljaXRseSBlbmFibGluZyB0aG9zZSBkZXBlbmRlbmNpZXMuIEdpdmVuIHRoYXQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIGBYODZfS0VSTkVMX0lCVGAsIGBDRklgLCBhbmQgYE1JVElHQVRJT05fUkVUUE9MSU5FYCBhcmUgdHVybmVkIG9uLlxuXG5PaCwgcmlnaHQsIHRoaXMgdGVzdCBpcyBhbiBYRFAgdGVzdC4gU2luY2UgdGhhdCBpcyB0aGUgY2FzZSwgZXZlbiB0aG91Z2ggdGhleSBtYXkgYmUgc3RhbmRhcmQsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gZG91YmxlLWNoZWNrIHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfWERQX1NPQ0tFVFNgIGFyZSBlbmFibGVkLCBidXQgSSBhbSBub3QgdG9vIGNvbmNlcm5lZC5cblxuTm93LCBJJ20gY2hlY2tpbmcgYSBjb25kaXRpb24gYGNmaV9tb2RlID09IENGSV9GSU5FSUJUYC4gV2hlcmUgaXMgYGNmaV9tb2RlYCBldmVuIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayB0aGF0IGRvd24gdG8gY29uZmlybSB0aGUgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MDYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6NDA6NDIuNjM5NTQ1MzU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjkyODA3MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNmaV9tb2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oLTkyLSAqL1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oOjkzOmVudW0gY2ZpX21vZGUge1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oLTk0LVxcdENGSV9BVVRPLFxcdC8qIEZpbmVJQlQgaWYgaGFyZHdhcmUgaGFzIElCVCwgb3RoZXJ3aXNlIGtDRkkgKi9cXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oLTk5LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oOjEwMDpleHRlcm4gZW51bSBjZmlfbW9kZSBjZmlfbW9kZTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jZmkuaC0xMDEtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jZmkuaD0xMjQ9c3RhdGljIGlubGluZSBpbnQgY2ZpX2dldF9vZmZzZXQodm9pZClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jZmkuaC0xMjUte1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2NmaS5oOjEyNjpcXHRzd2l0Y2ggKGNmaV9tb2RlKSB7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vY2ZpLmgtMTI3LVxcdGNhc2UgQ0ZJX0ZJTkVJQlQ6XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz05Njg9dm9pZCBfX2luaXRfb3JfbW9kdWxlIG5vaW5saW5lIGFwcGx5X3JldHBvbGluZXMoczMyICpzdGFydCwgczMyICplbmQpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy05ODktXFx0XFx0XFx0LyogU2VlIGNmaV9wYXJhbm9pZC4gKi9cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzo5OTA6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGNmaV9tb2RlICE9IENGSV9GSU5FSUJUKTtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy05OTEtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy05OTctXFx0XFx0XFx0aWYgKGRlc3RbLTFdID09IDB4ZDYgXFx1MDAyNlxcdTAwMjYgKGRlc3RbMF0gXFx1MDAyNiAweGYwKSA9PSAweDcwKSB7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6OTk4OlxcdFxcdFxcdFxcdFdBUk5fT05fT05DRShjZmlfbW9kZSAhPSBDRklfRklORUlCVCk7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtOTk5LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MTE5MT12b2lkIF9faW5pdF9vcl9tb2R1bGUgYXBwbHlfc2VhbF9lbmRicihzMzIgKnN0YXJ0LCBzMzIgKmVuZCkgeyB9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjAyLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjEyMDM6ZW51bSBjZmlfbW9kZSBjZmlfbW9kZSBfX3JvX2FmdGVyX2luaXQgPSBfX0NGSV9ERUZBVUxUO1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyMDQtc3RhdGljIGJvb2wgY2ZpX2RlYnVnIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jPTEyMTE9dTMyIGNmaV9nZXRfZnVuY19oYXNoKHZvaWQgKmZ1bmMpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjE1LVxcdGZ1bmMgLT0gY2ZpX2dldF9vZmZzZXQoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjE2OlxcdHN3aXRjaCAoY2ZpX21vZGUpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjE3LVxcdGNhc2UgQ0ZJX0ZJTkVJQlQ6XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0xMjMzPWludCBjZmlfZ2V0X2Z1bmNfYXJpdHkodm9pZCAqZnVuYylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyMzctXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTIzODpcXHRpZiAoY2ZpX21vZGUgIT0gQ0ZJX0ZJTkVJQlQgXFx1MDAyNlxcdTAwMjYgIWNmaV9iaGkpXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTIzOS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jPTEyNzA9c3RhdGljIF9faW5pdCBpbnQgY2ZpX3BhcnNlX2NtZGxpbmUoY2hhciAqc3RyKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI4Mi1cXHRcXHRpZiAoIXN0cmNtcChzdHIsIFxcXCJhdXRvXFxcIikpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjgzOlxcdFxcdFxcdGNmaV9tb2RlID0gQ0ZJX0FVVE87XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI4NC1cXHRcXHR9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCBcXFwib2ZmXFxcIikpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjg1OlxcdFxcdFxcdGNmaV9tb2RlID0gQ0ZJX09GRjtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjg2LVxcdFxcdFxcdGNmaV9yYW5kID0gZmFsc2U7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjg5LVxcdFxcdH0gZWxzZSBpZiAoIXN0cmNtcChzdHIsIFxcXCJrY2ZpXFxcIikpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMjkwOlxcdFxcdFxcdGNmaV9tb2RlID0gQ0ZJX0tDRkk7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTI5MS1cXHRcXHR9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCBcXFwiZmluZWlidFxcXCIpKSB7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTI5MjpcXHRcXHRcXHRjZmlfbW9kZSA9IENGSV9GSU5FSUJUO1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEyOTMtXFx0XFx0fSBlbHNlIGlmICghc3RyY21wKHN0ciwgXFxcIm5vcmFuZFxcXCIpKSB7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMjk4LVxcdFxcdH0gZWxzZSBpZiAoIXN0cmNtcChzdHIsIFxcXCJwYXJhbm9pZFxcXCIpKSB7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTI5OTpcXHRcXHRcXHRpZiAoY2ZpX21vZGUgPT0gQ0ZJX0ZJTkVJQlQpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMzAwLVxcdFxcdFxcdFxcdGNmaV9wYXJhbm9pZCA9IHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xMzA1LSNpZmRlZiBDT05GSUdfRklORUlCVF9CSElcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxMzA2OlxcdFxcdFxcdGlmIChjZmlfbW9kZSA9PSBDRklfRklORUlCVCkge1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTEzMDctXFx0XFx0XFx0XFx0Y2ZpX2JoaSA9IHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0xNzc4PXN0YXRpYyB2b2lkIF9fYXBwbHlfZmluZWlidChzMzIgKnN0YXJ0X3JldHBvbGluZSwgczMyICplbmRfcmV0cG9saW5lLFxcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTc4OS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxNzkwOlxcdGlmIChjZmlfbW9kZSA9PSBDRklfQVVUTykge1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE3OTE6XFx0XFx0Y2ZpX21vZGUgPSBDRklfS0NGSTtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xNzkyLVxcdFxcdGlmIChIQVNfS0VSTkVMX0lCVCBcXHUwMDI2XFx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0lCVCkpIHtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTE3OTgtXFx0XFx0XFx0XFx0Y2ZpX3BhcmFub2lkID0gdHJ1ZTtcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoxNzk5OlxcdFxcdFxcdGNmaV9tb2RlID0gQ0ZJX0ZJTkVJQlQ7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTgwMC1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xODMzLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE4MzQ6XFx0c3dpdGNoIChjZmlfbW9kZSkge1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTE4MzUtXFx0Y2FzZSBDRklfT0ZGOlxcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MTg4OD1zdGF0aWMgdm9pZCBwb2lzb25fY2ZpKHZvaWQgKmFkZHIpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0xODk3LVxcdCAqL1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjE4OTg6XFx0c3dpdGNoIChjZmlfbW9kZSkge1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTE4OTktXFx0Y2FzZSBDRklfRklORUlCVDpcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jZmkuYz02OD1lbnVtIGJ1Z190cmFwX3R5cGUgaGFuZGxlX2NmaV9mYWlsdXJlKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NmaS5jLTcyLVxcbmFyY2gveDg2L2tlcm5lbC9jZmkuYzo3MzpcXHRzd2l0Y2ggKGNmaV9tb2RlKSB7XFxuYXJjaC94ODYva2VybmVsL2NmaS5jLTc0LVxcdGNhc2UgQ0ZJX0tDRkk6XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9NDc4PXN0YXRpYyB2b2lkIGVtaXRfY2ZpKHU4ICoqcHByb2csIHU4ICppcCwgdTMyIGhhc2gsIGludCBhcml0eSlcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00ODEtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjQ4MjpcXHRzd2l0Y2ggKGNmaV9tb2RlKSB7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQ4My1cXHRjYXNlIENGSV9GSU5FSUJUOlxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM3MjI9c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NDUtXFx0XFx0ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3NDY6XFx0XFx0aWYgKGNmaV9tb2RlID09IENGSV9GSU5FSUJUKSB7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NDctXFx0XFx0XFx0RU1JVDFfb2ZmMzIoMHhiOCwgY2ZpX2JwZl9oYXNoKTtcXHQvKiBtb3YgJGNmaV9icGZfaGFzaCwgJWVheCAqL1xcbi0tXFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmM9NDk4PXN0cnVjdCBtdGRfaW5mbyAqY2ZpX2NtZHNldF8wMDAxKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBpbnQgcHJpbWFyeSlcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jLTUyNi1cXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYzo1Mjc6XFx0aWYgKGNmaS1cXHUwMDNlY2ZpX21vZGUgPT0gQ0ZJX01PREVfQ0ZJKSB7XFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMtNTI4LVxcdFxcdC8qXFxuLS1cXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYy01NTUtXFx0fVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jOjU1NjpcXHRlbHNlIGlmIChjZmktXFx1MDAzZWNmaV9tb2RlID09IENGSV9NT0RFX0pFREVDKSB7XFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMtNTU3LVxcdFxcdC8qIEFwcGx5IGplZGVjIHNwZWNpZmljIGZpeHVwcyAqL1xcbi0tXFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmM9NjAwPXN0cnVjdCBtdGRfaW5mbyAqY2ZpX2NtZHNldF8wMDAyKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBpbnQgcHJpbWFyeSlcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jLTYzNi1cXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYzo2Mzc6XFx0aWYgKGNmaS1cXHUwMDNlY2ZpX21vZGU9PUNGSV9NT0RFX0NGSSl7XFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMtNjM4LVxcdFxcdHVuc2lnbmVkIGNoYXIgYm9vdGxvYztcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jLTcxOS1cXHR9IC8qIENGSSBtb2RlICovXFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmM6NzIwOlxcdGVsc2UgaWYgKGNmaS1cXHUwMDNlY2ZpX21vZGUgPT0gQ0ZJX01PREVfSkVERUMpIHtcXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYy03MjEtXFx0XFx0LyogQXBwbHkgamVkZWMgc3BlY2lmaWMgZml4dXBzICovXFxuLS1cXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYz03NjY9c3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqY2ZpX2FtZHN0ZF9zZXR1cChzdHJ1Y3QgbXRkX2luZm8gKm10ZClcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jLTc3NC1cXHRwcmludGsoS0VSTl9OT1RJQ0UgXFxcIm51bWJlciBvZiAlcyBjaGlwczogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmM6Nzc1OlxcdCAgICAgICAoY2ZpLVxcdTAwM2VjZmlfbW9kZSA9PSBDRklfTU9ERV9DRkkpP1xcXCJDRklcXFwiOlxcXCJKRURFQ1xcXCIsY2ZpLVxcdTAwM2VudW1jaGlwcyk7XFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMtNzc2LVxcdC8qIFNlbGVjdCB0aGUgY29ycmVjdCBnZW9tZXRyeSBzZXR1cCAqL1xcbi0tXFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmM9MTE0PXN0cnVjdCBtdGRfaW5mbyAqY2ZpX2NtZHNldF8wMDIwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBpbnQgcHJpbWFyeSlcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jLTExOC1cXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYzoxMTk6XFx0aWYgKGNmaS1cXHUwMDNlY2ZpX21vZGUpIHtcXG5kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYy0xMjAtXFx0XFx0LypcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jPTE5NT1zdGF0aWMgaW50IF9feGlwcmFtIGNmaV9jaGlwX3NldHVwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLFxcbi0tXFxuZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3Byb2JlLmMtMjE2LVxcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jOjIxNzpcXHRjZmktXFx1MDAzZWNmaV9tb2RlID0gQ0ZJX01PREVfQ0ZJO1xcbmRyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jLTIxOC1cXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmM9MTk3Mz1zdGF0aWMgaW50IGNmaV9qZWRlY19zZXR1cChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGNmaV9wcml2YXRlICpjZmksIGludCBpbmRleClcXG4tLVxcbmRyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMtMTk5OC1cXHRjZmktXFx1MDAzZWNmaXEtXFx1MDAzZURldlNpemUgPSBqZWRlY190YWJsZVtpbmRleF0uZGV2X3NpemU7XFxuZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYzoxOTk5OlxcdGNmaS1cXHUwMDNlY2ZpX21vZGUgPSBDRklfTU9ERV9KRURFQztcXG5kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jLTIwMDAtXFx0Y2ZpLVxcdTAwM2VzZWN0b3JfZXJhc2VfY21kID0gQ01EKDB4MzApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tdGQvY2ZpLmg9MjczPXN0cnVjdCBjZmlfcHJpdmF0ZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L210ZC9jZmkuaC0yNzctXFx0aW50IGRldmljZV90eXBlO1xcbmluY2x1ZGUvbGludXgvbXRkL2NmaS5oOjI3ODpcXHRpbnQgY2ZpX21vZGU7XFx0XFx0LyogQXJlIHdlIGEgSkVERUMgZGV2aWNlIHByZXRlbmRpbmcgdG8gYmUgQ0ZJPyAqL1xcbmluY2x1ZGUvbGludXgvbXRkL2NmaS5oLTI3OS1cXHRpbnQgYWRkcl91bmxvY2sxO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9NjY5PXZvaWQgYnBmX3Byb2dfa2FsbHN5bXNfYWRkKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy02ODUtXFx0ICovXFxua2VybmVsL2JwZi9jb3JlLmM6Njg2OlxcdGlmIChjZmlfbW9kZSAhPSBDRklfRklORUlCVClcXG5rZXJuZWwvYnBmL2NvcmUuYy02ODctXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9Njk5PXZvaWQgYnBmX3Byb2dfa2FsbHN5bXNfZGVsKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy03MDUtI2lmZGVmIENPTkZJR19GSU5FSUJUXFxua2VybmVsL2JwZi9jb3JlLmM6NzA2OlxcdGlmIChjZmlfbW9kZSAhPSBDRklfRklORUlCVClcXG5rZXJuZWwvYnBmL2NvcmUuYy03MDctXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMzo0MDo0NS4zMzIzNjMxMDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk1MzI3NjUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRmluZUlCVCBTdXBwb3J0IGluIHRoZSBCUEYgRGlzcGF0Y2hlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBjZmlfbW9kZWAsIHRoZSBjcnVjaWFsIGluZGljYXRvciBmb3IgQ29udHJvbC1GbG93IEludGVncml0eSAoQ0ZJKSwgcGFydGljdWxhcmx5IHdpdGggRmluZUlCVCwgaXMgc2V0IHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9jZmkuaGAgYW5kIGBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY2AuIEl0IGhpbmdlcyBvbiBgQ0ZJX0ZJTkVJQlRgIGJlaW5nIGFjdGl2ZSwgY29udGluZ2VudCBvbiBlaXRoZXIgdGhlIGBGSU5FSUJUYCBmZWF0dXJlIGJlaW5nIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgKm9yKiBiZWluZyBleHBsaWNpdGx5IGZvcmNlZCB0aHJvdWdoIGEgY29tbWFuZC1saW5lIG9wdGlvbi4gU28sIGBDT05GSUdfRklORUlCVGAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSByZWxhdGVkIEJQRiBjb25maWd1cmF0aW9ucy4gYENPTkZJR19CUEZfSklUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHByb2JhYmx5IGltcG9ydGFudCwgYW5kIGdpdmVuIHRoZSB0ZXN0J3MgWERQIGZvY3VzLCBJJ2xsIGtlZXAgYENPTkZJR19YRFBfU09DS0VUU2AgaW4gbWluZCBhcyBhIHBvdGVudGlhbCBkZXBlbmRlbmN5LCBldmVuIHRob3VnaCB0aGUgdGVzdCBpdHNlbGYganVzdCBmb2N1c2VzIG9uIGBicGZfeGRwX2F0dGFjaGAgYW5kIGBicGZfcHJvZ190ZXN0X3J1bl9vcHRzYC4gSSBzaG91bGQgZGlnIGludG8gdGhlIHRlc3QgZmlsZSBpdHNlbGY6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGlzcGF0Y2hlcl9maW5laWJ0LmNgLiBJJ20gZXhwZWN0aW5nIHN0YW5kYXJkIEJQRiBmdW5jdGlvbmFsaXR5IHRoZXJlLCBiYXNlZCBvbiB0aGUgY2FsbHMuXG5cblJpZ2h0LCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlIGBlbWl0X2JwZl9kaXNwYXRjaGVyYCBmdW5jdGlvbi4gSXMgdGhlcmUgYW55IGFkZGl0aW9uYWwgbW9kaWZpZWQgZnVuY3Rpb24/IE5vcGUuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3IuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGVuaGFuY2VzIHRoZSBCUEYgZGlzcGF0Y2hlciB3aXRoIEZpbmVJQlQgc3VwcG9ydC5cblxuTm93LCB0byBhc3Nlc3MgdGhlIGltcGFjdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGZpdHMgaW4gdGhlIGV4ZWN1dGlvbiBwYXRoLiBJdCdzIGNhbGxlZCBkdXJpbmcgdGhlIEJQRiBwcm9ncmFtIGxvYWQgb3IgYXR0YWNoIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBkaXNwYXRjaGVyIGlzIHVwZGF0ZWQuIFRoYXQgdGVsbHMgbWUgaXQncyAqbm90KiBhIGhvdC1wYXRoIGZ1bmN0aW9uIGluIHRoZSBzZW5zZSBvZiBoaWdoLWZyZXF1ZW5jeSBwYWNrZXQgcHJvY2Vzc2luZyBvciBzaW1pbGFyLiBJdCdzIGludm9sdmVkIGluIEpJVCBjb21waWxhdGlvbiwgd2hpY2ggZ2l2ZXMgdXMgYSBnb29kIGZvY3VzLiBBbmQgYGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcmAgaXMgbGlrZWx5IGFsc28gd29ydGggZXhhbWluaW5nLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gc2VlIHdoZXRoZXIgYGNmaV9icGZfaGFzaGAgaXMgZGVmaW5lZC4gVGhpcyBpcyBhIGNydWNpYWwgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTEwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEzOjQwOjUyLjI4NTY0MzU4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0NTQ3OTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZmlfYnBmX2hhc2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9NTEzPXN0YXRpYyBpbnQgYnVpbGRfcHJvbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCBlYnBmX2Zyb21fY2JwZilcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTU1Mi1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzo1NTM6XFx0ZW1pdF9rY2ZpKGlzX21haW5fcHJvZyA/IGNmaV9icGZfaGFzaCA6IGNmaV9icGZfc3VicHJvZ19oYXNoLCBjdHgpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTU1NC1cXHRjb25zdCBpbnQgaWR4MCA9IGN0eC1cXHUwMDNlaWR4O1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0yMDAyPXZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgYm9vbCBpc19zdWJwcm9nKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDMzLVxcdC8qIGVtaXQga2NmaSB0eXBlIHByZWFtYmxlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIGZpcnN0IGluc24gKi9cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIwMzQ6XFx0ZW1pdF9rY2ZpKGlzX3N1YnByb2cgPyBjZmlfYnBmX3N1YnByb2dfaGFzaCA6IGNmaV9icGZfaGFzaCwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwMzUtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0xNzc4PXN0YXRpYyB2b2lkIF9fYXBwbHlfZmluZWlidChzMzIgKnN0YXJ0X3JldHBvbGluZSwgczMyICplbmRfcmV0cG9saW5lLFxcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTgxNS1cXHRcXHRcXHRjZmlfc2VlZCA9IGdldF9yYW5kb21fdTMyKCk7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MTgxNjpcXHRcXHRcXHRjZmlfYnBmX2hhc2ggPSBjZmlfcmVoYXNoKGNmaV9icGZfaGFzaCk7XFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMTgxNy1cXHRcXHRcXHRjZmlfYnBmX3N1YnByb2dfaGFzaCA9IGNmaV9yZWhhc2goY2ZpX2JwZl9zdWJwcm9nX2hhc2gpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTUzNT1zdGF0aWMgdm9pZCBlbWl0X3Byb2xvZ3VlKHU4ICoqcHByb2csIHU4ICppcCwgdTMyIHN0YWNrX2RlcHRoLCBib29sIGVicGZfZnJvbV9jYnBmLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTU0My1cXHR9IGVsc2Uge1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo1NDQ6XFx0XFx0ZW1pdF9jZmkoXFx1MDAyNnByb2csIGlwLCBjZmlfYnBmX2hhc2gsIDEpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy01NDUtXFx0fVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM3MjI9c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NDYtXFx0XFx0aWYgKGNmaV9tb2RlID09IENGSV9GSU5FSUJUKSB7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3NDc6XFx0XFx0XFx0RU1JVDFfb2ZmMzIoMHhiOCwgY2ZpX2JwZl9oYXNoKTtcXHQvKiBtb3YgJGNmaV9icGZfaGFzaCwgJWVheCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzQ4LVxcdFxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1xcdC8qIHN1YiByZHgsIGNmaV9nZXRfb2Zmc2V0KCkgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvY2ZpLmg9NDE9c3RhdGljIGlubGluZSB1MzIgY2ZpX2dldF9mdW5jX2hhc2godm9pZCAqZnVuYylcXG4tLVxcbmluY2x1ZGUvbGludXgvY2ZpLmgtNTItLyogQ0ZJIHR5cGUgaGFzaGVzIGZvciBCUEYgZnVuY3Rpb24gdHlwZXMgKi9cXG5pbmNsdWRlL2xpbnV4L2NmaS5oOjUzOmV4dGVybiB1MzIgY2ZpX2JwZl9oYXNoO1xcbmluY2x1ZGUvbGludXgvY2ZpLmgtNTQtZXh0ZXJuIHUzMiBjZmlfYnBmX3N1YnByb2dfaGFzaDtcXG4tLVxcbmluY2x1ZGUvbGludXgvY2ZpLmg9NTk9c3RhdGljIGlubGluZSB1MzIgY2ZpX2dldF9mdW5jX2hhc2godm9pZCAqZnVuYykgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvY2ZpLmgtNjAtXFxuaW5jbHVkZS9saW51eC9jZmkuaDo2MTojZGVmaW5lIGNmaV9icGZfaGFzaCAwVVxcbmluY2x1ZGUvbGludXgvY2ZpLmgtNjItI2RlZmluZSBjZmlfYnBmX3N1YnByb2dfaGFzaCAwVVxcbi0tXFxua2VybmVsL2NmaS5jPTM5PWV4dGVybiB0eXBlb2YoKihicGZfZnVuY190KTApIF9fYnBmX3Byb2dfcnVuWDtcXG5rZXJuZWwvY2ZpLmM6NDA6REVGSU5FX0NGSV9UWVBFKGNmaV9icGZfaGFzaCwgX19icGZfcHJvZ19ydW5YKTtcXG5rZXJuZWwvY2ZpLmMtNDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEzOjQwOjU0LjYzMTEzNTYyOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDU3NjM4MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYGNmaV9icGZfaGFzaGAgaXMgZGVmaW5pdGVseSBkZWZpbmVkLiBOb3csIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgZW1pdF9icGZfZGlzcGF0Y2hlcmAgaXMgYmVpbmcgY29tcGlsZWQuIExvb2tpbmcgYXQgdGhlIGNvZGViYXNlLCBJIHNlZSBpdCdzIGxvY2F0ZWQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQncyBnb29kLCBidXQgZG9lcyB0aGUgYnVpbGQgc3lzdGVtIGtub3cgYWJvdXQgaXQ/IExldCdzIGNoZWNrIGBhcmNoL3g4Ni9uZXQvTWFrZWZpbGVgLiBBaCwgdGhlcmUgaXQgaXM6IGBvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gYnBmX2ppdF9jb21wLm8gYnBmX2ppdF9jb21wMzIub2AuIE9rYXksIHNvIGBDT05GSUdfQlBGX0pJVGAgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byB3b3JrLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYENPTkZJR19GSU5FSUJUYC4gV2UgZmlndXJlZCBvdXQgZWFybGllciB0aGF0IGl0IGRlcGVuZHMgb24gYFg4Nl9LRVJORUxfSUJUYCwgYENGSWAsIGFuZCBgTUlUSUdBVElPTl9SRVRQT0xJTkVgLiBMZXQgbWUganVzdCBtYWtlIGEgbWVudGFsIG5vdGUgb2YgYWxsIHRoZXNlIG9wdGlvbnM6IGBGSU5FSUJUYCwgYFg4Nl9LRVJORUxfSUJUYCwgYENGSWAsIGFuZCBgTUlUSUdBVElPTl9SRVRQT0xJTkVgLiBXYWl0IGEgc2Vjb25k4oCmIGBDRklgPyBUaGF0J3Mgbm90IHJpZ2h0LiBQcmV0dHkgc3VyZSBgQ0ZJYCBpcyBhIGdlbmVyaWMgdGVybSBhbmQgYENGSV9DTEFOR2AgaXMgdGhlIGFjdHVhbCBjb25maWcgb3B0aW9uLiBSaWdodCwgYmV0dGVyIGRvdWJsZS1jaGVjayBgYXJjaC9LY29uZmlnYCB0byBiZSBzdXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODAsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6NDE6MDAuNjg4Nzc3NjY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzk3MzQyNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRklcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTkzMD1jb25maWcgQVJDSF9VU0VTX0NGSV9HRU5FUklDX0xMVk1fUEFTU1xcbi0tXFxuYXJjaC9LY29uZmlnLTkzNi1cXG5hcmNoL0tjb25maWc6OTM3OmNvbmZpZyBDRklcXG5hcmNoL0tjb25maWctOTM4LVxcdGJvb2wgXFxcIlVzZSBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSlcXFwiXFxuLS1cXG5hcmNoL0tjb25maWctOTUyLVxcbmFyY2gvS2NvbmZpZzo5NTM6Y29uZmlnIENGSV9DTEFOR1xcbmFyY2gvS2NvbmZpZy05NTQtXFx0Ym9vbFxcbi0tXFxuYXJjaC9LY29uZmlnLTk1OC1cXG5hcmNoL0tjb25maWc6OTU5OmNvbmZpZyBDRklfSUNBTExfTk9STUFMSVpFX0lOVEVHRVJTXFxuYXJjaC9LY29uZmlnLTk2MC1cXHRib29sIFxcXCJOb3JtYWxpemUgQ0ZJIHRhZ3MgZm9yIGludGVnZXJzXFxcIlxcbi0tXFxuYXJjaC9LY29uZmlnPTk4MT1jb25maWcgSEFWRV9DRklfSUNBTExfTk9STUFMSVpFX0lOVEVHRVJTX1JVU1RDXFxuLS1cXG5hcmNoL0tjb25maWctOTg4LVxcbmFyY2gvS2NvbmZpZzo5ODk6Y29uZmlnIENGSV9QRVJNSVNTSVZFXFxuYXJjaC9LY29uZmlnLTk5MC1cXHRib29sIFxcXCJVc2UgQ0ZJIGluIHBlcm1pc3NpdmUgbW9kZVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MjI5Mz1jb25maWcgU1RSSUNUX1NJR0FMVFNUQUNLX1NJWkVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjMwOC1cXG5hcmNoL3g4Ni9LY29uZmlnOjIzMDk6Y29uZmlnIENGSV9BVVRPX0RFRkFVTFRcXG5hcmNoL3g4Ni9LY29uZmlnLTIzMTAtXFx0Ym9vbCBcXFwiQXR0ZW1wdCB0byB1c2UgRmluZUlCVCBieSBkZWZhdWx0IGF0IGJvb3QgdGltZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6NDE6MDMuMDg2MTM1NjI5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NzcwODkxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBEaXNwYXRjaGVyIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gYGNvbmZpZyBDRklgIGlzIGEgYm9vbGVhbiwgYW5kIHRoZXJlZm9yZSBgQ0ZJYCBpcyBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQncyBtYWtlIGEgbGlzdCB0byBrZWVwIHRoaW5ncyBzdHJhaWdodC4gSSdsbCBpbmNsdWRlIGBGSU5FSUJUYCwgYFg4Nl9LRVJORUxfSUJUYCwgYENGSWAsIGFuZCBgTUlUSUdBVElPTl9SRVRQT0xJTkVgLiBXYWl0IGEgbWludXRlLCBgRklORUlCVGAgaXMgYSBgZGVmX2Jvb2wgeWAgaWYgaXRzIGRlcGVuZGVuY2llcyBhcmUgbWV0LCBzbyB3ZSBkb24ndCAqbmVlZCogdG8gZXhwbGljaXRseSBlbmFibGUgaXQgaWYgdGhlIGRlcGVuZGVuY2llcyBhcmUgdGFrZW4gY2FyZSBvZiwgYnV0IGl0IGRvZXNuJ3QgaHVydCB0byBsaXN0IGl0LiBUaGVyZWZvcmUsIEkgd2lsbCBsaXN0IGBGSU5FSUJUYCwgYFg4Nl9LRVJORUxfSUJUYCwgYENGSWAsIGFuZCBgTUlUSUdBVElPTl9SRVRQT0xJTkVgLlxuXG5JIHNob3VsZCBwcm9iYWJseSBhZGQgYEJQRl9KSVRgIHRvIHRoaXMgbGlzdCBhcyB3ZWxsLCBhcyB3ZWxsIGFzIGBCUEZfU1lTQ0FMTGAgYW5kIGFsc28gYFhEUF9TT0NLRVRTYCwganVzdCB0byBiZSBzYWZlLlxuXG5Ob3csIGxldCdzIHNlZSBpZiBgZW1pdF9icGZfZGlzcGF0Y2hlcmAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBZZXMsIGl0IGlzLiBJdCdzIGNhbGxlZCBieSBgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBicGZfZGlzcGF0Y2hlcl9wcmVwYXJlYC4gYGJwZl9kaXNwYXRjaGVyX3ByZXBhcmVgIGlzIGluIHR1cm4gY2FsbGVkIGJ5IGBicGZfZGlzcGF0Y2hlcl91cGRhdGVgLCBhbmQgdGhhdCBoYXBwZW5zIHdoZW4gYW4gWERQIHByb2dyYW0gaXMgYXR0YWNoZWQuIFRoZXJlZm9yZSwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IEFoLCBgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCBjb3VsZCBiZSB1c2VmdWwgdG8gZ3VhcmFudGVlIHRoZSBKSVQgaXMgdXNlZCwgYW5kIGBDT05GSUdfWERQX1NPQ0tFVFNgIGlzIGltcG9ydGFudCBmb3IgWERQIHN1cHBvcnQuXG5cblNvLCBoZXJlJ3MgdGhlIHN1bW1hcnk6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiB0cnVlXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYGVtaXRfYnBmX2Rpc3BhdGNoZXJgLCBgYXJjaF9wcmVwYXJlX2JwZl9kaXNwYXRjaGVyYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgRklORUlCVGAsIGBYODZfS0VSTkVMX0lCVGAsIGBDRklgLCBgTUlUSUdBVElPTl9SRVRQT0xJTkVgLCBgQlBGX0pJVGAsIGBCUEZfU1lTQ0FMTGBcblxuTXkgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBhZGQgRmluZUlCVCBzdXBwb3J0IHRvIHRoZSBCUEYgZGlzcGF0Y2hlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBkaXJlY3RseSBpbXBhY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGV4ZWN1dGVkLiBXZSBzaG91bGQgZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBvbiB0aGUgQlBGIGRpc3BhdGNoZXIgbG9naWMsIGVzcGVjaWFsbHkgd2l0aCBGaW5lSUJUIGVuYWJsZWQuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHNpZ25hdHVyZXMgb2YgdGhlIGZ1bmN0aW9ucy4gYGVtaXRfYnBmX2Rpc3BhdGNoZXJgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGggdGhlIHNpZ25hdHVyZSBgc3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKWAuIFllcywgdGhhdCdzIGNvcnJlY3QuIGBhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXJgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uIHdpdGggdGhlIHNpZ25hdHVyZSBgaW50IGFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlcih2b2lkICppbWFnZSwgdm9pZCAqYnVmLCBzNjQgKmZ1bmNzLCBpbnQgbnVtX2Z1bmNzKWAuXG5cbkFscmlnaHQsIEknbSBzYXRpc2ZpZWQuIEknbGwgc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg5MCwiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTM6NDE6MTIuNTYzMjMwMTkxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NjI1NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSU5FSUJUXCIsXG4gICAgXCJYODZfS0VSTkVMX0lCVFwiLFxuICAgIFwiQ0ZJXCIsXG4gICAgXCJNSVRJR0FUSU9OX1JFVFBPTElORVwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbWl0X2JwZl9kaXNwYXRjaGVyXCIsXG4gICAgXCJhcmNoX3ByZXBhcmVfYnBmX2Rpc3BhdGNoZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgdG8gYWRkIEZpbmVJQlQgc3VwcG9ydCB0byB0aGUgQlBGIGRpc3BhdGNoZXIuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb2RlIHRoYXQgYWZmZWN0cyBob3cgQlBGIHByb2dyYW1zIGFyZSBleGVjdXRlZC4gV2Ugc2hvdWxkIGZ1enogdGhlIEJQRiBkaXNwYXRjaGVyIGxvZ2ljIHdpdGggRmluZUlCVCBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZJTkVJQlRcIixcbiAgICBcIlg4Nl9LRVJORUxfSUJUXCIsXG4gICAgXCJDRklcIixcbiAgICBcIk1JVElHQVRJT05fUkVUUE9MSU5FXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVtaXRfYnBmX2Rpc3BhdGNoZXJcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfZGlzcGF0Y2hlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB0byBhZGQgRmluZUlCVCBzdXBwb3J0IHRvIHRoZSBCUEYgZGlzcGF0Y2hlci4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBhZmZlY3RzIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGV4ZWN1dGVkLiBXZSBzaG91bGQgZnV6eiB0aGUgQlBGIGRpc3BhdGNoZXIgbG9naWMgd2l0aCBGaW5lSUJUIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownpfc2[1] Phase: Succeeded StartedAt: 2026-07-08 13:41:25 +0000 UTC FinishedAt: 2026-07-08 13:41:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 13:41:25 +0000 UTC FinishedAt: 2026-07-08 13:41:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2] Phase: Succeeded StartedAt: 2026-07-08 13:41:25 +0000 UTC FinishedAt: 2026-07-08 16:24:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-08 13:41:25 +0000 UTC FinishedAt: 2026-07-08 16:24:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 13:41:25 +0000 UTC FinishedAt: 2026-07-08 13:41:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 13:41:25 +0000 UTC FinishedAt: 2026-07-08 13:41:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflownpfc2/series-workflownpfc2-convert-artifact-4258817478/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 13:41:35 +0000 UTC FinishedAt: 2026-07-08 14:07:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 13:41:35 +0000 UTC FinishedAt: 2026-07-08 14: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:*36011a5e-c3b5-4fb9-8e0e-ca9a88523c2c,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-workflownpfc2/series-workflownpfc2-convert-artifact-4258817478/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": "37ef475c-9174-47a3-9934-f764a703b865", "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-workflownpfc2/series-workflownpfc2-build-action-1237660508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 13:41:35 +0000 UTC FinishedAt: 2026-07-08 14:06:40 +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:*36011a5e-c3b5-4fb9-8e0e-ca9a88523c2c,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-workflownpfc2/series-workflownpfc2-convert-artifact-4258817478/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": "37ef475c-9174-47a3-9934-f764a703b865", "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-workflownpfc2/series-workflownpfc2-build-action-1237660508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 14:07:05 +0000 UTC FinishedAt: 2026-07-08 14:07:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 14:07:05 +0000 UTC FinishedAt: 2026-07-08 14:07:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 14:07:05 +0000 UTC FinishedAt: 2026-07-08 14:07:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 14:07:05 +0000 UTC FinishedAt: 2026-07-08 14:07:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflownpfc2/series-workflownpfc2-convert-artifact-729180185/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 14:07:15 +0000 UTC FinishedAt: 2026-07-08 14:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 14:07:15 +0000 UTC FinishedAt: 2026-07-08 14:08:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*37ef475c-9174-47a3-9934-f764a703b865,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-workflownpfc2/series-workflownpfc2-build-action-1237660508/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-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 14:09:06 +0000 UTC FinishedAt: 2026-07-08 14:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 14:09:06 +0000 UTC FinishedAt: 2026-07-08 14:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 14:09:06 +0000 UTC FinishedAt: 2026-07-08 14:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 14:09:06 +0000 UTC FinishedAt: 2026-07-08 14:37:06 +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:*36011a5e-c3b5-4fb9-8e0e-ca9a88523c2c,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-workflownpfc2/series-workflownpfc2-convert-artifact-729180185/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": "0a4d97cc-8906-4687-b3ef-6c5d57daff7c", "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-workflownpfc2/series-workflownpfc2-build-action-2673899381/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 14:09:06 +0000 UTC FinishedAt: 2026-07-08 14:36:56 +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:*36011a5e-c3b5-4fb9-8e0e-ca9a88523c2c,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-workflownpfc2/series-workflownpfc2-convert-artifact-729180185/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": "0a4d97cc-8906-4687-b3ef-6c5d57daff7c", "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-workflownpfc2/series-workflownpfc2-build-action-2673899381/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 14:37:06 +0000 UTC FinishedAt: 2026-07-08 14:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 14:37:06 +0000 UTC FinishedAt: 2026-07-08 14:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-08 14:37:06 +0000 UTC FinishedAt: 2026-07-08 14:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-08 14:37:06 +0000 UTC FinishedAt: 2026-07-08 14:39:17 +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:*0a4d97cc-8906-4687-b3ef-6c5d57daff7c,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-workflownpfc2/series-workflownpfc2-build-action-2673899381/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-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-07-08 14:39:27 +0000 UTC FinishedAt: 2026-07-08 16:24:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-07-08 14:39:27 +0000 UTC FinishedAt: 2026-07-08 16:24:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"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:*37ef475c-9174-47a3-9934-f764a703b865,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0a4d97cc-8906-4687-b3ef-6c5d57daff7c,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-workflownpfc2/series-workflownpfc2-build-action-1237660508/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-workflownpfc2/series-workflownpfc2-build-action-2673899381/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-08 14:39:27 +0000 UTC FinishedAt: 2026-07-08 14:39:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-08 14:39:27 +0000 UTC FinishedAt: 2026-07-08 14:39:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"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-workflownpfc2/series-workflownpfc2-convert-artifact-1632241422/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-08 14:39:27 +0000 UTC FinishedAt: 2026-07-08 14:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-08 14:39:27 +0000 UTC FinishedAt: 2026-07-08 14:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-08 14:39:27 +0000 UTC FinishedAt: 2026-07-08 14:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-07-08 14:39:37 +0000 UTC FinishedAt: 2026-07-08 16:24:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpfc2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["emit_bpf_dispatcher","arch_prepare_bpf_dispatcher"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d2c9a99135da931377240942d44f3dea104cedb8","config_name":"upstream-apparmor-kasan.config","enable_configs":["FINEIBT","X86_KERNEL_IBT","CFI","MITIGATION_RETPOLINE","BPF_JIT","BPF_SYSCALL"],"series_id":"56857440-8e4b-4d17-9a0d-847f28f9b1c1","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Error StartedAt: 2026-07-08 14:39:37 +0000 UTC FinishedAt: 2026-07-08 16:24:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*37ef475c-9174-47a3-9934-f764a703b865,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0a4d97cc-8906-4687-b3ef-6c5d57daff7c,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-workflownpfc2/series-workflownpfc2-build-action-1237660508/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-workflownpfc2/series-workflownpfc2-build-action-2673899381/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-workflownpfc2/series-workflownpfc2-convert-artifact-1632241422/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil