Name: series-workflowzzkkj Phase: Succeeded StartedAt: 2026-08-18 13:26:18 +0000 UTC FinishedAt: 2026-08-18 17:58:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[0] Phase: Succeeded StartedAt: 2026-08-18 13:26:18 +0000 UTC FinishedAt: 2026-08-18 14:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 13:26:18 +0000 UTC FinishedAt: 2026-08-18 14:17:11 +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": "f5f9327e251a4efb9a98774093ef4675a4b170b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMORY_HOTPLUG" ], "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": "f5f9327e251a4efb9a98774093ef4675a4b170b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMORY_HOTPLUG" ], "series_id": "4776599a-7438-4f08-993c-d6a976c8d097" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "start_isolate_page_range", "alloc_contig_range_noprof", "alloc_contig_frozen_range_noprof", "offline_pages" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AgdG8gdXNlIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgaW5zdGVhZCBvZiBgYnVkZHlfb3JkZXIoKWAgYW5kIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBvcmRlci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIGEgY29uY3VycmVudGx5IG1vZGlmaWVkIG9yIGludmFsaWQgcGFnZSBvcmRlciBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgc2hpZnQgb3IgaW5jb3JyZWN0IFBGTiBjYWxjdWxhdGlvbi4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBvdXQtb2YtYm91bmRzL2ludmFsaWQgdmFsdWVzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOLCBVQlNBTiwgYW5kIGtlcm5lbCB3YXJuaW5ncyAobGlrZSBgVk1fV0FSTl9PTl9PTkNFYCkgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdW5kZWZpbmVkIGJlaGF2aW9yIHJlc3VsdGluZyBmcm9tIGludmFsaWQgcGFnZSBvcmRlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgdmFsaWRhdGUgdGhlIG9yZGVyIGFnYWluc3QgYE1BWF9QQUdFX09SREVSYC4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgaW5jb3JyZWN0IFBGTiBpbmNyZW1lbnRzIGNhdXNlZCBieSByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIHRoZSBvcmRlciBvZiBhIGJ1ZGR5IHBhZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gcGFnZSBpc29sYXRpb24sIHdoaWNoIGlzIHVzZWQgYnkgQ01BIGFuZCBtZW1vcnkgaG90cGx1Zy4gSXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTA2NWYyZGZhY2JmNjdiNGI3MTcwNTcxM2Q2YmY0Nzc5YjliOTI4MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE0OjA5OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li44YWEwOTZmMTc1NGQ1IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTM4NywxMyAmIzQzOzM4NywxNiBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcbiBcdFx0fVxuIFxuIFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0aW50IG9yZGVyID0gYnVkZHlfb3JkZXIocGFnZSk7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBvcmRlcjtcbiBcbi1cdFx0XHQvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovXG4tXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiAmIzQzOyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuJiM0MztcdFx0XHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbiYjNDM7XHRcdFx0aWYgKGxpa2VseShvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKSkge1xuJiM0MztcdFx0XHRcdC8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi9cbiYjNDM7XHRcdFx0XHRWTV9XQVJOX09OX09OQ0UocGZuICYjNDM7ICgxIFx1MDAzY1x1MDAzYyBvcmRlcikgXHUwMDNlIGJvdW5kYXJ5X3Bmbik7XG4gXG4tXHRcdFx0cGZuICYjNDM7PSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdHBmbiAmIzQzOz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgdmFsaWRhdGUgdGhlIG9yZGVyIGFnYWluc3QgYE1BWF9QQUdFX09SREVSYC4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgaW5jb3JyZWN0IFBGTiBpbmNyZW1lbnRzIGNhdXNlZCBieSByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIHRoZSBvcmRlciBvZiBhIGJ1ZGR5IHBhZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gcGFnZSBpc29sYXRpb24sIHdoaWNoIGlzIHVzZWQgYnkgQ01BIGFuZCBtZW1vcnkgaG90cGx1Zy4gSXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTA2NWYyZGZhY2JmNjdiNGI3MTcwNTcxM2Q2YmY0Nzc5YjliOTI4MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDE0OjA5OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pc29sYXRpb24uYyBiL21tL3BhZ2VfaXNvbGF0aW9uLmMKaW5kZXggMzJjZThhN2Q5ZGYzNS4uOGFhMDk2ZjE3NTRkNSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lzb2xhdGlvbi5jCkBAIC0zODcsMTMgJiM0MzszODcsMTYgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sCiAJCX0KIAogCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQlpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgb3JkZXI7CiAKLQkJCS8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi8KLQkJCVZNX1dBUk5fT05fT05DRShwZm4gJiM0MzsgKDEgJmx0OyZsdDsgb3JkZXIpICZndDsgYm91bmRhcnlfcGZuKTsKJiM0MzsJCQlvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTsKJiM0MzsJCQlpZiAobGlrZWx5KG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKSkgewomIzQzOwkJCQkvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovCiYjNDM7CQkJCVZNX1dBUk5fT05fT05DRShwZm4gJiM0MzsgKDEgJmx0OyZsdDsgb3JkZXIpICZndDsgYm91bmRhcnlfcGZuKTsKIAotCQkJcGZuICYjNDM7PSAxVUwgJmx0OyZsdDsgb3JkZXI7Ci0JCQljb250aW51ZTsKJiM0MzsJCQkJcGZuICYjNDM7PSAxVUwgJmx0OyZsdDsgb3JkZXI7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJfQogCiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIG1vbmtleWluZyB3aXRoIHRoZSBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgc3dhcHBpbmcgb3V0IGBidWRkeV9vcmRlcihwYWdlKWAgZm9yIGBidWRkeV9vcmRlcl91bnNhZmUocGFnZSlgLCBhbmQgdGhlbiBzbGFwcGluZyBvbiBhIGBsaWtlbHlgIGNoZWNrIHRvIHNlZSBpZiB0aGUgb3JkZXIgaXMgd2l0aGluIGJvdW5kcyAoYCZsdDs9IE1BWF9QQUdFX09SREVSYCkuCgpGdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBmb2N1c2luZyBvbiB0aGUgcGFnZSBpc29sYXRpb24gbWVjaGFuaXNtcy4gVGhpcyBpcyBwcmV0dHkgc2lnbmlmaWNhbnQgYmVjYXVzZSBwYWdlIGlzb2xhdGlvbiBpcyBmdW5kYW1lbnRhbCB0byB0aGluZ3MgbGlrZSBtZW1vcnkgaG90cGx1ZywgQ01BLCBhbmQgY29tcGFjdGlvbiDigJMgYWxsIGNyaXRpY2FsIGFzcGVjdHMgb2Ygc3lzdGVtIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuCgpNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGV4YWN0bHkgaG93IGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIHVzZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIGl0cyBjYWxsIGNoYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIG1vdGl2YXRpbmcgdGhpcyBtb3ZlIHRvIGBidWRkeV9vcmRlcl91bnNhZmVgIGFuZCB3aHkgdGhlIGFkZGVkIGNoZWNrIGlzIG5lY2Vzc2FyeSwgb3IgaWYgaXQmIzM5O3MgdGhlcmUgYXMgYSBzYWZlZ3VhcmQuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBzb3VuZCBhbmQgd29uJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9pc29sYXRpb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2lzb2xhdGlvbi5jPTI4Mz1fX2ZpcnN0X3ZhbGlkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0yOTgtLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjI5OTogKiBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soKSAtLSB0cmllcyB0byBpc29sYXRlIGEgcGFnZWJsb2NrIHRoYXQgbWlnaHQgYmVcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzAwLSAqIHdpdGhpbiBhIGZyZWUgb3IgaW4tdXNlIHBhZ2UuXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0zMDQtICogQHNraXBfaXNvbGF0aW9uOlx0dGhlIGZsYWcgdG8gc2tpcCB0aGUgcGFnZWJsb2NrIGlzb2xhdGlvbiBpbiBzZWNvbmRcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MzA1OiAqXHRcdFx0aXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKClcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA2LSAqXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0zMTktICovXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjMyMDpzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3Bmbixcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzIxLVx0XHRcdGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUsIGJvb2wgaXNvbGF0ZV9iZWZvcmUsXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYz00ODU9aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDk2LVx0LyogaXNvbGF0ZSBbaXNvbGF0ZV9zdGFydCwgaXNvbGF0ZV9zdGFydCAmIzQzOyBwYWdlYmxvY2tfbnJfcGFnZXMpIHBhZ2VibG9jayAqL1xubW0vcGFnZV9pc29sYXRpb24uYzo0OTc6XHRyZXQgPSBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soaXNvbGF0ZV9zdGFydCwgbW9kZSwgZmFsc2UsXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ5OC1cdFx0XHRza2lwX2lzb2xhdGlvbik7XG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01MDUtXHQvKiBpc29sYXRlIFtpc29sYXRlX2VuZCAtIHBhZ2VibG9ja19ucl9wYWdlcywgaXNvbGF0ZV9lbmQpIHBhZ2VibG9jayAqL1xubW0vcGFnZV9pc29sYXRpb24uYzo1MDY6XHRyZXQgPSBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soaXNvbGF0ZV9lbmQsIG1vZGUsIHRydWUsIHNraXBfaXNvbGF0aW9uKTtcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTA3LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIEZ1bmN0aW9uJiMzOTtzIENhbGwgSGllcmFyY2h5KioKCk9rYXksIHNvIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIGNhbGxlZCBieSBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYW5kIHRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBwYWdlIGJsb2NrIGlzb2xhdGlvbiB3b3Jrcy4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIHRvIHVuZGVyc3RhbmQgaXRzICpvd24qIGNhbGxpbmcgZnVuY3Rpb25zLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCByZXZlYWwgdGhlIHRyaWdnZXJzIHRoYXQgc2V0IHRoaXMgaXNvbGF0aW9uIHByb2Nlc3MgaW4gbW90aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgY2hhaW4gaXMgY3J1Y2lhbCBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9ucy4gSXQmIzM5O3MgYWxsIGFib3V0IGNvbnRleHQsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSB1cHN0cmVhbSBmbG93IGhlbHBzIG1lIG1hcCB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaD02MT1ib29sIHBhZ2VibG9ja191bmlzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oLTYyLVxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oOjYzOmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaC02NC1cdFx0XHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTkwMj1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5NjgtXHQvKiBzZXQgYWJvdmUgcmFuZ2UgYXMgaXNvbGF0ZWQgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTk2OTpcdHJldCA9IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydF9wZm4sIGVuZF9wZm4sXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5NzAtXHRcdFx0XHQgICAgICAgUEJfSVNPTEFURV9NT0RFX01FTV9PRkZMSU5FKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzEwOD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxNDQtXHQgKiBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIGR1ZSB0byB0aGUgd2F5IHBhZ2UgYWxsb2NhdG9yXG5tbS9wYWdlX2FsbG9jLmM6NzE0NTpcdCAqIHdvcmssIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIGhhcyBzcGVjaWFsIGhhbmRsaW5ncyBmb3IgdGhpcy5cbm1tL3BhZ2VfYWxsb2MuYy03MTQ2LVx0ICpcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzE2MS1cbm1tL3BhZ2VfYWxsb2MuYzo3MTYyOlx0cmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0LCBlbmQsIG1vZGUpO1xubW0vcGFnZV9hbGxvYy5jLTcxNjMtXHRpZiAocmV0KVxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MzIwPXN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDQ5LS8qKlxubW0vcGFnZV9pc29sYXRpb24uYzo0NTA6ICogc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgLSBtYXJrIHBhZ2UgcmFuZ2UgTUlHUkFURV9JU09MQVRFXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ1MS0gKiBAc3RhcnRfcGZuOlx0XHRUaGUgZmlyc3QgUEZOIG9mIHRoZSByYW5nZSB0byBiZSBpc29sYXRlZC5cbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ4NC0gKi9cbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NDg1OmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbixcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDg2LVx0XHRcdCAgICAgZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSlcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUyOC0vKipcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTI5OiAqIHVuZG9faXNvbGF0ZV9wYWdlX3JhbmdlIC0gdW5kbyBlZmZlY3RzIG9mIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUzMC0gKiBAc3RhcnRfcGZuOlx0XHRUaGUgZmlyc3QgUEZOIG9mIHRoZSBpc29sYXRlZCByYW5nZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NDkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipUcmFjaW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBGbG93KioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MuIEkgc2VlIHRoYXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgaXMgYmVpbmcgY2FsbGVkIGJ5IGBvZmZsaW5lX3BhZ2VzYCBhbmQgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYC4gVGhhdCYjMzk7cyBhIGtleSBzdGFydGluZyBwb2ludC4gIFRoZW4gSSBvYnNlcnZlIHRoYXQgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYC4gIFNpbmNlIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBmbG93LCBhbmQgdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGFsbG9jYXRpb24gc2NoZW1lIGlzIHNpdHVhdGVkIGluIHRoZSB3aWRlciBwaWN0dXJlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjYWxsIHNpdGVzIG9mIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb24gYGFsbG9jX2NvbnRpZ19yYW5nZWAuIFRoYXQgd2lsbCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2NvbnRpZ19yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdD0zOTA9c2NlbmFyaW9zOiBtZW1vcnkgb2ZmbGluZSwgbWVtb3J5IGZhaWx1cmUsIGxvbmd0ZXJtIHBpbm5pbmcsIHN5c2NhbGxzKG1iaW5kLFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q6MzkxOm1pZ3JhdGVfcGFnZXMgYW5kIG1vdmVfcGFnZXMpLCBhbGxvY19jb250aWdfcmFuZ2UoKSBhbmQgYWxsb2NfY29udGlnX3BhZ2VzKCkuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0zOTItTm93IG9ubHkgbWVtb3J5IG9mZmxpbmUsIG1lbW9yeSBmYWlsdXJlIGFuZCBzeXNjYWxscyBhbGxvdyBmYWxsYmFja2luZyB0byBhbGxvY2F0ZVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz0xMTg3PXN0YXRpYyB2b2lkIHZpcnRpb19tZW1fZmFrZV9vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTEyMDUtXHRcdCAqIG9ubGluaW5nIHRoZSBtZW1vcnkgYmxvY2suIE90aGVyd2lzZSwgaXQgd2FzIGFsbG9jYXRlZFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjEyMDY6XHRcdCAqIHVzaW5nIGFsbG9jX2NvbnRpZ19yYW5nZSgpLiBBbGwgcGFnZXMgaW4gYSBzdWJibG9jayBhcmVcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjA3LVx0XHQgKiBhbGlrZS5cbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9MTIyND1zdGF0aWMgaW50IHZpcnRpb19tZW1fZmFrZV9vZmZsaW5lKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSwgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTEyMzAtXHQvKlxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjEyMzE6XHQgKiBUT0RPOiBXZSB3YW50IGFuIGFsbG9jX2NvbnRpZ19yYW5nZSgpIG1vZGUgdGhhdCB0cmllcyB0byBhbGxvY2F0ZVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTEyMzItXHQgKiBoYXJkZXIgKGUuZy4sIGRlYWxpbmcgd2l0aCB0ZW1wb3JhcmlseSBwaW5uZWQgcGFnZXMsIFBDUCksIGVzcGVjaWFsbHlcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTI0NS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxMjQ2Olx0XHRyYyA9IGFsbG9jX2NvbnRpZ19yYW5nZShwZm4sIHBmbiAmIzQzOyBucl9wYWdlcywgQUNSX0ZMQUdTX05PTkUsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTI0Ny1cdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTI1MzU9c3RhdGljIGludCB2aXJ0aW9fbWVtX2luaXRfaG90cGx1ZyhzdHJ1Y3QgdmlydGlvX21lbSAqdm0pXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTI1NTctXHQvKlxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjI1NTg6XHQgKiBhbGxvY19jb250aWdfcmFuZ2UoKSB3b3JrcyByZWxpYWJseSB3aXRoIHBhZ2VibG9ja1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTI1NTktXHQgKiBncmFudWxhcml0eSBvbiBaT05FX05PUk1BTCwgdXNlIHBhZ2VibG9ja19ucl9wYWdlcy5cbi0tXG5pbmNsdWRlL2xpbnV4L2NtYS5oLTE1LS8qXG5pbmNsdWRlL2xpbnV4L2NtYS5oOjE2OiAqICB0aGUgYnVkZHkgLS0gZXNwZWNpYWxseSBwYWdlYmxvY2sgbWVyZ2luZyBhbmQgYWxsb2NfY29udGlnX3JhbmdlKClcbmluY2x1ZGUvbGludXgvY21hLmgtMTctICogLS0gY2FuIGRlYWwgd2l0aCBvbmx5IHNvbWUgcGFnZWJsb2NrcyBvZiBhIGhpZ2hlci1vcmRlciBwYWdlIGJlaW5nXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaD00NDg9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUyLVxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTM6aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1NC1cdFx0YWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDU1OiNkZWZpbmUgYWxsb2NfY29udGlnX3JhbmdlKC4uLilcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1NjpcdGFsbG9jX2hvb2tzKGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC00NTctXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD04NzM9ZW51bSB6b25lX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtOTM2LVx0ICogICAgbWVtb3J5IG9mZmxpbmluZywgaG93ZXZlciwgY2Fubm90IGJlIG1vdmVkL2FsbG9jYXRlZC4gVGhlc2VcbmluY2x1ZGUvbGludXgvbW16b25lLmg6OTM3Olx0ICogICAgdGVjaG5pcXVlcyBtaWdodCB1c2UgYWxsb2NfY29udGlnX3JhbmdlKCkgdG8gaGlkZSBwcmV2aW91c2x5XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTkzOC1cdCAqICAgIGV4cG9zZWQgcGFnZXMgZnJvbSB0aGUgYnVkZHkgYWdhaW4gKGUuZy4sIHRvIGltcGxlbWVudCBzb21lIHNvcnRcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTk1MC1cdCAqIEluIGdlbmVyYWwsIG5vIHVubW92YWJsZSBhbGxvY2F0aW9ucyB0aGF0IGRlZ3JhZGUgbWVtb3J5IG9mZmxpbmluZ1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo5NTE6XHQgKiBzaG91bGQgZW5kIHVwIGluIFpPTkVfTU9WQUJMRS4gQWxsb2NhdG9ycyAobGlrZSBhbGxvY19jb250aWdfcmFuZ2UoKSlcbmluY2x1ZGUvbGludXgvbW16b25lLmgtOTUyLVx0ICogaGF2ZSB0byBleHBlY3QgdGhhdCBtaWdyYXRpbmcgcGFnZXMgaW4gWk9ORV9NT1ZBQkxFIGNhbiBmYWlsIChldmVuXG4tLVxubW0vY21hLmM9MTAzPWJvb2wgY21hX3ZhbGlkYXRlX3pvbmVzKHN0cnVjdCBjbWEgKmNtYSlcbi0tXG5tbS9jbWEuYy0xMjQtXHRcdC8qXG5tbS9jbWEuYzoxMjU6XHRcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIHJlcXVpcmVzIHRoZSBwZm4gcmFuZ2Ugc3BlY2lmaWVkXG5tbS9jbWEuYy0xMjYtXHRcdCAqIHRvIGJlIGluIHRoZSBzYW1lIHpvbmUuIFNpbXBsaWZ5IGJ5IGZvcmNpbmcgdGhlIGVudGlyZVxuLS1cbm1tL2h1Z2V0bGIuYz0yNzI3PWludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiLmMtMjczNi1cdCAqIEZlbmNlIG9mZiBnaWdhbnRpYyBwYWdlcyBhcyB0aGVyZSBpcyBhIGN5Y2xpYyBkZXBlbmRlbmN5IGJldHdlZW5cbm1tL2h1Z2V0bGIuYzoyNzM3Olx0ICogYWxsb2NfY29udGlnX3JhbmdlIGFuZCB0aGVtLiBSZXR1cm4gLUVOT01FTSBhcyB0aGlzIGhhcyB0aGUgZWZmZWN0XG5tbS9odWdldGxiLmMtMjczOC1cdCAqIG9mIGJhaWxpbmcgb3V0IHJpZ2h0IGF3YXkgd2l0aG91dCBmdXJ0aGVyIHJldHJ5aW5nLlxuLS1cbm1tL2ludGVybmFsLmg9MTAxNz1zdHJ1Y3QgY29tcGFjdF9jb250cm9sIHtcbi0tXG5tbS9pbnRlcm5hbC5oLTEwNTMtXHRcdFx0XHRcdCAqL1xubW0vaW50ZXJuYWwuaDoxMDU0Olx0Ym9vbCBhbGxvY19jb250aWc7XHRcdC8qIGFsbG9jX2NvbnRpZ19yYW5nZSBhbGxvY2F0aW9uICovXG5tbS9pbnRlcm5hbC5oLTEwNTUtfTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzI0Nj1FWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI0OC0vKipcbm1tL3BhZ2VfYWxsb2MuYzo3MjQ5OiAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIC0tIHRyaWVzIHRvIGFsbG9jYXRlIGdpdmVuIHJhbmdlIG9mIHBhZ2VzXG5tbS9wYWdlX2FsbG9jLmMtNzI1MC0gKiBAc3RhcnQ6XHRzdGFydCBQRk4gdG8gYWxsb2NhdGVcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI2NC0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXHRcdFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNzI4MC1cbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTEzND1zdGF0aWMgc3RydWN0IHBhZ2UgKmhhc191bm1vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTE0NC1cdFx0Lypcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MTQ1Olx0XHQgKiBDTUEgYWxsb2NhdGlvbnMgKGFsbG9jX2NvbnRpZ19yYW5nZSkgcmVhbGx5IG5lZWQgdG8gbWFya1xubW0vcGFnZV9pc29sYXRpb24uYy0xNDYtXHRcdCAqIGlzb2xhdGUgQ01BIHBhZ2VibG9ja3MgZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBtb3ZhYmxlIGluIGZhY3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTA5CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0IHRvdWNoZXMgc29tZSBwcmV0dHkgY3JpdGljYWwgYXJlYXM6IGBhbGxvY19jb250aWdfcmFuZ2VgLCB3aGljaCBpcyB1c2VkIGJ5IENNQSwgdmlydGlvX21lbSwgYW5kIG1lbW9yeSBob3RwbHVnLiBDTUEgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nIOKAkyB3ZSBjYW4gaGl0IGl0IHdpdGggYG1tYXBgIG9uIENNQSBhcmVhcywgZG1hLWJ1ZnMsIG9yIGV2ZW4gaHVnZXBhZ2VzLiBNZW1vcnkgaG90cGx1Zz8gU3lzZnMgaXMgdGhlIG9idmlvdXMgcm91dGUuCgpUaGUgaGVhcnQgb2YgdGhlIGNoYW5nZSBpcyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCwgYW5kIHRoYXQmIzM5O3MgY29uY2VybmluZyBiZWNhdXNlIHRoYXQmIzM5O3MgY2FsbGVkIGR1cmluZyBwYWdlYmxvY2sgaXNvbGF0aW9uLiBUaGV5JiMzOTt2ZSBzd2FwcGVkIG91dCBgYnVkZHlfb3JkZXJgIGZvciBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYWRkZWQgYSBjaGVjayBmb3IgdGhlIG9yZGVyLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgYSBidWcuIEkgY2FuIHNlZSB3aGF0IHRoZXkmIzM5O3JlIHNheWluZyBhYm91dCBgYnVkZHlfb3JkZXIocGFnZSlgIHBvdGVudGlhbGx5IHJldHVybmluZyBnYXJiYWdlIGlmIGBQYWdlQnVkZHlgIGFuZCBhbGxvY2F0aW9uIGFyZSByYWNpbmcuCgpXYWl0IGEgc2Vjb25k4oCmIEkmIzM5O20gY2F0Y2hpbmcgb24gbm93LiBUaGV5JiMzOTtyZSBjaGVja2luZyBgUGFnZUJ1ZGR5KHBhZ2UpYCByaWdodCAqYmVmb3JlKiBgYnVkZHlfb3JkZXIocGFnZSlgLiBCdXQsIHNpbmNlIHRoaXMgaXNuJiMzOTt0IHVuZGVyIHRoZSB6b25lIGxvY2ssIGFub3RoZXIgdGhyZWFkIGNhbiBjbGVhciBgUGFnZUJ1ZGR5YCBhbmQgb3ZlcndyaXRlIHRoZSBgcGFnZV9wcml2YXRlYCBmaWVsZCB0aGF0IHN0b3JlcyB0aGUgb3JkZXIuIFRoZXJlZm9yZSwgYGJ1ZGR5X29yZGVyYCBjb3VsZCByZWFkIGEgaHVnZSB2YWx1ZSwgbGVhZGluZyB0byBhbiBvdXQtb2YtYm91bmRzIHNoaWZ0IG9yIHNvbWUgcmlkaWN1bG91cyBwYWdlIGNvdW50LCB0cmlnZ2VyaW5nIHRoYXQgYFZNX1dBUk5fT05fT05DRWAgb3Igc2tpcHBpbmcgdG9ucyBvZiBwYWdlcy4gQ2xldmVyLiBCeSB1c2luZyBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgY2hlY2tpbmcgdGhlIG9yZGVyIGFnYWluc3QgYE1BWF9QQUdFX09SREVSYCwgdGhleSYjMzk7cmUgYXZvaWRpbmcgdGhlIHJhY2UgY29uZGl0aW9uIGFuZCB0aGUgcmVzdWx0aW5nIGNoYW9zLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgb24gYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2VgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBJcyBgYWxsb2NfY29udGlnX3JhbmdlYCBleHBvcnRlZCBhbmQgcmVhY2hhYmxlPyBZZXAsIGdvb2QuIExldCYjMzk7cyBkaWcgaW50byBgb2ZmbGluZV9wYWdlc2AuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZmbGluZV9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL21tdS5jPTIwNzU9c3RhdGljIGJvb2wgY2FuX3VubWFwX3dpdGhvdXRfc3BsaXQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMTA1LSAqIGluYWR2ZXJ0ZW50bHkgcmVtb3ZlZCBhcyBpdCBibG9ja3MgcGZuIHJhbmdlIG9mZmxpbmluZyBwcm9jZXNzIGluXG5hcmNoL2FybTY0L21tL21tdS5jOjIxMDY6ICogX19vZmZsaW5lX3BhZ2VzKCkuIEhlbmNlIHRoaXMgcHJldmVudHMgYm90aCBvZmZsaW5pbmcgYXMgd2VsbCBhc1xuYXJjaC9hcm02NC9tbS9tbXUuYy0yMTA3LSAqIHJlbW92YWwgcHJvY2VzcyBmb3IgYm9vdCBtZW1vcnkgd2hpY2ggaXMgaW5pdGlhbGx5IGFsd2F5cyBvbmxpbmUuXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTI4MD1zdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjkxLVx0ICogVW5hY2NvdW50IGJlZm9yZSBvZmZsaW5pbmcsIHN1Y2ggdGhhdCB1bnBvcHVsYXRlZCB6b25lIGFuZCBrdGhyZWFkc1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjI5MjpcdCAqIGNhbiBwcm9wZXJseSBiZSB0b3JuIGRvd24gaW4gb2ZmbGluZV9wYWdlcygpLlxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTI5My1cdCAqL1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDEtXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzAyOlx0cmV0ID0gb2ZmbGluZV9wYWdlcyhzdGFydF9wZm4gJiM0MzsgbnJfdm1lbW1hcF9wYWdlcyxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDMtXHRcdFx0ICAgIG5yX3BhZ2VzIC0gbnJfdm1lbW1hcF9wYWdlcywgbWVtLVx1MDAzZXpvbmUsIG1lbS1cdTAwM2Vncm91cCk7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzA0LVx0aWYgKHJldCkge1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMwNTpcdFx0Lyogb2ZmbGluZV9wYWdlcygpIGZhaWxlZC4gQWNjb3VudCBiYWNrLiAqL1xuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwNi1cdFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2ND1leHRlcm4gdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI2NTpleHRlcm4gaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjY2LVx0XHRcdCBzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0yNzI9c3RhdGljIGlubGluZSB2b2lkIHRyeV9vZmZsaW5lX25vZGUoaW50IG5pZCkge31cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNzMtXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6Mjc0OnN0YXRpYyBpbmxpbmUgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjc1LVx0XHRcdFx0c3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9NTM5PXZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODMtICogc3VyZSB0aGF0IHBhZ2VzIGFyZSBtYXJrZWQgcmVzZXJ2ZWQgYW5kIHpvbmVzIGFyZSBhZGp1c3QgcHJvcGVybHkgYnlcbm1tL21lbW9yeV9ob3RwbHVnLmM6NTg0OiAqIGNhbGxpbmcgb2ZmbGluZV9wYWdlcygpLlxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODUtICovXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xODkwPXN0YXRpYyBpbnQgY291bnRfc3lzdGVtX3JhbV9wYWdlc19jYih1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDEtICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5MDI6aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDMtXHRcdFx0c3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKVxuLS1cbm1tL21tX2luaXQuYz0xNTM5PXZvaWQgX19yZWYgZnJlZV9hcmVhX2luaXRfY29yZV9ob3RwbHVnKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vbW1faW5pdC5jLTE1NzctXHQgKiBjbGVhciBhbGwgem9uZXMmIzM5OyBwcmVzZW50X3BhZ2VzIGFuZCBtYW5hZ2VkX3BhZ2VzIGJlY2F1c2UgdGhleSB3aWxsXG5tbS9tbV9pbml0LmM6MTU3ODpcdCAqIGJlIHVwZGF0ZWQgaW4gb25saW5lX3BhZ2VzKCkgYW5kIG9mZmxpbmVfcGFnZXMoKS5cbm1tL21tX2luaXQuYy0xNTc5LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IE9mZmxpbmUgUGFnZXMgYW5kIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gYG9mZmxpbmVfcGFnZXNgIGlzIGNhbGxlZCBieSBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgLiBUaGF0IGNvbm5lY3Rpb24gaXMgaW1wb3J0YW50LiBBbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBpdHNlbGYgZ2V0cyB0cmlnZ2VyZWQgdmlhIHN5c2ZzIG1lbW9yeSBob3RwbHVnLi4uIHdoaWNoIHdlIGFsbCBrbm93IGNhbiBiZSBhIHNvdXJjZSBvZiBmdXp6aW5nIGF0dGFja3MuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFdlJiMzOTt2ZSBzZWVuIHNvbWUgZXhwbG9pdHMgbGV2ZXJhZ2luZyB0aGF0LiBBbmQsIG9mIGNvdXJzZSwgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIGlzIGFsd2F5cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBTbywgZ2l2ZW4gdGhpcyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0dGVyLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgYGFsbG9jX2NvbnRpZ19yYW5nZWAgYW5kIGBvZmZsaW5lX3BhZ2VzYC4gVW5kZXJzdGFuZGluZyB0aGVzZSB3aWxsIGNsYXJpZnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBhbmQgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBpbiB0aGUgY29udGV4dCBvZiBvZmZsaW5lIG1lbW9yeSBibG9ja3MsIGVzcGVjaWFsbHkgd2hlbiB0cmlnZ2VyZWQgdmlhIGEgY29udHJvbGxhYmxlIGhvdHBsdWcgZXZlbnQuIFRoaXMgZmVlbHMgbGlrZSBpdCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGFyZWEgb2YgaW50ZXJlc3QgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RQTFVHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTUxOT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcbi0tXG5tbS9LY29uZmlnLTUyMi0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTIzOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTI0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDYzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2JsZW06CgoqKlRoaW5raW5nIFRocm91Z2ggTWVtb3J5IE1hbmFnZW1lbnQgYW5kIE9mZmxpbmUgUGFnZXMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgYE1FTU9SWV9IT1RQTFVHYCBpbnRlcmFjdHMgd2l0aCBgb2ZmbGluZV9wYWdlc2AuIEl0IHNlZW1zIGxpa2UgYE1FTU9SWV9IT1RQTFVHYCBpcyBhIHByZXJlcXVpc2l0ZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGR5bmFtaWNhbGx5IHJlbW92aW5nIG1lbW9yeSwgYW5kIG9mZmxpbmUgcGFnZXMgbGlrZWx5IG5lZWQgdGhpcyBjYXBhYmlsaXR5IHRvIGZ1bmN0aW9uLiBCdXQgdGhhdCByYWlzZXMgYW5vdGhlciBxdWVzdGlvbiB0aGF0IGlzIHRvcCBvZiBtaW5kIC0gSSBuZWVkIHRvIGNvbnNpZGVyIGBhbGxvY19jb250aWdfcmFuZ2VgLiBEb2VzIHRoZSB1c2Ugb2YgYG9mZmxpbmVfcGFnZXNgIHNvbWVob3cgY29tcGxpY2F0ZSwgaW50ZXJhY3Qgd2l0aCwgb3IgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIGBhbGxvY19jb250aWdfcmFuZ2VgPyBBcmUgdGhlcmUgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBvcHRpbWl6YXRpb25zIGhlcmU/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24uIFRoaXMgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ01BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEwNjQ9Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4tLVxubW0vS2NvbmZpZy0xMDY2LVxubW0vS2NvbmZpZzoxMDY3OmNvbmZpZyBDTUFcbm1tL0tjb25maWctMTA2OC1cdGJvb2wgXCYjMzQ7Q29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDgxLVxubW0vS2NvbmZpZzoxMDgyOmNvbmZpZyBDTUFfREVCVUdGU1xubW0vS2NvbmZpZy0xMDgzLVx0Ym9vbCBcJiMzNDtDTUEgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODctXG5tbS9LY29uZmlnOjEwODg6Y29uZmlnIENNQV9TWVNGU1xubW0vS2NvbmZpZy0xMDg5LVx0Ym9vbCBcJiMzNDtDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwOTQtXG5tbS9LY29uZmlnOjEwOTU6Y29uZmlnIENNQV9BUkVBU1xubW0vS2NvbmZpZy0xMDk2LVx0aW50IFwmIzM0O01heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTE0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqQ01BIEFsbG9jYXRpb24gU3RyYXRlZ3kqKgoKT2theSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaGFuZGxlIHRoaXMgYWxsb2NhdGlvbi4gQ2xlYXJseSwgdGhlIGBDTUFgIG1lY2hhbmlzbSBpcyBlc3NlbnRpYWwgZm9yIG1hbmFnaW5nIHRoZSBhbGxvY2F0aW9ucywgc28gdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgYENPTlRJR19BTExPQ2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgQ01BIGFsbG9jYXRpb25zIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYW5kIGFueSBvdGhlciBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhhdCBjb2RlIGZvciBhIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT05USUdfQUxMT0MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxuLS1cbm1tL0tjb25maWctNzE4LVxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xubW0vS2NvbmZpZy03MjAtXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcdTAwMjZcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gQ29udGlndW91cyBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBDT05USUdfQUxMT0NgIGNvbmZpZ3VyYXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyB0cmlnZ2Vycy4gSXQgc2VlbXMgdGhhdCB3aGV0aGVyIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiBpcyBlbmFibGVkIGRlcGVuZHMgb24gYSBjb3VwbGUgb2Yga2V5IGZhY3RvcnM6IHdoZXRoZXIgd2UmIzM5O3JlIHVzaW5nIG1lbW9yeSBpc29sYXRpb24gKmFuZCogY29tcGFjdGlvbiwgKm9yKiBpZiB3ZSYjMzk7cmUgdXNpbmcgQ01BLiBUaGF0IG1ha2VzIHNlbnNlLCBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgbWFuYWdlbWVudC4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGZpcnN0IHBvdGVudGlhbCB0cmlnZ2VyLCBgTUVNT1JZX0lTT0xBVElPTmAsIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfSVNPTEFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTQ5OT1jb25maWcgTlVNQV9LRUVQX01FTUlORk9cbi0tXG5tbS9LY29uZmlnLTUwMS1cbm1tL0tjb25maWc6NTAyOmNvbmZpZyBNRU1PUllfSVNPTEFUSU9OXG5tbS9LY29uZmlnLTUwMy1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBNZW1vcnkgSXNvbGF0aW9uIFNldHRpbmdzKioKCk9rYXksIHNvIGBNRU1PUllfSVNPTEFUSU9OYCBpcyBhIGJvb2xlYW4sIGdvdCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucywgYW5kIGhvdyBpdCBpcyBhY3R1YWxseSBlbXBsb3llZC4gU28sIG5leHQsIG15IGZvY3VzIGltbWVkaWF0ZWx5IHNoaWZ0cyB0byB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogKndobyogb3IgKndoYXQqIGlzIG1ha2luZyB0aGlzIHNlbGVjdGlvbj8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoZSBhbnN3ZXIgd2lsbCBsaWtlbHkgcmV2ZWFsIHNvbWUga2V5IGFyY2hpdGVjdHVyYWwgZGVjaXNpb25zIGFyb3VuZCBzZWN1cml0eSwgcGVyZm9ybWFuY2UsIG9yIHJlc291cmNlIG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBjb25maWd1cmF0aW9ucywgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zLCBhbGwgdGhlIGVudHJ5IHBvaW50cyB0aGF0IHRvdWNoIHRoaXMgc2V0dGluZy4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgbG9naWMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBNRU1PUllfSVNPTEFUSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTIzPW1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTI0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xubW0vS2NvbmZpZzo1MjU6XHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxubW0vS2NvbmZpZy01MjYtXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4tLVxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcbi0tXG5tbS9LY29uZmlnLTEwNzAtXHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnOjEwNzE6XHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxubW0vS2NvbmZpZy0xMDcyLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBNZW1vcnkgSXNvbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYm90aCBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgQ01BYCBhcmUgZGlyZWN0bHkgc2VsZWN0aW5nIGBNRU1PUllfSVNPTEFUSU9OYC4gSW50ZXJlc3RpbmcsIGJlY2F1c2UgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGV5JiMzOTtyZSBib3RoIHJlbGF0ZWQgdG8gc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgdGFza3MuIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIGNsZWFyOiBlbmFibGluZyBlaXRoZXIgb2YgdGhvc2UsIHdoaWNoIEkmIzM5O2QgbGlrZWx5IGRvIGluIG1hbnkgb2YgbXkgY29uZmlndXJhdGlvbnMsIGF1dG9tYXRpY2FsbHkgc2V0cyB1cCB0aGUgdW5kZXJseWluZyBtZW1vcnkgaXNvbGF0aW9uIGZyYW1ld29yay4gR29vZC4KClRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLCBhbmQgdGhhdCBjb2RlIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gIGlzIHR1cm5lZCBvbiwgc28gdGhhdCBjb25maXJtcyBteSBpbml0aWFsIHRob3VnaHQuIEVuYWJsaW5nIGBNRU1PUllfSE9UUExVR2Agb3IgYENNQWAgdG8gbWUsIGlzIHRoZSByaWdodCBjYWxsIGdpdmVuIHRoZSBsaWtlbHkgZGVwZW5kZW5jaWVzLgoKTm93LCBsZXQgbWUgY2hlY2sgc29tZXRoaW5nIHNwZWNpZmljIHJlZ2FyZGluZyB0aGUgaXNvbGF0aW9uIHJvdXRpbmVzLiBJIHdhbnQgdG8gc2VlIGlmIGBhbGxvY19jb250aWdfcmFuZ2VgIGlzIGV4cG9ydGVkLCBiZWNhdXNlIEkgaGF2ZSBhIHVzZSBjYXNlIGluIG1pbmQgd2hlcmUgdGhhdCB3b3VsZCBiZSB1c2VmdWwuICpZZXMhKiBFeGNlbGxlbnQsIHRoYXQgd2lsbCBiZSB1c2FibGUuIE9rYXksIGFuZCB3aGF0IGFib3V0IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgPyBMZXQmIzM5O3MgY2hlY2sgdGhhdCBvbmUgYXMgd2VsbC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBNZW1vcnkgQWxsb2NhdGlvbiBQcm9jZWR1cmVzKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBtYW5hZ2VkLiBJIHNlZSBhIGRpc2NyZXBhbmN5LiBUaGUgZGF0YSBJIG5lZWQgaXNuJiMzOTt0IGJlaW5nICYjMzQ7ZXhwb3J0ZWQsJiMzNDsgbWVhbmluZyBpdCYjMzk7cyBub3QgYmVpbmcgZXhwbGljaXRseSBtYWRlIGF2YWlsYWJsZSBvciBhY2Nlc3NpYmxlIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBjb250ZXh0LiBIb3dldmVyLCB0aGUgYGFsbG9jX2NvbnRpZ19yYW5nZWAgZnVuY3Rpb24gaXMsIHdoaWNoIGlzIGEga2V5IHByaW1pdGl2ZSBmb3IgYWxsb2NhdGluZyBjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeS4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBpc3N1ZSBvciBvdmVyc2lnaHQgaW4gaG93IHRoZXNlIHBhZ2VzIGFyZSBiZWluZyBoYW5kbGVkIGRvd25zdHJlYW0uCgpUbyB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGFuZCB0byBkaWFnbm9zZSB0aGUgcHJvYmxlbSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBgb2ZmbGluZV9wYWdlc2AgZGF0YSBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBzeXN0ZW0gdHJhY2tzIHBhZ2VzIHRoYXQgYXJlICpub3QqIGN1cnJlbnRseSBpbiB1c2Ugb3IgYXJlIGRlbGliZXJhdGVseSB0YWtlbiBvdXQgb2YgY2lyY3VsYXRpb24uIFBlcmhhcHMgdGhlcmUmIzM5O3MgYW4gaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHBhZ2VzIGluZGljYXRlZCBieSBgb2ZmbGluZV9wYWdlc2AgYW5kIGhvdyBgYWxsb2NfY29udGlnX3JhbmdlYCBpcyBiZWluZyB1c2VkLCBvciBub3QgdXNlZCwgZ2l2ZW4gdGhlICYjMzQ7bm90IGV4cG9ydGVkJiMzNDsgZGF0YS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIGNoZWNrIHdoYXQgdGhlIHN0YXRlIG9mIHRoZXNlIG9mZmxpbmUgcGFnZXMgaXMsIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbiwgYW5kIHdoeSBteSB0YXJnZXRlZCBkYXRhIGlzbiYjMzk7dCBiZWluZyBleHBvcnRlZC4gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbj8gQSBtaXNzaW5nIGZsYWc/IEFuIHVuaW50ZW5kZWQgaW50ZXJhY3Rpb24/IFRoaXMgaXMgdGhlIGNvcmUgb2Ygd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGxvb2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qb2ZmbGluZV9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDYwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVW5leHBvcnRlZCBTeW1ib2wqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgdGhlIHN5bWJvbCBpc24mIzM5O3QgZXhwb3J0ZWQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZvY3VzIG9uIHRoZSBzeW1ib2xzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIHRoZSBwYWdlIHJhbmdlIG1hbmFnZW1lbnQsIHNvIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2VgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLgoKV2FpdCBhIG1pbnV0ZSwgaXNuJiMzOTt0IGBhbGxvY19jb250aWdfcmFuZ2VgIGEgbWFjcm8/IEkgc2VlbSB0byByZW1lbWJlciBzZWVpbmcgdGhhdCBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2dmcC5oYC4gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiB5ZXAsIGhlcmUgaXQgaXM6CgpgYGBjCiNkZWZpbmUgYWxsb2NfY29udGlnX3JhbmdlKC4uLikgXAoJYWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpCmBgYAoKQWgsIHRoYXQmIzM5O3MgcmlnaHQuIFNvLCB0aGUgKmFjdHVhbCogZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGlzIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYC4gVGhhdCBtYWtlcyBtb3JlIHNlbnNlLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2dmcC5oPTQ0OD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC00NTItXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1MzppbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVx0XHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9nZnAuaC00NTUtI2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDU2Olx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzI0Nj1FWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI2NC0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXHRcdFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNzI4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NDEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBGb2N1czogQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgSG90cGx1Z2dpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBCYXNlZCBvbiB0aGUgdGFzayBhdCBoYW5kLCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGFuZCBgb2ZmbGluZV9wYWdlc2AuIFRoZXJlJiMzOTtzIGFsc28gYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCwgd2hpY2ggaXMgYSByZWxhdGVkIHZhcmlhbnQgSSBzaG91bGQga2VlcCBhbiBleWUgb24uIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpcyBzdGF0aWM7IHllcywgaXQmIzM5O3Mgc2NvcGVkIHRoYXQgd2F5LCB3aGljaCBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBjYWxsIGNvbnRleHQuIFNvLCB0byBzb2xpZGlmeSBpdCwgbXkga2V5IHRhcmdldHMgYXJlOgoKKiAgIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgCiogICBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAKKiAgIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAKKiAgIGBvZmZsaW5lX3BhZ2VzYAoKR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBtb3N0IHJlbGV2YW50IGFuZCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZSBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgQ01BYC4gQSBxdWljayByZXZpZXcgb2YgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE1FTU9SWV9IT1RQTFVHYCBpcyBpbiBvcmRlcjsgaXQgY2FuIHNoaWZ0IG15IHRoaW5raW5nIGFuZCB1bmNvdmVyIHVuZGVybHlpbmcgZmFjdG9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RQTFVHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTUxOT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcbi0tXG5tbS9LY29uZmlnLTUyMi0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTIzOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTI0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM4NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgaW50ZXJuYWxzOgoKKipDb25kaXRpb25hbCBEZXBlbmRlbmNpZXMgYW5kIERlZmF1bHQgQ29uZmlndXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGBNRU1PUllfSE9UUExVR2AgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0JiMzOTtzIHByZXR0eSBmdW5kYW1lbnRhbCBmb3IgZHluYW1pY2FsbHkgYWRkaW5nIG9yIHJlbW92aW5nIG1lbW9yeSwgYSBjcml0aWNhbCBmZWF0dXJlIGZvciBtYW55IHNlcnZlciBhbmQgdmlydHVhbGl6YXRpb24gc2V0dXBzLiBJIGtub3cgaXQgaW5oZXJlbnRseSByZWxpZXMgb24gYFNQQVJTRU1FTV9WTUVNTUFQYCBhbmQgYEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHYC4gTWFrZXMgc2Vuc2U7IGhvdHBsdWdnaW5nIGlzIGNvbXBsZXgsIGFuZCB0aG9zZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb25zIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZS4KClRoZSBrZXkgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgaG93IHViaXF1aXRvdXMgaXMgYFNQQVJTRU1FTV9WTUVNTUFQYD8gSXMgaXQgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1vc3QgYXJjaGl0ZWN0dXJlcyBvciBrZXJuZWxzPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBJdCYjMzk7cyBhIGNyaXRpY2FsIHByZXJlcXVpc2l0ZSwgYW5kIGtub3dpbmcgd2hldGhlciBJIG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQgb3Igd2hldGhlciBpdCYjMzk7cyBoYW5kbGVkICYjMzQ7b3V0LW9mLXRoZS1ib3gmIzM0OyBjaGFuZ2VzIGhvdyBJIGFwcHJvYWNoIHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgdGhlIHR5cGljYWwgYnVpbGQgY29uZmlndXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVmYXVsdHMgaGVscHMgbWUgYW50aWNpcGF0ZSBwb3RlbnRpYWwgaXNzdWVzIGFuZCBzdHJlYW1saW5lIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MuIFRoYXQmIzM5O3MgYSBwb2ludCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLCBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTQ1MT1jb25maWcgU1BBUlNFTUVNX0VYVFJFTUVcbi0tXG5tbS9LY29uZmlnLTQ1NC1cbm1tL0tjb25maWc6NDU1OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVcbm1tL0tjb25maWctNDU2LVx0Ym9vbFxubW0vS2NvbmZpZy00NTctXG5tbS9LY29uZmlnOjQ1ODpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctNDU5LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNDY1LVxubW0vS2NvbmZpZzo0NjY6Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQX1BSRUlOSVRcbm1tL0tjb25maWctNDY3LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIGBTUEFSU0VNRU1fVk1FTU1BUGAgaXMgZGVmaW5pdGl2ZWx5IGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBubyBzdXJwcmlzZXMgdGhlcmUuIE15IG1pbmQsIGhvd2V2ZXIsIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBpbXBsaWNhdGlvbnMgZm9yIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRpb24gKENNQSkuIEl0JiMzOTtzIGEgbmF0dXJhbCBwcm9ncmVzc2lvbiBvZiB0aG91Z2h0OyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IHRoZXNlIHR3byBpbnRlcmFjdCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgbWVtb3J5IGxheW91dCBpbXBsaWNhdGlvbnMuIElzIHRoZXJlIHNvbWV0aGluZyBzcGVjaWFsIEkgc2hvdWxkIGtlZXAgaW4gbWluZCB3aXRoIHRoaXMgY29tYmluYXRpb24/IFRpbWUgdG8gZGlnIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28gYW5kIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ01BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEwNjQ9Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4tLVxubW0vS2NvbmZpZy0xMDY2LVxubW0vS2NvbmZpZzoxMDY3OmNvbmZpZyBDTUFcbm1tL0tjb25maWctMTA2OC1cdGJvb2wgXCYjMzQ7Q29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDgxLVxubW0vS2NvbmZpZzoxMDgyOmNvbmZpZyBDTUFfREVCVUdGU1xubW0vS2NvbmZpZy0xMDgzLVx0Ym9vbCBcJiMzNDtDTUEgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODctXG5tbS9LY29uZmlnOjEwODg6Y29uZmlnIENNQV9TWVNGU1xubW0vS2NvbmZpZy0xMDg5LVx0Ym9vbCBcJiMzNDtDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwOTQtXG5tbS9LY29uZmlnOjEwOTU6Y29uZmlnIENNQV9BUkVBU1xubW0vS2NvbmZpZy0xMDk2LVx0aW50IFwmIzM0O01heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI4NAoJCQkJCQkJb3V0cHV0OiAxODcKCQkJCQkJCXRob3VnaHRzOiA1MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCB0b3VjaGVzIHNvbWUgY3J1Y2lhbCBhcmVhcy4gYENNQWAgZGVwZW5kcyBvbiBgTU1VYCwgc28gZW5hYmxpbmcgYm90aCBgQ01BYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBqdXN0IHRvIGJlIHN1cmUuLi4gQWgsIGBNRU1PUllfSVNPTEFUSU9OYCBpcyBzZWxlY3RlZCBieSBib3RoIGBNRU1PUllfSE9UUExVR2AgYW5kIGBDTUFgIOKAkyBzbyB0aG9zZSB0d28gYXJlIGRlZmluaXRlbHkgc3VmZmljaWVudCBmb3IgbXkgYW5hbHlzaXMuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlIGl0c2VsZi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbW9kaWZ5aW5nIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHdpdGhpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AuIFRoZSBrZXkgY2hhbmdlIGlzIHVzaW5nIGBidWRkeV9vcmRlcl91bnNhZmVgIGFuZCB2YWxpZGF0aW5nIGl0cyBvdXRwdXQgYWdhaW5zdCBgTUFYX1BBR0VfT1JERVJgLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBndWFyZHMgYWdhaW5zdCBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgcG90ZW50aWFsIFBGTiBpbmNyZW1lbnQgZXJyb3JzLCB3aGljaCBjYW4gYXJpc2UgZnJvbSByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIHRoZSBvcmRlciBvZiBhIGJ1ZGR5IHBhZ2UuIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGBidWRkeV9vcmRlcmAgY291bGQgaGF2ZSByZXR1cm5lZCBnYXJiYWdlIHZhbHVlcyBsZWFkaW5nIHRvIHRob3NlIGVycm9ycywgYXMgdGhlIGNvZGUgaGFkIGEgcmFjZSBjb25kaXRpb24gaXNzdWUuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUsIGluIGZhY3QuIEl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhc3NvY2lhdGVkIHdpdGggcGFnZSBpc29sYXRpb24uIEl0JiMzOTtzIHVzZWQgYnkgYm90aCBgQ01BYCBhbmQgbWVtb3J5IGhvdHBsdWcsIGJvdGgga2V5IGFyZWFzLiBUaGlzIG1ha2VzIGl0IHF1aXRlIGxpa2VseSB0aGF0IHRoZXJlIGlzIGEgZ29vZCByZWFzb24gdG8gaW52ZXN0aWdhdGUgdGhpcyBjaGFuZ2UuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgY291bGQgZGVmaW5pdGVseSBiZW5lZml0IGZyb20gZnV6emluZy4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiBzeW1ib2xzIGxpa2UgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCwgYW5kIGBvZmZsaW5lX3BhZ2VzYCBmb3IgbXkgaW52ZXN0aWdhdGlvbi4gU28sIGxldCBtZSBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgdmFsaWRhdGUgdGhlIG9yZGVyIGFnYWluc3QgYE1BWF9QQUdFX09SREVSYC4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgaW5jb3JyZWN0IFBGTiBpbmNyZW1lbnRzIGNhdXNlZCBieSByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIHRoZSBvcmRlciBvZiBhIGJ1ZGR5IHBhZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gcGFnZSBpc29sYXRpb24sIHdoaWNoIGlzIHVzZWQgYnkgQ01BIGFuZCBtZW1vcnkgaG90cGx1Zy4gSXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIHZhbGlkYXRlIHRoZSBvcmRlciBhZ2FpbnN0IGBNQVhfUEFHRV9PUkRFUmAuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGluY29ycmVjdCBQRk4gaW5jcmVtZW50cyBjYXVzZWQgYnkgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyB0aGUgb3JkZXIgb2YgYSBidWRkeSBwYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IENNQSBhbmQgbWVtb3J5IGhvdHBsdWcuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AgdG8gdXNlIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgaW5zdGVhZCBvZiBgYnVkZHlfb3JkZXIoKWAgYW5kIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBvcmRlci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIGEgY29uY3VycmVudGx5IG1vZGlmaWVkIG9yIGludmFsaWQgcGFnZSBvcmRlciBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgc2hpZnQgb3IgaW5jb3JyZWN0IFBGTiBjYWxjdWxhdGlvbi4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBvdXQtb2YtYm91bmRzL2ludmFsaWQgdmFsdWVzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOLCBVQlNBTiwgYW5kIGtlcm5lbCB3YXJuaW5ncyAobGlrZSBgVk1fV0FSTl9PTl9PTkNFYCkgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdW5kZWZpbmVkIGJlaGF2aW9yIHJlc3VsdGluZyBmcm9tIGludmFsaWQgcGFnZSBvcmRlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTA2NWYyZGZhY2JmNjdiNGI3MTcwNTcxM2Q2YmY0Nzc5YjliOTI4MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDE0OjA5OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pc29sYXRpb24uYyBiL21tL3BhZ2VfaXNvbGF0aW9uLmMKaW5kZXggMzJjZThhN2Q5ZGYzNS4uOGFhMDk2ZjE3NTRkNSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lzb2xhdGlvbi5jCkBAIC0zODcsMTMgJiM0MzszODcsMTYgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sCiAJCX0KIAogCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQlpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgb3JkZXI7CiAKLQkJCS8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi8KLQkJCVZNX1dBUk5fT05fT05DRShwZm4gJiM0MzsgKDEgJmx0OyZsdDsgb3JkZXIpICZndDsgYm91bmRhcnlfcGZuKTsKJiM0MzsJCQlvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTsKJiM0MzsJCQlpZiAobGlrZWx5KG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKSkgewomIzQzOwkJCQkvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovCiYjNDM7CQkJCVZNX1dBUk5fT05fT05DRShwZm4gJiM0MzsgKDEgJmx0OyZsdDsgb3JkZXIpICZndDsgYm91bmRhcnlfcGZuKTsKIAotCQkJcGZuICYjNDM7PSAxVUwgJmx0OyZsdDsgb3JkZXI7Ci0JCQljb250aW51ZTsKJiM0MzsJCQkJcGZuICYjNDM7PSAxVUwgJmx0OyZsdDsgb3JkZXI7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJfQogCiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3CgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDQzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgSXNvbGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2l0aGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgc3dpdGNoaW5nIGZyb20gYGJ1ZGR5X29yZGVyKHBhZ2UpYCB0byBgYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpYCBhbmQgdGhyb3dpbmcgaW4gYSBjaGVjayB0byBlbnN1cmUgdGhlIGBvcmRlcmAgaXNuJiMzOTt0IHJpZGljdWxvdXMg4oCTIG1ha2luZyBzdXJlIGl0JiMzOTtzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTUFYX1BBR0VfT1JERVJgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBpcyB0aGlzIEtNU0FOLXJlbGF0ZWQ/IElzIHRoZXJlIGEgcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUsIG9yIHdyaXRpbmcgaXQgdG8gdXNlciBzcGFjZT8KCkFmdGVyIGEgY2xvc2VyIGxvb2ssIHRoZSBmb2N1cyBpcyByZWFsbHkgb24gaGFuZGxpbmcgcG90ZW50aWFsbHkgaW52YWxpZCBvciBjb25jdXJyZW50bHkgbW9kaWZpZWQgcGFnZSBvcmRlcnMuIGBidWRkeV9vcmRlcl91bnNhZmVgIGRvZXMgcmVhZCB0aGUgcGFnZSBvcmRlciAqd2l0aG91dCogYSBsb2NrLCB3aGljaCBtZWFucyBpdCAqY291bGQqIHJlYWQgZ2FyYmFnZSBvciBnZXQgYSB2YWx1ZSB0aGF0JiMzOTtzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcgbW9kaWZpZWQuIFRoZSBjcnVjaWFsIGRpc3RpbmN0aW9uIGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIEtNU0FOIHNlbnNlIOKAkyBLTVNBTiBkZXRlY3RzIGFsbG9jYXRpb25zIHRoYXQgYXJlIG5ldmVyIGluaXRpYWxpemVkLiBUaGlzIGlzIGFib3V0IHBvdGVudGlhbGx5IHJlYWRpbmcgYW4gb3V0LW9mLWJvdW5kcyBvciBpbnZhbGlkIHZhbHVlIHRoYXQgbWlnaHQgYmUgc2V0IHByZXZpb3VzbHkgYnkgYSBjb25jdXJyZW50IG9wZXJhdGlvbi4KCk9rYXksIGxldCYjMzk7cyBuYWlsIHRoaXMgZG93bi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgbWFraW5nIGl0IGludG8gdXNlciBzcGFjZSBhcyBhIHJlc3VsdCBvZiB0aGlzIHBhdGNoLiBBZnRlciBjaGVja2luZyBJIHNlZSBpdOKAmXMganVzdCByZWFkaW5nIGBwYWdlLSZndDtwcml2YXRlYCAob3Igd2hlcmV2ZXIgYG9yZGVyYCBpcyBzdG9yZWQpLCB3aGljaCBjb3VsZCBiZSBjb25jdXJyZW50bHkgbW9kaWZpZWQsIGJ1dCBub3QgdW5pbml0aWFsaXplZCBpbiB0aGUgS01TQU4gc2Vuc2UuIE15IGNvbmNsdXNpb246IHRoaXMgaXMgYWJvdXQgcG90ZW50aWFsICpvdXQtb2YtYm91bmRzKiBpc3N1ZXMgb3IgdW5kZWZpbmVkIGJlaGF2aW9yIGR1ZSB0byBpbmNvcnJlY3Qgb3JkZXIgdmFsdWVzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOLCBVQlNBTiwgYW5kIGBWTV9XQVJOX09OX09OQ0VgIHNob3VsZCBjYXRjaCBhbnkgaXNzdWVzIGhlcmUuIEdpdmVuIHRoYXQsIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpMZXQgbWUgd3JpdGUgaXQgZG93bi4gVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBpc29sYXRpb24gZnVuY3Rpb24gdG8gdXNlIGBidWRkeV9vcmRlcl91bnNhZmVgLCB3aGljaCBpcyBzYWZlIHRvIHJlYWQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBwYWdlIG9yZGVyIGlzIG91dC1vZi1ib3VuZHMgb3IgaXMgYmVpbmcgbW9kaWZpZWQgY29uY3VycmVudGx5LCB3aGljaCBjYW4gdGhlbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgc2hpZnRzIG9yIGluY29ycmVjdCBQRk4gY2FsY3VsYXRpb25zLiBLTVNBTiBpcyBub3QgdGhlIHJpZ2h0IHRvb2wgZm9yIGZpbmRpbmcgZXJyb3JzIGluIHRoaXMgcGF0Y2ggc2luY2UgdGhlIGVycm9ycyBpdCBpcyBtZWFudCB0byB1bmNvdmVyIGFyZSBpbnZhbGlkIHZhbHVlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AgdG8gdXNlIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgaW5zdGVhZCBvZiBgYnVkZHlfb3JkZXIoKWAgYW5kIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBvcmRlci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIGEgY29uY3VycmVudGx5IG1vZGlmaWVkIG9yIGludmFsaWQgcGFnZSBvcmRlciBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgc2hpZnQgb3IgaW5jb3JyZWN0IFBGTiBjYWxjdWxhdGlvbi4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBvdXQtb2YtYm91bmRzL2ludmFsaWQgdmFsdWVzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOLCBVQlNBTiwgYW5kIGtlcm5lbCB3YXJuaW5ncyAobGlrZSBgVk1fV0FSTl9PTl9PTkNFYCkgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdW5kZWZpbmVkIGJlaGF2aW9yIHJlc3VsdGluZyBmcm9tIGludmFsaWQgcGFnZSBvcmRlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZSgpYCBpbnN0ZWFkIG9mIGBidWRkeV9vcmRlcigpYCBhbmQgYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIG9yZGVyLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgYSBjb25jdXJyZW50bHkgbW9kaWZpZWQgb3IgaW52YWxpZCBwYWdlIG9yZGVyIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyBzaGlmdCBvciBpbmNvcnJlY3QgUEZOIGNhbGN1bGF0aW9uLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIG91dC1vZi1ib3VuZHMvaW52YWxpZCB2YWx1ZXMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4sIFVCU0FOLCBhbmQga2VybmVsIHdhcm5pbmdzIChsaWtlIGBWTV9XQVJOX09OX09OQ0VgKSBhcmUgc3VmZmljaWVudCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IgcmVzdWx0aW5nIGZyb20gaW52YWxpZCBwYWdlIG9yZGVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDowOTo1NC4xMzEzOTU5MzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjYzODk2NzAwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ01BXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiLFxuICAgIFwiYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZSgpYCBpbnN0ZWFkIG9mIGBidWRkeV9vcmRlcigpYCBhbmQgYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIG9yZGVyLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgYSBjb25jdXJyZW50bHkgbW9kaWZpZWQgb3IgaW52YWxpZCBwYWdlIG9yZGVyIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyBzaGlmdCBvciBpbmNvcnJlY3QgUEZOIGNhbGN1bGF0aW9uLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIG91dC1vZi1ib3VuZHMvaW52YWxpZCB2YWx1ZXMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4sIFVCU0FOLCBhbmQga2VybmVsIHdhcm5pbmdzIChsaWtlIGBWTV9XQVJOX09OX09OQ0VgKSBhcmUgc3VmZmljaWVudCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IgcmVzdWx0aW5nIGZyb20gaW52YWxpZCBwYWdlIG9yZGVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIHZhbGlkYXRlIHRoZSBvcmRlciBhZ2FpbnN0IGBNQVhfUEFHRV9PUkRFUmAuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGluY29ycmVjdCBQRk4gaW5jcmVtZW50cyBjYXVzZWQgYnkgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyB0aGUgb3JkZXIgb2YgYSBidWRkeSBwYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IENNQSBhbmQgbWVtb3J5IGhvdHBsdWcuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MDk6NTQuMTMxNDAwOTIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg1OTIxMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTA2NWYyZGZhY2JmNjdiNGI3MTcwNTcxM2Q2YmY0Nzc5YjliOTI4MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNDowOTo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lzb2xhdGlvbi5jIGIvbW0vcGFnZV9pc29sYXRpb24uY1xcbmluZGV4IDMyY2U4YTdkOWRmMzUuLjhhYTA5NmYxNzU0ZDUgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xcbisrKyBiL21tL3BhZ2VfaXNvbGF0aW9uLmNcXG5AQCAtMzg3LDEzICszODcsMTYgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0aW50IG9yZGVyID0gYnVkZHlfb3JkZXIocGFnZSk7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlcjtcXG4gXFxuLVxcdFxcdFxcdC8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi9cXG4tXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiArICgxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSBcXHUwMDNlIGJvdW5kYXJ5X3Bmbik7XFxuK1xcdFxcdFxcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbitcXHRcXHRcXHRpZiAobGlrZWx5KG9yZGVyIFxcdTAwM2M9IE1BWF9QQUdFX09SREVSKSkge1xcbitcXHRcXHRcXHRcXHQvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovXFxuK1xcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcXHUwMDNjXFx1MDAzYyBvcmRlcikgXFx1MDAzZSBib3VuZGFyeV9wZm4pO1xcbiBcXG4tXFx0XFx0XFx0cGZuICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdHBmbiArPSAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjA5OjU1LjUxNzk3MTk5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQxNTMzMjA0OTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwib2ZmbGluZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIHZhbGlkYXRlIHRoZSBvcmRlciBhZ2FpbnN0IGBNQVhfUEFHRV9PUkRFUmAuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGluY29ycmVjdCBQRk4gaW5jcmVtZW50cyBjYXVzZWQgYnkgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyB0aGUgb3JkZXIgb2YgYSBidWRkeSBwYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IENNQSBhbmQgbWVtb3J5IGhvdHBsdWcuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTA2NWYyZGZhY2JmNjdiNGI3MTcwNTcxM2Q2YmY0Nzc5YjliOTI4MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE0OjA5OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pc29sYXRpb24uYyBiL21tL3BhZ2VfaXNvbGF0aW9uLmNcbmluZGV4IDMyY2U4YTdkOWRmMzUuLjhhYTA5NmYxNzU0ZDUgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2lzb2xhdGlvbi5jXG4rKysgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5AQCAtMzg3LDEzICszODcsMTYgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG4gXHRcdH1cbiBcbiBcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdGludCBvcmRlciA9IGJ1ZGR5X29yZGVyKHBhZ2UpO1xuK1x0XHRcdHVuc2lnbmVkIGludCBvcmRlcjtcbiBcbi1cdFx0XHQvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovXG4tXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiArICgxIFx1MDAzY1x1MDAzYyBvcmRlcikgXHUwMDNlIGJvdW5kYXJ5X3Bmbik7XG4rXHRcdFx0b3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4rXHRcdFx0aWYgKGxpa2VseShvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKSkge1xuK1x0XHRcdFx0LyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqL1xuK1x0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiArICgxIFx1MDAzY1x1MDAzYyBvcmRlcikgXHUwMDNlIGJvdW5kYXJ5X3Bmbik7XG4gXG4tXHRcdFx0cGZuICs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4tXHRcdFx0Y29udGludWU7XG4rXHRcdFx0XHRwZm4gKz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFxuIFx0XHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MDk6NTUuNTE3OTczMzk5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNTEzNjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgbW9ua2V5aW5nIHdpdGggdGhlIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBzd2FwcGluZyBvdXQgYGJ1ZGR5X29yZGVyKHBhZ2UpYCBmb3IgYGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKWAsIGFuZCB0aGVuIHNsYXBwaW5nIG9uIGEgYGxpa2VseWAgY2hlY2sgdG8gc2VlIGlmIHRoZSBvcmRlciBpcyB3aXRoaW4gYm91bmRzIChgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUmApLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBmb2N1c2luZyBvbiB0aGUgcGFnZSBpc29sYXRpb24gbWVjaGFuaXNtcy4gVGhpcyBpcyBwcmV0dHkgc2lnbmlmaWNhbnQgYmVjYXVzZSBwYWdlIGlzb2xhdGlvbiBpcyBmdW5kYW1lbnRhbCB0byB0aGluZ3MgbGlrZSBtZW1vcnkgaG90cGx1ZywgQ01BLCBhbmQgY29tcGFjdGlvbiDigJMgYWxsIGNyaXRpY2FsIGFzcGVjdHMgb2Ygc3lzdGVtIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuXG5cbk15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgZXhhY3RseSBob3cgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaXMgdXNlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB3aXRoaW4gaXRzIGNhbGwgY2hhaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBtb3RpdmF0aW5nIHRoaXMgbW92ZSB0byBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgd2h5IHRoZSBhZGRlZCBjaGVjayBpcyBuZWNlc3NhcnksIG9yIGlmIGl0J3MgdGhlcmUgYXMgYSBzYWZlZ3VhcmQuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBzb3VuZCBhbmQgd29uJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjA5OjU5LjcyMzExMjk2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQxODY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9pc29sYXRpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2lzb2xhdGlvbi5jPTI4Mz1fX2ZpcnN0X3ZhbGlkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTI5OC0vKipcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjI5OTogKiBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soKSAtLSB0cmllcyB0byBpc29sYXRlIGEgcGFnZWJsb2NrIHRoYXQgbWlnaHQgYmVcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwMC0gKiB3aXRoaW4gYSBmcmVlIG9yIGluLXVzZSBwYWdlLlxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMDQtICogQHNraXBfaXNvbGF0aW9uOlxcdHRoZSBmbGFnIHRvIHNraXAgdGhlIHBhZ2VibG9jayBpc29sYXRpb24gaW4gc2Vjb25kXFxubW0vcGFnZV9pc29sYXRpb24uYzozMDU6ICpcXHRcXHRcXHRpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soKVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA2LSAqXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMxOS0gKi9cXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjMyMDpzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMyMS1cXHRcXHRcXHRlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlLCBib29sIGlzb2xhdGVfYmVmb3JlLFxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYz00ODU9aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy00OTYtXFx0LyogaXNvbGF0ZSBbaXNvbGF0ZV9zdGFydCwgaXNvbGF0ZV9zdGFydCArIHBhZ2VibG9ja19ucl9wYWdlcykgcGFnZWJsb2NrICovXFxubW0vcGFnZV9pc29sYXRpb24uYzo0OTc6XFx0cmV0ID0gaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKGlzb2xhdGVfc3RhcnQsIG1vZGUsIGZhbHNlLFxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDk4LVxcdFxcdFxcdHNraXBfaXNvbGF0aW9uKTtcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTA1LVxcdC8qIGlzb2xhdGUgW2lzb2xhdGVfZW5kIC0gcGFnZWJsb2NrX25yX3BhZ2VzLCBpc29sYXRlX2VuZCkgcGFnZWJsb2NrICovXFxubW0vcGFnZV9pc29sYXRpb24uYzo1MDY6XFx0cmV0ID0gaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKGlzb2xhdGVfZW5kLCBtb2RlLCB0cnVlLCBza2lwX2lzb2xhdGlvbik7XFxubW0vcGFnZV9pc29sYXRpb24uYy01MDctXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDowOTo1OS43Njc1MzYyMDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQxMTQ3NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgRnVuY3Rpb24ncyBDYWxsIEhpZXJhcmNoeSoqXG5cbk9rYXksIHNvIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIGNhbGxlZCBieSBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYW5kIHRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIHBhZ2UgYmxvY2sgaXNvbGF0aW9uIHdvcmtzLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgdG8gdW5kZXJzdGFuZCBpdHMgKm93biogY2FsbGluZyBmdW5jdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIHJldmVhbCB0aGUgdHJpZ2dlcnMgdGhhdCBzZXQgdGhpcyBpc29sYXRpb24gcHJvY2VzcyBpbiBtb3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBjaGFpbiBpcyBjcnVjaWFsIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGluZGl2aWR1YWwgZnVuY3Rpb25zLiBJdCdzIGFsbCBhYm91dCBjb250ZXh0LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gZmxvdyBoZWxwcyBtZSBtYXAgdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTUyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTA6MDMuMDA4Njg2NTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODg2Nzc1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oPTYxPWJvb2wgcGFnZWJsb2NrX3VuaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oLTYyLVxcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaDo2MzppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXFxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oLTY0LVxcdFxcdFxcdCAgICAgZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDI9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5NjgtXFx0Lyogc2V0IGFib3ZlIHJhbmdlIGFzIGlzb2xhdGVkICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxOTY5OlxcdHJldCA9IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydF9wZm4sIGVuZF9wZm4sXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTcwLVxcdFxcdFxcdFxcdCAgICAgICBQQl9JU09MQVRFX01PREVfTUVNX09GRkxJTkUpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcxMDg9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcxNDQtXFx0ICogaGF2ZSBkaWZmZXJlbnQgc2l6ZXMsIGFuZCBkdWUgdG8gdGhlIHdheSBwYWdlIGFsbG9jYXRvclxcbm1tL3BhZ2VfYWxsb2MuYzo3MTQ1OlxcdCAqIHdvcmssIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIGhhcyBzcGVjaWFsIGhhbmRsaW5ncyBmb3IgdGhpcy5cXG5tbS9wYWdlX2FsbG9jLmMtNzE0Ni1cXHQgKlxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcxNjEtXFxubW0vcGFnZV9hbGxvYy5jOjcxNjI6XFx0cmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0LCBlbmQsIG1vZGUpO1xcbm1tL3BhZ2VfYWxsb2MuYy03MTYzLVxcdGlmIChyZXQpXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTMyMD1zdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDQ5LS8qKlxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NDUwOiAqIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIC0gbWFyayBwYWdlIHJhbmdlIE1JR1JBVEVfSVNPTEFURVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDUxLSAqIEBzdGFydF9wZm46XFx0XFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgcmFuZ2UgdG8gYmUgaXNvbGF0ZWQuXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ4NC0gKi9cXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjQ4NTppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXFxubW0vcGFnZV9pc29sYXRpb24uYy00ODYtXFx0XFx0XFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKVxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy01MjgtLyoqXFxubW0vcGFnZV9pc29sYXRpb24uYzo1Mjk6ICogdW5kb19pc29sYXRlX3BhZ2VfcmFuZ2UgLSB1bmRvIGVmZmVjdHMgb2Ygc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKClcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUzMC0gKiBAc3RhcnRfcGZuOlxcdFxcdFRoZSBmaXJzdCBQRk4gb2YgdGhlIGlzb2xhdGVkIHJhbmdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjEwOjA0LjY5NzU1OTMyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3ODEyNTQyODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipUcmFjaW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBGbG93KipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzLiBJIHNlZSB0aGF0IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIGlzIGJlaW5nIGNhbGxlZCBieSBgb2ZmbGluZV9wYWdlc2AgYW5kIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAuIFRoYXQncyBhIGtleSBzdGFydGluZyBwb2ludC4gIFRoZW4gSSBvYnNlcnZlIHRoYXQgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYC4gIFNpbmNlIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGZsb3csIGFuZCB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYWxsb2NhdGlvbiBzY2hlbWUgaXMgc2l0dWF0ZWQgaW4gdGhlIHdpZGVyIHBpY3R1cmUsIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNhbGwgc2l0ZXMgb2YgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbiBgYWxsb2NfY29udGlnX3JhbmdlYC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxMTo0Mi41MTAxMDUyNDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNDc4MjU0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19jb250aWdfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MzkwPXNjZW5hcmlvczogbWVtb3J5IG9mZmxpbmUsIG1lbW9yeSBmYWlsdXJlLCBsb25ndGVybSBwaW5uaW5nLCBzeXNjYWxscyhtYmluZCxcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdDozOTE6bWlncmF0ZV9wYWdlcyBhbmQgbW92ZV9wYWdlcyksIGFsbG9jX2NvbnRpZ19yYW5nZSgpIGFuZCBhbGxvY19jb250aWdfcGFnZXMoKS5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0zOTItTm93IG9ubHkgbWVtb3J5IG9mZmxpbmUsIG1lbW9yeSBmYWlsdXJlIGFuZCBzeXNjYWxscyBhbGxvdyBmYWxsYmFja2luZyB0byBhbGxvY2F0ZVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTExODc9c3RhdGljIHZvaWQgdmlydGlvX21lbV9mYWtlX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjA1LVxcdFxcdCAqIG9ubGluaW5nIHRoZSBtZW1vcnkgYmxvY2suIE90aGVyd2lzZSwgaXQgd2FzIGFsbG9jYXRlZFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxMjA2OlxcdFxcdCAqIHVzaW5nIGFsbG9jX2NvbnRpZ19yYW5nZSgpLiBBbGwgcGFnZXMgaW4gYSBzdWJibG9jayBhcmVcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIwNy1cXHRcXHQgKiBhbGlrZS5cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz0xMjI0PXN0YXRpYyBpbnQgdmlydGlvX21lbV9mYWtlX29mZmxpbmUoc3RydWN0IHZpcnRpb19tZW0gKnZtLCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjMwLVxcdC8qXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjEyMzE6XFx0ICogVE9ETzogV2Ugd2FudCBhbiBhbGxvY19jb250aWdfcmFuZ2UoKSBtb2RlIHRoYXQgdHJpZXMgdG8gYWxsb2NhdGVcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIzMi1cXHQgKiBoYXJkZXIgKGUuZy4sIGRlYWxpbmcgd2l0aCB0ZW1wb3JhcmlseSBwaW5uZWQgcGFnZXMsIFBDUCksIGVzcGVjaWFsbHlcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjQ1LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxMjQ2OlxcdFxcdHJjID0gYWxsb2NfY29udGlnX3JhbmdlKHBmbiwgcGZuICsgbnJfcGFnZXMsIEFDUl9GTEFHU19OT05FLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjQ3LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTI1MzU9c3RhdGljIGludCB2aXJ0aW9fbWVtX2luaXRfaG90cGx1ZyhzdHJ1Y3QgdmlydGlvX21lbSAqdm0pXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMjU1Ny1cXHQvKlxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoyNTU4OlxcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIHdvcmtzIHJlbGlhYmx5IHdpdGggcGFnZWJsb2NrXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTI1NTktXFx0ICogZ3JhbnVsYXJpdHkgb24gWk9ORV9OT1JNQUwsIHVzZSBwYWdlYmxvY2tfbnJfcGFnZXMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NtYS5oLTE1LS8qXFxuaW5jbHVkZS9saW51eC9jbWEuaDoxNjogKiAgdGhlIGJ1ZGR5IC0tIGVzcGVjaWFsbHkgcGFnZWJsb2NrIG1lcmdpbmcgYW5kIGFsbG9jX2NvbnRpZ19yYW5nZSgpXFxuaW5jbHVkZS9saW51eC9jbWEuaC0xNy0gKiAtLSBjYW4gZGVhbCB3aXRoIG9ubHkgc29tZSBwYWdlYmxvY2tzIG9mIGEgaGlnaGVyLW9yZGVyIHBhZ2UgYmVpbmdcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9NDQ4PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUyLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDUzOmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVxcdFxcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTU6I2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1NjpcXHRhbGxvY19ob29rcyhhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9ODczPWVudW0gem9uZV90eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtOTM2LVxcdCAqICAgIG1lbW9yeSBvZmZsaW5pbmcsIGhvd2V2ZXIsIGNhbm5vdCBiZSBtb3ZlZC9hbGxvY2F0ZWQuIFRoZXNlXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo5Mzc6XFx0ICogICAgdGVjaG5pcXVlcyBtaWdodCB1c2UgYWxsb2NfY29udGlnX3JhbmdlKCkgdG8gaGlkZSBwcmV2aW91c2x5XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05MzgtXFx0ICogICAgZXhwb3NlZCBwYWdlcyBmcm9tIHRoZSBidWRkeSBhZ2FpbiAoZS5nLiwgdG8gaW1wbGVtZW50IHNvbWUgc29ydFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05NTAtXFx0ICogSW4gZ2VuZXJhbCwgbm8gdW5tb3ZhYmxlIGFsbG9jYXRpb25zIHRoYXQgZGVncmFkZSBtZW1vcnkgb2ZmbGluaW5nXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo5NTE6XFx0ICogc2hvdWxkIGVuZCB1cCBpbiBaT05FX01PVkFCTEUuIEFsbG9jYXRvcnMgKGxpa2UgYWxsb2NfY29udGlnX3JhbmdlKCkpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05NTItXFx0ICogaGF2ZSB0byBleHBlY3QgdGhhdCBtaWdyYXRpbmcgcGFnZXMgaW4gWk9ORV9NT1ZBQkxFIGNhbiBmYWlsIChldmVuXFxuLS1cXG5tbS9jbWEuYz0xMDM9Ym9vbCBjbWFfdmFsaWRhdGVfem9uZXMoc3RydWN0IGNtYSAqY21hKVxcbi0tXFxubW0vY21hLmMtMTI0LVxcdFxcdC8qXFxubW0vY21hLmM6MTI1OlxcdFxcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIHJlcXVpcmVzIHRoZSBwZm4gcmFuZ2Ugc3BlY2lmaWVkXFxubW0vY21hLmMtMTI2LVxcdFxcdCAqIHRvIGJlIGluIHRoZSBzYW1lIHpvbmUuIFNpbXBsaWZ5IGJ5IGZvcmNpbmcgdGhlIGVudGlyZVxcbi0tXFxubW0vaHVnZXRsYi5jPTI3Mjc9aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZXRsYi5jLTI3MzYtXFx0ICogRmVuY2Ugb2ZmIGdpZ2FudGljIHBhZ2VzIGFzIHRoZXJlIGlzIGEgY3ljbGljIGRlcGVuZGVuY3kgYmV0d2Vlblxcbm1tL2h1Z2V0bGIuYzoyNzM3OlxcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSBhbmQgdGhlbS4gUmV0dXJuIC1FTk9NRU0gYXMgdGhpcyBoYXMgdGhlIGVmZmVjdFxcbm1tL2h1Z2V0bGIuYy0yNzM4LVxcdCAqIG9mIGJhaWxpbmcgb3V0IHJpZ2h0IGF3YXkgd2l0aG91dCBmdXJ0aGVyIHJldHJ5aW5nLlxcbi0tXFxubW0vaW50ZXJuYWwuaD0xMDE3PXN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xcbi0tXFxubW0vaW50ZXJuYWwuaC0xMDUzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbm1tL2ludGVybmFsLmg6MTA1NDpcXHRib29sIGFsbG9jX2NvbnRpZztcXHRcXHQvKiBhbGxvY19jb250aWdfcmFuZ2UgYWxsb2NhdGlvbiAqL1xcbm1tL2ludGVybmFsLmgtMTA1NS19O1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyNDY9RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZik7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzI0OC0vKipcXG5tbS9wYWdlX2FsbG9jLmM6NzI0OTogKiBhbGxvY19jb250aWdfcmFuZ2UoKSAtLSB0cmllcyB0byBhbGxvY2F0ZSBnaXZlbiByYW5nZSBvZiBwYWdlc1xcbm1tL3BhZ2VfYWxsb2MuYy03MjUwLSAqIEBzdGFydDpcXHRzdGFydCBQRk4gdG8gYWxsb2NhdGVcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MjY0LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL3BhZ2VfYWxsb2MuYy03MjY2LVxcdFxcdFxcdCAgICAgIGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cXG5tbS9wYWdlX2FsbG9jLmM6NzI3OTpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy03MjgwLVxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYz0xMzQ9c3RhdGljIHN0cnVjdCBwYWdlICpoYXNfdW5tb3ZhYmxlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTE0NC1cXHRcXHQvKlxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MTQ1OlxcdFxcdCAqIENNQSBhbGxvY2F0aW9ucyAoYWxsb2NfY29udGlnX3JhbmdlKSByZWFsbHkgbmVlZCB0byBtYXJrXFxubW0vcGFnZV9pc29sYXRpb24uYy0xNDYtXFx0XFx0ICogaXNvbGF0ZSBDTUEgcGFnZWJsb2NrcyBldmVuIHdoZW4gdGhleSBhcmUgbm90IG1vdmFibGUgaW4gZmFjdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxMTo0NC4xMTQ4OTQ0OTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjI1ODM4OTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQgdG91Y2hlcyBzb21lIHByZXR0eSBjcml0aWNhbCBhcmVhczogYGFsbG9jX2NvbnRpZ19yYW5nZWAsIHdoaWNoIGlzIHVzZWQgYnkgQ01BLCB2aXJ0aW9fbWVtLCBhbmQgbWVtb3J5IGhvdHBsdWcuIENNQSBpcyBkZWZpbml0ZWx5IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcg4oCTIHdlIGNhbiBoaXQgaXQgd2l0aCBgbW1hcGAgb24gQ01BIGFyZWFzLCBkbWEtYnVmcywgb3IgZXZlbiBodWdlcGFnZXMuIE1lbW9yeSBob3RwbHVnPyBTeXNmcyBpcyB0aGUgb2J2aW91cyByb3V0ZS5cblxuVGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2UgaXMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AsIGFuZCB0aGF0J3MgY29uY2VybmluZyBiZWNhdXNlIHRoYXQncyBjYWxsZWQgZHVyaW5nIHBhZ2VibG9jayBpc29sYXRpb24uIFRoZXkndmUgc3dhcHBlZCBvdXQgYGJ1ZGR5X29yZGVyYCBmb3IgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGFkZGVkIGEgY2hlY2sgZm9yIHRoZSBvcmRlci4gVGhpcyBtYWtlcyBzZW5zZTsgaXQgc2VlbXMgbGlrZSB0aGV5J3JlIGFkZHJlc3NpbmcgYSBidWcuIEkgY2FuIHNlZSB3aGF0IHRoZXkncmUgc2F5aW5nIGFib3V0IGBidWRkeV9vcmRlcihwYWdlKWAgcG90ZW50aWFsbHkgcmV0dXJuaW5nIGdhcmJhZ2UgaWYgYFBhZ2VCdWRkeWAgYW5kIGFsbG9jYXRpb24gYXJlIHJhY2luZy5cblxuV2FpdCBhIHNlY29uZOKApiBJJ20gY2F0Y2hpbmcgb24gbm93LiBUaGV5J3JlIGNoZWNraW5nIGBQYWdlQnVkZHkocGFnZSlgIHJpZ2h0ICpiZWZvcmUqIGBidWRkeV9vcmRlcihwYWdlKWAuIEJ1dCwgc2luY2UgdGhpcyBpc24ndCB1bmRlciB0aGUgem9uZSBsb2NrLCBhbm90aGVyIHRocmVhZCBjYW4gY2xlYXIgYFBhZ2VCdWRkeWAgYW5kIG92ZXJ3cml0ZSB0aGUgYHBhZ2VfcHJpdmF0ZWAgZmllbGQgdGhhdCBzdG9yZXMgdGhlIG9yZGVyLiBUaGVyZWZvcmUsIGBidWRkeV9vcmRlcmAgY291bGQgcmVhZCBhIGh1Z2UgdmFsdWUsIGxlYWRpbmcgdG8gYW4gb3V0LW9mLWJvdW5kcyBzaGlmdCBvciBzb21lIHJpZGljdWxvdXMgcGFnZSBjb3VudCwgdHJpZ2dlcmluZyB0aGF0IGBWTV9XQVJOX09OX09OQ0VgIG9yIHNraXBwaW5nIHRvbnMgb2YgcGFnZXMuIENsZXZlci4gQnkgdXNpbmcgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGNoZWNraW5nIHRoZSBvcmRlciBhZ2FpbnN0IGBNQVhfUEFHRV9PUkRFUmAsIHRoZXkncmUgYXZvaWRpbmcgdGhlIHJhY2UgY29uZGl0aW9uIGFuZCB0aGUgcmVzdWx0aW5nIGNoYW9zLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBmb2N1cyBvbiBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19yYW5nZWAsIGFuZCBgb2ZmbGluZV9wYWdlc2AuIElzIGBhbGxvY19jb250aWdfcmFuZ2VgIGV4cG9ydGVkIGFuZCByZWFjaGFibGU/IFllcCwgZ29vZC4gTGV0J3MgZGlnIGludG8gYG9mZmxpbmVfcGFnZXNgLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MDksIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTI6MTAuMzczMjg3MzIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU4MTgwMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mZmxpbmVfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9tbS9tbXUuYz0yMDc1PXN0YXRpYyBib29sIGNhbl91bm1hcF93aXRob3V0X3NwbGl0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMTA1LSAqIGluYWR2ZXJ0ZW50bHkgcmVtb3ZlZCBhcyBpdCBibG9ja3MgcGZuIHJhbmdlIG9mZmxpbmluZyBwcm9jZXNzIGluXFxuYXJjaC9hcm02NC9tbS9tbXUuYzoyMTA2OiAqIF9fb2ZmbGluZV9wYWdlcygpLiBIZW5jZSB0aGlzIHByZXZlbnRzIGJvdGggb2ZmbGluaW5nIGFzIHdlbGwgYXNcXG5hcmNoL2FybTY0L21tL21tdS5jLTIxMDctICogcmVtb3ZhbCBwcm9jZXNzIGZvciBib290IG1lbW9yeSB3aGljaCBpcyBpbml0aWFsbHkgYWx3YXlzIG9ubGluZS5cXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODA9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjkxLVxcdCAqIFVuYWNjb3VudCBiZWZvcmUgb2ZmbGluaW5nLCBzdWNoIHRoYXQgdW5wb3B1bGF0ZWQgem9uZSBhbmQga3RocmVhZHNcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MjkyOlxcdCAqIGNhbiBwcm9wZXJseSBiZSB0b3JuIGRvd24gaW4gb2ZmbGluZV9wYWdlcygpLlxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yOTMtXFx0ICovXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzAxLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzozMDI6XFx0cmV0ID0gb2ZmbGluZV9wYWdlcyhzdGFydF9wZm4gKyBucl92bWVtbWFwX3BhZ2VzLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDMtXFx0XFx0XFx0ICAgIG5yX3BhZ2VzIC0gbnJfdm1lbW1hcF9wYWdlcywgbWVtLVxcdTAwM2V6b25lLCBtZW0tXFx1MDAzZWdyb3VwKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzA0LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzA1OlxcdFxcdC8qIG9mZmxpbmVfcGFnZXMoKSBmYWlsZWQuIEFjY291bnQgYmFjay4gKi9cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzA2LVxcdFxcdGlmIChucl92bWVtbWFwX3BhZ2VzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2ND1leHRlcm4gdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyNjU6ZXh0ZXJuIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNjYtXFx0XFx0XFx0IHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg9MjcyPXN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9XFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI3My1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6Mjc0OnN0YXRpYyBpbmxpbmUgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI3NS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTUzOT12b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODMtICogc3VyZSB0aGF0IHBhZ2VzIGFyZSBtYXJrZWQgcmVzZXJ2ZWQgYW5kIHpvbmVzIGFyZSBhZGp1c3QgcHJvcGVybHkgYnlcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjU4NDogKiBjYWxsaW5nIG9mZmxpbmVfcGFnZXMoKS5cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU4NS0gKi9cXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg5MD1zdGF0aWMgaW50IGNvdW50X3N5c3RlbV9yYW1fcGFnZXNfY2IodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDEtICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxOTAyOmludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTkwMy1cXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApXFxuLS1cXG5tbS9tbV9pbml0LmM9MTUzOT12b2lkIF9fcmVmIGZyZWVfYXJlYV9pbml0X2NvcmVfaG90cGx1ZyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbi0tXFxubW0vbW1faW5pdC5jLTE1NzctXFx0ICogY2xlYXIgYWxsIHpvbmVzJyBwcmVzZW50X3BhZ2VzIGFuZCBtYW5hZ2VkX3BhZ2VzIGJlY2F1c2UgdGhleSB3aWxsXFxubW0vbW1faW5pdC5jOjE1Nzg6XFx0ICogYmUgdXBkYXRlZCBpbiBvbmxpbmVfcGFnZXMoKSBhbmQgb2ZmbGluZV9wYWdlcygpLlxcbm1tL21tX2luaXQuYy0xNTc5LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxMjoxMS44MzE0NzY0NjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1MzA4MTA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnk6IE9mZmxpbmUgUGFnZXMgYW5kIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBgb2ZmbGluZV9wYWdlc2AgaXMgY2FsbGVkIGJ5IGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAuIFRoYXQgY29ubmVjdGlvbiBpcyBpbXBvcnRhbnQuIEFuZCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgIGl0c2VsZiBnZXRzIHRyaWdnZXJlZCB2aWEgc3lzZnMgbWVtb3J5IGhvdHBsdWcuLi4gd2hpY2ggd2UgYWxsIGtub3cgY2FuIGJlIGEgc291cmNlIG9mIGZ1enppbmcgYXR0YWNrcy4gVGhpcyBpcyBpbnRlcmVzdGluZy4gV2UndmUgc2VlbiBzb21lIGV4cGxvaXRzIGxldmVyYWdpbmcgdGhhdC4gQW5kLCBvZiBjb3Vyc2UsIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBpcyBhbHdheXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gU28sIGdpdmVuIHRoaXMgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHRlci4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgYGFsbG9jX2NvbnRpZ19yYW5nZWAgYW5kIGBvZmZsaW5lX3BhZ2VzYC4gVW5kZXJzdGFuZGluZyB0aGVzZSB3aWxsIGNsYXJpZnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBhbmQgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBpbiB0aGUgY29udGV4dCBvZiBvZmZsaW5lIG1lbW9yeSBibG9ja3MsIGVzcGVjaWFsbHkgd2hlbiB0cmlnZ2VyZWQgdmlhIGEgY29udHJvbGxhYmxlIGhvdHBsdWcgZXZlbnQuIFRoaXMgZmVlbHMgbGlrZSBpdCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGFyZWEgb2YgaW50ZXJlc3QgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjEyOjE1LjY4NDU2MTQ5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxOTQ4NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfSE9UUExVR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTE5PWNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbi0tXFxubW0vS2NvbmZpZy01MjItIyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICdzZWxlY3QgU1BBUlNFTUVNJ1xcbm1tL0tjb25maWc6NTIzOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUyNC1cXHRib29sIFxcXCJNZW1vcnkgaG90cGx1Z1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTI6MTYuMzQ2NTE0ODQyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDIyOTU0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9ibGVtOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggTWVtb3J5IE1hbmFnZW1lbnQgYW5kIE9mZmxpbmUgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gaG93IGBNRU1PUllfSE9UUExVR2AgaW50ZXJhY3RzIHdpdGggYG9mZmxpbmVfcGFnZXNgLiBJdCBzZWVtcyBsaWtlIGBNRU1PUllfSE9UUExVR2AgaXMgYSBwcmVyZXF1aXNpdGUsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSdyZSB0YWxraW5nIGFib3V0IGR5bmFtaWNhbGx5IHJlbW92aW5nIG1lbW9yeSwgYW5kIG9mZmxpbmUgcGFnZXMgbGlrZWx5IG5lZWQgdGhpcyBjYXBhYmlsaXR5IHRvIGZ1bmN0aW9uLiBCdXQgdGhhdCByYWlzZXMgYW5vdGhlciBxdWVzdGlvbiB0aGF0IGlzIHRvcCBvZiBtaW5kIC0gSSBuZWVkIHRvIGNvbnNpZGVyIGBhbGxvY19jb250aWdfcmFuZ2VgLiBEb2VzIHRoZSB1c2Ugb2YgYG9mZmxpbmVfcGFnZXNgIHNvbWVob3cgY29tcGxpY2F0ZSwgaW50ZXJhY3Qgd2l0aCwgb3IgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIGBhbGxvY19jb250aWdfcmFuZ2VgPyBBcmUgdGhlcmUgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBvcHRpbWl6YXRpb25zIGhlcmU/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24uIFRoaXMgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDYzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTI6MTkuMzg4ODEyODI4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkxNDkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ01BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMDY0PWNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxcbi0tXFxubW0vS2NvbmZpZy0xMDY2LVxcbm1tL0tjb25maWc6MTA2Nzpjb25maWcgQ01BXFxubW0vS2NvbmZpZy0xMDY4LVxcdGJvb2wgXFxcIkNvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4MS1cXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXFxubW0vS2NvbmZpZy0xMDgzLVxcdGJvb2wgXFxcIkNNQSBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4Ny1cXG5tbS9LY29uZmlnOjEwODg6Y29uZmlnIENNQV9TWVNGU1xcbm1tL0tjb25maWctMTA4OS1cXHRib29sIFxcXCJDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwOTQtXFxubW0vS2NvbmZpZzoxMDk1OmNvbmZpZyBDTUFfQVJFQVNcXG5tbS9LY29uZmlnLTEwOTYtXFx0aW50IFxcXCJNYXhpbXVtIGNvdW50IG9mIHRoZSBDTUEgYXJlYXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjEyOjE5LjQzMjczNTM1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzA3MDA3ODkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqQ01BIEFsbG9jYXRpb24gU3RyYXRlZ3kqKlxuXG5Pa2F5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGhhbmRsZSB0aGlzIGFsbG9jYXRpb24uIENsZWFybHksIHRoZSBgQ01BYCBtZWNoYW5pc20gaXMgZXNzZW50aWFsIGZvciBtYW5hZ2luZyB0aGUgYWxsb2NhdGlvbnMsIHNvIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgYENPTlRJR19BTExPQ2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgQ01BIGFsbG9jYXRpb25zIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYW5kIGFueSBvdGhlciBwYXJhbWV0ZXJzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGF0IGNvZGUgZm9yIGEgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUxNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjEzOjMyLjUwMjgxNjk5OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNjA2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENPTlRJR19BTExPQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbi0tXFxubW0vS2NvbmZpZy03MTgtXFxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xcbm1tL0tjb25maWctNzIwLVxcdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFxcdTAwMjZcXHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxMzozMi41NTAwODMzNjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY3NjQ3OTY2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIENvbnRpZ3VvdXMgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYENPTlRJR19BTExPQ2AgY29uZmlndXJhdGlvbiBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIHRyaWdnZXJzLiBJdCBzZWVtcyB0aGF0IHdoZXRoZXIgY29udGlndW91cyBhbGxvY2F0aW9uIGlzIGVuYWJsZWQgZGVwZW5kcyBvbiBhIGNvdXBsZSBvZiBrZXkgZmFjdG9yczogd2hldGhlciB3ZSdyZSB1c2luZyBtZW1vcnkgaXNvbGF0aW9uICphbmQqIGNvbXBhY3Rpb24sICpvciogaWYgd2UncmUgdXNpbmcgQ01BLiBUaGF0IG1ha2VzIHNlbnNlLCBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgbWFuYWdlbWVudC4gTGV0J3MgZGVsdmUgaW50byB0aGUgZmlyc3QgcG90ZW50aWFsIHRyaWdnZXIsIGBNRU1PUllfSVNPTEFUSU9OYCwgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc2MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjE0OjU5LjMxNDg4Mjc1NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwODY0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9JU09MQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTQ5OT1jb25maWcgTlVNQV9LRUVQX01FTUlORk9cXG4tLVxcbm1tL0tjb25maWctNTAxLVxcbm1tL0tjb25maWc6NTAyOmNvbmZpZyBNRU1PUllfSVNPTEFUSU9OXFxubW0vS2NvbmZpZy01MDMtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNDo1OS4zNTk5NzQ3OThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNDI2NjgxOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgSXNvbGF0aW9uIFNldHRpbmdzKipcblxuT2theSwgc28gYE1FTU9SWV9JU09MQVRJT05gIGlzIGEgYm9vbGVhbiwgZ290IGl0LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLCBhbmQgaG93IGl0IGlzIGFjdHVhbGx5IGVtcGxveWVkLiBTbywgbmV4dCwgbXkgZm9jdXMgaW1tZWRpYXRlbHkgc2hpZnRzIHRvIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiAqd2hvKiBvciAqd2hhdCogaXMgbWFraW5nIHRoaXMgc2VsZWN0aW9uPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGUgYW5zd2VyIHdpbGwgbGlrZWx5IHJldmVhbCBzb21lIGtleSBhcmNoaXRlY3R1cmFsIGRlY2lzaW9ucyBhcm91bmQgc2VjdXJpdHksIHBlcmZvcm1hbmNlLCBvciByZXNvdXJjZSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgY29uZmlndXJhdGlvbnMsIHRoZSBjb21waWxlLXRpbWUgb3B0aW9ucywgYWxsIHRoZSBlbnRyeSBwb2ludHMgdGhhdCB0b3VjaCB0aGlzIHNldHRpbmcuIEl0J3MgdGltZSB0byB0cmFjZSB0aGUgbG9naWMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNTozNC43MDI2NDU3NjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjMyODE5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE1FTU9SWV9JU09MQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01MjM9bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWctNTI0LVxcdGJvb2wgXFxcIk1lbW9yeSBob3RwbHVnXFxcIlxcbm1tL0tjb25maWc6NTI1OlxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxubW0vS2NvbmZpZy01MjYtXFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbi0tXFxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcXG4tLVxcbm1tL0tjb25maWctMTA3MC1cXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZzoxMDcxOlxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxubW0vS2NvbmZpZy0xMDcyLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTU6MzYuMjY1OTMyMzE2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTcxMDc4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIE1lbW9yeSBJc29sYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYm90aCBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgQ01BYCBhcmUgZGlyZWN0bHkgc2VsZWN0aW5nIGBNRU1PUllfSVNPTEFUSU9OYC4gSW50ZXJlc3RpbmcsIGJlY2F1c2UgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGV5J3JlIGJvdGggcmVsYXRlZCB0byBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCB0YXNrcy4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgY2xlYXI6IGVuYWJsaW5nIGVpdGhlciBvZiB0aG9zZSwgd2hpY2ggSSdkIGxpa2VseSBkbyBpbiBtYW55IG9mIG15IGNvbmZpZ3VyYXRpb25zLCBhdXRvbWF0aWNhbGx5IHNldHMgdXAgdGhlIHVuZGVybHlpbmcgbWVtb3J5IGlzb2xhdGlvbiBmcmFtZXdvcmsuIEdvb2QuXG5cblRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLCBhbmQgdGhhdCBjb2RlIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gIGlzIHR1cm5lZCBvbiwgc28gdGhhdCBjb25maXJtcyBteSBpbml0aWFsIHRob3VnaHQuIEVuYWJsaW5nIGBNRU1PUllfSE9UUExVR2Agb3IgYENNQWAgdG8gbWUsIGlzIHRoZSByaWdodCBjYWxsIGdpdmVuIHRoZSBsaWtlbHkgZGVwZW5kZW5jaWVzLlxuXG5Ob3csIGxldCBtZSBjaGVjayBzb21ldGhpbmcgc3BlY2lmaWMgcmVnYXJkaW5nIHRoZSBpc29sYXRpb24gcm91dGluZXMuIEkgd2FudCB0byBzZWUgaWYgYGFsbG9jX2NvbnRpZ19yYW5nZWAgaXMgZXhwb3J0ZWQsIGJlY2F1c2UgSSBoYXZlIGEgdXNlIGNhc2UgaW4gbWluZCB3aGVyZSB0aGF0IHdvdWxkIGJlIHVzZWZ1bC4gKlllcyEqIEV4Y2VsbGVudCwgdGhhdCB3aWxsIGJlIHVzYWJsZS4gT2theSwgYW5kIHdoYXQgYWJvdXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWA/IExldCdzIGNoZWNrIHRoYXQgb25lIGFzIHdlbGwuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM0MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNTo0MC4yODMwNDI4OTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODU4NTk4MTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTU6NDIuMjY4OTEyMTY4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODgxNDY0MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBNZW1vcnkgQWxsb2NhdGlvbiBQcm9jZWR1cmVzKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgbWFuYWdlZC4gSSBzZWUgYSBkaXNjcmVwYW5jeS4gVGhlIGRhdGEgSSBuZWVkIGlzbid0IGJlaW5nIFwiZXhwb3J0ZWQsXCIgbWVhbmluZyBpdCdzIG5vdCBiZWluZyBleHBsaWNpdGx5IG1hZGUgYXZhaWxhYmxlIG9yIGFjY2Vzc2libGUgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIGNvbnRleHQuIEhvd2V2ZXIsIHRoZSBgYWxsb2NfY29udGlnX3JhbmdlYCBmdW5jdGlvbiBpcywgd2hpY2ggaXMgYSBrZXkgcHJpbWl0aXZlIGZvciBhbGxvY2F0aW5nIGNvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5LiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGlzc3VlIG9yIG92ZXJzaWdodCBpbiBob3cgdGhlc2UgcGFnZXMgYXJlIGJlaW5nIGhhbmRsZWQgZG93bnN0cmVhbS5cblxuVG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBhbmQgdG8gZGlhZ25vc2UgdGhlIHByb2JsZW0sIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgYG9mZmxpbmVfcGFnZXNgIGRhdGEgc3RydWN0dXJlLiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBzeXN0ZW0gdHJhY2tzIHBhZ2VzIHRoYXQgYXJlICpub3QqIGN1cnJlbnRseSBpbiB1c2Ugb3IgYXJlIGRlbGliZXJhdGVseSB0YWtlbiBvdXQgb2YgY2lyY3VsYXRpb24uIFBlcmhhcHMgdGhlcmUncyBhbiBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBhdmFpbGFiaWxpdHkgb2YgcGFnZXMgaW5kaWNhdGVkIGJ5IGBvZmZsaW5lX3BhZ2VzYCBhbmQgaG93IGBhbGxvY19jb250aWdfcmFuZ2VgIGlzIGJlaW5nIHVzZWQsIG9yIG5vdCB1c2VkLCBnaXZlbiB0aGUgXCJub3QgZXhwb3J0ZWRcIiBkYXRhLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gY2hlY2sgd2hhdCB0aGUgc3RhdGUgb2YgdGhlc2Ugb2ZmbGluZSBwYWdlcyBpcywgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLCBhbmQgd2h5IG15IHRhcmdldGVkIGRhdGEgaXNuJ3QgYmVpbmcgZXhwb3J0ZWQuIElzIHRoZXJlIGEgcmFjZSBjb25kaXRpb24/IEEgbWlzc2luZyBmbGFnPyBBbiB1bmludGVuZGVkIGludGVyYWN0aW9uPyBUaGlzIGlzIHRoZSBjb3JlIG9mIHdoZXJlIEkgbmVlZCB0byBzdGFydCBsb29raW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzI1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6MjAuMTUwMzc5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyMjc0NjU4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qb2ZmbGluZV9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6MjIuNzczMTM0NThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2OTc2Mjc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVuZXhwb3J0ZWQgU3ltYm9sKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGUgc3ltYm9sIGlzbid0IGV4cG9ydGVkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZvY3VzIG9uIHRoZSBzeW1ib2xzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIHRoZSBwYWdlIHJhbmdlIG1hbmFnZW1lbnQsIHNvIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2VgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLlxuXG5XYWl0IGEgbWludXRlLCBpc24ndCBgYWxsb2NfY29udGlnX3JhbmdlYCBhIG1hY3JvPyBJIHNlZW0gdG8gcmVtZW1iZXIgc2VlaW5nIHRoYXQgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9nZnAuaGAuIExldCBtZSBkb3VibGUtY2hlY2suLi4geWVwLCBoZXJlIGl0IGlzOlxuXG5gYGBjXG4jZGVmaW5lIGFsbG9jX2NvbnRpZ19yYW5nZSguLi4pIFxcXG5cdGFsbG9jX2hvb2tzKGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuYGBgXG5cbkFoLCB0aGF0J3MgcmlnaHQuIFNvLCB0aGUgKmFjdHVhbCogZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGlzIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYC4gVGhhdCBtYWtlcyBtb3JlIHNlbnNlLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA2MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNjoyNy4wNDI5MDAwMzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDkxMTQyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2dmcC5oPTQ0OD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Mi1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1MzppbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1NC1cXHRcXHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU1LSNkZWZpbmUgYWxsb2NfY29udGlnX3JhbmdlKC4uLilcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTY6XFx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC00NTctXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzI0Nj1FWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MjY0LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL3BhZ2VfYWxsb2MuYy03MjY2LVxcdFxcdFxcdCAgICAgIGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cXG5tbS9wYWdlX2FsbG9jLmM6NzI3OTpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy03MjgwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNjoyOS4zOTIwMjA1MDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2NTczMjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEZvY3VzOiBDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBIb3RwbHVnZ2luZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBCYXNlZCBvbiB0aGUgdGFzayBhdCBoYW5kLCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGFuZCBgb2ZmbGluZV9wYWdlc2AuIFRoZXJlJ3MgYWxzbyBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgLCB3aGljaCBpcyBhIHJlbGF0ZWQgdmFyaWFudCBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbi4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIHN0YXRpYzsgeWVzLCBpdCdzIHNjb3BlZCB0aGF0IHdheSwgd2hpY2ggaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgY2FsbCBjb250ZXh0LiBTbywgdG8gc29saWRpZnkgaXQsIG15IGtleSB0YXJnZXRzIGFyZTpcblxuKiAgIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgXG4qICAgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgXG4qICAgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYFxuKiAgIGBvZmZsaW5lX3BhZ2VzYFxuXG5HaXZlbiB0aGUgY29udGV4dCwgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIG1vc3QgcmVsZXZhbnQgYW5kIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXJlIGBNRU1PUllfSE9UUExVR2AgYW5kIGBDTUFgLiBBIHF1aWNrIHJldmlldyBvZiB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTUVNT1JZX0hPVFBMVUdgIGlzIGluIG9yZGVyOyBpdCBjYW4gc2hpZnQgbXkgdGhpbmtpbmcgYW5kIHVuY292ZXIgdW5kZXJseWluZyBmYWN0b3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg0MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNjozNC4wNTc3NTU4NDdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTU4NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfSE9UUExVR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTE5PWNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbi0tXFxubW0vS2NvbmZpZy01MjItIyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICdzZWxlY3QgU1BBUlNFTUVNJ1xcbm1tL0tjb25maWc6NTIzOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUyNC1cXHRib29sIFxcXCJNZW1vcnkgaG90cGx1Z1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6MzQuMTQ1MzIwNzI2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODY0NTA2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4ga2VybmVsIGludGVybmFsczpcblxuKipDb25kaXRpb25hbCBEZXBlbmRlbmNpZXMgYW5kIERlZmF1bHQgQ29uZmlndXJhdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBgTUVNT1JZX0hPVFBMVUdgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCdzIHByZXR0eSBmdW5kYW1lbnRhbCBmb3IgZHluYW1pY2FsbHkgYWRkaW5nIG9yIHJlbW92aW5nIG1lbW9yeSwgYSBjcml0aWNhbCBmZWF0dXJlIGZvciBtYW55IHNlcnZlciBhbmQgdmlydHVhbGl6YXRpb24gc2V0dXBzLiBJIGtub3cgaXQgaW5oZXJlbnRseSByZWxpZXMgb24gYFNQQVJTRU1FTV9WTUVNTUFQYCBhbmQgYEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHYC4gTWFrZXMgc2Vuc2U7IGhvdHBsdWdnaW5nIGlzIGNvbXBsZXgsIGFuZCB0aG9zZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb25zIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZS5cblxuVGhlIGtleSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBob3cgdWJpcXVpdG91cyBpcyBgU1BBUlNFTUVNX1ZNRU1NQVBgPyBJcyBpdCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gbW9zdCBhcmNoaXRlY3R1cmVzIG9yIGtlcm5lbHM/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIEl0J3MgYSBjcml0aWNhbCBwcmVyZXF1aXNpdGUsIGFuZCBrbm93aW5nIHdoZXRoZXIgSSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0IG9yIHdoZXRoZXIgaXQncyBoYW5kbGVkIFwib3V0LW9mLXRoZS1ib3hcIiBjaGFuZ2VzIGhvdyBJIGFwcHJvYWNoIHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgdGhlIHR5cGljYWwgYnVpbGQgY29uZmlndXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVmYXVsdHMgaGVscHMgbWUgYW50aWNpcGF0ZSBwb3RlbnRpYWwgaXNzdWVzIGFuZCBzdHJlYW1saW5lIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MuIFRoYXQncyBhIHBvaW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXIsIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjE2OjM3LjkzMTc3NTM1MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0OTEwNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz00NTE9Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXFxuLS1cXG5tbS9LY29uZmlnLTQ1NC1cXG5tbS9LY29uZmlnOjQ1NTpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXFxubW0vS2NvbmZpZy00NTYtXFx0Ym9vbFxcbm1tL0tjb25maWctNDU3LVxcbm1tL0tjb25maWc6NDU4OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWctNDU5LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWctNDY1LVxcbm1tL0tjb25maWc6NDY2OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9QUkVJTklUXFxubW0vS2NvbmZpZy00NjctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNjozNy45OTMyNzIxNjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3NTIxOTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBgU1BBUlNFTUVNX1ZNRU1NQVBgIGlzIGRlZmluaXRpdmVseSBlbmFibGVkLiBUaGF0J3MgZ29vZCB0byBrbm93LCBubyBzdXJwcmlzZXMgdGhlcmUuIE15IG1pbmQsIGhvd2V2ZXIsIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBpbXBsaWNhdGlvbnMgZm9yIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRpb24gKENNQSkuIEl0J3MgYSBuYXR1cmFsIHByb2dyZXNzaW9uIG9mIHRob3VnaHQ7IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgdGhlc2UgdHdvIGludGVyYWN0LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBtZW1vcnkgbGF5b3V0IGltcGxpY2F0aW9ucy4gSXMgdGhlcmUgc29tZXRoaW5nIHNwZWNpYWwgSSBzaG91bGQga2VlcCBpbiBtaW5kIHdpdGggdGhpcyBjb21iaW5hdGlvbj8gVGltZSB0byBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3byBhbmQgbWFrZSBzdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODY2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6NDEuMDY4NDk0MDg3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjgxMTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ01BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMDY0PWNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxcbi0tXFxubW0vS2NvbmZpZy0xMDY2LVxcbm1tL0tjb25maWc6MTA2Nzpjb25maWcgQ01BXFxubW0vS2NvbmZpZy0xMDY4LVxcdGJvb2wgXFxcIkNvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4MS1cXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXFxubW0vS2NvbmZpZy0xMDgzLVxcdGJvb2wgXFxcIkNNQSBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4Ny1cXG5tbS9LY29uZmlnOjEwODg6Y29uZmlnIENNQV9TWVNGU1xcbm1tL0tjb25maWctMTA4OS1cXHRib29sIFxcXCJDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwOTQtXFxubW0vS2NvbmZpZzoxMDk1OmNvbmZpZyBDTUFfQVJFQVNcXG5tbS9LY29uZmlnLTEwOTYtXFx0aW50IFxcXCJNYXhpbXVtIGNvdW50IG9mIHRoZSBDTUEgYXJlYXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjE2OjQxLjE1MTMxMTczNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTYxMDUwMzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0IHRvdWNoZXMgc29tZSBjcnVjaWFsIGFyZWFzLiBgQ01BYCBkZXBlbmRzIG9uIGBNTVVgLCBzbyBlbmFibGluZyBib3RoIGBDTUFgIGFuZCBgTUVNT1JZX0hPVFBMVUdgIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGp1c3QgdG8gYmUgc3VyZS4uLiBBaCwgYE1FTU9SWV9JU09MQVRJT05gIGlzIHNlbGVjdGVkIGJ5IGJvdGggYE1FTU9SWV9IT1RQTFVHYCBhbmQgYENNQWAg4oCTIHNvIHRob3NlIHR3byBhcmUgZGVmaW5pdGVseSBzdWZmaWNpZW50IGZvciBteSBhbmFseXNpcy5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlIGl0c2VsZi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbW9kaWZ5aW5nIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHdpdGhpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AuIFRoZSBrZXkgY2hhbmdlIGlzIHVzaW5nIGBidWRkeV9vcmRlcl91bnNhZmVgIGFuZCB2YWxpZGF0aW5nIGl0cyBvdXRwdXQgYWdhaW5zdCBgTUFYX1BBR0VfT1JERVJgLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBndWFyZHMgYWdhaW5zdCBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgcG90ZW50aWFsIFBGTiBpbmNyZW1lbnQgZXJyb3JzLCB3aGljaCBjYW4gYXJpc2UgZnJvbSByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIHRoZSBvcmRlciBvZiBhIGJ1ZGR5IHBhZ2UuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgYGJ1ZGR5X29yZGVyYCBjb3VsZCBoYXZlIHJldHVybmVkIGdhcmJhZ2UgdmFsdWVzIGxlYWRpbmcgdG8gdGhvc2UgZXJyb3JzLCBhcyB0aGUgY29kZSBoYWQgYSByYWNlIGNvbmRpdGlvbiBpc3N1ZS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lLCBpbiBmYWN0LiBJdCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYXNzb2NpYXRlZCB3aXRoIHBhZ2UgaXNvbGF0aW9uLiBJdCdzIHVzZWQgYnkgYm90aCBgQ01BYCBhbmQgbWVtb3J5IGhvdHBsdWcsIGJvdGgga2V5IGFyZWFzLiBUaGlzIG1ha2VzIGl0IHF1aXRlIGxpa2VseSB0aGF0IHRoZXJlIGlzIGEgZ29vZCByZWFzb24gdG8gaW52ZXN0aWdhdGUgdGhpcyBjaGFuZ2UuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgY291bGQgZGVmaW5pdGVseSBiZW5lZml0IGZyb20gZnV6emluZy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHN5bWJvbHMgbGlrZSBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgLCBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgLCBhbmQgYG9mZmxpbmVfcGFnZXNgIGZvciBteSBpbnZlc3RpZ2F0aW9uLiBTbywgbGV0IG1lIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI4NCwiT3V0cHV0VG9rZW5zIjoxODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6NTAuNzEyMzY1MDk5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NjUyNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwib2ZmbGluZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIHZhbGlkYXRlIHRoZSBvcmRlciBhZ2FpbnN0IGBNQVhfUEFHRV9PUkRFUmAuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGluY29ycmVjdCBQRk4gaW5jcmVtZW50cyBjYXVzZWQgYnkgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyB0aGUgb3JkZXIgb2YgYSBidWRkeSBwYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IENNQSBhbmQgbWVtb3J5IGhvdHBsdWcuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwib2ZmbGluZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIHZhbGlkYXRlIHRoZSBvcmRlciBhZ2FpbnN0IGBNQVhfUEFHRV9PUkRFUmAuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGluY29ycmVjdCBQRk4gaW5jcmVtZW50cyBjYXVzZWQgYnkgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyB0aGUgb3JkZXIgb2YgYSBidWRkeSBwYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IENNQSBhbmQgbWVtb3J5IGhvdHBsdWcuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6NTAuODUwMDI1NzQzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjcxMDIzOTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6NTAuODUwNTIzMTAzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk2NzA1MjE1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZSgpYCBpbnN0ZWFkIG9mIGBidWRkeV9vcmRlcigpYCBhbmQgYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIG9yZGVyLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgYSBjb25jdXJyZW50bHkgbW9kaWZpZWQgb3IgaW52YWxpZCBwYWdlIG9yZGVyIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyBzaGlmdCBvciBpbmNvcnJlY3QgUEZOIGNhbGN1bGF0aW9uLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIG91dC1vZi1ib3VuZHMvaW52YWxpZCB2YWx1ZXMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4sIFVCU0FOLCBhbmQga2VybmVsIHdhcm5pbmdzIChsaWtlIGBWTV9XQVJOX09OX09OQ0VgKSBhcmUgc3VmZmljaWVudCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IgcmVzdWx0aW5nIGZyb20gaW52YWxpZCBwYWdlIG9yZGVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEwNjVmMmRmYWNiZjY3YjRiNzE3MDU3MTNkNmJmNDc3OWI5YjkyODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNDowOTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li44YWEwOTZmMTc1NGQ1IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuKysrIGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTM4NywxMyArMzg3LDE2IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuIFx0XHR9XG4gXG4gXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXI7XG4gXG4tXHRcdFx0LyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqL1xuLVx0XHRcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuK1x0XHRcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuK1x0XHRcdGlmIChsaWtlbHkob3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUikpIHtcbitcdFx0XHRcdC8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi9cbitcdFx0XHRcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuIFxuLVx0XHRcdHBmbiArPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdFx0cGZuICs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjE2OjUwLjg1MDUyMzkxM1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjcwNDk0Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFnZSBJc29sYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHdpdGhpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHN3aXRjaGluZyBmcm9tIGBidWRkeV9vcmRlcihwYWdlKWAgdG8gYGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKWAgYW5kIHRocm93aW5nIGluIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBgb3JkZXJgIGlzbid0IHJpZGljdWxvdXMg4oCTIG1ha2luZyBzdXJlIGl0J3MgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBNQVhfUEFHRV9PUkRFUmAuIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IGlzIHRoaXMgS01TQU4tcmVsYXRlZD8gSXMgdGhlcmUgYSByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgb3Igd3JpdGluZyBpdCB0byB1c2VyIHNwYWNlP1xuXG5BZnRlciBhIGNsb3NlciBsb29rLCB0aGUgZm9jdXMgaXMgcmVhbGx5IG9uIGhhbmRsaW5nIHBvdGVudGlhbGx5IGludmFsaWQgb3IgY29uY3VycmVudGx5IG1vZGlmaWVkIHBhZ2Ugb3JkZXJzLiBgYnVkZHlfb3JkZXJfdW5zYWZlYCBkb2VzIHJlYWQgdGhlIHBhZ2Ugb3JkZXIgKndpdGhvdXQqIGEgbG9jaywgd2hpY2ggbWVhbnMgaXQgKmNvdWxkKiByZWFkIGdhcmJhZ2Ugb3IgZ2V0IGEgdmFsdWUgdGhhdCdzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcgbW9kaWZpZWQuIFRoZSBjcnVjaWFsIGRpc3RpbmN0aW9uIGlzIHRoYXQgaXQncyAqbm90KiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgS01TQU4gc2Vuc2Ug4oCTIEtNU0FOIGRldGVjdHMgYWxsb2NhdGlvbnMgdGhhdCBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYWJvdXQgcG90ZW50aWFsbHkgcmVhZGluZyBhbiBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgdmFsdWUgdGhhdCBtaWdodCBiZSBzZXQgcHJldmlvdXNseSBieSBhIGNvbmN1cnJlbnQgb3BlcmF0aW9uLlxuXG5Pa2F5LCBsZXQncyBuYWlsIHRoaXMgZG93bi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSdzIGFic29sdXRlbHkgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBtYWtpbmcgaXQgaW50byB1c2VyIHNwYWNlIGFzIGEgcmVzdWx0IG9mIHRoaXMgcGF0Y2guIEFmdGVyIGNoZWNraW5nIEkgc2VlIGl04oCZcyBqdXN0IHJlYWRpbmcgYHBhZ2UtXHUwMDNlcHJpdmF0ZWAgKG9yIHdoZXJldmVyIGBvcmRlcmAgaXMgc3RvcmVkKSwgd2hpY2ggY291bGQgYmUgY29uY3VycmVudGx5IG1vZGlmaWVkLCBidXQgbm90IHVuaW5pdGlhbGl6ZWQgaW4gdGhlIEtNU0FOIHNlbnNlLiBNeSBjb25jbHVzaW9uOiB0aGlzIGlzIGFib3V0IHBvdGVudGlhbCAqb3V0LW9mLWJvdW5kcyogaXNzdWVzIG9yIHVuZGVmaW5lZCBiZWhhdmlvciBkdWUgdG8gaW5jb3JyZWN0IG9yZGVyIHZhbHVlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiwgVUJTQU4sIGFuZCBgVk1fV0FSTl9PTl9PTkNFYCBzaG91bGQgY2F0Y2ggYW55IGlzc3VlcyBoZXJlLiBHaXZlbiB0aGF0LCBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5MZXQgbWUgd3JpdGUgaXQgZG93bi4gVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBpc29sYXRpb24gZnVuY3Rpb24gdG8gdXNlIGBidWRkeV9vcmRlcl91bnNhZmVgLCB3aGljaCBpcyBzYWZlIHRvIHJlYWQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBwYWdlIG9yZGVyIGlzIG91dC1vZi1ib3VuZHMgb3IgaXMgYmVpbmcgbW9kaWZpZWQgY29uY3VycmVudGx5LCB3aGljaCBjYW4gdGhlbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgc2hpZnRzIG9yIGluY29ycmVjdCBQRk4gY2FsY3VsYXRpb25zLiBLTVNBTiBpcyBub3QgdGhlIHJpZ2h0IHRvb2wgZm9yIGZpbmRpbmcgZXJyb3JzIGluIHRoaXMgcGF0Y2ggc2luY2UgdGhlIGVycm9ycyBpdCBpcyBtZWFudCB0byB1bmNvdmVyIGFyZSBpbnZhbGlkIHZhbHVlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk3LCJPdXRwdXRUb2tlbnMiOjIwMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjE3OjAwLjUyMTAyMTk2OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlKClgIGluc3RlYWQgb2YgYGJ1ZGR5X29yZGVyKClgIGFuZCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgb3JkZXIuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSBhIGNvbmN1cnJlbnRseSBtb2RpZmllZCBvciBpbnZhbGlkIHBhZ2Ugb3JkZXIgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHNoaWZ0IG9yIGluY29ycmVjdCBQRk4gY2FsY3VsYXRpb24uIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgb3V0LW9mLWJvdW5kcy9pbnZhbGlkIHZhbHVlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiwgVUJTQU4sIGFuZCBrZXJuZWwgd2FybmluZ3MgKGxpa2UgYFZNX1dBUk5fT05fT05DRWApIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVuZGVmaW5lZCBiZWhhdmlvciByZXN1bHRpbmcgZnJvbSBpbnZhbGlkIHBhZ2Ugb3JkZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlKClgIGluc3RlYWQgb2YgYGJ1ZGR5X29yZGVyKClgIGFuZCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgb3JkZXIuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSBhIGNvbmN1cnJlbnRseSBtb2RpZmllZCBvciBpbnZhbGlkIHBhZ2Ugb3JkZXIgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHNoaWZ0IG9yIGluY29ycmVjdCBQRk4gY2FsY3VsYXRpb24uIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgb3V0LW9mLWJvdW5kcy9pbnZhbGlkIHZhbHVlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiwgVUJTQU4sIGFuZCBrZXJuZWwgd2FybmluZ3MgKGxpa2UgYFZNX1dBUk5fT05fT05DRWApIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVuZGVmaW5lZCBiZWhhdmlvciByZXN1bHRpbmcgZnJvbSBpbnZhbGlkIHBhZ2Ugb3JkZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzkkj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 13:26:18 +0000 UTC FinishedAt: 2026-08-18 14:17:01 +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": "f5f9327e251a4efb9a98774093ef4675a4b170b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMORY_HOTPLUG" ], "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": "f5f9327e251a4efb9a98774093ef4675a4b170b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CMA", "MEMORY_HOTPLUG" ], "series_id": "4776599a-7438-4f08-993c-d6a976c8d097" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "start_isolate_page_range", "alloc_contig_range_noprof", "alloc_contig_frozen_range_noprof", "offline_pages" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AgdG8gdXNlIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgaW5zdGVhZCBvZiBgYnVkZHlfb3JkZXIoKWAgYW5kIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBvcmRlci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIGEgY29uY3VycmVudGx5IG1vZGlmaWVkIG9yIGludmFsaWQgcGFnZSBvcmRlciBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgc2hpZnQgb3IgaW5jb3JyZWN0IFBGTiBjYWxjdWxhdGlvbi4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBvdXQtb2YtYm91bmRzL2ludmFsaWQgdmFsdWVzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOLCBVQlNBTiwgYW5kIGtlcm5lbCB3YXJuaW5ncyAobGlrZSBgVk1fV0FSTl9PTl9PTkNFYCkgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdW5kZWZpbmVkIGJlaGF2aW9yIHJlc3VsdGluZyBmcm9tIGludmFsaWQgcGFnZSBvcmRlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgdmFsaWRhdGUgdGhlIG9yZGVyIGFnYWluc3QgYE1BWF9QQUdFX09SREVSYC4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgaW5jb3JyZWN0IFBGTiBpbmNyZW1lbnRzIGNhdXNlZCBieSByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIHRoZSBvcmRlciBvZiBhIGJ1ZGR5IHBhZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gcGFnZSBpc29sYXRpb24sIHdoaWNoIGlzIHVzZWQgYnkgQ01BIGFuZCBtZW1vcnkgaG90cGx1Zy4gSXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTA2NWYyZGZhY2JmNjdiNGI3MTcwNTcxM2Q2YmY0Nzc5YjliOTI4MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE0OjA5OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li44YWEwOTZmMTc1NGQ1IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTM4NywxMyAmIzQzOzM4NywxNiBAQCBzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcbiBcdFx0fVxuIFxuIFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0aW50IG9yZGVyID0gYnVkZHlfb3JkZXIocGFnZSk7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBvcmRlcjtcbiBcbi1cdFx0XHQvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovXG4tXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiAmIzQzOyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuJiM0MztcdFx0XHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbiYjNDM7XHRcdFx0aWYgKGxpa2VseShvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKSkge1xuJiM0MztcdFx0XHRcdC8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi9cbiYjNDM7XHRcdFx0XHRWTV9XQVJOX09OX09OQ0UocGZuICYjNDM7ICgxIFx1MDAzY1x1MDAzYyBvcmRlcikgXHUwMDNlIGJvdW5kYXJ5X3Bmbik7XG4gXG4tXHRcdFx0cGZuICYjNDM7PSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdHBmbiAmIzQzOz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgdmFsaWRhdGUgdGhlIG9yZGVyIGFnYWluc3QgYE1BWF9QQUdFX09SREVSYC4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgaW5jb3JyZWN0IFBGTiBpbmNyZW1lbnRzIGNhdXNlZCBieSByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIHRoZSBvcmRlciBvZiBhIGJ1ZGR5IHBhZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gcGFnZSBpc29sYXRpb24sIHdoaWNoIGlzIHVzZWQgYnkgQ01BIGFuZCBtZW1vcnkgaG90cGx1Zy4gSXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTA2NWYyZGZhY2JmNjdiNGI3MTcwNTcxM2Q2YmY0Nzc5YjliOTI4MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDE0OjA5OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pc29sYXRpb24uYyBiL21tL3BhZ2VfaXNvbGF0aW9uLmMKaW5kZXggMzJjZThhN2Q5ZGYzNS4uOGFhMDk2ZjE3NTRkNSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lzb2xhdGlvbi5jCkBAIC0zODcsMTMgJiM0MzszODcsMTYgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sCiAJCX0KIAogCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQlpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgb3JkZXI7CiAKLQkJCS8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi8KLQkJCVZNX1dBUk5fT05fT05DRShwZm4gJiM0MzsgKDEgJmx0OyZsdDsgb3JkZXIpICZndDsgYm91bmRhcnlfcGZuKTsKJiM0MzsJCQlvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTsKJiM0MzsJCQlpZiAobGlrZWx5KG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKSkgewomIzQzOwkJCQkvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovCiYjNDM7CQkJCVZNX1dBUk5fT05fT05DRShwZm4gJiM0MzsgKDEgJmx0OyZsdDsgb3JkZXIpICZndDsgYm91bmRhcnlfcGZuKTsKIAotCQkJcGZuICYjNDM7PSAxVUwgJmx0OyZsdDsgb3JkZXI7Ci0JCQljb250aW51ZTsKJiM0MzsJCQkJcGZuICYjNDM7PSAxVUwgJmx0OyZsdDsgb3JkZXI7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJfQogCiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIG1vbmtleWluZyB3aXRoIHRoZSBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgc3dhcHBpbmcgb3V0IGBidWRkeV9vcmRlcihwYWdlKWAgZm9yIGBidWRkeV9vcmRlcl91bnNhZmUocGFnZSlgLCBhbmQgdGhlbiBzbGFwcGluZyBvbiBhIGBsaWtlbHlgIGNoZWNrIHRvIHNlZSBpZiB0aGUgb3JkZXIgaXMgd2l0aGluIGJvdW5kcyAoYCZsdDs9IE1BWF9QQUdFX09SREVSYCkuCgpGdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBmb2N1c2luZyBvbiB0aGUgcGFnZSBpc29sYXRpb24gbWVjaGFuaXNtcy4gVGhpcyBpcyBwcmV0dHkgc2lnbmlmaWNhbnQgYmVjYXVzZSBwYWdlIGlzb2xhdGlvbiBpcyBmdW5kYW1lbnRhbCB0byB0aGluZ3MgbGlrZSBtZW1vcnkgaG90cGx1ZywgQ01BLCBhbmQgY29tcGFjdGlvbiDigJMgYWxsIGNyaXRpY2FsIGFzcGVjdHMgb2Ygc3lzdGVtIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuCgpNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGV4YWN0bHkgaG93IGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIHVzZWQsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIGl0cyBjYWxsIGNoYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIG1vdGl2YXRpbmcgdGhpcyBtb3ZlIHRvIGBidWRkeV9vcmRlcl91bnNhZmVgIGFuZCB3aHkgdGhlIGFkZGVkIGNoZWNrIGlzIG5lY2Vzc2FyeSwgb3IgaWYgaXQmIzM5O3MgdGhlcmUgYXMgYSBzYWZlZ3VhcmQuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBzb3VuZCBhbmQgd29uJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9pc29sYXRpb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2lzb2xhdGlvbi5jPTI4Mz1fX2ZpcnN0X3ZhbGlkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0yOTgtLyoqXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjI5OTogKiBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soKSAtLSB0cmllcyB0byBpc29sYXRlIGEgcGFnZWJsb2NrIHRoYXQgbWlnaHQgYmVcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzAwLSAqIHdpdGhpbiBhIGZyZWUgb3IgaW4tdXNlIHBhZ2UuXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0zMDQtICogQHNraXBfaXNvbGF0aW9uOlx0dGhlIGZsYWcgdG8gc2tpcCB0aGUgcGFnZWJsb2NrIGlzb2xhdGlvbiBpbiBzZWNvbmRcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MzA1OiAqXHRcdFx0aXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKClcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA2LSAqXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy0zMTktICovXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjMyMDpzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3Bmbixcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzIxLVx0XHRcdGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUsIGJvb2wgaXNvbGF0ZV9iZWZvcmUsXG4tLVxubW0vcGFnZV9pc29sYXRpb24uYz00ODU9aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDk2LVx0LyogaXNvbGF0ZSBbaXNvbGF0ZV9zdGFydCwgaXNvbGF0ZV9zdGFydCAmIzQzOyBwYWdlYmxvY2tfbnJfcGFnZXMpIHBhZ2VibG9jayAqL1xubW0vcGFnZV9pc29sYXRpb24uYzo0OTc6XHRyZXQgPSBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soaXNvbGF0ZV9zdGFydCwgbW9kZSwgZmFsc2UsXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ5OC1cdFx0XHRza2lwX2lzb2xhdGlvbik7XG4tLVxubW0vcGFnZV9pc29sYXRpb24uYy01MDUtXHQvKiBpc29sYXRlIFtpc29sYXRlX2VuZCAtIHBhZ2VibG9ja19ucl9wYWdlcywgaXNvbGF0ZV9lbmQpIHBhZ2VibG9jayAqL1xubW0vcGFnZV9pc29sYXRpb24uYzo1MDY6XHRyZXQgPSBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soaXNvbGF0ZV9lbmQsIG1vZGUsIHRydWUsIHNraXBfaXNvbGF0aW9uKTtcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTA3LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIEZ1bmN0aW9uJiMzOTtzIENhbGwgSGllcmFyY2h5KioKCk9rYXksIHNvIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIGNhbGxlZCBieSBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYW5kIHRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBwYWdlIGJsb2NrIGlzb2xhdGlvbiB3b3Jrcy4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIHRvIHVuZGVyc3RhbmQgaXRzICpvd24qIGNhbGxpbmcgZnVuY3Rpb25zLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgYnJvYWRlciBjb250ZXh0IGFuZCByZXZlYWwgdGhlIHRyaWdnZXJzIHRoYXQgc2V0IHRoaXMgaXNvbGF0aW9uIHByb2Nlc3MgaW4gbW90aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgY2hhaW4gaXMgY3J1Y2lhbCBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIHRoZSBpbmRpdmlkdWFsIGZ1bmN0aW9ucy4gSXQmIzM5O3MgYWxsIGFib3V0IGNvbnRleHQsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSB1cHN0cmVhbSBmbG93IGhlbHBzIG1lIG1hcCB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaD02MT1ib29sIHBhZ2VibG9ja191bmlzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oLTYyLVxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oOjYzOmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbixcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaC02NC1cdFx0XHQgICAgIGVudW0gcGJfaXNvbGF0ZV9tb2RlIG1vZGUpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTkwMj1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5NjgtXHQvKiBzZXQgYWJvdmUgcmFuZ2UgYXMgaXNvbGF0ZWQgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTk2OTpcdHJldCA9IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydF9wZm4sIGVuZF9wZm4sXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5NzAtXHRcdFx0XHQgICAgICAgUEJfSVNPTEFURV9NT0RFX01FTV9PRkZMSU5FKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzEwOD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxNDQtXHQgKiBoYXZlIGRpZmZlcmVudCBzaXplcywgYW5kIGR1ZSB0byB0aGUgd2F5IHBhZ2UgYWxsb2NhdG9yXG5tbS9wYWdlX2FsbG9jLmM6NzE0NTpcdCAqIHdvcmssIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIGhhcyBzcGVjaWFsIGhhbmRsaW5ncyBmb3IgdGhpcy5cbm1tL3BhZ2VfYWxsb2MuYy03MTQ2LVx0ICpcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzE2MS1cbm1tL3BhZ2VfYWxsb2MuYzo3MTYyOlx0cmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0LCBlbmQsIG1vZGUpO1xubW0vcGFnZV9hbGxvYy5jLTcxNjMtXHRpZiAocmV0KVxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmM9MzIwPXN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuLS1cbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDQ5LS8qKlxubW0vcGFnZV9pc29sYXRpb24uYzo0NTA6ICogc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKCkgLSBtYXJrIHBhZ2UgcmFuZ2UgTUlHUkFURV9JU09MQVRFXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ1MS0gKiBAc3RhcnRfcGZuOlx0XHRUaGUgZmlyc3QgUEZOIG9mIHRoZSByYW5nZSB0byBiZSBpc29sYXRlZC5cbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ4NC0gKi9cbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NDg1OmludCBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbixcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDg2LVx0XHRcdCAgICAgZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSlcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUyOC0vKipcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NTI5OiAqIHVuZG9faXNvbGF0ZV9wYWdlX3JhbmdlIC0gdW5kbyBlZmZlY3RzIG9mIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUzMC0gKiBAc3RhcnRfcGZuOlx0XHRUaGUgZmlyc3QgUEZOIG9mIHRoZSBpc29sYXRlZCByYW5nZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NDkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LgoKKipUcmFjaW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBGbG93KioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MuIEkgc2VlIHRoYXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgaXMgYmVpbmcgY2FsbGVkIGJ5IGBvZmZsaW5lX3BhZ2VzYCBhbmQgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYC4gVGhhdCYjMzk7cyBhIGtleSBzdGFydGluZyBwb2ludC4gIFRoZW4gSSBvYnNlcnZlIHRoYXQgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYC4gIFNpbmNlIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBmbG93LCBhbmQgdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGFsbG9jYXRpb24gc2NoZW1lIGlzIHNpdHVhdGVkIGluIHRoZSB3aWRlciBwaWN0dXJlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjYWxsIHNpdGVzIG9mIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCBhbmQgaXRzIHJlbGF0ZWQgZnVuY3Rpb24gYGFsbG9jX2NvbnRpZ19yYW5nZWAuIFRoYXQgd2lsbCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2NvbnRpZ19yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdD0zOTA9c2NlbmFyaW9zOiBtZW1vcnkgb2ZmbGluZSwgbWVtb3J5IGZhaWx1cmUsIGxvbmd0ZXJtIHBpbm5pbmcsIHN5c2NhbGxzKG1iaW5kLFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q6MzkxOm1pZ3JhdGVfcGFnZXMgYW5kIG1vdmVfcGFnZXMpLCBhbGxvY19jb250aWdfcmFuZ2UoKSBhbmQgYWxsb2NfY29udGlnX3BhZ2VzKCkuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0zOTItTm93IG9ubHkgbWVtb3J5IG9mZmxpbmUsIG1lbW9yeSBmYWlsdXJlIGFuZCBzeXNjYWxscyBhbGxvdyBmYWxsYmFja2luZyB0byBhbGxvY2F0ZVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz0xMTg3PXN0YXRpYyB2b2lkIHZpcnRpb19tZW1fZmFrZV9vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTEyMDUtXHRcdCAqIG9ubGluaW5nIHRoZSBtZW1vcnkgYmxvY2suIE90aGVyd2lzZSwgaXQgd2FzIGFsbG9jYXRlZFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjEyMDY6XHRcdCAqIHVzaW5nIGFsbG9jX2NvbnRpZ19yYW5nZSgpLiBBbGwgcGFnZXMgaW4gYSBzdWJibG9jayBhcmVcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjA3LVx0XHQgKiBhbGlrZS5cbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmM9MTIyND1zdGF0aWMgaW50IHZpcnRpb19tZW1fZmFrZV9vZmZsaW5lKHN0cnVjdCB2aXJ0aW9fbWVtICp2bSwgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTEyMzAtXHQvKlxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjEyMzE6XHQgKiBUT0RPOiBXZSB3YW50IGFuIGFsbG9jX2NvbnRpZ19yYW5nZSgpIG1vZGUgdGhhdCB0cmllcyB0byBhbGxvY2F0ZVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTEyMzItXHQgKiBoYXJkZXIgKGUuZy4sIGRlYWxpbmcgd2l0aCB0ZW1wb3JhcmlseSBwaW5uZWQgcGFnZXMsIFBDUCksIGVzcGVjaWFsbHlcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTI0NS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxMjQ2Olx0XHRyYyA9IGFsbG9jX2NvbnRpZ19yYW5nZShwZm4sIHBmbiAmIzQzOyBucl9wYWdlcywgQUNSX0ZMQUdTX05PTkUsXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTI0Ny1cdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTI1MzU9c3RhdGljIGludCB2aXJ0aW9fbWVtX2luaXRfaG90cGx1ZyhzdHJ1Y3QgdmlydGlvX21lbSAqdm0pXG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTI1NTctXHQvKlxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjI1NTg6XHQgKiBhbGxvY19jb250aWdfcmFuZ2UoKSB3b3JrcyByZWxpYWJseSB3aXRoIHBhZ2VibG9ja1xuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTI1NTktXHQgKiBncmFudWxhcml0eSBvbiBaT05FX05PUk1BTCwgdXNlIHBhZ2VibG9ja19ucl9wYWdlcy5cbi0tXG5pbmNsdWRlL2xpbnV4L2NtYS5oLTE1LS8qXG5pbmNsdWRlL2xpbnV4L2NtYS5oOjE2OiAqICB0aGUgYnVkZHkgLS0gZXNwZWNpYWxseSBwYWdlYmxvY2sgbWVyZ2luZyBhbmQgYWxsb2NfY29udGlnX3JhbmdlKClcbmluY2x1ZGUvbGludXgvY21hLmgtMTctICogLS0gY2FuIGRlYWwgd2l0aCBvbmx5IHNvbWUgcGFnZWJsb2NrcyBvZiBhIGhpZ2hlci1vcmRlciBwYWdlIGJlaW5nXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaD00NDg9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUyLVxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTM6aW50IGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1NC1cdFx0YWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDU1OiNkZWZpbmUgYWxsb2NfY29udGlnX3JhbmdlKC4uLilcdFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1NjpcdGFsbG9jX2hvb2tzKGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9nZnAuaC00NTctXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD04NzM9ZW51bSB6b25lX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtOTM2LVx0ICogICAgbWVtb3J5IG9mZmxpbmluZywgaG93ZXZlciwgY2Fubm90IGJlIG1vdmVkL2FsbG9jYXRlZC4gVGhlc2VcbmluY2x1ZGUvbGludXgvbW16b25lLmg6OTM3Olx0ICogICAgdGVjaG5pcXVlcyBtaWdodCB1c2UgYWxsb2NfY29udGlnX3JhbmdlKCkgdG8gaGlkZSBwcmV2aW91c2x5XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTkzOC1cdCAqICAgIGV4cG9zZWQgcGFnZXMgZnJvbSB0aGUgYnVkZHkgYWdhaW4gKGUuZy4sIHRvIGltcGxlbWVudCBzb21lIHNvcnRcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTk1MC1cdCAqIEluIGdlbmVyYWwsIG5vIHVubW92YWJsZSBhbGxvY2F0aW9ucyB0aGF0IGRlZ3JhZGUgbWVtb3J5IG9mZmxpbmluZ1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo5NTE6XHQgKiBzaG91bGQgZW5kIHVwIGluIFpPTkVfTU9WQUJMRS4gQWxsb2NhdG9ycyAobGlrZSBhbGxvY19jb250aWdfcmFuZ2UoKSlcbmluY2x1ZGUvbGludXgvbW16b25lLmgtOTUyLVx0ICogaGF2ZSB0byBleHBlY3QgdGhhdCBtaWdyYXRpbmcgcGFnZXMgaW4gWk9ORV9NT1ZBQkxFIGNhbiBmYWlsIChldmVuXG4tLVxubW0vY21hLmM9MTAzPWJvb2wgY21hX3ZhbGlkYXRlX3pvbmVzKHN0cnVjdCBjbWEgKmNtYSlcbi0tXG5tbS9jbWEuYy0xMjQtXHRcdC8qXG5tbS9jbWEuYzoxMjU6XHRcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIHJlcXVpcmVzIHRoZSBwZm4gcmFuZ2Ugc3BlY2lmaWVkXG5tbS9jbWEuYy0xMjYtXHRcdCAqIHRvIGJlIGluIHRoZSBzYW1lIHpvbmUuIFNpbXBsaWZ5IGJ5IGZvcmNpbmcgdGhlIGVudGlyZVxuLS1cbm1tL2h1Z2V0bGIuYz0yNzI3PWludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiLmMtMjczNi1cdCAqIEZlbmNlIG9mZiBnaWdhbnRpYyBwYWdlcyBhcyB0aGVyZSBpcyBhIGN5Y2xpYyBkZXBlbmRlbmN5IGJldHdlZW5cbm1tL2h1Z2V0bGIuYzoyNzM3Olx0ICogYWxsb2NfY29udGlnX3JhbmdlIGFuZCB0aGVtLiBSZXR1cm4gLUVOT01FTSBhcyB0aGlzIGhhcyB0aGUgZWZmZWN0XG5tbS9odWdldGxiLmMtMjczOC1cdCAqIG9mIGJhaWxpbmcgb3V0IHJpZ2h0IGF3YXkgd2l0aG91dCBmdXJ0aGVyIHJldHJ5aW5nLlxuLS1cbm1tL2ludGVybmFsLmg9MTAxNz1zdHJ1Y3QgY29tcGFjdF9jb250cm9sIHtcbi0tXG5tbS9pbnRlcm5hbC5oLTEwNTMtXHRcdFx0XHRcdCAqL1xubW0vaW50ZXJuYWwuaDoxMDU0Olx0Ym9vbCBhbGxvY19jb250aWc7XHRcdC8qIGFsbG9jX2NvbnRpZ19yYW5nZSBhbGxvY2F0aW9uICovXG5tbS9pbnRlcm5hbC5oLTEwNTUtfTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzI0Nj1FWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI0OC0vKipcbm1tL3BhZ2VfYWxsb2MuYzo3MjQ5OiAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIC0tIHRyaWVzIHRvIGFsbG9jYXRlIGdpdmVuIHJhbmdlIG9mIHBhZ2VzXG5tbS9wYWdlX2FsbG9jLmMtNzI1MC0gKiBAc3RhcnQ6XHRzdGFydCBQRk4gdG8gYWxsb2NhdGVcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI2NC0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXHRcdFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNzI4MC1cbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTEzND1zdGF0aWMgc3RydWN0IHBhZ2UgKmhhc191bm1vdmFibGVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbixcbi0tXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTE0NC1cdFx0Lypcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MTQ1Olx0XHQgKiBDTUEgYWxsb2NhdGlvbnMgKGFsbG9jX2NvbnRpZ19yYW5nZSkgcmVhbGx5IG5lZWQgdG8gbWFya1xubW0vcGFnZV9pc29sYXRpb24uYy0xNDYtXHRcdCAqIGlzb2xhdGUgQ01BIHBhZ2VibG9ja3MgZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBtb3ZhYmxlIGluIGZhY3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTA5CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0IHRvdWNoZXMgc29tZSBwcmV0dHkgY3JpdGljYWwgYXJlYXM6IGBhbGxvY19jb250aWdfcmFuZ2VgLCB3aGljaCBpcyB1c2VkIGJ5IENNQSwgdmlydGlvX21lbSwgYW5kIG1lbW9yeSBob3RwbHVnLiBDTUEgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nIOKAkyB3ZSBjYW4gaGl0IGl0IHdpdGggYG1tYXBgIG9uIENNQSBhcmVhcywgZG1hLWJ1ZnMsIG9yIGV2ZW4gaHVnZXBhZ2VzLiBNZW1vcnkgaG90cGx1Zz8gU3lzZnMgaXMgdGhlIG9idmlvdXMgcm91dGUuCgpUaGUgaGVhcnQgb2YgdGhlIGNoYW5nZSBpcyBpbiBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCwgYW5kIHRoYXQmIzM5O3MgY29uY2VybmluZyBiZWNhdXNlIHRoYXQmIzM5O3MgY2FsbGVkIGR1cmluZyBwYWdlYmxvY2sgaXNvbGF0aW9uLiBUaGV5JiMzOTt2ZSBzd2FwcGVkIG91dCBgYnVkZHlfb3JkZXJgIGZvciBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgYWRkZWQgYSBjaGVjayBmb3IgdGhlIG9yZGVyLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgYSBidWcuIEkgY2FuIHNlZSB3aGF0IHRoZXkmIzM5O3JlIHNheWluZyBhYm91dCBgYnVkZHlfb3JkZXIocGFnZSlgIHBvdGVudGlhbGx5IHJldHVybmluZyBnYXJiYWdlIGlmIGBQYWdlQnVkZHlgIGFuZCBhbGxvY2F0aW9uIGFyZSByYWNpbmcuCgpXYWl0IGEgc2Vjb25k4oCmIEkmIzM5O20gY2F0Y2hpbmcgb24gbm93LiBUaGV5JiMzOTtyZSBjaGVja2luZyBgUGFnZUJ1ZGR5KHBhZ2UpYCByaWdodCAqYmVmb3JlKiBgYnVkZHlfb3JkZXIocGFnZSlgLiBCdXQsIHNpbmNlIHRoaXMgaXNuJiMzOTt0IHVuZGVyIHRoZSB6b25lIGxvY2ssIGFub3RoZXIgdGhyZWFkIGNhbiBjbGVhciBgUGFnZUJ1ZGR5YCBhbmQgb3ZlcndyaXRlIHRoZSBgcGFnZV9wcml2YXRlYCBmaWVsZCB0aGF0IHN0b3JlcyB0aGUgb3JkZXIuIFRoZXJlZm9yZSwgYGJ1ZGR5X29yZGVyYCBjb3VsZCByZWFkIGEgaHVnZSB2YWx1ZSwgbGVhZGluZyB0byBhbiBvdXQtb2YtYm91bmRzIHNoaWZ0IG9yIHNvbWUgcmlkaWN1bG91cyBwYWdlIGNvdW50LCB0cmlnZ2VyaW5nIHRoYXQgYFZNX1dBUk5fT05fT05DRWAgb3Igc2tpcHBpbmcgdG9ucyBvZiBwYWdlcy4gQ2xldmVyLiBCeSB1c2luZyBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgY2hlY2tpbmcgdGhlIG9yZGVyIGFnYWluc3QgYE1BWF9QQUdFX09SREVSYCwgdGhleSYjMzk7cmUgYXZvaWRpbmcgdGhlIHJhY2UgY29uZGl0aW9uIGFuZCB0aGUgcmVzdWx0aW5nIGNoYW9zLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gZm9jdXMgb24gYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2VgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLiBJcyBgYWxsb2NfY29udGlnX3JhbmdlYCBleHBvcnRlZCBhbmQgcmVhY2hhYmxlPyBZZXAsIGdvb2QuIExldCYjMzk7cyBkaWcgaW50byBgb2ZmbGluZV9wYWdlc2AuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZmbGluZV9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL21tdS5jPTIwNzU9c3RhdGljIGJvb2wgY2FuX3VubWFwX3dpdGhvdXRfc3BsaXQodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMTA1LSAqIGluYWR2ZXJ0ZW50bHkgcmVtb3ZlZCBhcyBpdCBibG9ja3MgcGZuIHJhbmdlIG9mZmxpbmluZyBwcm9jZXNzIGluXG5hcmNoL2FybTY0L21tL21tdS5jOjIxMDY6ICogX19vZmZsaW5lX3BhZ2VzKCkuIEhlbmNlIHRoaXMgcHJldmVudHMgYm90aCBvZmZsaW5pbmcgYXMgd2VsbCBhc1xuYXJjaC9hcm02NC9tbS9tbXUuYy0yMTA3LSAqIHJlbW92YWwgcHJvY2VzcyBmb3IgYm9vdCBtZW1vcnkgd2hpY2ggaXMgaW5pdGlhbGx5IGFsd2F5cyBvbmxpbmUuXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTI4MD1zdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjkxLVx0ICogVW5hY2NvdW50IGJlZm9yZSBvZmZsaW5pbmcsIHN1Y2ggdGhhdCB1bnBvcHVsYXRlZCB6b25lIGFuZCBrdGhyZWFkc1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjI5MjpcdCAqIGNhbiBwcm9wZXJseSBiZSB0b3JuIGRvd24gaW4gb2ZmbGluZV9wYWdlcygpLlxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTI5My1cdCAqL1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDEtXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzAyOlx0cmV0ID0gb2ZmbGluZV9wYWdlcyhzdGFydF9wZm4gJiM0MzsgbnJfdm1lbW1hcF9wYWdlcyxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDMtXHRcdFx0ICAgIG5yX3BhZ2VzIC0gbnJfdm1lbW1hcF9wYWdlcywgbWVtLVx1MDAzZXpvbmUsIG1lbS1cdTAwM2Vncm91cCk7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzA0LVx0aWYgKHJldCkge1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMwNTpcdFx0Lyogb2ZmbGluZV9wYWdlcygpIGZhaWxlZC4gQWNjb3VudCBiYWNrLiAqL1xuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwNi1cdFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2ND1leHRlcm4gdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI2NTpleHRlcm4gaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjY2LVx0XHRcdCBzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaD0yNzI9c3RhdGljIGlubGluZSB2b2lkIHRyeV9vZmZsaW5lX25vZGUoaW50IG5pZCkge31cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNzMtXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6Mjc0OnN0YXRpYyBpbmxpbmUgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjc1LVx0XHRcdFx0c3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9NTM5PXZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODMtICogc3VyZSB0aGF0IHBhZ2VzIGFyZSBtYXJrZWQgcmVzZXJ2ZWQgYW5kIHpvbmVzIGFyZSBhZGp1c3QgcHJvcGVybHkgYnlcbm1tL21lbW9yeV9ob3RwbHVnLmM6NTg0OiAqIGNhbGxpbmcgb2ZmbGluZV9wYWdlcygpLlxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODUtICovXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xODkwPXN0YXRpYyBpbnQgY291bnRfc3lzdGVtX3JhbV9wYWdlc19jYih1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDEtICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE5MDI6aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDMtXHRcdFx0c3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKVxuLS1cbm1tL21tX2luaXQuYz0xNTM5PXZvaWQgX19yZWYgZnJlZV9hcmVhX2luaXRfY29yZV9ob3RwbHVnKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vbW1faW5pdC5jLTE1NzctXHQgKiBjbGVhciBhbGwgem9uZXMmIzM5OyBwcmVzZW50X3BhZ2VzIGFuZCBtYW5hZ2VkX3BhZ2VzIGJlY2F1c2UgdGhleSB3aWxsXG5tbS9tbV9pbml0LmM6MTU3ODpcdCAqIGJlIHVwZGF0ZWQgaW4gb25saW5lX3BhZ2VzKCkgYW5kIG9mZmxpbmVfcGFnZXMoKS5cbm1tL21tX2luaXQuYy0xNTc5LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IE9mZmxpbmUgUGFnZXMgYW5kIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKgoKT2theSwgc28gYG9mZmxpbmVfcGFnZXNgIGlzIGNhbGxlZCBieSBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgLiBUaGF0IGNvbm5lY3Rpb24gaXMgaW1wb3J0YW50LiBBbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBpdHNlbGYgZ2V0cyB0cmlnZ2VyZWQgdmlhIHN5c2ZzIG1lbW9yeSBob3RwbHVnLi4uIHdoaWNoIHdlIGFsbCBrbm93IGNhbiBiZSBhIHNvdXJjZSBvZiBmdXp6aW5nIGF0dGFja3MuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFdlJiMzOTt2ZSBzZWVuIHNvbWUgZXhwbG9pdHMgbGV2ZXJhZ2luZyB0aGF0LiBBbmQsIG9mIGNvdXJzZSwgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpIGlzIGFsd2F5cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBTbywgZ2l2ZW4gdGhpcyBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0dGVyLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgYGFsbG9jX2NvbnRpZ19yYW5nZWAgYW5kIGBvZmZsaW5lX3BhZ2VzYC4gVW5kZXJzdGFuZGluZyB0aGVzZSB3aWxsIGNsYXJpZnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBhbmQgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBpbiB0aGUgY29udGV4dCBvZiBvZmZsaW5lIG1lbW9yeSBibG9ja3MsIGVzcGVjaWFsbHkgd2hlbiB0cmlnZ2VyZWQgdmlhIGEgY29udHJvbGxhYmxlIGhvdHBsdWcgZXZlbnQuIFRoaXMgZmVlbHMgbGlrZSBpdCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGFyZWEgb2YgaW50ZXJlc3QgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RQTFVHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTUxOT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcbi0tXG5tbS9LY29uZmlnLTUyMi0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTIzOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTI0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDYzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2JsZW06CgoqKlRoaW5raW5nIFRocm91Z2ggTWVtb3J5IE1hbmFnZW1lbnQgYW5kIE9mZmxpbmUgUGFnZXMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBob3cgYE1FTU9SWV9IT1RQTFVHYCBpbnRlcmFjdHMgd2l0aCBgb2ZmbGluZV9wYWdlc2AuIEl0IHNlZW1zIGxpa2UgYE1FTU9SWV9IT1RQTFVHYCBpcyBhIHByZXJlcXVpc2l0ZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGR5bmFtaWNhbGx5IHJlbW92aW5nIG1lbW9yeSwgYW5kIG9mZmxpbmUgcGFnZXMgbGlrZWx5IG5lZWQgdGhpcyBjYXBhYmlsaXR5IHRvIGZ1bmN0aW9uLiBCdXQgdGhhdCByYWlzZXMgYW5vdGhlciBxdWVzdGlvbiB0aGF0IGlzIHRvcCBvZiBtaW5kIC0gSSBuZWVkIHRvIGNvbnNpZGVyIGBhbGxvY19jb250aWdfcmFuZ2VgLiBEb2VzIHRoZSB1c2Ugb2YgYG9mZmxpbmVfcGFnZXNgIHNvbWVob3cgY29tcGxpY2F0ZSwgaW50ZXJhY3Qgd2l0aCwgb3IgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIGBhbGxvY19jb250aWdfcmFuZ2VgPyBBcmUgdGhlcmUgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBvcHRpbWl6YXRpb25zIGhlcmU/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24uIFRoaXMgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ01BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEwNjQ9Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4tLVxubW0vS2NvbmZpZy0xMDY2LVxubW0vS2NvbmZpZzoxMDY3OmNvbmZpZyBDTUFcbm1tL0tjb25maWctMTA2OC1cdGJvb2wgXCYjMzQ7Q29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDgxLVxubW0vS2NvbmZpZzoxMDgyOmNvbmZpZyBDTUFfREVCVUdGU1xubW0vS2NvbmZpZy0xMDgzLVx0Ym9vbCBcJiMzNDtDTUEgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODctXG5tbS9LY29uZmlnOjEwODg6Y29uZmlnIENNQV9TWVNGU1xubW0vS2NvbmZpZy0xMDg5LVx0Ym9vbCBcJiMzNDtDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwOTQtXG5tbS9LY29uZmlnOjEwOTU6Y29uZmlnIENNQV9BUkVBU1xubW0vS2NvbmZpZy0xMDk2LVx0aW50IFwmIzM0O01heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTE0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqQ01BIEFsbG9jYXRpb24gU3RyYXRlZ3kqKgoKT2theSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaGFuZGxlIHRoaXMgYWxsb2NhdGlvbi4gQ2xlYXJseSwgdGhlIGBDTUFgIG1lY2hhbmlzbSBpcyBlc3NlbnRpYWwgZm9yIG1hbmFnaW5nIHRoZSBhbGxvY2F0aW9ucywgc28gdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgYENPTlRJR19BTExPQ2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgQ01BIGFsbG9jYXRpb25zIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYW5kIGFueSBvdGhlciBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhhdCBjb2RlIGZvciBhIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT05USUdfQUxMT0MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxuLS1cbm1tL0tjb25maWctNzE4LVxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xubW0vS2NvbmZpZy03MjAtXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcdTAwMjZcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gQ29udGlndW91cyBBbGxvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBDT05USUdfQUxMT0NgIGNvbmZpZ3VyYXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyB0cmlnZ2Vycy4gSXQgc2VlbXMgdGhhdCB3aGV0aGVyIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiBpcyBlbmFibGVkIGRlcGVuZHMgb24gYSBjb3VwbGUgb2Yga2V5IGZhY3RvcnM6IHdoZXRoZXIgd2UmIzM5O3JlIHVzaW5nIG1lbW9yeSBpc29sYXRpb24gKmFuZCogY29tcGFjdGlvbiwgKm9yKiBpZiB3ZSYjMzk7cmUgdXNpbmcgQ01BLiBUaGF0IG1ha2VzIHNlbnNlLCBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgbWFuYWdlbWVudC4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGZpcnN0IHBvdGVudGlhbCB0cmlnZ2VyLCBgTUVNT1JZX0lTT0xBVElPTmAsIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfSVNPTEFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTQ5OT1jb25maWcgTlVNQV9LRUVQX01FTUlORk9cbi0tXG5tbS9LY29uZmlnLTUwMS1cbm1tL0tjb25maWc6NTAyOmNvbmZpZyBNRU1PUllfSVNPTEFUSU9OXG5tbS9LY29uZmlnLTUwMy1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBNZW1vcnkgSXNvbGF0aW9uIFNldHRpbmdzKioKCk9rYXksIHNvIGBNRU1PUllfSVNPTEFUSU9OYCBpcyBhIGJvb2xlYW4sIGdvdCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucywgYW5kIGhvdyBpdCBpcyBhY3R1YWxseSBlbXBsb3llZC4gU28sIG5leHQsIG15IGZvY3VzIGltbWVkaWF0ZWx5IHNoaWZ0cyB0byB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogKndobyogb3IgKndoYXQqIGlzIG1ha2luZyB0aGlzIHNlbGVjdGlvbj8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGF0IHRoZSBhbnN3ZXIgd2lsbCBsaWtlbHkgcmV2ZWFsIHNvbWUga2V5IGFyY2hpdGVjdHVyYWwgZGVjaXNpb25zIGFyb3VuZCBzZWN1cml0eSwgcGVyZm9ybWFuY2UsIG9yIHJlc291cmNlIG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBjb25maWd1cmF0aW9ucywgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zLCBhbGwgdGhlIGVudHJ5IHBvaW50cyB0aGF0IHRvdWNoIHRoaXMgc2V0dGluZy4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgbG9naWMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBNRU1PUllfSVNPTEFUSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NTIzPW1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTI0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xubW0vS2NvbmZpZzo1MjU6XHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxubW0vS2NvbmZpZy01MjYtXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4tLVxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcbi0tXG5tbS9LY29uZmlnLTEwNzAtXHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnOjEwNzE6XHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxubW0vS2NvbmZpZy0xMDcyLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzQwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBNZW1vcnkgSXNvbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYm90aCBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgQ01BYCBhcmUgZGlyZWN0bHkgc2VsZWN0aW5nIGBNRU1PUllfSVNPTEFUSU9OYC4gSW50ZXJlc3RpbmcsIGJlY2F1c2UgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGV5JiMzOTtyZSBib3RoIHJlbGF0ZWQgdG8gc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgdGFza3MuIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIGNsZWFyOiBlbmFibGluZyBlaXRoZXIgb2YgdGhvc2UsIHdoaWNoIEkmIzM5O2QgbGlrZWx5IGRvIGluIG1hbnkgb2YgbXkgY29uZmlndXJhdGlvbnMsIGF1dG9tYXRpY2FsbHkgc2V0cyB1cCB0aGUgdW5kZXJseWluZyBtZW1vcnkgaXNvbGF0aW9uIGZyYW1ld29yay4gR29vZC4KClRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLCBhbmQgdGhhdCBjb2RlIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gIGlzIHR1cm5lZCBvbiwgc28gdGhhdCBjb25maXJtcyBteSBpbml0aWFsIHRob3VnaHQuIEVuYWJsaW5nIGBNRU1PUllfSE9UUExVR2Agb3IgYENNQWAgdG8gbWUsIGlzIHRoZSByaWdodCBjYWxsIGdpdmVuIHRoZSBsaWtlbHkgZGVwZW5kZW5jaWVzLgoKTm93LCBsZXQgbWUgY2hlY2sgc29tZXRoaW5nIHNwZWNpZmljIHJlZ2FyZGluZyB0aGUgaXNvbGF0aW9uIHJvdXRpbmVzLiBJIHdhbnQgdG8gc2VlIGlmIGBhbGxvY19jb250aWdfcmFuZ2VgIGlzIGV4cG9ydGVkLCBiZWNhdXNlIEkgaGF2ZSBhIHVzZSBjYXNlIGluIG1pbmQgd2hlcmUgdGhhdCB3b3VsZCBiZSB1c2VmdWwuICpZZXMhKiBFeGNlbGxlbnQsIHRoYXQgd2lsbCBiZSB1c2FibGUuIE9rYXksIGFuZCB3aGF0IGFib3V0IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgPyBMZXQmIzM5O3MgY2hlY2sgdGhhdCBvbmUgYXMgd2VsbC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBNZW1vcnkgQWxsb2NhdGlvbiBQcm9jZWR1cmVzKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBtYW5hZ2VkLiBJIHNlZSBhIGRpc2NyZXBhbmN5LiBUaGUgZGF0YSBJIG5lZWQgaXNuJiMzOTt0IGJlaW5nICYjMzQ7ZXhwb3J0ZWQsJiMzNDsgbWVhbmluZyBpdCYjMzk7cyBub3QgYmVpbmcgZXhwbGljaXRseSBtYWRlIGF2YWlsYWJsZSBvciBhY2Nlc3NpYmxlIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBjb250ZXh0LiBIb3dldmVyLCB0aGUgYGFsbG9jX2NvbnRpZ19yYW5nZWAgZnVuY3Rpb24gaXMsIHdoaWNoIGlzIGEga2V5IHByaW1pdGl2ZSBmb3IgYWxsb2NhdGluZyBjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeS4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBpc3N1ZSBvciBvdmVyc2lnaHQgaW4gaG93IHRoZXNlIHBhZ2VzIGFyZSBiZWluZyBoYW5kbGVkIGRvd25zdHJlYW0uCgpUbyB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGFuZCB0byBkaWFnbm9zZSB0aGUgcHJvYmxlbSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBgb2ZmbGluZV9wYWdlc2AgZGF0YSBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBzeXN0ZW0gdHJhY2tzIHBhZ2VzIHRoYXQgYXJlICpub3QqIGN1cnJlbnRseSBpbiB1c2Ugb3IgYXJlIGRlbGliZXJhdGVseSB0YWtlbiBvdXQgb2YgY2lyY3VsYXRpb24uIFBlcmhhcHMgdGhlcmUmIzM5O3MgYW4gaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHBhZ2VzIGluZGljYXRlZCBieSBgb2ZmbGluZV9wYWdlc2AgYW5kIGhvdyBgYWxsb2NfY29udGlnX3JhbmdlYCBpcyBiZWluZyB1c2VkLCBvciBub3QgdXNlZCwgZ2l2ZW4gdGhlICYjMzQ7bm90IGV4cG9ydGVkJiMzNDsgZGF0YS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIGNoZWNrIHdoYXQgdGhlIHN0YXRlIG9mIHRoZXNlIG9mZmxpbmUgcGFnZXMgaXMsIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbiwgYW5kIHdoeSBteSB0YXJnZXRlZCBkYXRhIGlzbiYjMzk7dCBiZWluZyBleHBvcnRlZC4gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbj8gQSBtaXNzaW5nIGZsYWc/IEFuIHVuaW50ZW5kZWQgaW50ZXJhY3Rpb24/IFRoaXMgaXMgdGhlIGNvcmUgb2Ygd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGxvb2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qb2ZmbGluZV9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDYwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVW5leHBvcnRlZCBTeW1ib2wqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgdGhlIHN5bWJvbCBpc24mIzM5O3QgZXhwb3J0ZWQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZvY3VzIG9uIHRoZSBzeW1ib2xzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIHRoZSBwYWdlIHJhbmdlIG1hbmFnZW1lbnQsIHNvIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2VgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLgoKV2FpdCBhIG1pbnV0ZSwgaXNuJiMzOTt0IGBhbGxvY19jb250aWdfcmFuZ2VgIGEgbWFjcm8/IEkgc2VlbSB0byByZW1lbWJlciBzZWVpbmcgdGhhdCBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L2dmcC5oYC4gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiB5ZXAsIGhlcmUgaXQgaXM6CgpgYGBjCiNkZWZpbmUgYWxsb2NfY29udGlnX3JhbmdlKC4uLikgXAoJYWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpCmBgYAoKQWgsIHRoYXQmIzM5O3MgcmlnaHQuIFNvLCB0aGUgKmFjdHVhbCogZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGlzIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYC4gVGhhdCBtYWtlcyBtb3JlIHNlbnNlLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2dmcC5oPTQ0OD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxuaW5jbHVkZS9saW51eC9nZnAuaC00NTItXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1MzppbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVx0XHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xuaW5jbHVkZS9saW51eC9nZnAuaC00NTUtI2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVx0XFxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDU2Olx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzI0Nj1FWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzI2NC0gKi9cbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vcGFnZV9hbGxvYy5jLTcyNjYtXHRcdFx0ICAgICAgYWNyX2ZsYWdzX3QgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cbm1tL3BhZ2VfYWxsb2MuYzo3Mjc5OkVYUE9SVF9TWU1CT0woYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZik7XG5tbS9wYWdlX2FsbG9jLmMtNzI4MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NDEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBGb2N1czogQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgSG90cGx1Z2dpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBCYXNlZCBvbiB0aGUgdGFzayBhdCBoYW5kLCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGFuZCBgb2ZmbGluZV9wYWdlc2AuIFRoZXJlJiMzOTtzIGFsc28gYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCwgd2hpY2ggaXMgYSByZWxhdGVkIHZhcmlhbnQgSSBzaG91bGQga2VlcCBhbiBleWUgb24uIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpcyBzdGF0aWM7IHllcywgaXQmIzM5O3Mgc2NvcGVkIHRoYXQgd2F5LCB3aGljaCBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBjYWxsIGNvbnRleHQuIFNvLCB0byBzb2xpZGlmeSBpdCwgbXkga2V5IHRhcmdldHMgYXJlOgoKKiAgIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgCiogICBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAKKiAgIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAKKiAgIGBvZmZsaW5lX3BhZ2VzYAoKR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBtb3N0IHJlbGV2YW50IGFuZCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFyZSBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgQ01BYC4gQSBxdWljayByZXZpZXcgb2YgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE1FTU9SWV9IT1RQTFVHYCBpcyBpbiBvcmRlcjsgaXQgY2FuIHNoaWZ0IG15IHRoaW5raW5nIGFuZCB1bmNvdmVyIHVuZGVybHlpbmcgZmFjdG9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9IT1RQTFVHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTUxOT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcbi0tXG5tbS9LY29uZmlnLTUyMi0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTIzOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTI0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM4NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgaW50ZXJuYWxzOgoKKipDb25kaXRpb25hbCBEZXBlbmRlbmNpZXMgYW5kIERlZmF1bHQgQ29uZmlndXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGBNRU1PUllfSE9UUExVR2AgY29uZmlndXJhdGlvbiBvcHRpb24uIEl0JiMzOTtzIHByZXR0eSBmdW5kYW1lbnRhbCBmb3IgZHluYW1pY2FsbHkgYWRkaW5nIG9yIHJlbW92aW5nIG1lbW9yeSwgYSBjcml0aWNhbCBmZWF0dXJlIGZvciBtYW55IHNlcnZlciBhbmQgdmlydHVhbGl6YXRpb24gc2V0dXBzLiBJIGtub3cgaXQgaW5oZXJlbnRseSByZWxpZXMgb24gYFNQQVJTRU1FTV9WTUVNTUFQYCBhbmQgYEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHYC4gTWFrZXMgc2Vuc2U7IGhvdHBsdWdnaW5nIGlzIGNvbXBsZXgsIGFuZCB0aG9zZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb25zIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZS4KClRoZSBrZXkgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgaG93IHViaXF1aXRvdXMgaXMgYFNQQVJTRU1FTV9WTUVNTUFQYD8gSXMgaXQgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1vc3QgYXJjaGl0ZWN0dXJlcyBvciBrZXJuZWxzPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBJdCYjMzk7cyBhIGNyaXRpY2FsIHByZXJlcXVpc2l0ZSwgYW5kIGtub3dpbmcgd2hldGhlciBJIG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQgb3Igd2hldGhlciBpdCYjMzk7cyBoYW5kbGVkICYjMzQ7b3V0LW9mLXRoZS1ib3gmIzM0OyBjaGFuZ2VzIGhvdyBJIGFwcHJvYWNoIHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgdGhlIHR5cGljYWwgYnVpbGQgY29uZmlndXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVmYXVsdHMgaGVscHMgbWUgYW50aWNpcGF0ZSBwb3RlbnRpYWwgaXNzdWVzIGFuZCBzdHJlYW1saW5lIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MuIFRoYXQmIzM5O3MgYSBwb2ludCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLCBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTQ1MT1jb25maWcgU1BBUlNFTUVNX0VYVFJFTUVcbi0tXG5tbS9LY29uZmlnLTQ1NC1cbm1tL0tjb25maWc6NDU1OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVcbm1tL0tjb25maWctNDU2LVx0Ym9vbFxubW0vS2NvbmZpZy00NTctXG5tbS9LY29uZmlnOjQ1ODpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctNDU5LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNDY1LVxubW0vS2NvbmZpZzo0NjY6Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQX1BSRUlOSVRcbm1tL0tjb25maWctNDY3LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIGBTUEFSU0VNRU1fVk1FTU1BUGAgaXMgZGVmaW5pdGl2ZWx5IGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCBubyBzdXJwcmlzZXMgdGhlcmUuIE15IG1pbmQsIGhvd2V2ZXIsIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBpbXBsaWNhdGlvbnMgZm9yIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRpb24gKENNQSkuIEl0JiMzOTtzIGEgbmF0dXJhbCBwcm9ncmVzc2lvbiBvZiB0aG91Z2h0OyBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IHRoZXNlIHR3byBpbnRlcmFjdCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgbWVtb3J5IGxheW91dCBpbXBsaWNhdGlvbnMuIElzIHRoZXJlIHNvbWV0aGluZyBzcGVjaWFsIEkgc2hvdWxkIGtlZXAgaW4gbWluZCB3aXRoIHRoaXMgY29tYmluYXRpb24/IFRpbWUgdG8gZGlnIGludG8gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28gYW5kIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ01BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEwNjQ9Y29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBXG4tLVxubW0vS2NvbmZpZy0xMDY2LVxubW0vS2NvbmZpZzoxMDY3OmNvbmZpZyBDTUFcbm1tL0tjb25maWctMTA2OC1cdGJvb2wgXCYjMzQ7Q29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDgxLVxubW0vS2NvbmZpZzoxMDgyOmNvbmZpZyBDTUFfREVCVUdGU1xubW0vS2NvbmZpZy0xMDgzLVx0Ym9vbCBcJiMzNDtDTUEgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwODctXG5tbS9LY29uZmlnOjEwODg6Y29uZmlnIENNQV9TWVNGU1xubW0vS2NvbmZpZy0xMDg5LVx0Ym9vbCBcJiMzNDtDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwOTQtXG5tbS9LY29uZmlnOjEwOTU6Y29uZmlnIENNQV9BUkVBU1xubW0vS2NvbmZpZy0xMDk2LVx0aW50IFwmIzM0O01heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI4NAoJCQkJCQkJb3V0cHV0OiAxODcKCQkJCQkJCXRob3VnaHRzOiA1MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCB0b3VjaGVzIHNvbWUgY3J1Y2lhbCBhcmVhcy4gYENNQWAgZGVwZW5kcyBvbiBgTU1VYCwgc28gZW5hYmxpbmcgYm90aCBgQ01BYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBsb29rcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBqdXN0IHRvIGJlIHN1cmUuLi4gQWgsIGBNRU1PUllfSVNPTEFUSU9OYCBpcyBzZWxlY3RlZCBieSBib3RoIGBNRU1PUllfSE9UUExVR2AgYW5kIGBDTUFgIOKAkyBzbyB0aG9zZSB0d28gYXJlIGRlZmluaXRlbHkgc3VmZmljaWVudCBmb3IgbXkgYW5hbHlzaXMuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlIGl0c2VsZi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbW9kaWZ5aW5nIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHdpdGhpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AuIFRoZSBrZXkgY2hhbmdlIGlzIHVzaW5nIGBidWRkeV9vcmRlcl91bnNhZmVgIGFuZCB2YWxpZGF0aW5nIGl0cyBvdXRwdXQgYWdhaW5zdCBgTUFYX1BBR0VfT1JERVJgLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBndWFyZHMgYWdhaW5zdCBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgcG90ZW50aWFsIFBGTiBpbmNyZW1lbnQgZXJyb3JzLCB3aGljaCBjYW4gYXJpc2UgZnJvbSByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIHRoZSBvcmRlciBvZiBhIGJ1ZGR5IHBhZ2UuIFRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIGBidWRkeV9vcmRlcmAgY291bGQgaGF2ZSByZXR1cm5lZCBnYXJiYWdlIHZhbHVlcyBsZWFkaW5nIHRvIHRob3NlIGVycm9ycywgYXMgdGhlIGNvZGUgaGFkIGEgcmFjZSBjb25kaXRpb24gaXNzdWUuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUsIGluIGZhY3QuIEl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhc3NvY2lhdGVkIHdpdGggcGFnZSBpc29sYXRpb24uIEl0JiMzOTtzIHVzZWQgYnkgYm90aCBgQ01BYCBhbmQgbWVtb3J5IGhvdHBsdWcsIGJvdGgga2V5IGFyZWFzLiBUaGlzIG1ha2VzIGl0IHF1aXRlIGxpa2VseSB0aGF0IHRoZXJlIGlzIGEgZ29vZCByZWFzb24gdG8gaW52ZXN0aWdhdGUgdGhpcyBjaGFuZ2UuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgY291bGQgZGVmaW5pdGVseSBiZW5lZml0IGZyb20gZnV6emluZy4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiBzeW1ib2xzIGxpa2UgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCwgYW5kIGBvZmZsaW5lX3BhZ2VzYCBmb3IgbXkgaW52ZXN0aWdhdGlvbi4gU28sIGxldCBtZSBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O2FsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgdmFsaWRhdGUgdGhlIG9yZGVyIGFnYWluc3QgYE1BWF9QQUdFX09SREVSYC4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgaW5jb3JyZWN0IFBGTiBpbmNyZW1lbnRzIGNhdXNlZCBieSByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIHRoZSBvcmRlciBvZiBhIGJ1ZGR5IHBhZ2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHJlbGF0ZWQgdG8gcGFnZSBpc29sYXRpb24sIHdoaWNoIGlzIHVzZWQgYnkgQ01BIGFuZCBtZW1vcnkgaG90cGx1Zy4gSXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2UmIzM0OywKICAgICYjMzQ7YWxsb2NfY29udGlnX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDthbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZiYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIHZhbGlkYXRlIHRoZSBvcmRlciBhZ2FpbnN0IGBNQVhfUEFHRV9PUkRFUmAuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGluY29ycmVjdCBQRk4gaW5jcmVtZW50cyBjYXVzZWQgYnkgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyB0aGUgb3JkZXIgb2YgYSBidWRkeSBwYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IENNQSBhbmQgbWVtb3J5IGhvdHBsdWcuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTQ6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AgdG8gdXNlIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgaW5zdGVhZCBvZiBgYnVkZHlfb3JkZXIoKWAgYW5kIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBvcmRlci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIGEgY29uY3VycmVudGx5IG1vZGlmaWVkIG9yIGludmFsaWQgcGFnZSBvcmRlciBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgc2hpZnQgb3IgaW5jb3JyZWN0IFBGTiBjYWxjdWxhdGlvbi4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBvdXQtb2YtYm91bmRzL2ludmFsaWQgdmFsdWVzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOLCBVQlNBTiwgYW5kIGtlcm5lbCB3YXJuaW5ncyAobGlrZSBgVk1fV0FSTl9PTl9PTkNFYCkgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdW5kZWZpbmVkIGJlaGF2aW9yIHJlc3VsdGluZyBmcm9tIGludmFsaWQgcGFnZSBvcmRlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTA2NWYyZGZhY2JmNjdiNGI3MTcwNTcxM2Q2YmY0Nzc5YjliOTI4MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDE0OjA5OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pc29sYXRpb24uYyBiL21tL3BhZ2VfaXNvbGF0aW9uLmMKaW5kZXggMzJjZThhN2Q5ZGYzNS4uOGFhMDk2ZjE3NTRkNSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lzb2xhdGlvbi5jCkBAIC0zODcsMTMgJiM0MzszODcsMTYgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sCiAJCX0KIAogCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQlpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgb3JkZXI7CiAKLQkJCS8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi8KLQkJCVZNX1dBUk5fT05fT05DRShwZm4gJiM0MzsgKDEgJmx0OyZsdDsgb3JkZXIpICZndDsgYm91bmRhcnlfcGZuKTsKJiM0MzsJCQlvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTsKJiM0MzsJCQlpZiAobGlrZWx5KG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKSkgewomIzQzOwkJCQkvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovCiYjNDM7CQkJCVZNX1dBUk5fT05fT05DRShwZm4gJiM0MzsgKDEgJmx0OyZsdDsgb3JkZXIpICZndDsgYm91bmRhcnlfcGZuKTsKIAotCQkJcGZuICYjNDM7PSAxVUwgJmx0OyZsdDsgb3JkZXI7Ci0JCQljb250aW51ZTsKJiM0MzsJCQkJcGZuICYjNDM7PSAxVUwgJmx0OyZsdDsgb3JkZXI7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJfQogCiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3CgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDQzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgSXNvbGF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2Agd2l0aGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgc3dpdGNoaW5nIGZyb20gYGJ1ZGR5X29yZGVyKHBhZ2UpYCB0byBgYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpYCBhbmQgdGhyb3dpbmcgaW4gYSBjaGVjayB0byBlbnN1cmUgdGhlIGBvcmRlcmAgaXNuJiMzOTt0IHJpZGljdWxvdXMg4oCTIG1ha2luZyBzdXJlIGl0JiMzOTtzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTUFYX1BBR0VfT1JERVJgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBpcyB0aGlzIEtNU0FOLXJlbGF0ZWQ/IElzIHRoZXJlIGEgcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUsIG9yIHdyaXRpbmcgaXQgdG8gdXNlciBzcGFjZT8KCkFmdGVyIGEgY2xvc2VyIGxvb2ssIHRoZSBmb2N1cyBpcyByZWFsbHkgb24gaGFuZGxpbmcgcG90ZW50aWFsbHkgaW52YWxpZCBvciBjb25jdXJyZW50bHkgbW9kaWZpZWQgcGFnZSBvcmRlcnMuIGBidWRkeV9vcmRlcl91bnNhZmVgIGRvZXMgcmVhZCB0aGUgcGFnZSBvcmRlciAqd2l0aG91dCogYSBsb2NrLCB3aGljaCBtZWFucyBpdCAqY291bGQqIHJlYWQgZ2FyYmFnZSBvciBnZXQgYSB2YWx1ZSB0aGF0JiMzOTtzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcgbW9kaWZpZWQuIFRoZSBjcnVjaWFsIGRpc3RpbmN0aW9uIGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIEtNU0FOIHNlbnNlIOKAkyBLTVNBTiBkZXRlY3RzIGFsbG9jYXRpb25zIHRoYXQgYXJlIG5ldmVyIGluaXRpYWxpemVkLiBUaGlzIGlzIGFib3V0IHBvdGVudGlhbGx5IHJlYWRpbmcgYW4gb3V0LW9mLWJvdW5kcyBvciBpbnZhbGlkIHZhbHVlIHRoYXQgbWlnaHQgYmUgc2V0IHByZXZpb3VzbHkgYnkgYSBjb25jdXJyZW50IG9wZXJhdGlvbi4KCk9rYXksIGxldCYjMzk7cyBuYWlsIHRoaXMgZG93bi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgbWFraW5nIGl0IGludG8gdXNlciBzcGFjZSBhcyBhIHJlc3VsdCBvZiB0aGlzIHBhdGNoLiBBZnRlciBjaGVja2luZyBJIHNlZSBpdOKAmXMganVzdCByZWFkaW5nIGBwYWdlLSZndDtwcml2YXRlYCAob3Igd2hlcmV2ZXIgYG9yZGVyYCBpcyBzdG9yZWQpLCB3aGljaCBjb3VsZCBiZSBjb25jdXJyZW50bHkgbW9kaWZpZWQsIGJ1dCBub3QgdW5pbml0aWFsaXplZCBpbiB0aGUgS01TQU4gc2Vuc2UuIE15IGNvbmNsdXNpb246IHRoaXMgaXMgYWJvdXQgcG90ZW50aWFsICpvdXQtb2YtYm91bmRzKiBpc3N1ZXMgb3IgdW5kZWZpbmVkIGJlaGF2aW9yIGR1ZSB0byBpbmNvcnJlY3Qgb3JkZXIgdmFsdWVzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOLCBVQlNBTiwgYW5kIGBWTV9XQVJOX09OX09OQ0VgIHNob3VsZCBjYXRjaCBhbnkgaXNzdWVzIGhlcmUuIEdpdmVuIHRoYXQsIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpMZXQgbWUgd3JpdGUgaXQgZG93bi4gVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBpc29sYXRpb24gZnVuY3Rpb24gdG8gdXNlIGBidWRkeV9vcmRlcl91bnNhZmVgLCB3aGljaCBpcyBzYWZlIHRvIHJlYWQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBwYWdlIG9yZGVyIGlzIG91dC1vZi1ib3VuZHMgb3IgaXMgYmVpbmcgbW9kaWZpZWQgY29uY3VycmVudGx5LCB3aGljaCBjYW4gdGhlbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgc2hpZnRzIG9yIGluY29ycmVjdCBQRk4gY2FsY3VsYXRpb25zLiBLTVNBTiBpcyBub3QgdGhlIHJpZ2h0IHRvb2wgZm9yIGZpbmRpbmcgZXJyb3JzIGluIHRoaXMgcGF0Y2ggc2luY2UgdGhlIGVycm9ycyBpdCBpcyBtZWFudCB0byB1bmNvdmVyIGFyZSBpbnZhbGlkIHZhbHVlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrYCBpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AgdG8gdXNlIGBidWRkeV9vcmRlcl91bnNhZmUoKWAgaW5zdGVhZCBvZiBgYnVkZHlfb3JkZXIoKWAgYW5kIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIHRoZSBvcmRlci4gVGhpcyBjaGFuZ2UgYWRkcmVzc2VzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIGEgY29uY3VycmVudGx5IG1vZGlmaWVkIG9yIGludmFsaWQgcGFnZSBvcmRlciBjb3VsZCBsZWFkIHRvIGFuIG91dC1vZi1ib3VuZHMgc2hpZnQgb3IgaW5jb3JyZWN0IFBGTiBjYWxjdWxhdGlvbi4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBvdXQtb2YtYm91bmRzL2ludmFsaWQgdmFsdWVzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIEtBU0FOLCBVQlNBTiwgYW5kIGtlcm5lbCB3YXJuaW5ncyAobGlrZSBgVk1fV0FSTl9PTl9PTkNFYCkgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdW5kZWZpbmVkIGJlaGF2aW9yIHJlc3VsdGluZyBmcm9tIGludmFsaWQgcGFnZSBvcmRlcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZSgpYCBpbnN0ZWFkIG9mIGBidWRkeV9vcmRlcigpYCBhbmQgYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIG9yZGVyLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgYSBjb25jdXJyZW50bHkgbW9kaWZpZWQgb3IgaW52YWxpZCBwYWdlIG9yZGVyIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyBzaGlmdCBvciBpbmNvcnJlY3QgUEZOIGNhbGN1bGF0aW9uLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIG91dC1vZi1ib3VuZHMvaW52YWxpZCB2YWx1ZXMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4sIFVCU0FOLCBhbmQga2VybmVsIHdhcm5pbmdzIChsaWtlIGBWTV9XQVJOX09OX09OQ0VgKSBhcmUgc3VmZmljaWVudCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IgcmVzdWx0aW5nIGZyb20gaW52YWxpZCBwYWdlIG9yZGVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDowOTo1NC4xMzEzOTU5MzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjYzODk2NzAwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ01BXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiLFxuICAgIFwiYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZlwiLFxuICAgIFwiYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZSgpYCBpbnN0ZWFkIG9mIGBidWRkeV9vcmRlcigpYCBhbmQgYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIG9yZGVyLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgYSBjb25jdXJyZW50bHkgbW9kaWZpZWQgb3IgaW52YWxpZCBwYWdlIG9yZGVyIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyBzaGlmdCBvciBpbmNvcnJlY3QgUEZOIGNhbGN1bGF0aW9uLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIG91dC1vZi1ib3VuZHMvaW52YWxpZCB2YWx1ZXMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4sIFVCU0FOLCBhbmQga2VybmVsIHdhcm5pbmdzIChsaWtlIGBWTV9XQVJOX09OX09OQ0VgKSBhcmUgc3VmZmljaWVudCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IgcmVzdWx0aW5nIGZyb20gaW52YWxpZCBwYWdlIG9yZGVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIHZhbGlkYXRlIHRoZSBvcmRlciBhZ2FpbnN0IGBNQVhfUEFHRV9PUkRFUmAuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGluY29ycmVjdCBQRk4gaW5jcmVtZW50cyBjYXVzZWQgYnkgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyB0aGUgb3JkZXIgb2YgYSBidWRkeSBwYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IENNQSBhbmQgbWVtb3J5IGhvdHBsdWcuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MDk6NTQuMTMxNDAwOTIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg1OTIxMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTA2NWYyZGZhY2JmNjdiNGI3MTcwNTcxM2Q2YmY0Nzc5YjliOTI4MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNDowOTo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lzb2xhdGlvbi5jIGIvbW0vcGFnZV9pc29sYXRpb24uY1xcbmluZGV4IDMyY2U4YTdkOWRmMzUuLjhhYTA5NmYxNzU0ZDUgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xcbisrKyBiL21tL3BhZ2VfaXNvbGF0aW9uLmNcXG5AQCAtMzg3LDEzICszODcsMTYgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcXG4tXFx0XFx0XFx0aW50IG9yZGVyID0gYnVkZHlfb3JkZXIocGFnZSk7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlcjtcXG4gXFxuLVxcdFxcdFxcdC8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi9cXG4tXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiArICgxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSBcXHUwMDNlIGJvdW5kYXJ5X3Bmbik7XFxuK1xcdFxcdFxcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbitcXHRcXHRcXHRpZiAobGlrZWx5KG9yZGVyIFxcdTAwM2M9IE1BWF9QQUdFX09SREVSKSkge1xcbitcXHRcXHRcXHRcXHQvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovXFxuK1xcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcXHUwMDNjXFx1MDAzYyBvcmRlcikgXFx1MDAzZSBib3VuZGFyeV9wZm4pO1xcbiBcXG4tXFx0XFx0XFx0cGZuICs9IDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdHBmbiArPSAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjA5OjU1LjUxNzk3MTk5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQxNTMzMjA0OTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwib2ZmbGluZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIHZhbGlkYXRlIHRoZSBvcmRlciBhZ2FpbnN0IGBNQVhfUEFHRV9PUkRFUmAuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGluY29ycmVjdCBQRk4gaW5jcmVtZW50cyBjYXVzZWQgYnkgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyB0aGUgb3JkZXIgb2YgYSBidWRkeSBwYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IENNQSBhbmQgbWVtb3J5IGhvdHBsdWcuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTA2NWYyZGZhY2JmNjdiNGI3MTcwNTcxM2Q2YmY0Nzc5YjliOTI4MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE0OjA5OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pc29sYXRpb24uYyBiL21tL3BhZ2VfaXNvbGF0aW9uLmNcbmluZGV4IDMyY2U4YTdkOWRmMzUuLjhhYTA5NmYxNzU0ZDUgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2lzb2xhdGlvbi5jXG4rKysgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5AQCAtMzg3LDEzICszODcsMTYgQEAgc3RhdGljIGludCBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2sodW5zaWduZWQgbG9uZyBib3VuZGFyeV9wZm4sXG4gXHRcdH1cbiBcbiBcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdGludCBvcmRlciA9IGJ1ZGR5X29yZGVyKHBhZ2UpO1xuK1x0XHRcdHVuc2lnbmVkIGludCBvcmRlcjtcbiBcbi1cdFx0XHQvKiBwYWdlYmxvY2tfaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKCkgaGFuZGxlZCB0aGlzICovXG4tXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiArICgxIFx1MDAzY1x1MDAzYyBvcmRlcikgXHUwMDNlIGJvdW5kYXJ5X3Bmbik7XG4rXHRcdFx0b3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4rXHRcdFx0aWYgKGxpa2VseShvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKSkge1xuK1x0XHRcdFx0LyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqL1xuK1x0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKHBmbiArICgxIFx1MDAzY1x1MDAzYyBvcmRlcikgXHUwMDNlIGJvdW5kYXJ5X3Bmbik7XG4gXG4tXHRcdFx0cGZuICs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4tXHRcdFx0Y29udGludWU7XG4rXHRcdFx0XHRwZm4gKz0gMVVMIFx1MDAzY1x1MDAzYyBvcmRlcjtcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFxuIFx0XHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MDk6NTUuNTE3OTczMzk5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNTEzNjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgbW9ua2V5aW5nIHdpdGggdGhlIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBzd2FwcGluZyBvdXQgYGJ1ZGR5X29yZGVyKHBhZ2UpYCBmb3IgYGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKWAsIGFuZCB0aGVuIHNsYXBwaW5nIG9uIGEgYGxpa2VseWAgY2hlY2sgdG8gc2VlIGlmIHRoZSBvcmRlciBpcyB3aXRoaW4gYm91bmRzIChgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUmApLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBmb2N1c2luZyBvbiB0aGUgcGFnZSBpc29sYXRpb24gbWVjaGFuaXNtcy4gVGhpcyBpcyBwcmV0dHkgc2lnbmlmaWNhbnQgYmVjYXVzZSBwYWdlIGlzb2xhdGlvbiBpcyBmdW5kYW1lbnRhbCB0byB0aGluZ3MgbGlrZSBtZW1vcnkgaG90cGx1ZywgQ01BLCBhbmQgY29tcGFjdGlvbiDigJMgYWxsIGNyaXRpY2FsIGFzcGVjdHMgb2Ygc3lzdGVtIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuXG5cbk15IG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgZXhhY3RseSBob3cgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaXMgdXNlZCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB3aXRoaW4gaXRzIGNhbGwgY2hhaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBtb3RpdmF0aW5nIHRoaXMgbW92ZSB0byBgYnVkZHlfb3JkZXJfdW5zYWZlYCBhbmQgd2h5IHRoZSBhZGRlZCBjaGVjayBpcyBuZWNlc3NhcnksIG9yIGlmIGl0J3MgdGhlcmUgYXMgYSBzYWZlZ3VhcmQuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBzb3VuZCBhbmQgd29uJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjA5OjU5LjcyMzExMjk2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQxODY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV9pc29sYXRpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2lzb2xhdGlvbi5jPTI4Mz1fX2ZpcnN0X3ZhbGlkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTI5OC0vKipcXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjI5OTogKiBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soKSAtLSB0cmllcyB0byBpc29sYXRlIGEgcGFnZWJsb2NrIHRoYXQgbWlnaHQgYmVcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMwMC0gKiB3aXRoaW4gYSBmcmVlIG9yIGluLXVzZSBwYWdlLlxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy0zMDQtICogQHNraXBfaXNvbGF0aW9uOlxcdHRoZSBmbGFnIHRvIHNraXAgdGhlIHBhZ2VibG9jayBpc29sYXRpb24gaW4gc2Vjb25kXFxubW0vcGFnZV9pc29sYXRpb24uYzozMDU6ICpcXHRcXHRcXHRpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2soKVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtMzA2LSAqXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMxOS0gKi9cXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjMyMDpzdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTMyMS1cXHRcXHRcXHRlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlLCBib29sIGlzb2xhdGVfYmVmb3JlLFxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYz00ODU9aW50IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLFxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy00OTYtXFx0LyogaXNvbGF0ZSBbaXNvbGF0ZV9zdGFydCwgaXNvbGF0ZV9zdGFydCArIHBhZ2VibG9ja19ucl9wYWdlcykgcGFnZWJsb2NrICovXFxubW0vcGFnZV9pc29sYXRpb24uYzo0OTc6XFx0cmV0ID0gaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKGlzb2xhdGVfc3RhcnQsIG1vZGUsIGZhbHNlLFxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDk4LVxcdFxcdFxcdHNraXBfaXNvbGF0aW9uKTtcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNTA1LVxcdC8qIGlzb2xhdGUgW2lzb2xhdGVfZW5kIC0gcGFnZWJsb2NrX25yX3BhZ2VzLCBpc29sYXRlX2VuZCkgcGFnZWJsb2NrICovXFxubW0vcGFnZV9pc29sYXRpb24uYzo1MDY6XFx0cmV0ID0gaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKGlzb2xhdGVfZW5kLCBtb2RlLCB0cnVlLCBza2lwX2lzb2xhdGlvbik7XFxubW0vcGFnZV9pc29sYXRpb24uYy01MDctXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDowOTo1OS43Njc1MzYyMDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQxMTQ3NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgRnVuY3Rpb24ncyBDYWxsIEhpZXJhcmNoeSoqXG5cbk9rYXksIHNvIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIGNhbGxlZCBieSBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYW5kIHRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIHBhZ2UgYmxvY2sgaXNvbGF0aW9uIHdvcmtzLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAgdG8gdW5kZXJzdGFuZCBpdHMgKm93biogY2FsbGluZyBmdW5jdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBicm9hZGVyIGNvbnRleHQgYW5kIHJldmVhbCB0aGUgdHJpZ2dlcnMgdGhhdCBzZXQgdGhpcyBpc29sYXRpb24gcHJvY2VzcyBpbiBtb3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBjaGFpbiBpcyBjcnVjaWFsIGJlZm9yZSBJIGRpdmUgZGVlcGVyIGludG8gdGhlIGluZGl2aWR1YWwgZnVuY3Rpb25zLiBJdCdzIGFsbCBhYm91dCBjb250ZXh0LCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gZmxvdyBoZWxwcyBtZSBtYXAgdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTUyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTA6MDMuMDA4Njg2NTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODg2Nzc1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oPTYxPWJvb2wgcGFnZWJsb2NrX3VuaXNvbGF0ZV9hbmRfbW92ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oLTYyLVxcbmluY2x1ZGUvbGludXgvcGFnZS1pc29sYXRpb24uaDo2MzppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXFxuaW5jbHVkZS9saW51eC9wYWdlLWlzb2xhdGlvbi5oLTY0LVxcdFxcdFxcdCAgICAgZW51bSBwYl9pc29sYXRlX21vZGUgbW9kZSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5MDI9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5NjgtXFx0Lyogc2V0IGFib3ZlIHJhbmdlIGFzIGlzb2xhdGVkICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxOTY5OlxcdHJldCA9IHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydF9wZm4sIGVuZF9wZm4sXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTcwLVxcdFxcdFxcdFxcdCAgICAgICBQQl9JU09MQVRFX01PREVfTUVNX09GRkxJTkUpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcxMDg9aW50IGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcxNDQtXFx0ICogaGF2ZSBkaWZmZXJlbnQgc2l6ZXMsIGFuZCBkdWUgdG8gdGhlIHdheSBwYWdlIGFsbG9jYXRvclxcbm1tL3BhZ2VfYWxsb2MuYzo3MTQ1OlxcdCAqIHdvcmssIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIGhhcyBzcGVjaWFsIGhhbmRsaW5ncyBmb3IgdGhpcy5cXG5tbS9wYWdlX2FsbG9jLmMtNzE0Ni1cXHQgKlxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTcxNjEtXFxubW0vcGFnZV9hbGxvYy5jOjcxNjI6XFx0cmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0LCBlbmQsIG1vZGUpO1xcbm1tL3BhZ2VfYWxsb2MuYy03MTYzLVxcdGlmIChyZXQpXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jPTMyMD1zdGF0aWMgaW50IGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9jayh1bnNpZ25lZCBsb25nIGJvdW5kYXJ5X3BmbixcXG4tLVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDQ5LS8qKlxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6NDUwOiAqIHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZSgpIC0gbWFyayBwYWdlIHJhbmdlIE1JR1JBVEVfSVNPTEFURVxcbm1tL3BhZ2VfaXNvbGF0aW9uLmMtNDUxLSAqIEBzdGFydF9wZm46XFx0XFx0VGhlIGZpcnN0IFBGTiBvZiB0aGUgcmFuZ2UgdG8gYmUgaXNvbGF0ZWQuXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTQ4NC0gKi9cXG5tbS9wYWdlX2lzb2xhdGlvbi5jOjQ4NTppbnQgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXFxubW0vcGFnZV9pc29sYXRpb24uYy00ODYtXFx0XFx0XFx0ICAgICBlbnVtIHBiX2lzb2xhdGVfbW9kZSBtb2RlKVxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYy01MjgtLyoqXFxubW0vcGFnZV9pc29sYXRpb24uYzo1Mjk6ICogdW5kb19pc29sYXRlX3BhZ2VfcmFuZ2UgLSB1bmRvIGVmZmVjdHMgb2Ygc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKClcXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTUzMC0gKiBAc3RhcnRfcGZuOlxcdFxcdFRoZSBmaXJzdCBQRk4gb2YgdGhlIGlzb2xhdGVkIHJhbmdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjEwOjA0LjY5NzU1OTMyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3ODEyNTQyODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipUcmFjaW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBGbG93KipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzLiBJIHNlZSB0aGF0IGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgIGlzIGJlaW5nIGNhbGxlZCBieSBgb2ZmbGluZV9wYWdlc2AgYW5kIGBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZmAuIFRoYXQncyBhIGtleSBzdGFydGluZyBwb2ludC4gIFRoZW4gSSBvYnNlcnZlIHRoYXQgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYC4gIFNpbmNlIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGZsb3csIGFuZCB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgYWxsb2NhdGlvbiBzY2hlbWUgaXMgc2l0dWF0ZWQgaW4gdGhlIHdpZGVyIHBpY3R1cmUsIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNhbGwgc2l0ZXMgb2YgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbiBgYWxsb2NfY29udGlnX3JhbmdlYC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NDksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxMTo0Mi41MTAxMDUyNDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNDc4MjU0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19jb250aWdfcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3Q9MzkwPXNjZW5hcmlvczogbWVtb3J5IG9mZmxpbmUsIG1lbW9yeSBmYWlsdXJlLCBsb25ndGVybSBwaW5uaW5nLCBzeXNjYWxscyhtYmluZCxcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdDozOTE6bWlncmF0ZV9wYWdlcyBhbmQgbW92ZV9wYWdlcyksIGFsbG9jX2NvbnRpZ19yYW5nZSgpIGFuZCBhbGxvY19jb250aWdfcGFnZXMoKS5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdC0zOTItTm93IG9ubHkgbWVtb3J5IG9mZmxpbmUsIG1lbW9yeSBmYWlsdXJlIGFuZCBzeXNjYWxscyBhbGxvdyBmYWxsYmFja2luZyB0byBhbGxvY2F0ZVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTExODc9c3RhdGljIHZvaWQgdmlydGlvX21lbV9mYWtlX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjA1LVxcdFxcdCAqIG9ubGluaW5nIHRoZSBtZW1vcnkgYmxvY2suIE90aGVyd2lzZSwgaXQgd2FzIGFsbG9jYXRlZFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxMjA2OlxcdFxcdCAqIHVzaW5nIGFsbG9jX2NvbnRpZ19yYW5nZSgpLiBBbGwgcGFnZXMgaW4gYSBzdWJibG9jayBhcmVcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIwNy1cXHRcXHQgKiBhbGlrZS5cXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYz0xMjI0PXN0YXRpYyBpbnQgdmlydGlvX21lbV9mYWtlX29mZmxpbmUoc3RydWN0IHZpcnRpb19tZW0gKnZtLCB1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjMwLVxcdC8qXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jOjEyMzE6XFx0ICogVE9ETzogV2Ugd2FudCBhbiBhbGxvY19jb250aWdfcmFuZ2UoKSBtb2RlIHRoYXQgdHJpZXMgdG8gYWxsb2NhdGVcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMTIzMi1cXHQgKiBoYXJkZXIgKGUuZy4sIGRlYWxpbmcgd2l0aCB0ZW1wb3JhcmlseSBwaW5uZWQgcGFnZXMsIFBDUCksIGVzcGVjaWFsbHlcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjQ1LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoxMjQ2OlxcdFxcdHJjID0gYWxsb2NfY29udGlnX3JhbmdlKHBmbiwgcGZuICsgbnJfcGFnZXMsIEFDUl9GTEFHU19OT05FLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYy0xMjQ3LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jPTI1MzU9c3RhdGljIGludCB2aXJ0aW9fbWVtX2luaXRfaG90cGx1ZyhzdHJ1Y3QgdmlydGlvX21lbSAqdm0pXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW9fbWVtLmMtMjU1Ny1cXHQvKlxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZW0uYzoyNTU4OlxcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIHdvcmtzIHJlbGlhYmx5IHdpdGggcGFnZWJsb2NrXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvX21lbS5jLTI1NTktXFx0ICogZ3JhbnVsYXJpdHkgb24gWk9ORV9OT1JNQUwsIHVzZSBwYWdlYmxvY2tfbnJfcGFnZXMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NtYS5oLTE1LS8qXFxuaW5jbHVkZS9saW51eC9jbWEuaDoxNjogKiAgdGhlIGJ1ZGR5IC0tIGVzcGVjaWFsbHkgcGFnZWJsb2NrIG1lcmdpbmcgYW5kIGFsbG9jX2NvbnRpZ19yYW5nZSgpXFxuaW5jbHVkZS9saW51eC9jbWEuaC0xNy0gKiAtLSBjYW4gZGVhbCB3aXRoIG9ubHkgc29tZSBwYWdlYmxvY2tzIG9mIGEgaGlnaGVyLW9yZGVyIHBhZ2UgYmVpbmdcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg9NDQ4PWludCBhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDUyLVxcbmluY2x1ZGUvbGludXgvZ2ZwLmg6NDUzOmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU0LVxcdFxcdGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTU6I2RlZmluZSBhbGxvY19jb250aWdfcmFuZ2UoLi4uKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1NjpcXHRhbGxvY19ob29rcyhhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9ODczPWVudW0gem9uZV90eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtOTM2LVxcdCAqICAgIG1lbW9yeSBvZmZsaW5pbmcsIGhvd2V2ZXIsIGNhbm5vdCBiZSBtb3ZlZC9hbGxvY2F0ZWQuIFRoZXNlXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo5Mzc6XFx0ICogICAgdGVjaG5pcXVlcyBtaWdodCB1c2UgYWxsb2NfY29udGlnX3JhbmdlKCkgdG8gaGlkZSBwcmV2aW91c2x5XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05MzgtXFx0ICogICAgZXhwb3NlZCBwYWdlcyBmcm9tIHRoZSBidWRkeSBhZ2FpbiAoZS5nLiwgdG8gaW1wbGVtZW50IHNvbWUgc29ydFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05NTAtXFx0ICogSW4gZ2VuZXJhbCwgbm8gdW5tb3ZhYmxlIGFsbG9jYXRpb25zIHRoYXQgZGVncmFkZSBtZW1vcnkgb2ZmbGluaW5nXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo5NTE6XFx0ICogc2hvdWxkIGVuZCB1cCBpbiBaT05FX01PVkFCTEUuIEFsbG9jYXRvcnMgKGxpa2UgYWxsb2NfY29udGlnX3JhbmdlKCkpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC05NTItXFx0ICogaGF2ZSB0byBleHBlY3QgdGhhdCBtaWdyYXRpbmcgcGFnZXMgaW4gWk9ORV9NT1ZBQkxFIGNhbiBmYWlsIChldmVuXFxuLS1cXG5tbS9jbWEuYz0xMDM9Ym9vbCBjbWFfdmFsaWRhdGVfem9uZXMoc3RydWN0IGNtYSAqY21hKVxcbi0tXFxubW0vY21hLmMtMTI0LVxcdFxcdC8qXFxubW0vY21hLmM6MTI1OlxcdFxcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSgpIHJlcXVpcmVzIHRoZSBwZm4gcmFuZ2Ugc3BlY2lmaWVkXFxubW0vY21hLmMtMTI2LVxcdFxcdCAqIHRvIGJlIGluIHRoZSBzYW1lIHpvbmUuIFNpbXBsaWZ5IGJ5IGZvcmNpbmcgdGhlIGVudGlyZVxcbi0tXFxubW0vaHVnZXRsYi5jPTI3Mjc9aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZXRsYi5jLTI3MzYtXFx0ICogRmVuY2Ugb2ZmIGdpZ2FudGljIHBhZ2VzIGFzIHRoZXJlIGlzIGEgY3ljbGljIGRlcGVuZGVuY3kgYmV0d2Vlblxcbm1tL2h1Z2V0bGIuYzoyNzM3OlxcdCAqIGFsbG9jX2NvbnRpZ19yYW5nZSBhbmQgdGhlbS4gUmV0dXJuIC1FTk9NRU0gYXMgdGhpcyBoYXMgdGhlIGVmZmVjdFxcbm1tL2h1Z2V0bGIuYy0yNzM4LVxcdCAqIG9mIGJhaWxpbmcgb3V0IHJpZ2h0IGF3YXkgd2l0aG91dCBmdXJ0aGVyIHJldHJ5aW5nLlxcbi0tXFxubW0vaW50ZXJuYWwuaD0xMDE3PXN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xcbi0tXFxubW0vaW50ZXJuYWwuaC0xMDUzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbm1tL2ludGVybmFsLmg6MTA1NDpcXHRib29sIGFsbG9jX2NvbnRpZztcXHRcXHQvKiBhbGxvY19jb250aWdfcmFuZ2UgYWxsb2NhdGlvbiAqL1xcbm1tL2ludGVybmFsLmgtMTA1NS19O1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTcyNDY9RVhQT1JUX1NZTUJPTChhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZik7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzI0OC0vKipcXG5tbS9wYWdlX2FsbG9jLmM6NzI0OTogKiBhbGxvY19jb250aWdfcmFuZ2UoKSAtLSB0cmllcyB0byBhbGxvY2F0ZSBnaXZlbiByYW5nZSBvZiBwYWdlc1xcbm1tL3BhZ2VfYWxsb2MuYy03MjUwLSAqIEBzdGFydDpcXHRzdGFydCBQRk4gdG8gYWxsb2NhdGVcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MjY0LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL3BhZ2VfYWxsb2MuYy03MjY2LVxcdFxcdFxcdCAgICAgIGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cXG5tbS9wYWdlX2FsbG9jLmM6NzI3OTpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy03MjgwLVxcbi0tXFxubW0vcGFnZV9pc29sYXRpb24uYz0xMzQ9c3RhdGljIHN0cnVjdCBwYWdlICpoYXNfdW5tb3ZhYmxlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sXFxuLS1cXG5tbS9wYWdlX2lzb2xhdGlvbi5jLTE0NC1cXHRcXHQvKlxcbm1tL3BhZ2VfaXNvbGF0aW9uLmM6MTQ1OlxcdFxcdCAqIENNQSBhbGxvY2F0aW9ucyAoYWxsb2NfY29udGlnX3JhbmdlKSByZWFsbHkgbmVlZCB0byBtYXJrXFxubW0vcGFnZV9pc29sYXRpb24uYy0xNDYtXFx0XFx0ICogaXNvbGF0ZSBDTUEgcGFnZWJsb2NrcyBldmVuIHdoZW4gdGhleSBhcmUgbm90IG1vdmFibGUgaW4gZmFjdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxMTo0NC4xMTQ4OTQ0OTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjI1ODM4OTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQgdG91Y2hlcyBzb21lIHByZXR0eSBjcml0aWNhbCBhcmVhczogYGFsbG9jX2NvbnRpZ19yYW5nZWAsIHdoaWNoIGlzIHVzZWQgYnkgQ01BLCB2aXJ0aW9fbWVtLCBhbmQgbWVtb3J5IGhvdHBsdWcuIENNQSBpcyBkZWZpbml0ZWx5IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcg4oCTIHdlIGNhbiBoaXQgaXQgd2l0aCBgbW1hcGAgb24gQ01BIGFyZWFzLCBkbWEtYnVmcywgb3IgZXZlbiBodWdlcGFnZXMuIE1lbW9yeSBob3RwbHVnPyBTeXNmcyBpcyB0aGUgb2J2aW91cyByb3V0ZS5cblxuVGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2UgaXMgaW4gYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AsIGFuZCB0aGF0J3MgY29uY2VybmluZyBiZWNhdXNlIHRoYXQncyBjYWxsZWQgZHVyaW5nIHBhZ2VibG9jayBpc29sYXRpb24uIFRoZXkndmUgc3dhcHBlZCBvdXQgYGJ1ZGR5X29yZGVyYCBmb3IgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGFkZGVkIGEgY2hlY2sgZm9yIHRoZSBvcmRlci4gVGhpcyBtYWtlcyBzZW5zZTsgaXQgc2VlbXMgbGlrZSB0aGV5J3JlIGFkZHJlc3NpbmcgYSBidWcuIEkgY2FuIHNlZSB3aGF0IHRoZXkncmUgc2F5aW5nIGFib3V0IGBidWRkeV9vcmRlcihwYWdlKWAgcG90ZW50aWFsbHkgcmV0dXJuaW5nIGdhcmJhZ2UgaWYgYFBhZ2VCdWRkeWAgYW5kIGFsbG9jYXRpb24gYXJlIHJhY2luZy5cblxuV2FpdCBhIHNlY29uZOKApiBJJ20gY2F0Y2hpbmcgb24gbm93LiBUaGV5J3JlIGNoZWNraW5nIGBQYWdlQnVkZHkocGFnZSlgIHJpZ2h0ICpiZWZvcmUqIGBidWRkeV9vcmRlcihwYWdlKWAuIEJ1dCwgc2luY2UgdGhpcyBpc24ndCB1bmRlciB0aGUgem9uZSBsb2NrLCBhbm90aGVyIHRocmVhZCBjYW4gY2xlYXIgYFBhZ2VCdWRkeWAgYW5kIG92ZXJ3cml0ZSB0aGUgYHBhZ2VfcHJpdmF0ZWAgZmllbGQgdGhhdCBzdG9yZXMgdGhlIG9yZGVyLiBUaGVyZWZvcmUsIGBidWRkeV9vcmRlcmAgY291bGQgcmVhZCBhIGh1Z2UgdmFsdWUsIGxlYWRpbmcgdG8gYW4gb3V0LW9mLWJvdW5kcyBzaGlmdCBvciBzb21lIHJpZGljdWxvdXMgcGFnZSBjb3VudCwgdHJpZ2dlcmluZyB0aGF0IGBWTV9XQVJOX09OX09OQ0VgIG9yIHNraXBwaW5nIHRvbnMgb2YgcGFnZXMuIENsZXZlci4gQnkgdXNpbmcgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIGNoZWNraW5nIHRoZSBvcmRlciBhZ2FpbnN0IGBNQVhfUEFHRV9PUkRFUmAsIHRoZXkncmUgYXZvaWRpbmcgdGhlIHJhY2UgY29uZGl0aW9uIGFuZCB0aGUgcmVzdWx0aW5nIGNoYW9zLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBmb2N1cyBvbiBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19yYW5nZWAsIGFuZCBgb2ZmbGluZV9wYWdlc2AuIElzIGBhbGxvY19jb250aWdfcmFuZ2VgIGV4cG9ydGVkIGFuZCByZWFjaGFibGU/IFllcCwgZ29vZC4gTGV0J3MgZGlnIGludG8gYG9mZmxpbmVfcGFnZXNgLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MDksIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTI6MTAuMzczMjg3MzIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU4MTgwMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mZmxpbmVfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9tbS9tbXUuYz0yMDc1PXN0YXRpYyBib29sIGNhbl91bm1hcF93aXRob3V0X3NwbGl0KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMTA1LSAqIGluYWR2ZXJ0ZW50bHkgcmVtb3ZlZCBhcyBpdCBibG9ja3MgcGZuIHJhbmdlIG9mZmxpbmluZyBwcm9jZXNzIGluXFxuYXJjaC9hcm02NC9tbS9tbXUuYzoyMTA2OiAqIF9fb2ZmbGluZV9wYWdlcygpLiBIZW5jZSB0aGlzIHByZXZlbnRzIGJvdGggb2ZmbGluaW5nIGFzIHdlbGwgYXNcXG5hcmNoL2FybTY0L21tL21tdS5jLTIxMDctICogcmVtb3ZhbCBwcm9jZXNzIGZvciBib290IG1lbW9yeSB3aGljaCBpcyBpbml0aWFsbHkgYWx3YXlzIG9ubGluZS5cXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODA9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjkxLVxcdCAqIFVuYWNjb3VudCBiZWZvcmUgb2ZmbGluaW5nLCBzdWNoIHRoYXQgdW5wb3B1bGF0ZWQgem9uZSBhbmQga3RocmVhZHNcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MjkyOlxcdCAqIGNhbiBwcm9wZXJseSBiZSB0b3JuIGRvd24gaW4gb2ZmbGluZV9wYWdlcygpLlxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yOTMtXFx0ICovXFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzAxLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzozMDI6XFx0cmV0ID0gb2ZmbGluZV9wYWdlcyhzdGFydF9wZm4gKyBucl92bWVtbWFwX3BhZ2VzLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDMtXFx0XFx0XFx0ICAgIG5yX3BhZ2VzIC0gbnJfdm1lbW1hcF9wYWdlcywgbWVtLVxcdTAwM2V6b25lLCBtZW0tXFx1MDAzZWdyb3VwKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzA0LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzA1OlxcdFxcdC8qIG9mZmxpbmVfcGFnZXMoKSBmYWlsZWQuIEFjY291bnQgYmFjay4gKi9cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzA2LVxcdFxcdGlmIChucl92bWVtbWFwX3BhZ2VzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2ND1leHRlcm4gdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyNjU6ZXh0ZXJuIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNjYtXFx0XFx0XFx0IHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg9MjcyPXN0YXRpYyBpbmxpbmUgdm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpIHt9XFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI3My1cXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmg6Mjc0OnN0YXRpYyBpbmxpbmUgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI3NS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTUzOT12b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01ODMtICogc3VyZSB0aGF0IHBhZ2VzIGFyZSBtYXJrZWQgcmVzZXJ2ZWQgYW5kIHpvbmVzIGFyZSBhZGp1c3QgcHJvcGVybHkgYnlcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjU4NDogKiBjYWxsaW5nIG9mZmxpbmVfcGFnZXMoKS5cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU4NS0gKi9cXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg5MD1zdGF0aWMgaW50IGNvdW50X3N5c3RlbV9yYW1fcGFnZXNfY2IodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MDEtICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxOTAyOmludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTkwMy1cXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApXFxuLS1cXG5tbS9tbV9pbml0LmM9MTUzOT12b2lkIF9fcmVmIGZyZWVfYXJlYV9pbml0X2NvcmVfaG90cGx1ZyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbi0tXFxubW0vbW1faW5pdC5jLTE1NzctXFx0ICogY2xlYXIgYWxsIHpvbmVzJyBwcmVzZW50X3BhZ2VzIGFuZCBtYW5hZ2VkX3BhZ2VzIGJlY2F1c2UgdGhleSB3aWxsXFxubW0vbW1faW5pdC5jOjE1Nzg6XFx0ICogYmUgdXBkYXRlZCBpbiBvbmxpbmVfcGFnZXMoKSBhbmQgb2ZmbGluZV9wYWdlcygpLlxcbm1tL21tX2luaXQuYy0xNTc5LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxMjoxMS44MzE0NzY0NjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1MzA4MTA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnk6IE9mZmxpbmUgUGFnZXMgYW5kIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBgb2ZmbGluZV9wYWdlc2AgaXMgY2FsbGVkIGJ5IGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAuIFRoYXQgY29ubmVjdGlvbiBpcyBpbXBvcnRhbnQuIEFuZCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgIGl0c2VsZiBnZXRzIHRyaWdnZXJlZCB2aWEgc3lzZnMgbWVtb3J5IGhvdHBsdWcuLi4gd2hpY2ggd2UgYWxsIGtub3cgY2FuIGJlIGEgc291cmNlIG9mIGZ1enppbmcgYXR0YWNrcy4gVGhpcyBpcyBpbnRlcmVzdGluZy4gV2UndmUgc2VlbiBzb21lIGV4cGxvaXRzIGxldmVyYWdpbmcgdGhhdC4gQW5kLCBvZiBjb3Vyc2UsIENNQSAoQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yKSBpcyBhbHdheXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gU28sIGdpdmVuIHRoaXMgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHRlci4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgYGFsbG9jX2NvbnRpZ19yYW5nZWAgYW5kIGBvZmZsaW5lX3BhZ2VzYC4gVW5kZXJzdGFuZGluZyB0aGVzZSB3aWxsIGNsYXJpZnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBhbmQgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBpbiB0aGUgY29udGV4dCBvZiBvZmZsaW5lIG1lbW9yeSBibG9ja3MsIGVzcGVjaWFsbHkgd2hlbiB0cmlnZ2VyZWQgdmlhIGEgY29udHJvbGxhYmxlIGhvdHBsdWcgZXZlbnQuIFRoaXMgZmVlbHMgbGlrZSBpdCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGFyZWEgb2YgaW50ZXJlc3QgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjEyOjE1LjY4NDU2MTQ5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYxOTQ4NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfSE9UUExVR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTE5PWNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbi0tXFxubW0vS2NvbmZpZy01MjItIyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICdzZWxlY3QgU1BBUlNFTUVNJ1xcbm1tL0tjb25maWc6NTIzOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUyNC1cXHRib29sIFxcXCJNZW1vcnkgaG90cGx1Z1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTI6MTYuMzQ2NTE0ODQyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDIyOTU0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9ibGVtOlxuXG4qKlRoaW5raW5nIFRocm91Z2ggTWVtb3J5IE1hbmFnZW1lbnQgYW5kIE9mZmxpbmUgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gaG93IGBNRU1PUllfSE9UUExVR2AgaW50ZXJhY3RzIHdpdGggYG9mZmxpbmVfcGFnZXNgLiBJdCBzZWVtcyBsaWtlIGBNRU1PUllfSE9UUExVR2AgaXMgYSBwcmVyZXF1aXNpdGUsIHdoaWNoIG1ha2VzIHNlbnNlLiBXZSdyZSB0YWxraW5nIGFib3V0IGR5bmFtaWNhbGx5IHJlbW92aW5nIG1lbW9yeSwgYW5kIG9mZmxpbmUgcGFnZXMgbGlrZWx5IG5lZWQgdGhpcyBjYXBhYmlsaXR5IHRvIGZ1bmN0aW9uLiBCdXQgdGhhdCByYWlzZXMgYW5vdGhlciBxdWVzdGlvbiB0aGF0IGlzIHRvcCBvZiBtaW5kIC0gSSBuZWVkIHRvIGNvbnNpZGVyIGBhbGxvY19jb250aWdfcmFuZ2VgLiBEb2VzIHRoZSB1c2Ugb2YgYG9mZmxpbmVfcGFnZXNgIHNvbWVob3cgY29tcGxpY2F0ZSwgaW50ZXJhY3Qgd2l0aCwgb3IgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIGBhbGxvY19jb250aWdfcmFuZ2VgPyBBcmUgdGhlcmUgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBvcHRpbWl6YXRpb25zIGhlcmU/IEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2ggY2FyZWZ1bGx5LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24uIFRoaXMgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDYzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTI6MTkuMzg4ODEyODI4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkxNDkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ01BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMDY0PWNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxcbi0tXFxubW0vS2NvbmZpZy0xMDY2LVxcbm1tL0tjb25maWc6MTA2Nzpjb25maWcgQ01BXFxubW0vS2NvbmZpZy0xMDY4LVxcdGJvb2wgXFxcIkNvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4MS1cXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXFxubW0vS2NvbmZpZy0xMDgzLVxcdGJvb2wgXFxcIkNNQSBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4Ny1cXG5tbS9LY29uZmlnOjEwODg6Y29uZmlnIENNQV9TWVNGU1xcbm1tL0tjb25maWctMTA4OS1cXHRib29sIFxcXCJDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwOTQtXFxubW0vS2NvbmZpZzoxMDk1OmNvbmZpZyBDTUFfQVJFQVNcXG5tbS9LY29uZmlnLTEwOTYtXFx0aW50IFxcXCJNYXhpbXVtIGNvdW50IG9mIHRoZSBDTUEgYXJlYXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjEyOjE5LjQzMjczNTM1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzA3MDA3ODkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqQ01BIEFsbG9jYXRpb24gU3RyYXRlZ3kqKlxuXG5Pa2F5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGhhbmRsZSB0aGlzIGFsbG9jYXRpb24uIENsZWFybHksIHRoZSBgQ01BYCBtZWNoYW5pc20gaXMgZXNzZW50aWFsIGZvciBtYW5hZ2luZyB0aGUgYWxsb2NhdGlvbnMsIHNvIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLCBJIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgYENPTlRJR19BTExPQ2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgQ01BIGFsbG9jYXRpb25zIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYW5kIGFueSBvdGhlciBwYXJhbWV0ZXJzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGF0IGNvZGUgZm9yIGEgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUxNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjEzOjMyLjUwMjgxNjk5OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNjA2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENPTlRJR19BTExPQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbi0tXFxubW0vS2NvbmZpZy03MTgtXFxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xcbm1tL0tjb25maWctNzIwLVxcdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFxcdTAwMjZcXHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxMzozMi41NTAwODMzNjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY3NjQ3OTY2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIENvbnRpZ3VvdXMgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYENPTlRJR19BTExPQ2AgY29uZmlndXJhdGlvbiBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaXRzIHRyaWdnZXJzLiBJdCBzZWVtcyB0aGF0IHdoZXRoZXIgY29udGlndW91cyBhbGxvY2F0aW9uIGlzIGVuYWJsZWQgZGVwZW5kcyBvbiBhIGNvdXBsZSBvZiBrZXkgZmFjdG9yczogd2hldGhlciB3ZSdyZSB1c2luZyBtZW1vcnkgaXNvbGF0aW9uICphbmQqIGNvbXBhY3Rpb24sICpvciogaWYgd2UncmUgdXNpbmcgQ01BLiBUaGF0IG1ha2VzIHNlbnNlLCBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgbWFuYWdlbWVudC4gTGV0J3MgZGVsdmUgaW50byB0aGUgZmlyc3QgcG90ZW50aWFsIHRyaWdnZXIsIGBNRU1PUllfSVNPTEFUSU9OYCwgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc2MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjE0OjU5LjMxNDg4Mjc1NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwODY0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9JU09MQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTQ5OT1jb25maWcgTlVNQV9LRUVQX01FTUlORk9cXG4tLVxcbm1tL0tjb25maWctNTAxLVxcbm1tL0tjb25maWc6NTAyOmNvbmZpZyBNRU1PUllfSVNPTEFUSU9OXFxubW0vS2NvbmZpZy01MDMtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNDo1OS4zNTk5NzQ3OThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNDI2NjgxOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgSXNvbGF0aW9uIFNldHRpbmdzKipcblxuT2theSwgc28gYE1FTU9SWV9JU09MQVRJT05gIGlzIGEgYm9vbGVhbiwgZ290IGl0LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zLCBhbmQgaG93IGl0IGlzIGFjdHVhbGx5IGVtcGxveWVkLiBTbywgbmV4dCwgbXkgZm9jdXMgaW1tZWRpYXRlbHkgc2hpZnRzIHRvIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiAqd2hvKiBvciAqd2hhdCogaXMgbWFraW5nIHRoaXMgc2VsZWN0aW9uPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGUgYW5zd2VyIHdpbGwgbGlrZWx5IHJldmVhbCBzb21lIGtleSBhcmNoaXRlY3R1cmFsIGRlY2lzaW9ucyBhcm91bmQgc2VjdXJpdHksIHBlcmZvcm1hbmNlLCBvciByZXNvdXJjZSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgY29uZmlndXJhdGlvbnMsIHRoZSBjb21waWxlLXRpbWUgb3B0aW9ucywgYWxsIHRoZSBlbnRyeSBwb2ludHMgdGhhdCB0b3VjaCB0aGlzIHNldHRpbmcuIEl0J3MgdGltZSB0byB0cmFjZSB0aGUgbG9naWMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNTozNC43MDI2NDU3NjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjMyODE5NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE1FTU9SWV9JU09MQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz01MjM9bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWctNTI0LVxcdGJvb2wgXFxcIk1lbW9yeSBob3RwbHVnXFxcIlxcbm1tL0tjb25maWc6NTI1OlxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxubW0vS2NvbmZpZy01MjYtXFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbi0tXFxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcXG4tLVxcbm1tL0tjb25maWctMTA3MC1cXHRzZWxlY3QgTUlHUkFUSU9OXFxubW0vS2NvbmZpZzoxMDcxOlxcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXFxubW0vS2NvbmZpZy0xMDcyLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTU6MzYuMjY1OTMyMzE2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTcxMDc4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIE1lbW9yeSBJc29sYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYm90aCBgTUVNT1JZX0hPVFBMVUdgIGFuZCBgQ01BYCBhcmUgZGlyZWN0bHkgc2VsZWN0aW5nIGBNRU1PUllfSVNPTEFUSU9OYC4gSW50ZXJlc3RpbmcsIGJlY2F1c2UgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGV5J3JlIGJvdGggcmVsYXRlZCB0byBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCB0YXNrcy4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgY2xlYXI6IGVuYWJsaW5nIGVpdGhlciBvZiB0aG9zZSwgd2hpY2ggSSdkIGxpa2VseSBkbyBpbiBtYW55IG9mIG15IGNvbmZpZ3VyYXRpb25zLCBhdXRvbWF0aWNhbGx5IHNldHMgdXAgdGhlIHVuZGVybHlpbmcgbWVtb3J5IGlzb2xhdGlvbiBmcmFtZXdvcmsuIEdvb2QuXG5cblRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL3BhZ2VfaXNvbGF0aW9uLmNgLCBhbmQgdGhhdCBjb2RlIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01FTU9SWV9JU09MQVRJT05gIGlzIHR1cm5lZCBvbiwgc28gdGhhdCBjb25maXJtcyBteSBpbml0aWFsIHRob3VnaHQuIEVuYWJsaW5nIGBNRU1PUllfSE9UUExVR2Agb3IgYENNQWAgdG8gbWUsIGlzIHRoZSByaWdodCBjYWxsIGdpdmVuIHRoZSBsaWtlbHkgZGVwZW5kZW5jaWVzLlxuXG5Ob3csIGxldCBtZSBjaGVjayBzb21ldGhpbmcgc3BlY2lmaWMgcmVnYXJkaW5nIHRoZSBpc29sYXRpb24gcm91dGluZXMuIEkgd2FudCB0byBzZWUgaWYgYGFsbG9jX2NvbnRpZ19yYW5nZWAgaXMgZXhwb3J0ZWQsIGJlY2F1c2UgSSBoYXZlIGEgdXNlIGNhc2UgaW4gbWluZCB3aGVyZSB0aGF0IHdvdWxkIGJlIHVzZWZ1bC4gKlllcyEqIEV4Y2VsbGVudCwgdGhhdCB3aWxsIGJlIHVzYWJsZS4gT2theSwgYW5kIHdoYXQgYWJvdXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWA/IExldCdzIGNoZWNrIHRoYXQgb25lIGFzIHdlbGwuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM0MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNTo0MC4yODMwNDI4OTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODU4NTk4MTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTU6NDIuMjY4OTEyMTY4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODgxNDY0MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBNZW1vcnkgQWxsb2NhdGlvbiBQcm9jZWR1cmVzKipcblxuUmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgbWFuYWdlZC4gSSBzZWUgYSBkaXNjcmVwYW5jeS4gVGhlIGRhdGEgSSBuZWVkIGlzbid0IGJlaW5nIFwiZXhwb3J0ZWQsXCIgbWVhbmluZyBpdCdzIG5vdCBiZWluZyBleHBsaWNpdGx5IG1hZGUgYXZhaWxhYmxlIG9yIGFjY2Vzc2libGUgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIGNvbnRleHQuIEhvd2V2ZXIsIHRoZSBgYWxsb2NfY29udGlnX3JhbmdlYCBmdW5jdGlvbiBpcywgd2hpY2ggaXMgYSBrZXkgcHJpbWl0aXZlIGZvciBhbGxvY2F0aW5nIGNvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5LiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGlzc3VlIG9yIG92ZXJzaWdodCBpbiBob3cgdGhlc2UgcGFnZXMgYXJlIGJlaW5nIGhhbmRsZWQgZG93bnN0cmVhbS5cblxuVG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBhbmQgdG8gZGlhZ25vc2UgdGhlIHByb2JsZW0sIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgYG9mZmxpbmVfcGFnZXNgIGRhdGEgc3RydWN0dXJlLiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBzeXN0ZW0gdHJhY2tzIHBhZ2VzIHRoYXQgYXJlICpub3QqIGN1cnJlbnRseSBpbiB1c2Ugb3IgYXJlIGRlbGliZXJhdGVseSB0YWtlbiBvdXQgb2YgY2lyY3VsYXRpb24uIFBlcmhhcHMgdGhlcmUncyBhbiBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBhdmFpbGFiaWxpdHkgb2YgcGFnZXMgaW5kaWNhdGVkIGJ5IGBvZmZsaW5lX3BhZ2VzYCBhbmQgaG93IGBhbGxvY19jb250aWdfcmFuZ2VgIGlzIGJlaW5nIHVzZWQsIG9yIG5vdCB1c2VkLCBnaXZlbiB0aGUgXCJub3QgZXhwb3J0ZWRcIiBkYXRhLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gY2hlY2sgd2hhdCB0aGUgc3RhdGUgb2YgdGhlc2Ugb2ZmbGluZSBwYWdlcyBpcywgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLCBhbmQgd2h5IG15IHRhcmdldGVkIGRhdGEgaXNuJ3QgYmVpbmcgZXhwb3J0ZWQuIElzIHRoZXJlIGEgcmFjZSBjb25kaXRpb24/IEEgbWlzc2luZyBmbGFnPyBBbiB1bmludGVuZGVkIGludGVyYWN0aW9uPyBUaGlzIGlzIHRoZSBjb3JlIG9mIHdoZXJlIEkgbmVlZCB0byBzdGFydCBsb29raW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzI1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6MjAuMTUwMzc5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyMjc0NjU4MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qb2ZmbGluZV9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6MjIuNzczMTM0NThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2OTc2Mjc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVuZXhwb3J0ZWQgU3ltYm9sKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGUgc3ltYm9sIGlzbid0IGV4cG9ydGVkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZvY3VzIG9uIHRoZSBzeW1ib2xzIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIHRoZSBwYWdlIHJhbmdlIG1hbmFnZW1lbnQsIHNvIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGBhbGxvY19jb250aWdfcmFuZ2VgLCBhbmQgYG9mZmxpbmVfcGFnZXNgLlxuXG5XYWl0IGEgbWludXRlLCBpc24ndCBgYWxsb2NfY29udGlnX3JhbmdlYCBhIG1hY3JvPyBJIHNlZW0gdG8gcmVtZW1iZXIgc2VlaW5nIHRoYXQgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9nZnAuaGAuIExldCBtZSBkb3VibGUtY2hlY2suLi4geWVwLCBoZXJlIGl0IGlzOlxuXG5gYGBjXG4jZGVmaW5lIGFsbG9jX2NvbnRpZ19yYW5nZSguLi4pIFxcXG5cdGFsbG9jX2hvb2tzKGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YoX19WQV9BUkdTX18pKVxuYGBgXG5cbkFoLCB0aGF0J3MgcmlnaHQuIFNvLCB0aGUgKmFjdHVhbCogZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGlzIGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYC4gVGhhdCBtYWtlcyBtb3JlIHNlbnNlLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBleGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZmAgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA2MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNjoyNy4wNDI5MDAwMzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDkxMTQyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2dmcC5oPTQ0OD1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1Mi1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oOjQ1MzppbnQgYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTQ1NC1cXHRcXHRhY3JfZmxhZ3NfdCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spO1xcbmluY2x1ZGUvbGludXgvZ2ZwLmgtNDU1LSNkZWZpbmUgYWxsb2NfY29udGlnX3JhbmdlKC4uLilcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9nZnAuaDo0NTY6XFx0YWxsb2NfaG9va3MoYWxsb2NfY29udGlnX3JhbmdlX25vcHJvZihfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9nZnAuaC00NTctXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzI0Nj1FWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MjY0LSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo3MjY1OmludCBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL3BhZ2VfYWxsb2MuYy03MjY2LVxcdFxcdFxcdCAgICAgIGFjcl9mbGFnc190IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03Mjc4LX1cXG5tbS9wYWdlX2FsbG9jLmM6NzI3OTpFWFBPUlRfU1lNQk9MKGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2YpO1xcbm1tL3BhZ2VfYWxsb2MuYy03MjgwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNjoyOS4zOTIwMjA1MDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2NTczMjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEZvY3VzOiBDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0aW9uIGFuZCBIb3RwbHVnZ2luZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBCYXNlZCBvbiB0aGUgdGFzayBhdCBoYW5kLCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mYCwgYHN0YXJ0X2lzb2xhdGVfcGFnZV9yYW5nZWAsIGFuZCBgb2ZmbGluZV9wYWdlc2AuIFRoZXJlJ3MgYWxzbyBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgLCB3aGljaCBpcyBhIHJlbGF0ZWQgdmFyaWFudCBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbi4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGlzIHN0YXRpYzsgeWVzLCBpdCdzIHNjb3BlZCB0aGF0IHdheSwgd2hpY2ggaGVscHMgbWUgdW5kZXJzdGFuZCB0aGUgY2FsbCBjb250ZXh0LiBTbywgdG8gc29saWRpZnkgaXQsIG15IGtleSB0YXJnZXRzIGFyZTpcblxuKiAgIGBzdGFydF9pc29sYXRlX3BhZ2VfcmFuZ2VgXG4qICAgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgXG4qICAgYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYFxuKiAgIGBvZmZsaW5lX3BhZ2VzYFxuXG5HaXZlbiB0aGUgY29udGV4dCwgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIG1vc3QgcmVsZXZhbnQgYW5kIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXJlIGBNRU1PUllfSE9UUExVR2AgYW5kIGBDTUFgLiBBIHF1aWNrIHJldmlldyBvZiB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTUVNT1JZX0hPVFBMVUdgIGlzIGluIG9yZGVyOyBpdCBjYW4gc2hpZnQgbXkgdGhpbmtpbmcgYW5kIHVuY292ZXIgdW5kZXJseWluZyBmYWN0b3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg0MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNjozNC4wNTc3NTU4NDdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTU4NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfSE9UUExVR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTE5PWNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbi0tXFxubW0vS2NvbmZpZy01MjItIyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICdzZWxlY3QgU1BBUlNFTUVNJ1xcbm1tL0tjb25maWc6NTIzOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUyNC1cXHRib29sIFxcXCJNZW1vcnkgaG90cGx1Z1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6MzQuMTQ1MzIwNzI2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODY0NTA2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4ga2VybmVsIGludGVybmFsczpcblxuKipDb25kaXRpb25hbCBEZXBlbmRlbmNpZXMgYW5kIERlZmF1bHQgQ29uZmlndXJhdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBgTUVNT1JZX0hPVFBMVUdgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCdzIHByZXR0eSBmdW5kYW1lbnRhbCBmb3IgZHluYW1pY2FsbHkgYWRkaW5nIG9yIHJlbW92aW5nIG1lbW9yeSwgYSBjcml0aWNhbCBmZWF0dXJlIGZvciBtYW55IHNlcnZlciBhbmQgdmlydHVhbGl6YXRpb24gc2V0dXBzLiBJIGtub3cgaXQgaW5oZXJlbnRseSByZWxpZXMgb24gYFNQQVJTRU1FTV9WTUVNTUFQYCBhbmQgYEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHYC4gTWFrZXMgc2Vuc2U7IGhvdHBsdWdnaW5nIGlzIGNvbXBsZXgsIGFuZCB0aG9zZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb25zIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZS5cblxuVGhlIGtleSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBob3cgdWJpcXVpdG91cyBpcyBgU1BBUlNFTUVNX1ZNRU1NQVBgPyBJcyBpdCBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gbW9zdCBhcmNoaXRlY3R1cmVzIG9yIGtlcm5lbHM/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIEl0J3MgYSBjcml0aWNhbCBwcmVyZXF1aXNpdGUsIGFuZCBrbm93aW5nIHdoZXRoZXIgSSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0IG9yIHdoZXRoZXIgaXQncyBoYW5kbGVkIFwib3V0LW9mLXRoZS1ib3hcIiBjaGFuZ2VzIGhvdyBJIGFwcHJvYWNoIHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgdGhlIHR5cGljYWwgYnVpbGQgY29uZmlndXJhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVmYXVsdHMgaGVscHMgbWUgYW50aWNpcGF0ZSBwb3RlbnRpYWwgaXNzdWVzIGFuZCBzdHJlYW1saW5lIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MuIFRoYXQncyBhIHBvaW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXIsIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjE2OjM3LjkzMTc3NTM1MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0OTEwNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz00NTE9Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXFxuLS1cXG5tbS9LY29uZmlnLTQ1NC1cXG5tbS9LY29uZmlnOjQ1NTpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXFxubW0vS2NvbmZpZy00NTYtXFx0Ym9vbFxcbm1tL0tjb25maWctNDU3LVxcbm1tL0tjb25maWc6NDU4OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWctNDU5LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWctNDY1LVxcbm1tL0tjb25maWc6NDY2OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9QUkVJTklUXFxubW0vS2NvbmZpZy00NjctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNDoxNjozNy45OTMyNzIxNjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3NTIxOTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBgU1BBUlNFTUVNX1ZNRU1NQVBgIGlzIGRlZmluaXRpdmVseSBlbmFibGVkLiBUaGF0J3MgZ29vZCB0byBrbm93LCBubyBzdXJwcmlzZXMgdGhlcmUuIE15IG1pbmQsIGhvd2V2ZXIsIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBpbXBsaWNhdGlvbnMgZm9yIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRpb24gKENNQSkuIEl0J3MgYSBuYXR1cmFsIHByb2dyZXNzaW9uIG9mIHRob3VnaHQ7IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgdGhlc2UgdHdvIGludGVyYWN0LCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBtZW1vcnkgbGF5b3V0IGltcGxpY2F0aW9ucy4gSXMgdGhlcmUgc29tZXRoaW5nIHNwZWNpYWwgSSBzaG91bGQga2VlcCBpbiBtaW5kIHdpdGggdGhpcyBjb21iaW5hdGlvbj8gVGltZSB0byBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3byBhbmQgbWFrZSBzdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODY2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6NDEuMDY4NDk0MDg3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjgxMTE3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ01BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMDY0PWNvbmZpZyBIQVZFX1NFVFVQX1BFUl9DUFVfQVJFQVxcbi0tXFxubW0vS2NvbmZpZy0xMDY2LVxcbm1tL0tjb25maWc6MTA2Nzpjb25maWcgQ01BXFxubW0vS2NvbmZpZy0xMDY4LVxcdGJvb2wgXFxcIkNvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvclxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4MS1cXG5tbS9LY29uZmlnOjEwODI6Y29uZmlnIENNQV9ERUJVR0ZTXFxubW0vS2NvbmZpZy0xMDgzLVxcdGJvb2wgXFxcIkNNQSBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTA4Ny1cXG5tbS9LY29uZmlnOjEwODg6Y29uZmlnIENNQV9TWVNGU1xcbm1tL0tjb25maWctMTA4OS1cXHRib29sIFxcXCJDTUEgaW5mb3JtYXRpb24gdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTEwOTQtXFxubW0vS2NvbmZpZzoxMDk1OmNvbmZpZyBDTUFfQVJFQVNcXG5tbS9LY29uZmlnLTEwOTYtXFx0aW50IFxcXCJNYXhpbXVtIGNvdW50IG9mIHRoZSBDTUEgYXJlYXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjE2OjQxLjE1MTMxMTczNloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTYxMDUwMzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0IHRvdWNoZXMgc29tZSBjcnVjaWFsIGFyZWFzLiBgQ01BYCBkZXBlbmRzIG9uIGBNTVVgLCBzbyBlbmFibGluZyBib3RoIGBDTUFgIGFuZCBgTUVNT1JZX0hPVFBMVUdgIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGp1c3QgdG8gYmUgc3VyZS4uLiBBaCwgYE1FTU9SWV9JU09MQVRJT05gIGlzIHNlbGVjdGVkIGJ5IGJvdGggYE1FTU9SWV9IT1RQTFVHYCBhbmQgYENNQWAg4oCTIHNvIHRob3NlIHR3byBhcmUgZGVmaW5pdGVseSBzdWZmaWNpZW50IGZvciBteSBhbmFseXNpcy5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUgY2hhbmdlIGl0c2VsZi4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbW9kaWZ5aW5nIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHdpdGhpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AuIFRoZSBrZXkgY2hhbmdlIGlzIHVzaW5nIGBidWRkeV9vcmRlcl91bnNhZmVgIGFuZCB2YWxpZGF0aW5nIGl0cyBvdXRwdXQgYWdhaW5zdCBgTUFYX1BBR0VfT1JERVJgLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBpdCBndWFyZHMgYWdhaW5zdCBvdXQtb2YtYm91bmRzIHNoaWZ0cyBhbmQgcG90ZW50aWFsIFBGTiBpbmNyZW1lbnQgZXJyb3JzLCB3aGljaCBjYW4gYXJpc2UgZnJvbSByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIHRoZSBvcmRlciBvZiBhIGJ1ZGR5IHBhZ2UuIFRoZSBvcmlnaW5hbCBjb2RlJ3MgYGJ1ZGR5X29yZGVyYCBjb3VsZCBoYXZlIHJldHVybmVkIGdhcmJhZ2UgdmFsdWVzIGxlYWRpbmcgdG8gdGhvc2UgZXJyb3JzLCBhcyB0aGUgY29kZSBoYWQgYSByYWNlIGNvbmRpdGlvbiBpc3N1ZS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lLCBpbiBmYWN0LiBJdCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYXNzb2NpYXRlZCB3aXRoIHBhZ2UgaXNvbGF0aW9uLiBJdCdzIHVzZWQgYnkgYm90aCBgQ01BYCBhbmQgbWVtb3J5IGhvdHBsdWcsIGJvdGgga2V5IGFyZWFzLiBUaGlzIG1ha2VzIGl0IHF1aXRlIGxpa2VseSB0aGF0IHRoZXJlIGlzIGEgZ29vZCByZWFzb24gdG8gaW52ZXN0aWdhdGUgdGhpcyBjaGFuZ2UuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgY291bGQgZGVmaW5pdGVseSBiZW5lZml0IGZyb20gZnV6emluZy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHN5bWJvbHMgbGlrZSBgc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlYCwgYGFsbG9jX2NvbnRpZ19yYW5nZV9ub3Byb2ZgLCBgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2ZgLCBhbmQgYG9mZmxpbmVfcGFnZXNgIGZvciBteSBpbnZlc3RpZ2F0aW9uLiBTbywgbGV0IG1lIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI4NCwiT3V0cHV0VG9rZW5zIjoxODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6NTAuNzEyMzY1MDk5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NjUyNjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwib2ZmbGluZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIHZhbGlkYXRlIHRoZSBvcmRlciBhZ2FpbnN0IGBNQVhfUEFHRV9PUkRFUmAuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGluY29ycmVjdCBQRk4gaW5jcmVtZW50cyBjYXVzZWQgYnkgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyB0aGUgb3JkZXIgb2YgYSBidWRkeSBwYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IENNQSBhbmQgbWVtb3J5IGhvdHBsdWcuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDTUFcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlXCIsXG4gICAgXCJhbGxvY19jb250aWdfcmFuZ2Vfbm9wcm9mXCIsXG4gICAgXCJhbGxvY19jb250aWdfZnJvemVuX3JhbmdlX25vcHJvZlwiLFxuICAgIFwib2ZmbGluZV9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZWAgYW5kIHZhbGlkYXRlIHRoZSBvcmRlciBhZ2FpbnN0IGBNQVhfUEFHRV9PUkRFUmAuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBzaGlmdHMgYW5kIGluY29ycmVjdCBQRk4gaW5jcmVtZW50cyBjYXVzZWQgYnkgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyB0aGUgb3JkZXIgb2YgYSBidWRkeSBwYWdlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyByZWxhdGVkIHRvIHBhZ2UgaXNvbGF0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IENNQSBhbmQgbWVtb3J5IGhvdHBsdWcuIEl0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6NTAuODUwMDI1NzQzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjcxMDIzOTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTQ6MTY6NTAuODUwNTIzMTAzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk2NzA1MjE1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIGluIGBtbS9wYWdlX2lzb2xhdGlvbi5jYCB0byB1c2UgYGJ1ZGR5X29yZGVyX3Vuc2FmZSgpYCBpbnN0ZWFkIG9mIGBidWRkeV9vcmRlcigpYCBhbmQgYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIG9yZGVyLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgYSBjb25jdXJyZW50bHkgbW9kaWZpZWQgb3IgaW52YWxpZCBwYWdlIG9yZGVyIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyBzaGlmdCBvciBpbmNvcnJlY3QgUEZOIGNhbGN1bGF0aW9uLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIHJlbGF0ZWQgdG8gY29uY3VycmVuY3kgYW5kIG91dC1vZi1ib3VuZHMvaW52YWxpZCB2YWx1ZXMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgS0FTQU4sIFVCU0FOLCBhbmQga2VybmVsIHdhcm5pbmdzIChsaWtlIGBWTV9XQVJOX09OX09OQ0VgKSBhcmUgc3VmZmljaWVudCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IgcmVzdWx0aW5nIGZyb20gaW52YWxpZCBwYWdlIG9yZGVycy4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEwNjVmMmRmYWNiZjY3YjRiNzE3MDU3MTNkNmJmNDc3OWI5YjkyODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNDowOTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaXNvbGF0aW9uLmMgYi9tbS9wYWdlX2lzb2xhdGlvbi5jXG5pbmRleCAzMmNlOGE3ZDlkZjM1Li44YWEwOTZmMTc1NGQ1IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pc29sYXRpb24uY1xuKysrIGIvbW0vcGFnZV9pc29sYXRpb24uY1xuQEAgLTM4NywxMyArMzg3LDE2IEBAIHN0YXRpYyBpbnQgaXNvbGF0ZV9zaW5nbGVfcGFnZWJsb2NrKHVuc2lnbmVkIGxvbmcgYm91bmRhcnlfcGZuLFxuIFx0XHR9XG4gXG4gXHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRpbnQgb3JkZXIgPSBidWRkeV9vcmRlcihwYWdlKTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXI7XG4gXG4tXHRcdFx0LyogcGFnZWJsb2NrX2lzb2xhdGVfYW5kX21vdmVfZnJlZV9wYWdlcygpIGhhbmRsZWQgdGhpcyAqL1xuLVx0XHRcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuK1x0XHRcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xuK1x0XHRcdGlmIChsaWtlbHkob3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUikpIHtcbitcdFx0XHRcdC8qIHBhZ2VibG9ja19pc29sYXRlX2FuZF9tb3ZlX2ZyZWVfcGFnZXMoKSBoYW5kbGVkIHRoaXMgKi9cbitcdFx0XHRcdFZNX1dBUk5fT05fT05DRShwZm4gKyAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpIFx1MDAzZSBib3VuZGFyeV9wZm4pO1xuIFxuLVx0XHRcdHBmbiArPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdFx0cGZuICs9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjE2OjUwLjg1MDUyMzkxM1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjcwNDk0Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFnZSBJc29sYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBpc29sYXRlX3NpbmdsZV9wYWdlYmxvY2tgIHdpdGhpbiBgbW0vcGFnZV9pc29sYXRpb24uY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHN3aXRjaGluZyBmcm9tIGBidWRkeV9vcmRlcihwYWdlKWAgdG8gYGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKWAgYW5kIHRocm93aW5nIGluIGEgY2hlY2sgdG8gZW5zdXJlIHRoZSBgb3JkZXJgIGlzbid0IHJpZGljdWxvdXMg4oCTIG1ha2luZyBzdXJlIGl0J3MgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBNQVhfUEFHRV9PUkRFUmAuIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IGlzIHRoaXMgS01TQU4tcmVsYXRlZD8gSXMgdGhlcmUgYSByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgb3Igd3JpdGluZyBpdCB0byB1c2VyIHNwYWNlP1xuXG5BZnRlciBhIGNsb3NlciBsb29rLCB0aGUgZm9jdXMgaXMgcmVhbGx5IG9uIGhhbmRsaW5nIHBvdGVudGlhbGx5IGludmFsaWQgb3IgY29uY3VycmVudGx5IG1vZGlmaWVkIHBhZ2Ugb3JkZXJzLiBgYnVkZHlfb3JkZXJfdW5zYWZlYCBkb2VzIHJlYWQgdGhlIHBhZ2Ugb3JkZXIgKndpdGhvdXQqIGEgbG9jaywgd2hpY2ggbWVhbnMgaXQgKmNvdWxkKiByZWFkIGdhcmJhZ2Ugb3IgZ2V0IGEgdmFsdWUgdGhhdCdzIGluIHRoZSBtaWRkbGUgb2YgYmVpbmcgbW9kaWZpZWQuIFRoZSBjcnVjaWFsIGRpc3RpbmN0aW9uIGlzIHRoYXQgaXQncyAqbm90KiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgS01TQU4gc2Vuc2Ug4oCTIEtNU0FOIGRldGVjdHMgYWxsb2NhdGlvbnMgdGhhdCBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYWJvdXQgcG90ZW50aWFsbHkgcmVhZGluZyBhbiBvdXQtb2YtYm91bmRzIG9yIGludmFsaWQgdmFsdWUgdGhhdCBtaWdodCBiZSBzZXQgcHJldmlvdXNseSBieSBhIGNvbmN1cnJlbnQgb3BlcmF0aW9uLlxuXG5Pa2F5LCBsZXQncyBuYWlsIHRoaXMgZG93bi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSdzIGFic29sdXRlbHkgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBtYWtpbmcgaXQgaW50byB1c2VyIHNwYWNlIGFzIGEgcmVzdWx0IG9mIHRoaXMgcGF0Y2guIEFmdGVyIGNoZWNraW5nIEkgc2VlIGl04oCZcyBqdXN0IHJlYWRpbmcgYHBhZ2UtXHUwMDNlcHJpdmF0ZWAgKG9yIHdoZXJldmVyIGBvcmRlcmAgaXMgc3RvcmVkKSwgd2hpY2ggY291bGQgYmUgY29uY3VycmVudGx5IG1vZGlmaWVkLCBidXQgbm90IHVuaW5pdGlhbGl6ZWQgaW4gdGhlIEtNU0FOIHNlbnNlLiBNeSBjb25jbHVzaW9uOiB0aGlzIGlzIGFib3V0IHBvdGVudGlhbCAqb3V0LW9mLWJvdW5kcyogaXNzdWVzIG9yIHVuZGVmaW5lZCBiZWhhdmlvciBkdWUgdG8gaW5jb3JyZWN0IG9yZGVyIHZhbHVlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiwgVUJTQU4sIGFuZCBgVk1fV0FSTl9PTl9PTkNFYCBzaG91bGQgY2F0Y2ggYW55IGlzc3VlcyBoZXJlLiBHaXZlbiB0aGF0LCBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBtYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5MZXQgbWUgd3JpdGUgaXQgZG93bi4gVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBpc29sYXRpb24gZnVuY3Rpb24gdG8gdXNlIGBidWRkeV9vcmRlcl91bnNhZmVgLCB3aGljaCBpcyBzYWZlIHRvIHJlYWQuIFRoaXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBwYWdlIG9yZGVyIGlzIG91dC1vZi1ib3VuZHMgb3IgaXMgYmVpbmcgbW9kaWZpZWQgY29uY3VycmVudGx5LCB3aGljaCBjYW4gdGhlbiBsZWFkIHRvIG91dC1vZi1ib3VuZHMgc2hpZnRzIG9yIGluY29ycmVjdCBQRk4gY2FsY3VsYXRpb25zLiBLTVNBTiBpcyBub3QgdGhlIHJpZ2h0IHRvb2wgZm9yIGZpbmRpbmcgZXJyb3JzIGluIHRoaXMgcGF0Y2ggc2luY2UgdGhlIGVycm9ycyBpdCBpcyBtZWFudCB0byB1bmNvdmVyIGFyZSBpbnZhbGlkIHZhbHVlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk3LCJPdXRwdXRUb2tlbnMiOjIwMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE0OjE3OjAwLjUyMTAyMTk2OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlKClgIGluc3RlYWQgb2YgYGJ1ZGR5X29yZGVyKClgIGFuZCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgb3JkZXIuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSBhIGNvbmN1cnJlbnRseSBtb2RpZmllZCBvciBpbnZhbGlkIHBhZ2Ugb3JkZXIgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHNoaWZ0IG9yIGluY29ycmVjdCBQRk4gY2FsY3VsYXRpb24uIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgb3V0LW9mLWJvdW5kcy9pbnZhbGlkIHZhbHVlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiwgVUJTQU4sIGFuZCBrZXJuZWwgd2FybmluZ3MgKGxpa2UgYFZNX1dBUk5fT05fT05DRWApIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVuZGVmaW5lZCBiZWhhdmlvciByZXN1bHRpbmcgZnJvbSBpbnZhbGlkIHBhZ2Ugb3JkZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGlzb2xhdGVfc2luZ2xlX3BhZ2VibG9ja2AgaW4gYG1tL3BhZ2VfaXNvbGF0aW9uLmNgIHRvIHVzZSBgYnVkZHlfb3JkZXJfdW5zYWZlKClgIGluc3RlYWQgb2YgYGJ1ZGR5X29yZGVyKClgIGFuZCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciB0aGUgb3JkZXIuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSBhIGNvbmN1cnJlbnRseSBtb2RpZmllZCBvciBpbnZhbGlkIHBhZ2Ugb3JkZXIgY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHNoaWZ0IG9yIGluY29ycmVjdCBQRk4gY2FsY3VsYXRpb24uIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgb3V0LW9mLWJvdW5kcy9pbnZhbGlkIHZhbHVlcywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBLQVNBTiwgVUJTQU4sIGFuZCBrZXJuZWwgd2FybmluZ3MgKGxpa2UgYFZNX1dBUk5fT05fT05DRWApIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVuZGVmaW5lZCBiZWhhdmlvciByZXN1bHRpbmcgZnJvbSBpbnZhbGlkIHBhZ2Ugb3JkZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzkkj[1] Phase: Succeeded StartedAt: 2026-08-18 14:17:11 +0000 UTC FinishedAt: 2026-08-18 14:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 14:17:11 +0000 UTC FinishedAt: 2026-08-18 14:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2] Phase: Succeeded StartedAt: 2026-08-18 14:17:11 +0000 UTC FinishedAt: 2026-08-18 17:58:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:17:11 +0000 UTC FinishedAt: 2026-08-18 17:58:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:17:11 +0000 UTC FinishedAt: 2026-08-18 14:17:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:17:11 +0000 UTC FinishedAt: 2026-08-18 14:17:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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-workflowzzkkj/series-workflowzzkkj-convert-artifact-1194306000/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:17:31 +0000 UTC FinishedAt: 2026-08-18 14:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:17:31 +0000 UTC FinishedAt: 2026-08-18 14:33:36 +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:*fcd68ae5-d6bf-45d9-aba9-d08f0360319d,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-workflowzzkkj/series-workflowzzkkj-convert-artifact-1194306000/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": "104bb8ef-dc8f-4b5f-baf6-ac5cea116740", "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-workflowzzkkj/series-workflowzzkkj-build-action-2309134422/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:17:31 +0000 UTC FinishedAt: 2026-08-18 14:33:26 +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:*fcd68ae5-d6bf-45d9-aba9-d08f0360319d,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-workflowzzkkj/series-workflowzzkkj-convert-artifact-1194306000/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": "104bb8ef-dc8f-4b5f-baf6-ac5cea116740", "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-workflowzzkkj/series-workflowzzkkj-build-action-2309134422/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:33:36 +0000 UTC FinishedAt: 2026-08-18 14:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:33:36 +0000 UTC FinishedAt: 2026-08-18 14:33:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:33:36 +0000 UTC FinishedAt: 2026-08-18 14:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:33:36 +0000 UTC FinishedAt: 2026-08-18 14:33:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-workflowzzkkj/series-workflowzzkkj-convert-artifact-3540517431/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:33:46 +0000 UTC FinishedAt: 2026-08-18 14:35:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:33:46 +0000 UTC FinishedAt: 2026-08-18 14:35:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*104bb8ef-dc8f-4b5f-baf6-ac5cea116740,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-workflowzzkkj/series-workflowzzkkj-build-action-2309134422/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-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:35:59 +0000 UTC FinishedAt: 2026-08-18 14:35:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:35:59 +0000 UTC FinishedAt: 2026-08-18 14:35:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:35:59 +0000 UTC FinishedAt: 2026-08-18 14:52:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:35:59 +0000 UTC FinishedAt: 2026-08-18 14:52:16 +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:*fcd68ae5-d6bf-45d9-aba9-d08f0360319d,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-workflowzzkkj/series-workflowzzkkj-convert-artifact-3540517431/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": "07048448-3960-4b95-96c0-4e45163d5b38", "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-workflowzzkkj/series-workflowzzkkj-build-action-1014718971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:35:59 +0000 UTC FinishedAt: 2026-08-18 14:52:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fcd68ae5-d6bf-45d9-aba9-d08f0360319d,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-workflowzzkkj/series-workflowzzkkj-convert-artifact-3540517431/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": "07048448-3960-4b95-96c0-4e45163d5b38", "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-workflowzzkkj/series-workflowzzkkj-build-action-1014718971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:52:16 +0000 UTC FinishedAt: 2026-08-18 14:52:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:52:16 +0000 UTC FinishedAt: 2026-08-18 14:52:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:52:16 +0000 UTC FinishedAt: 2026-08-18 14:54:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:52:16 +0000 UTC FinishedAt: 2026-08-18 14:54:07 +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:*07048448-3960-4b95-96c0-4e45163d5b38,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-workflowzzkkj/series-workflowzzkkj-build-action-1014718971/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-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:54:17 +0000 UTC FinishedAt: 2026-08-18 17:58:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:54:17 +0000 UTC FinishedAt: 2026-08-18 17:58:08 +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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"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:*104bb8ef-dc8f-4b5f-baf6-ac5cea116740,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07048448-3960-4b95-96c0-4e45163d5b38,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-workflowzzkkj/series-workflowzzkkj-build-action-2309134422/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-workflowzzkkj/series-workflowzzkkj-build-action-1014718971/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:54:17 +0000 UTC FinishedAt: 2026-08-18 14:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:54:17 +0000 UTC FinishedAt: 2026-08-18 14:54:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"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-workflowzzkkj/series-workflowzzkkj-convert-artifact-928781680/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:54:17 +0000 UTC FinishedAt: 2026-08-18 14:54:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:54:17 +0000 UTC FinishedAt: 2026-08-18 14:54:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:54:17 +0000 UTC FinishedAt: 2026-08-18 14:54:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:54:27 +0000 UTC FinishedAt: 2026-08-18 17:58:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzkkj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"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":["start_isolate_page_range","alloc_contig_range_noprof","alloc_contig_frozen_range_noprof","offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f5f9327e251a4efb9a98774093ef4675a4b170b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["CMA","MEMORY_HOTPLUG"],"series_id":"4776599a-7438-4f08-993c-d6a976c8d097","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-18 14:54:27 +0000 UTC FinishedAt: 2026-08-18 17:57:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*104bb8ef-dc8f-4b5f-baf6-ac5cea116740,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07048448-3960-4b95-96c0-4e45163d5b38,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-workflowzzkkj/series-workflowzzkkj-build-action-2309134422/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-workflowzzkkj/series-workflowzzkkj-build-action-1014718971/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-workflowzzkkj/series-workflowzzkkj-convert-artifact-928781680/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,}