Name: series-workflowqq28m Phase: Succeeded StartedAt: 2026-08-26 06:50:06 +0000 UTC FinishedAt: 2026-08-26 10:51:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[0] Phase: Succeeded StartedAt: 2026-08-26 06:50:06 +0000 UTC FinishedAt: 2026-08-26 07:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 06:50:06 +0000 UTC FinishedAt: 2026-08-26 07:08:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "8a9091052cc81caa5570835049c809da804baa3f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "8a9091052cc81caa5570835049c809da804baa3f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX" ], "series_id": "ff63c58c-393c-47d8-9728-43ff8039f5d4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "fixup_user_fault", "fault_in_user_writeable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zml4dXBfdXNlcl9mYXVsdCYjMzQ7LAogICAgJiMzNDtmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBieSBhZGRpbmcgYSBjaGVjayBmb3IgYHVubG9ja2VkICE9IE5VTExgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIGl0LiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKHBhZ2UgZmF1bHRzKSBvciBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGZpeHVwX3VzZXJfZmF1bHRgIHdoZW4gdGhlIGB1bmxvY2tlZGAgcGFyYW1ldGVyIGlzIE5VTEwuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBOVUxMIGB1bmxvY2tlZGAgcG9pbnRlciBieSBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgIGluIHRoZSBmdXRleCBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBmdXRleCBzeXNjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIGtlcm5lbCBjcmFzaCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMyYzc3NTU2ZjFmMWM1N2U5YTJkYWEzMzkzZTk0MmQ4YzI1MDUzY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwNzowNjo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ndXAuYyBiL21tL2d1cC5jXG5pbmRleCAwNjkyMTE5Yjc5MDQzLi5kMTI0NzVhN2Y3Y2NiIDEwMDY0NFxuLS0tIGEvbW0vZ3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2d1cC5jXG5AQCAtMTU5NCw3ICYjNDM7MTU5NCw4IEBAIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHQgKiBjb3VsZCB0ZWxsIHRoZSBjYWxsZXJzIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gdW5sb2NrLlxuIFx0XHQgKi9cbiBcdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuJiM0MztcdFx0aWYgKHVubG9ja2VkKVxuJiM0MztcdFx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC0xNjA4LDcgJiM0MzsxNjA5LDggQEAgaW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXG4gXHRpZiAocmV0IFx1MDAyNiBWTV9GQVVMVF9SRVRSWSkge1xuIFx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRcdCp1bmxvY2tlZCA9IHRydWU7XG4mIzQzO1x0XHRpZiAodW5sb2NrZWQpXG4mIzQzO1x0XHRcdCp1bmxvY2tlZCA9IHRydWU7XG4gXHRcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfVFJJRUQ7XG4gXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zml4dXBfdXNlcl9mYXVsdCYjMzQ7LAogICAgJiMzNDtmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgZml4dXBfdXNlcl9mYXVsdGAgd2hlbiB0aGUgYHVubG9ja2VkYCBwYXJhbWV0ZXIgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIE5VTEwgYHVubG9ja2VkYCBwb2ludGVyIGJ5IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGZ1dGV4IHN5c2NhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEga2VybmVsIGNyYXNoIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzJjNzc1NTZmMWYxYzU3ZTlhMmRhYTMzOTNlOTQyZDhjMjUwNTNjZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDA3OjA2OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZ3VwLmMgYi9tbS9ndXAuYwppbmRleCAwNjkyMTE5Yjc5MDQzLi5kMTI0NzVhN2Y3Y2NiIDEwMDY0NAotLS0gYS9tbS9ndXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ndXAuYwpAQCAtMTU5NCw3ICYjNDM7MTU5NCw4IEBAIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkgKiBjb3VsZCB0ZWxsIHRoZSBjYWxsZXJzIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gdW5sb2NrLgogCQkgKi8KIAkJbW1hcF9yZWFkX2xvY2sobW0pOwotCQkqdW5sb2NrZWQgPSB0cnVlOwomIzQzOwkJaWYgKHVubG9ja2VkKQomIzQzOwkJCSp1bmxvY2tlZCA9IHRydWU7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTYwOCw3ICYjNDM7MTYwOSw4IEBAIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCiAJaWYgKHJldCAmYW1wOyBWTV9GQVVMVF9SRVRSWSkgewogCQltbWFwX3JlYWRfbG9jayhtbSk7Ci0JCSp1bmxvY2tlZCA9IHRydWU7CiYjNDM7CQlpZiAodW5sb2NrZWQpCiYjNDM7CQkJKnVubG9ja2VkID0gdHJ1ZTsKIAkJZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19UUklFRDsKIAkJZ290byByZXRyeTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqQW5hbHl6aW5nIGEgR1VQIFBhdGNoOiBEZWZlbnNpdmUgUHJvZ3JhbW1pbmcgaW4gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBzbyB0aGVyZSYjMzk7cyBhIHBhdGNoIHRvdWNoaW5nIGBtbS9ndXAuY2AuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIGEgY2hlY2sg4oCTIGBpZiAodW5sb2NrZWQpYCDigJMgYmVmb3JlIGRlcmVmZXJlbmNpbmcgdGhlIGB1bmxvY2tlZGAgdmFyaWFibGUgd2l0aGluIHRoZSBgZml4dXBfdXNlcl9mYXVsdCgpYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IGEgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGFueSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGNvdWxkIGxlYWQgdG8gKm5hc3R5KiBrZXJuZWwgcGFuaWNzIG9yLCB3b3JzZSwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJdCYjMzk7cyBnb29kIHRoYXQgd2UmIzM5O3JlIGJlaW5nIGNhcmVmdWwgaGVyZS4KCkxldCYjMzk7cyBkaXZlIGludG8gYGZpeHVwX3VzZXJfZmF1bHQoKWAgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2h5IGlzIGB1bmxvY2tlZGAgcG90ZW50aWFsbHkgbnVsbD8gV2hhdCBhcmUgdGhlIHNjZW5hcmlvcyB0aGF0IGNvdWxkIGxlYWQgdG8gdGhpcz8gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbiBiZWluZyBhZGRyZXNzZWQ/IEtub3dpbmcgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYGZpeHVwX3VzZXJfZmF1bHQoKWAgaXMgaW52b2tlZCBpcyBjcnVjaWFsLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBzdWJ0bGUgaW50ZXJhY3Rpb24gd2l0aCBsb2NrcywgcGVyaGFwcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIG9yIHBvc3NpYmx5IGEgcmFjZSBjb25kaXRpb24gaW4gaG93IHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkLiBJIHdvdWxkIHdhbnQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlIGNoZWNrIGlzOgoKKiAgICoqUm9idXN0OioqIERvZXMgaXQgY292ZXIgKmFsbCogcG90ZW50aWFsIG51bGwgZGVyZWZlcmVuY2UgY2FzZXM/IElzIGl0IHRoZSBjb3JyZWN0IGNvbmRpdGlvbiwgb3IgaXMgaXQgb3Zlcmx5IGFnZ3Jlc3NpdmUgYW5kIGNvdWxkIHByZXZlbnQgbGVnaXRpbWF0ZSBsb2NraW5nIHNjZW5hcmlvcz8KKiAgICoqQ29ycmVjdDoqKiBBcmUgdGhlcmUgYW55IHNpZGUgZWZmZWN0cyBmcm9tIHRoaXMgYWRkZWQgY2hlY2sgYW5kIGlmIHNvLCB3aGF0IGFyZSB0aGV5PwoqICAgKipDb21wbGV0ZToqKiBXYXMgdGhlcmUgYW55IHRlc3RpbmcgYXJvdW5kIHRoaXMgcGF0Y2g/IEFyZSB0aGVyZSBhbnkgdGVzdGNhc2VzIHRoYXQgdGVzdCB0aGUgcG90ZW50aWFsIGZvciB0aGlzIHNjZW5hcmlvPwoKSSYjMzk7bGwgbmVlZCB0byByZWFkIHRoZSBjb2RlIGNhcmVmdWxseSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBwcm9ibGVtIHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gc29sdmUgYW5kIGhvdyBlZmZlY3RpdmVseSBpdCBhZGRyZXNzZXMgaXQuIERlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBjb21tZW5kYWJsZSwgYnV0IHRoZSBmaXggbmVlZHMgdG8gYmUgc291bmQsIG5vdCBqdXN0IGEgYmFuZC1haWQuIEFsc28sIEkmIzM5O2Qgd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSByZWxldmFudCBsb2NrIHN0cnVjdHVyZXMgdG8gYmUgc3VyZSB0aGF0IHRoZSBjaGFuZ2UgaXMgY29ycmVjdCBmb3IgYWxsIHBvc3NpYmxlIGxvY2tpbmcgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaXh1cF91c2VyX2ZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZ3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZ3VwLmM9MTUxMj1zdGF0aWMgYm9vbCB2bWFfcGVybWl0c19mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ndXAuYy0xNTM1LS8qKlxubW0vZ3VwLmM6MTUzNjogKiBmaXh1cF91c2VyX2ZhdWx0KCkgLSBtYW51YWxseSByZXNvbHZlIGEgdXNlciBwYWdlIGZhdWx0XG5tbS9ndXAuYy0xNTM3LSAqIEBtbTpcdFx0bW1fc3RydWN0IG9mIHRhcmdldCBtbVxuLS1cbm1tL2d1cC5jLTE1NjMtICovXG5tbS9ndXAuYzoxNTY0OmludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxubW0vZ3VwLmMtMTU2NS1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBmYXVsdF9mbGFncyxcbi0tXG5tbS9ndXAuYy0xNjE5LX1cbm1tL2d1cC5jOjE2MjA6RVhQT1JUX1NZTUJPTF9HUEwoZml4dXBfdXNlcl9mYXVsdCk7XG5tbS9ndXAuYy0xNjIxLVxuLS1cbm1tL2d1cC5jPTIxMTc9c2l6ZV90IGZhdWx0X2luX3NhZmVfd3JpdGVhYmxlKGNvbnN0IGNoYXIgX191c2VyICp1YWRkciwgc2l6ZV90IHNpemUpXG4tLVxubW0vZ3VwLmMtMjEzMC1cdGZvciAoY3VyID0gc3RhcnQ7IGN1ciBcdTAwMjZcdTAwMjYgY3VyIFx1MDAzYyBlbmQ7IGN1ciA9IFBBR0VfQUxJR05fRE9XTihjdXIgJiM0MzsgUEFHRV9TSVpFKSlcbm1tL2d1cC5jOjIxMzE6XHRcdGlmIChmaXh1cF91c2VyX2ZhdWx0KG1tLCBjdXIsIEZBVUxUX0ZMQUdfV1JJVEUsIFx1MDAyNnVubG9ja2VkKSlcbm1tL2d1cC5jLTIxMzItXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIEZhdWx0IEhhbmRsaW5nKioKCk9rYXksIHNvIHRoZSBmaXggc2VlbXMgdG8gYmUgd2l0aGluIGBmaXh1cF91c2VyX2ZhdWx0KClgLiBMZXQmIzM5O3MgZGlnIGluIGEgYml0IGRlZXBlci4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZnVuY3Rpb24gaXMganVzdCBhIGxvY2FsIGhlbHBlciBvciBpZiBpdCYjMzk7cyBwb3RlbnRpYWxseSBleHBvc2VkIGZvciB1c2UgYnkgb3RoZXIgbW9kdWxlcyBvciBldmVuIHRoZSBicm9hZGVyIGtlcm5lbC4gQWgsIHllcywgaXQmIzM5O3MgZXhwb3J0ZWQgdmlhIGBFWFBPUlRfU1lNQk9MX0dQTChmaXh1cF91c2VyX2ZhdWx0KWAuIFRoYXQgdGVsbHMgbWUgaXQmIzM5O3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIGV4dGVybmFsbHksIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBoZXJlLiBOb3cgdGhlIG5leHQgc3RlcCBpcyB0byB0cmFjZSBhbGwgdGhlIGNhbGxzIHRvIGBmaXh1cF91c2VyX2ZhdWx0KClgIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyBhbGwgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgdXNlcyBhbmQgc2lkZSBlZmZlY3RzIG9mIGFueSBjaGFuZ2VzIEkgbWFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaXh1cF91c2VyX2ZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmM9NDY9U1lTQ0FMTF9ERUZJTkUzKGFyY191c3JfY21weGNoZywgaW50IF9fdXNlciAqLCB1YWRkciwgaW50LCBleHBlY3RlZCwgaW50LCBuZXcpXG4tLVxuYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuYy05My1cdG1tYXBfcmVhZF9sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuYzo5NDpcdHJldCA9IGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cdTAwM2VtbSwgKHVuc2lnbmVkIGxvbmcpIHVhZGRyLFxuYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuYy05NS1cdFx0XHQgICAgICAgRkFVTFRfRkxBR19XUklURSwgTlVMTCk7XG4tLVxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jPTEyOD1TWVNDQUxMX0RFRklORTMoczM5MF9wY2lfbW1pb193cml0ZSwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxuLS1cbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0xODQtXHRpZiAocmV0KSB7XG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmM6MTg1Olx0XHRmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXHUwMDNlbW0sIG1taW9fYWRkciwgRkFVTFRfRkxBR19XUklURSwgTlVMTCk7XG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMTg2LVx0XHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuLS1cbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYz0yODM9U1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fcmVhZCwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxuLS1cbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0zMzYtXHRpZiAocmV0KSB7XG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmM6MzM3Olx0XHRmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXHUwMDNlbW0sIG1taW9fYWRkciwgMCwgTlVMTCk7XG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMzM4LVx0XHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NTQwPXN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTAtXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU1MTpcdFx0cmV0ID0gZml4dXBfdXNlcl9mYXVsdChtbSwgdmFkZHIsXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU1Mi1cdFx0XHRcdCAgICAgICBGQVVMVF9GTEFHX1JFTU9URSB8XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTMxNzg9ZXh0ZXJuIHZtX2ZhdWx0X3QgaGFuZGxlX21tX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0zMTgwLVx0XHRcdFx0ICBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG5pbmNsdWRlL2xpbnV4L21tLmg6MzE4MTpleHRlcm4gaW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L21tLmgtMzE4Mi1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTMxODk9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IGhhbmRsZV9tbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMzE5Ni19XG5pbmNsdWRlL2xpbnV4L21tLmg6MzE5NzpzdGF0aWMgaW5saW5lIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzE5OC1cdFx0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzLCBib29sICp1bmxvY2tlZClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTczOD1pbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy03NDMtXHRtbWFwX3JlYWRfbG9jayhtbSk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjc0NDpcdHJldCA9IGZpeHVwX3VzZXJfZmF1bHQobW0sICh1bnNpZ25lZCBsb25nKXVhZGRyLFxua2VybmVsL2Z1dGV4L2NvcmUuYy03NDUtXHRcdFx0ICAgICAgIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpO1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfdXNlci5jPTQzNT1zdGF0aWMgaW50IHVzZXJfZXZlbnRfbW1fZmF1bHRfaW4oc3RydWN0IHVzZXJfZXZlbnRfbW0gKm1tLCB1bnNpZ25lZCBsb25nIHVhZGRyLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfdXNlci5jLTQ1NS1cbmtlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfdXNlci5jOjQ1NjpcdHJldCA9IGZpeHVwX3VzZXJfZmF1bHQobW0tXHUwMDNlbW0sIHVhZGRyLCBGQVVMVF9GTEFHX1dSSVRFIHwgRkFVTFRfRkxBR19SRU1PVEUsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3VzZXIuYy00NTctXHRcdFx0ICAgICAgIFx1MDAyNnVubG9ja2VkKTtcbi0tXG5tbS9ndXAuYz0xNTEyPXN0YXRpYyBib29sIHZtYV9wZXJtaXRzX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2d1cC5jLTE1MzUtLyoqXG5tbS9ndXAuYzoxNTM2OiAqIGZpeHVwX3VzZXJfZmF1bHQoKSAtIG1hbnVhbGx5IHJlc29sdmUgYSB1c2VyIHBhZ2UgZmF1bHRcbm1tL2d1cC5jLTE1MzctICogQG1tOlx0XHRtbV9zdHJ1Y3Qgb2YgdGFyZ2V0IG1tXG4tLVxubW0vZ3VwLmMtMTU2My0gKi9cbm1tL2d1cC5jOjE1NjQ6aW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9ndXAuYy0xNTY1LVx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzLFxuLS1cbm1tL2d1cC5jLTE2MTktfVxubW0vZ3VwLmM6MTYyMDpFWFBPUlRfU1lNQk9MX0dQTChmaXh1cF91c2VyX2ZhdWx0KTtcbm1tL2d1cC5jLTE2MjEtXG4tLVxubW0vZ3VwLmM9MjExNz1zaXplX3QgZmF1bHRfaW5fc2FmZV93cml0ZWFibGUoY29uc3QgY2hhciBfX3VzZXIgKnVhZGRyLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9ndXAuYy0yMTMwLVx0Zm9yIChjdXIgPSBzdGFydDsgY3VyIFx1MDAyNlx1MDAyNiBjdXIgXHUwMDNjIGVuZDsgY3VyID0gUEFHRV9BTElHTl9ET1dOKGN1ciAmIzQzOyBQQUdFX1NJWkUpKVxubW0vZ3VwLmM6MjEzMTpcdFx0aWYgKGZpeHVwX3VzZXJfZmF1bHQobW0sIGN1ciwgRkFVTFRfRkxBR19XUklURSwgXHUwMDI2dW5sb2NrZWQpKVxubW0vZ3VwLmMtMjEzMi1cdFx0XHRicmVhaztcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mzk9c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk2MC1cdFx0Ym9vbCB1bmxvY2tlZCA9IGZhbHNlO1xudmlydC9rdm0va3ZtX21haW4uYzoyOTYxOlx0XHRyID0gZml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVx1MDAzZW1tLCBrZnAtXHUwMDNlaHZhLFxudmlydC9rdm0va3ZtX21haW4uYy0yOTYyLVx0XHRcdFx0ICAgICAod3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byBhZGRyZXNzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgZml4IGludm9sdmVzIGFkZGluZyBhIGNoZWNrLCBgaWYgKHVubG9ja2VkKWAsIGJlZm9yZSB0aGUgZGVyZWZlcmVuY2Ugb2YgYHVubG9ja2VkYCB3aXRoaW4gdGhlIGBmaXh1cF91c2VyX2ZhdWx0KClgIGZ1bmN0aW9uLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyBwcm90ZWN0IGFnYWluc3QgYWNjZXNzaW5nIGEgYmFkIHBvaW50ZXIuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkga25vdyB0aGF0IGZ1bmN0aW9uIHRha2VzIGEgYGJvb2wgKnVubG9ja2VkYC4gQW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgc29tZXRoaW5nIGZlZWxzIGEgbGl0dGxlIG9mZi4uLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSBteSBzdXNwaWNpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGZpeHVwX3VzZXJfZmF1bHQoKWAgaXMgYmVpbmcgKnVzZWQqLiBBIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBjaGVjayBpcyBpbiBvcmRlci4gTG9va2luZyBhdCBgYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuY2AsIGl0JiMzOTtzIGNhbGxlZCB3aXRoIGBOVUxMYCBmb3IgdGhhdCBhcmd1bWVudC4gQW5kIGFnYWluIGluIGBhcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNgLCBzYW1lIGRlYWwsIGl0JiMzOTtzIGBOVUxMYC4gQW5kIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCwgYWdhaW4sIHRoZSB2YWx1ZSBwYXNzZWQgdG8gYHVubG9ja2VkYCBpcyBgTlVMTGAhIFNvIHRoZSBmaXggaW50cm9kdWNlcyB0aGUgY2hlY2ssIHdoaWNoIGxpa2VseSBoYW5kbGVzIHRoZSBOVUxMIHBvaW50ZXIsIGFuZCBhdm9pZHMgdGhlIGNyYXNoLiBOb3csIHRoZSBxdWVzdGlvbiBpcyB3aGVyZSBpcyB0aGUgcHJvYmxlbWF0aWMgY2FsbD8gTGV0JiMzOTtzIGNoZWNrIGluIGBkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jYC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeHVwX3VzZXJfZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NTQwPXN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTAtXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU1MTpcdFx0cmV0ID0gZml4dXBfdXNlcl9mYXVsdChtbSwgdmFkZHIsXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU1Mi1cdFx0XHRcdCAgICAgICBGQVVMVF9GTEFHX1JFTU9URSB8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwMgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIHRoZSB2ZmlvX2lvbW11X3R5cGUxLmMgQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoaXMgaXNzdWUuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgc3BlY2lmaWMgcG9pbnQgb2YgaW50ZXJlc3QuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgdmZpb19pb21tdV90eXBlMS5jYCDigJMgYSBmYW1pbGlhciBwaWVjZSBvZiB0aGUgcHV6emxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZGlyZWN0aW5nIG15IGF0dGVudGlvbiB0byBsaW5lIDU1MS4gVGhhdCBsaW5lIHVzdWFsbHkgaG9sZHMgYSBrZXkgcGllY2Ugb2YgdGhlIG1lY2hhbmlzbSBJJiMzOTttIGludGVyZXN0ZWQgaW4sIHdoaWNoIEkmIzM5O20gc3VyZSB3aWxsIGRpcmVjdCB0aGUgbmV4dCBzdGVwcyB0byBkaWFnbm9zZSB0aGUgaXNzdWUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGhhbmRzLW9uIGFuZCB0cmFjZSB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDA6XHRzdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDU0MTpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nICpwZm4sXG4gNTQyOlx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKmFkZHJfbWFzaywgYm9vbCB3cml0ZV9mYXVsdClcbiA1NDM6XHR7XG4gNTQ0Olx0XHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gdmFkZHIgfTtcbiA1NDU6XHRcdGludCByZXQ7XG4gNTQ2Olx0XG4gNTQ3Olx0XHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuIDU0ODpcdFx0aWYgKHJldCkge1xuIDU0OTpcdFx0XHRib29sIHVubG9ja2VkID0gZmFsc2U7XG4gNTUwOlx0XG4gNTUxOlx0XHRcdHJldCA9IGZpeHVwX3VzZXJfZmF1bHQobW0sIHZhZGRyLFxuIDU1MjpcdFx0XHRcdFx0ICAgICAgIEZBVUxUX0ZMQUdfUkVNT1RFIHxcbiA1NTM6XHRcdFx0XHRcdCAgICAgICAod3JpdGVfZmF1bHQgPyAgRkFVTFRfRkxBR19XUklURSA6IDApLFxuIDU1NDpcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnVubG9ja2VkKTtcbiA1NTU6XHRcdFx0aWYgKHVubG9ja2VkKVxuIDU1NjpcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIDU1NzpcdFxuIDU1ODpcdFx0XHRpZiAocmV0KVxuIDU1OTpcdFx0XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipNeSBGdXRleCBNdXNpbmdzKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gZGl2aW5nIGludG8gYGtlcm5lbC9mdXRleC9jb3JlLmNgLCB0aGUgaGVhcnQgb2YgdGhlIGZ1dGV4IGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gYmUgc2hhcnAgaGVyZTsgYSBtaXNzdGVwIGluIGZ1dGV4IG1hbmFnZW1lbnQgY2FuIGxlYWQgdG8gc29tZSB0cnVseSBuYXN0eSBjb25jdXJyZW5jeSBidWdzLiBGaXJzdCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgZGVzaWduIOKAkyBob3cgZG8gd2UgZW5zdXJlIGVmZmljaWVudCBhbmQgcmVsaWFibGUgc3luY2hyb25pemF0aW9uIGJldHdlZW4gcHJvY2Vzc2VzIGFuZCB0aHJlYWRzPyBUaGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgbGlrZSB0aGUgZnV0ZXggd2FpdCBxdWV1ZXMgYW5kIHRoZSBhc3NvY2lhdGVkIGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgd2hhdCBJIHdhbnQgdG8gZGVlcGx5IHVuZGVyc3RhbmQsIHRvIGtub3cgaG93IHRvIHNvbHZlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGluIHRoaXMgY29kZS4KCkkgbmVlZCB0byBxdWlja2x5IGFuYWx5emUgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgc2NoZWR1bGVyOyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhIHByb2Nlc3Mgd2FpdGluZyBvbiBhIGZ1dGV4IGFuZCBiZWluZyB3b2tlbiB1cCBpcyBhbHdheXMgYSBjcml0aWNhbCBwb2ludC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGBmdXRleF93YWl0YCBhbmQgYGZ1dGV4X3dha2VgIGZ1bmN0aW9ucy4gV2hhdCBhcmUgdGhlIGtleSBhdG9taWMgb3BlcmF0aW9ucz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZGlmZmVyZW50IHdhaXQgbW9kZXM/IFVuZGVyc3RhbmRpbmcgdGhlc2UgZGV0YWlscyBpcyBrZXkuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgcXVlc3Rpb24gb2YgcHJpb3JpdHkgaW5oZXJpdGFuY2UsIGVzcGVjaWFsbHkgYXMgaXQgcmVsYXRlcyB0byBmdXRleGVzLiBIb3cgZG9lcyB0aGUga2VybmVsIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIGhpZ2gtcHJpb3JpdHkgdGhyZWFkIGlzIGJsb2NrZWQgb24gYSBmdXRleCBoZWxkIGJ5IGEgbG93ZXItcHJpb3JpdHkgdGhyZWFkPyBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBpbmhlcml0YW5jZSBsb2dpYyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcHJpb3JpdHkgaW52ZXJzaW9uIHByb2JsZW1zLiBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgd2hlcmUgdGhlIGRhdGEgYW5kIGxvY2tzIGFyZSwgYW5kIHRyeSB0byB2aXN1YWxpemUgdGhlbSBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy4KCkZpbmFsbHksIEkmIzM5O20gYWx3YXlzIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zLiBBcmUgdGhlcmUgYW55IHVubmVjZXNzYXJ5IGF0b21pYyBvcGVyYXRpb25zPyBDYW4gdGhlIHdhaXQgcXVldWUgbWFuYWdlbWVudCBiZSBpbXByb3ZlZD8gSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSBzcHVyaW91cyB3YWtldXBzPyBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdG8gc2VlIG15IG93biBpZGVhcy4gTXkgbWFpbiBnb2FsIGlzIHRvIHNlZSB0aGlzIGNvZGUgYXQgYWxsIGxldmVscywgYW5kIGZpbmQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3Mzg6XHRpbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpXG4gNzM5Olx0e1xuIDc0MDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuIDc0MTpcdFx0aW50IHJldDtcbiA3NDI6XHRcbiA3NDM6XHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbiA3NDQ6XHRcdHJldCA9IGZpeHVwX3VzZXJfZmF1bHQobW0sICh1bnNpZ25lZCBsb25nKXVhZGRyLFxuIDc0NTpcdFx0XHRcdCAgICAgICBGQVVMVF9GTEFHX1dSSVRFLCBOVUxMKTtcbiA3NDY6XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIDc0NzpcdFxuIDc0ODpcdFx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IDA7XG4gNzQ5Olx0fVxuIDc1MDpcdFxuIDc1MTpcdC8qKlxuIDc1MjpcdCAqIGZ1dGV4X3RvcF93YWl0ZXIoKSAtIFJldHVybiB0aGUgaGlnaGVzdCBwcmlvcml0eSB3YWl0ZXIgb24gYSBmdXRleFxuIDc1MzpcdCAqIEBoYjpcdFx0dGhlIGhhc2ggYnVja2V0IHRoZSBmdXRleF9xJiMzOTtzIHJlc2lkZSBpblxuIDc1NDpcdCAqIEBrZXk6XHR0aGUgZnV0ZXgga2V5ICh0byBkaXN0aW5ndWlzaCBpdCBmcm9tIG90aGVyIGZ1dGV4IGZ1dGV4X3EmIzM5O3MpXG4gNzU1Olx0ICpcbiA3NTY6XHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBoYiBsb2NrIGhlbGQuXG4gNzU3Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3ODgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGFsYXJtIGJlbGxzIGFyZSBnb2luZyBvZmYuIEl0IHNlZW1zIGxpa2UgYGtlcm5lbC9mdXRleC9jb3JlLmNgIGNhbGxzIGBmaXh1cF91c2VyX2ZhdWx0YCB3aXRoIGEgYE5VTExgIHZhbHVlIGZvciB0aGUgYHVubG9ja2VkYCBwb2ludGVyLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyByZWNpcGUgZm9yIGRpc2FzdGVyLiBUaGUgcmVhbCBwcm9ibGVtIGlzLCBpZiBgZml4dXBfdXNlcl9mYXVsdGAgcmV0dXJucyBgVk1fRkFVTFRfUkVUUllgLCBpdCYjMzk7cyBnb2luZyB0byB0cnkgdG8gZGVyZWZlcmVuY2UgdGhhdCBgTlVMTGAgcG9pbnRlciBhbmQgYm9vbSDigJMgYSBjcmFzaC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Zy4gQ29uc2lkZXJpbmcgdGhlIGltcGFjdCBvZiBzdWNoIGEgdnVsbmVyYWJpbGl0eSwgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIHNvbWUgc2VyaW91cyBmdXp6aW5nLgoKTXkgdGhpbmtpbmcgaXMgdGhhdCB0aGUgY3JpdGljYWwgZnVuY3Rpb24sIGBmaXh1cF91c2VyX2ZhdWx0YCwgaXMgZGVmaW5lZCBpbiBgbW0vZ3VwLmNgLiBUaGUgcmVhbCBzd2VldCBzcG90LCB0aG91Z2gsIGFwcGVhcnMgdG8gYmUgdGhlIGNhbGxlcjogYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCwgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwtY2hhaW4uIEkgc2hvdWxkIGNoZWNrIHdoZXJlIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaXMgY2FsbGVkIGZyb20gYXMgd2VsbCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgcGF0aHMgdG8gaW52ZXN0aWdhdGUuIFRoaXMgY291bGQgYmUgYSBuaWNlIGVhc3kgdGFyZ2V0IHRvIHdvcmsgd2l0aCBmb3IgZnV6emluZywgb3IgbGVhZCB0byBvdGhlciBtb3JlIGludGVyZXN0aW5nIGZsYXdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTUwMj1pbnQgZ2V0X2Z1dGV4X2tleSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTcyNi0vKipcbmtlcm5lbC9mdXRleC9jb3JlLmM6NzI3OiAqIGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKCkgLSBGYXVsdCBpbiB1c2VyIGFkZHJlc3MgYW5kIHZlcmlmeSBSVyBhY2Nlc3Ncbmtlcm5lbC9mdXRleC9jb3JlLmMtNzI4LSAqIEB1YWRkcjpcdHBvaW50ZXIgdG8gZmF1bHRpbmcgdXNlciBzcGFjZSBhZGRyZXNzXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy03MzctICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjczODppbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTczOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz05Njg9c3RhdGljIGludCBoYW5kbGVfZnV0ZXhfZGVhdGgodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vycixcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEwNTQtXHRcdGNhc2UgLUVGQVVMVDpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTA1NTpcdFx0XHRpZiAoZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodWFkZHIpKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMDU2LVx0XHRcdFx0cmV0dXJuIC0xO1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTI4NT1leHRlcm4gdm9pZCBmdXRleF93YWtlX21hcmsoc3RydWN0IHdha2VfcV9oZWFkICp3YWtlX3EsIHN0cnVjdCBmdXRleF9xICpxKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI4Ni1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjI4NzpleHRlcm4gaW50IGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKHUzMiBfX3VzZXIgKnVhZGRyKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI4OC1leHRlcm4gc3RydWN0IGZ1dGV4X3EgKmZ1dGV4X3RvcF93YWl0ZXIoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYiwgdW5pb24gZnV0ZXhfa2V5ICprZXkpO1xuLS1cbmtlcm5lbC9mdXRleC9waS5jPTY3ND1zdGF0aWMgaW50IF9fZml4dXBfcGlfc3RhdGVfb3duZXIodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCBmdXRleF9xICpxLFxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTgwMC1cdGNhc2UgLUVGQVVMVDpcbmtlcm5lbC9mdXRleC9waS5jOjgwMTpcdFx0ZXJyID0gZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodWFkZHIpO1xua2VybmVsL2Z1dGV4L3BpLmMtODAyLVx0XHRicmVhaztcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy04MjctXHQvKlxua2VybmVsL2Z1dGV4L3BpLmM6ODI4Olx0ICogZmF1bHRfaW5fdXNlcl93cml0ZWFibGUoKSBmYWlsZWQgc28gdXNlciBzdGF0ZSBpcyBpbW11dGFibGUuIEF0XG5rZXJuZWwvZnV0ZXgvcGkuYy04MjktXHQgKiBiZXN0IHdlIGNhbiBtYWtlIHRoZSBrZXJuZWwgc3RhdGUgY29uc2lzdGVudCBidXQgdXNlciBzdGF0ZSB3aWxsXG4tLVxua2VybmVsL2Z1dGV4L3BpLmM9OTIzPWludCBmdXRleF9sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGt0aW1lX3QgKnRpbWUsIGludCB0cnlsb2NrKVxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTExMTctXG5rZXJuZWwvZnV0ZXgvcGkuYzoxMTE4Olx0XHRyZXQgPSBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1YWRkcik7XG5rZXJuZWwvZnV0ZXgvcGkuYy0xMTE5LVx0XHRpZiAocmV0KVxuLS1cbmtlcm5lbC9mdXRleC9waS5jPTExNDE9c3RhdGljIGludCBfX2Z1dGV4X3VubG9ja19waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTEyOTctXG5rZXJuZWwvZnV0ZXgvcGkuYzoxMjk4Olx0cmV0ID0gZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodWFkZHIpO1xua2VybmVsL2Z1dGV4L3BpLmMtMTI5OS1cdGlmICghcmV0KVxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MzgyPWludCBmdXRleF9yZXF1ZXVlKHUzMiBfX3VzZXIgKnVhZGRyMSwgdW5zaWduZWQgaW50IGZsYWdzMSxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTU2My1cdFx0XHRcdGRvdWJsZV91bmxvY2tfaGIoaGIxLCBoYjIpO1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo1NjQ6XHRcdFx0XHRyZXQgPSBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1YWRkcjIpO1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYy01NjUtXHRcdFx0XHRpZiAoIXJldClcbi0tXG5rZXJuZWwvZnV0ZXgvd2FpdHdha2UuYz0yNzg9aW50IGZ1dGV4X3dha2Vfb3AodTMyIF9fdXNlciAqdWFkZHIxLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBfX3VzZXIgKnVhZGRyMixcbi0tXG5rZXJuZWwvZnV0ZXgvd2FpdHdha2UuYy0zMTYtXHRcdFx0aWYgKG9wX3JldCA9PSAtRUZBVUxUKSB7XG5rZXJuZWwvZnV0ZXgvd2FpdHdha2UuYzozMTc6XHRcdFx0XHRyZXQgPSBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1YWRkcjIpO1xua2VybmVsL2Z1dGV4L3dhaXR3YWtlLmMtMzE4LVx0XHRcdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgUGF0aHMqKgoKT2theSwgc28gYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpcyBjbGVhcmx5IGEgY3JpdGljYWwgZnVuY3Rpb24sIGNvbnNpZGVyaW5nIHRoZSBudW1iZXIgb2YgY29yZSBhcmVhcyBpdCB0b3VjaGVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIGEgdGhvcm91Z2ggbG9vay1vdmVyLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBzZXZlcmFsIGtleSBmdXRleCBvcGVyYXRpb25zIOKAkyBgZnV0ZXhfbG9ja19waWAsIGBfX2Z1dGV4X3VubG9ja19waWAsIGBmdXRleF9yZXF1ZXVlYCwgYW5kIGBmdXRleF93YWtlX29wYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBiZWluZyBpbnRlcnR3aW5lZCB3aXRoIHRoZSBmdW5kYW1lbnRhbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHRoZXJlZm9yZSwgcG90ZW50aWFsbHkgc2VjdXJpdHktc2Vuc2l0aXZlLiBJdCYjMzk7cyBkaXJlY3RseSByZWFjaGFibGUgdmlhIHRoZSBgZnV0ZXhgIHN5c2NhbGwgd2hpY2ggcmFpc2VzIGEgZmV3IGZsYWdzLiBUaGlzIGFyZWEgaXMga25vd24gZm9yIGJlaW5nIHRyaWNreSB0byBnZXQgcmlnaHQsIGFuZCBldmVuIGEgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIGhhdmUgd2lkZXNwcmVhZCBjb25zZXF1ZW5jZXMuCgpCZXlvbmQgdGhhdCwgdGhlIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGluIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZSBmb3IgQVJDIGFuZCBTMzkwLCBhbmQgbW9yZSBzdXJwcmlzaW5nbHksIGluIFBDSSBkcml2ZXJzIGxpa2UgYHZmaW9faW9tbXVfdHlwZTFgIGFuZCB0aGUgS1ZNIG1haW4gY29kZS4gVGhpcyBkZWZpbml0ZWx5IGFkZHMgdG8gdGhlIG15c3RlcnkgYW5kIHRoZSBzY2FsZSBvZiB3aGVyZSB0aGlzIGNhbiBwb3RlbnRpYWxseSBjcmVhdGUgcHJvYmxlbXMuCgpMZXQmIzM5O3MgYmVnaW4gYnkgZm9jdXNpbmcgb24gdGhlIEtWTSBzaWRlIG9mIHRoaW5ncy4gSXQmIzM5O3MgdGltZSB0byBjaGVjayBgdmlydC9rdm0va3ZtX21haW4uY2AgbGluZSAyOTYxLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgYW5kIHdoYXQgdGhlIGNvbnRleHQgaXMuIEl0IHdpbGwgbGlrZWx5IGdpdmUgc29tZSBjbHVlcyBhcyB0byB0aGUgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgYSBmYXVsdCBvY2N1cnJpbmcgaW4gdGhhdCBzcGVjaWZpYyBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NTA6XHRcdCAqL1xuMjk1MTpcdFx0aWYgKGtmcC1cdTAwM2VwaW4gXHUwMDI2XHUwMDI2ICFhbGxvd191bnNhZmVfbWFwcGluZ3MpXG4yOTUyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjk1MzpcdFxuMjk1NDpcdFx0ciA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG4yOTU1Olx0XHRpZiAocikge1xuMjk1NjpcdFx0XHQvKlxuMjk1NzpcdFx0XHQgKiBnZXRfdXNlcl9wYWdlcyBmYWlscyBmb3IgVk1fSU8gYW5kIFZNX1BGTk1BUCB2bWFzIGFuZCBkb2VzXG4yOTU4Olx0XHRcdCAqIG5vdCBjYWxsIHRoZSBmYXVsdCBoYW5kbGVyLCBzbyBkbyBpdCBoZXJlLlxuMjk1OTpcdFx0XHQgKi9cbjI5NjA6XHRcdFx0Ym9vbCB1bmxvY2tlZCA9IGZhbHNlO1xuMjk2MTpcdFx0XHRyID0gZml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVx1MDAzZW1tLCBrZnAtXHUwMDNlaHZhLFxuMjk2MjpcdFx0XHRcdFx0ICAgICAod3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXG4yOTYzOlx0XHRcdFx0XHQgICAgIFx1MDAyNnVubG9ja2VkKTtcbjI5NjQ6XHRcdFx0aWYgKHVubG9ja2VkKVxuMjk2NTpcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuMjk2NjpcdFx0XHRpZiAocilcbjI5Njc6XHRcdFx0XHRyZXR1cm4gcjtcbjI5Njg6XHRcbjI5Njk6XHRcdFx0ciA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gS2VybmVsIENvZGUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgYnVnIHJlcG9ydCBhbmQgdGhlIGNvZGUgc25pcHBldHMgYXJlIHBvaW50aW5nIG1lIHRvd2FyZCBzb21lIGludGVyZXN0aW5nIGFyZWFzLiBJdCBsb29rcyBsaWtlIHRoZSBgdW5sb2NrZWRgIGFyZ3VtZW50LCB3aGljaCBpcyBjbGVhcmx5IGEgcG9pbnRlciwgaXMgYmVpbmcgcGFzc2VkIGluIGNvbnNpc3RlbnRseSBhcyBhIG5vbi1OVUxMIHZhbHVlIGluIHNldmVyYWwga2V5IEtWTSBhbmQgVkZJTyBjb250ZXh0cyDigJMgc3BlY2lmaWNhbGx5IHdpdGhpbiBga3ZtX21haW4uY2AgYW5kIGB2ZmlvX2lvbW11X3R5cGUxLmNgLCByZXNwZWN0aXZlbHkuIEhvd2V2ZXIsIHdoZW4gZXhhbWluaW5nIGBmdXRleGAgc3lzY2FsbCBpbXBsZW1lbnRhdGlvbnMgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBhcyB3ZWxsIGFzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGZvciBBUkMgYW5kIHMzOTAgcHJvY2Vzc29ycyAoaS5lLiBgYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuY2AgYW5kIGBhcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNgKSwgaXQmIzM5O3MgYmVpbmcgcGFzc2VkIGFzIE5VTEwuCgpUaGF0JiMzOTtzIGEgZ2xhcmluZyBpbmNvbnNpc3RlbmN5LCB3aGljaCBzdWdnZXN0cyB0aGlzIGJ1ZyBpcyBsaWtlbHkgdHJpZ2dlcmVkIGR1cmluZyB0aG9zZSBzcGVjaWZpYyBzeXNjYWxscywgZXNwZWNpYWxseSByZWxhdGVkIHRvIGBmdXRleGAuIFRoZSByZXBvcnQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdpdGhpbiBgZml4dXBfdXNlcl9mYXVsdGAuIEdpdmVuIHRoYXQsIG15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyBzcG90IG9uLCB3aGljaCBpcyBnb29kLiBUaGUgcGF0Y2ggZGVzY3JpcHRpb24gaW5kaWNhdGVzIHRoaXMgZml4IGlzIHRhcmdldGVkIGF0IGBmaXh1cF91c2VyX2ZhdWx0YCBpdHNlbGYuIFRoaXMgbmF0dXJhbGx5IG1ha2VzIGBmaXh1cF91c2VyX2ZhdWx0YCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gQWxzbywgaXQmIzM5O3Mgd29ydGggY2hlY2tpbmcgYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpbnNpZGUgYGtlcm5lbC9mdXRleC9jb3JlLmNgIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBzaWRlIGVmZmVjdHMgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBpZGVudGlmaWVkIGlzc3VlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZml4dXBfdXNlcl9mYXVsdGAgaXRzZWxmLiBJIG5lZWQgdG8gY2hlY2sgYG1tL2d1cC5jYCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbiBhbmQgaG93IHRoYXQgcG9pbnRlciBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2d1cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTkwOlx0XHRpZiAocmV0IFx1MDAyNiBWTV9GQVVMVF9DT01QTEVURUQpIHtcbjE1OTE6XHRcdFx0LypcbjE1OTI6XHRcdFx0ICogTk9URTogaXQmIzM5O3MgYSBwaXR5IHRoYXQgd2UgbmVlZCB0byByZXRha2UgdGhlIGxvY2sgaGVyZVxuMTU5MzpcdFx0XHQgKiB0byBwYWlyIHdpdGggdGhlIHVubG9jaygpIGluIHRoZSBjYWxsZXJzLiBJZGVhbGx5IHdlXG4xNTk0Olx0XHRcdCAqIGNvdWxkIHRlbGwgdGhlIGNhbGxlcnMgc28gdGhleSBkbyBub3QgbmVlZCB0byB1bmxvY2suXG4xNTk1Olx0XHRcdCAqL1xuMTU5NjpcdFx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4xNTk3Olx0XHRcdGlmICh1bmxvY2tlZClcbjE1OTg6XHRcdFx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuMTU5OTpcdFx0XHRyZXR1cm4gMDtcbjE2MDA6XHRcdH1cbjE2MDE6XHRcbjE2MDI6XHRcdGlmIChyZXQgXHUwMDI2IFZNX0ZBVUxUX0VSUk9SKSB7XG4xNjAzOlx0XHRcdGludCBlcnIgPSB2bV9mYXVsdF90b19lcnJubyhyZXQsIDApO1xuMTYwNDpcdFxuMTYwNTpcdFx0XHRpZiAoZXJyKVxuMTYwNjpcdFx0XHRcdHJldHVybiBlcnI7XG4xNjA3Olx0XHRcdEJVRygpO1xuMTYwODpcdFx0fVxuMTYwOTpcdFxuMTYxMDpcdFx0aWYgKHJldCBcdTAwMjYgVk1fRkFVTFRfUkVUUlkpIHtcbjE2MTE6XHRcdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuMTYxMjpcdFx0XHRpZiAodW5sb2NrZWQpXG4xNjEzOlx0XHRcdFx0KnVubG9ja2VkID0gdHJ1ZTtcbjE2MTQ6XHRcdFx0ZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19UUklFRDtcbjE2MTU6XHRcdFx0Z290byByZXRyeTtcbjE2MTY6XHRcdH1cbjE2MTc6XHRcbjE2MTg6XHRcdHJldHVybiAwO1xuMTYxOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugc2l0dWF0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBgZml4dXBfdXNlcl9mYXVsdGAgcmV0dXJucyBgVk1fRkFVTFRfQ09NUExFVEVEYCBvciBgVk1fRkFVTFRfUkVUUllgIGFuZCB0aGUgYHVubG9ja2VkYCBwb2ludGVyIGlzIG51bGwuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IGFic29sdXRlbHkgd2FycmFudHMgc29tZSBmdXp6aW5nIGF0dGVudGlvbi4KCk15IG1haW4gZm9jdXMgcmlnaHQgbm93IGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgZml4dXBfdXNlcl9mYXVsdGAgZnVuY3Rpb24gaXRzZWxmLCBuYXR1cmFsbHksIGFuZCBhbHNvIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdCB0byB0cmlnZ2VyIHRoaXMgdnVsbmVyYWJpbGl0eS4KCkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgcGFydGljdWxhcmx5IHNwZWNpZmljIHRoYXQganVtcHMgb3V0LiBJIHNlZSBgZnV0ZXhgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLCBhbmQgYG1tL2d1cC5jYCBpcyBjb3JlIGtlcm5lbCBjb2RlLCBzbyB0aGlzIHNob3VsZCBiZSByZWFkaWx5IGFjY2Vzc2libGUuCgpMZXQgbWUgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuIElzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBBaCwgZ29vZCwgaXTigJlzIG5vdC4gSXQmIzM5O3MgYWN0dWFsbHkgZXhwb3J0ZWQgaW4gYGtlcm5lbC9mdXRleC9mdXRleC5oYCBhbmQgZGVmaW5lZCBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AuIFdhaXQgYSBzZWNvbmTigKYgZXZlbiB0aG91Z2ggaXQmIzM5O3MgZXhwb3J0ZWQsIGl0JiMzOTtzIG5vdCBleHBvcnRlZCB0byBtb2R1bGVzLCB5ZXQgaXQgaXMgYSBnbG9iYWwgc3ltYm9sLCBJIHNob3VsZCBjb25maXJtIHdoYXQgdGhpcyBtZWFucyBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AuIEdvdCBpdCwgbm93IHRvIGxvb2sgYXQgdGhhdCBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz01MDI9aW50IGdldF9mdXRleF9rZXkodTMyIF9fdXNlciAqdWFkZHIsIHVuc2lnbmVkIGludCBmbGFncywgdW5pb24gZnV0ZXhfa2V5ICprZXksXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy03MzctICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjczODppbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTczOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODg4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBmaXh1cF91c2VyX2ZhdWx0YCBhbmQgUG90ZW50aWFsIElzc3VlcyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgZml4dXBfdXNlcl9mYXVsdGAg4oCTIGNvbmZpcm1lZCwgaXQmIzM5O3MgYSBnbG9iYWwgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIHdoZXJlIGVsc2UgaXQmIzM5O3MgYmVpbmcgY2FsbGVkLCBzcGVjaWZpY2FsbHksIGFyZSB0aGVyZSBhbnkgaW5zdGFuY2VzIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCB3aXRoIGEgTlVMTCBhcmd1bWVudCwgd2hpY2ggY291bGQgc2lnbmFsIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4KClJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBhIGZldyBhcmNoLXNwZWNpZmljIHN5c2NhbGxzIGFyZSBjYWxsaW5nIGl0OiBgczM5MF9wY2lfbW1pb193cml0ZWAgYW5kIGBzMzkwX3BjaV9tbWlvX3JlYWRgIGluIGBhcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNgIGFuZCBgYXJjX3Vzcl9jbXB4Y2hnYCBpbiBgYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuY2AuIFRoZXNlIGFyZSBpbnRlcmVzdGluZywgYnV0IHRoZSBtYWluIG9uZSB0aGF0IHN0YW5kcyBvdXQgdG8gbWUgaXMgYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBsb2NhdGVkIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gVGhpcyBpcyB0aGUgb25lIEkgd2FudCB0byBmb2N1cyBvbi4KCkdpdmVuIHRoZXNlIGZpbmRpbmdzLCBJ4oCZbSBnb2luZyB0byBtYWtlIGEgbm90ZSB0byBhZGQgYm90aCBgZml4dXBfdXNlcl9mYXVsdGAgYW5kIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgdG8gYEZvY3VzU3ltYm9sc2AuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHRoZXNlLCBlc3BlY2lhbGx5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGZ1dGV4IGNvZGUuCgpGaW5hbGx5LCBJ4oCZbGwgcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCBmdXRleC4gSSBiZWxpZXZlIGBDT05GSUdfRlVURVhgIGlzIGdlbmVyYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhpcyB0byBlbnN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCYjMzk7cyBmdXRleCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVVEVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODI3PWNvbmZpZyBCQVNFX1NNQUxMXG4tLVxuaW5pdC9LY29uZmlnLTE4MzMtXG5pbml0L0tjb25maWc6MTgzNDpjb25maWcgRlVURVhcbmluaXQvS2NvbmZpZy0xODM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgZnV0ZXggc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWctMTg0My1cbmluaXQvS2NvbmZpZzoxODQ0OmNvbmZpZyBGVVRFWF9QSVxuaW5pdC9LY29uZmlnLTE4NDUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTE4NDgtXG5pbml0L0tjb25maWc6MTg0OTpjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXG5pbml0L0tjb25maWctMTg1MC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTg1My1cbmluaXQvS2NvbmZpZzoxODU0OmNvbmZpZyBGVVRFWF9NUE9MXG5pbml0L0tjb25maWctMTg1NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWc9MTg1OT1jb25maWcgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXG4tLVxuaW5pdC9LY29uZmlnLTE4NjEtXG5pbml0L0tjb25maWc6MTg2Mjpjb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xuaW5pdC9LY29uZmlnLTE4NjMtXHRkZWZfYm9vbCBGVVRFWCBcdTAwMjZcdTAwMjYgSEFWRV9HRU5FUklDX1ZEU08gXHUwMDI2XHUwMDI2IEdFTkVSSUNfSVJRX0VOVFJZIFx1MDAyNlx1MDAyNiBSU0VRIFx1MDAyNlx1MDAyNiBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEtlcm5lbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gYENPTkZJR19GVVRFWGAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgdGVzdC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGNhbGxzIHRvIGBmaXh1cF91c2VyX2ZhdWx0YCB3aXRoIGEgTlVMTCBhcmd1bWVudC4gSSYjMzk7dmUgZm91bmQgYSBjb3VwbGUgb2YgdGhlc2U6IGBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZWAgaW4gYG1tL2d1cC5jYCBhbmQgYHVzZXJfZXZlbnRfbW1fZmF1bHRfaW5gIGluIGBrZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3VzZXIuY2AuIEhvd2V2ZXIsIGl0IHNlZW1zIHRoZSBtYWluIG9uZSBpcyBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgLgoKVGhlcmVmb3JlLCBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgZml4dXBfdXNlcl9mYXVsdGAgYW5kIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuIEp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBgRlVURVhgIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGFscmVhZHkgb24gYnkgZGVmYXVsdC4KCkxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgRlVURVhgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG5hbWXigKZZZXMsIGBDT05GSUdfRlVURVhgIGl0IGlzLgoKT25lIGxhc3QgdGhpbmcsIGxldCYjMzk7cyB2ZXJpZnkgYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpcyB0aGUgb25seSBvbmUuIFdoYXQgYWJvdXQgdGhlIG90aGVyIHJlbGF0ZWQgY2FsbHM/IGBmYXVsdF9pbl91c2VyX3JlYWRhYmxlYD8gRG9lcyBpdCBleGlzdD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYXVsdF9pbl91c2VyX3JlYWRhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFNhZmVndWFyZCoqCgpObywgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIFRoaW5raW5nIGFib3V0IHRoYXQgYXBwcm9hY2ggaXNuJiMzOTt0IGdvaW5nIHRvIGdldCBtZSB0aGVyZS4KCldhaXQuLi4gd2hhdCBhYm91dCBgZmF1bHRfaW5fc2FmZV93cml0ZWFibGVgPyBUaGF0IGhhcyBwb3NzaWJpbGl0aWVzLiBNYXliZSBleGFtaW5pbmcgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIGNvbmNlcHQgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGlzc3VlIEkmIzM5O20gd29ya2luZyB0aHJvdWdoLiBJdCYjMzk7cyB3b3J0aCBkaWdnaW5nIGludG8gdGhhdCBhbmdsZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9nZnMyL2lub2RlLmM9MjE5Nz1zdGF0aWMgYm9vbCBmYXVsdF9pbl9maWVtYXAoc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyAqZmkpXG4tLVxuZnMvZ2ZzMi9pbm9kZS5jLTIyMDEtXG5mcy9nZnMyL2lub2RlLmM6MjIwMjpcdHJldHVybiBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKilkZXN0LCBzaXplKSA9PSAwO1xuZnMvZ2ZzMi9pbm9kZS5jLTIyMDMtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTEyNzk9c2l6ZV90IGZhdWx0X2luX3N1YnBhZ2Vfd3JpdGVhYmxlKGNoYXIgX191c2VyICp1YWRkciwgc2l6ZV90IHNpemUpO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTI4MDpzaXplX3QgZmF1bHRfaW5fc2FmZV93cml0ZWFibGUoY29uc3QgY2hhciBfX3VzZXIgKnVhZGRyLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xMjgxLXNpemVfdCBmYXVsdF9pbl9yZWFkYWJsZShjb25zdCBjaGFyIF9fdXNlciAqdWFkZHIsIHNpemVfdCBzaXplKTtcbi0tXG5saWIvaW92X2l0ZXIuYz0xNDU9c2l6ZV90IGZhdWx0X2luX2lvdl9pdGVyX3dyaXRlYWJsZShjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmksIHNpemVfdCBzaXplKVxuLS1cbmxpYi9pb3ZfaXRlci5jLTE0OC1cdFx0c2l6ZV90IG4gPSBtaW4oc2l6ZSwgaW92X2l0ZXJfY291bnQoaSkpO1xubGliL2lvdl9pdGVyLmM6MTQ5Olx0XHRuIC09IGZhdWx0X2luX3NhZmVfd3JpdGVhYmxlKGktXHUwMDNldWJ1ZiAmIzQzOyBpLVx1MDAzZWlvdl9vZmZzZXQsIG4pO1xubGliL2lvdl9pdGVyLmMtMTUwLVx0XHRyZXR1cm4gc2l6ZSAtIG47XG4tLVxubGliL2lvdl9pdGVyLmMtMTYyLVx0XHRcdFx0Y29udGludWU7XG5saWIvaW92X2l0ZXIuYzoxNjM6XHRcdFx0cmV0ID0gZmF1bHRfaW5fc2FmZV93cml0ZWFibGUocC1cdTAwM2Vpb3ZfYmFzZSAmIzQzOyBza2lwLCBsZW4pO1xubGliL2lvdl9pdGVyLmMtMTY0LVx0XHRcdGNvdW50IC09IGxlbiAtIHJldDtcbi0tXG5tbS9ndXAuYz0yMDk3PUVYUE9SVF9TWU1CT0woZmF1bHRfaW5fc3VicGFnZV93cml0ZWFibGUpO1xuLS1cbm1tL2d1cC5jLTIwOTktLypcbm1tL2d1cC5jOjIxMDA6ICogZmF1bHRfaW5fc2FmZV93cml0ZWFibGUgLSBmYXVsdCBpbiBhbiBhZGRyZXNzIHJhbmdlIGZvciB3cml0aW5nXG5tbS9ndXAuYy0yMTAxLSAqIEB1YWRkcjogc3RhcnQgb2YgYWRkcmVzcyByYW5nZVxuLS1cbm1tL2d1cC5jLTIxMTYtICovXG5tbS9ndXAuYzoyMTE3OnNpemVfdCBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZShjb25zdCBjaGFyIF9fdXNlciAqdWFkZHIsIHNpemVfdCBzaXplKVxubW0vZ3VwLmMtMjExOC17XG4tLVxubW0vZ3VwLmMtMjEzOC19XG5tbS9ndXAuYzoyMTM5OkVYUE9SVF9TWU1CT0woZmF1bHRfaW5fc2FmZV93cml0ZWFibGUpO1xubW0vZ3VwLmMtMjE0MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNTMKCQkJCQkJCW91dHB1dDogMTM5CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkFuYWx5emluZyB0aGUgTWVtb3J5IEZhdWx0IFNjZW5hcmlvKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSAqaXNuJiMzOTt0KiBkaXJlY3RseSByZWxhdGVkIHRvIGBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZWAuIFRoZSBjYWxsIHRoZXJlIHRvIGBmaXh1cF91c2VyX2ZhdWx0YCB1c2VzIGAmYW1wO3VubG9ja2VkYCwgdGhlIGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlLCBzbyB0aGF0JiMzOTtzIG5vdCB0aGUgcHJvYmxlbS4KCk15IGZvY3VzIGhhcyB0byBiZSBvbiBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgLiBUaGUgcm9vdCBjYXVzZSBoaW5nZXMgb24gYSB2ZXJ5IHNwZWNpZmljIGNvbmRpdGlvbjogYHVubG9ja2VkYCBiZWluZyBhIE5VTEwgcG9pbnRlciwgcmlnaHQ/IFRoYXQmIzM5O3MgdGhlIHZ1bG5lcmFiaWxpdHkgd2UmIzM5O3JlIHRyeWluZyB0byBuYWlsIGRvd24uCgpPa2F5LCB0aW1lIHRvIHN3aXRjaCBnZWFycy4gSSYjMzk7bGwgdXNlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgdW5jb3ZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpeHVwX3VzZXJfZmF1bHQmIzM0OywKICAgICYjMzQ7ZmF1bHRfaW5fdXNlcl93cml0ZWFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGZpeHVwX3VzZXJfZmF1bHRgIHdoZW4gdGhlIGB1bmxvY2tlZGAgcGFyYW1ldGVyIGlzIE5VTEwuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBOVUxMIGB1bmxvY2tlZGAgcG9pbnRlciBieSBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgIGluIHRoZSBmdXRleCBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBmdXRleCBzeXNjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIGtlcm5lbCBjcmFzaCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVURVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaXh1cF91c2VyX2ZhdWx0JiMzNDssCiAgICAmIzM0O2ZhdWx0X2luX3VzZXJfd3JpdGVhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBmaXh1cF91c2VyX2ZhdWx0YCB3aGVuIHRoZSBgdW5sb2NrZWRgIHBhcmFtZXRlciBpcyBOVUxMLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgTlVMTCBgdW5sb2NrZWRgIHBvaW50ZXIgYnkgYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgZnV0ZXggc3lzY2FsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBrZXJuZWwgY3Jhc2ggYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBgdW5sb2NrZWQgIT0gTlVMTGAgYmVmb3JlIGRlcmVmZXJlbmNpbmcgaXQuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyAocGFnZSBmYXVsdHMpIG9yIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMmM3NzU1NmYxZjFjNTdlOWEyZGFhMzM5M2U5NDJkOGMyNTA1M2NkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMDc6MDY6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9ndXAuYyBiL21tL2d1cC5jCmluZGV4IDA2OTIxMTliNzkwNDMuLmQxMjQ3NWE3ZjdjY2IgMTAwNjQ0Ci0tLSBhL21tL2d1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2d1cC5jCkBAIC0xNTk0LDcgJiM0MzsxNTk0LDggQEAgaW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCSAqIGNvdWxkIHRlbGwgdGhlIGNhbGxlcnMgc28gdGhleSBkbyBub3QgbmVlZCB0byB1bmxvY2suCiAJCSAqLwogCQltbWFwX3JlYWRfbG9jayhtbSk7Ci0JCSp1bmxvY2tlZCA9IHRydWU7CiYjNDM7CQlpZiAodW5sb2NrZWQpCiYjNDM7CQkJKnVubG9ja2VkID0gdHJ1ZTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjA4LDcgJiM0MzsxNjA5LDggQEAgaW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAKIAlpZiAocmV0ICZhbXA7IFZNX0ZBVUxUX1JFVFJZKSB7CiAJCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQkJKnVubG9ja2VkID0gdHJ1ZTsKJiM0MzsJCWlmICh1bmxvY2tlZCkKJiM0MzsJCQkqdW5sb2NrZWQgPSB0cnVlOwogCQlmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1RSSUVEOwogCQlnb3RvIHJldHJ5OwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjkKCQkJCQkJCW91dHB1dDogMTA4CgkJCQkJCQl0aG91Z2h0czogMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgZml4LCBmb2N1c2luZyBvbiBgbW0vZ3VwLmNgIGFuZCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIHRoZSBgZml4dXBfdXNlcl9mYXVsdGAgZnVuY3Rpb24uIEl0JiMzOTtzIGEgc2ltcGxlIGFkZGl0aW9uIG9mIGEgTlVMTCBjaGVjayBmb3IgdGhlIGB1bmxvY2tlZGAgcG9pbnRlciBiZWZvcmUgdGhlIGRlcmVmZXJlbmNlLgoKYGBgYwotCQkqdW5sb2NrZWQgPSB0cnVlOwomIzQzOwkJaWYgKHVubG9ja2VkKQomIzQzOwkJCSp1bmxvY2tlZCA9IHRydWU7CmBgYAoKRXNzZW50aWFsbHksIHdlJiMzOTtyZSBndWFyZGluZyBhZ2FpbnN0IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlc2UgYXJlIHVzdWFsbHkgY2F1Z2h0IGJ5IHRoZSBleGlzdGluZyBrZXJuZWwgbWVjaGFuaXNtcyAocGFnZSBmYXVsdHMgb24gYWRkcmVzcyAwKSwgYW5kIEtBU0FOIHdvdWxkIGFsc28gZmxhZyBhbnkgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMsIHNvIHRoaXMgaXMgYWJvdXQgcm9idXN0bmVzcyByYXRoZXIgdGhhbiBleHBvc2luZyBuZXcgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZWl0aGVyLgoKTGV0IG1lIGp1c3QgcXVpY2tseSByZS1leGFtaW5lIHRoZSBwYXRjaCBhZ2FpbiB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZzoKCmBgYGMKQEAgLTE1OTQsNyAmIzQzOzE1OTQsOCBAQCBpbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJICogY291bGQgdGVsbCB0aGUgY2FsbGVycyBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIHVubG9jay4KIAkJICovCiAJCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQkJKnVubG9ja2VkID0gdHJ1ZTsKJiM0MzsJCWlmICh1bmxvY2tlZCkKJiM0MzsJCQkqdW5sb2NrZWQgPSB0cnVlOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE2MDgsNyAmIzQzOzE2MDksOCBAQCBpbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAogCWlmIChyZXQgJmFtcDsgVk1fRkFVTFRfUkVUUlkpIHsKIAkJbW1hcF9yZWFkX2xvY2sobW0pOwotCQkqdW5sb2NrZWQgPSB0cnVlOwomIzQzOwkJaWYgKHVubG9ja2VkKQomIzQzOwkJCSp1bmxvY2tlZCA9IHRydWU7CiAJCWZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfVFJJRUQ7CiAJCWdvdG8gcmV0cnk7CiAJfQpgYGAKClllcCwgaXQmIzM5O3MgY2xlYXI6IGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gS01TQU4gY29uY2VybnMuIFRoZXJlZm9yZSwgSSYjMzk7bSBtYXJraW5nIHRoaXMgYXMgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGB1bmxvY2tlZCAhPSBOVUxMYCBiZWZvcmUgZGVyZWZlcmVuY2luZyBpdC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChwYWdlIGZhdWx0cykgb3IgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGB1bmxvY2tlZCAhPSBOVUxMYCBiZWZvcmUgZGVyZWZlcmVuY2luZyBpdC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChwYWdlIGZhdWx0cykgb3IgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA2OjUyLjcwNzg4NzQwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4NDYxMDMxNDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZml4dXBfdXNlcl9mYXVsdFwiLFxuICAgIFwiZmF1bHRfaW5fdXNlcl93cml0ZWFibGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBieSBhZGRpbmcgYSBjaGVjayBmb3IgYHVubG9ja2VkICE9IE5VTExgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIGl0LiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKHBhZ2UgZmF1bHRzKSBvciBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgZml4dXBfdXNlcl9mYXVsdGAgd2hlbiB0aGUgYHVubG9ja2VkYCBwYXJhbWV0ZXIgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIE5VTEwgYHVubG9ja2VkYCBwb2ludGVyIGJ5IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGZ1dGV4IHN5c2NhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEga2VybmVsIGNyYXNoIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowNjo1Mi43MDc4OTQwOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTMzNTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMyYzc3NTU2ZjFmMWM1N2U5YTJkYWEzMzkzZTk0MmQ4YzI1MDUzY2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDc6MDY6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZ3VwLmMgYi9tbS9ndXAuY1xcbmluZGV4IDA2OTIxMTliNzkwNDMuLmQxMjQ3NWE3ZjdjY2IgMTAwNjQ0XFxuLS0tIGEvbW0vZ3VwLmNcXG4rKysgYi9tbS9ndXAuY1xcbkBAIC0xNTk0LDcgKzE1OTQsOCBAQCBpbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0ICogY291bGQgdGVsbCB0aGUgY2FsbGVycyBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIHVubG9jay5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0XFx0KnVubG9ja2VkID0gdHJ1ZTtcXG4rXFx0XFx0aWYgKHVubG9ja2VkKVxcbitcXHRcXHRcXHQqdW5sb2NrZWQgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG5AQCAtMTYwOCw3ICsxNjA5LDggQEAgaW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcbiBcXHRpZiAocmV0IFxcdTAwMjYgVk1fRkFVTFRfUkVUUlkpIHtcXG4gXFx0XFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbi1cXHRcXHQqdW5sb2NrZWQgPSB0cnVlO1xcbitcXHRcXHRpZiAodW5sb2NrZWQpXFxuK1xcdFxcdFxcdCp1bmxvY2tlZCA9IHRydWU7XFxuIFxcdFxcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfVFJJRUQ7XFxuIFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDY6NTMuNDI4MTMzMzA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzkyMTU3MDcxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaXh1cF91c2VyX2ZhdWx0XCIsXG4gICAgXCJmYXVsdF9pbl91c2VyX3dyaXRlYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBmaXh1cF91c2VyX2ZhdWx0YCB3aGVuIHRoZSBgdW5sb2NrZWRgIHBhcmFtZXRlciBpcyBOVUxMLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgTlVMTCBgdW5sb2NrZWRgIHBvaW50ZXIgYnkgYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgZnV0ZXggc3lzY2FsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBrZXJuZWwgY3Jhc2ggYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMyYzc3NTU2ZjFmMWM1N2U5YTJkYWEzMzkzZTk0MmQ4YzI1MDUzY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwNzowNjo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmNcbmluZGV4IDA2OTIxMTliNzkwNDMuLmQxMjQ3NWE3ZjdjY2IgMTAwNjQ0XG4tLS0gYS9tbS9ndXAuY1xuKysrIGIvbW0vZ3VwLmNcbkBAIC0xNTk0LDcgKzE1OTQsOCBAQCBpbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0ICogY291bGQgdGVsbCB0aGUgY2FsbGVycyBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIHVubG9jay5cbiBcdFx0ICovXG4gXHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdFx0KnVubG9ja2VkID0gdHJ1ZTtcbitcdFx0aWYgKHVubG9ja2VkKVxuK1x0XHRcdCp1bmxvY2tlZCA9IHRydWU7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTE2MDgsNyArMTYwOSw4IEBAIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFxuIFx0aWYgKHJldCBcdTAwMjYgVk1fRkFVTFRfUkVUUlkpIHtcbiBcdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuK1x0XHRpZiAodW5sb2NrZWQpXG4rXHRcdFx0KnVubG9ja2VkID0gdHJ1ZTtcbiBcdFx0ZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19UUklFRDtcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA2OjUzLjQyODEzNTk3N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzE3MTI4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkFuYWx5emluZyBhIEdVUCBQYXRjaDogRGVmZW5zaXZlIFByb2dyYW1taW5nIGluIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyB0aGVyZSdzIGEgcGF0Y2ggdG91Y2hpbmcgYG1tL2d1cC5jYC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBjaGVjayDigJMgYGlmICh1bmxvY2tlZClgIOKAkyBiZWZvcmUgZGVyZWZlcmVuY2luZyB0aGUgYHVubG9ja2VkYCB2YXJpYWJsZSB3aXRoaW4gdGhlIGBmaXh1cF91c2VyX2ZhdWx0KClgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgYSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZS4gV2UncmUgdGFsa2luZyBhYm91dCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBhbnkgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyBjb3VsZCBsZWFkIHRvICpuYXN0eSoga2VybmVsIHBhbmljcyBvciwgd29yc2UsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQncyBnb29kIHRoYXQgd2UncmUgYmVpbmcgY2FyZWZ1bCBoZXJlLlxuXG5MZXQncyBkaXZlIGludG8gYGZpeHVwX3VzZXJfZmF1bHQoKWAgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2h5IGlzIGB1bmxvY2tlZGAgcG90ZW50aWFsbHkgbnVsbD8gV2hhdCBhcmUgdGhlIHNjZW5hcmlvcyB0aGF0IGNvdWxkIGxlYWQgdG8gdGhpcz8gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbiBiZWluZyBhZGRyZXNzZWQ/IEtub3dpbmcgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYGZpeHVwX3VzZXJfZmF1bHQoKWAgaXMgaW52b2tlZCBpcyBjcnVjaWFsLiBJIHN1c3BlY3QgdGhlcmUncyBhIHN1YnRsZSBpbnRlcmFjdGlvbiB3aXRoIGxvY2tzLCBwZXJoYXBzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgb3IgcG9zc2libHkgYSByYWNlIGNvbmRpdGlvbiBpbiBob3cgdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQuIEkgd291bGQgd2FudCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpZiB0aGUgY2hlY2sgaXM6XG5cbiogICAqKlJvYnVzdDoqKiBEb2VzIGl0IGNvdmVyICphbGwqIHBvdGVudGlhbCBudWxsIGRlcmVmZXJlbmNlIGNhc2VzPyBJcyBpdCB0aGUgY29ycmVjdCBjb25kaXRpb24sIG9yIGlzIGl0IG92ZXJseSBhZ2dyZXNzaXZlIGFuZCBjb3VsZCBwcmV2ZW50IGxlZ2l0aW1hdGUgbG9ja2luZyBzY2VuYXJpb3M/XG4qICAgKipDb3JyZWN0OioqIEFyZSB0aGVyZSBhbnkgc2lkZSBlZmZlY3RzIGZyb20gdGhpcyBhZGRlZCBjaGVjayBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZXk/XG4qICAgKipDb21wbGV0ZToqKiBXYXMgdGhlcmUgYW55IHRlc3RpbmcgYXJvdW5kIHRoaXMgcGF0Y2g/IEFyZSB0aGVyZSBhbnkgdGVzdGNhc2VzIHRoYXQgdGVzdCB0aGUgcG90ZW50aWFsIGZvciB0aGlzIHNjZW5hcmlvP1xuXG5JJ2xsIG5lZWQgdG8gcmVhZCB0aGUgY29kZSBjYXJlZnVsbHkgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgcHJvYmxlbSB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIHNvbHZlIGFuZCBob3cgZWZmZWN0aXZlbHkgaXQgYWRkcmVzc2VzIGl0LiBEZWZlbnNpdmUgcHJvZ3JhbW1pbmcgaXMgY29tbWVuZGFibGUsIGJ1dCB0aGUgZml4IG5lZWRzIHRvIGJlIHNvdW5kLCBub3QganVzdCBhIGJhbmQtYWlkLiBBbHNvLCBJJ2Qgd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSByZWxldmFudCBsb2NrIHN0cnVjdHVyZXMgdG8gYmUgc3VyZSB0aGF0IHRoZSBjaGFuZ2UgaXMgY29ycmVjdCBmb3IgYWxsIHBvc3NpYmxlIGxvY2tpbmcgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDY6NTcuOTU5ODUxODkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDk0OTM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaXh1cF91c2VyX2ZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2d1cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2d1cC5jPTE1MTI9c3RhdGljIGJvb2wgdm1hX3Blcm1pdHNfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ndXAuYy0xNTM1LS8qKlxcbm1tL2d1cC5jOjE1MzY6ICogZml4dXBfdXNlcl9mYXVsdCgpIC0gbWFudWFsbHkgcmVzb2x2ZSBhIHVzZXIgcGFnZSBmYXVsdFxcbm1tL2d1cC5jLTE1MzctICogQG1tOlxcdFxcdG1tX3N0cnVjdCBvZiB0YXJnZXQgbW1cXG4tLVxcbm1tL2d1cC5jLTE1NjMtICovXFxubW0vZ3VwLmM6MTU2NDppbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5tbS9ndXAuYy0xNTY1LVxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MsXFxuLS1cXG5tbS9ndXAuYy0xNjE5LX1cXG5tbS9ndXAuYzoxNjIwOkVYUE9SVF9TWU1CT0xfR1BMKGZpeHVwX3VzZXJfZmF1bHQpO1xcbm1tL2d1cC5jLTE2MjEtXFxuLS1cXG5tbS9ndXAuYz0yMTE3PXNpemVfdCBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZShjb25zdCBjaGFyIF9fdXNlciAqdWFkZHIsIHNpemVfdCBzaXplKVxcbi0tXFxubW0vZ3VwLmMtMjEzMC1cXHRmb3IgKGN1ciA9IHN0YXJ0OyBjdXIgXFx1MDAyNlxcdTAwMjYgY3VyIFxcdTAwM2MgZW5kOyBjdXIgPSBQQUdFX0FMSUdOX0RPV04oY3VyICsgUEFHRV9TSVpFKSlcXG5tbS9ndXAuYzoyMTMxOlxcdFxcdGlmIChmaXh1cF91c2VyX2ZhdWx0KG1tLCBjdXIsIEZBVUxUX0ZMQUdfV1JJVEUsIFxcdTAwMjZ1bmxvY2tlZCkpXFxubW0vZ3VwLmMtMjEzMi1cXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDY6NTguNDQwODA3NzkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NzQzMzQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBGYXVsdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoZSBmaXggc2VlbXMgdG8gYmUgd2l0aGluIGBmaXh1cF91c2VyX2ZhdWx0KClgLiBMZXQncyBkaWcgaW4gYSBiaXQgZGVlcGVyLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbiBpcyBqdXN0IGEgbG9jYWwgaGVscGVyIG9yIGlmIGl0J3MgcG90ZW50aWFsbHkgZXhwb3NlZCBmb3IgdXNlIGJ5IG90aGVyIG1vZHVsZXMgb3IgZXZlbiB0aGUgYnJvYWRlciBrZXJuZWwuIEFoLCB5ZXMsIGl0J3MgZXhwb3J0ZWQgdmlhIGBFWFBPUlRfU1lNQk9MX0dQTChmaXh1cF91c2VyX2ZhdWx0KWAuIFRoYXQgdGVsbHMgbWUgaXQncyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgZXh0ZXJuYWxseSwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzIGhlcmUuIE5vdyB0aGUgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIGFsbCB0aGUgY2FsbHMgdG8gYGZpeHVwX3VzZXJfZmF1bHQoKWAgdG8gZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIGFsbCB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCB1c2VzIGFuZCBzaWRlIGVmZmVjdHMgb2YgYW55IGNoYW5nZXMgSSBtYWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTc0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6MDIuMzk4MjQ1MzYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODc5MzQzNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZml4dXBfdXNlcl9mYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuYz00Nj1TWVNDQUxMX0RFRklORTMoYXJjX3Vzcl9jbXB4Y2hnLCBpbnQgX191c2VyICosIHVhZGRyLCBpbnQsIGV4cGVjdGVkLCBpbnQsIG5ldylcXG4tLVxcbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmMtOTMtXFx0bW1hcF9yZWFkX2xvY2soY3VycmVudC1cXHUwMDNlbW0pO1xcbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmM6OTQ6XFx0cmV0ID0gZml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVxcdTAwM2VtbSwgKHVuc2lnbmVkIGxvbmcpIHVhZGRyLFxcbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmMtOTUtXFx0XFx0XFx0ICAgICAgIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpO1xcbi0tXFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jPTEyOD1TWVNDQUxMX0RFRklORTMoczM5MF9wY2lfbW1pb193cml0ZSwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxcbi0tXFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTE4NC1cXHRpZiAocmV0KSB7XFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jOjE4NTpcXHRcXHRmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXFx1MDAzZW1tLCBtbWlvX2FkZHIsIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpO1xcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0xODYtXFx0XFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncyk7XFxuLS1cXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmM9MjgzPVNZU0NBTExfREVGSU5FMyhzMzkwX3BjaV9tbWlvX3JlYWQsIHVuc2lnbmVkIGxvbmcsIG1taW9fYWRkcixcXG4tLVxcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0zMzYtXFx0aWYgKHJldCkge1xcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYzozMzc6XFx0XFx0Zml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVxcdTAwM2VtbSwgbW1pb19hZGRyLCAwLCBOVUxMKTtcXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMzM4LVxcdFxcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz01NDA9c3RhdGljIGludCBmb2xsb3dfZmF1bHRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNTUwLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6NTUxOlxcdFxcdHJldCA9IGZpeHVwX3VzZXJfZmF1bHQobW0sIHZhZGRyLFxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNTUyLVxcdFxcdFxcdFxcdCAgICAgICBGQVVMVF9GTEFHX1JFTU9URSB8XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzE3OD1leHRlcm4gdm1fZmF1bHRfdCBoYW5kbGVfbW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMzE4MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MzE4MTpleHRlcm4gaW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9tbS5oLTMxODItXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMxODk9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IGhhbmRsZV9tbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0zMTk2LX1cXG5pbmNsdWRlL2xpbnV4L21tLmg6MzE5NzpzdGF0aWMgaW5saW5lIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMxOTgtXFx0XFx0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzLCBib29sICp1bmxvY2tlZClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9NzM4PWludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcilcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtNzQzLVxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjc0NDpcXHRyZXQgPSBmaXh1cF91c2VyX2ZhdWx0KG1tLCAodW5zaWduZWQgbG9uZyl1YWRkcixcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTc0NS1cXHRcXHRcXHQgICAgICAgRkFVTFRfRkxBR19XUklURSwgTlVMTCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3VzZXIuYz00MzU9c3RhdGljIGludCB1c2VyX2V2ZW50X21tX2ZhdWx0X2luKHN0cnVjdCB1c2VyX2V2ZW50X21tICptbSwgdW5zaWduZWQgbG9uZyB1YWRkcixcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfdXNlci5jLTQ1NS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3VzZXIuYzo0NTY6XFx0cmV0ID0gZml4dXBfdXNlcl9mYXVsdChtbS1cXHUwMDNlbW0sIHVhZGRyLCBGQVVMVF9GTEFHX1dSSVRFIHwgRkFVTFRfRkxBR19SRU1PVEUsXFxua2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c191c2VyLmMtNDU3LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2dW5sb2NrZWQpO1xcbi0tXFxubW0vZ3VwLmM9MTUxMj1zdGF0aWMgYm9vbCB2bWFfcGVybWl0c19mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2d1cC5jLTE1MzUtLyoqXFxubW0vZ3VwLmM6MTUzNjogKiBmaXh1cF91c2VyX2ZhdWx0KCkgLSBtYW51YWxseSByZXNvbHZlIGEgdXNlciBwYWdlIGZhdWx0XFxubW0vZ3VwLmMtMTUzNy0gKiBAbW06XFx0XFx0bW1fc3RydWN0IG9mIHRhcmdldCBtbVxcbi0tXFxubW0vZ3VwLmMtMTU2My0gKi9cXG5tbS9ndXAuYzoxNTY0OmludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL2d1cC5jLTE1NjUtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBmYXVsdF9mbGFncyxcXG4tLVxcbm1tL2d1cC5jLTE2MTktfVxcbm1tL2d1cC5jOjE2MjA6RVhQT1JUX1NZTUJPTF9HUEwoZml4dXBfdXNlcl9mYXVsdCk7XFxubW0vZ3VwLmMtMTYyMS1cXG4tLVxcbm1tL2d1cC5jPTIxMTc9c2l6ZV90IGZhdWx0X2luX3NhZmVfd3JpdGVhYmxlKGNvbnN0IGNoYXIgX191c2VyICp1YWRkciwgc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9ndXAuYy0yMTMwLVxcdGZvciAoY3VyID0gc3RhcnQ7IGN1ciBcXHUwMDI2XFx1MDAyNiBjdXIgXFx1MDAzYyBlbmQ7IGN1ciA9IFBBR0VfQUxJR05fRE9XTihjdXIgKyBQQUdFX1NJWkUpKVxcbm1tL2d1cC5jOjIxMzE6XFx0XFx0aWYgKGZpeHVwX3VzZXJfZmF1bHQobW0sIGN1ciwgRkFVTFRfRkxBR19XUklURSwgXFx1MDAyNnVubG9ja2VkKSlcXG5tbS9ndXAuYy0yMTMyLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yOTM5PXN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk2MC1cXHRcXHRib29sIHVubG9ja2VkID0gZmFsc2U7XFxudmlydC9rdm0va3ZtX21haW4uYzoyOTYxOlxcdFxcdHIgPSBmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXFx1MDAzZW1tLCBrZnAtXFx1MDAzZWh2YSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NjItXFx0XFx0XFx0XFx0ICAgICAod3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjA0Ljg4NjE5MDk5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MzE5NDU4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIGFkZHJlc3MgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBmaXggaW52b2x2ZXMgYWRkaW5nIGEgY2hlY2ssIGBpZiAodW5sb2NrZWQpYCwgYmVmb3JlIHRoZSBkZXJlZmVyZW5jZSBvZiBgdW5sb2NrZWRgIHdpdGhpbiB0aGUgYGZpeHVwX3VzZXJfZmF1bHQoKWAgZnVuY3Rpb24uIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIHByb3RlY3QgYWdhaW5zdCBhY2Nlc3NpbmcgYSBiYWQgcG9pbnRlci4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBrbm93IHRoYXQgZnVuY3Rpb24gdGFrZXMgYSBgYm9vbCAqdW5sb2NrZWRgLiBBbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyBzb21ldGhpbmcgZmVlbHMgYSBsaXR0bGUgb2ZmLi4uXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSBteSBzdXNwaWNpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGZpeHVwX3VzZXJfZmF1bHQoKWAgaXMgYmVpbmcgKnVzZWQqLiBBIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBjaGVjayBpcyBpbiBvcmRlci4gTG9va2luZyBhdCBgYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuY2AsIGl0J3MgY2FsbGVkIHdpdGggYE5VTExgIGZvciB0aGF0IGFyZ3VtZW50LiBBbmQgYWdhaW4gaW4gYGFyY2gvczM5MC9wY2kvcGNpX21taW8uY2AsIHNhbWUgZGVhbCwgaXQncyBgTlVMTGAuIEFuZCBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIGFnYWluLCB0aGUgdmFsdWUgcGFzc2VkIHRvIGB1bmxvY2tlZGAgaXMgYE5VTExgISBTbyB0aGUgZml4IGludHJvZHVjZXMgdGhlIGNoZWNrLCB3aGljaCBsaWtlbHkgaGFuZGxlcyB0aGUgTlVMTCBwb2ludGVyLCBhbmQgYXZvaWRzIHRoZSBjcmFzaC4gTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hlcmUgaXMgdGhlIHByb2JsZW1hdGljIGNhbGw/IExldCdzIGNoZWNrIGluIGBkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjEwLjYxODEzOTQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4Njg3MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpeHVwX3VzZXJfZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTU0MD1zdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTAtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo1NTE6XFx0XFx0cmV0ID0gZml4dXBfdXNlcl9mYXVsdChtbSwgdmFkZHIsXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTItXFx0XFx0XFx0XFx0ICAgICAgIEZBVUxUX0ZMQUdfUkVNT1RFIHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6MTAuNjg2ODMyMzE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxNjExNzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgdmZpb19pb21tdV90eXBlMS5jIENvZGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoaXMgaXNzdWUuIExldCdzIHN0YXJ0IHdpdGggYSBzcGVjaWZpYyBwb2ludCBvZiBpbnRlcmVzdC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGB2ZmlvX2lvbW11X3R5cGUxLmNgIOKAkyBhIGZhbWlsaWFyIHBpZWNlIG9mIHRoZSBwdXp6bGUuIFNwZWNpZmljYWxseSwgSSdtIGRpcmVjdGluZyBteSBhdHRlbnRpb24gdG8gbGluZSA1NTEuIFRoYXQgbGluZSB1c3VhbGx5IGhvbGRzIGEga2V5IHBpZWNlIG9mIHRoZSBtZWNoYW5pc20gSSdtIGludGVyZXN0ZWQgaW4sIHdoaWNoIEknbSBzdXJlIHdpbGwgZGlyZWN0IHRoZSBuZXh0IHN0ZXBzIHRvIGRpYWdub3NlIHRoZSBpc3N1ZS4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuIEl0J3MgdGltZSB0byBnZXQgaGFuZHMtb24gYW5kIHRyYWNlIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTAyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6MTQuMDAyOTUyODc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0MDpcXHRzdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiA1NDE6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgKnBmbixcXG4gNTQyOlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICphZGRyX21hc2ssIGJvb2wgd3JpdGVfZmF1bHQpXFxuIDU0MzpcXHR7XFxuIDU0NDpcXHRcXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gdmFkZHIgfTtcXG4gNTQ1OlxcdFxcdGludCByZXQ7XFxuIDU0NjpcXHRcXG4gNTQ3OlxcdFxcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbiA1NDg6XFx0XFx0aWYgKHJldCkge1xcbiA1NDk6XFx0XFx0XFx0Ym9vbCB1bmxvY2tlZCA9IGZhbHNlO1xcbiA1NTA6XFx0XFxuIDU1MTpcXHRcXHRcXHRyZXQgPSBmaXh1cF91c2VyX2ZhdWx0KG1tLCB2YWRkcixcXG4gNTUyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBGQVVMVF9GTEFHX1JFTU9URSB8XFxuIDU1MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgKHdyaXRlX2ZhdWx0ID8gIEZBVUxUX0ZMQUdfV1JJVEUgOiAwKSxcXG4gNTU0OlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2dW5sb2NrZWQpO1xcbiA1NTU6XFx0XFx0XFx0aWYgKHVubG9ja2VkKVxcbiA1NTY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIDU1NzpcXHRcXG4gNTU4OlxcdFxcdFxcdGlmIChyZXQpXFxuIDU1OTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowNzoxNC4wMDMyMzg0NDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwMjQ3ODQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqTXkgRnV0ZXggTXVzaW5ncyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIGRpdmluZyBpbnRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCwgdGhlIGhlYXJ0IG9mIHRoZSBmdXRleCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGJlIHNoYXJwIGhlcmU7IGEgbWlzc3RlcCBpbiBmdXRleCBtYW5hZ2VtZW50IGNhbiBsZWFkIHRvIHNvbWUgdHJ1bHkgbmFzdHkgY29uY3VycmVuY3kgYnVncy4gRmlyc3QsIEknbSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgZGVzaWduIOKAkyBob3cgZG8gd2UgZW5zdXJlIGVmZmljaWVudCBhbmQgcmVsaWFibGUgc3luY2hyb25pemF0aW9uIGJldHdlZW4gcHJvY2Vzc2VzIGFuZCB0aHJlYWRzPyBUaGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgbGlrZSB0aGUgZnV0ZXggd2FpdCBxdWV1ZXMgYW5kIHRoZSBhc3NvY2lhdGVkIGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgd2hhdCBJIHdhbnQgdG8gZGVlcGx5IHVuZGVyc3RhbmQsIHRvIGtub3cgaG93IHRvIHNvbHZlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGluIHRoaXMgY29kZS5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYW5hbHl6ZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBzY2hlZHVsZXI7IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGEgcHJvY2VzcyB3YWl0aW5nIG9uIGEgZnV0ZXggYW5kIGJlaW5nIHdva2VuIHVwIGlzIGFsd2F5cyBhIGNyaXRpY2FsIHBvaW50LiBJJ20gZm9jdXNpbmcgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSBgZnV0ZXhfd2FpdGAgYW5kIGBmdXRleF93YWtlYCBmdW5jdGlvbnMuIFdoYXQgYXJlIHRoZSBrZXkgYXRvbWljIG9wZXJhdGlvbnM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGRpZmZlcmVudCB3YWl0IG1vZGVzPyBVbmRlcnN0YW5kaW5nIHRoZXNlIGRldGFpbHMgaXMga2V5LlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBxdWVzdGlvbiBvZiBwcmlvcml0eSBpbmhlcml0YW5jZSwgZXNwZWNpYWxseSBhcyBpdCByZWxhdGVzIHRvIGZ1dGV4ZXMuIEhvdyBkb2VzIHRoZSBrZXJuZWwgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgaGlnaC1wcmlvcml0eSB0aHJlYWQgaXMgYmxvY2tlZCBvbiBhIGZ1dGV4IGhlbGQgYnkgYSBsb3dlci1wcmlvcml0eSB0aHJlYWQ/IEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGluaGVyaXRhbmNlIGxvZ2ljIGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHByaW9yaXR5IGludmVyc2lvbiBwcm9ibGVtcy4gSSB3aWxsIGJlIGxvb2tpbmcgdG8gc2VlIHdoZXJlIHRoZSBkYXRhIGFuZCBsb2NrcyBhcmUsIGFuZCB0cnkgdG8gdmlzdWFsaXplIHRoZW0gYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMuXG5cbkZpbmFsbHksIEknbSBhbHdheXMgbG9va2luZyBmb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbnMuIEFyZSB0aGVyZSBhbnkgdW5uZWNlc3NhcnkgYXRvbWljIG9wZXJhdGlvbnM/IENhbiB0aGUgd2FpdCBxdWV1ZSBtYW5hZ2VtZW50IGJlIGltcHJvdmVkPyBJcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHNwdXJpb3VzIHdha2V1cHM/IFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgbXkgb3duIGlkZWFzLiBNeSBtYWluIGdvYWwgaXMgdG8gc2VlIHRoaXMgY29kZSBhdCBhbGwgbGV2ZWxzLCBhbmQgZmluZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDUyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowNzoxOC42MDU3MjE3MDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzM4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzM4OlxcdGludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcilcXG4gNzM5OlxcdHtcXG4gNzQwOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cXHUwMDNlbW07XFxuIDc0MTpcXHRcXHRpbnQgcmV0O1xcbiA3NDI6XFx0XFxuIDc0MzpcXHRcXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuIDc0NDpcXHRcXHRyZXQgPSBmaXh1cF91c2VyX2ZhdWx0KG1tLCAodW5zaWduZWQgbG9uZyl1YWRkcixcXG4gNzQ1OlxcdFxcdFxcdFxcdCAgICAgICBGQVVMVF9GTEFHX1dSSVRFLCBOVUxMKTtcXG4gNzQ2OlxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbiA3NDc6XFx0XFxuIDc0ODpcXHRcXHRyZXR1cm4gcmV0IFxcdTAwM2MgMCA/IHJldCA6IDA7XFxuIDc0OTpcXHR9XFxuIDc1MDpcXHRcXG4gNzUxOlxcdC8qKlxcbiA3NTI6XFx0ICogZnV0ZXhfdG9wX3dhaXRlcigpIC0gUmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IHdhaXRlciBvbiBhIGZ1dGV4XFxuIDc1MzpcXHQgKiBAaGI6XFx0XFx0dGhlIGhhc2ggYnVja2V0IHRoZSBmdXRleF9xJ3MgcmVzaWRlIGluXFxuIDc1NDpcXHQgKiBAa2V5OlxcdHRoZSBmdXRleCBrZXkgKHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gb3RoZXIgZnV0ZXggZnV0ZXhfcSdzKVxcbiA3NTU6XFx0ICpcXG4gNzU2OlxcdCAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGhiIGxvY2sgaGVsZC5cXG4gNzU3OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowNzoxOC42MDU4OTEzNjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2MTA2NzQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGFsYXJtIGJlbGxzIGFyZSBnb2luZyBvZmYuIEl0IHNlZW1zIGxpa2UgYGtlcm5lbC9mdXRleC9jb3JlLmNgIGNhbGxzIGBmaXh1cF91c2VyX2ZhdWx0YCB3aXRoIGEgYE5VTExgIHZhbHVlIGZvciB0aGUgYHVubG9ja2VkYCBwb2ludGVyLiBUaGF0J3MgYSBjbGFzc2ljIHJlY2lwZSBmb3IgZGlzYXN0ZXIuIFRoZSByZWFsIHByb2JsZW0gaXMsIGlmIGBmaXh1cF91c2VyX2ZhdWx0YCByZXR1cm5zIGBWTV9GQVVMVF9SRVRSWWAsIGl0J3MgZ29pbmcgdG8gdHJ5IHRvIGRlcmVmZXJlbmNlIHRoYXQgYE5VTExgIHBvaW50ZXIgYW5kIGJvb20g4oCTIGEgY3Jhc2guIFRoaXMgaXMgZGVmaW5pdGVseSBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcuIENvbnNpZGVyaW5nIHRoZSBpbXBhY3Qgb2Ygc3VjaCBhIHZ1bG5lcmFiaWxpdHksIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuTXkgdGhpbmtpbmcgaXMgdGhhdCB0aGUgY3JpdGljYWwgZnVuY3Rpb24sIGBmaXh1cF91c2VyX2ZhdWx0YCwgaXMgZGVmaW5lZCBpbiBgbW0vZ3VwLmNgLiBUaGUgcmVhbCBzd2VldCBzcG90LCB0aG91Z2gsIGFwcGVhcnMgdG8gYmUgdGhlIGNhbGxlcjogYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCwgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwtY2hhaW4uIEkgc2hvdWxkIGNoZWNrIHdoZXJlIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaXMgY2FsbGVkIGZyb20gYXMgd2VsbCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgcGF0aHMgdG8gaW52ZXN0aWdhdGUuIFRoaXMgY291bGQgYmUgYSBuaWNlIGVhc3kgdGFyZ2V0IHRvIHdvcmsgd2l0aCBmb3IgZnV6emluZywgb3IgbGVhZCB0byBvdGhlciBtb3JlIGludGVyZXN0aW5nIGZsYXdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzg4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6MjUuMjY2OTYxODEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI0OTY1NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhdWx0X2luX3VzZXJfd3JpdGVhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTUwMj1pbnQgZ2V0X2Z1dGV4X2tleSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtNzI2LS8qKlxcbmtlcm5lbC9mdXRleC9jb3JlLmM6NzI3OiAqIGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKCkgLSBGYXVsdCBpbiB1c2VyIGFkZHJlc3MgYW5kIHZlcmlmeSBSVyBhY2Nlc3NcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTcyOC0gKiBAdWFkZHI6XFx0cG9pbnRlciB0byBmYXVsdGluZyB1c2VyIHNwYWNlIGFkZHJlc3NcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtNzM3LSAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6NzM4OmludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcilcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTczOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTk2OD1zdGF0aWMgaW50IGhhbmRsZV9mdXRleF9kZWF0aCh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLFxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMDU0LVxcdFxcdGNhc2UgLUVGQVVMVDpcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjEwNTU6XFx0XFx0XFx0aWYgKGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKHVhZGRyKSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEwNTYtXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9Mjg1PWV4dGVybiB2b2lkIGZ1dGV4X3dha2VfbWFyayhzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI4Ni1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyODc6ZXh0ZXJuIGludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcik7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjg4LWV4dGVybiBzdHJ1Y3QgZnV0ZXhfcSAqZnV0ZXhfdG9wX3dhaXRlcihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLCB1bmlvbiBmdXRleF9rZXkgKmtleSk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYz02NzQ9c3RhdGljIGludCBfX2ZpeHVwX3BpX3N0YXRlX293bmVyKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfcSAqcSxcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jLTgwMC1cXHRjYXNlIC1FRkFVTFQ6XFxua2VybmVsL2Z1dGV4L3BpLmM6ODAxOlxcdFxcdGVyciA9IGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKHVhZGRyKTtcXG5rZXJuZWwvZnV0ZXgvcGkuYy04MDItXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy04MjctXFx0LypcXG5rZXJuZWwvZnV0ZXgvcGkuYzo4Mjg6XFx0ICogZmF1bHRfaW5fdXNlcl93cml0ZWFibGUoKSBmYWlsZWQgc28gdXNlciBzdGF0ZSBpcyBpbW11dGFibGUuIEF0XFxua2VybmVsL2Z1dGV4L3BpLmMtODI5LVxcdCAqIGJlc3Qgd2UgY2FuIG1ha2UgdGhlIGtlcm5lbCBzdGF0ZSBjb25zaXN0ZW50IGJ1dCB1c2VyIHN0YXRlIHdpbGxcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jPTkyMz1pbnQgZnV0ZXhfbG9ja19waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCBrdGltZV90ICp0aW1lLCBpbnQgdHJ5bG9jaylcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jLTExMTctXFxua2VybmVsL2Z1dGV4L3BpLmM6MTExODpcXHRcXHRyZXQgPSBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1YWRkcik7XFxua2VybmVsL2Z1dGV4L3BpLmMtMTExOS1cXHRcXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmM9MTE0MT1zdGF0aWMgaW50IF9fZnV0ZXhfdW5sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMjk3LVxcbmtlcm5lbC9mdXRleC9waS5jOjEyOTg6XFx0cmV0ID0gZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodWFkZHIpO1xcbmtlcm5lbC9mdXRleC9waS5jLTEyOTktXFx0aWYgKCFyZXQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTM4Mj1pbnQgZnV0ZXhfcmVxdWV1ZSh1MzIgX191c2VyICp1YWRkcjEsIHVuc2lnbmVkIGludCBmbGFnczEsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTU2My1cXHRcXHRcXHRcXHRkb3VibGVfdW5sb2NrX2hiKGhiMSwgaGIyKTtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjU2NDpcXHRcXHRcXHRcXHRyZXQgPSBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1YWRkcjIpO1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNTY1LVxcdFxcdFxcdFxcdGlmICghcmV0KVxcbi0tXFxua2VybmVsL2Z1dGV4L3dhaXR3YWtlLmM9Mjc4PWludCBmdXRleF93YWtlX29wKHUzMiBfX3VzZXIgKnVhZGRyMSwgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgX191c2VyICp1YWRkcjIsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvd2FpdHdha2UuYy0zMTYtXFx0XFx0XFx0aWYgKG9wX3JldCA9PSAtRUZBVUxUKSB7XFxua2VybmVsL2Z1dGV4L3dhaXR3YWtlLmM6MzE3OlxcdFxcdFxcdFxcdHJldCA9IGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKHVhZGRyMik7XFxua2VybmVsL2Z1dGV4L3dhaXR3YWtlLmMtMzE4LVxcdFxcdFxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjI3Ljg5MTkzMzQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjE3NzY5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIFBhdGhzKipcblxuT2theSwgc28gYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpcyBjbGVhcmx5IGEgY3JpdGljYWwgZnVuY3Rpb24sIGNvbnNpZGVyaW5nIHRoZSBudW1iZXIgb2YgY29yZSBhcmVhcyBpdCB0b3VjaGVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIGEgdGhvcm91Z2ggbG9vay1vdmVyLiBJdCdzIGNhbGxlZCBmcm9tIHNldmVyYWwga2V5IGZ1dGV4IG9wZXJhdGlvbnMg4oCTIGBmdXRleF9sb2NrX3BpYCwgYF9fZnV0ZXhfdW5sb2NrX3BpYCwgYGZ1dGV4X3JlcXVldWVgLCBhbmQgYGZ1dGV4X3dha2Vfb3BgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGJlaW5nIGludGVydHdpbmVkIHdpdGggdGhlIGZ1bmRhbWVudGFsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHdpdGhpbiB0aGUga2VybmVsLCBhbmQgdGhlcmVmb3JlLCBwb3RlbnRpYWxseSBzZWN1cml0eS1zZW5zaXRpdmUuIEl0J3MgZGlyZWN0bHkgcmVhY2hhYmxlIHZpYSB0aGUgYGZ1dGV4YCBzeXNjYWxsIHdoaWNoIHJhaXNlcyBhIGZldyBmbGFncy4gVGhpcyBhcmVhIGlzIGtub3duIGZvciBiZWluZyB0cmlja3kgdG8gZ2V0IHJpZ2h0LCBhbmQgZXZlbiBhIHN1YnRsZSBidWcgaGVyZSBjb3VsZCBoYXZlIHdpZGVzcHJlYWQgY29uc2VxdWVuY2VzLlxuXG5CZXlvbmQgdGhhdCwgdGhlIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGluIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZSBmb3IgQVJDIGFuZCBTMzkwLCBhbmQgbW9yZSBzdXJwcmlzaW5nbHksIGluIFBDSSBkcml2ZXJzIGxpa2UgYHZmaW9faW9tbXVfdHlwZTFgIGFuZCB0aGUgS1ZNIG1haW4gY29kZS4gVGhpcyBkZWZpbml0ZWx5IGFkZHMgdG8gdGhlIG15c3RlcnkgYW5kIHRoZSBzY2FsZSBvZiB3aGVyZSB0aGlzIGNhbiBwb3RlbnRpYWxseSBjcmVhdGUgcHJvYmxlbXMuXG5cbkxldCdzIGJlZ2luIGJ5IGZvY3VzaW5nIG9uIHRoZSBLVk0gc2lkZSBvZiB0aGluZ3MuIEl0J3MgdGltZSB0byBjaGVjayBgdmlydC9rdm0va3ZtX21haW4uY2AgbGluZSAyOTYxLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgYW5kIHdoYXQgdGhlIGNvbnRleHQgaXMuIEl0IHdpbGwgbGlrZWx5IGdpdmUgc29tZSBjbHVlcyBhcyB0byB0aGUgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgYSBmYXVsdCBvY2N1cnJpbmcgaW4gdGhhdCBzcGVjaWZpYyBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzU0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjMzLjM1MzcxNDk3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTA3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTUwOlxcdFxcdCAqL1xcbjI5NTE6XFx0XFx0aWYgKGtmcC1cXHUwMDNlcGluIFxcdTAwMjZcXHUwMDI2ICFhbGxvd191bnNhZmVfbWFwcGluZ3MpXFxuMjk1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yOTUzOlxcdFxcbjI5NTQ6XFx0XFx0ciA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbjI5NTU6XFx0XFx0aWYgKHIpIHtcXG4yOTU2OlxcdFxcdFxcdC8qXFxuMjk1NzpcXHRcXHRcXHQgKiBnZXRfdXNlcl9wYWdlcyBmYWlscyBmb3IgVk1fSU8gYW5kIFZNX1BGTk1BUCB2bWFzIGFuZCBkb2VzXFxuMjk1ODpcXHRcXHRcXHQgKiBub3QgY2FsbCB0aGUgZmF1bHQgaGFuZGxlciwgc28gZG8gaXQgaGVyZS5cXG4yOTU5OlxcdFxcdFxcdCAqL1xcbjI5NjA6XFx0XFx0XFx0Ym9vbCB1bmxvY2tlZCA9IGZhbHNlO1xcbjI5NjE6XFx0XFx0XFx0ciA9IGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cXHUwMDNlbW0sIGtmcC1cXHUwMDNlaHZhLFxcbjI5NjI6XFx0XFx0XFx0XFx0XFx0ICAgICAod3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXFxuMjk2MzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ1bmxvY2tlZCk7XFxuMjk2NDpcXHRcXHRcXHRpZiAodW5sb2NrZWQpXFxuMjk2NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4yOTY2OlxcdFxcdFxcdGlmIChyKVxcbjI5Njc6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuMjk2ODpcXHRcXG4yOTY5OlxcdFxcdFxcdHIgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6MzMuMzU0MTMwNzA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwODU3ODIxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gS2VybmVsIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGJ1ZyByZXBvcnQgYW5kIHRoZSBjb2RlIHNuaXBwZXRzIGFyZSBwb2ludGluZyBtZSB0b3dhcmQgc29tZSBpbnRlcmVzdGluZyBhcmVhcy4gSXQgbG9va3MgbGlrZSB0aGUgYHVubG9ja2VkYCBhcmd1bWVudCwgd2hpY2ggaXMgY2xlYXJseSBhIHBvaW50ZXIsIGlzIGJlaW5nIHBhc3NlZCBpbiBjb25zaXN0ZW50bHkgYXMgYSBub24tTlVMTCB2YWx1ZSBpbiBzZXZlcmFsIGtleSBLVk0gYW5kIFZGSU8gY29udGV4dHMg4oCTIHNwZWNpZmljYWxseSB3aXRoaW4gYGt2bV9tYWluLmNgIGFuZCBgdmZpb19pb21tdV90eXBlMS5jYCwgcmVzcGVjdGl2ZWx5LiBIb3dldmVyLCB3aGVuIGV4YW1pbmluZyBgZnV0ZXhgIHN5c2NhbGwgaW1wbGVtZW50YXRpb25zIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCwgYXMgd2VsbCBhcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBmb3IgQVJDIGFuZCBzMzkwIHByb2Nlc3NvcnMgKGkuZS4gYGFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmNgIGFuZCBgYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jYCksIGl0J3MgYmVpbmcgcGFzc2VkIGFzIE5VTEwuXG5cblRoYXQncyBhIGdsYXJpbmcgaW5jb25zaXN0ZW5jeSwgd2hpY2ggc3VnZ2VzdHMgdGhpcyBidWcgaXMgbGlrZWx5IHRyaWdnZXJlZCBkdXJpbmcgdGhvc2Ugc3BlY2lmaWMgc3lzY2FsbHMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBgZnV0ZXhgLiBUaGUgcmVwb3J0IHNwZWNpZmljYWxseSBtZW50aW9ucyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aXRoaW4gYGZpeHVwX3VzZXJfZmF1bHRgLiBHaXZlbiB0aGF0LCBteSBpbml0aWFsIGh5cG90aGVzaXMgaXMgc3BvdCBvbiwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIGRlc2NyaXB0aW9uIGluZGljYXRlcyB0aGlzIGZpeCBpcyB0YXJnZXRlZCBhdCBgZml4dXBfdXNlcl9mYXVsdGAgaXRzZWxmLiBUaGlzIG5hdHVyYWxseSBtYWtlcyBgZml4dXBfdXNlcl9mYXVsdGAgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEFsc28sIGl0J3Mgd29ydGggY2hlY2tpbmcgYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpbnNpZGUgYGtlcm5lbC9mdXRleC9jb3JlLmNgIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBzaWRlIGVmZmVjdHMgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBpZGVudGlmaWVkIGlzc3VlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZpeHVwX3VzZXJfZmF1bHRgIGl0c2VsZi4gSSBuZWVkIHRvIGNoZWNrIGBtbS9ndXAuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24gYW5kIGhvdyB0aGF0IHBvaW50ZXIgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjM5LjQzOTkxNjI5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZ3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU5MDpcXHRcXHRpZiAocmV0IFxcdTAwMjYgVk1fRkFVTFRfQ09NUExFVEVEKSB7XFxuMTU5MTpcXHRcXHRcXHQvKlxcbjE1OTI6XFx0XFx0XFx0ICogTk9URTogaXQncyBhIHBpdHkgdGhhdCB3ZSBuZWVkIHRvIHJldGFrZSB0aGUgbG9jayBoZXJlXFxuMTU5MzpcXHRcXHRcXHQgKiB0byBwYWlyIHdpdGggdGhlIHVubG9jaygpIGluIHRoZSBjYWxsZXJzLiBJZGVhbGx5IHdlXFxuMTU5NDpcXHRcXHRcXHQgKiBjb3VsZCB0ZWxsIHRoZSBjYWxsZXJzIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gdW5sb2NrLlxcbjE1OTU6XFx0XFx0XFx0ICovXFxuMTU5NjpcXHRcXHRcXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuMTU5NzpcXHRcXHRcXHRpZiAodW5sb2NrZWQpXFxuMTU5ODpcXHRcXHRcXHRcXHQqdW5sb2NrZWQgPSB0cnVlO1xcbjE1OTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTYwMDpcXHRcXHR9XFxuMTYwMTpcXHRcXG4xNjAyOlxcdFxcdGlmIChyZXQgXFx1MDAyNiBWTV9GQVVMVF9FUlJPUikge1xcbjE2MDM6XFx0XFx0XFx0aW50IGVyciA9IHZtX2ZhdWx0X3RvX2Vycm5vKHJldCwgMCk7XFxuMTYwNDpcXHRcXG4xNjA1OlxcdFxcdFxcdGlmIChlcnIpXFxuMTYwNjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE2MDc6XFx0XFx0XFx0QlVHKCk7XFxuMTYwODpcXHRcXHR9XFxuMTYwOTpcXHRcXG4xNjEwOlxcdFxcdGlmIChyZXQgXFx1MDAyNiBWTV9GQVVMVF9SRVRSWSkge1xcbjE2MTE6XFx0XFx0XFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbjE2MTI6XFx0XFx0XFx0aWYgKHVubG9ja2VkKVxcbjE2MTM6XFx0XFx0XFx0XFx0KnVubG9ja2VkID0gdHJ1ZTtcXG4xNjE0OlxcdFxcdFxcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfVFJJRUQ7XFxuMTYxNTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjE2MTY6XFx0XFx0fVxcbjE2MTc6XFx0XFxuMTYxODpcXHRcXHRyZXR1cm4gMDtcXG4xNjE5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6MzkuNDQwMTQwODc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNDMzNDQ5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHNpdHVhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gYGZpeHVwX3VzZXJfZmF1bHRgIHJldHVybnMgYFZNX0ZBVUxUX0NPTVBMRVRFRGAgb3IgYFZNX0ZBVUxUX1JFVFJZYCBhbmQgdGhlIGB1bmxvY2tlZGAgcG9pbnRlciBpcyBudWxsLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBhYnNvbHV0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZyBhdHRlbnRpb24uXG5cbk15IG1haW4gZm9jdXMgcmlnaHQgbm93IGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgZml4dXBfdXNlcl9mYXVsdGAgZnVuY3Rpb24gaXRzZWxmLCBuYXR1cmFsbHksIGFuZCBhbHNvIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdCB0byB0cmlnZ2VyIHRoaXMgdnVsbmVyYWJpbGl0eS5cblxuRnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUsIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIHBhcnRpY3VsYXJseSBzcGVjaWZpYyB0aGF0IGp1bXBzIG91dC4gSSBzZWUgYGZ1dGV4YCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCwgYW5kIGBtbS9ndXAuY2AgaXMgY29yZSBrZXJuZWwgY29kZSwgc28gdGhpcyBzaG91bGQgYmUgcmVhZGlseSBhY2Nlc3NpYmxlLlxuXG5MZXQgbWUgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuIElzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBBaCwgZ29vZCwgaXTigJlzIG5vdC4gSXQncyBhY3R1YWxseSBleHBvcnRlZCBpbiBga2VybmVsL2Z1dGV4L2Z1dGV4LmhgIGFuZCBkZWZpbmVkIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gV2FpdCBhIHNlY29uZOKApiBldmVuIHRob3VnaCBpdCdzIGV4cG9ydGVkLCBpdCdzIG5vdCBleHBvcnRlZCB0byBtb2R1bGVzLCB5ZXQgaXQgaXMgYSBnbG9iYWwgc3ltYm9sLCBJIHNob3VsZCBjb25maXJtIHdoYXQgdGhpcyBtZWFucyBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AuIEdvdCBpdCwgbm93IHRvIGxvb2sgYXQgdGhhdCBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjE3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6NDQuNTgzNDg4MDc0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTIzMTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTUwMj1pbnQgZ2V0X2Z1dGV4X2tleSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtNzM3LSAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6NzM4OmludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcilcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTczOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjQ0LjY4MjcyNjUxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1OTQ3ODQxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYGZpeHVwX3VzZXJfZmF1bHRgIGFuZCBQb3RlbnRpYWwgSXNzdWVzKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgZml4dXBfdXNlcl9mYXVsdGAg4oCTIGNvbmZpcm1lZCwgaXQncyBhIGdsb2JhbCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBzZWUgd2hlcmUgZWxzZSBpdCdzIGJlaW5nIGNhbGxlZCwgc3BlY2lmaWNhbGx5LCBhcmUgdGhlcmUgYW55IGluc3RhbmNlcyB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCB3aXRoIGEgTlVMTCBhcmd1bWVudCwgd2hpY2ggY291bGQgc2lnbmFsIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgZmV3IGFyY2gtc3BlY2lmaWMgc3lzY2FsbHMgYXJlIGNhbGxpbmcgaXQ6IGBzMzkwX3BjaV9tbWlvX3dyaXRlYCBhbmQgYHMzOTBfcGNpX21taW9fcmVhZGAgaW4gYGFyY2gvczM5MC9wY2kvcGNpX21taW8uY2AgYW5kIGBhcmNfdXNyX2NtcHhjaGdgIGluIGBhcmNoL2FyYy9rZXJuZWwvcHJvY2Vzcy5jYC4gVGhlc2UgYXJlIGludGVyZXN0aW5nLCBidXQgdGhlIG1haW4gb25lIHRoYXQgc3RhbmRzIG91dCB0byBtZSBpcyBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgIGxvY2F0ZWQgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgLiBUaGlzIGlzIHRoZSBvbmUgSSB3YW50IHRvIGZvY3VzIG9uLlxuXG5HaXZlbiB0aGVzZSBmaW5kaW5ncywgSeKAmW0gZ29pbmcgdG8gbWFrZSBhIG5vdGUgdG8gYWRkIGJvdGggYGZpeHVwX3VzZXJfZmF1bHRgIGFuZCBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgIHRvIGBGb2N1c1N5bWJvbHNgLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBvdmVydmlldyBvZiB0aGVzZSwgZXNwZWNpYWxseSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBmdXRleCBjb2RlLlxuXG5GaW5hbGx5LCBJ4oCZbGwgcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCBmdXRleC4gSSBiZWxpZXZlIGBDT05GSUdfRlVURVhgIGlzIGdlbmVyYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBJJ2xsIGRvdWJsZS1jaGVjayB0aGlzIHRvIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCByZWxhdGVkIHRvIHRoZSBrZXJuZWwncyBmdXRleCBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6NTIuMjc3NTE1NTg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDM1Njc4NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZVVEVYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTgyNz1jb25maWcgQkFTRV9TTUFMTFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4MzMtXFxuaW5pdC9LY29uZmlnOjE4MzQ6Y29uZmlnIEZVVEVYXFxuaW5pdC9LY29uZmlnLTE4MzUtXFx0Ym9vbCBcXFwiRW5hYmxlIGZ1dGV4IHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDMtXFxuaW5pdC9LY29uZmlnOjE4NDQ6Y29uZmlnIEZVVEVYX1BJXFxuaW5pdC9LY29uZmlnLTE4NDUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDgtXFxuaW5pdC9LY29uZmlnOjE4NDk6Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbmluaXQvS2NvbmZpZy0xODUwLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xODUzLVxcbmluaXQvS2NvbmZpZzoxODU0OmNvbmZpZyBGVVRFWF9NUE9MXFxuaW5pdC9LY29uZmlnLTE4NTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnPTE4NTk9Y29uZmlnIEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xcbi0tXFxuaW5pdC9LY29uZmlnLTE4NjEtXFxuaW5pdC9LY29uZmlnOjE4NjI6Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcXG5pbml0L0tjb25maWctMTg2My1cXHRkZWZfYm9vbCBGVVRFWCBcXHUwMDI2XFx1MDAyNiBIQVZFX0dFTkVSSUNfVkRTTyBcXHUwMDI2XFx1MDAyNiBHRU5FUklDX0lSUV9FTlRSWSBcXHUwMDI2XFx1MDAyNiBSU0VRIFxcdTAwMjZcXHUwMDI2IEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowNzo1Mi41ODEwODk3NzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYwOTgwNzM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgS2VybmVsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIGBDT05GSUdfRlVURVhgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIE5vIG5lZWQgdG8gd29ycnkgYWJvdXQgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHRlc3QuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGNhbGxzIHRvIGBmaXh1cF91c2VyX2ZhdWx0YCB3aXRoIGEgTlVMTCBhcmd1bWVudC4gSSd2ZSBmb3VuZCBhIGNvdXBsZSBvZiB0aGVzZTogYGZhdWx0X2luX3NhZmVfd3JpdGVhYmxlYCBpbiBgbW0vZ3VwLmNgIGFuZCBgdXNlcl9ldmVudF9tbV9mYXVsdF9pbmAgaW4gYGtlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfdXNlci5jYC4gSG93ZXZlciwgaXQgc2VlbXMgdGhlIG1haW4gb25lIGlzIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuXG5cblRoZXJlZm9yZSwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgZml4dXBfdXNlcl9mYXVsdGAgYW5kIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuIEp1c3QgdG8gYmUgc2FmZSwgSSdsbCBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGBGVVRFWGAgZXZlbiB0aG91Z2ggaXQncyBhbHJlYWR5IG9uIGJ5IGRlZmF1bHQuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgRlVURVhgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG5hbWXigKZZZXMsIGBDT05GSUdfRlVURVhgIGl0IGlzLlxuXG5PbmUgbGFzdCB0aGluZywgbGV0J3MgdmVyaWZ5IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaXMgdGhlIG9ubHkgb25lLiBXaGF0IGFib3V0IHRoZSBvdGhlciByZWxhdGVkIGNhbGxzPyBgZmF1bHRfaW5fdXNlcl9yZWFkYWJsZWA/IERvZXMgaXQgZXhpc3Q/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzY1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjU5LjE5MDg5OTQ1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3OTY4Nzc0MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmF1bHRfaW5fdXNlcl9yZWFkYWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA4OjAxLjc3MDU5NDQyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM0MTMxMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFNhZmVndWFyZCoqXG5cbk5vLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBUaGlua2luZyBhYm91dCB0aGF0IGFwcHJvYWNoIGlzbid0IGdvaW5nIHRvIGdldCBtZSB0aGVyZS5cblxuV2FpdC4uLiB3aGF0IGFib3V0IGBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZWA/IFRoYXQgaGFzIHBvc3NpYmlsaXRpZXMuIE1heWJlIGV4YW1pbmluZyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgY29uY2VwdCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgaXNzdWUgSSdtIHdvcmtpbmcgdGhyb3VnaC4gSXQncyB3b3J0aCBkaWdnaW5nIGludG8gdGhhdCBhbmdsZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMzNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA4OjA0LjgwNDcyODk1OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2OTIzODg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZ2ZzMi9pbm9kZS5jPTIxOTc9c3RhdGljIGJvb2wgZmF1bHRfaW5fZmllbWFwKHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gKmZpKVxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jLTIyMDEtXFxuZnMvZ2ZzMi9pbm9kZS5jOjIyMDI6XFx0cmV0dXJuIGZhdWx0X2luX3NhZmVfd3JpdGVhYmxlKChjaGFyIF9fdXNlciAqKWRlc3QsIHNpemUpID09IDA7XFxuZnMvZ2ZzMi9pbm9kZS5jLTIyMDMtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTI3OT1zaXplX3QgZmF1bHRfaW5fc3VicGFnZV93cml0ZWFibGUoY2hhciBfX3VzZXIgKnVhZGRyLCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTI4MDpzaXplX3QgZmF1bHRfaW5fc2FmZV93cml0ZWFibGUoY29uc3QgY2hhciBfX3VzZXIgKnVhZGRyLCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTI4MS1zaXplX3QgZmF1bHRfaW5fcmVhZGFibGUoY29uc3QgY2hhciBfX3VzZXIgKnVhZGRyLCBzaXplX3Qgc2l6ZSk7XFxuLS1cXG5saWIvaW92X2l0ZXIuYz0xNDU9c2l6ZV90IGZhdWx0X2luX2lvdl9pdGVyX3dyaXRlYWJsZShjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmksIHNpemVfdCBzaXplKVxcbi0tXFxubGliL2lvdl9pdGVyLmMtMTQ4LVxcdFxcdHNpemVfdCBuID0gbWluKHNpemUsIGlvdl9pdGVyX2NvdW50KGkpKTtcXG5saWIvaW92X2l0ZXIuYzoxNDk6XFx0XFx0biAtPSBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZShpLVxcdTAwM2V1YnVmICsgaS1cXHUwMDNlaW92X29mZnNldCwgbik7XFxubGliL2lvdl9pdGVyLmMtMTUwLVxcdFxcdHJldHVybiBzaXplIC0gbjtcXG4tLVxcbmxpYi9pb3ZfaXRlci5jLTE2Mi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5saWIvaW92X2l0ZXIuYzoxNjM6XFx0XFx0XFx0cmV0ID0gZmF1bHRfaW5fc2FmZV93cml0ZWFibGUocC1cXHUwMDNlaW92X2Jhc2UgKyBza2lwLCBsZW4pO1xcbmxpYi9pb3ZfaXRlci5jLTE2NC1cXHRcXHRcXHRjb3VudCAtPSBsZW4gLSByZXQ7XFxuLS1cXG5tbS9ndXAuYz0yMDk3PUVYUE9SVF9TWU1CT0woZmF1bHRfaW5fc3VicGFnZV93cml0ZWFibGUpO1xcbi0tXFxubW0vZ3VwLmMtMjA5OS0vKlxcbm1tL2d1cC5jOjIxMDA6ICogZmF1bHRfaW5fc2FmZV93cml0ZWFibGUgLSBmYXVsdCBpbiBhbiBhZGRyZXNzIHJhbmdlIGZvciB3cml0aW5nXFxubW0vZ3VwLmMtMjEwMS0gKiBAdWFkZHI6IHN0YXJ0IG9mIGFkZHJlc3MgcmFuZ2VcXG4tLVxcbm1tL2d1cC5jLTIxMTYtICovXFxubW0vZ3VwLmM6MjExNzpzaXplX3QgZmF1bHRfaW5fc2FmZV93cml0ZWFibGUoY29uc3QgY2hhciBfX3VzZXIgKnVhZGRyLCBzaXplX3Qgc2l6ZSlcXG5tbS9ndXAuYy0yMTE4LXtcXG4tLVxcbm1tL2d1cC5jLTIxMzgtfVxcbm1tL2d1cC5jOjIxMzk6RVhQT1JUX1NZTUJPTChmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZSk7XFxubW0vZ3VwLmMtMjE0MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDg6MDcuMTczOTczNjk2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjc5Mzc1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipBbmFseXppbmcgdGhlIE1lbW9yeSBGYXVsdCBTY2VuYXJpbyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGlzc3VlICppc24ndCogZGlyZWN0bHkgcmVsYXRlZCB0byBgZmF1bHRfaW5fc2FmZV93cml0ZWFibGVgLiBUaGUgY2FsbCB0aGVyZSB0byBgZml4dXBfdXNlcl9mYXVsdGAgdXNlcyBgXHUwMDI2dW5sb2NrZWRgLCB0aGUgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUsIHNvIHRoYXQncyBub3QgdGhlIHByb2JsZW0uXG5cbk15IGZvY3VzIGhhcyB0byBiZSBvbiBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgLiBUaGUgcm9vdCBjYXVzZSBoaW5nZXMgb24gYSB2ZXJ5IHNwZWNpZmljIGNvbmRpdGlvbjogYHVubG9ja2VkYCBiZWluZyBhIE5VTEwgcG9pbnRlciwgcmlnaHQ/IFRoYXQncyB0aGUgdnVsbmVyYWJpbGl0eSB3ZSdyZSB0cnlpbmcgdG8gbmFpbCBkb3duLlxuXG5Pa2F5LCB0aW1lIHRvIHN3aXRjaCBnZWFycy4gSSdsbCB1c2UgYHNldC1yZXN1bHRzYCB0b29sIG5vdyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBMZXQncyBzZWUgd2hhdCB0aGF0IHVuY292ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE1MywiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowODoxMi41MDE5MTQ4NzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE5MjAyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZml4dXBfdXNlcl9mYXVsdFwiLFxuICAgIFwiZmF1bHRfaW5fdXNlcl93cml0ZWFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgZml4dXBfdXNlcl9mYXVsdGAgd2hlbiB0aGUgYHVubG9ja2VkYCBwYXJhbWV0ZXIgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIE5VTEwgYHVubG9ja2VkYCBwb2ludGVyIGJ5IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGZ1dGV4IHN5c2NhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEga2VybmVsIGNyYXNoIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZml4dXBfdXNlcl9mYXVsdFwiLFxuICAgIFwiZmF1bHRfaW5fdXNlcl93cml0ZWFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgZml4dXBfdXNlcl9mYXVsdGAgd2hlbiB0aGUgYHVubG9ja2VkYCBwYXJhbWV0ZXIgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIE5VTEwgYHVubG9ja2VkYCBwb2ludGVyIGJ5IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGZ1dGV4IHN5c2NhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEga2VybmVsIGNyYXNoIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowODoxMi42NDM4NDYyNzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjUwNjI4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowODoxMi42NDQ3MjIxOTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODUyNDE4MjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBgdW5sb2NrZWQgIT0gTlVMTGAgYmVmb3JlIGRlcmVmZXJlbmNpbmcgaXQuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyAocGFnZSBmYXVsdHMpIG9yIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMyYzc3NTU2ZjFmMWM1N2U5YTJkYWEzMzkzZTk0MmQ4YzI1MDUzY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwNzowNjo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmNcbmluZGV4IDA2OTIxMTliNzkwNDMuLmQxMjQ3NWE3ZjdjY2IgMTAwNjQ0XG4tLS0gYS9tbS9ndXAuY1xuKysrIGIvbW0vZ3VwLmNcbkBAIC0xNTk0LDcgKzE1OTQsOCBAQCBpbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0ICogY291bGQgdGVsbCB0aGUgY2FsbGVycyBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIHVubG9jay5cbiBcdFx0ICovXG4gXHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdFx0KnVubG9ja2VkID0gdHJ1ZTtcbitcdFx0aWYgKHVubG9ja2VkKVxuK1x0XHRcdCp1bmxvY2tlZCA9IHRydWU7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTE2MDgsNyArMTYwOSw4IEBAIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFxuIFx0aWYgKHJldCBcdTAwMjYgVk1fRkFVTFRfUkVUUlkpIHtcbiBcdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuK1x0XHRpZiAodW5sb2NrZWQpXG4rXHRcdFx0KnVubG9ja2VkID0gdHJ1ZTtcbiBcdFx0ZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19UUklFRDtcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA4OjEyLjY0NDcyMzgyMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTI0MTYyMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIGZvY3VzaW5nIG9uIGBtbS9ndXAuY2AgYW5kIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgdGhlIGBmaXh1cF91c2VyX2ZhdWx0YCBmdW5jdGlvbi4gSXQncyBhIHNpbXBsZSBhZGRpdGlvbiBvZiBhIE5VTEwgY2hlY2sgZm9yIHRoZSBgdW5sb2NrZWRgIHBvaW50ZXIgYmVmb3JlIHRoZSBkZXJlZmVyZW5jZS5cblxuYGBgY1xuLVx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuK1x0XHRpZiAodW5sb2NrZWQpXG4rXHRcdFx0KnVubG9ja2VkID0gdHJ1ZTtcbmBgYFxuXG5Fc3NlbnRpYWxseSwgd2UncmUgZ3VhcmRpbmcgYWdhaW5zdCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZXNlIGFyZSB1c3VhbGx5IGNhdWdodCBieSB0aGUgZXhpc3Rpbmcga2VybmVsIG1lY2hhbmlzbXMgKHBhZ2UgZmF1bHRzIG9uIGFkZHJlc3MgMCksIGFuZCBLQVNBTiB3b3VsZCBhbHNvIGZsYWcgYW55IGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBzbyB0aGlzIGlzIGFib3V0IHJvYnVzdG5lc3MgcmF0aGVyIHRoYW4gZXhwb3NpbmcgbmV3IHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBkb2Vzbid0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZWl0aGVyLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIHBhdGNoIGFnYWluIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmc6XG5cbmBgYGNcbkBAIC0xNTk0LDcgKzE1OTQsOCBAQCBpbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0ICogY291bGQgdGVsbCB0aGUgY2FsbGVycyBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIHVubG9jay5cbiBcdFx0ICovXG4gXHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdFx0KnVubG9ja2VkID0gdHJ1ZTtcbitcdFx0aWYgKHVubG9ja2VkKVxuK1x0XHRcdCp1bmxvY2tlZCA9IHRydWU7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTE2MDgsNyArMTYwOSw4IEBAIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFxuIFx0aWYgKHJldCBcdTAwMjYgVk1fRkFVTFRfUkVUUlkpIHtcbiBcdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuK1x0XHRpZiAodW5sb2NrZWQpXG4rXHRcdFx0KnVubG9ja2VkID0gdHJ1ZTtcbiBcdFx0ZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19UUklFRDtcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbmBgYFxuXG5ZZXAsIGl0J3MgY2xlYXI6IGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gS01TQU4gY29uY2VybnMuIFRoZXJlZm9yZSwgSSdtIG1hcmtpbmcgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjksIk91dHB1dFRva2VucyI6MTA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDg6MjEuMTY4ODg4MjI2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGB1bmxvY2tlZCAhPSBOVUxMYCBiZWZvcmUgZGVyZWZlcmVuY2luZyBpdC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChwYWdlIGZhdWx0cykgb3IgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBgdW5sb2NrZWQgIT0gTlVMTGAgYmVmb3JlIGRlcmVmZXJlbmNpbmcgaXQuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyAocGFnZSBmYXVsdHMpIG9yIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowqq28m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 06:50:06 +0000 UTC FinishedAt: 2026-08-26 07:08:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "8a9091052cc81caa5570835049c809da804baa3f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "8a9091052cc81caa5570835049c809da804baa3f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX" ], "series_id": "ff63c58c-393c-47d8-9728-43ff8039f5d4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "fixup_user_fault", "fault_in_user_writeable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zml4dXBfdXNlcl9mYXVsdCYjMzQ7LAogICAgJiMzNDtmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBieSBhZGRpbmcgYSBjaGVjayBmb3IgYHVubG9ja2VkICE9IE5VTExgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIGl0LiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKHBhZ2UgZmF1bHRzKSBvciBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGZpeHVwX3VzZXJfZmF1bHRgIHdoZW4gdGhlIGB1bmxvY2tlZGAgcGFyYW1ldGVyIGlzIE5VTEwuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBOVUxMIGB1bmxvY2tlZGAgcG9pbnRlciBieSBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgIGluIHRoZSBmdXRleCBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBmdXRleCBzeXNjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIGtlcm5lbCBjcmFzaCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMyYzc3NTU2ZjFmMWM1N2U5YTJkYWEzMzkzZTk0MmQ4YzI1MDUzY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwNzowNjo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ndXAuYyBiL21tL2d1cC5jXG5pbmRleCAwNjkyMTE5Yjc5MDQzLi5kMTI0NzVhN2Y3Y2NiIDEwMDY0NFxuLS0tIGEvbW0vZ3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2d1cC5jXG5AQCAtMTU5NCw3ICYjNDM7MTU5NCw4IEBAIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHQgKiBjb3VsZCB0ZWxsIHRoZSBjYWxsZXJzIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gdW5sb2NrLlxuIFx0XHQgKi9cbiBcdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuJiM0MztcdFx0aWYgKHVubG9ja2VkKVxuJiM0MztcdFx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC0xNjA4LDcgJiM0MzsxNjA5LDggQEAgaW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXG4gXHRpZiAocmV0IFx1MDAyNiBWTV9GQVVMVF9SRVRSWSkge1xuIFx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRcdCp1bmxvY2tlZCA9IHRydWU7XG4mIzQzO1x0XHRpZiAodW5sb2NrZWQpXG4mIzQzO1x0XHRcdCp1bmxvY2tlZCA9IHRydWU7XG4gXHRcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfVFJJRUQ7XG4gXHRcdGdvdG8gcmV0cnk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zml4dXBfdXNlcl9mYXVsdCYjMzQ7LAogICAgJiMzNDtmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgZml4dXBfdXNlcl9mYXVsdGAgd2hlbiB0aGUgYHVubG9ja2VkYCBwYXJhbWV0ZXIgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIE5VTEwgYHVubG9ja2VkYCBwb2ludGVyIGJ5IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGZ1dGV4IHN5c2NhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEga2VybmVsIGNyYXNoIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzJjNzc1NTZmMWYxYzU3ZTlhMmRhYTMzOTNlOTQyZDhjMjUwNTNjZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDA3OjA2OjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZ3VwLmMgYi9tbS9ndXAuYwppbmRleCAwNjkyMTE5Yjc5MDQzLi5kMTI0NzVhN2Y3Y2NiIDEwMDY0NAotLS0gYS9tbS9ndXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9ndXAuYwpAQCAtMTU5NCw3ICYjNDM7MTU5NCw4IEBAIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkgKiBjb3VsZCB0ZWxsIHRoZSBjYWxsZXJzIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gdW5sb2NrLgogCQkgKi8KIAkJbW1hcF9yZWFkX2xvY2sobW0pOwotCQkqdW5sb2NrZWQgPSB0cnVlOwomIzQzOwkJaWYgKHVubG9ja2VkKQomIzQzOwkJCSp1bmxvY2tlZCA9IHRydWU7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTYwOCw3ICYjNDM7MTYwOSw4IEBAIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCiAJaWYgKHJldCAmYW1wOyBWTV9GQVVMVF9SRVRSWSkgewogCQltbWFwX3JlYWRfbG9jayhtbSk7Ci0JCSp1bmxvY2tlZCA9IHRydWU7CiYjNDM7CQlpZiAodW5sb2NrZWQpCiYjNDM7CQkJKnVubG9ja2VkID0gdHJ1ZTsKIAkJZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19UUklFRDsKIAkJZ290byByZXRyeTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqQW5hbHl6aW5nIGEgR1VQIFBhdGNoOiBEZWZlbnNpdmUgUHJvZ3JhbW1pbmcgaW4gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBzbyB0aGVyZSYjMzk7cyBhIHBhdGNoIHRvdWNoaW5nIGBtbS9ndXAuY2AuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgYWRkaW5nIGEgY2hlY2sg4oCTIGBpZiAodW5sb2NrZWQpYCDigJMgYmVmb3JlIGRlcmVmZXJlbmNpbmcgdGhlIGB1bmxvY2tlZGAgdmFyaWFibGUgd2l0aGluIHRoZSBgZml4dXBfdXNlcl9mYXVsdCgpYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgbGlrZWx5IGEgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGFueSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGNvdWxkIGxlYWQgdG8gKm5hc3R5KiBrZXJuZWwgcGFuaWNzIG9yLCB3b3JzZSwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJdCYjMzk7cyBnb29kIHRoYXQgd2UmIzM5O3JlIGJlaW5nIGNhcmVmdWwgaGVyZS4KCkxldCYjMzk7cyBkaXZlIGludG8gYGZpeHVwX3VzZXJfZmF1bHQoKWAgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2h5IGlzIGB1bmxvY2tlZGAgcG90ZW50aWFsbHkgbnVsbD8gV2hhdCBhcmUgdGhlIHNjZW5hcmlvcyB0aGF0IGNvdWxkIGxlYWQgdG8gdGhpcz8gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbiBiZWluZyBhZGRyZXNzZWQ/IEtub3dpbmcgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYGZpeHVwX3VzZXJfZmF1bHQoKWAgaXMgaW52b2tlZCBpcyBjcnVjaWFsLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgYSBzdWJ0bGUgaW50ZXJhY3Rpb24gd2l0aCBsb2NrcywgcGVyaGFwcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIG9yIHBvc3NpYmx5IGEgcmFjZSBjb25kaXRpb24gaW4gaG93IHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkLiBJIHdvdWxkIHdhbnQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgdGhlIGNoZWNrIGlzOgoKKiAgICoqUm9idXN0OioqIERvZXMgaXQgY292ZXIgKmFsbCogcG90ZW50aWFsIG51bGwgZGVyZWZlcmVuY2UgY2FzZXM/IElzIGl0IHRoZSBjb3JyZWN0IGNvbmRpdGlvbiwgb3IgaXMgaXQgb3Zlcmx5IGFnZ3Jlc3NpdmUgYW5kIGNvdWxkIHByZXZlbnQgbGVnaXRpbWF0ZSBsb2NraW5nIHNjZW5hcmlvcz8KKiAgICoqQ29ycmVjdDoqKiBBcmUgdGhlcmUgYW55IHNpZGUgZWZmZWN0cyBmcm9tIHRoaXMgYWRkZWQgY2hlY2sgYW5kIGlmIHNvLCB3aGF0IGFyZSB0aGV5PwoqICAgKipDb21wbGV0ZToqKiBXYXMgdGhlcmUgYW55IHRlc3RpbmcgYXJvdW5kIHRoaXMgcGF0Y2g/IEFyZSB0aGVyZSBhbnkgdGVzdGNhc2VzIHRoYXQgdGVzdCB0aGUgcG90ZW50aWFsIGZvciB0aGlzIHNjZW5hcmlvPwoKSSYjMzk7bGwgbmVlZCB0byByZWFkIHRoZSBjb2RlIGNhcmVmdWxseSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBwcm9ibGVtIHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gc29sdmUgYW5kIGhvdyBlZmZlY3RpdmVseSBpdCBhZGRyZXNzZXMgaXQuIERlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBjb21tZW5kYWJsZSwgYnV0IHRoZSBmaXggbmVlZHMgdG8gYmUgc291bmQsIG5vdCBqdXN0IGEgYmFuZC1haWQuIEFsc28sIEkmIzM5O2Qgd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSByZWxldmFudCBsb2NrIHN0cnVjdHVyZXMgdG8gYmUgc3VyZSB0aGF0IHRoZSBjaGFuZ2UgaXMgY29ycmVjdCBmb3IgYWxsIHBvc3NpYmxlIGxvY2tpbmcgY29uZGl0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaXh1cF91c2VyX2ZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZ3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZ3VwLmM9MTUxMj1zdGF0aWMgYm9vbCB2bWFfcGVybWl0c19mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ndXAuYy0xNTM1LS8qKlxubW0vZ3VwLmM6MTUzNjogKiBmaXh1cF91c2VyX2ZhdWx0KCkgLSBtYW51YWxseSByZXNvbHZlIGEgdXNlciBwYWdlIGZhdWx0XG5tbS9ndXAuYy0xNTM3LSAqIEBtbTpcdFx0bW1fc3RydWN0IG9mIHRhcmdldCBtbVxuLS1cbm1tL2d1cC5jLTE1NjMtICovXG5tbS9ndXAuYzoxNTY0OmludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxubW0vZ3VwLmMtMTU2NS1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBmYXVsdF9mbGFncyxcbi0tXG5tbS9ndXAuYy0xNjE5LX1cbm1tL2d1cC5jOjE2MjA6RVhQT1JUX1NZTUJPTF9HUEwoZml4dXBfdXNlcl9mYXVsdCk7XG5tbS9ndXAuYy0xNjIxLVxuLS1cbm1tL2d1cC5jPTIxMTc9c2l6ZV90IGZhdWx0X2luX3NhZmVfd3JpdGVhYmxlKGNvbnN0IGNoYXIgX191c2VyICp1YWRkciwgc2l6ZV90IHNpemUpXG4tLVxubW0vZ3VwLmMtMjEzMC1cdGZvciAoY3VyID0gc3RhcnQ7IGN1ciBcdTAwMjZcdTAwMjYgY3VyIFx1MDAzYyBlbmQ7IGN1ciA9IFBBR0VfQUxJR05fRE9XTihjdXIgJiM0MzsgUEFHRV9TSVpFKSlcbm1tL2d1cC5jOjIxMzE6XHRcdGlmIChmaXh1cF91c2VyX2ZhdWx0KG1tLCBjdXIsIEZBVUxUX0ZMQUdfV1JJVEUsIFx1MDAyNnVubG9ja2VkKSlcbm1tL2d1cC5jLTIxMzItXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIEZhdWx0IEhhbmRsaW5nKioKCk9rYXksIHNvIHRoZSBmaXggc2VlbXMgdG8gYmUgd2l0aGluIGBmaXh1cF91c2VyX2ZhdWx0KClgLiBMZXQmIzM5O3MgZGlnIGluIGEgYml0IGRlZXBlci4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgZnVuY3Rpb24gaXMganVzdCBhIGxvY2FsIGhlbHBlciBvciBpZiBpdCYjMzk7cyBwb3RlbnRpYWxseSBleHBvc2VkIGZvciB1c2UgYnkgb3RoZXIgbW9kdWxlcyBvciBldmVuIHRoZSBicm9hZGVyIGtlcm5lbC4gQWgsIHllcywgaXQmIzM5O3MgZXhwb3J0ZWQgdmlhIGBFWFBPUlRfU1lNQk9MX0dQTChmaXh1cF91c2VyX2ZhdWx0KWAuIFRoYXQgdGVsbHMgbWUgaXQmIzM5O3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIGV4dGVybmFsbHksIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY2hhbmdlcyBoZXJlLiBOb3cgdGhlIG5leHQgc3RlcCBpcyB0byB0cmFjZSBhbGwgdGhlIGNhbGxzIHRvIGBmaXh1cF91c2VyX2ZhdWx0KClgIHRvIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyBhbGwgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgdXNlcyBhbmQgc2lkZSBlZmZlY3RzIG9mIGFueSBjaGFuZ2VzIEkgbWFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaXh1cF91c2VyX2ZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmM9NDY9U1lTQ0FMTF9ERUZJTkUzKGFyY191c3JfY21weGNoZywgaW50IF9fdXNlciAqLCB1YWRkciwgaW50LCBleHBlY3RlZCwgaW50LCBuZXcpXG4tLVxuYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuYy05My1cdG1tYXBfcmVhZF9sb2NrKGN1cnJlbnQtXHUwMDNlbW0pO1xuYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuYzo5NDpcdHJldCA9IGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cdTAwM2VtbSwgKHVuc2lnbmVkIGxvbmcpIHVhZGRyLFxuYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuYy05NS1cdFx0XHQgICAgICAgRkFVTFRfRkxBR19XUklURSwgTlVMTCk7XG4tLVxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jPTEyOD1TWVNDQUxMX0RFRklORTMoczM5MF9wY2lfbW1pb193cml0ZSwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxuLS1cbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0xODQtXHRpZiAocmV0KSB7XG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmM6MTg1Olx0XHRmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXHUwMDNlbW0sIG1taW9fYWRkciwgRkFVTFRfRkxBR19XUklURSwgTlVMTCk7XG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMTg2LVx0XHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuLS1cbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYz0yODM9U1lTQ0FMTF9ERUZJTkUzKHMzOTBfcGNpX21taW9fcmVhZCwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxuLS1cbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0zMzYtXHRpZiAocmV0KSB7XG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmM6MzM3Olx0XHRmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXHUwMDNlbW0sIG1taW9fYWRkciwgMCwgTlVMTCk7XG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMzM4LVx0XHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NTQwPXN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTAtXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU1MTpcdFx0cmV0ID0gZml4dXBfdXNlcl9mYXVsdChtbSwgdmFkZHIsXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU1Mi1cdFx0XHRcdCAgICAgICBGQVVMVF9GTEFHX1JFTU9URSB8XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTMxNzg9ZXh0ZXJuIHZtX2ZhdWx0X3QgaGFuZGxlX21tX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0zMTgwLVx0XHRcdFx0ICBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XG5pbmNsdWRlL2xpbnV4L21tLmg6MzE4MTpleHRlcm4gaW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L21tLmgtMzE4Mi1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTMxODk9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IGhhbmRsZV9tbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMzE5Ni19XG5pbmNsdWRlL2xpbnV4L21tLmg6MzE5NzpzdGF0aWMgaW5saW5lIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5pbmNsdWRlL2xpbnV4L21tLmgtMzE5OC1cdFx0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzLCBib29sICp1bmxvY2tlZClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTczOD1pbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy03NDMtXHRtbWFwX3JlYWRfbG9jayhtbSk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjc0NDpcdHJldCA9IGZpeHVwX3VzZXJfZmF1bHQobW0sICh1bnNpZ25lZCBsb25nKXVhZGRyLFxua2VybmVsL2Z1dGV4L2NvcmUuYy03NDUtXHRcdFx0ICAgICAgIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpO1xuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfdXNlci5jPTQzNT1zdGF0aWMgaW50IHVzZXJfZXZlbnRfbW1fZmF1bHRfaW4oc3RydWN0IHVzZXJfZXZlbnRfbW0gKm1tLCB1bnNpZ25lZCBsb25nIHVhZGRyLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfdXNlci5jLTQ1NS1cbmtlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfdXNlci5jOjQ1NjpcdHJldCA9IGZpeHVwX3VzZXJfZmF1bHQobW0tXHUwMDNlbW0sIHVhZGRyLCBGQVVMVF9GTEFHX1dSSVRFIHwgRkFVTFRfRkxBR19SRU1PVEUsXG5rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3VzZXIuYy00NTctXHRcdFx0ICAgICAgIFx1MDAyNnVubG9ja2VkKTtcbi0tXG5tbS9ndXAuYz0xNTEyPXN0YXRpYyBib29sIHZtYV9wZXJtaXRzX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2d1cC5jLTE1MzUtLyoqXG5tbS9ndXAuYzoxNTM2OiAqIGZpeHVwX3VzZXJfZmF1bHQoKSAtIG1hbnVhbGx5IHJlc29sdmUgYSB1c2VyIHBhZ2UgZmF1bHRcbm1tL2d1cC5jLTE1MzctICogQG1tOlx0XHRtbV9zdHJ1Y3Qgb2YgdGFyZ2V0IG1tXG4tLVxubW0vZ3VwLmMtMTU2My0gKi9cbm1tL2d1cC5jOjE1NjQ6aW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9ndXAuYy0xNTY1LVx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzLFxuLS1cbm1tL2d1cC5jLTE2MTktfVxubW0vZ3VwLmM6MTYyMDpFWFBPUlRfU1lNQk9MX0dQTChmaXh1cF91c2VyX2ZhdWx0KTtcbm1tL2d1cC5jLTE2MjEtXG4tLVxubW0vZ3VwLmM9MjExNz1zaXplX3QgZmF1bHRfaW5fc2FmZV93cml0ZWFibGUoY29uc3QgY2hhciBfX3VzZXIgKnVhZGRyLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9ndXAuYy0yMTMwLVx0Zm9yIChjdXIgPSBzdGFydDsgY3VyIFx1MDAyNlx1MDAyNiBjdXIgXHUwMDNjIGVuZDsgY3VyID0gUEFHRV9BTElHTl9ET1dOKGN1ciAmIzQzOyBQQUdFX1NJWkUpKVxubW0vZ3VwLmM6MjEzMTpcdFx0aWYgKGZpeHVwX3VzZXJfZmF1bHQobW0sIGN1ciwgRkFVTFRfRkxBR19XUklURSwgXHUwMDI2dW5sb2NrZWQpKVxubW0vZ3VwLmMtMjEzMi1cdFx0XHRicmVhaztcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI5Mzk9c3RhdGljIGludCBodmFfdG9fcGZuX3JlbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk2MC1cdFx0Ym9vbCB1bmxvY2tlZCA9IGZhbHNlO1xudmlydC9rdm0va3ZtX21haW4uYzoyOTYxOlx0XHRyID0gZml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVx1MDAzZW1tLCBrZnAtXHUwMDNlaHZhLFxudmlydC9rdm0va3ZtX21haW4uYy0yOTYyLVx0XHRcdFx0ICAgICAod3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0MQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byBhZGRyZXNzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgZml4IGludm9sdmVzIGFkZGluZyBhIGNoZWNrLCBgaWYgKHVubG9ja2VkKWAsIGJlZm9yZSB0aGUgZGVyZWZlcmVuY2Ugb2YgYHVubG9ja2VkYCB3aXRoaW4gdGhlIGBmaXh1cF91c2VyX2ZhdWx0KClgIGZ1bmN0aW9uLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyBwcm90ZWN0IGFnYWluc3QgYWNjZXNzaW5nIGEgYmFkIHBvaW50ZXIuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkga25vdyB0aGF0IGZ1bmN0aW9uIHRha2VzIGEgYGJvb2wgKnVubG9ja2VkYC4gQW5kIG15IGluaXRpYWwgaW5zdGluY3QgaXMgc29tZXRoaW5nIGZlZWxzIGEgbGl0dGxlIG9mZi4uLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSBteSBzdXNwaWNpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGZpeHVwX3VzZXJfZmF1bHQoKWAgaXMgYmVpbmcgKnVzZWQqLiBBIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBjaGVjayBpcyBpbiBvcmRlci4gTG9va2luZyBhdCBgYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuY2AsIGl0JiMzOTtzIGNhbGxlZCB3aXRoIGBOVUxMYCBmb3IgdGhhdCBhcmd1bWVudC4gQW5kIGFnYWluIGluIGBhcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNgLCBzYW1lIGRlYWwsIGl0JiMzOTtzIGBOVUxMYC4gQW5kIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCwgYWdhaW4sIHRoZSB2YWx1ZSBwYXNzZWQgdG8gYHVubG9ja2VkYCBpcyBgTlVMTGAhIFNvIHRoZSBmaXggaW50cm9kdWNlcyB0aGUgY2hlY2ssIHdoaWNoIGxpa2VseSBoYW5kbGVzIHRoZSBOVUxMIHBvaW50ZXIsIGFuZCBhdm9pZHMgdGhlIGNyYXNoLiBOb3csIHRoZSBxdWVzdGlvbiBpcyB3aGVyZSBpcyB0aGUgcHJvYmxlbWF0aWMgY2FsbD8gTGV0JiMzOTtzIGNoZWNrIGluIGBkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jYC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeHVwX3VzZXJfZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM9NTQwPXN0YXRpYyBpbnQgZm9sbG93X2ZhdWx0X3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTAtXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jOjU1MTpcdFx0cmV0ID0gZml4dXBfdXNlcl9mYXVsdChtbSwgdmFkZHIsXG5kcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jLTU1Mi1cdFx0XHRcdCAgICAgICBGQVVMVF9GTEFHX1JFTU9URSB8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwMgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRpdmluZyBpbnRvIHRoZSB2ZmlvX2lvbW11X3R5cGUxLmMgQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoaXMgaXNzdWUuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgc3BlY2lmaWMgcG9pbnQgb2YgaW50ZXJlc3QuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgdmZpb19pb21tdV90eXBlMS5jYCDigJMgYSBmYW1pbGlhciBwaWVjZSBvZiB0aGUgcHV6emxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZGlyZWN0aW5nIG15IGF0dGVudGlvbiB0byBsaW5lIDU1MS4gVGhhdCBsaW5lIHVzdWFsbHkgaG9sZHMgYSBrZXkgcGllY2Ugb2YgdGhlIG1lY2hhbmlzbSBJJiMzOTttIGludGVyZXN0ZWQgaW4sIHdoaWNoIEkmIzM5O20gc3VyZSB3aWxsIGRpcmVjdCB0aGUgbmV4dCBzdGVwcyB0byBkaWFnbm9zZSB0aGUgaXNzdWUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGhhbmRzLW9uIGFuZCB0cmFjZSB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDA6XHRzdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIDU0MTpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nICpwZm4sXG4gNTQyOlx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKmFkZHJfbWFzaywgYm9vbCB3cml0ZV9mYXVsdClcbiA1NDM6XHR7XG4gNTQ0Olx0XHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gdmFkZHIgfTtcbiA1NDU6XHRcdGludCByZXQ7XG4gNTQ2Olx0XG4gNTQ3Olx0XHRyZXQgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFx1MDAyNmFyZ3MpO1xuIDU0ODpcdFx0aWYgKHJldCkge1xuIDU0OTpcdFx0XHRib29sIHVubG9ja2VkID0gZmFsc2U7XG4gNTUwOlx0XG4gNTUxOlx0XHRcdHJldCA9IGZpeHVwX3VzZXJfZmF1bHQobW0sIHZhZGRyLFxuIDU1MjpcdFx0XHRcdFx0ICAgICAgIEZBVUxUX0ZMQUdfUkVNT1RFIHxcbiA1NTM6XHRcdFx0XHRcdCAgICAgICAod3JpdGVfZmF1bHQgPyAgRkFVTFRfRkxBR19XUklURSA6IDApLFxuIDU1NDpcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnVubG9ja2VkKTtcbiA1NTU6XHRcdFx0aWYgKHVubG9ja2VkKVxuIDU1NjpcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIDU1NzpcdFxuIDU1ODpcdFx0XHRpZiAocmV0KVxuIDU1OTpcdFx0XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipNeSBGdXRleCBNdXNpbmdzKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gZGl2aW5nIGludG8gYGtlcm5lbC9mdXRleC9jb3JlLmNgLCB0aGUgaGVhcnQgb2YgdGhlIGZ1dGV4IGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gYmUgc2hhcnAgaGVyZTsgYSBtaXNzdGVwIGluIGZ1dGV4IG1hbmFnZW1lbnQgY2FuIGxlYWQgdG8gc29tZSB0cnVseSBuYXN0eSBjb25jdXJyZW5jeSBidWdzLiBGaXJzdCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgZGVzaWduIOKAkyBob3cgZG8gd2UgZW5zdXJlIGVmZmljaWVudCBhbmQgcmVsaWFibGUgc3luY2hyb25pemF0aW9uIGJldHdlZW4gcHJvY2Vzc2VzIGFuZCB0aHJlYWRzPyBUaGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgbGlrZSB0aGUgZnV0ZXggd2FpdCBxdWV1ZXMgYW5kIHRoZSBhc3NvY2lhdGVkIGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgd2hhdCBJIHdhbnQgdG8gZGVlcGx5IHVuZGVyc3RhbmQsIHRvIGtub3cgaG93IHRvIHNvbHZlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGluIHRoaXMgY29kZS4KCkkgbmVlZCB0byBxdWlja2x5IGFuYWx5emUgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgc2NoZWR1bGVyOyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhIHByb2Nlc3Mgd2FpdGluZyBvbiBhIGZ1dGV4IGFuZCBiZWluZyB3b2tlbiB1cCBpcyBhbHdheXMgYSBjcml0aWNhbCBwb2ludC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGBmdXRleF93YWl0YCBhbmQgYGZ1dGV4X3dha2VgIGZ1bmN0aW9ucy4gV2hhdCBhcmUgdGhlIGtleSBhdG9taWMgb3BlcmF0aW9ucz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZGlmZmVyZW50IHdhaXQgbW9kZXM/IFVuZGVyc3RhbmRpbmcgdGhlc2UgZGV0YWlscyBpcyBrZXkuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgcXVlc3Rpb24gb2YgcHJpb3JpdHkgaW5oZXJpdGFuY2UsIGVzcGVjaWFsbHkgYXMgaXQgcmVsYXRlcyB0byBmdXRleGVzLiBIb3cgZG9lcyB0aGUga2VybmVsIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIGhpZ2gtcHJpb3JpdHkgdGhyZWFkIGlzIGJsb2NrZWQgb24gYSBmdXRleCBoZWxkIGJ5IGEgbG93ZXItcHJpb3JpdHkgdGhyZWFkPyBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBpbmhlcml0YW5jZSBsb2dpYyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcHJpb3JpdHkgaW52ZXJzaW9uIHByb2JsZW1zLiBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgd2hlcmUgdGhlIGRhdGEgYW5kIGxvY2tzIGFyZSwgYW5kIHRyeSB0byB2aXN1YWxpemUgdGhlbSBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy4KCkZpbmFsbHksIEkmIzM5O20gYWx3YXlzIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zLiBBcmUgdGhlcmUgYW55IHVubmVjZXNzYXJ5IGF0b21pYyBvcGVyYXRpb25zPyBDYW4gdGhlIHdhaXQgcXVldWUgbWFuYWdlbWVudCBiZSBpbXByb3ZlZD8gSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSBzcHVyaW91cyB3YWtldXBzPyBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdG8gc2VlIG15IG93biBpZGVhcy4gTXkgbWFpbiBnb2FsIGlzIHRvIHNlZSB0aGlzIGNvZGUgYXQgYWxsIGxldmVscywgYW5kIGZpbmQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3Mzg6XHRpbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpXG4gNzM5Olx0e1xuIDc0MDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuIDc0MTpcdFx0aW50IHJldDtcbiA3NDI6XHRcbiA3NDM6XHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbiA3NDQ6XHRcdHJldCA9IGZpeHVwX3VzZXJfZmF1bHQobW0sICh1bnNpZ25lZCBsb25nKXVhZGRyLFxuIDc0NTpcdFx0XHRcdCAgICAgICBGQVVMVF9GTEFHX1dSSVRFLCBOVUxMKTtcbiA3NDY6XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIDc0NzpcdFxuIDc0ODpcdFx0cmV0dXJuIHJldCBcdTAwM2MgMCA/IHJldCA6IDA7XG4gNzQ5Olx0fVxuIDc1MDpcdFxuIDc1MTpcdC8qKlxuIDc1MjpcdCAqIGZ1dGV4X3RvcF93YWl0ZXIoKSAtIFJldHVybiB0aGUgaGlnaGVzdCBwcmlvcml0eSB3YWl0ZXIgb24gYSBmdXRleFxuIDc1MzpcdCAqIEBoYjpcdFx0dGhlIGhhc2ggYnVja2V0IHRoZSBmdXRleF9xJiMzOTtzIHJlc2lkZSBpblxuIDc1NDpcdCAqIEBrZXk6XHR0aGUgZnV0ZXgga2V5ICh0byBkaXN0aW5ndWlzaCBpdCBmcm9tIG90aGVyIGZ1dGV4IGZ1dGV4X3EmIzM5O3MpXG4gNzU1Olx0ICpcbiA3NTY6XHQgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBoYiBsb2NrIGhlbGQuXG4gNzU3Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3ODgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGFsYXJtIGJlbGxzIGFyZSBnb2luZyBvZmYuIEl0IHNlZW1zIGxpa2UgYGtlcm5lbC9mdXRleC9jb3JlLmNgIGNhbGxzIGBmaXh1cF91c2VyX2ZhdWx0YCB3aXRoIGEgYE5VTExgIHZhbHVlIGZvciB0aGUgYHVubG9ja2VkYCBwb2ludGVyLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyByZWNpcGUgZm9yIGRpc2FzdGVyLiBUaGUgcmVhbCBwcm9ibGVtIGlzLCBpZiBgZml4dXBfdXNlcl9mYXVsdGAgcmV0dXJucyBgVk1fRkFVTFRfUkVUUllgLCBpdCYjMzk7cyBnb2luZyB0byB0cnkgdG8gZGVyZWZlcmVuY2UgdGhhdCBgTlVMTGAgcG9pbnRlciBhbmQgYm9vbSDigJMgYSBjcmFzaC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Zy4gQ29uc2lkZXJpbmcgdGhlIGltcGFjdCBvZiBzdWNoIGEgdnVsbmVyYWJpbGl0eSwgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIHNvbWUgc2VyaW91cyBmdXp6aW5nLgoKTXkgdGhpbmtpbmcgaXMgdGhhdCB0aGUgY3JpdGljYWwgZnVuY3Rpb24sIGBmaXh1cF91c2VyX2ZhdWx0YCwgaXMgZGVmaW5lZCBpbiBgbW0vZ3VwLmNgLiBUaGUgcmVhbCBzd2VldCBzcG90LCB0aG91Z2gsIGFwcGVhcnMgdG8gYmUgdGhlIGNhbGxlcjogYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCwgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwtY2hhaW4uIEkgc2hvdWxkIGNoZWNrIHdoZXJlIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaXMgY2FsbGVkIGZyb20gYXMgd2VsbCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgcGF0aHMgdG8gaW52ZXN0aWdhdGUuIFRoaXMgY291bGQgYmUgYSBuaWNlIGVhc3kgdGFyZ2V0IHRvIHdvcmsgd2l0aCBmb3IgZnV6emluZywgb3IgbGVhZCB0byBvdGhlciBtb3JlIGludGVyZXN0aW5nIGZsYXdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTUwMj1pbnQgZ2V0X2Z1dGV4X2tleSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTcyNi0vKipcbmtlcm5lbC9mdXRleC9jb3JlLmM6NzI3OiAqIGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKCkgLSBGYXVsdCBpbiB1c2VyIGFkZHJlc3MgYW5kIHZlcmlmeSBSVyBhY2Nlc3Ncbmtlcm5lbC9mdXRleC9jb3JlLmMtNzI4LSAqIEB1YWRkcjpcdHBvaW50ZXIgdG8gZmF1bHRpbmcgdXNlciBzcGFjZSBhZGRyZXNzXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy03MzctICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjczODppbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTczOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz05Njg9c3RhdGljIGludCBoYW5kbGVfZnV0ZXhfZGVhdGgodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vycixcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEwNTQtXHRcdGNhc2UgLUVGQVVMVDpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTA1NTpcdFx0XHRpZiAoZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodWFkZHIpKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMDU2LVx0XHRcdFx0cmV0dXJuIC0xO1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTI4NT1leHRlcm4gdm9pZCBmdXRleF93YWtlX21hcmsoc3RydWN0IHdha2VfcV9oZWFkICp3YWtlX3EsIHN0cnVjdCBmdXRleF9xICpxKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI4Ni1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjI4NzpleHRlcm4gaW50IGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKHUzMiBfX3VzZXIgKnVhZGRyKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI4OC1leHRlcm4gc3RydWN0IGZ1dGV4X3EgKmZ1dGV4X3RvcF93YWl0ZXIoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYiwgdW5pb24gZnV0ZXhfa2V5ICprZXkpO1xuLS1cbmtlcm5lbC9mdXRleC9waS5jPTY3ND1zdGF0aWMgaW50IF9fZml4dXBfcGlfc3RhdGVfb3duZXIodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCBmdXRleF9xICpxLFxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTgwMC1cdGNhc2UgLUVGQVVMVDpcbmtlcm5lbC9mdXRleC9waS5jOjgwMTpcdFx0ZXJyID0gZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodWFkZHIpO1xua2VybmVsL2Z1dGV4L3BpLmMtODAyLVx0XHRicmVhaztcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy04MjctXHQvKlxua2VybmVsL2Z1dGV4L3BpLmM6ODI4Olx0ICogZmF1bHRfaW5fdXNlcl93cml0ZWFibGUoKSBmYWlsZWQgc28gdXNlciBzdGF0ZSBpcyBpbW11dGFibGUuIEF0XG5rZXJuZWwvZnV0ZXgvcGkuYy04MjktXHQgKiBiZXN0IHdlIGNhbiBtYWtlIHRoZSBrZXJuZWwgc3RhdGUgY29uc2lzdGVudCBidXQgdXNlciBzdGF0ZSB3aWxsXG4tLVxua2VybmVsL2Z1dGV4L3BpLmM9OTIzPWludCBmdXRleF9sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGt0aW1lX3QgKnRpbWUsIGludCB0cnlsb2NrKVxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTExMTctXG5rZXJuZWwvZnV0ZXgvcGkuYzoxMTE4Olx0XHRyZXQgPSBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1YWRkcik7XG5rZXJuZWwvZnV0ZXgvcGkuYy0xMTE5LVx0XHRpZiAocmV0KVxuLS1cbmtlcm5lbC9mdXRleC9waS5jPTExNDE9c3RhdGljIGludCBfX2Z1dGV4X3VubG9ja19waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTEyOTctXG5rZXJuZWwvZnV0ZXgvcGkuYzoxMjk4Olx0cmV0ID0gZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodWFkZHIpO1xua2VybmVsL2Z1dGV4L3BpLmMtMTI5OS1cdGlmICghcmV0KVxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MzgyPWludCBmdXRleF9yZXF1ZXVlKHUzMiBfX3VzZXIgKnVhZGRyMSwgdW5zaWduZWQgaW50IGZsYWdzMSxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTU2My1cdFx0XHRcdGRvdWJsZV91bmxvY2tfaGIoaGIxLCBoYjIpO1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo1NjQ6XHRcdFx0XHRyZXQgPSBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1YWRkcjIpO1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYy01NjUtXHRcdFx0XHRpZiAoIXJldClcbi0tXG5rZXJuZWwvZnV0ZXgvd2FpdHdha2UuYz0yNzg9aW50IGZ1dGV4X3dha2Vfb3AodTMyIF9fdXNlciAqdWFkZHIxLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHUzMiBfX3VzZXIgKnVhZGRyMixcbi0tXG5rZXJuZWwvZnV0ZXgvd2FpdHdha2UuYy0zMTYtXHRcdFx0aWYgKG9wX3JldCA9PSAtRUZBVUxUKSB7XG5rZXJuZWwvZnV0ZXgvd2FpdHdha2UuYzozMTc6XHRcdFx0XHRyZXQgPSBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1YWRkcjIpO1xua2VybmVsL2Z1dGV4L3dhaXR3YWtlLmMtMzE4LVx0XHRcdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM1NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGUgUGF0aHMqKgoKT2theSwgc28gYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpcyBjbGVhcmx5IGEgY3JpdGljYWwgZnVuY3Rpb24sIGNvbnNpZGVyaW5nIHRoZSBudW1iZXIgb2YgY29yZSBhcmVhcyBpdCB0b3VjaGVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIGEgdGhvcm91Z2ggbG9vay1vdmVyLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBzZXZlcmFsIGtleSBmdXRleCBvcGVyYXRpb25zIOKAkyBgZnV0ZXhfbG9ja19waWAsIGBfX2Z1dGV4X3VubG9ja19waWAsIGBmdXRleF9yZXF1ZXVlYCwgYW5kIGBmdXRleF93YWtlX29wYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBiZWluZyBpbnRlcnR3aW5lZCB3aXRoIHRoZSBmdW5kYW1lbnRhbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHRoZXJlZm9yZSwgcG90ZW50aWFsbHkgc2VjdXJpdHktc2Vuc2l0aXZlLiBJdCYjMzk7cyBkaXJlY3RseSByZWFjaGFibGUgdmlhIHRoZSBgZnV0ZXhgIHN5c2NhbGwgd2hpY2ggcmFpc2VzIGEgZmV3IGZsYWdzLiBUaGlzIGFyZWEgaXMga25vd24gZm9yIGJlaW5nIHRyaWNreSB0byBnZXQgcmlnaHQsIGFuZCBldmVuIGEgc3VidGxlIGJ1ZyBoZXJlIGNvdWxkIGhhdmUgd2lkZXNwcmVhZCBjb25zZXF1ZW5jZXMuCgpCZXlvbmQgdGhhdCwgdGhlIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGluIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZSBmb3IgQVJDIGFuZCBTMzkwLCBhbmQgbW9yZSBzdXJwcmlzaW5nbHksIGluIFBDSSBkcml2ZXJzIGxpa2UgYHZmaW9faW9tbXVfdHlwZTFgIGFuZCB0aGUgS1ZNIG1haW4gY29kZS4gVGhpcyBkZWZpbml0ZWx5IGFkZHMgdG8gdGhlIG15c3RlcnkgYW5kIHRoZSBzY2FsZSBvZiB3aGVyZSB0aGlzIGNhbiBwb3RlbnRpYWxseSBjcmVhdGUgcHJvYmxlbXMuCgpMZXQmIzM5O3MgYmVnaW4gYnkgZm9jdXNpbmcgb24gdGhlIEtWTSBzaWRlIG9mIHRoaW5ncy4gSXQmIzM5O3MgdGltZSB0byBjaGVjayBgdmlydC9rdm0va3ZtX21haW4uY2AgbGluZSAyOTYxLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgYW5kIHdoYXQgdGhlIGNvbnRleHQgaXMuIEl0IHdpbGwgbGlrZWx5IGdpdmUgc29tZSBjbHVlcyBhcyB0byB0aGUgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgYSBmYXVsdCBvY2N1cnJpbmcgaW4gdGhhdCBzcGVjaWZpYyBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NTA6XHRcdCAqL1xuMjk1MTpcdFx0aWYgKGtmcC1cdTAwM2VwaW4gXHUwMDI2XHUwMDI2ICFhbGxvd191bnNhZmVfbWFwcGluZ3MpXG4yOTUyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjk1MzpcdFxuMjk1NDpcdFx0ciA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG4yOTU1Olx0XHRpZiAocikge1xuMjk1NjpcdFx0XHQvKlxuMjk1NzpcdFx0XHQgKiBnZXRfdXNlcl9wYWdlcyBmYWlscyBmb3IgVk1fSU8gYW5kIFZNX1BGTk1BUCB2bWFzIGFuZCBkb2VzXG4yOTU4Olx0XHRcdCAqIG5vdCBjYWxsIHRoZSBmYXVsdCBoYW5kbGVyLCBzbyBkbyBpdCBoZXJlLlxuMjk1OTpcdFx0XHQgKi9cbjI5NjA6XHRcdFx0Ym9vbCB1bmxvY2tlZCA9IGZhbHNlO1xuMjk2MTpcdFx0XHRyID0gZml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVx1MDAzZW1tLCBrZnAtXHUwMDNlaHZhLFxuMjk2MjpcdFx0XHRcdFx0ICAgICAod3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXG4yOTYzOlx0XHRcdFx0XHQgICAgIFx1MDAyNnVubG9ja2VkKTtcbjI5NjQ6XHRcdFx0aWYgKHVubG9ja2VkKVxuMjk2NTpcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuMjk2NjpcdFx0XHRpZiAocilcbjI5Njc6XHRcdFx0XHRyZXR1cm4gcjtcbjI5Njg6XHRcbjI5Njk6XHRcdFx0ciA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXHUwMDI2YXJncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gS2VybmVsIENvZGUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgYnVnIHJlcG9ydCBhbmQgdGhlIGNvZGUgc25pcHBldHMgYXJlIHBvaW50aW5nIG1lIHRvd2FyZCBzb21lIGludGVyZXN0aW5nIGFyZWFzLiBJdCBsb29rcyBsaWtlIHRoZSBgdW5sb2NrZWRgIGFyZ3VtZW50LCB3aGljaCBpcyBjbGVhcmx5IGEgcG9pbnRlciwgaXMgYmVpbmcgcGFzc2VkIGluIGNvbnNpc3RlbnRseSBhcyBhIG5vbi1OVUxMIHZhbHVlIGluIHNldmVyYWwga2V5IEtWTSBhbmQgVkZJTyBjb250ZXh0cyDigJMgc3BlY2lmaWNhbGx5IHdpdGhpbiBga3ZtX21haW4uY2AgYW5kIGB2ZmlvX2lvbW11X3R5cGUxLmNgLCByZXNwZWN0aXZlbHkuIEhvd2V2ZXIsIHdoZW4gZXhhbWluaW5nIGBmdXRleGAgc3lzY2FsbCBpbXBsZW1lbnRhdGlvbnMgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBhcyB3ZWxsIGFzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGZvciBBUkMgYW5kIHMzOTAgcHJvY2Vzc29ycyAoaS5lLiBgYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuY2AgYW5kIGBhcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNgKSwgaXQmIzM5O3MgYmVpbmcgcGFzc2VkIGFzIE5VTEwuCgpUaGF0JiMzOTtzIGEgZ2xhcmluZyBpbmNvbnNpc3RlbmN5LCB3aGljaCBzdWdnZXN0cyB0aGlzIGJ1ZyBpcyBsaWtlbHkgdHJpZ2dlcmVkIGR1cmluZyB0aG9zZSBzcGVjaWZpYyBzeXNjYWxscywgZXNwZWNpYWxseSByZWxhdGVkIHRvIGBmdXRleGAuIFRoZSByZXBvcnQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdpdGhpbiBgZml4dXBfdXNlcl9mYXVsdGAuIEdpdmVuIHRoYXQsIG15IGluaXRpYWwgaHlwb3RoZXNpcyBpcyBzcG90IG9uLCB3aGljaCBpcyBnb29kLiBUaGUgcGF0Y2ggZGVzY3JpcHRpb24gaW5kaWNhdGVzIHRoaXMgZml4IGlzIHRhcmdldGVkIGF0IGBmaXh1cF91c2VyX2ZhdWx0YCBpdHNlbGYuIFRoaXMgbmF0dXJhbGx5IG1ha2VzIGBmaXh1cF91c2VyX2ZhdWx0YCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gQWxzbywgaXQmIzM5O3Mgd29ydGggY2hlY2tpbmcgYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpbnNpZGUgYGtlcm5lbC9mdXRleC9jb3JlLmNgIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBzaWRlIGVmZmVjdHMgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBpZGVudGlmaWVkIGlzc3VlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZml4dXBfdXNlcl9mYXVsdGAgaXRzZWxmLiBJIG5lZWQgdG8gY2hlY2sgYG1tL2d1cC5jYCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbiBhbmQgaG93IHRoYXQgcG9pbnRlciBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2d1cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTkwOlx0XHRpZiAocmV0IFx1MDAyNiBWTV9GQVVMVF9DT01QTEVURUQpIHtcbjE1OTE6XHRcdFx0LypcbjE1OTI6XHRcdFx0ICogTk9URTogaXQmIzM5O3MgYSBwaXR5IHRoYXQgd2UgbmVlZCB0byByZXRha2UgdGhlIGxvY2sgaGVyZVxuMTU5MzpcdFx0XHQgKiB0byBwYWlyIHdpdGggdGhlIHVubG9jaygpIGluIHRoZSBjYWxsZXJzLiBJZGVhbGx5IHdlXG4xNTk0Olx0XHRcdCAqIGNvdWxkIHRlbGwgdGhlIGNhbGxlcnMgc28gdGhleSBkbyBub3QgbmVlZCB0byB1bmxvY2suXG4xNTk1Olx0XHRcdCAqL1xuMTU5NjpcdFx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4xNTk3Olx0XHRcdGlmICh1bmxvY2tlZClcbjE1OTg6XHRcdFx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuMTU5OTpcdFx0XHRyZXR1cm4gMDtcbjE2MDA6XHRcdH1cbjE2MDE6XHRcbjE2MDI6XHRcdGlmIChyZXQgXHUwMDI2IFZNX0ZBVUxUX0VSUk9SKSB7XG4xNjAzOlx0XHRcdGludCBlcnIgPSB2bV9mYXVsdF90b19lcnJubyhyZXQsIDApO1xuMTYwNDpcdFxuMTYwNTpcdFx0XHRpZiAoZXJyKVxuMTYwNjpcdFx0XHRcdHJldHVybiBlcnI7XG4xNjA3Olx0XHRcdEJVRygpO1xuMTYwODpcdFx0fVxuMTYwOTpcdFxuMTYxMDpcdFx0aWYgKHJldCBcdTAwMjYgVk1fRkFVTFRfUkVUUlkpIHtcbjE2MTE6XHRcdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuMTYxMjpcdFx0XHRpZiAodW5sb2NrZWQpXG4xNjEzOlx0XHRcdFx0KnVubG9ja2VkID0gdHJ1ZTtcbjE2MTQ6XHRcdFx0ZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19UUklFRDtcbjE2MTU6XHRcdFx0Z290byByZXRyeTtcbjE2MTY6XHRcdH1cbjE2MTc6XHRcbjE2MTg6XHRcdHJldHVybiAwO1xuMTYxOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugc2l0dWF0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBgZml4dXBfdXNlcl9mYXVsdGAgcmV0dXJucyBgVk1fRkFVTFRfQ09NUExFVEVEYCBvciBgVk1fRkFVTFRfUkVUUllgIGFuZCB0aGUgYHVubG9ja2VkYCBwb2ludGVyIGlzIG51bGwuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IGFic29sdXRlbHkgd2FycmFudHMgc29tZSBmdXp6aW5nIGF0dGVudGlvbi4KCk15IG1haW4gZm9jdXMgcmlnaHQgbm93IGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgZml4dXBfdXNlcl9mYXVsdGAgZnVuY3Rpb24gaXRzZWxmLCBuYXR1cmFsbHksIGFuZCBhbHNvIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdCB0byB0cmlnZ2VyIHRoaXMgdnVsbmVyYWJpbGl0eS4KCkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgcGFydGljdWxhcmx5IHNwZWNpZmljIHRoYXQganVtcHMgb3V0LiBJIHNlZSBgZnV0ZXhgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLCBhbmQgYG1tL2d1cC5jYCBpcyBjb3JlIGtlcm5lbCBjb2RlLCBzbyB0aGlzIHNob3VsZCBiZSByZWFkaWx5IGFjY2Vzc2libGUuCgpMZXQgbWUgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuIElzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBBaCwgZ29vZCwgaXTigJlzIG5vdC4gSXQmIzM5O3MgYWN0dWFsbHkgZXhwb3J0ZWQgaW4gYGtlcm5lbC9mdXRleC9mdXRleC5oYCBhbmQgZGVmaW5lZCBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AuIFdhaXQgYSBzZWNvbmTigKYgZXZlbiB0aG91Z2ggaXQmIzM5O3MgZXhwb3J0ZWQsIGl0JiMzOTtzIG5vdCBleHBvcnRlZCB0byBtb2R1bGVzLCB5ZXQgaXQgaXMgYSBnbG9iYWwgc3ltYm9sLCBJIHNob3VsZCBjb25maXJtIHdoYXQgdGhpcyBtZWFucyBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AuIEdvdCBpdCwgbm93IHRvIGxvb2sgYXQgdGhhdCBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz01MDI9aW50IGdldF9mdXRleF9rZXkodTMyIF9fdXNlciAqdWFkZHIsIHVuc2lnbmVkIGludCBmbGFncywgdW5pb24gZnV0ZXhfa2V5ICprZXksXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy03MzctICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjczODppbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTczOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODg4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBmaXh1cF91c2VyX2ZhdWx0YCBhbmQgUG90ZW50aWFsIElzc3VlcyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgZml4dXBfdXNlcl9mYXVsdGAg4oCTIGNvbmZpcm1lZCwgaXQmIzM5O3MgYSBnbG9iYWwgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIHdoZXJlIGVsc2UgaXQmIzM5O3MgYmVpbmcgY2FsbGVkLCBzcGVjaWZpY2FsbHksIGFyZSB0aGVyZSBhbnkgaW5zdGFuY2VzIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCB3aXRoIGEgTlVMTCBhcmd1bWVudCwgd2hpY2ggY291bGQgc2lnbmFsIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4KClJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBhIGZldyBhcmNoLXNwZWNpZmljIHN5c2NhbGxzIGFyZSBjYWxsaW5nIGl0OiBgczM5MF9wY2lfbW1pb193cml0ZWAgYW5kIGBzMzkwX3BjaV9tbWlvX3JlYWRgIGluIGBhcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmNgIGFuZCBgYXJjX3Vzcl9jbXB4Y2hnYCBpbiBgYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuY2AuIFRoZXNlIGFyZSBpbnRlcmVzdGluZywgYnV0IHRoZSBtYWluIG9uZSB0aGF0IHN0YW5kcyBvdXQgdG8gbWUgaXMgYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBsb2NhdGVkIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gVGhpcyBpcyB0aGUgb25lIEkgd2FudCB0byBmb2N1cyBvbi4KCkdpdmVuIHRoZXNlIGZpbmRpbmdzLCBJ4oCZbSBnb2luZyB0byBtYWtlIGEgbm90ZSB0byBhZGQgYm90aCBgZml4dXBfdXNlcl9mYXVsdGAgYW5kIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgdG8gYEZvY3VzU3ltYm9sc2AuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHRoZXNlLCBlc3BlY2lhbGx5IGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGZ1dGV4IGNvZGUuCgpGaW5hbGx5LCBJ4oCZbGwgcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCBmdXRleC4gSSBiZWxpZXZlIGBDT05GSUdfRlVURVhgIGlzIGdlbmVyYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhpcyB0byBlbnN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCYjMzk7cyBmdXRleCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVVEVYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODI3PWNvbmZpZyBCQVNFX1NNQUxMXG4tLVxuaW5pdC9LY29uZmlnLTE4MzMtXG5pbml0L0tjb25maWc6MTgzNDpjb25maWcgRlVURVhcbmluaXQvS2NvbmZpZy0xODM1LVx0Ym9vbCBcJiMzNDtFbmFibGUgZnV0ZXggc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWctMTg0My1cbmluaXQvS2NvbmZpZzoxODQ0OmNvbmZpZyBGVVRFWF9QSVxuaW5pdC9LY29uZmlnLTE4NDUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTE4NDgtXG5pbml0L0tjb25maWc6MTg0OTpjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXG5pbml0L0tjb25maWctMTg1MC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTg1My1cbmluaXQvS2NvbmZpZzoxODU0OmNvbmZpZyBGVVRFWF9NUE9MXG5pbml0L0tjb25maWctMTg1NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWc9MTg1OT1jb25maWcgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXG4tLVxuaW5pdC9LY29uZmlnLTE4NjEtXG5pbml0L0tjb25maWc6MTg2Mjpjb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xuaW5pdC9LY29uZmlnLTE4NjMtXHRkZWZfYm9vbCBGVVRFWCBcdTAwMjZcdTAwMjYgSEFWRV9HRU5FUklDX1ZEU08gXHUwMDI2XHUwMDI2IEdFTkVSSUNfSVJRX0VOVFJZIFx1MDAyNlx1MDAyNiBSU0VRIFx1MDAyNlx1MDAyNiBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEtlcm5lbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gYENPTkZJR19GVVRFWGAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgdGVzdC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGNhbGxzIHRvIGBmaXh1cF91c2VyX2ZhdWx0YCB3aXRoIGEgTlVMTCBhcmd1bWVudC4gSSYjMzk7dmUgZm91bmQgYSBjb3VwbGUgb2YgdGhlc2U6IGBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZWAgaW4gYG1tL2d1cC5jYCBhbmQgYHVzZXJfZXZlbnRfbW1fZmF1bHRfaW5gIGluIGBrZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3VzZXIuY2AuIEhvd2V2ZXIsIGl0IHNlZW1zIHRoZSBtYWluIG9uZSBpcyBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgLgoKVGhlcmVmb3JlLCBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgZml4dXBfdXNlcl9mYXVsdGAgYW5kIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuIEp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBgRlVURVhgIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGFscmVhZHkgb24gYnkgZGVmYXVsdC4KCkxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgRlVURVhgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG5hbWXigKZZZXMsIGBDT05GSUdfRlVURVhgIGl0IGlzLgoKT25lIGxhc3QgdGhpbmcsIGxldCYjMzk7cyB2ZXJpZnkgYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpcyB0aGUgb25seSBvbmUuIFdoYXQgYWJvdXQgdGhlIG90aGVyIHJlbGF0ZWQgY2FsbHM/IGBmYXVsdF9pbl91c2VyX3JlYWRhYmxlYD8gRG9lcyBpdCBleGlzdD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYXVsdF9pbl91c2VyX3JlYWRhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzMzcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFNhZmVndWFyZCoqCgpObywgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIFRoaW5raW5nIGFib3V0IHRoYXQgYXBwcm9hY2ggaXNuJiMzOTt0IGdvaW5nIHRvIGdldCBtZSB0aGVyZS4KCldhaXQuLi4gd2hhdCBhYm91dCBgZmF1bHRfaW5fc2FmZV93cml0ZWFibGVgPyBUaGF0IGhhcyBwb3NzaWJpbGl0aWVzLiBNYXliZSBleGFtaW5pbmcgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIGNvbmNlcHQgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGlzc3VlIEkmIzM5O20gd29ya2luZyB0aHJvdWdoLiBJdCYjMzk7cyB3b3J0aCBkaWdnaW5nIGludG8gdGhhdCBhbmdsZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9nZnMyL2lub2RlLmM9MjE5Nz1zdGF0aWMgYm9vbCBmYXVsdF9pbl9maWVtYXAoc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyAqZmkpXG4tLVxuZnMvZ2ZzMi9pbm9kZS5jLTIyMDEtXG5mcy9nZnMyL2lub2RlLmM6MjIwMjpcdHJldHVybiBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZSgoY2hhciBfX3VzZXIgKilkZXN0LCBzaXplKSA9PSAwO1xuZnMvZ2ZzMi9pbm9kZS5jLTIyMDMtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTEyNzk9c2l6ZV90IGZhdWx0X2luX3N1YnBhZ2Vfd3JpdGVhYmxlKGNoYXIgX191c2VyICp1YWRkciwgc2l6ZV90IHNpemUpO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTI4MDpzaXplX3QgZmF1bHRfaW5fc2FmZV93cml0ZWFibGUoY29uc3QgY2hhciBfX3VzZXIgKnVhZGRyLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xMjgxLXNpemVfdCBmYXVsdF9pbl9yZWFkYWJsZShjb25zdCBjaGFyIF9fdXNlciAqdWFkZHIsIHNpemVfdCBzaXplKTtcbi0tXG5saWIvaW92X2l0ZXIuYz0xNDU9c2l6ZV90IGZhdWx0X2luX2lvdl9pdGVyX3dyaXRlYWJsZShjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmksIHNpemVfdCBzaXplKVxuLS1cbmxpYi9pb3ZfaXRlci5jLTE0OC1cdFx0c2l6ZV90IG4gPSBtaW4oc2l6ZSwgaW92X2l0ZXJfY291bnQoaSkpO1xubGliL2lvdl9pdGVyLmM6MTQ5Olx0XHRuIC09IGZhdWx0X2luX3NhZmVfd3JpdGVhYmxlKGktXHUwMDNldWJ1ZiAmIzQzOyBpLVx1MDAzZWlvdl9vZmZzZXQsIG4pO1xubGliL2lvdl9pdGVyLmMtMTUwLVx0XHRyZXR1cm4gc2l6ZSAtIG47XG4tLVxubGliL2lvdl9pdGVyLmMtMTYyLVx0XHRcdFx0Y29udGludWU7XG5saWIvaW92X2l0ZXIuYzoxNjM6XHRcdFx0cmV0ID0gZmF1bHRfaW5fc2FmZV93cml0ZWFibGUocC1cdTAwM2Vpb3ZfYmFzZSAmIzQzOyBza2lwLCBsZW4pO1xubGliL2lvdl9pdGVyLmMtMTY0LVx0XHRcdGNvdW50IC09IGxlbiAtIHJldDtcbi0tXG5tbS9ndXAuYz0yMDk3PUVYUE9SVF9TWU1CT0woZmF1bHRfaW5fc3VicGFnZV93cml0ZWFibGUpO1xuLS1cbm1tL2d1cC5jLTIwOTktLypcbm1tL2d1cC5jOjIxMDA6ICogZmF1bHRfaW5fc2FmZV93cml0ZWFibGUgLSBmYXVsdCBpbiBhbiBhZGRyZXNzIHJhbmdlIGZvciB3cml0aW5nXG5tbS9ndXAuYy0yMTAxLSAqIEB1YWRkcjogc3RhcnQgb2YgYWRkcmVzcyByYW5nZVxuLS1cbm1tL2d1cC5jLTIxMTYtICovXG5tbS9ndXAuYzoyMTE3OnNpemVfdCBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZShjb25zdCBjaGFyIF9fdXNlciAqdWFkZHIsIHNpemVfdCBzaXplKVxubW0vZ3VwLmMtMjExOC17XG4tLVxubW0vZ3VwLmMtMjEzOC19XG5tbS9ndXAuYzoyMTM5OkVYUE9SVF9TWU1CT0woZmF1bHRfaW5fc2FmZV93cml0ZWFibGUpO1xubW0vZ3VwLmMtMjE0MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNTMKCQkJCQkJCW91dHB1dDogMTM5CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkFuYWx5emluZyB0aGUgTWVtb3J5IEZhdWx0IFNjZW5hcmlvKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoZSBpc3N1ZSAqaXNuJiMzOTt0KiBkaXJlY3RseSByZWxhdGVkIHRvIGBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZWAuIFRoZSBjYWxsIHRoZXJlIHRvIGBmaXh1cF91c2VyX2ZhdWx0YCB1c2VzIGAmYW1wO3VubG9ja2VkYCwgdGhlIGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlLCBzbyB0aGF0JiMzOTtzIG5vdCB0aGUgcHJvYmxlbS4KCk15IGZvY3VzIGhhcyB0byBiZSBvbiBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgLiBUaGUgcm9vdCBjYXVzZSBoaW5nZXMgb24gYSB2ZXJ5IHNwZWNpZmljIGNvbmRpdGlvbjogYHVubG9ja2VkYCBiZWluZyBhIE5VTEwgcG9pbnRlciwgcmlnaHQ/IFRoYXQmIzM5O3MgdGhlIHZ1bG5lcmFiaWxpdHkgd2UmIzM5O3JlIHRyeWluZyB0byBuYWlsIGRvd24uCgpPa2F5LCB0aW1lIHRvIHN3aXRjaCBnZWFycy4gSSYjMzk7bGwgdXNlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgdW5jb3ZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpeHVwX3VzZXJfZmF1bHQmIzM0OywKICAgICYjMzQ7ZmF1bHRfaW5fdXNlcl93cml0ZWFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGZpeHVwX3VzZXJfZmF1bHRgIHdoZW4gdGhlIGB1bmxvY2tlZGAgcGFyYW1ldGVyIGlzIE5VTEwuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYSBOVUxMIGB1bmxvY2tlZGAgcG9pbnRlciBieSBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgIGluIHRoZSBmdXRleCBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBmdXRleCBzeXNjYWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIGtlcm5lbCBjcmFzaCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVURVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaXh1cF91c2VyX2ZhdWx0JiMzNDssCiAgICAmIzM0O2ZhdWx0X2luX3VzZXJfd3JpdGVhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBmaXh1cF91c2VyX2ZhdWx0YCB3aGVuIHRoZSBgdW5sb2NrZWRgIHBhcmFtZXRlciBpcyBOVUxMLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgTlVMTCBgdW5sb2NrZWRgIHBvaW50ZXIgYnkgYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgZnV0ZXggc3lzY2FsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBrZXJuZWwgY3Jhc2ggYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMDc6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBgdW5sb2NrZWQgIT0gTlVMTGAgYmVmb3JlIGRlcmVmZXJlbmNpbmcgaXQuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyAocGFnZSBmYXVsdHMpIG9yIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMmM3NzU1NmYxZjFjNTdlOWEyZGFhMzM5M2U5NDJkOGMyNTA1M2NkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMDc6MDY6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9ndXAuYyBiL21tL2d1cC5jCmluZGV4IDA2OTIxMTliNzkwNDMuLmQxMjQ3NWE3ZjdjY2IgMTAwNjQ0Ci0tLSBhL21tL2d1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2d1cC5jCkBAIC0xNTk0LDcgJiM0MzsxNTk0LDggQEAgaW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCSAqIGNvdWxkIHRlbGwgdGhlIGNhbGxlcnMgc28gdGhleSBkbyBub3QgbmVlZCB0byB1bmxvY2suCiAJCSAqLwogCQltbWFwX3JlYWRfbG9jayhtbSk7Ci0JCSp1bmxvY2tlZCA9IHRydWU7CiYjNDM7CQlpZiAodW5sb2NrZWQpCiYjNDM7CQkJKnVubG9ja2VkID0gdHJ1ZTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjA4LDcgJiM0MzsxNjA5LDggQEAgaW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAKIAlpZiAocmV0ICZhbXA7IFZNX0ZBVUxUX1JFVFJZKSB7CiAJCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQkJKnVubG9ja2VkID0gdHJ1ZTsKJiM0MzsJCWlmICh1bmxvY2tlZCkKJiM0MzsJCQkqdW5sb2NrZWQgPSB0cnVlOwogCQlmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1RSSUVEOwogCQlnb3RvIHJldHJ5OwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDA3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjkKCQkJCQkJCW91dHB1dDogMTA4CgkJCQkJCQl0aG91Z2h0czogMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgZml4LCBmb2N1c2luZyBvbiBgbW0vZ3VwLmNgIGFuZCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIHRoZSBgZml4dXBfdXNlcl9mYXVsdGAgZnVuY3Rpb24uIEl0JiMzOTtzIGEgc2ltcGxlIGFkZGl0aW9uIG9mIGEgTlVMTCBjaGVjayBmb3IgdGhlIGB1bmxvY2tlZGAgcG9pbnRlciBiZWZvcmUgdGhlIGRlcmVmZXJlbmNlLgoKYGBgYwotCQkqdW5sb2NrZWQgPSB0cnVlOwomIzQzOwkJaWYgKHVubG9ja2VkKQomIzQzOwkJCSp1bmxvY2tlZCA9IHRydWU7CmBgYAoKRXNzZW50aWFsbHksIHdlJiMzOTtyZSBndWFyZGluZyBhZ2FpbnN0IGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlc2UgYXJlIHVzdWFsbHkgY2F1Z2h0IGJ5IHRoZSBleGlzdGluZyBrZXJuZWwgbWVjaGFuaXNtcyAocGFnZSBmYXVsdHMgb24gYWRkcmVzcyAwKSwgYW5kIEtBU0FOIHdvdWxkIGFsc28gZmxhZyBhbnkgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMsIHNvIHRoaXMgaXMgYWJvdXQgcm9idXN0bmVzcyByYXRoZXIgdGhhbiBleHBvc2luZyBuZXcgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZWl0aGVyLgoKTGV0IG1lIGp1c3QgcXVpY2tseSByZS1leGFtaW5lIHRoZSBwYXRjaCBhZ2FpbiB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZzoKCmBgYGMKQEAgLTE1OTQsNyAmIzQzOzE1OTQsOCBAQCBpbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJICogY291bGQgdGVsbCB0aGUgY2FsbGVycyBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIHVubG9jay4KIAkJICovCiAJCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQkJKnVubG9ja2VkID0gdHJ1ZTsKJiM0MzsJCWlmICh1bmxvY2tlZCkKJiM0MzsJCQkqdW5sb2NrZWQgPSB0cnVlOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE2MDgsNyAmIzQzOzE2MDksOCBAQCBpbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAogCWlmIChyZXQgJmFtcDsgVk1fRkFVTFRfUkVUUlkpIHsKIAkJbW1hcF9yZWFkX2xvY2sobW0pOwotCQkqdW5sb2NrZWQgPSB0cnVlOwomIzQzOwkJaWYgKHVubG9ja2VkKQomIzQzOwkJCSp1bmxvY2tlZCA9IHRydWU7CiAJCWZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfVFJJRUQ7CiAJCWdvdG8gcmV0cnk7CiAJfQpgYGAKClllcCwgaXQmIzM5O3MgY2xlYXI6IGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gS01TQU4gY29uY2VybnMuIFRoZXJlZm9yZSwgSSYjMzk7bSBtYXJraW5nIHRoaXMgYXMgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAwNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGB1bmxvY2tlZCAhPSBOVUxMYCBiZWZvcmUgZGVyZWZlcmVuY2luZyBpdC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChwYWdlIGZhdWx0cykgb3IgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGB1bmxvY2tlZCAhPSBOVUxMYCBiZWZvcmUgZGVyZWZlcmVuY2luZyBpdC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChwYWdlIGZhdWx0cykgb3IgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA2OjUyLjcwNzg4NzQwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4NDYxMDMxNDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZml4dXBfdXNlcl9mYXVsdFwiLFxuICAgIFwiZmF1bHRfaW5fdXNlcl93cml0ZWFibGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBieSBhZGRpbmcgYSBjaGVjayBmb3IgYHVubG9ja2VkICE9IE5VTExgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIGl0LiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKHBhZ2UgZmF1bHRzKSBvciBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgZml4dXBfdXNlcl9mYXVsdGAgd2hlbiB0aGUgYHVubG9ja2VkYCBwYXJhbWV0ZXIgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIE5VTEwgYHVubG9ja2VkYCBwb2ludGVyIGJ5IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGZ1dGV4IHN5c2NhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEga2VybmVsIGNyYXNoIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowNjo1Mi43MDc4OTQwOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxOTMzNTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMyYzc3NTU2ZjFmMWM1N2U5YTJkYWEzMzkzZTk0MmQ4YzI1MDUzY2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMDc6MDY6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZ3VwLmMgYi9tbS9ndXAuY1xcbmluZGV4IDA2OTIxMTliNzkwNDMuLmQxMjQ3NWE3ZjdjY2IgMTAwNjQ0XFxuLS0tIGEvbW0vZ3VwLmNcXG4rKysgYi9tbS9ndXAuY1xcbkBAIC0xNTk0LDcgKzE1OTQsOCBAQCBpbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0ICogY291bGQgdGVsbCB0aGUgY2FsbGVycyBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIHVubG9jay5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0XFx0KnVubG9ja2VkID0gdHJ1ZTtcXG4rXFx0XFx0aWYgKHVubG9ja2VkKVxcbitcXHRcXHRcXHQqdW5sb2NrZWQgPSB0cnVlO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG5AQCAtMTYwOCw3ICsxNjA5LDggQEAgaW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcbiBcXHRpZiAocmV0IFxcdTAwMjYgVk1fRkFVTFRfUkVUUlkpIHtcXG4gXFx0XFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbi1cXHRcXHQqdW5sb2NrZWQgPSB0cnVlO1xcbitcXHRcXHRpZiAodW5sb2NrZWQpXFxuK1xcdFxcdFxcdCp1bmxvY2tlZCA9IHRydWU7XFxuIFxcdFxcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfVFJJRUQ7XFxuIFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDY6NTMuNDI4MTMzMzA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzkyMTU3MDcxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaXh1cF91c2VyX2ZhdWx0XCIsXG4gICAgXCJmYXVsdF9pbl91c2VyX3dyaXRlYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBmaXh1cF91c2VyX2ZhdWx0YCB3aGVuIHRoZSBgdW5sb2NrZWRgIHBhcmFtZXRlciBpcyBOVUxMLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgTlVMTCBgdW5sb2NrZWRgIHBvaW50ZXIgYnkgYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgZnV0ZXggc3lzY2FsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBrZXJuZWwgY3Jhc2ggYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMyYzc3NTU2ZjFmMWM1N2U5YTJkYWEzMzkzZTk0MmQ4YzI1MDUzY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwNzowNjo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmNcbmluZGV4IDA2OTIxMTliNzkwNDMuLmQxMjQ3NWE3ZjdjY2IgMTAwNjQ0XG4tLS0gYS9tbS9ndXAuY1xuKysrIGIvbW0vZ3VwLmNcbkBAIC0xNTk0LDcgKzE1OTQsOCBAQCBpbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0ICogY291bGQgdGVsbCB0aGUgY2FsbGVycyBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIHVubG9jay5cbiBcdFx0ICovXG4gXHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdFx0KnVubG9ja2VkID0gdHJ1ZTtcbitcdFx0aWYgKHVubG9ja2VkKVxuK1x0XHRcdCp1bmxvY2tlZCA9IHRydWU7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTE2MDgsNyArMTYwOSw4IEBAIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFxuIFx0aWYgKHJldCBcdTAwMjYgVk1fRkFVTFRfUkVUUlkpIHtcbiBcdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuK1x0XHRpZiAodW5sb2NrZWQpXG4rXHRcdFx0KnVubG9ja2VkID0gdHJ1ZTtcbiBcdFx0ZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19UUklFRDtcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA2OjUzLjQyODEzNTk3N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzE3MTI4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkFuYWx5emluZyBhIEdVUCBQYXRjaDogRGVmZW5zaXZlIFByb2dyYW1taW5nIGluIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyB0aGVyZSdzIGEgcGF0Y2ggdG91Y2hpbmcgYG1tL2d1cC5jYC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBjaGVjayDigJMgYGlmICh1bmxvY2tlZClgIOKAkyBiZWZvcmUgZGVyZWZlcmVuY2luZyB0aGUgYHVubG9ja2VkYCB2YXJpYWJsZSB3aXRoaW4gdGhlIGBmaXh1cF91c2VyX2ZhdWx0KClgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBsaWtlbHkgYSBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZS4gV2UncmUgdGFsa2luZyBhYm91dCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBhbnkgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyBjb3VsZCBsZWFkIHRvICpuYXN0eSoga2VybmVsIHBhbmljcyBvciwgd29yc2UsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQncyBnb29kIHRoYXQgd2UncmUgYmVpbmcgY2FyZWZ1bCBoZXJlLlxuXG5MZXQncyBkaXZlIGludG8gYGZpeHVwX3VzZXJfZmF1bHQoKWAgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2h5IGlzIGB1bmxvY2tlZGAgcG90ZW50aWFsbHkgbnVsbD8gV2hhdCBhcmUgdGhlIHNjZW5hcmlvcyB0aGF0IGNvdWxkIGxlYWQgdG8gdGhpcz8gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbiBiZWluZyBhZGRyZXNzZWQ/IEtub3dpbmcgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYGZpeHVwX3VzZXJfZmF1bHQoKWAgaXMgaW52b2tlZCBpcyBjcnVjaWFsLiBJIHN1c3BlY3QgdGhlcmUncyBhIHN1YnRsZSBpbnRlcmFjdGlvbiB3aXRoIGxvY2tzLCBwZXJoYXBzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgb3IgcG9zc2libHkgYSByYWNlIGNvbmRpdGlvbiBpbiBob3cgdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQuIEkgd291bGQgd2FudCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpZiB0aGUgY2hlY2sgaXM6XG5cbiogICAqKlJvYnVzdDoqKiBEb2VzIGl0IGNvdmVyICphbGwqIHBvdGVudGlhbCBudWxsIGRlcmVmZXJlbmNlIGNhc2VzPyBJcyBpdCB0aGUgY29ycmVjdCBjb25kaXRpb24sIG9yIGlzIGl0IG92ZXJseSBhZ2dyZXNzaXZlIGFuZCBjb3VsZCBwcmV2ZW50IGxlZ2l0aW1hdGUgbG9ja2luZyBzY2VuYXJpb3M/XG4qICAgKipDb3JyZWN0OioqIEFyZSB0aGVyZSBhbnkgc2lkZSBlZmZlY3RzIGZyb20gdGhpcyBhZGRlZCBjaGVjayBhbmQgaWYgc28sIHdoYXQgYXJlIHRoZXk/XG4qICAgKipDb21wbGV0ZToqKiBXYXMgdGhlcmUgYW55IHRlc3RpbmcgYXJvdW5kIHRoaXMgcGF0Y2g/IEFyZSB0aGVyZSBhbnkgdGVzdGNhc2VzIHRoYXQgdGVzdCB0aGUgcG90ZW50aWFsIGZvciB0aGlzIHNjZW5hcmlvP1xuXG5JJ2xsIG5lZWQgdG8gcmVhZCB0aGUgY29kZSBjYXJlZnVsbHkgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgcHJvYmxlbSB0aGUgcGF0Y2ggaXMgdHJ5aW5nIHRvIHNvbHZlIGFuZCBob3cgZWZmZWN0aXZlbHkgaXQgYWRkcmVzc2VzIGl0LiBEZWZlbnNpdmUgcHJvZ3JhbW1pbmcgaXMgY29tbWVuZGFibGUsIGJ1dCB0aGUgZml4IG5lZWRzIHRvIGJlIHNvdW5kLCBub3QganVzdCBhIGJhbmQtYWlkLiBBbHNvLCBJJ2Qgd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSByZWxldmFudCBsb2NrIHN0cnVjdHVyZXMgdG8gYmUgc3VyZSB0aGF0IHRoZSBjaGFuZ2UgaXMgY29ycmVjdCBmb3IgYWxsIHBvc3NpYmxlIGxvY2tpbmcgY29uZGl0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDY6NTcuOTU5ODUxODkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDk0OTM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaXh1cF91c2VyX2ZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2d1cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2d1cC5jPTE1MTI9c3RhdGljIGJvb2wgdm1hX3Blcm1pdHNfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ndXAuYy0xNTM1LS8qKlxcbm1tL2d1cC5jOjE1MzY6ICogZml4dXBfdXNlcl9mYXVsdCgpIC0gbWFudWFsbHkgcmVzb2x2ZSBhIHVzZXIgcGFnZSBmYXVsdFxcbm1tL2d1cC5jLTE1MzctICogQG1tOlxcdFxcdG1tX3N0cnVjdCBvZiB0YXJnZXQgbW1cXG4tLVxcbm1tL2d1cC5jLTE1NjMtICovXFxubW0vZ3VwLmM6MTU2NDppbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5tbS9ndXAuYy0xNTY1LVxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MsXFxuLS1cXG5tbS9ndXAuYy0xNjE5LX1cXG5tbS9ndXAuYzoxNjIwOkVYUE9SVF9TWU1CT0xfR1BMKGZpeHVwX3VzZXJfZmF1bHQpO1xcbm1tL2d1cC5jLTE2MjEtXFxuLS1cXG5tbS9ndXAuYz0yMTE3PXNpemVfdCBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZShjb25zdCBjaGFyIF9fdXNlciAqdWFkZHIsIHNpemVfdCBzaXplKVxcbi0tXFxubW0vZ3VwLmMtMjEzMC1cXHRmb3IgKGN1ciA9IHN0YXJ0OyBjdXIgXFx1MDAyNlxcdTAwMjYgY3VyIFxcdTAwM2MgZW5kOyBjdXIgPSBQQUdFX0FMSUdOX0RPV04oY3VyICsgUEFHRV9TSVpFKSlcXG5tbS9ndXAuYzoyMTMxOlxcdFxcdGlmIChmaXh1cF91c2VyX2ZhdWx0KG1tLCBjdXIsIEZBVUxUX0ZMQUdfV1JJVEUsIFxcdTAwMjZ1bmxvY2tlZCkpXFxubW0vZ3VwLmMtMjEzMi1cXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDY6NTguNDQwODA3NzkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1NzQzMzQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBGYXVsdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoZSBmaXggc2VlbXMgdG8gYmUgd2l0aGluIGBmaXh1cF91c2VyX2ZhdWx0KClgLiBMZXQncyBkaWcgaW4gYSBiaXQgZGVlcGVyLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbiBpcyBqdXN0IGEgbG9jYWwgaGVscGVyIG9yIGlmIGl0J3MgcG90ZW50aWFsbHkgZXhwb3NlZCBmb3IgdXNlIGJ5IG90aGVyIG1vZHVsZXMgb3IgZXZlbiB0aGUgYnJvYWRlciBrZXJuZWwuIEFoLCB5ZXMsIGl0J3MgZXhwb3J0ZWQgdmlhIGBFWFBPUlRfU1lNQk9MX0dQTChmaXh1cF91c2VyX2ZhdWx0KWAuIFRoYXQgdGVsbHMgbWUgaXQncyBkZWZpbml0ZWx5IGFjY2Vzc2libGUgZXh0ZXJuYWxseSwgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzIGhlcmUuIE5vdyB0aGUgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIGFsbCB0aGUgY2FsbHMgdG8gYGZpeHVwX3VzZXJfZmF1bHQoKWAgdG8gZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlLiBVbmRlcnN0YW5kaW5nIGFsbCB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCB1c2VzIGFuZCBzaWRlIGVmZmVjdHMgb2YgYW55IGNoYW5nZXMgSSBtYWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTc0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6MDIuMzk4MjQ1MzYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODc5MzQzNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZml4dXBfdXNlcl9mYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuYz00Nj1TWVNDQUxMX0RFRklORTMoYXJjX3Vzcl9jbXB4Y2hnLCBpbnQgX191c2VyICosIHVhZGRyLCBpbnQsIGV4cGVjdGVkLCBpbnQsIG5ldylcXG4tLVxcbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmMtOTMtXFx0bW1hcF9yZWFkX2xvY2soY3VycmVudC1cXHUwMDNlbW0pO1xcbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmM6OTQ6XFx0cmV0ID0gZml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVxcdTAwM2VtbSwgKHVuc2lnbmVkIGxvbmcpIHVhZGRyLFxcbmFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmMtOTUtXFx0XFx0XFx0ICAgICAgIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpO1xcbi0tXFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jPTEyOD1TWVNDQUxMX0RFRklORTMoczM5MF9wY2lfbW1pb193cml0ZSwgdW5zaWduZWQgbG9uZywgbW1pb19hZGRyLFxcbi0tXFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jLTE4NC1cXHRpZiAocmV0KSB7XFxuYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jOjE4NTpcXHRcXHRmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXFx1MDAzZW1tLCBtbWlvX2FkZHIsIEZBVUxUX0ZMQUdfV1JJVEUsIE5VTEwpO1xcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0xODYtXFx0XFx0cmV0ID0gZm9sbG93X3Bmbm1hcF9zdGFydChcXHUwMDI2YXJncyk7XFxuLS1cXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmM9MjgzPVNZU0NBTExfREVGSU5FMyhzMzkwX3BjaV9tbWlvX3JlYWQsIHVuc2lnbmVkIGxvbmcsIG1taW9fYWRkcixcXG4tLVxcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYy0zMzYtXFx0aWYgKHJldCkge1xcbmFyY2gvczM5MC9wY2kvcGNpX21taW8uYzozMzc6XFx0XFx0Zml4dXBfdXNlcl9mYXVsdChjdXJyZW50LVxcdTAwM2VtbSwgbW1pb19hZGRyLCAwLCBOVUxMKTtcXG5hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMtMzM4LVxcdFxcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYz01NDA9c3RhdGljIGludCBmb2xsb3dfZmF1bHRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNTUwLVxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmM6NTUxOlxcdFxcdHJldCA9IGZpeHVwX3VzZXJfZmF1bHQobW0sIHZhZGRyLFxcbmRyaXZlcnMvdmZpby92ZmlvX2lvbW11X3R5cGUxLmMtNTUyLVxcdFxcdFxcdFxcdCAgICAgICBGQVVMVF9GTEFHX1JFTU9URSB8XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MzE3OD1leHRlcm4gdm1fZmF1bHRfdCBoYW5kbGVfbW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMzE4MC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBwdF9yZWdzICpyZWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MzE4MTpleHRlcm4gaW50IGZpeHVwX3VzZXJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9tbS5oLTMxODItXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTMxODk9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IGhhbmRsZV9tbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0zMTk2LX1cXG5pbmNsdWRlL2xpbnV4L21tLmg6MzE5NzpzdGF0aWMgaW5saW5lIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuaW5jbHVkZS9saW51eC9tbS5oLTMxOTgtXFx0XFx0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzLCBib29sICp1bmxvY2tlZClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9NzM4PWludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcilcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtNzQzLVxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjc0NDpcXHRyZXQgPSBmaXh1cF91c2VyX2ZhdWx0KG1tLCAodW5zaWduZWQgbG9uZyl1YWRkcixcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTc0NS1cXHRcXHRcXHQgICAgICAgRkFVTFRfRkxBR19XUklURSwgTlVMTCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3VzZXIuYz00MzU9c3RhdGljIGludCB1c2VyX2V2ZW50X21tX2ZhdWx0X2luKHN0cnVjdCB1c2VyX2V2ZW50X21tICptbSwgdW5zaWduZWQgbG9uZyB1YWRkcixcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfdXNlci5jLTQ1NS1cXG5rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3VzZXIuYzo0NTY6XFx0cmV0ID0gZml4dXBfdXNlcl9mYXVsdChtbS1cXHUwMDNlbW0sIHVhZGRyLCBGQVVMVF9GTEFHX1dSSVRFIHwgRkFVTFRfRkxBR19SRU1PVEUsXFxua2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c191c2VyLmMtNDU3LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2dW5sb2NrZWQpO1xcbi0tXFxubW0vZ3VwLmM9MTUxMj1zdGF0aWMgYm9vbCB2bWFfcGVybWl0c19mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2d1cC5jLTE1MzUtLyoqXFxubW0vZ3VwLmM6MTUzNjogKiBmaXh1cF91c2VyX2ZhdWx0KCkgLSBtYW51YWxseSByZXNvbHZlIGEgdXNlciBwYWdlIGZhdWx0XFxubW0vZ3VwLmMtMTUzNy0gKiBAbW06XFx0XFx0bW1fc3RydWN0IG9mIHRhcmdldCBtbVxcbi0tXFxubW0vZ3VwLmMtMTU2My0gKi9cXG5tbS9ndXAuYzoxNTY0OmludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL2d1cC5jLTE1NjUtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCBmYXVsdF9mbGFncyxcXG4tLVxcbm1tL2d1cC5jLTE2MTktfVxcbm1tL2d1cC5jOjE2MjA6RVhQT1JUX1NZTUJPTF9HUEwoZml4dXBfdXNlcl9mYXVsdCk7XFxubW0vZ3VwLmMtMTYyMS1cXG4tLVxcbm1tL2d1cC5jPTIxMTc9c2l6ZV90IGZhdWx0X2luX3NhZmVfd3JpdGVhYmxlKGNvbnN0IGNoYXIgX191c2VyICp1YWRkciwgc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9ndXAuYy0yMTMwLVxcdGZvciAoY3VyID0gc3RhcnQ7IGN1ciBcXHUwMDI2XFx1MDAyNiBjdXIgXFx1MDAzYyBlbmQ7IGN1ciA9IFBBR0VfQUxJR05fRE9XTihjdXIgKyBQQUdFX1NJWkUpKVxcbm1tL2d1cC5jOjIxMzE6XFx0XFx0aWYgKGZpeHVwX3VzZXJfZmF1bHQobW0sIGN1ciwgRkFVTFRfRkxBR19XUklURSwgXFx1MDAyNnVubG9ja2VkKSlcXG5tbS9ndXAuYy0yMTMyLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yOTM5PXN0YXRpYyBpbnQgaHZhX3RvX3Bmbl9yZW1hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjk2MC1cXHRcXHRib29sIHVubG9ja2VkID0gZmFsc2U7XFxudmlydC9rdm0va3ZtX21haW4uYzoyOTYxOlxcdFxcdHIgPSBmaXh1cF91c2VyX2ZhdWx0KGN1cnJlbnQtXFx1MDAzZW1tLCBrZnAtXFx1MDAzZWh2YSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI5NjItXFx0XFx0XFx0XFx0ICAgICAod3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjA0Ljg4NjE5MDk5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MzE5NDU4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIGFkZHJlc3MgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBmaXggaW52b2x2ZXMgYWRkaW5nIGEgY2hlY2ssIGBpZiAodW5sb2NrZWQpYCwgYmVmb3JlIHRoZSBkZXJlZmVyZW5jZSBvZiBgdW5sb2NrZWRgIHdpdGhpbiB0aGUgYGZpeHVwX3VzZXJfZmF1bHQoKWAgZnVuY3Rpb24uIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIHByb3RlY3QgYWdhaW5zdCBhY2Nlc3NpbmcgYSBiYWQgcG9pbnRlci4gQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBrbm93IHRoYXQgZnVuY3Rpb24gdGFrZXMgYSBgYm9vbCAqdW5sb2NrZWRgLiBBbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyBzb21ldGhpbmcgZmVlbHMgYSBsaXR0bGUgb2ZmLi4uXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSBteSBzdXNwaWNpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGZpeHVwX3VzZXJfZmF1bHQoKWAgaXMgYmVpbmcgKnVzZWQqLiBBIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBjaGVjayBpcyBpbiBvcmRlci4gTG9va2luZyBhdCBgYXJjaC9hcmMva2VybmVsL3Byb2Nlc3MuY2AsIGl0J3MgY2FsbGVkIHdpdGggYE5VTExgIGZvciB0aGF0IGFyZ3VtZW50LiBBbmQgYWdhaW4gaW4gYGFyY2gvczM5MC9wY2kvcGNpX21taW8uY2AsIHNhbWUgZGVhbCwgaXQncyBgTlVMTGAuIEFuZCBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIGFnYWluLCB0aGUgdmFsdWUgcGFzc2VkIHRvIGB1bmxvY2tlZGAgaXMgYE5VTExgISBTbyB0aGUgZml4IGludHJvZHVjZXMgdGhlIGNoZWNrLCB3aGljaCBsaWtlbHkgaGFuZGxlcyB0aGUgTlVMTCBwb2ludGVyLCBhbmQgYXZvaWRzIHRoZSBjcmFzaC4gTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hlcmUgaXMgdGhlIHByb2JsZW1hdGljIGNhbGw/IExldCdzIGNoZWNrIGluIGBkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjEwLjYxODEzOTQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4Njg3MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpeHVwX3VzZXJfZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jPTU0MD1zdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTAtXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYzo1NTE6XFx0XFx0cmV0ID0gZml4dXBfdXNlcl9mYXVsdChtbSwgdmFkZHIsXFxuZHJpdmVycy92ZmlvL3ZmaW9faW9tbXVfdHlwZTEuYy01NTItXFx0XFx0XFx0XFx0ICAgICAgIEZBVUxUX0ZMQUdfUkVNT1RFIHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6MTAuNjg2ODMyMzE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxNjExNzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgdmZpb19pb21tdV90eXBlMS5jIENvZGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoaXMgaXNzdWUuIExldCdzIHN0YXJ0IHdpdGggYSBzcGVjaWZpYyBwb2ludCBvZiBpbnRlcmVzdC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGB2ZmlvX2lvbW11X3R5cGUxLmNgIOKAkyBhIGZhbWlsaWFyIHBpZWNlIG9mIHRoZSBwdXp6bGUuIFNwZWNpZmljYWxseSwgSSdtIGRpcmVjdGluZyBteSBhdHRlbnRpb24gdG8gbGluZSA1NTEuIFRoYXQgbGluZSB1c3VhbGx5IGhvbGRzIGEga2V5IHBpZWNlIG9mIHRoZSBtZWNoYW5pc20gSSdtIGludGVyZXN0ZWQgaW4sIHdoaWNoIEknbSBzdXJlIHdpbGwgZGlyZWN0IHRoZSBuZXh0IHN0ZXBzIHRvIGRpYWdub3NlIHRoZSBpc3N1ZS4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuIEl0J3MgdGltZSB0byBnZXQgaGFuZHMtb24gYW5kIHRyYWNlIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTAyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6MTQuMDAyOTUyODc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZmaW8vdmZpb19pb21tdV90eXBlMS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0MDpcXHRzdGF0aWMgaW50IGZvbGxvd19mYXVsdF9wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiA1NDE6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgKnBmbixcXG4gNTQyOlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICphZGRyX21hc2ssIGJvb2wgd3JpdGVfZmF1bHQpXFxuIDU0MzpcXHR7XFxuIDU0NDpcXHRcXHRzdHJ1Y3QgZm9sbG93X3Bmbm1hcF9hcmdzIGFyZ3MgPSB7IC52bWEgPSB2bWEsIC5hZGRyZXNzID0gdmFkZHIgfTtcXG4gNTQ1OlxcdFxcdGludCByZXQ7XFxuIDU0NjpcXHRcXG4gNTQ3OlxcdFxcdHJldCA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbiA1NDg6XFx0XFx0aWYgKHJldCkge1xcbiA1NDk6XFx0XFx0XFx0Ym9vbCB1bmxvY2tlZCA9IGZhbHNlO1xcbiA1NTA6XFx0XFxuIDU1MTpcXHRcXHRcXHRyZXQgPSBmaXh1cF91c2VyX2ZhdWx0KG1tLCB2YWRkcixcXG4gNTUyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBGQVVMVF9GTEFHX1JFTU9URSB8XFxuIDU1MzpcXHRcXHRcXHRcXHRcXHQgICAgICAgKHdyaXRlX2ZhdWx0ID8gIEZBVUxUX0ZMQUdfV1JJVEUgOiAwKSxcXG4gNTU0OlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2dW5sb2NrZWQpO1xcbiA1NTU6XFx0XFx0XFx0aWYgKHVubG9ja2VkKVxcbiA1NTY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIDU1NzpcXHRcXG4gNTU4OlxcdFxcdFxcdGlmIChyZXQpXFxuIDU1OTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowNzoxNC4wMDMyMzg0NDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwMjQ3ODQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuXG5cbioqTXkgRnV0ZXggTXVzaW5ncyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgSSdtIGRpdmluZyBpbnRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCwgdGhlIGhlYXJ0IG9mIHRoZSBmdXRleCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGJlIHNoYXJwIGhlcmU7IGEgbWlzc3RlcCBpbiBmdXRleCBtYW5hZ2VtZW50IGNhbiBsZWFkIHRvIHNvbWUgdHJ1bHkgbmFzdHkgY29uY3VycmVuY3kgYnVncy4gRmlyc3QsIEknbSB0aGlua2luZyBhYm91dCB0aGUgZnVuZGFtZW50YWwgZGVzaWduIOKAkyBob3cgZG8gd2UgZW5zdXJlIGVmZmljaWVudCBhbmQgcmVsaWFibGUgc3luY2hyb25pemF0aW9uIGJldHdlZW4gcHJvY2Vzc2VzIGFuZCB0aHJlYWRzPyBUaGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgbGlrZSB0aGUgZnV0ZXggd2FpdCBxdWV1ZXMgYW5kIHRoZSBhc3NvY2lhdGVkIGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgd2hhdCBJIHdhbnQgdG8gZGVlcGx5IHVuZGVyc3RhbmQsIHRvIGtub3cgaG93IHRvIHNvbHZlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGluIHRoaXMgY29kZS5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYW5hbHl6ZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBzY2hlZHVsZXI7IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGEgcHJvY2VzcyB3YWl0aW5nIG9uIGEgZnV0ZXggYW5kIGJlaW5nIHdva2VuIHVwIGlzIGFsd2F5cyBhIGNyaXRpY2FsIHBvaW50LiBJJ20gZm9jdXNpbmcgb24gdGhlIGludHJpY2FjaWVzIG9mIHRoZSBgZnV0ZXhfd2FpdGAgYW5kIGBmdXRleF93YWtlYCBmdW5jdGlvbnMuIFdoYXQgYXJlIHRoZSBrZXkgYXRvbWljIG9wZXJhdGlvbnM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGRpZmZlcmVudCB3YWl0IG1vZGVzPyBVbmRlcnN0YW5kaW5nIHRoZXNlIGRldGFpbHMgaXMga2V5LlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBxdWVzdGlvbiBvZiBwcmlvcml0eSBpbmhlcml0YW5jZSwgZXNwZWNpYWxseSBhcyBpdCByZWxhdGVzIHRvIGZ1dGV4ZXMuIEhvdyBkb2VzIHRoZSBrZXJuZWwgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgaGlnaC1wcmlvcml0eSB0aHJlYWQgaXMgYmxvY2tlZCBvbiBhIGZ1dGV4IGhlbGQgYnkgYSBsb3dlci1wcmlvcml0eSB0aHJlYWQ/IEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGluaGVyaXRhbmNlIGxvZ2ljIGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHByaW9yaXR5IGludmVyc2lvbiBwcm9ibGVtcy4gSSB3aWxsIGJlIGxvb2tpbmcgdG8gc2VlIHdoZXJlIHRoZSBkYXRhIGFuZCBsb2NrcyBhcmUsIGFuZCB0cnkgdG8gdmlzdWFsaXplIHRoZW0gYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMuXG5cbkZpbmFsbHksIEknbSBhbHdheXMgbG9va2luZyBmb3IgcG90ZW50aWFsIG9wdGltaXphdGlvbnMuIEFyZSB0aGVyZSBhbnkgdW5uZWNlc3NhcnkgYXRvbWljIG9wZXJhdGlvbnM/IENhbiB0aGUgd2FpdCBxdWV1ZSBtYW5hZ2VtZW50IGJlIGltcHJvdmVkPyBJcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHNwdXJpb3VzIHdha2V1cHM/IFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBzZWUgbXkgb3duIGlkZWFzLiBNeSBtYWluIGdvYWwgaXMgdG8gc2VlIHRoaXMgY29kZSBhdCBhbGwgbGV2ZWxzLCBhbmQgZmluZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDUyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowNzoxOC42MDU3MjE3MDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzM4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzM4OlxcdGludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcilcXG4gNzM5OlxcdHtcXG4gNzQwOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cXHUwMDNlbW07XFxuIDc0MTpcXHRcXHRpbnQgcmV0O1xcbiA3NDI6XFx0XFxuIDc0MzpcXHRcXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuIDc0NDpcXHRcXHRyZXQgPSBmaXh1cF91c2VyX2ZhdWx0KG1tLCAodW5zaWduZWQgbG9uZyl1YWRkcixcXG4gNzQ1OlxcdFxcdFxcdFxcdCAgICAgICBGQVVMVF9GTEFHX1dSSVRFLCBOVUxMKTtcXG4gNzQ2OlxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbiA3NDc6XFx0XFxuIDc0ODpcXHRcXHRyZXR1cm4gcmV0IFxcdTAwM2MgMCA/IHJldCA6IDA7XFxuIDc0OTpcXHR9XFxuIDc1MDpcXHRcXG4gNzUxOlxcdC8qKlxcbiA3NTI6XFx0ICogZnV0ZXhfdG9wX3dhaXRlcigpIC0gUmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IHdhaXRlciBvbiBhIGZ1dGV4XFxuIDc1MzpcXHQgKiBAaGI6XFx0XFx0dGhlIGhhc2ggYnVja2V0IHRoZSBmdXRleF9xJ3MgcmVzaWRlIGluXFxuIDc1NDpcXHQgKiBAa2V5OlxcdHRoZSBmdXRleCBrZXkgKHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gb3RoZXIgZnV0ZXggZnV0ZXhfcSdzKVxcbiA3NTU6XFx0ICpcXG4gNzU2OlxcdCAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGhiIGxvY2sgaGVsZC5cXG4gNzU3OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowNzoxOC42MDU4OTEzNjhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2MTA2NzQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGFsYXJtIGJlbGxzIGFyZSBnb2luZyBvZmYuIEl0IHNlZW1zIGxpa2UgYGtlcm5lbC9mdXRleC9jb3JlLmNgIGNhbGxzIGBmaXh1cF91c2VyX2ZhdWx0YCB3aXRoIGEgYE5VTExgIHZhbHVlIGZvciB0aGUgYHVubG9ja2VkYCBwb2ludGVyLiBUaGF0J3MgYSBjbGFzc2ljIHJlY2lwZSBmb3IgZGlzYXN0ZXIuIFRoZSByZWFsIHByb2JsZW0gaXMsIGlmIGBmaXh1cF91c2VyX2ZhdWx0YCByZXR1cm5zIGBWTV9GQVVMVF9SRVRSWWAsIGl0J3MgZ29pbmcgdG8gdHJ5IHRvIGRlcmVmZXJlbmNlIHRoYXQgYE5VTExgIHBvaW50ZXIgYW5kIGJvb20g4oCTIGEgY3Jhc2guIFRoaXMgaXMgZGVmaW5pdGVseSBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcuIENvbnNpZGVyaW5nIHRoZSBpbXBhY3Qgb2Ygc3VjaCBhIHZ1bG5lcmFiaWxpdHksIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuTXkgdGhpbmtpbmcgaXMgdGhhdCB0aGUgY3JpdGljYWwgZnVuY3Rpb24sIGBmaXh1cF91c2VyX2ZhdWx0YCwgaXMgZGVmaW5lZCBpbiBgbW0vZ3VwLmNgLiBUaGUgcmVhbCBzd2VldCBzcG90LCB0aG91Z2gsIGFwcGVhcnMgdG8gYmUgdGhlIGNhbGxlcjogYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCwgc3BlY2lmaWNhbGx5IGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwtY2hhaW4uIEkgc2hvdWxkIGNoZWNrIHdoZXJlIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaXMgY2FsbGVkIGZyb20gYXMgd2VsbCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgcGF0aHMgdG8gaW52ZXN0aWdhdGUuIFRoaXMgY291bGQgYmUgYSBuaWNlIGVhc3kgdGFyZ2V0IHRvIHdvcmsgd2l0aCBmb3IgZnV6emluZywgb3IgbGVhZCB0byBvdGhlciBtb3JlIGludGVyZXN0aW5nIGZsYXdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzg4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6MjUuMjY2OTYxODEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI0OTY1NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZhdWx0X2luX3VzZXJfd3JpdGVhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTUwMj1pbnQgZ2V0X2Z1dGV4X2tleSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtNzI2LS8qKlxcbmtlcm5lbC9mdXRleC9jb3JlLmM6NzI3OiAqIGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKCkgLSBGYXVsdCBpbiB1c2VyIGFkZHJlc3MgYW5kIHZlcmlmeSBSVyBhY2Nlc3NcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTcyOC0gKiBAdWFkZHI6XFx0cG9pbnRlciB0byBmYXVsdGluZyB1c2VyIHNwYWNlIGFkZHJlc3NcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtNzM3LSAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6NzM4OmludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcilcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTczOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTk2OD1zdGF0aWMgaW50IGhhbmRsZV9mdXRleF9kZWF0aCh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLFxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMDU0LVxcdFxcdGNhc2UgLUVGQVVMVDpcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjEwNTU6XFx0XFx0XFx0aWYgKGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKHVhZGRyKSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEwNTYtXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9Mjg1PWV4dGVybiB2b2lkIGZ1dGV4X3dha2VfbWFyayhzdHJ1Y3Qgd2FrZV9xX2hlYWQgKndha2VfcSwgc3RydWN0IGZ1dGV4X3EgKnEpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI4Ni1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyODc6ZXh0ZXJuIGludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcik7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjg4LWV4dGVybiBzdHJ1Y3QgZnV0ZXhfcSAqZnV0ZXhfdG9wX3dhaXRlcihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLCB1bmlvbiBmdXRleF9rZXkgKmtleSk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYz02NzQ9c3RhdGljIGludCBfX2ZpeHVwX3BpX3N0YXRlX293bmVyKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfcSAqcSxcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jLTgwMC1cXHRjYXNlIC1FRkFVTFQ6XFxua2VybmVsL2Z1dGV4L3BpLmM6ODAxOlxcdFxcdGVyciA9IGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKHVhZGRyKTtcXG5rZXJuZWwvZnV0ZXgvcGkuYy04MDItXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy04MjctXFx0LypcXG5rZXJuZWwvZnV0ZXgvcGkuYzo4Mjg6XFx0ICogZmF1bHRfaW5fdXNlcl93cml0ZWFibGUoKSBmYWlsZWQgc28gdXNlciBzdGF0ZSBpcyBpbW11dGFibGUuIEF0XFxua2VybmVsL2Z1dGV4L3BpLmMtODI5LVxcdCAqIGJlc3Qgd2UgY2FuIG1ha2UgdGhlIGtlcm5lbCBzdGF0ZSBjb25zaXN0ZW50IGJ1dCB1c2VyIHN0YXRlIHdpbGxcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jPTkyMz1pbnQgZnV0ZXhfbG9ja19waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCBrdGltZV90ICp0aW1lLCBpbnQgdHJ5bG9jaylcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jLTExMTctXFxua2VybmVsL2Z1dGV4L3BpLmM6MTExODpcXHRcXHRyZXQgPSBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1YWRkcik7XFxua2VybmVsL2Z1dGV4L3BpLmMtMTExOS1cXHRcXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmM9MTE0MT1zdGF0aWMgaW50IF9fZnV0ZXhfdW5sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMjk3LVxcbmtlcm5lbC9mdXRleC9waS5jOjEyOTg6XFx0cmV0ID0gZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodWFkZHIpO1xcbmtlcm5lbC9mdXRleC9waS5jLTEyOTktXFx0aWYgKCFyZXQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTM4Mj1pbnQgZnV0ZXhfcmVxdWV1ZSh1MzIgX191c2VyICp1YWRkcjEsIHVuc2lnbmVkIGludCBmbGFnczEsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTU2My1cXHRcXHRcXHRcXHRkb3VibGVfdW5sb2NrX2hiKGhiMSwgaGIyKTtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjU2NDpcXHRcXHRcXHRcXHRyZXQgPSBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1YWRkcjIpO1xcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNTY1LVxcdFxcdFxcdFxcdGlmICghcmV0KVxcbi0tXFxua2VybmVsL2Z1dGV4L3dhaXR3YWtlLmM9Mjc4PWludCBmdXRleF93YWtlX29wKHUzMiBfX3VzZXIgKnVhZGRyMSwgdW5zaWduZWQgaW50IGZsYWdzLCB1MzIgX191c2VyICp1YWRkcjIsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvd2FpdHdha2UuYy0zMTYtXFx0XFx0XFx0aWYgKG9wX3JldCA9PSAtRUZBVUxUKSB7XFxua2VybmVsL2Z1dGV4L3dhaXR3YWtlLmM6MzE3OlxcdFxcdFxcdFxcdHJldCA9IGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKHVhZGRyMik7XFxua2VybmVsL2Z1dGV4L3dhaXR3YWtlLmMtMzE4LVxcdFxcdFxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjI3Ljg5MTkzMzQ1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjE3NzY5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIFBhdGhzKipcblxuT2theSwgc28gYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpcyBjbGVhcmx5IGEgY3JpdGljYWwgZnVuY3Rpb24sIGNvbnNpZGVyaW5nIHRoZSBudW1iZXIgb2YgY29yZSBhcmVhcyBpdCB0b3VjaGVzLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIGEgdGhvcm91Z2ggbG9vay1vdmVyLiBJdCdzIGNhbGxlZCBmcm9tIHNldmVyYWwga2V5IGZ1dGV4IG9wZXJhdGlvbnMg4oCTIGBmdXRleF9sb2NrX3BpYCwgYF9fZnV0ZXhfdW5sb2NrX3BpYCwgYGZ1dGV4X3JlcXVldWVgLCBhbmQgYGZ1dGV4X3dha2Vfb3BgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGJlaW5nIGludGVydHdpbmVkIHdpdGggdGhlIGZ1bmRhbWVudGFsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHdpdGhpbiB0aGUga2VybmVsLCBhbmQgdGhlcmVmb3JlLCBwb3RlbnRpYWxseSBzZWN1cml0eS1zZW5zaXRpdmUuIEl0J3MgZGlyZWN0bHkgcmVhY2hhYmxlIHZpYSB0aGUgYGZ1dGV4YCBzeXNjYWxsIHdoaWNoIHJhaXNlcyBhIGZldyBmbGFncy4gVGhpcyBhcmVhIGlzIGtub3duIGZvciBiZWluZyB0cmlja3kgdG8gZ2V0IHJpZ2h0LCBhbmQgZXZlbiBhIHN1YnRsZSBidWcgaGVyZSBjb3VsZCBoYXZlIHdpZGVzcHJlYWQgY29uc2VxdWVuY2VzLlxuXG5CZXlvbmQgdGhhdCwgdGhlIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGluIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZSBmb3IgQVJDIGFuZCBTMzkwLCBhbmQgbW9yZSBzdXJwcmlzaW5nbHksIGluIFBDSSBkcml2ZXJzIGxpa2UgYHZmaW9faW9tbXVfdHlwZTFgIGFuZCB0aGUgS1ZNIG1haW4gY29kZS4gVGhpcyBkZWZpbml0ZWx5IGFkZHMgdG8gdGhlIG15c3RlcnkgYW5kIHRoZSBzY2FsZSBvZiB3aGVyZSB0aGlzIGNhbiBwb3RlbnRpYWxseSBjcmVhdGUgcHJvYmxlbXMuXG5cbkxldCdzIGJlZ2luIGJ5IGZvY3VzaW5nIG9uIHRoZSBLVk0gc2lkZSBvZiB0aGluZ3MuIEl0J3MgdGltZSB0byBjaGVjayBgdmlydC9rdm0va3ZtX21haW4uY2AgbGluZSAyOTYxLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgYW5kIHdoYXQgdGhlIGNvbnRleHQgaXMuIEl0IHdpbGwgbGlrZWx5IGdpdmUgc29tZSBjbHVlcyBhcyB0byB0aGUgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgYSBmYXVsdCBvY2N1cnJpbmcgaW4gdGhhdCBzcGVjaWZpYyBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzU0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjMzLjM1MzcxNDk3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTA3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTUwOlxcdFxcdCAqL1xcbjI5NTE6XFx0XFx0aWYgKGtmcC1cXHUwMDNlcGluIFxcdTAwMjZcXHUwMDI2ICFhbGxvd191bnNhZmVfbWFwcGluZ3MpXFxuMjk1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yOTUzOlxcdFxcbjI5NTQ6XFx0XFx0ciA9IGZvbGxvd19wZm5tYXBfc3RhcnQoXFx1MDAyNmFyZ3MpO1xcbjI5NTU6XFx0XFx0aWYgKHIpIHtcXG4yOTU2OlxcdFxcdFxcdC8qXFxuMjk1NzpcXHRcXHRcXHQgKiBnZXRfdXNlcl9wYWdlcyBmYWlscyBmb3IgVk1fSU8gYW5kIFZNX1BGTk1BUCB2bWFzIGFuZCBkb2VzXFxuMjk1ODpcXHRcXHRcXHQgKiBub3QgY2FsbCB0aGUgZmF1bHQgaGFuZGxlciwgc28gZG8gaXQgaGVyZS5cXG4yOTU5OlxcdFxcdFxcdCAqL1xcbjI5NjA6XFx0XFx0XFx0Ym9vbCB1bmxvY2tlZCA9IGZhbHNlO1xcbjI5NjE6XFx0XFx0XFx0ciA9IGZpeHVwX3VzZXJfZmF1bHQoY3VycmVudC1cXHUwMDNlbW0sIGtmcC1cXHUwMDNlaHZhLFxcbjI5NjI6XFx0XFx0XFx0XFx0XFx0ICAgICAod3JpdGVfZmF1bHQgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCksXFxuMjk2MzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ1bmxvY2tlZCk7XFxuMjk2NDpcXHRcXHRcXHRpZiAodW5sb2NrZWQpXFxuMjk2NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4yOTY2OlxcdFxcdFxcdGlmIChyKVxcbjI5Njc6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuMjk2ODpcXHRcXG4yOTY5OlxcdFxcdFxcdHIgPSBmb2xsb3dfcGZubWFwX3N0YXJ0KFxcdTAwMjZhcmdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6MzMuMzU0MTMwNzA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwODU3ODIxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gS2VybmVsIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGJ1ZyByZXBvcnQgYW5kIHRoZSBjb2RlIHNuaXBwZXRzIGFyZSBwb2ludGluZyBtZSB0b3dhcmQgc29tZSBpbnRlcmVzdGluZyBhcmVhcy4gSXQgbG9va3MgbGlrZSB0aGUgYHVubG9ja2VkYCBhcmd1bWVudCwgd2hpY2ggaXMgY2xlYXJseSBhIHBvaW50ZXIsIGlzIGJlaW5nIHBhc3NlZCBpbiBjb25zaXN0ZW50bHkgYXMgYSBub24tTlVMTCB2YWx1ZSBpbiBzZXZlcmFsIGtleSBLVk0gYW5kIFZGSU8gY29udGV4dHMg4oCTIHNwZWNpZmljYWxseSB3aXRoaW4gYGt2bV9tYWluLmNgIGFuZCBgdmZpb19pb21tdV90eXBlMS5jYCwgcmVzcGVjdGl2ZWx5LiBIb3dldmVyLCB3aGVuIGV4YW1pbmluZyBgZnV0ZXhgIHN5c2NhbGwgaW1wbGVtZW50YXRpb25zIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCwgYXMgd2VsbCBhcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBmb3IgQVJDIGFuZCBzMzkwIHByb2Nlc3NvcnMgKGkuZS4gYGFyY2gvYXJjL2tlcm5lbC9wcm9jZXNzLmNgIGFuZCBgYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jYCksIGl0J3MgYmVpbmcgcGFzc2VkIGFzIE5VTEwuXG5cblRoYXQncyBhIGdsYXJpbmcgaW5jb25zaXN0ZW5jeSwgd2hpY2ggc3VnZ2VzdHMgdGhpcyBidWcgaXMgbGlrZWx5IHRyaWdnZXJlZCBkdXJpbmcgdGhvc2Ugc3BlY2lmaWMgc3lzY2FsbHMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBgZnV0ZXhgLiBUaGUgcmVwb3J0IHNwZWNpZmljYWxseSBtZW50aW9ucyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aXRoaW4gYGZpeHVwX3VzZXJfZmF1bHRgLiBHaXZlbiB0aGF0LCBteSBpbml0aWFsIGh5cG90aGVzaXMgaXMgc3BvdCBvbiwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIGRlc2NyaXB0aW9uIGluZGljYXRlcyB0aGlzIGZpeCBpcyB0YXJnZXRlZCBhdCBgZml4dXBfdXNlcl9mYXVsdGAgaXRzZWxmLiBUaGlzIG5hdHVyYWxseSBtYWtlcyBgZml4dXBfdXNlcl9mYXVsdGAgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEFsc28sIGl0J3Mgd29ydGggY2hlY2tpbmcgYGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlYCBpbnNpZGUgYGtlcm5lbC9mdXRleC9jb3JlLmNgIGZvciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBzaWRlIGVmZmVjdHMgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBpZGVudGlmaWVkIGlzc3VlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZpeHVwX3VzZXJfZmF1bHRgIGl0c2VsZi4gSSBuZWVkIHRvIGNoZWNrIGBtbS9ndXAuY2AgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24gYW5kIGhvdyB0aGF0IHBvaW50ZXIgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjM5LjQzOTkxNjI5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZ3VwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU5MDpcXHRcXHRpZiAocmV0IFxcdTAwMjYgVk1fRkFVTFRfQ09NUExFVEVEKSB7XFxuMTU5MTpcXHRcXHRcXHQvKlxcbjE1OTI6XFx0XFx0XFx0ICogTk9URTogaXQncyBhIHBpdHkgdGhhdCB3ZSBuZWVkIHRvIHJldGFrZSB0aGUgbG9jayBoZXJlXFxuMTU5MzpcXHRcXHRcXHQgKiB0byBwYWlyIHdpdGggdGhlIHVubG9jaygpIGluIHRoZSBjYWxsZXJzLiBJZGVhbGx5IHdlXFxuMTU5NDpcXHRcXHRcXHQgKiBjb3VsZCB0ZWxsIHRoZSBjYWxsZXJzIHNvIHRoZXkgZG8gbm90IG5lZWQgdG8gdW5sb2NrLlxcbjE1OTU6XFx0XFx0XFx0ICovXFxuMTU5NjpcXHRcXHRcXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuMTU5NzpcXHRcXHRcXHRpZiAodW5sb2NrZWQpXFxuMTU5ODpcXHRcXHRcXHRcXHQqdW5sb2NrZWQgPSB0cnVlO1xcbjE1OTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTYwMDpcXHRcXHR9XFxuMTYwMTpcXHRcXG4xNjAyOlxcdFxcdGlmIChyZXQgXFx1MDAyNiBWTV9GQVVMVF9FUlJPUikge1xcbjE2MDM6XFx0XFx0XFx0aW50IGVyciA9IHZtX2ZhdWx0X3RvX2Vycm5vKHJldCwgMCk7XFxuMTYwNDpcXHRcXG4xNjA1OlxcdFxcdFxcdGlmIChlcnIpXFxuMTYwNjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE2MDc6XFx0XFx0XFx0QlVHKCk7XFxuMTYwODpcXHRcXHR9XFxuMTYwOTpcXHRcXG4xNjEwOlxcdFxcdGlmIChyZXQgXFx1MDAyNiBWTV9GQVVMVF9SRVRSWSkge1xcbjE2MTE6XFx0XFx0XFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbjE2MTI6XFx0XFx0XFx0aWYgKHVubG9ja2VkKVxcbjE2MTM6XFx0XFx0XFx0XFx0KnVubG9ja2VkID0gdHJ1ZTtcXG4xNjE0OlxcdFxcdFxcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfVFJJRUQ7XFxuMTYxNTpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjE2MTY6XFx0XFx0fVxcbjE2MTc6XFx0XFxuMTYxODpcXHRcXHRyZXR1cm4gMDtcXG4xNjE5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6MzkuNDQwMTQwODc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNDMzNDQ5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHNpdHVhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gYGZpeHVwX3VzZXJfZmF1bHRgIHJldHVybnMgYFZNX0ZBVUxUX0NPTVBMRVRFRGAgb3IgYFZNX0ZBVUxUX1JFVFJZYCBhbmQgdGhlIGB1bmxvY2tlZGAgcG9pbnRlciBpcyBudWxsLiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBhYnNvbHV0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZyBhdHRlbnRpb24uXG5cbk15IG1haW4gZm9jdXMgcmlnaHQgbm93IGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgZml4dXBfdXNlcl9mYXVsdGAgZnVuY3Rpb24gaXRzZWxmLCBuYXR1cmFsbHksIGFuZCBhbHNvIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdCB0byB0cmlnZ2VyIHRoaXMgdnVsbmVyYWJpbGl0eS5cblxuRnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUsIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIHBhcnRpY3VsYXJseSBzcGVjaWZpYyB0aGF0IGp1bXBzIG91dC4gSSBzZWUgYGZ1dGV4YCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCwgYW5kIGBtbS9ndXAuY2AgaXMgY29yZSBrZXJuZWwgY29kZSwgc28gdGhpcyBzaG91bGQgYmUgcmVhZGlseSBhY2Nlc3NpYmxlLlxuXG5MZXQgbWUgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuIElzIHRoaXMgZnVuY3Rpb24gc3RhdGljPyBBaCwgZ29vZCwgaXTigJlzIG5vdC4gSXQncyBhY3R1YWxseSBleHBvcnRlZCBpbiBga2VybmVsL2Z1dGV4L2Z1dGV4LmhgIGFuZCBkZWZpbmVkIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gV2FpdCBhIHNlY29uZOKApiBldmVuIHRob3VnaCBpdCdzIGV4cG9ydGVkLCBpdCdzIG5vdCBleHBvcnRlZCB0byBtb2R1bGVzLCB5ZXQgaXQgaXMgYSBnbG9iYWwgc3ltYm9sLCBJIHNob3VsZCBjb25maXJtIHdoYXQgdGhpcyBtZWFucyBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AuIEdvdCBpdCwgbm93IHRvIGxvb2sgYXQgdGhhdCBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjE3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6NDQuNTgzNDg4MDc0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTIzMTkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTUwMj1pbnQgZ2V0X2Z1dGV4X2tleSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtNzM3LSAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6NzM4OmludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcilcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTczOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjQ0LjY4MjcyNjUxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1OTQ3ODQxNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYGZpeHVwX3VzZXJfZmF1bHRgIGFuZCBQb3RlbnRpYWwgSXNzdWVzKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgZml4dXBfdXNlcl9mYXVsdGAg4oCTIGNvbmZpcm1lZCwgaXQncyBhIGdsb2JhbCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBzZWUgd2hlcmUgZWxzZSBpdCdzIGJlaW5nIGNhbGxlZCwgc3BlY2lmaWNhbGx5LCBhcmUgdGhlcmUgYW55IGluc3RhbmNlcyB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCB3aXRoIGEgTlVMTCBhcmd1bWVudCwgd2hpY2ggY291bGQgc2lnbmFsIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgZmV3IGFyY2gtc3BlY2lmaWMgc3lzY2FsbHMgYXJlIGNhbGxpbmcgaXQ6IGBzMzkwX3BjaV9tbWlvX3dyaXRlYCBhbmQgYHMzOTBfcGNpX21taW9fcmVhZGAgaW4gYGFyY2gvczM5MC9wY2kvcGNpX21taW8uY2AgYW5kIGBhcmNfdXNyX2NtcHhjaGdgIGluIGBhcmNoL2FyYy9rZXJuZWwvcHJvY2Vzcy5jYC4gVGhlc2UgYXJlIGludGVyZXN0aW5nLCBidXQgdGhlIG1haW4gb25lIHRoYXQgc3RhbmRzIG91dCB0byBtZSBpcyBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgIGxvY2F0ZWQgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgLiBUaGlzIGlzIHRoZSBvbmUgSSB3YW50IHRvIGZvY3VzIG9uLlxuXG5HaXZlbiB0aGVzZSBmaW5kaW5ncywgSeKAmW0gZ29pbmcgdG8gbWFrZSBhIG5vdGUgdG8gYWRkIGJvdGggYGZpeHVwX3VzZXJfZmF1bHRgIGFuZCBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgIHRvIGBGb2N1c1N5bWJvbHNgLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBvdmVydmlldyBvZiB0aGVzZSwgZXNwZWNpYWxseSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBmdXRleCBjb2RlLlxuXG5GaW5hbGx5LCBJ4oCZbGwgcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgd2l0aCBmdXRleC4gSSBiZWxpZXZlIGBDT05GSUdfRlVURVhgIGlzIGdlbmVyYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBJJ2xsIGRvdWJsZS1jaGVjayB0aGlzIHRvIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbCByZWxhdGVkIHRvIHRoZSBrZXJuZWwncyBmdXRleCBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDc6NTIuMjc3NTE1NTg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDM1Njc4NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZVVEVYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTgyNz1jb25maWcgQkFTRV9TTUFMTFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4MzMtXFxuaW5pdC9LY29uZmlnOjE4MzQ6Y29uZmlnIEZVVEVYXFxuaW5pdC9LY29uZmlnLTE4MzUtXFx0Ym9vbCBcXFwiRW5hYmxlIGZ1dGV4IHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDMtXFxuaW5pdC9LY29uZmlnOjE4NDQ6Y29uZmlnIEZVVEVYX1BJXFxuaW5pdC9LY29uZmlnLTE4NDUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDgtXFxuaW5pdC9LY29uZmlnOjE4NDk6Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbmluaXQvS2NvbmZpZy0xODUwLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xODUzLVxcbmluaXQvS2NvbmZpZzoxODU0OmNvbmZpZyBGVVRFWF9NUE9MXFxuaW5pdC9LY29uZmlnLTE4NTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnPTE4NTk9Y29uZmlnIEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xcbi0tXFxuaW5pdC9LY29uZmlnLTE4NjEtXFxuaW5pdC9LY29uZmlnOjE4NjI6Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcXG5pbml0L0tjb25maWctMTg2My1cXHRkZWZfYm9vbCBGVVRFWCBcXHUwMDI2XFx1MDAyNiBIQVZFX0dFTkVSSUNfVkRTTyBcXHUwMDI2XFx1MDAyNiBHRU5FUklDX0lSUV9FTlRSWSBcXHUwMDI2XFx1MDAyNiBSU0VRIFxcdTAwMjZcXHUwMDI2IEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowNzo1Mi41ODEwODk3NzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYwOTgwNzM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgS2VybmVsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIGBDT05GSUdfRlVURVhgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIE5vIG5lZWQgdG8gd29ycnkgYWJvdXQgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIHRlc3QuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGNhbGxzIHRvIGBmaXh1cF91c2VyX2ZhdWx0YCB3aXRoIGEgTlVMTCBhcmd1bWVudC4gSSd2ZSBmb3VuZCBhIGNvdXBsZSBvZiB0aGVzZTogYGZhdWx0X2luX3NhZmVfd3JpdGVhYmxlYCBpbiBgbW0vZ3VwLmNgIGFuZCBgdXNlcl9ldmVudF9tbV9mYXVsdF9pbmAgaW4gYGtlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfdXNlci5jYC4gSG93ZXZlciwgaXQgc2VlbXMgdGhlIG1haW4gb25lIGlzIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuXG5cblRoZXJlZm9yZSwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gTXkgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgZml4dXBfdXNlcl9mYXVsdGAgYW5kIGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAuIEp1c3QgdG8gYmUgc2FmZSwgSSdsbCBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGBGVVRFWGAgZXZlbiB0aG91Z2ggaXQncyBhbHJlYWR5IG9uIGJ5IGRlZmF1bHQuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgRlVURVhgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG5hbWXigKZZZXMsIGBDT05GSUdfRlVURVhgIGl0IGlzLlxuXG5PbmUgbGFzdCB0aGluZywgbGV0J3MgdmVyaWZ5IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaXMgdGhlIG9ubHkgb25lLiBXaGF0IGFib3V0IHRoZSBvdGhlciByZWxhdGVkIGNhbGxzPyBgZmF1bHRfaW5fdXNlcl9yZWFkYWJsZWA/IERvZXMgaXQgZXhpc3Q/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzY1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA3OjU5LjE5MDg5OTQ1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3OTY4Nzc0MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmF1bHRfaW5fdXNlcl9yZWFkYWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA4OjAxLjc3MDU5NDQyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM0MTMxMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFNhZmVndWFyZCoqXG5cbk5vLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBUaGlua2luZyBhYm91dCB0aGF0IGFwcHJvYWNoIGlzbid0IGdvaW5nIHRvIGdldCBtZSB0aGVyZS5cblxuV2FpdC4uLiB3aGF0IGFib3V0IGBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZWA/IFRoYXQgaGFzIHBvc3NpYmlsaXRpZXMuIE1heWJlIGV4YW1pbmluZyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgY29uY2VwdCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgaXNzdWUgSSdtIHdvcmtpbmcgdGhyb3VnaC4gSXQncyB3b3J0aCBkaWdnaW5nIGludG8gdGhhdCBhbmdsZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMzNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA4OjA0LjgwNDcyODk1OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2OTIzODg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZ2ZzMi9pbm9kZS5jPTIxOTc9c3RhdGljIGJvb2wgZmF1bHRfaW5fZmllbWFwKHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gKmZpKVxcbi0tXFxuZnMvZ2ZzMi9pbm9kZS5jLTIyMDEtXFxuZnMvZ2ZzMi9pbm9kZS5jOjIyMDI6XFx0cmV0dXJuIGZhdWx0X2luX3NhZmVfd3JpdGVhYmxlKChjaGFyIF9fdXNlciAqKWRlc3QsIHNpemUpID09IDA7XFxuZnMvZ2ZzMi9pbm9kZS5jLTIyMDMtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTI3OT1zaXplX3QgZmF1bHRfaW5fc3VicGFnZV93cml0ZWFibGUoY2hhciBfX3VzZXIgKnVhZGRyLCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTI4MDpzaXplX3QgZmF1bHRfaW5fc2FmZV93cml0ZWFibGUoY29uc3QgY2hhciBfX3VzZXIgKnVhZGRyLCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTI4MS1zaXplX3QgZmF1bHRfaW5fcmVhZGFibGUoY29uc3QgY2hhciBfX3VzZXIgKnVhZGRyLCBzaXplX3Qgc2l6ZSk7XFxuLS1cXG5saWIvaW92X2l0ZXIuYz0xNDU9c2l6ZV90IGZhdWx0X2luX2lvdl9pdGVyX3dyaXRlYWJsZShjb25zdCBzdHJ1Y3QgaW92X2l0ZXIgKmksIHNpemVfdCBzaXplKVxcbi0tXFxubGliL2lvdl9pdGVyLmMtMTQ4LVxcdFxcdHNpemVfdCBuID0gbWluKHNpemUsIGlvdl9pdGVyX2NvdW50KGkpKTtcXG5saWIvaW92X2l0ZXIuYzoxNDk6XFx0XFx0biAtPSBmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZShpLVxcdTAwM2V1YnVmICsgaS1cXHUwMDNlaW92X29mZnNldCwgbik7XFxubGliL2lvdl9pdGVyLmMtMTUwLVxcdFxcdHJldHVybiBzaXplIC0gbjtcXG4tLVxcbmxpYi9pb3ZfaXRlci5jLTE2Mi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5saWIvaW92X2l0ZXIuYzoxNjM6XFx0XFx0XFx0cmV0ID0gZmF1bHRfaW5fc2FmZV93cml0ZWFibGUocC1cXHUwMDNlaW92X2Jhc2UgKyBza2lwLCBsZW4pO1xcbmxpYi9pb3ZfaXRlci5jLTE2NC1cXHRcXHRcXHRjb3VudCAtPSBsZW4gLSByZXQ7XFxuLS1cXG5tbS9ndXAuYz0yMDk3PUVYUE9SVF9TWU1CT0woZmF1bHRfaW5fc3VicGFnZV93cml0ZWFibGUpO1xcbi0tXFxubW0vZ3VwLmMtMjA5OS0vKlxcbm1tL2d1cC5jOjIxMDA6ICogZmF1bHRfaW5fc2FmZV93cml0ZWFibGUgLSBmYXVsdCBpbiBhbiBhZGRyZXNzIHJhbmdlIGZvciB3cml0aW5nXFxubW0vZ3VwLmMtMjEwMS0gKiBAdWFkZHI6IHN0YXJ0IG9mIGFkZHJlc3MgcmFuZ2VcXG4tLVxcbm1tL2d1cC5jLTIxMTYtICovXFxubW0vZ3VwLmM6MjExNzpzaXplX3QgZmF1bHRfaW5fc2FmZV93cml0ZWFibGUoY29uc3QgY2hhciBfX3VzZXIgKnVhZGRyLCBzaXplX3Qgc2l6ZSlcXG5tbS9ndXAuYy0yMTE4LXtcXG4tLVxcbm1tL2d1cC5jLTIxMzgtfVxcbm1tL2d1cC5jOjIxMzk6RVhQT1JUX1NZTUJPTChmYXVsdF9pbl9zYWZlX3dyaXRlYWJsZSk7XFxubW0vZ3VwLmMtMjE0MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDg6MDcuMTczOTczNjk2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjc5Mzc1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipBbmFseXppbmcgdGhlIE1lbW9yeSBGYXVsdCBTY2VuYXJpbyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGlzc3VlICppc24ndCogZGlyZWN0bHkgcmVsYXRlZCB0byBgZmF1bHRfaW5fc2FmZV93cml0ZWFibGVgLiBUaGUgY2FsbCB0aGVyZSB0byBgZml4dXBfdXNlcl9mYXVsdGAgdXNlcyBgXHUwMDI2dW5sb2NrZWRgLCB0aGUgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUsIHNvIHRoYXQncyBub3QgdGhlIHByb2JsZW0uXG5cbk15IGZvY3VzIGhhcyB0byBiZSBvbiBgZmF1bHRfaW5fdXNlcl93cml0ZWFibGVgLiBUaGUgcm9vdCBjYXVzZSBoaW5nZXMgb24gYSB2ZXJ5IHNwZWNpZmljIGNvbmRpdGlvbjogYHVubG9ja2VkYCBiZWluZyBhIE5VTEwgcG9pbnRlciwgcmlnaHQ/IFRoYXQncyB0aGUgdnVsbmVyYWJpbGl0eSB3ZSdyZSB0cnlpbmcgdG8gbmFpbCBkb3duLlxuXG5Pa2F5LCB0aW1lIHRvIHN3aXRjaCBnZWFycy4gSSdsbCB1c2UgYHNldC1yZXN1bHRzYCB0b29sIG5vdyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBMZXQncyBzZWUgd2hhdCB0aGF0IHVuY292ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE1MywiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowODoxMi41MDE5MTQ4NzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE5MjAyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZml4dXBfdXNlcl9mYXVsdFwiLFxuICAgIFwiZmF1bHRfaW5fdXNlcl93cml0ZWFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgZml4dXBfdXNlcl9mYXVsdGAgd2hlbiB0aGUgYHVubG9ja2VkYCBwYXJhbWV0ZXIgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIE5VTEwgYHVubG9ja2VkYCBwb2ludGVyIGJ5IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGZ1dGV4IHN5c2NhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEga2VybmVsIGNyYXNoIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZml4dXBfdXNlcl9mYXVsdFwiLFxuICAgIFwiZmF1bHRfaW5fdXNlcl93cml0ZWFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgZml4dXBfdXNlcl9mYXVsdGAgd2hlbiB0aGUgYHVubG9ja2VkYCBwYXJhbWV0ZXIgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIE5VTEwgYHVubG9ja2VkYCBwb2ludGVyIGJ5IGBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZWAgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGZ1dGV4IHN5c2NhbGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEga2VybmVsIGNyYXNoIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowODoxMi42NDM4NDYyNzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjUwNjI4MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQwNzowODoxMi42NDQ3MjIxOTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODUyNDE4MjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBgdW5sb2NrZWQgIT0gTlVMTGAgYmVmb3JlIGRlcmVmZXJlbmNpbmcgaXQuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyAocGFnZSBmYXVsdHMpIG9yIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMyYzc3NTU2ZjFmMWM1N2U5YTJkYWEzMzkzZTk0MmQ4YzI1MDUzY2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAwNzowNjo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmNcbmluZGV4IDA2OTIxMTliNzkwNDMuLmQxMjQ3NWE3ZjdjY2IgMTAwNjQ0XG4tLS0gYS9tbS9ndXAuY1xuKysrIGIvbW0vZ3VwLmNcbkBAIC0xNTk0LDcgKzE1OTQsOCBAQCBpbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0ICogY291bGQgdGVsbCB0aGUgY2FsbGVycyBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIHVubG9jay5cbiBcdFx0ICovXG4gXHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdFx0KnVubG9ja2VkID0gdHJ1ZTtcbitcdFx0aWYgKHVubG9ja2VkKVxuK1x0XHRcdCp1bmxvY2tlZCA9IHRydWU7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTE2MDgsNyArMTYwOSw4IEBAIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFxuIFx0aWYgKHJldCBcdTAwMjYgVk1fRkFVTFRfUkVUUlkpIHtcbiBcdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuK1x0XHRpZiAodW5sb2NrZWQpXG4rXHRcdFx0KnVubG9ja2VkID0gdHJ1ZTtcbiBcdFx0ZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19UUklFRDtcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDA3OjA4OjEyLjY0NDcyMzgyMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTI0MTYyMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIGZvY3VzaW5nIG9uIGBtbS9ndXAuY2AgYW5kIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgdGhlIGBmaXh1cF91c2VyX2ZhdWx0YCBmdW5jdGlvbi4gSXQncyBhIHNpbXBsZSBhZGRpdGlvbiBvZiBhIE5VTEwgY2hlY2sgZm9yIHRoZSBgdW5sb2NrZWRgIHBvaW50ZXIgYmVmb3JlIHRoZSBkZXJlZmVyZW5jZS5cblxuYGBgY1xuLVx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuK1x0XHRpZiAodW5sb2NrZWQpXG4rXHRcdFx0KnVubG9ja2VkID0gdHJ1ZTtcbmBgYFxuXG5Fc3NlbnRpYWxseSwgd2UncmUgZ3VhcmRpbmcgYWdhaW5zdCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZXNlIGFyZSB1c3VhbGx5IGNhdWdodCBieSB0aGUgZXhpc3Rpbmcga2VybmVsIG1lY2hhbmlzbXMgKHBhZ2UgZmF1bHRzIG9uIGFkZHJlc3MgMCksIGFuZCBLQVNBTiB3b3VsZCBhbHNvIGZsYWcgYW55IGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBzbyB0aGlzIGlzIGFib3V0IHJvYnVzdG5lc3MgcmF0aGVyIHRoYW4gZXhwb3NpbmcgbmV3IHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBkb2Vzbid0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZWl0aGVyLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIHBhdGNoIGFnYWluIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmc6XG5cbmBgYGNcbkBAIC0xNTk0LDcgKzE1OTQsOCBAQCBpbnQgZml4dXBfdXNlcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0ICogY291bGQgdGVsbCB0aGUgY2FsbGVycyBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIHVubG9jay5cbiBcdFx0ICovXG4gXHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdFx0KnVubG9ja2VkID0gdHJ1ZTtcbitcdFx0aWYgKHVubG9ja2VkKVxuK1x0XHRcdCp1bmxvY2tlZCA9IHRydWU7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTE2MDgsNyArMTYwOSw4IEBAIGludCBmaXh1cF91c2VyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFxuIFx0aWYgKHJldCBcdTAwMjYgVk1fRkFVTFRfUkVUUlkpIHtcbiBcdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHQqdW5sb2NrZWQgPSB0cnVlO1xuK1x0XHRpZiAodW5sb2NrZWQpXG4rXHRcdFx0KnVubG9ja2VkID0gdHJ1ZTtcbiBcdFx0ZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19UUklFRDtcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbmBgYFxuXG5ZZXAsIGl0J3MgY2xlYXI6IGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gS01TQU4gY29uY2VybnMuIFRoZXJlZm9yZSwgSSdtIG1hcmtpbmcgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjksIk91dHB1dFRva2VucyI6MTA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMDc6MDg6MjEuMTY4ODg4MjI2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGB1bmxvY2tlZCAhPSBOVUxMYCBiZWZvcmUgZGVyZWZlcmVuY2luZyBpdC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChwYWdlIGZhdWx0cykgb3IgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGJ5IGFkZGluZyBhIGNoZWNrIGZvciBgdW5sb2NrZWQgIT0gTlVMTGAgYmVmb3JlIGRlcmVmZXJlbmNpbmcgaXQuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyAocGFnZSBmYXVsdHMpIG9yIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowqq28m[1] Phase: Succeeded StartedAt: 2026-08-26 07:08:33 +0000 UTC FinishedAt: 2026-08-26 07:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 07:08:33 +0000 UTC FinishedAt: 2026-08-26 07:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2] Phase: Succeeded StartedAt: 2026-08-26 07:08:33 +0000 UTC FinishedAt: 2026-08-26 10:51:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 07:08:33 +0000 UTC FinishedAt: 2026-08-26 10:51:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 07:08:33 +0000 UTC FinishedAt: 2026-08-26 07:08:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 07:08:33 +0000 UTC FinishedAt: 2026-08-26 07:08:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowqq28m/series-workflowqq28m-convert-artifact-2266527578/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 07:08:43 +0000 UTC FinishedAt: 2026-08-26 07:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 07:08:43 +0000 UTC FinishedAt: 2026-08-26 07:25:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2638e0de-6203-465b-ad3b-0b4f0cfd2f96,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-workflowqq28m/series-workflowqq28m-convert-artifact-2266527578/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": "f47e5630-e9ee-4c8e-a0f4-c6e3dfe5f69e", "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-workflowqq28m/series-workflowqq28m-build-action-608611336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 07:08:43 +0000 UTC FinishedAt: 2026-08-26 07:24:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2638e0de-6203-465b-ad3b-0b4f0cfd2f96,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-workflowqq28m/series-workflowqq28m-convert-artifact-2266527578/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": "f47e5630-e9ee-4c8e-a0f4-c6e3dfe5f69e", "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-workflowqq28m/series-workflowqq28m-build-action-608611336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 07:25:02 +0000 UTC FinishedAt: 2026-08-26 07:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 07:25:02 +0000 UTC FinishedAt: 2026-08-26 07:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 07:25:02 +0000 UTC FinishedAt: 2026-08-26 07:25:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 07:25:02 +0000 UTC FinishedAt: 2026-08-26 07:25:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowqq28m/series-workflowqq28m-convert-artifact-3175413173/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 07:25:12 +0000 UTC FinishedAt: 2026-08-26 07:27:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 07:25:12 +0000 UTC FinishedAt: 2026-08-26 07:27:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f47e5630-e9ee-4c8e-a0f4-c6e3dfe5f69e,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-workflowqq28m/series-workflowqq28m-build-action-608611336/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-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 07:27:31 +0000 UTC FinishedAt: 2026-08-26 07:27:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 07:27:31 +0000 UTC FinishedAt: 2026-08-26 07:27:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 07:27:31 +0000 UTC FinishedAt: 2026-08-26 07:44:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 07:27:31 +0000 UTC FinishedAt: 2026-08-26 07:44:02 +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:*2638e0de-6203-465b-ad3b-0b4f0cfd2f96,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-workflowqq28m/series-workflowqq28m-convert-artifact-3175413173/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": "cb4d8e63-3d7b-4a95-9047-e0870ab7a151", "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-workflowqq28m/series-workflowqq28m-build-action-1372661441/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 07:27:31 +0000 UTC FinishedAt: 2026-08-26 07:43:52 +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:*2638e0de-6203-465b-ad3b-0b4f0cfd2f96,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-workflowqq28m/series-workflowqq28m-convert-artifact-3175413173/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": "cb4d8e63-3d7b-4a95-9047-e0870ab7a151", "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-workflowqq28m/series-workflowqq28m-build-action-1372661441/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 07:44:02 +0000 UTC FinishedAt: 2026-08-26 07:44:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 07:44:02 +0000 UTC FinishedAt: 2026-08-26 07:44:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 07:44:02 +0000 UTC FinishedAt: 2026-08-26 07:46:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 07:44:02 +0000 UTC FinishedAt: 2026-08-26 07:46:04 +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:*cb4d8e63-3d7b-4a95-9047-e0870ab7a151,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-workflowqq28m/series-workflowqq28m-build-action-1372661441/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-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 07:46:14 +0000 UTC FinishedAt: 2026-08-26 10:51:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 07:46:14 +0000 UTC FinishedAt: 2026-08-26 10:51:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*f47e5630-e9ee-4c8e-a0f4-c6e3dfe5f69e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb4d8e63-3d7b-4a95-9047-e0870ab7a151,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-workflowqq28m/series-workflowqq28m-build-action-608611336/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-workflowqq28m/series-workflowqq28m-build-action-1372661441/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 07:46:14 +0000 UTC FinishedAt: 2026-08-26 07:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 07:46:14 +0000 UTC FinishedAt: 2026-08-26 07:46:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqq28m/series-workflowqq28m-convert-artifact-3602600346/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 07:46:14 +0000 UTC FinishedAt: 2026-08-26 07:46:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 07:46:14 +0000 UTC FinishedAt: 2026-08-26 07:46:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 07:46:14 +0000 UTC FinishedAt: 2026-08-26 07:46:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 07:46:24 +0000 UTC FinishedAt: 2026-08-26 10:51:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq28m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fixup_user_fault","fault_in_user_writeable"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8a9091052cc81caa5570835049c809da804baa3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX"],"series_id":"ff63c58c-393c-47d8-9728-43ff8039f5d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 07:46:24 +0000 UTC FinishedAt: 2026-08-26 10:51:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f47e5630-e9ee-4c8e-a0f4-c6e3dfe5f69e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb4d8e63-3d7b-4a95-9047-e0870ab7a151,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-workflowqq28m/series-workflowqq28m-build-action-608611336/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-workflowqq28m/series-workflowqq28m-build-action-1372661441/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-workflowqq28m/series-workflowqq28m-convert-artifact-3602600346/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}