Name: series-workflowwcz7q Phase: Succeeded StartedAt: 2026-07-01 16:46:14 +0000 UTC FinishedAt: 2026-07-01 21:24:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[0] Phase: Succeeded StartedAt: 2026-07-01 16:46:14 +0000 UTC FinishedAt: 2026-07-01 17:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 16:46:14 +0000 UTC FinishedAt: 2026-07-01 17:24:00 +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": "ff1cd4bfdfebea913df9682c4a715bca55759ff0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MIGRATION", "HUGETLB_PAGE", "MEMORY_FAILURE" ], "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": "ff1cd4bfdfebea913df9682c4a715bca55759ff0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MIGRATION", "HUGETLB_PAGE", "MEMORY_FAILURE" ], "series_id": "5773d0e9-38a1-4523-9dfe-e53545137e86" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "unmap_and_move_huge_page", "migrate_hugetlbs" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UmIzM0OywKICAgICYjMzQ7bWlncmF0ZV9odWdldGxicyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCB0aGUgbWlncmF0aW9uIG9mIGh1Z2UgcGFnZXMgdGhhdCBjb250YWluIGhhcmR3YXJlLXBvaXNvbmVkIHN1YnBhZ2VzLCByZXR1cm5pbmcgLUVIV1BPSVNPTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWlncmF0aW9uIGxvZ2ljLiBUbyByZWFjaCBhbmQgdGVzdCB0aGlzIGNvZGUsIGh1Z2UgcGFnZSBzdXBwb3J0IChDT05GSUdfSFVHRVRMQl9QQUdFKSwgbWVtb3J5IG1pZ3JhdGlvbiAoQ09ORklHX01JR1JBVElPTiksIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyAoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBtdXN0IGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNGJiZDFjNDc2NmYwNTFlZmFmNWE0ZmU2ZGZkZDg4ZDdkOTMyNThkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxNzoyMjoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDQ5ZTEwZmVlYjA5NGYwLi5hYzEyZTlhZWIwNWYxOCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jXG5AQCAtMTUxMCw2ICYjNDM7MTUxMCwxMSBAQCBzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHVubGlrZWx5KGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHNyYykpKSB7XG4mIzQzO1x0XHRyYyA9IC1FSFdQT0lTT047XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChmb2xpb190ZXN0X2Fub24oc3JjKSlcbiBcdFx0YW5vbl92bWEgPSBmb2xpb19nZXRfYW5vbl92bWEoc3JjKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNSUdSQVRJT04mIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfaHVnZXRsYnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHByZXZlbnQgdGhlIG1pZ3JhdGlvbiBvZiBodWdlIHBhZ2VzIHRoYXQgY29udGFpbiBoYXJkd2FyZS1wb2lzb25lZCBzdWJwYWdlcywgcmV0dXJuaW5nIC1FSFdQT0lTT04uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYy4gVG8gcmVhY2ggYW5kIHRlc3QgdGhpcyBjb2RlLCBodWdlIHBhZ2Ugc3VwcG9ydCAoQ09ORklHX0hVR0VUTEJfUEFHRSksIG1lbW9yeSBtaWdyYXRpb24gKENPTkZJR19NSUdSQVRJT04pLCBhbmQgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgKENPTkZJR19NRU1PUllfRkFJTFVSRSkgbXVzdCBiZSBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNGJiZDFjNDc2NmYwNTFlZmFmNWE0ZmU2ZGZkZDg4ZDdkOTMyNThkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAxNzoyMjoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCA0OWUxMGZlZWIwOTRmMC4uYWMxMmU5YWViMDVmMTggMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTE1MTAsNiAmIzQzOzE1MTAsMTEgQEAgc3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAomIzQzOwlpZiAodW5saWtlbHkoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3JjKSkpIHsKJiM0MzsJCXJjID0gLUVIV1BPSVNPTjsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwogCWlmIChmb2xpb190ZXN0X2Fub24oc3JjKSkKIAkJYW5vbl92bWEgPSBmb2xpb19nZXRfYW5vbl92bWEoc3JjKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1pZ3JhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjcnVjaWFsIGNoZWNrIHdpdGhpbiB0aGUgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseTogYGlmICh1bmxpa2VseShmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzcmMpKSlgLiBSaWdodCwgc28gaWYgdGhlIHNvdXJjZSBodWdlIHBhZ2UgaGFwcGVucyB0byBjb250YWluIGEgaGFyZHdhcmUtcG9pc29uZWQgcGFnZSwgdGhpcyBjaGVjayB3aWxsIHJldHVybiBhbiBgLUVIV1BPSVNPTmAgZXJyb3IuIEVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gdGhlIG1lbW9yeSBtaWdyYXRpb24gcHJvY2VzczsgaXQmIzM5O3MgZXhwbGljaXRseSBoYW5kbGluZyB0aGUgc2NlbmFyaW8gb2YgbWlncmF0aW5nIGEgY29ycnVwdGVkIGh1Z2UgcGFnZS4gCgpJIG5lZWQgdG8gcXVpY2tseSBkaWcgaW50byB0aGUgY29kZSBub3cuIE15IGZpcnN0IHN0ZXAgaXMgdG8gbG9jYXRlIHRoZSBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBmdW5jdGlvbiBhbmQgdGhlIGRlZmluaXRpb24gb2YgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgbW0vbWlncmF0ZS5jYCwgbmF0dXJhbGx5LCB0byBmaW5kIHRoZSBtaWdyYXRpb24gbG9naWMgYW5kIHRoZW4gc2VlayBvdXQgdGhlIGBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZWAgZGVmaW5pdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhpcyBjaGFuZ2UgbGllcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBwb2lzb25lZCBwYWdlIGRldGVjdGlvbiBpbXBhY3RzIHRoZSBvdmVyYWxsIG1pZ3JhdGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MTM1Mz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fbW92ZShmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLS1cbm1tL21pZ3JhdGUuYy0xNDY4LSAqL1xubW0vbWlncmF0ZS5jOjE0Njk6c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0xNDcwLVx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLS1cbm1tL21pZ3JhdGUuYz0xNjMyPXN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0xNjcwLVxubW0vbWlncmF0ZS5jOjE2NzE6XHRcdFx0cmMgPSB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UoZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0xNjcyLVx0XHRcdFx0XHRcdCAgICAgIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbnBhY2tpbmcgdGhlIE1lbW9yeSBNaWdyYXRpb24gUHJvY2VzcyoqCgpSaWdodCwgc28gYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuLi4gSSBuZWVkIHRvIHJlbWVtYmVyIHdoZXJlIHRoaXMgZnVuY3Rpb24gc2l0cyBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gQWgsIHllcywgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtaWdyYXRlX2h1Z2V0bGJzYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBBbmQgYG1pZ3JhdGVfaHVnZXRsYnNgLCBpbiB0dXJuLCBpcyB0cmlnZ2VyZWQgYnkgc29tZXRoaW5nIGxpa2UgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIG9yIGEgcmVsYXRlZCBtaWdyYXRpb24gZnVuY3Rpb24uIFRoaXMgc3VnZ2VzdHMgYSBtdWx0aS1zdGVwIHByb2Nlc3MgZm9yIGhhbmRsaW5nIGh1Z2UgcGFnZXMgZHVyaW5nIG1pZ3JhdGlvbi4gTm93LCBJIGhhdmUgdG8gZmluZCBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGJlY2F1c2UsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgdGhlcmUmIzM5O3MgYSByZWFzb24gZm9yIGxvb2tpbmcgYXQgdGhhdCBmdW5jdGlvbiBpbiByZWxhdGlvbiB0byBtZW1vcnkgbWlncmF0aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHRpZXMgaW50byB0aGlzIHNwZWNpZmljIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcxLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA3MjpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNzMte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDQwOT1zdGF0aWMgYm9vbCB0aHBfdW5kZXJ1c2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDE2LVxubW0vaHVnZV9tZW1vcnkuYzo0NDE3Olx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDQxOC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTc5Mz1zdGF0aWMgdm9pZCBkb19taWdyYXRlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODE1LVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxODE2Olx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4MTctXHRcdFx0Lypcbi0tXG5tbS9taWdyYXRlLmM9MTQ2OT1zdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0xNTEyLVxubW0vbWlncmF0ZS5jOjE1MTM6XHRpZiAodW5saWtlbHkoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3JjKSkpIHtcbm1tL21pZ3JhdGUuYy0xNTE0LVx0XHRyYyA9IC1FSFdQT0lTT047XG4tLVxubW0vc2htZW0uYz0zMjE2PXNobWVtX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vc2htZW0uYy0zMjQyLVxubW0vc2htZW0uYzozMjQzOlx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xubW0vc2htZW0uYy0zMjQ0LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTEwNTA9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTEwODMtXG5tbS92bXNjYW4uYzoxMDg0Olx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG5tbS92bXNjYW4uYy0xMDg1LVx0XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZSBQYWdlIE1pZ3JhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGNoZWNrIHdpdGhpbiBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgdGhlIG1pZ3JhdGlvbiBvZiBodWdlIHBhZ2VzIGlmIHRoZXkgY29udGFpbiBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcy4gVGhhdCYjMzk7cyBnb29kLCBzZWVtcyBzZW5zaWJsZSB0byBhdm9pZCBjb3JydXB0aW5nIGRhdGEgZHVyaW5nIGEgbW92ZS4gTm8gb2J2aW91cyBpc3N1ZXMgc28gZmFyLgoKQnV0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dC4gVGhpcyBraW5kIG9mIGNoYW5nZSBjYW4gc29tZXRpbWVzIGJlIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gQmVmb3JlIEkgc2lnbiBvZmYgb24gdGhpcywgSSBuZWVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXJlJiMzOTtzIGFueSBpbXBsaWNpdCBvciBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIGNlcnRhaW4ga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZmxhZyBvciBzZXR0aW5nIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGlzIHBhcnRpY3VsYXIgcG9pc29uLWRldGVjdGlvbiBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIHJlc2VhcmNoIHRoYXQuCgpOb3csIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiwgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAsIHJlc2lkZXMgd2l0aGluIGBtbS9taWdyYXRlLmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucyB0aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIGBtbS9taWdyYXRlLmNgIGl0c2VsZiBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBJcyBpdCBiZWhpbmQgYSBLY29uZmlnIG9wdGlvbj8gS25vd2luZyB0aGF0IHdpbGwgYWxsb3cgbWUgdG8gbmFycm93IGRvd24gdGhlIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSB3aWxsIG5lZWQgdG8gY2hlY2sgYmVmb3JlIGFjY2VwdGluZyB0aGlzIHBhdGNoLCBvciBhc2tpbmcgdGhlIGF1dGhvciBmb3IgY2xhcmlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT05Nz1vYmotJChDT05GSUdfTUVNVEVTVClcdFx0JiM0Mzs9IG1lbXRlc3Qub1xubW0vTWFrZWZpbGU6OTg6b2JqLSQoQ09ORklHX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGUub1xubW0vTWFrZWZpbGUtOTktb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NjgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgYnJhaW4gaXMgc3RhcnRpbmcgdG8gY2h1cm4gb24gdGhpcy4KCioqSW52ZXN0aWdhdGluZyBhIE1pZ3JhdGlvbiBTY2VuYXJpbyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG1pZ3JhdGlvbiBzaXR1YXRpb24gaGVyZSwgdGhhdCYjMzk7cyBjbGVhciDigJMgd2UgbmVlZCBgQ09ORklHX01JR1JBVElPTmAgdG8gYmUgaW4gcGxheSwgdGhhdCYjMzk7cyBzdGVwIG9uZS4gQW5kLCBmcm9tIHRoZSBsb29rcyBvZiBpdCwgaHVnZSBwYWdlcyBhcmUgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBwaWN0dXJlLiBJJiMzOTttIHRoaW5raW5nLCBzcGVjaWZpY2FsbHksIHRoYXQgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgaXMgdGhlIGtleSBmdW5jdGlvbiBiZWluZyB1c2VkLCB3aGljaCBzY3JlYW1zIGh1Z2V0bGIgcGFnZSBoYW5kbGluZy4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBhcm91bmQgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGRlcGVuZGVudCBvbiBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gZmxhZywgc29tZSBgI2lmZGVmYCBwZXJoYXBzLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MTM1Mz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fbW92ZShmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLS1cbm1tL21pZ3JhdGUuYy0xNDY4LSAqL1xubW0vbWlncmF0ZS5jOjE0Njk6c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0xNDcwLVx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLS1cbm1tL21pZ3JhdGUuYz0xNjMyPXN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0xNjcwLVxubW0vbWlncmF0ZS5jOjE2NzE6XHRcdFx0cmMgPSB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UoZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0xNjcyLVx0XHRcdFx0XHRcdCAgICAgIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1tL21pZ3JhdGUuY2AgLSBMaW5lIDE0NjkgYW5kIEJleW9uZCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgbW0vbWlncmF0ZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE0NjkuIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGguLi4gd2VsbCwgYmFzZWQgb24gdGhlIGNvbnRleHQgb2YgbWlncmF0aW9uIGluIHRoZSBrZXJuZWwsIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgbWVjaGFuaWNzIG9mIG1vdmluZyBwYWdlcy4gSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBzZWVpbmcgY29kZSByZWxhdGVkIHRvIHRoZSBhY3R1YWwgY29weWluZywgdXBkYXRpbmcgcGFnZSB0YWJsZXMsIG9yIHBlcmhhcHMgZXZlbiBoYW5kbGluZyB0aGUgbG9ja2luZyBuZWNlc3NhcnkgZm9yIGEgY29uc2lzdGVudCBtaWdyYXRpb24gb3BlcmF0aW9uLiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSwgdGhlcmUgbWlnaHQgYmUgc3BlY2lmaWMgY29kZSByZWxhdGVkIHRvIHRyYW5zbGF0aW9uIGxvb2thc2lkZSBidWZmZXJzIChUTEJzKSBhbmQgY2FjaGUgY29oZXJlbmN5LiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW50cmljYXRlIGRldGFpbHMgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCAoTU1VKSBoZXJlLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCB0aGUgZXhhY3QgbG9naWMgdXNlZCB0byBjb3B5IGRhdGEsIHVwZGF0ZSBwYWdlIHRhYmxlcywgYW5kIG1ha2UgYW55IFRMQiBpbnZhbGlkYXRpb24gdGhhdCBpcyByZXF1aXJlZC4gSSBhbnRpY2lwYXRlIHNvbWUgaW50ZXJlc3Rpbmcgc3VidGxldGllcyBhcm91bmQgdGhlIGF0b21pYyBvcGVyYXRpb25zIHJlcXVpcmVkIHRvIG1haW50YWluIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB0aGUgbWlncmF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB0aGlzIHNlY3Rpb24gb2YgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ0MDpcdFx0XHRfX21pZ3JhdGVfZm9saW9fcmVjb3JkKGRzdCwgb2xkX2ZvbGlvX3N0YXRlLCBhbm9uX3ZtYSk7XG4xNDQxOlx0XHRcdHJldHVybiByYztcbjE0NDI6XHRcdH1cbjE0NDM6XHRcbjE0NDQ6XHRcdG1pZ3JhdGVfZm9saW9fdW5kb19zcmMoc3JjLCBvbGRfZm9saW9fc3RhdGUgXHUwMDI2IEZPTElPX1dBU19NQVBQRUQsXG4xNDQ1Olx0XHRcdFx0ICAgICAgIGFub25fdm1hLCB0cnVlLCByZXQpO1xuMTQ0NjpcdFx0bWlncmF0ZV9mb2xpb191bmRvX2RzdChkc3QsIHRydWUsIHB1dF9uZXdfZm9saW8sIHByaXZhdGUpO1xuMTQ0NzpcdFxuMTQ0ODpcdFx0cmV0dXJuIHJjO1xuMTQ0OTpcdH1cbjE0NTA6XHRcbjE0NTE6XHQvKlxuMTQ1MjpcdCAqIENvdW50ZXJwYXJ0IG9mIHVubWFwX2FuZF9tb3ZlX3BhZ2UoKSBmb3IgaHVnZXBhZ2UgbWlncmF0aW9uLlxuMTQ1MzpcdCAqXG4xNDU0Olx0ICogVGhpcyBmdW5jdGlvbiBkb2VzbiYjMzk7dCB3YWl0IHRoZSBjb21wbGV0aW9uIG9mIGh1Z2VwYWdlIEkvT1xuMTQ1NTpcdCAqIGJlY2F1c2UgdGhlcmUgaXMgbm8gcmFjZSBiZXR3ZWVuIEkvTyBhbmQgbWlncmF0aW9uIGZvciBodWdlcGFnZS5cbjE0NTY6XHQgKiBOb3RlIHRoYXQgY3VycmVudGx5IGh1Z2VwYWdlIEkvTyBvY2N1cnMgb25seSBpbiBkaXJlY3QgSS9PXG4xNDU3Olx0ICogd2hlcmUgbm8gbG9jayBpcyBoZWxkIGFuZCBQR193cml0ZWJhY2sgaXMgaXJyZWxldmFudCxcbjE0NTg6XHQgKiBhbmQgd3JpdGViYWNrIHN0YXR1cyBvZiBhbGwgc3VicGFnZXMgYXJlIGNvdW50ZWQgaW4gdGhlIHJlZmVyZW5jZVxuMTQ1OTpcdCAqIGNvdW50IG9mIHRoZSBoZWFkIHBhZ2UgKGkuZS4gaWYgYWxsIHN1YnBhZ2VzIG9mIGEgMk1CIGh1Z2VwYWdlIGFyZVxuMTQ2MDpcdCAqIHVuZGVyIGRpcmVjdCBJL08sIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGhlYWQgcGFnZSBpcyA1MTIgYW5kIGEgYml0IG1vcmUuKVxuMTQ2MTpcdCAqIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHdlIHRyeSB0byBtaWdyYXRlIGh1Z2VwYWdlIHdob3NlIHN1YnBhZ2VzIGFyZVxuMTQ2MjpcdCAqIGRvaW5nIGRpcmVjdCBJL08sIHNvbWUgcmVmZXJlbmNlcyByZW1haW4gYWZ0ZXIgdHJ5X3RvX3VubWFwKCkgYW5kXG4xNDYzOlx0ICogaHVnZXBhZ2UgbWlncmF0aW9uIGZhaWxzIHdpdGhvdXQgZGF0YSBjb3JydXB0aW9uLlxuMTQ2NDpcdCAqXG4xNDY1Olx0ICogVGhlcmUgaXMgYWxzbyBubyByYWNlIHdoZW4gZGlyZWN0IEkvTyBpcyBpc3N1ZWQgb24gdGhlIHBhZ2UgdW5kZXIgbWlncmF0aW9uLFxuMTQ2NjpcdCAqIGJlY2F1c2UgdGhlbiBwdGUgaXMgcmVwbGFjZWQgd2l0aCBtaWdyYXRpb24gc3dhcCBlbnRyeSBhbmQgZGlyZWN0IEkvTyBjb2RlXG4xNDY3Olx0ICogd2lsbCB3YWl0IGluIHRoZSBwYWdlIGZhdWx0IGZvciBtaWdyYXRpb24gdG8gY29tcGxldGUuXG4xNDY4Olx0ICovXG4xNDY5Olx0c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbjE0NzA6XHRcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbjE0NzE6XHRcdFx0c3RydWN0IGZvbGlvICpzcmMsIGludCBmb3JjZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSxcbjE0NzI6XHRcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbjE0NzM6XHR7XG4xNDc0Olx0XHRzdHJ1Y3QgZm9saW8gKmRzdDtcbjE0NzU6XHRcdGludCByYyA9IC1FQUdBSU47XG4xNDc2Olx0XHRpbnQgcGFnZV93YXNfbWFwcGVkID0gMDtcbjE0Nzc6XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBOVUxMO1xuMTQ3ODpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBOVUxMO1xuMTQ3OTpcdFx0ZW51bSB0dHVfZmxhZ3MgdHR1ID0gMDtcbjE0ODA6XHRcbjE0ODE6XHRcdGlmIChmb2xpb19yZWZfY291bnQoc3JjKSA9PSAxKSB7XG4xNDgyOlx0XHRcdC8qIHBhZ2Ugd2FzIGZyZWVkIGZyb20gdW5kZXIgdXMuIFNvIHdlIGFyZSBkb25lLiAqL1xuMTQ4MzpcdFx0XHRmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3JjKTtcbjE0ODQ6XHRcdFx0cmV0dXJuIDA7XG4xNDg1Olx0XHR9XG4xNDg2Olx0XG4xNDg3Olx0XHRkc3QgPSBnZXRfbmV3X2ZvbGlvKHNyYywgcHJpdmF0ZSk7XG4xNDg4Olx0XHRpZiAoIWRzdClcbjE0ODk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAqKgoKT2theSwgc28gSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgdGhlIGNvbXBpbGF0aW9uIG9mIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBNeSBpbnR1aXRpb24gc2F5cyBpdCYjMzk7cyBwcm9iYWJseSBvbmx5IGJyb3VnaHQgaW50byBleGlzdGVuY2Ugd2hlbiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgZW5hYmxlZCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJdCYjMzk7cyB0b28gZWFzeSB0byBhc3N1bWUgdGhlc2UgdGhpbmdzLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgcHJlcHJvY2Vzc29yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXRzZWxmIG9yIGl0cyBkZWNsYXJhdGlvbi4gVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgZXZpZGVuY2U7IGEgcXVpY2sgc2VhcmNoIHNob3VsZCB0ZWxsIHRoZSB0YWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTQxMy1cbm1tL21pZ3JhdGUuYzo0MTQ6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21pZ3JhdGUuYy00MTUtXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4tLVxubW0vbWlncmF0ZS5jPTQ4MT12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuLS1cbm1tL21pZ3JhdGUuYy01MDgtXG5tbS9taWdyYXRlLmM6NTA5OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9taWdyYXRlLmMtNTEwLS8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOgoKKipDaGVja2luZyBmb3IgSHVnZVRMQiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB3ZSYjMzk7cmUgb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYG1pZ3JhdGVfaHVnZXRsYnNgIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgaXRzIGluY2x1c2lvbiBpcyBnb3Zlcm5lZCBieSB0aGUgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIGlzIGZ1bmRhbWVudGFsLCByaWdodD8gV2Ugd291bGRuJiMzOTt0IHdhbnQgY29kZSByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgbGVha2luZyBpbnRvIHRoZSBidWlsZCB1bmxlc3MgaHVnZSBwYWdlcyBhcmUgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSBldmVuIHRoZSBzbGlnaHRlc3Qgb3ZlcnNpZ2h0IGhlcmUgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBjb21waWxhdGlvbiBlcnJvcnMgZG93biB0aGUgbGluZSwgYW5kIHdlIG5lZWQgYSByb2NrLXNvbGlkIGZvdW5kYXRpb24uIEl04oCZcyBhbHdheXMgYmVzdCB0byBjaGVjayB0aGVzZSBzb3J0cyBvZiB0aGluZ3MgZmlyc3QsIGJlZm9yZSB3ZSBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlLCBhbmQgY29uZmlybSB0aGF0IG91ciBhc3N1bXB0aW9ucyBhYm91dCBjb25maWd1cmF0aW9uIGFyZSBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2h1Z2V0bGJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYz0xNjE0PXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcbi0tXG5tbS9taWdyYXRlLmMtMTYzMS0gKi9cbm1tL21pZ3JhdGUuYzoxNjMyOnN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxubW0vbWlncmF0ZS5jLTE2MzMtXHRcdFx0ICAgIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tLVxubW0vbWlncmF0ZS5jPTIwOTQ9aW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMjEwOS1cbm1tL21pZ3JhdGUuYzoyMTEwOlx0cmNfZ2F0aGVyID0gbWlncmF0ZV9odWdldGxicyhmcm9tLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLFxubW0vbWlncmF0ZS5jLTIxMTEtXHRcdFx0XHQgICAgIG1vZGUsIHJlYXNvbiwgXHUwMDI2c3RhdHMsIFx1MDAyNnJldF9mb2xpb3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjg5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBhbmQgRGVwZW5kZW5jaWVzIG9mIGBtaWdyYXRlX2h1Z2V0bGJzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWlncmF0ZV9odWdldGxic2AgZnVuY3Rpb24sIGFuZCBzb21ldGhpbmcmIzM5O3MgaW1tZWRpYXRlbHkgc3RyaWtpbmcgbWUuIEl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBndWFyZGVkIGJ5IGEgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGF0IG1lYW5zIGl0IG1pZ2h0IGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB1bmNvbmRpdGlvbmFsbHksIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBIdWdlVExCIHN1cHBvcnQgaXMgYWN0dWFsbHkgZW5hYmxlZCBhdCBib290IHRpbWUuIFRoZSB3YXkgaXQgd29ya3MsIHRoZW4sIHdvdWxkIGJlIHRvIGR5bmFtaWNhbGx5IHByb2Nlc3MgaHVnZXRsYiBwYWdlcyBpZiB0aGV5IGhhcHBlbiB0byBleGlzdC4gSW50ZXJlc3RpbmcgYXBwcm9hY2guIEkmIzM5O2xsIGhhdmUgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBtaWdodCBhZmZlY3QgbW9kdWxlIGxvYWRpbmcgb3Igc3lzdGVtIGluaXRpYWxpemF0aW9uLCBpZiBhdCBhbGwuCgpXYWl0IGEgc2Vjb25kLCBJIHNlZSBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGJlaW5nIHVzZWQgaW4gdGhlcmUuIFRoYXQgZnVuY3Rpb24gc291bmRzIGxpa2UgaXQgZGVhbHMgd2l0aCBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcywgd2hpY2ggc3VnZ2VzdHMgd2UgbmVlZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBmb3IgdGhpcyBmZWF0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB3ZSYjMzk7bGwgbmVlZCB0byBiZSBtaW5kZnVsIG9mIGl0cyBpbnRlcnBsYXkgd2l0aCBvdGhlciBtZW1vcnkgZXJyb3IgaGFuZGxpbmcgY29tcG9uZW50cy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzeXN0ZW0gaXMgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgdGhlIGtpbmQgb2YgbWVtb3J5IGZhaWx1cmVzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gcm9idXN0bmVzcyBhbmQgZXJyb3IgcmVjb3ZlcnksIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyByZWxhdGlvbnNoaXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcxLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA3MjpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNzMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Nzk3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBQYWdlIEZsYWdzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIHNob3VsZCBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGVzZSBwYWdlIGZsYWdzPyBMZXQmIzM5O3MgemVybyBpbiBvbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA3Mi4gVGhhdCBsb2NhdGlvbiBpcyB1c3VhbGx5IGEgZ29vZCBiZXQgZm9yIGZpbmRpbmcgc29tZSBvZiB0aGUgY29yZSBkZWZpbml0aW9ucyBvciBtYXliZSBhIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byBwYWdlIGZsYWdzLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZsYWdzIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0IGtleSBjb25zaWRlcmF0aW9ucyBhcmUgaW52b2x2ZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2MDpcdCAqIGZhaWxpbmcgaGFyZHdhcmUuXG4xMDYxOlx0ICovXG4xMDYyOlx0c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4xMDYzOlx0e1xuMTA2NDpcdFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbztcbjEwNjU6XHRcbjEwNjY6XHRcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXG4xMDY3Olx0XHRcdHJldHVybiB0cnVlO1xuMTA2ODpcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuMTA2OTpcdFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgXHUwMDI2XHUwMDI2IFBhZ2VIV1BvaXNvbihcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbjEwNzA6XHR9XG4xMDcxOlx0XG4xMDcyOlx0c3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4xMDczOlx0e1xuMTA3NDpcdFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XG4xMDc1Olx0XHQgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XG4xMDc2Olx0fVxuMTA3NzpcdFxuMTA3ODpcdGJvb2wgaXNfZnJlZV9idWRkeV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbjEwNzk6XHRcbjEwODA6XHQjaWZkZWYgQ09ORklHX01JR1JBVElPTlxuMTA4MTpcdC8qXG4xMDgyOlx0ICogVGhpcyBwYWdlIGlzIG1pZ3JhdGFibGUgdGhyb3VnaCBtb3ZhYmxlX29wcyAoZm9yIHNlbGVjdGVkIHR5cGVkIHBhZ2VzXG4xMDgzOlx0ICogb25seSkuXG4xMDg0Olx0ICpcbjEwODU6XHQgKiBQYWdlIG1pZ3JhdGlvbiBvZiBzdWNoIHBhZ2VzIG1pZ2h0IGZhaWwsIGZvciBleGFtcGxlLCBpZiB0aGUgcGFnZSBpc1xuMTA4NjpcdCAqIGFscmVhZHkgaXNvbGF0ZWQgYnkgc29tZWJvZHkgZWxzZSwgb3IgaWYgdGhlIHBhZ2UgaXMgYWJvdXQgdG8gZ2V0IGZyZWVkLlxuMTA4NzpcdCAqXG4xMDg4Olx0ICogV2hpbGUgYSBzdWJzeXN0ZW0gbWlnaHQgc2V0IHNlbGVjdGVkIHR5cGVkIHBhZ2VzIHRoYXQgc3VwcG9ydCBwYWdlIG1pZ3JhdGlvblxuMTA4OTpcdCAqIGFzIGJlaW5nIG1vdmFibGUgdGhyb3VnaCBtb3ZhYmxlX29wcywgaXQgbXVzdCBuZXZlciBjbGVhciB0aGlzIGZsYWcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEhhcmR3YXJlIFBvaXNvbmluZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSBkZWZpbmVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBoYXZlIGhhcmR3YXJlIHBvaXNvbmluZyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBzaG91bGRuJiMzOTt0IGl0cyBleGlzdGVuY2UgYmUgdGllZCB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgc2luY2UgaGFyZHdhcmUgcG9pc29uaW5nIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhhdCBmZWF0dXJlPyBJZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpc24mIzM5O3QgZW5hYmxlZCwgd291bGRuJiMzOTt0IGBmb2xpb190ZXN0X2h3cG9pc29uYCBqdXN0IHJldHVybiBgZmFsc2VgIGFueXdheSwgcmVuZGVyaW5nIGBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZWAgcG90ZW50aWFsbHkgcmVkdW5kYW50PyBJdCBpcyB3b3J0aCBjaGVja2luZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZvbGlvX3Rlc3RfaHdwb2lzb25gIGluIG1vcmUgZGV0YWlsOyBpdCBpcyB0aGUga2V5IHBpZWNlIGhlcmUuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoYXQgbmV4dCB0byBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBob3cgaXQgaW1wYWN0cyBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIHdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3Rlc3RfaHdwb2lzb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDcyPXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3My17XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDc0Olx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDc1LVx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgSGFyZHdhcmUgUG9pc29uaW5nIEZsYWcgRGVmaW5pdGlvbnMqKgoKUmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBndXQgZmVlbGluZyBpcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGhhcmR3YXJlLWluZHVjZWQgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCB0aGUga2VybmVsIGxpa2VseSBoYXMgc29tZSBkZWRpY2F0ZWQgZmxhZ3MgZm9yIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzLCBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgbWFjcm8gZGVmaW5pdGlvbnMuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgYGdyZXBgIHNlYXJjaC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAg4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3BvdCBmb3IgcGFnZS1yZWxhdGVkIGZsYWdzLiBUaGUga2V5IHNlYXJjaCB0ZXJtcyBhcmUgZ29pbmcgdG8gYmUgYWxvbmcgdGhlIGxpbmVzIG9mIGBQQUdFRkxBRyhIV1BvaXNvbilgIG9yIHNpbWlsYXIgdmFyaWF0aW9ucyB0aGF0IHJlbGF0ZSB0byBoYXJkd2FyZS1kZXRlY3RlZCBlcnJvcnMsIGNvcnJ1cHRpb24sIG9yIHBvaXNvbmluZyBvZiBtZW1vcnkgcGFnZXMuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byB0aGluayBjcmVhdGl2ZWx5IGFib3V0IHRoZSBwb3NzaWJsZSBuYW1pbmcgY29udmVudGlvbnMsIHRvIG1ha2UgdGhlIGBncmVwYCBzZWFyY2ggbW9yZSBlZmZlY3RpdmUuIEZyb20gdGhlcmUsIEkgY2FuIGludmVzdGlnYXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHJlc3VsdGluZyBkZWZpbml0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgbGlzdCBvZiBkZWZpbml0aW9ucyB0byB0aGVuIHN0YXJ0IGFuYWx5emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SFdQb2lzb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD02NDc9Rk9MSU9fRkxBR19GQUxTRShtbG9ja2VkKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1My0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2NTQ6UEFHRUZMQUcoSFdQb2lzb24sIGh3cG9pc29uLCBQRl9BTlkpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2NTU6VEVTVFNDRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1Ni0jZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcdTAwM2NcdTAwM2MgUEdfaHdwb2lzb24pXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02NTctI2Vsc2VcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjY1ODpQQUdFRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02NTktI2RlZmluZSBfX1BHX0hXUE9JU09OIDBcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD04Nzc9Rk9MSU9fRkxBR19GQUxTRShwYXJ0aWFsbHlfbWFwcGVkKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTg4My0vKlxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6ODg0OiAqIFBhZ2VIYXNIV1BvaXNvbmVkIGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IG9uZSBzdWJwYWdlIGlzIGh3cG9pc29uZWQgaW4gdGhlXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC04ODUtICogY29tcG91bmQgcGFnZS5cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDUyPXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDU3LS8qXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDU4OiAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDU5LSAqIGJlc3QgZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGhcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDYyPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNjUtXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDY2Olx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNjctXHRcdHJldHVybiB0cnVlO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNjk6XHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUmIzM5O3MgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNlY3Rpb24gYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgaGVyZS4gV2l0aG91dCBpdCwgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBmb2xpb190ZXN0X2h3cG9pc29uYCBhbmQgYGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWRgIHdpbGwgYWx3YXlzIGV2YWx1YXRlIHRvIGZhbHNlLCB3aGljaCBpcyBubyBnb29kIGZvciB0ZXN0aW5nIHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0IHByb3Blcmx5LgoKVGhlbiB0aGVyZSYjMzk7cyBgQ09ORklHX01JR1JBVElPTmA7IHNlZW1zIHByZXR0eSBvYnZpb3VzIHRoYXQgSSYjMzk7bGwgbmVlZCB0aGF0IHRvIGV2ZW4gY29tcGlsZSBgbW0vbWlncmF0ZS5jYC4gQ2FuJiMzOTt0IHJlYWxseSBnZXQgYW55d2hlcmUgd2l0aG91dCB0aGF0LiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGVzc2VudGlhbCBpZiBJIGFjdHVhbGx5IHdhbnQgdG8gdGVzdCB0aGUgaHVnZSBwYWdlIG1pZ3JhdGlvbiBmdW5jdGlvbmFsaXR5LiBNYWtlcyBzZW5zZSwgSSBuZWVkICpzb21ldGhpbmcqIHRvIG1pZ3JhdGUuCgpOb3csIEkmIzM5O20ganVzdCBjdXJpb3VzIGFib3V0IGBDT05GSUdfSFVHRVRMQl9QQUdFYC4gSSB3YW50IHRvIHZlcmlmeSBpZiBpdCYjMzk7cyBzdHJpY3RseSAqcmVxdWlyZWQqLiBJIHNlZSB0aGF0IGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIGNhbGxlZCBmcm9tIGBtaWdyYXRlX2h1Z2V0bGJzYC4gSG1tLi4uIGlmIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBkaXNhYmxlZCwgY291bGQgYG1pZ3JhdGVfaHVnZXRsYnNgIHBvc3NpYmx5IGp1c3QgYmUgYSBuby1vcD8gVGhhdCB3b3VsZCBtYWtlIHNlbnNlIGZyb20gYSBkZXNpZ24gcGVyc3BlY3RpdmUuIExldCYjMzk7cyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1pZ3JhdGVfaHVnZXRsYnNgIGFuZCBzZWUgd2hhdCBpdCBhY3R1YWxseSBkb2VzIHdoZW4gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIG5vdCBlbmFibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gdGhhdCBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYzMjpcdHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuMTYzMzpcdFx0XHRcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuMTYzNDpcdFx0XHRcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbjE2MzU6XHRcdFx0XHQgICAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxuMTYzNjpcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zKVxuMTYzNzpcdHtcbjE2Mzg6XHRcdGludCByZXRyeSA9IDE7XG4xNjM5Olx0XHRpbnQgbnJfZmFpbGVkID0gMDtcbjE2NDA6XHRcdGludCBucl9yZXRyeV9wYWdlcyA9IDA7XG4xNjQxOlx0XHRpbnQgcGFzcyA9IDA7XG4xNjQyOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqZm9saW8yO1xuMTY0MzpcdFx0aW50IHJjLCBucl9wYWdlcztcbjE2NDQ6XHRcbjE2NDU6XHRcdGZvciAocGFzcyA9IDA7IHBhc3MgXHUwMDNjIE5SX01BWF9NSUdSQVRFX1BBR0VTX1JFVFJZIFx1MDAyNlx1MDAyNiByZXRyeTsgcGFzcyYjNDM7JiM0MzspIHtcbjE2NDY6XHRcdFx0cmV0cnkgPSAwO1xuMTY0NzpcdFx0XHRucl9yZXRyeV9wYWdlcyA9IDA7XG4xNjQ4Olx0XG4xNjQ5Olx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgZm9saW8yLCBmcm9tLCBscnUpIHtcbjE2NTA6XHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4xNjUxOlx0XHRcdFx0XHRjb250aW51ZTtcbjE2NTI6XHRcbjE2NTM6XHRcdFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbjE2NTQ6XHRcbjE2NTU6XHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjE2NTY6XHRcbjE2NTc6XHRcdFx0XHQvKlxuMTY1ODpcdFx0XHRcdCAqIE1pZ3JhdGFiaWxpdHkgb2YgaHVnZXBhZ2VzIGRlcGVuZHMgb24gYXJjaGl0ZWN0dXJlcyBhbmRcbjE2NTk6XHRcdFx0XHQgKiB0aGVpciBzaXplLiAgVGhpcyBjaGVjayBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzb21lIGNhbGxlcnNcbjE2NjA6XHRcdFx0XHQgKiBvZiBodWdlcGFnZSBtaWdyYXRpb24gbGlrZSBzb2Z0IG9mZmxpbmUgYW5kIG1lbW9yeVxuMTY2MTpcdFx0XHRcdCAqIGhvdHJlbW92ZSBkb24mIzM5O3Qgd2FsayB0aHJvdWdoIHBhZ2UgdGFibGVzIG9yIGNoZWNrIHdoZXRoZXJcbjE2NjI6XHRcdFx0XHQgKiB0aGUgaHVnZXBhZ2UgaXMgcG1kLWJhc2VkIG9yIG5vdCBiZWZvcmUga2lja2luZyBtaWdyYXRpb24uXG4xNjYzOlx0XHRcdFx0ICovXG4xNjY0Olx0XHRcdFx0aWYgKCFodWdlcGFnZV9taWdyYXRpb25fc3VwcG9ydGVkKGZvbGlvX2hzdGF0ZShmb2xpbykpKSB7XG4xNjY1Olx0XHRcdFx0XHRucl9mYWlsZWQmIzQzOyYjNDM7O1xuMTY2NjpcdFx0XHRcdFx0c3RhdHMtXHUwMDNlbnJfZmFpbGVkX3BhZ2VzICYjNDM7PSBucl9wYWdlcztcbjE2Njc6XHRcdFx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgcmV0X2ZvbGlvcyk7XG4xNjY4Olx0XHRcdFx0XHRjb250aW51ZTtcbjE2Njk6XHRcdFx0XHR9XG4xNjcwOlx0XG4xNjcxOlx0XHRcdFx0cmMgPSB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UoZ2V0X25ld19mb2xpbyxcbjE2NzI6XHRcdFx0XHRcdFx0XHQgICAgICBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLFxuMTY3MzpcdFx0XHRcdFx0XHRcdCAgICAgIGZvbGlvLCBwYXNzIFx1MDAzZSAyLCBtb2RlLFxuMTY3NDpcdFx0XHRcdFx0XHRcdCAgICAgIHJlYXNvbiwgcmV0X2ZvbGlvcyk7XG4xNjc1Olx0XHRcdFx0LypcbjE2NzY6XHRcdFx0XHQgKiBUaGUgcnVsZXMgYXJlOlxuMTY3NzpcdFx0XHRcdCAqXHQwOiBodWdldGxiIGZvbGlvIHdpbGwgYmUgcHV0IGJhY2tcbjE2Nzg6XHRcdFx0XHQgKlx0LUVBR0FJTjogc3RheSBvbiB0aGUgZnJvbSBsaXN0XG4xNjc5Olx0XHRcdFx0ICpcdC1FTk9NRU06IHN0YXkgb24gdGhlIGZyb20gbGlzdFxuMTY4MDpcdFx0XHRcdCAqXHRPdGhlciBlcnJubzogcHV0IG9uIHJldF9mb2xpb3MgbGlzdFxuMTY4MTpcdFx0XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyB0aGUgRm9saW8gRmlsdGVyaW5nIEZ1bmN0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gSXQmIzM5O3MgY2xlYXJseSBhIGZpbHRlcmluZyBmdW5jdGlvbiBmb3IgZm9saW9zLCBsaWtlbHkgcmVsYXRlZCB0byBIdWdlVExCIHBhZ2VzLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGUgcG90ZW50aWFsIGJlaGF2aW9yIHdoZW4gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGRpc2FibGVkLiBJZiB0aGF0IGNvbmZpZyBvcHRpb24gaXNuJiMzOTt0IHNldCwgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGlzIGZ1bmN0aW9uIHdpbGwgKmFsd2F5cyogcmV0dXJuIGZhbHNlLCBvciBhdCBsZWFzdCBiZWhhdmUgaW4gYSBsZXNzLXRoYW4taWRlYWwgbWFubmVyLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBxdWVzdGlvbnMgYWJvdXQgd2hldGhlciB0aGlzIG1pZ2h0IGJlIGEgc291cmNlIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9saW9fdGVzdF9odWdldGxiYCB0byBjb25maXJtIHRoaXMgc3VzcGljaW9uIGFuZCwgaWYgaXQgZG9lcyBiZWhhdmUgdGhpcyB3YXksIHVuZGVyc3RhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpbiBteSBzcGVjaWZpYyBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGNoZWNrIGl0cyBhY3R1YWwgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3Rlc3RfaHVnZXRsYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNTI9c3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1My17XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDU0Olx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTUtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNjI9c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNjk6XHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTk0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGZvbGlvX3Rlc3RfaHVnZXRsYmAgRGVmaW5pdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYGZvbGlvX3Rlc3RfaHVnZXRsYmAuIEl0JiMzOTtzIGNsZWFybHkgYSBmdW5jdGlvbiBvciBtYWNybyByZWxhdGVkIHRvIGh1Z2UgcGFnZXMsIGdpdmVuIHRoZSBuYW1lLCBidXQgSSBuZWVkIHRoZSBwcmVjaXNlIGRldGFpbHMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgcHVycG9zZS4gQSBxdWljayBgZ3JlcGAgd2lsbCBiZSB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGxvY2F0ZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bmN0aW9uJiMzOTtzIHNpZ25hdHVyZSBhbmQsIGlkZWFsbHksIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIGl0cyBpbnRlbmRlZCB1c2UuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSB0dXJuIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb190ZXN0X2h1Z2V0bGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD01OTk9c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2MDA6Ym9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTYwMS1cdHtcdHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTYyMD1zdGF0aWMgaW5saW5lIGJvb2xcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NjIxOmZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjIyLVx0eyByZXR1cm4gMDsgfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTg1MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODUyLXtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjg1MzpcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODU0LVx0cmV0dXJuIHNpemVfdG9faHN0YXRlKGZvbGlvX3NpemUoZm9saW8pKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmg9NjE9X19odWdldGxiX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcnN2ZClcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC02Mi17XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmg6NjM6XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC02NC1cdGlmIChyc3ZkKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaD04MT1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfaHVnZXRsYl9jZ3JvdXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtODMte1xuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oOjg0Olx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtODUtXHRpZiAocnN2ZClcbi0tXG5pbmNsdWRlL2xpbnV4L2lvdl9pdGVyLmg9MjA0PXNpemVfdCBpdGVyYXRlX3hhcnJheShzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBsZW4sIHZvaWQgKnByaXYsIHZvaWQgKnByaXYyLFxuLS1cbmluY2x1ZGUvbGludXgvaW92X2l0ZXIuaC0yMjAtXHRcdFx0YnJlYWs7XG5pbmNsdWRlL2xpbnV4L2lvdl9pdGVyLmg6MjIxOlx0XHRpZiAoV0FSTl9PTihmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSlcbmluY2x1ZGUvbGludXgvaW92X2l0ZXIuaC0yMjItXHRcdFx0YnJlYWs7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTI4OTA9c3RhdGljIGlubGluZSBib29sIGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjg5NC1cdC8qIE9ubHkgcGFydGlhbGx5LW1hcHBhYmxlIGZvbGlvcyByZXF1aXJlIG1vcmUgY2FyZS4gKi9cbmluY2x1ZGUvbGludXgvbW0uaDoyODk1Olx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSB8fCB1bmxpa2VseShmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSlcbmluY2x1ZGUvbGludXgvbW0uaC0yODk2LVx0XHRyZXR1cm4gbWFwY291bnQgXHUwMDNlIDE7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTI5NDk9c3RhdGljIGlubGluZSBpbnQgZm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTI5NTMtXG5pbmNsdWRlL2xpbnV4L21tLmg6Mjk1NDpcdGlmIChXQVJOX09OX09OQ0UocGFnZV9oYXNfdHlwZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKVxuaW5jbHVkZS9saW51eC9tbS5oLTI5NTUtXHRcdHJldHVybiAwO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNTI9c3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1My17XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDU0Olx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTUtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNjI9c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNjk6XHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MC19XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmg9MTM1PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZvbGlvX2xhcmdlX21hcGNvdW50X3Nhbml0eV9jaGVja3MoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC0xMzcte1xuaW5jbHVkZS9saW51eC9ybWFwLmg6MTM4Olx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSB8fCBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKTtcbmluY2x1ZGUvbGludXgvcm1hcC5oLTEzOS1cdFZNX1dBUk5fT05fT05DRShkaWZmIFx1MDAzYz0gMCk7XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmg9MzMxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2ZvbGlvX3JtYXBfc2FuaXR5X2NoZWNrcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oLTMzNC1cdC8qIGh1Z2V0bGIgZm9saW9zIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuICovXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDozMzU6XHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbmluY2x1ZGUvbGludXgvcm1hcC5oLTMzNi1cbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD00MzU9c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl90cnlfZHVwX2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oLTQzNy17XG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo0Mzg6XHRWTV9XQVJOX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3JtYXAuaC00MzktXHRWTV9XQVJOX09OX0ZPTElPKCFmb2xpb190ZXN0X2Fub24oZm9saW8pLCBmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmg9NDUyPXN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9ybWFwLmgtNDUzLXtcbmluY2x1ZGUvbGludXgvcm1hcC5oOjQ1NDpcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbmluY2x1ZGUvbGludXgvcm1hcC5oLTQ1NS1cdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfYW5vbihmb2xpbyksIGZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD00NzU9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfYWRkX2ZpbGVfcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9ybWFwLmgtNDc2LXtcbmluY2x1ZGUvbGludXgvcm1hcC5oOjQ3NzpcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbmluY2x1ZGUvbGludXgvcm1hcC5oLTQ3OC1cdFZNX1dBUk5fT05fRk9MSU8oZm9saW9fdGVzdF9hbm9uKGZvbGlvKSwgZm9saW8pO1xuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oPTQ4ND1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9yZW1vdmVfcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9ybWFwLmgtNDg1LXtcbmluY2x1ZGUvbGludXgvcm1hcC5oOjQ4NjpcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbmluY2x1ZGUvbGludXgvcm1hcC5oLTQ4Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBEZWZpbml0aW9uIG9mIGBmb2xpb190ZXN0X2h1Z2V0bGJgKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGZvbGlvX3Rlc3RfaHVnZXRsYmAgaXMgZGVmaW5lZC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IGl0IHdhcyBkZWZpbmVkIHNpbWlsYXJseSB0byBvdGhlciBwYWdlIGZsYWdzLCBwcm9iYWJseSBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBQQUdFRkxBRyhIdWdldGxiLCBodWdldGxiLCBQRl9TRUNPTkQpYC4gSSB0b29rIGEgcXVpY2sgbG9vaywgb3IgYXQgbGVhc3Qgc2Nhbm5lZCB0aGUgZmlsZSwgYnV0IEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgaXQuIExldCBtZSB2ZXJpZnkgd2l0aCBgZ3JlcGAsIGp1c3QgdG8gYmUgY2VydGFpbi4gSSYjMzk7bGwgc2VhcmNoIGZvciBgZm9saW9fdGVzdF9odWdldGxiYCB3aXRoaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBhbmQgbWFrZSBzdXJlIGl0IGlzIG5vdCBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdGVzdF9odWdldGxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA1Mj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDUzLXtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNTQ6XHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1NS19XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDY4LVx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA2OTpcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIFx1MDAyNlx1MDAyNiBQYWdlSFdQb2lzb24oXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqVHJhY2luZyB0aGUgRGVmaW5pdGlvbiBvZiBgZm9saW9fdGVzdF9odWdldGxiYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSBgZm9saW9fdGVzdF9odWdldGxiYCwgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIHN0YXJ0cyB0byBwaW5nLiBXaGVyZSAqZXhhY3RseSogaXMgdGhpcyBmdW5jdGlvbiBvciBtYWNybyBkZWZpbmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gSXMgaXQgYSBmdW5jdGlvbiwgYSBtYWNybywgc29tZXRoaW5nIGVsc2U/IEFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCBmaWxlIGFuZCBtb2R1bGUgaXMgaXQgaW4/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgb3JpZ2luIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgdG8gdHJ1bHkgdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBhbmQgbG9naWMgc3Vycm91bmRpbmcgdGhpcyBwaWVjZSBvZiBjb2RlLiBJIG5lZWQgdG8gZ2V0IHRvIHRoZSByb290IG9mIGl0cyBtZWFuaW5nIGJlZm9yZSBkaXZpbmcgYW55IGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgZm9saW9fdGVzdF9odWdldGxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIEh1Z2VUTEIgRmxhZyBEZWZpbml0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRlZmluZXMgSHVnZVRMQi1yZWxhdGVkIGZsYWdzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UsIGFuZCB0aGUgbGlrZWx5IHNwb3QgZm9yIHRoYXQgaXMgYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYC4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcnVjaWFsIG1hY3JvcyBhbmQgZGVmaW5pdGlvbnMgZm9yIGhhbmRsaW5nIEh1Z2VUTEIgcGFnZXMgd2lsbCByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgZmxhZyBuYW1lcy4gQSBxdWljayBgZ3JlcCBodWdldGxiYCBzaG91bGQgcXVpY2tseSBsb2NhdGUgdGhlIHJlbGV2YW50IGxpbmVzLiBUaGF0IHNob3VsZCBnZXQgbWUgc3RhcnRlZCB3aXRoIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBmbGFnIGlkZW50aWZpZXJzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9OTAwPWVudW0gcGFnZXR5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTkwNi1cdFBHVFlfZ3VhcmRcdFx0PSAweGYzLFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6OTA3Olx0UEdUWV9odWdldGxiXHRcdD0gMHhmNCxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTkwOC1cdFBHVFlfc2xhYlx0XHQ9IDB4ZjUsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTAyNj1QQUdFX1RZUEVfT1BTKFNsYWIsIHNsYWIsIHNsYWIpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTAyOC0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTAyOTpGT0xJT19UWVBFX09QUyhodWdldGxiLCBodWdldGxiKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTAzMC0jZWxzZVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTAzMTpGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwMzItI2VuZGlmXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA0Mj1QQUdFX1RZUEVfT1BTKExhcmdlS21hbGxvYywgbGFyZ2Vfa21hbGxvYywgbGFyZ2Vfa21hbGxvYylcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDQ0LS8qKlxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA0NTogKiBQYWdlSHVnZSAtIERldGVybWluZSBpZiB0aGUgcGFnZSBiZWxvbmdzIHRvIGh1Z2V0bGJmc1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA0Ni0gKiBAcGFnZTogVGhlIHBhZ2UgdG8gdGVzdC5cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDQ4LSAqIENvbnRleHQ6IEFueSBjb250ZXh0LlxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA0OTogKiBSZXR1cm46IFRydWUgZm9yIGh1Z2V0bGJmcyBwYWdlcywgZmFsc2UgZm9yIGFub24gcGFnZXMgb3IgcGFnZXNcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTAtICogYmVsb25naW5nIHRvIG90aGVyIGZpbGVzeXN0ZW1zLlxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNTI9c3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1My17XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDU0Olx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTUtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNjI9c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNjk6XHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTU2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1pZ3JhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZXMgYW5kIG1pZ3JhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5LiBMZXQgbWUgYnJlYWsgdGhpcyBkb3duLi4uCgpGaXJzdCwgaXQgc2VlbXMgdGhpcyBpcyBhbGwgdGllZCB0byBgRk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYilgLCB3aGljaCBsZWFkcyB1cyB0byBgZm9saW9fdGVzdF9odWdldGxiYC4gIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRWAuIElmIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpc24mIzM5O3QgZGVmaW5lZCwgd2UgZmFsbCBiYWNrIHRvIGBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilgLCBlc3NlbnRpYWxseSBtYWtpbmcgYGZvbGlvX3Rlc3RfaHVnZXRsYmAgYWx3YXlzIHJldHVybiBmYWxzZS4gVGhpcyBtZWFucyB0aGUgYG1pZ3JhdGVfaHVnZXRsYnNgIGZ1bmN0aW9uIHdvdWxkIGp1c3QgYnlwYXNzIGFsbCB0aGUgZm9saW9zIGFuZCBkbyBub3RoaW5nLiBUaGlzIG1lYW5zIHdlJiMzOTtsbCBuZXZlciByZWFjaCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC4gT2theSwgc28gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgdG8gZXZlbiAqZ2V0KiB0byB3aGVyZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nLgoKU28sIHRvIHByb3Blcmx5IHNldCB0aGUgc2NlbmUsIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmU6CgoqICAgYE1JR1JBVElPTmAgLSB0aGlzIGlzIG5lZWRlZCB0byBjb21waWxlIHRoZSBgbW0vbWlncmF0ZS5jYCBmaWxlLgoqICAgYEhVR0VUTEJfUEFHRWAgLSB3aGljaCBpcyBlc3NlbnRpYWwgZm9yIGBmb2xpb190ZXN0X2h1Z2V0bGJgIHRvIHJldHVybiB0cnVlIHNvIHRoYXQgd2UgKmNhbiogcmVhY2ggYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuCiogICBgTUVNT1JZX0ZBSUxVUkVgIC0gdGhpcyBuZWVkcyB0byBiZSBlbmFibGVkIHNvIHRoYXQgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCB3aWxsIHJldHVybiB0cnVlIGFuZCBzdWJzZXF1ZW50bHkgdHJpZ2dlciB0aGUgbmV3IGNvZGUgcGF0aCB3aXRoaW4gYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuCgpJJiMzOTtsbCBkb3VibGUgY2hlY2sgaWYgYE1JR1JBVElPTmAgaXMgY29tbW9ubHkgZW5hYmxlZCBhbHJlYWR5LCBtYXliZSB0aHJvdWdoIGBOVU1BYCBvciBgQ09NUEFDVElPTmAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4gQnV0IGBNRU1PUllfRkFJTFVSRWAgaXMgYSBsaXR0bGUgbW9yZSBzcGVjaWFsaXplZCwgbGlrZWx5IHRpZWQgdG8gaGFyZHdhcmUgcG9pc29uaW5nIHNwZWNpZmljYWxseSwgd2hpY2ggaXNuJiMzOTt0IGFsd2F5cyBlbmFibGVkIGJ5IGRlZmF1bHQuICBgSFVHRVRMQl9QQUdFYCBpcyBwcm9iYWJseSBhbHNvIGNvbW1vbmx5IGVuYWJsZWQsIGJ1dCB3b3J0aCBtZW50aW9uaW5nIGZvciBjbGFyaXR5LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBJIHNlZSBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBpcyBzdGF0aWMuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBUaGUgY2VudHJhbCBmb2N1cyBvZiBkZWJ1Z2dpbmcgb3IgZnV6emluZyB3aWxsIGVpdGhlciBiZSBpbiBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBvciBgbWlncmF0ZV9odWdldGxic2Agb3IgZXZlbiBgbWlncmF0ZV9wYWdlc2AuIFNpbmNlIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIHN0YXRpYywgd2UgY2FuIHVzZSBgbWlncmF0ZV9odWdldGxic2AgYW5kIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBXYWl0Li4uIHN5emthbGxlciAqY2FuKiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMsIGlmIHRoZXkmIzM5O3JlIGluIHRoZSBzeW1ib2wgdGFibGUsIGJ1dCBvZnRlbiBwcm92aWRpbmcgdGhlIGNhbGxlciBpcyBiZXR0ZXIgaWYgdGhlIHN0YXRpYyBmdW5jdGlvbiBpcyBpbmxpbmVkLgoKT2theSwgbGV0JiMzOTtzIGNoZWNrIGlmIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIGlubGluZWQuIEl0IGxvb2tzIHByZXR0eSBoZWZ0eSwgc28gcHJvYmFibHkgbm90LiBJJiMzOTtsbCBwcm92aWRlIGJvdGggYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgYW5kIGBtaWdyYXRlX2h1Z2V0bGJzYC4KCk5vdywgcmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGY6CgpgYGBjCkBAIC0xNTEwLDYgJiM0MzsxNTEwLDExIEBAIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKJiM0MzsJaWYgKHVubGlrZWx5KGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHNyYykpKSB7CiYjNDM7CQlyYyA9IC1FSFdQT0lTT047CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKIAlpZiAoZm9saW9fdGVzdF9hbm9uKHNyYykpCiAJCWFub25fdm1hID0gZm9saW9fZ2V0X2Fub25fdm1hKHNyYyk7CiBgYGAKCkFscmlnaHQsIHRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgcHJldmVudGluZyB0aGUgbWlncmF0aW9uIG9mIGh1Z2UgcGFnZXMgdGhhdCBoYXZlIGEgaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZS4gSXQmIzM5O2xsIHJldHVybiBgLUVIV1BPSVNPTmAgaWYgaXQgZmluZHMgdGhhdC4KClNvIHRvIHJlY2FwOgoKKiAgICoqQ29uZmlnczoqKiBgTUlHUkFUSU9OYCwgYEhVR0VUTEJfUEFHRWAsIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGFyZSBuZWNlc3NhcnkuCiogICAqKkZvY3VzIHN5bWJvbHM6KiogYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgYW5kIGBtaWdyYXRlX2h1Z2V0bGJzYCBhcmUga2V5LgoqICAgKipSZWFzb25pbmc6KiogVGhlIGNoYW5nZSBhZGRzIGEgY2hlY2sgdG8gc2hvcnQtY2lyY3VpdCBodWdlIHBhZ2UgbWlncmF0aW9uIGlmIEhXIHBvaXNvbiBpcyBwcmVzZW50LCByZXR1cm5pbmcgYC1FSFdQT0lTT05gLiBUaGlzIG5lY2Vzc2l0YXRlcyBIVUdFVExCIGFuZCBNRU1PUllfRkFJTFVSRSwgd2hpbGUgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZXMgTUlHUkFUSU9OIHRvIGJlIGVuYWJsZWQuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSBgQ09ORklHX01JR1JBVElPTmAgaXMgdGhlIHJpZ2h0IGNvbmZpZyBuYW1lLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk1LVxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDkyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBzZWxmLXJlZmxlY3Rpb246CgoqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCAqTWlncmF0aW9uKiBmZWVscyByaWdodCwgaW50dWl0aXZlbHkuIFRoYXQmIzM5O3MgdGhlIGNvcmUgY29uY2VwdC4gTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgdGhlIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbnMgc3VwcG9ydCB0aGlzIGFwcHJvYWNoLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBjb3JyZWN0bHkgc2V0LiBJdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIEkmIzM5O20gYW50aWNpcGF0aW5nLiBUaGF0IHNldHRpbmcgd2lsbCBiZSBwaXZvdGFsIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIEkgd2FudCB0byBiZSAxMDAlIG9uIHRoYXQgcG9pbnQgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ3MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKlZlcmlmeWluZyB0aGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGl0LCBgSFVHRVRMQl9QQUdFYCBpcyBkZWZpbml0ZWx5IHRoZSBuYW1lIEkmIzM5O20gbG9va2luZyBmb3IuIE5vIG5lZWQgdG8gc2Vjb25kLWd1ZXNzIHRoYXQgb25lLiBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQuIEp1c3Qgd2FudCB0byBtYWtlIHN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgc28gYSBxdWljayB2ZXJpZmljYXRpb24gaXMgYWx3YXlzIHdvcnRod2hpbGUgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc3Ni1cbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NzgtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcwNwoJCQkJCQkJb3V0cHV0OiAxNTIKCQkJCQkJCXRob3VnaHRzOiAzMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBzeW1ib2wgdG8gZm9jdXMgb24uIE15IG5leHQgdGhvdWdodCBpcyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBSaWdodCwgSSBzZWUgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCBpcyBhbHNvIGluIHBsYXkuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgYSBrZXkgZGVwZW5kZW5jeS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZWAgc2hvdWxkIG9ubHkgcmV0dXJuIHRydWUgd2hlbiBgTUVNT1JZX0ZBSUxVUkVgIGlzIGFjdGl2ZS4gTG9va2luZyBiYWNrIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBibG9jaywgaXQgc2VlbXMgbGlrZSBgZm9saW9fdGVzdF9od3BvaXNvbmAg4oCTIHdoaWNoIGNvbnRyaWJ1dGVzIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIC0gaXMgb25seSBkZWZpbmVkIHdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZW5hYmxlZC4gSWYgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZGlzYWJsZWQsIHRoZSBjb2RlIHBhdGggd2lsbCBieXBhc3MgdGhlIGNoZWNraW5nLgoKU28sIGBNRU1PUllfRkFJTFVSRWAgaXMgbmVjZXNzYXJ5IHRvIGFjdHVhbGx5IHRyaWdnZXIgdGhlIGNoZWNrcyByZWxhdGVkIHRvIHBvaXNvbmVkIHBhZ2VzLiBUaGlzIHJlaW5mb3JjZXMgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuZGFtZW50YWwgZGVwZW5kZW5jeS4KCk5vdywgaXMgdGhlcmUgYW55IG90aGVyIHN5bWJvbCByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSB0aGF0JiMzOTtzIHdvcnRoIGxvb2tpbmcgaW50bz8gVGhlIGNvZGUgbW9kaWZpY2F0aW9uIGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC4gR29vZCwgYG1pZ3JhdGVfaHVnZXRsYnNgIGlzIHRoZSBjYWxsZXIgb2YgdGhhdCBmdW5jdGlvbi4gRXZlbiBiZXR0ZXIsIGBtaWdyYXRlX3BhZ2VzYCBpcyB0aGUgY2FsbGVyIG9mIGBtaWdyYXRlX2h1Z2V0bGJzYC4gVGhlIGtleSBmdW5jdGlvbnMgYXJlIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGFuZCBgbWlncmF0ZV9odWdldGxic2AuCgpJIHRoaW5rIHRoYXQmIzM5O3MgZW5vdWdoIGluZm9ybWF0aW9uLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2h1Z2V0bGJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IHRoZSBtaWdyYXRpb24gb2YgaHVnZSBwYWdlcyB0aGF0IGNvbnRhaW4gaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZXMsIHJldHVybmluZyAtRUhXUE9JU09OLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtaWdyYXRpb24gbG9naWMuIFRvIHJlYWNoIGFuZCB0ZXN0IHRoaXMgY29kZSwgaHVnZSBwYWdlIHN1cHBvcnQgKENPTkZJR19IVUdFVExCX1BBR0UpLCBtZW1vcnkgbWlncmF0aW9uIChDT05GSUdfTUlHUkFUSU9OKSwgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIG11c3QgYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2h1Z2V0bGJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IHRoZSBtaWdyYXRpb24gb2YgaHVnZSBwYWdlcyB0aGF0IGNvbnRhaW4gaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZXMsIHJldHVybmluZyAtRUhXUE9JU09OLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtaWdyYXRpb24gbG9naWMuIFRvIHJlYWNoIGFuZCB0ZXN0IHRoaXMgY29kZSwgaHVnZSBwYWdlIHN1cHBvcnQgKENPTkZJR19IVUdFVExCX1BBR0UpLCBtZW1vcnkgbWlncmF0aW9uIChDT05GSUdfTUlHUkFUSU9OKSwgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIG11c3QgYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjE1LjUzMDg0MzI5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMTcxNDA0NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZVwiLFxuICAgIFwibWlncmF0ZV9odWdldGxic1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IHRoZSBtaWdyYXRpb24gb2YgaHVnZSBwYWdlcyB0aGF0IGNvbnRhaW4gaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZXMsIHJldHVybmluZyAtRUhXUE9JU09OLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtaWdyYXRpb24gbG9naWMuIFRvIHJlYWNoIGFuZCB0ZXN0IHRoaXMgY29kZSwgaHVnZSBwYWdlIHN1cHBvcnQgKENPTkZJR19IVUdFVExCX1BBR0UpLCBtZW1vcnkgbWlncmF0aW9uIChDT05GSUdfTUlHUkFUSU9OKSwgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIG11c3QgYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjI6MTUuNTMwODUzNzk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkyNTI4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNGJiZDFjNDc2NmYwNTFlZmFmNWE0ZmU2ZGZkZDg4ZDdkOTMyNThkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDEgMTc6MjI6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXFxuaW5kZXggNDllMTBmZWViMDk0ZjAuLmFjMTJlOWFlYjA1ZjE4IDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGUuY1xcbisrKyBiL21tL21pZ3JhdGUuY1xcbkBAIC0xNTEwLDYgKzE1MTAsMTEgQEAgc3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAodW5saWtlbHkoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3JjKSkpIHtcXG4rXFx0XFx0cmMgPSAtRUhXUE9JU09OO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChmb2xpb190ZXN0X2Fub24oc3JjKSlcXG4gXFx0XFx0YW5vbl92bWEgPSBmb2xpb19nZXRfYW5vbl92bWEoc3JjKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjE2LjE0MTI5NDQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjU2MDkyOTI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNSUdSQVRJT05cIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VcIixcbiAgICBcIm1pZ3JhdGVfaHVnZXRsYnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCB0aGUgbWlncmF0aW9uIG9mIGh1Z2UgcGFnZXMgdGhhdCBjb250YWluIGhhcmR3YXJlLXBvaXNvbmVkIHN1YnBhZ2VzLCByZXR1cm5pbmcgLUVIV1BPSVNPTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWlncmF0aW9uIGxvZ2ljLiBUbyByZWFjaCBhbmQgdGVzdCB0aGlzIGNvZGUsIGh1Z2UgcGFnZSBzdXBwb3J0IChDT05GSUdfSFVHRVRMQl9QQUdFKSwgbWVtb3J5IG1pZ3JhdGlvbiAoQ09ORklHX01JR1JBVElPTiksIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyAoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBtdXN0IGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjRiYmQxYzQ3NjZmMDUxZWZhZjVhNGZlNmRmZGQ4OGQ3ZDkzMjU4ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTc6MjI6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDQ5ZTEwZmVlYjA5NGYwLi5hYzEyZTlhZWIwNWYxOCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuKysrIGIvbW0vbWlncmF0ZS5jXG5AQCAtMTUxMCw2ICsxNTEwLDExIEBAIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbitcdGlmICh1bmxpa2VseShmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzcmMpKSkge1xuK1x0XHRyYyA9IC1FSFdQT0lTT047XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbiBcdGlmIChmb2xpb190ZXN0X2Fub24oc3JjKSlcbiBcdFx0YW5vbl92bWEgPSBmb2xpb19nZXRfYW5vbl92bWEoc3JjKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjE2LjE0MTI5NzU0OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTA5ODc0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWlncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY3J1Y2lhbCBjaGVjayB3aXRoaW4gdGhlIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHk6IGBpZiAodW5saWtlbHkoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3JjKSkpYC4gUmlnaHQsIHNvIGlmIHRoZSBzb3VyY2UgaHVnZSBwYWdlIGhhcHBlbnMgdG8gY29udGFpbiBhIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2UsIHRoaXMgY2hlY2sgd2lsbCByZXR1cm4gYW4gYC1FSFdQT0lTT05gIGVycm9yLiBFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBtZW1vcnkgbWlncmF0aW9uIHByb2Nlc3M7IGl0J3MgZXhwbGljaXRseSBoYW5kbGluZyB0aGUgc2NlbmFyaW8gb2YgbWlncmF0aW5nIGEgY29ycnVwdGVkIGh1Z2UgcGFnZS4gXG5cbkkgbmVlZCB0byBxdWlja2x5IGRpZyBpbnRvIHRoZSBjb2RlIG5vdy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBsb2NhdGUgdGhlIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGZ1bmN0aW9uIGFuZCB0aGUgZGVmaW5pdGlvbiBvZiBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgLiBJJ2xsIHN0YXJ0IHdpdGggYG1tL21pZ3JhdGUuY2AsIG5hdHVyYWxseSwgdG8gZmluZCB0aGUgbWlncmF0aW9uIGxvZ2ljIGFuZCB0aGVuIHNlZWsgb3V0IHRoZSBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGRlZmluaXRpb24uIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhpcyBjaGFuZ2UgbGllcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBvaXNvbmVkIHBhZ2UgZGV0ZWN0aW9uIGltcGFjdHMgdGhlIG92ZXJhbGwgbWlncmF0aW9uIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjoyMC4yNTIyODkwODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyODgzMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21pZ3JhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlLmM9MTM1Mz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fbW92ZShmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE0NjgtICovXFxubW0vbWlncmF0ZS5jOjE0Njk6c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMTQ3MC1cXHRcXHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi0tXFxubW0vbWlncmF0ZS5jPTE2MzI9c3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTY3MC1cXG5tbS9taWdyYXRlLmM6MTY3MTpcXHRcXHRcXHRyYyA9IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShnZXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0xNjcyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjIwLjMzNzU5MzkyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjM4MjMyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbnBhY2tpbmcgdGhlIE1lbW9yeSBNaWdyYXRpb24gUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgd2hlcmUgdGhpcyBmdW5jdGlvbiBzaXRzIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBBaCwgeWVzLCBpdCdzIGNhbGxlZCBieSBgbWlncmF0ZV9odWdldGxic2AuIFRoYXQncyB0aGUga2V5LiBBbmQgYG1pZ3JhdGVfaHVnZXRsYnNgLCBpbiB0dXJuLCBpcyB0cmlnZ2VyZWQgYnkgc29tZXRoaW5nIGxpa2UgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIG9yIGEgcmVsYXRlZCBtaWdyYXRpb24gZnVuY3Rpb24uIFRoaXMgc3VnZ2VzdHMgYSBtdWx0aS1zdGVwIHByb2Nlc3MgZm9yIGhhbmRsaW5nIGh1Z2UgcGFnZXMgZHVyaW5nIG1pZ3JhdGlvbi4gTm93LCBJIGhhdmUgdG8gZmluZCBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGJlY2F1c2UsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgdGhlcmUncyBhIHJlYXNvbiBmb3IgbG9va2luZyBhdCB0aGF0IGZ1bmN0aW9uIGluIHJlbGF0aW9uIHRvIG1lbW9yeSBtaWdyYXRpb24uIExldCdzIHNlZSBob3cgdGhhdCB0aWVzIGludG8gdGhpcyBzcGVjaWZpYyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjI6MjMuMzAxNDIxMjI5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjc2NDMwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNjI9c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcxLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNzI6c3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3My17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ0MDk9c3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDE2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQxNzpcXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQxOC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE3OTM9c3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODE1LVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTgxNjpcXHRcXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODE3LVxcdFxcdFxcdC8qXFxuLS1cXG5tbS9taWdyYXRlLmM9MTQ2OT1zdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE1MTItXFxubW0vbWlncmF0ZS5jOjE1MTM6XFx0aWYgKHVubGlrZWx5KGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHNyYykpKSB7XFxubW0vbWlncmF0ZS5jLTE1MTQtXFx0XFx0cmMgPSAtRUhXUE9JU09OO1xcbi0tXFxubW0vc2htZW0uYz0zMjE2PXNobWVtX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9zaG1lbS5jLTMyNDItXFxubW0vc2htZW0uYzozMjQzOlxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG5tbS9zaG1lbS5jLTMyNDQtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNTA9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTA4My1cXG5tbS92bXNjYW4uYzoxMDg0OlxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG5tbS92bXNjYW4uYy0xMDg1LVxcdFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjI3LjMyOTA3MTc3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTkwNzI2MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdlIFBhZ2UgTWlncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBjaGVjayB3aXRoaW4gYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIHRoZSBtaWdyYXRpb24gb2YgaHVnZSBwYWdlcyBpZiB0aGV5IGNvbnRhaW4gaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMuIFRoYXQncyBnb29kLCBzZWVtcyBzZW5zaWJsZSB0byBhdm9pZCBjb3JydXB0aW5nIGRhdGEgZHVyaW5nIGEgbW92ZS4gTm8gb2J2aW91cyBpc3N1ZXMgc28gZmFyLlxuXG5CdXQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBjb250ZXh0LiBUaGlzIGtpbmQgb2YgY2hhbmdlIGNhbiBzb21ldGltZXMgYmUgZGVwZW5kZW50IG9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiBCZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUncyBhbnkgaW1wbGljaXQgb3IgZXhwbGljaXQgZGVwZW5kZW5jeSBvbiBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gUGVyaGFwcyB0aGVyZSdzIGEgc3BlY2lmaWMgZmxhZyBvciBzZXR0aW5nIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGlzIHBhcnRpY3VsYXIgcG9pc29uLWRldGVjdGlvbiBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gcmVzZWFyY2ggdGhhdC5cblxuTm93LCB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLCByZXNpZGVzIHdpdGhpbiBgbW0vbWlncmF0ZS5jYC4gR29vZCwgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiBgbW0vbWlncmF0ZS5jYCBpdHNlbGYgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gSXMgaXQgYmVoaW5kIGEgS2NvbmZpZyBvcHRpb24/IEtub3dpbmcgdGhhdCB3aWxsIGFsbG93IG1lIHRvIG5hcnJvdyBkb3duIHRoZSBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyB0aGF0IEkgd2lsbCBuZWVkIHRvIGNoZWNrIGJlZm9yZSBhY2NlcHRpbmcgdGhpcyBwYXRjaCwgb3IgYXNraW5nIHRoZSBhdXRob3IgZm9yIGNsYXJpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjozMS4yMjgxNDczMDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyMTg2NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTk3PW9iai0kKENPTkZJR19NRU1URVNUKVxcdFxcdCs9IG1lbXRlc3Qub1xcbm1tL01ha2VmaWxlOjk4Om9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUub1xcbm1tL01ha2VmaWxlLTk5LW9iai0kKENPTkZJR19OVU1BKSArPSBtZW1vcnktdGllcnMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjozMS4zMTQzNzQ2NTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU0MDQ2NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGJyYWluIGlzIHN0YXJ0aW5nIHRvIGNodXJuIG9uIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyBhIE1pZ3JhdGlvbiBTY2VuYXJpbyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBtaWdyYXRpb24gc2l0dWF0aW9uIGhlcmUsIHRoYXQncyBjbGVhciDigJMgd2UgbmVlZCBgQ09ORklHX01JR1JBVElPTmAgdG8gYmUgaW4gcGxheSwgdGhhdCdzIHN0ZXAgb25lLiBBbmQsIGZyb20gdGhlIGxvb2tzIG9mIGl0LCBodWdlIHBhZ2VzIGFyZSBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIHBpY3R1cmUuIEknbSB0aGlua2luZywgc3BlY2lmaWNhbGx5LCB0aGF0IGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIHRoZSBrZXkgZnVuY3Rpb24gYmVpbmcgdXNlZCwgd2hpY2ggc2NyZWFtcyBodWdldGxiIHBhZ2UgaGFuZGxpbmcuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgYXJvdW5kIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIGRlcGVuZGVudCBvbiBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gZmxhZywgc29tZSBgI2lmZGVmYCBwZXJoYXBzLiBUaGF0J3MgdGhlIGxvZ2ljYWwgbmV4dCBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjM0LjQ2ODQyNTY4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzAwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZS5jPTEzNTM9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNDY4LSAqL1xcbm1tL21pZ3JhdGUuYzoxNDY5OnN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTE0NzAtXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNjMyPXN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE2NzAtXFxubW0vbWlncmF0ZS5jOjE2NzE6XFx0XFx0XFx0cmMgPSB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UoZ2V0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMTY3Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjozNC42MTQ3MzU2MzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MzEwMTE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9taWdyYXRlLmNgIC0gTGluZSAxNDY5IGFuZCBCZXlvbmQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBtbS9taWdyYXRlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTQ2OS4gVGhhdCBhcmVhIHVzdWFsbHkgZGVhbHMgd2l0aC4uLiB3ZWxsLCBiYXNlZCBvbiB0aGUgY29udGV4dCBvZiBtaWdyYXRpb24gaW4gdGhlIGtlcm5lbCwgaXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIG1lY2hhbmljcyBvZiBtb3ZpbmcgcGFnZXMuIEknbSBwcm9iYWJseSBnb2luZyB0byBiZSBzZWVpbmcgY29kZSByZWxhdGVkIHRvIHRoZSBhY3R1YWwgY29weWluZywgdXBkYXRpbmcgcGFnZSB0YWJsZXMsIG9yIHBlcmhhcHMgZXZlbiBoYW5kbGluZyB0aGUgbG9ja2luZyBuZWNlc3NhcnkgZm9yIGEgY29uc2lzdGVudCBtaWdyYXRpb24gb3BlcmF0aW9uLiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSwgdGhlcmUgbWlnaHQgYmUgc3BlY2lmaWMgY29kZSByZWxhdGVkIHRvIHRyYW5zbGF0aW9uIGxvb2thc2lkZSBidWZmZXJzIChUTEJzKSBhbmQgY2FjaGUgY29oZXJlbmN5LiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW50cmljYXRlIGRldGFpbHMgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCAoTU1VKSBoZXJlLiBJJ20gaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IHRoZSBleGFjdCBsb2dpYyB1c2VkIHRvIGNvcHkgZGF0YSwgdXBkYXRlIHBhZ2UgdGFibGVzLCBhbmQgbWFrZSBhbnkgVExCIGludmFsaWRhdGlvbiB0aGF0IGlzIHJlcXVpcmVkLiBJIGFudGljaXBhdGUgc29tZSBpbnRlcmVzdGluZyBzdWJ0bGV0aWVzIGFyb3VuZCB0aGUgYXRvbWljIG9wZXJhdGlvbnMgcmVxdWlyZWQgdG8gbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRoZSBtaWdyYXRpb24uIExldCdzIHNlZSB3aGF0IGdlbXMgdGhpcyBzZWN0aW9uIG9mIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI3NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjM3Ljk1Nzg0MTg3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWlncmF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NDA6XFx0XFx0XFx0X19taWdyYXRlX2ZvbGlvX3JlY29yZChkc3QsIG9sZF9mb2xpb19zdGF0ZSwgYW5vbl92bWEpO1xcbjE0NDE6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjE0NDI6XFx0XFx0fVxcbjE0NDM6XFx0XFxuMTQ0NDpcXHRcXHRtaWdyYXRlX2ZvbGlvX3VuZG9fc3JjKHNyYywgb2xkX2ZvbGlvX3N0YXRlIFxcdTAwMjYgRk9MSU9fV0FTX01BUFBFRCxcXG4xNDQ1OlxcdFxcdFxcdFxcdCAgICAgICBhbm9uX3ZtYSwgdHJ1ZSwgcmV0KTtcXG4xNDQ2OlxcdFxcdG1pZ3JhdGVfZm9saW9fdW5kb19kc3QoZHN0LCB0cnVlLCBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlKTtcXG4xNDQ3OlxcdFxcbjE0NDg6XFx0XFx0cmV0dXJuIHJjO1xcbjE0NDk6XFx0fVxcbjE0NTA6XFx0XFxuMTQ1MTpcXHQvKlxcbjE0NTI6XFx0ICogQ291bnRlcnBhcnQgb2YgdW5tYXBfYW5kX21vdmVfcGFnZSgpIGZvciBodWdlcGFnZSBtaWdyYXRpb24uXFxuMTQ1MzpcXHQgKlxcbjE0NTQ6XFx0ICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHdhaXQgdGhlIGNvbXBsZXRpb24gb2YgaHVnZXBhZ2UgSS9PXFxuMTQ1NTpcXHQgKiBiZWNhdXNlIHRoZXJlIGlzIG5vIHJhY2UgYmV0d2VlbiBJL08gYW5kIG1pZ3JhdGlvbiBmb3IgaHVnZXBhZ2UuXFxuMTQ1NjpcXHQgKiBOb3RlIHRoYXQgY3VycmVudGx5IGh1Z2VwYWdlIEkvTyBvY2N1cnMgb25seSBpbiBkaXJlY3QgSS9PXFxuMTQ1NzpcXHQgKiB3aGVyZSBubyBsb2NrIGlzIGhlbGQgYW5kIFBHX3dyaXRlYmFjayBpcyBpcnJlbGV2YW50LFxcbjE0NTg6XFx0ICogYW5kIHdyaXRlYmFjayBzdGF0dXMgb2YgYWxsIHN1YnBhZ2VzIGFyZSBjb3VudGVkIGluIHRoZSByZWZlcmVuY2VcXG4xNDU5OlxcdCAqIGNvdW50IG9mIHRoZSBoZWFkIHBhZ2UgKGkuZS4gaWYgYWxsIHN1YnBhZ2VzIG9mIGEgMk1CIGh1Z2VwYWdlIGFyZVxcbjE0NjA6XFx0ICogdW5kZXIgZGlyZWN0IEkvTywgdGhlIHJlZmVyZW5jZSBvZiB0aGUgaGVhZCBwYWdlIGlzIDUxMiBhbmQgYSBiaXQgbW9yZS4pXFxuMTQ2MTpcXHQgKiBUaGlzIG1lYW5zIHRoYXQgd2hlbiB3ZSB0cnkgdG8gbWlncmF0ZSBodWdlcGFnZSB3aG9zZSBzdWJwYWdlcyBhcmVcXG4xNDYyOlxcdCAqIGRvaW5nIGRpcmVjdCBJL08sIHNvbWUgcmVmZXJlbmNlcyByZW1haW4gYWZ0ZXIgdHJ5X3RvX3VubWFwKCkgYW5kXFxuMTQ2MzpcXHQgKiBodWdlcGFnZSBtaWdyYXRpb24gZmFpbHMgd2l0aG91dCBkYXRhIGNvcnJ1cHRpb24uXFxuMTQ2NDpcXHQgKlxcbjE0NjU6XFx0ICogVGhlcmUgaXMgYWxzbyBubyByYWNlIHdoZW4gZGlyZWN0IEkvTyBpcyBpc3N1ZWQgb24gdGhlIHBhZ2UgdW5kZXIgbWlncmF0aW9uLFxcbjE0NjY6XFx0ICogYmVjYXVzZSB0aGVuIHB0ZSBpcyByZXBsYWNlZCB3aXRoIG1pZ3JhdGlvbiBzd2FwIGVudHJ5IGFuZCBkaXJlY3QgSS9PIGNvZGVcXG4xNDY3OlxcdCAqIHdpbGwgd2FpdCBpbiB0aGUgcGFnZSBmYXVsdCBmb3IgbWlncmF0aW9uIHRvIGNvbXBsZXRlLlxcbjE0Njg6XFx0ICovXFxuMTQ2OTpcXHRzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbjE0NzA6XFx0XFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4xNDcxOlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqc3JjLCBpbnQgZm9yY2UsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXFxuMTQ3MjpcXHRcXHRcXHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KVxcbjE0NzM6XFx0e1xcbjE0NzQ6XFx0XFx0c3RydWN0IGZvbGlvICpkc3Q7XFxuMTQ3NTpcXHRcXHRpbnQgcmMgPSAtRUFHQUlOO1xcbjE0NzY6XFx0XFx0aW50IHBhZ2Vfd2FzX21hcHBlZCA9IDA7XFxuMTQ3NzpcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gTlVMTDtcXG4xNDc4OlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gTlVMTDtcXG4xNDc5OlxcdFxcdGVudW0gdHR1X2ZsYWdzIHR0dSA9IDA7XFxuMTQ4MDpcXHRcXG4xNDgxOlxcdFxcdGlmIChmb2xpb19yZWZfY291bnQoc3JjKSA9PSAxKSB7XFxuMTQ4MjpcXHRcXHRcXHQvKiBwYWdlIHdhcyBmcmVlZCBmcm9tIHVuZGVyIHVzLiBTbyB3ZSBhcmUgZG9uZS4gKi9cXG4xNDgzOlxcdFxcdFxcdGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzcmMpO1xcbjE0ODQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTQ4NTpcXHRcXHR9XFxuMTQ4NjpcXHRcXG4xNDg3OlxcdFxcdGRzdCA9IGdldF9uZXdfZm9saW8oc3JjLCBwcml2YXRlKTtcXG4xNDg4OlxcdFxcdGlmICghZHN0KVxcbjE0ODk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjM3Ljk1ODE2OTc1NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE5NjgyMDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBvZiBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCoqXG5cbk9rYXksIHNvIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGNvbXBpbGF0aW9uIG9mIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBNeSBpbnR1aXRpb24gc2F5cyBpdCdzIHByb2JhYmx5IG9ubHkgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZSB3aGVuIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBlbmFibGVkLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIEl0J3MgdG9vIGVhc3kgdG8gYXNzdW1lIHRoZXNlIHRoaW5ncywgZXNwZWNpYWxseSBpbiB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgcHJlcHJvY2Vzc29yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXRzZWxmIG9yIGl0cyBkZWNsYXJhdGlvbi4gVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgZXZpZGVuY2U7IGEgcXVpY2sgc2VhcmNoIHNob3VsZCB0ZWxsIHRoZSB0YWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjo0MS43Nzc4NTc5MzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDY0NTM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZS5jPTM0Nj1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTQxMy1cXG5tbS9taWdyYXRlLmM6NDE0OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWlncmF0ZS5jLTQxNS1cXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbi0tXFxubW0vbWlncmF0ZS5jPTQ4MT12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWlncmF0ZS5jLTUwOC1cXG5tbS9taWdyYXRlLmM6NTA5OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWlncmF0ZS5jLTUxMC0vKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjo0Mi4wMTI1MTU1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM5NDIzODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjpcblxuKipDaGVja2luZyBmb3IgSHVnZVRMQiBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UncmUgb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYG1pZ3JhdGVfaHVnZXRsYnNgIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgaXRzIGluY2x1c2lvbiBpcyBnb3Zlcm5lZCBieSB0aGUgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIGlzIGZ1bmRhbWVudGFsLCByaWdodD8gV2Ugd291bGRuJ3Qgd2FudCBjb2RlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcyBsZWFraW5nIGludG8gdGhlIGJ1aWxkIHVubGVzcyBodWdlIHBhZ2VzIGFyZSBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIGRvdWJsZS1jaGVja2luZyB0aGlzIGJlY2F1c2UgZXZlbiB0aGUgc2xpZ2h0ZXN0IG92ZXJzaWdodCBoZXJlIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgY29tcGlsYXRpb24gZXJyb3JzIGRvd24gdGhlIGxpbmUsIGFuZCB3ZSBuZWVkIGEgcm9jay1zb2xpZCBmb3VuZGF0aW9uLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gY2hlY2sgdGhlc2Ugc29ydHMgb2YgdGhpbmdzIGZpcnN0LCBiZWZvcmUgd2UgZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSwgYW5kIGNvbmZpcm0gdGhhdCBvdXIgYXNzdW1wdGlvbnMgYWJvdXQgY29uZmlndXJhdGlvbiBhcmUgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgxNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjQ1LjQ1MTk0NDUyM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0OTIxMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfaHVnZXRsYnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz0xNjE0PXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNjMxLSAqL1xcbm1tL21pZ3JhdGUuYzoxNjMyOnN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0xNjMzLVxcdFxcdFxcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi0tXFxubW0vbWlncmF0ZS5jPTIwOTQ9aW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTA5LVxcbm1tL21pZ3JhdGUuYzoyMTEwOlxcdHJjX2dhdGhlciA9IG1pZ3JhdGVfaHVnZXRsYnMoZnJvbSwgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbywgcHJpdmF0ZSxcXG5tbS9taWdyYXRlLmMtMjExMS1cXHRcXHRcXHRcXHQgICAgIG1vZGUsIHJlYXNvbiwgXFx1MDAyNnN0YXRzLCBcXHUwMDI2cmV0X2ZvbGlvcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjQ1LjYxNjg3MzE4N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUwOTA5MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29tcGlsYXRpb24gYW5kIERlcGVuZGVuY2llcyBvZiBgbWlncmF0ZV9odWdldGxic2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtaWdyYXRlX2h1Z2V0bGJzYCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZydzIGltbWVkaWF0ZWx5IHN0cmlraW5nIG1lLiBJdCBkb2Vzbid0IGFwcGVhciB0byBiZSBndWFyZGVkIGJ5IGEgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGF0IG1lYW5zIGl0IG1pZ2h0IGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB1bmNvbmRpdGlvbmFsbHksIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBIdWdlVExCIHN1cHBvcnQgaXMgYWN0dWFsbHkgZW5hYmxlZCBhdCBib290IHRpbWUuIFRoZSB3YXkgaXQgd29ya3MsIHRoZW4sIHdvdWxkIGJlIHRvIGR5bmFtaWNhbGx5IHByb2Nlc3MgaHVnZXRsYiBwYWdlcyBpZiB0aGV5IGhhcHBlbiB0byBleGlzdC4gSW50ZXJlc3RpbmcgYXBwcm9hY2guIEknbGwgaGF2ZSB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIG1pZ2h0IGFmZmVjdCBtb2R1bGUgbG9hZGluZyBvciBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIGlmIGF0IGFsbC5cblxuV2FpdCBhIHNlY29uZCwgSSBzZWUgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCBiZWluZyB1c2VkIGluIHRoZXJlLiBUaGF0IGZ1bmN0aW9uIHNvdW5kcyBsaWtlIGl0IGRlYWxzIHdpdGggaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMsIHdoaWNoIHN1Z2dlc3RzIHdlIG5lZWQgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZm9yIHRoaXMgZmVhdHVyZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHdlJ2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBpdHMgaW50ZXJwbGF5IHdpdGggb3RoZXIgbWVtb3J5IGVycm9yIGhhbmRsaW5nIGNvbXBvbmVudHMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3lzdGVtIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgZm9yIHRoZSBraW5kIG9mIG1lbW9yeSBmYWlsdXJlcyBpdCdzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gcm9idXN0bmVzcyBhbmQgZXJyb3IgcmVjb3ZlcnksIHNvIGl0J3MgY3JpdGljYWwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIHJlbGF0aW9uc2hpcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI4OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjQ5Ljc2Nzc4NjQxMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNDA4NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNjI9c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcxLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNzI6c3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjQ5Ljg5OTIwOTkxOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA5OTMzNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFBhZ2UgRmxhZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlIHNob3VsZCBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGVzZSBwYWdlIGZsYWdzPyBMZXQncyB6ZXJvIGluIG9uIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDcyLiBUaGF0IGxvY2F0aW9uIGlzIHVzdWFsbHkgYSBnb29kIGJldCBmb3IgZmluZGluZyBzb21lIG9mIHRoZSBjb3JlIGRlZmluaXRpb25zIG9yIG1heWJlIGEgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZSByZWxhdGVkIHRvIHBhZ2UgZmxhZ3MuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBmbGFncyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCBrZXkgY29uc2lkZXJhdGlvbnMgYXJlIGludm9sdmVkLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjI6NTIuOTA5MTQ4NjA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDYwOlxcdCAqIGZhaWxpbmcgaGFyZHdhcmUuXFxuMTA2MTpcXHQgKi9cXG4xMDYyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbjEwNjM6XFx0e1xcbjEwNjQ6XFx0XFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbztcXG4xMDY1OlxcdFxcbjEwNjY6XFx0XFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcXG4xMDY3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEwNjg6XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbjEwNjk6XFx0XFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgXFx1MDAyNlxcdTAwMjYgUGFnZUhXUG9pc29uKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuMTA3MDpcXHR9XFxuMTA3MTpcXHRcXG4xMDcyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjEwNzM6XFx0e1xcbjEwNzQ6XFx0XFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XFxuMTA3NTpcXHRcXHQgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcXG4xMDc2OlxcdH1cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Ym9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbjEwNzk6XFx0XFxuMTA4MDpcXHQjaWZkZWYgQ09ORklHX01JR1JBVElPTlxcbjEwODE6XFx0LypcXG4xMDgyOlxcdCAqIFRoaXMgcGFnZSBpcyBtaWdyYXRhYmxlIHRocm91Z2ggbW92YWJsZV9vcHMgKGZvciBzZWxlY3RlZCB0eXBlZCBwYWdlc1xcbjEwODM6XFx0ICogb25seSkuXFxuMTA4NDpcXHQgKlxcbjEwODU6XFx0ICogUGFnZSBtaWdyYXRpb24gb2Ygc3VjaCBwYWdlcyBtaWdodCBmYWlsLCBmb3IgZXhhbXBsZSwgaWYgdGhlIHBhZ2UgaXNcXG4xMDg2OlxcdCAqIGFscmVhZHkgaXNvbGF0ZWQgYnkgc29tZWJvZHkgZWxzZSwgb3IgaWYgdGhlIHBhZ2UgaXMgYWJvdXQgdG8gZ2V0IGZyZWVkLlxcbjEwODc6XFx0ICpcXG4xMDg4OlxcdCAqIFdoaWxlIGEgc3Vic3lzdGVtIG1pZ2h0IHNldCBzZWxlY3RlZCB0eXBlZCBwYWdlcyB0aGF0IHN1cHBvcnQgcGFnZSBtaWdyYXRpb25cXG4xMDg5OlxcdCAqIGFzIGJlaW5nIG1vdmFibGUgdGhyb3VnaCBtb3ZhYmxlX29wcywgaXQgbXVzdCBuZXZlciBjbGVhciB0aGlzIGZsYWcuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjUyLjkwOTI5ODczNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk2MDE1MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSGFyZHdhcmUgUG9pc29uaW5nIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSBkZWZpbmVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBoYXZlIGhhcmR3YXJlIHBvaXNvbmluZyBlbmFibGVkLiBUaGF0J3MgYSBiaXQgb2RkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHNob3VsZG4ndCBpdHMgZXhpc3RlbmNlIGJlIHRpZWQgdG8gYENPTkZJR19NRU1PUllfRkFJTFVSRWAsIHNpbmNlIGhhcmR3YXJlIHBvaXNvbmluZyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoYXQgZmVhdHVyZT8gSWYgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXNuJ3QgZW5hYmxlZCwgd291bGRuJ3QgYGZvbGlvX3Rlc3RfaHdwb2lzb25gIGp1c3QgcmV0dXJuIGBmYWxzZWAgYW55d2F5LCByZW5kZXJpbmcgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCBwb3RlbnRpYWxseSByZWR1bmRhbnQ/IEl0IGlzIHdvcnRoIGNoZWNraW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9saW9fdGVzdF9od3BvaXNvbmAgaW4gbW9yZSBkZXRhaWw7IGl0IGlzIHRoZSBrZXkgcGllY2UgaGVyZS4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGF0IG5leHQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgaG93IGl0IGltcGFjdHMgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCB3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGRpc2FibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjo1Ni41MDUzMTgzMDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDgyOTQzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb190ZXN0X2h3cG9pc29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNzI9c3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3My17XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA3NDpcXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDc1LVxcdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjo1Ni42MTYxNTk2MTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNDI4MjY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgSGFyZHdhcmUgUG9pc29uaW5nIEZsYWcgRGVmaW5pdGlvbnMqKlxuXG5SaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGd1dCBmZWVsaW5nIGlzIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBoYXJkd2FyZS1pbmR1Y2VkIG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgdGhlIGtlcm5lbCBsaWtlbHkgaGFzIHNvbWUgZGVkaWNhdGVkIGZsYWdzIGZvciB0aGlzLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIHNwZWNpZmljcywgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IG1hY3JvIGRlZmluaXRpb25zLiBUaGVyZWZvcmUsIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgYGdyZXBgIHNlYXJjaC4gSSdsbCBuZWVkIHRvIGxvb2sgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIHNwb3QgZm9yIHBhZ2UtcmVsYXRlZCBmbGFncy4gVGhlIGtleSBzZWFyY2ggdGVybXMgYXJlIGdvaW5nIHRvIGJlIGFsb25nIHRoZSBsaW5lcyBvZiBgUEFHRUZMQUcoSFdQb2lzb24pYCBvciBzaW1pbGFyIHZhcmlhdGlvbnMgdGhhdCByZWxhdGUgdG8gaGFyZHdhcmUtZGV0ZWN0ZWQgZXJyb3JzLCBjb3JydXB0aW9uLCBvciBwb2lzb25pbmcgb2YgbWVtb3J5IHBhZ2VzLiBJJ20gZ29pbmcgdG8gbmVlZCB0byB0aGluayBjcmVhdGl2ZWx5IGFib3V0IHRoZSBwb3NzaWJsZSBuYW1pbmcgY29udmVudGlvbnMsIHRvIG1ha2UgdGhlIGBncmVwYCBzZWFyY2ggbW9yZSBlZmZlY3RpdmUuIEZyb20gdGhlcmUsIEkgY2FuIGludmVzdGlnYXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHJlc3VsdGluZyBkZWZpbml0aW9ucy4gSSdtIGhvcGluZyB0byBnZXQgYSBsaXN0IG9mIGRlZmluaXRpb25zIHRvIHRoZW4gc3RhcnQgYW5hbHl6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjI6NTkuNzQwNDU4ODE2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODcwMDY5MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSFdQb2lzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NjQ3PUZPTElPX0ZMQUdfRkFMU0UobWxvY2tlZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1My0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NjU0OlBBR0VGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjY1NTpURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1Ni0jZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcXHUwMDNjXFx1MDAzYyBQR19od3BvaXNvbilcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02NTctI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2NTg6UEFHRUZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1OS0jZGVmaW5lIF9fUEdfSFdQT0lTT04gMFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9ODc3PUZPTElPX0ZMQUdfRkFMU0UocGFydGlhbGx5X21hcHBlZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTg4My0vKlxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjg4NDogKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTg4NS0gKiBjb21wb3VuZCBwYWdlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA1Mj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDU3LS8qXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA1ODogKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiBOb3RlIHRoYXQgdGhpcyBjaGVjayBpc1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTktICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNjUtXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA2NjpcXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNjctXFx0XFx0cmV0dXJuIHRydWU7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA2OTpcXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBQYWdlSFdQb2lzb24oXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MDAuMDI3NDc0OTY4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDg5MzA4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUncyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHNlY3Rpb24gYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgaGVyZS4gV2l0aG91dCBpdCwgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBmb2xpb190ZXN0X2h3cG9pc29uYCBhbmQgYGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWRgIHdpbGwgYWx3YXlzIGV2YWx1YXRlIHRvIGZhbHNlLCB3aGljaCBpcyBubyBnb29kIGZvciB0ZXN0aW5nIHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBzZXQgcHJvcGVybHkuXG5cblRoZW4gdGhlcmUncyBgQ09ORklHX01JR1JBVElPTmA7IHNlZW1zIHByZXR0eSBvYnZpb3VzIHRoYXQgSSdsbCBuZWVkIHRoYXQgdG8gZXZlbiBjb21waWxlIGBtbS9taWdyYXRlLmNgLiBDYW4ndCByZWFsbHkgZ2V0IGFueXdoZXJlIHdpdGhvdXQgdGhhdC4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBlc3NlbnRpYWwgaWYgSSBhY3R1YWxseSB3YW50IHRvIHRlc3QgdGhlIGh1Z2UgcGFnZSBtaWdyYXRpb24gZnVuY3Rpb25hbGl0eS4gTWFrZXMgc2Vuc2UsIEkgbmVlZCAqc29tZXRoaW5nKiB0byBtaWdyYXRlLlxuXG5Ob3csIEknbSBqdXN0IGN1cmlvdXMgYWJvdXQgYENPTkZJR19IVUdFVExCX1BBR0VgLiBJIHdhbnQgdG8gdmVyaWZ5IGlmIGl0J3Mgc3RyaWN0bHkgKnJlcXVpcmVkKi4gSSBzZWUgdGhhdCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBpcyBjYWxsZWQgZnJvbSBgbWlncmF0ZV9odWdldGxic2AuIEhtbS4uLiBpZiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgZGlzYWJsZWQsIGNvdWxkIGBtaWdyYXRlX2h1Z2V0bGJzYCBwb3NzaWJseSBqdXN0IGJlIGEgbm8tb3A/IFRoYXQgd291bGQgbWFrZSBzZW5zZSBmcm9tIGEgZGVzaWduIHBlcnNwZWN0aXZlLiBMZXQncyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1pZ3JhdGVfaHVnZXRsYnNgIGFuZCBzZWUgd2hhdCBpdCBhY3R1YWxseSBkb2VzIHdoZW4gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIG5vdCBlbmFibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gdGhhdCBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIzOjA0LjY3NjQxMDkxNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTA3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWlncmF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MzIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MzI6XFx0c3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuMTYzMzpcXHRcXHRcXHRcXHQgICAgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4xNjM0OlxcdFxcdFxcdFxcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4xNjM1OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXFxuMTYzNjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcylcXG4xNjM3OlxcdHtcXG4xNjM4OlxcdFxcdGludCByZXRyeSA9IDE7XFxuMTYzOTpcXHRcXHRpbnQgbnJfZmFpbGVkID0gMDtcXG4xNjQwOlxcdFxcdGludCBucl9yZXRyeV9wYWdlcyA9IDA7XFxuMTY0MTpcXHRcXHRpbnQgcGFzcyA9IDA7XFxuMTY0MjpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqZm9saW8yO1xcbjE2NDM6XFx0XFx0aW50IHJjLCBucl9wYWdlcztcXG4xNjQ0OlxcdFxcbjE2NDU6XFx0XFx0Zm9yIChwYXNzID0gMDsgcGFzcyBcXHUwMDNjIE5SX01BWF9NSUdSQVRFX1BBR0VTX1JFVFJZIFxcdTAwMjZcXHUwMDI2IHJldHJ5OyBwYXNzKyspIHtcXG4xNjQ2OlxcdFxcdFxcdHJldHJ5ID0gMDtcXG4xNjQ3OlxcdFxcdFxcdG5yX3JldHJ5X3BhZ2VzID0gMDtcXG4xNjQ4OlxcdFxcbjE2NDk6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBmb2xpbzIsIGZyb20sIGxydSkge1xcbjE2NTA6XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbjE2NTE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTY1MjpcXHRcXG4xNjUzOlxcdFxcdFxcdFxcdG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjE2NTQ6XFx0XFxuMTY1NTpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4xNjU2OlxcdFxcbjE2NTc6XFx0XFx0XFx0XFx0LypcXG4xNjU4OlxcdFxcdFxcdFxcdCAqIE1pZ3JhdGFiaWxpdHkgb2YgaHVnZXBhZ2VzIGRlcGVuZHMgb24gYXJjaGl0ZWN0dXJlcyBhbmRcXG4xNjU5OlxcdFxcdFxcdFxcdCAqIHRoZWlyIHNpemUuICBUaGlzIGNoZWNrIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNvbWUgY2FsbGVyc1xcbjE2NjA6XFx0XFx0XFx0XFx0ICogb2YgaHVnZXBhZ2UgbWlncmF0aW9uIGxpa2Ugc29mdCBvZmZsaW5lIGFuZCBtZW1vcnlcXG4xNjYxOlxcdFxcdFxcdFxcdCAqIGhvdHJlbW92ZSBkb24ndCB3YWxrIHRocm91Z2ggcGFnZSB0YWJsZXMgb3IgY2hlY2sgd2hldGhlclxcbjE2NjI6XFx0XFx0XFx0XFx0ICogdGhlIGh1Z2VwYWdlIGlzIHBtZC1iYXNlZCBvciBub3QgYmVmb3JlIGtpY2tpbmcgbWlncmF0aW9uLlxcbjE2NjM6XFx0XFx0XFx0XFx0ICovXFxuMTY2NDpcXHRcXHRcXHRcXHRpZiAoIWh1Z2VwYWdlX21pZ3JhdGlvbl9zdXBwb3J0ZWQoZm9saW9faHN0YXRlKGZvbGlvKSkpIHtcXG4xNjY1OlxcdFxcdFxcdFxcdFxcdG5yX2ZhaWxlZCsrO1xcbjE2NjY6XFx0XFx0XFx0XFx0XFx0c3RhdHMtXFx1MDAzZW5yX2ZhaWxlZF9wYWdlcyArPSBucl9wYWdlcztcXG4xNjY3OlxcdFxcdFxcdFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCByZXRfZm9saW9zKTtcXG4xNjY4OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE2Njk6XFx0XFx0XFx0XFx0fVxcbjE2NzA6XFx0XFxuMTY3MTpcXHRcXHRcXHRcXHRyYyA9IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShnZXRfbmV3X2ZvbGlvLFxcbjE2NzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcHV0X25ld19mb2xpbywgcHJpdmF0ZSxcXG4xNjczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGZvbGlvLCBwYXNzIFxcdTAwM2UgMiwgbW9kZSxcXG4xNjc0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJlYXNvbiwgcmV0X2ZvbGlvcyk7XFxuMTY3NTpcXHRcXHRcXHRcXHQvKlxcbjE2NzY6XFx0XFx0XFx0XFx0ICogVGhlIHJ1bGVzIGFyZTpcXG4xNjc3OlxcdFxcdFxcdFxcdCAqXFx0MDogaHVnZXRsYiBmb2xpbyB3aWxsIGJlIHB1dCBiYWNrXFxuMTY3ODpcXHRcXHRcXHRcXHQgKlxcdC1FQUdBSU46IHN0YXkgb24gdGhlIGZyb20gbGlzdFxcbjE2Nzk6XFx0XFx0XFx0XFx0ICpcXHQtRU5PTUVNOiBzdGF5IG9uIHRoZSBmcm9tIGxpc3RcXG4xNjgwOlxcdFxcdFxcdFxcdCAqXFx0T3RoZXIgZXJybm86IHB1dCBvbiByZXRfZm9saW9zIGxpc3RcXG4xNjgxOlxcdFxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzowNC42NzY3MTA2MTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0NjA1MzY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBGb2xpbyBGaWx0ZXJpbmcgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gSXQncyBjbGVhcmx5IGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGZvciBmb2xpb3MsIGxpa2VseSByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZXMuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoZSBwb3RlbnRpYWwgYmVoYXZpb3Igd2hlbiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgZGlzYWJsZWQuIElmIHRoYXQgY29uZmlnIG9wdGlvbiBpc24ndCBzZXQsIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGlzIGZ1bmN0aW9uIHdpbGwgKmFsd2F5cyogcmV0dXJuIGZhbHNlLCBvciBhdCBsZWFzdCBiZWhhdmUgaW4gYSBsZXNzLXRoYW4taWRlYWwgbWFubmVyLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBxdWVzdGlvbnMgYWJvdXQgd2hldGhlciB0aGlzIG1pZ2h0IGJlIGEgc291cmNlIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9saW9fdGVzdF9odWdldGxiYCB0byBjb25maXJtIHRoaXMgc3VzcGljaW9uIGFuZCwgaWYgaXQgZG9lcyBiZWhhdmUgdGhpcyB3YXksIHVuZGVyc3RhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpbiBteSBzcGVjaWZpYyBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGNoZWNrIGl0cyBhY3R1YWwgaW1wbGVtZW50YXRpb24uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIzOjA4LjQyMjc2ODMxN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExOTc4Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3Rlc3RfaHVnZXRsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDUyPXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDUzLXtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDU0OlxcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1NS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDYyPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA2OTpcXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBQYWdlSFdQb2lzb24oXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MDguNTM0NzY0MzM2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzk4NTM0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGZvbGlvX3Rlc3RfaHVnZXRsYmAgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBmb2xpb190ZXN0X2h1Z2V0bGJgLiBJdCdzIGNsZWFybHkgYSBmdW5jdGlvbiBvciBtYWNybyByZWxhdGVkIHRvIGh1Z2UgcGFnZXMsIGdpdmVuIHRoZSBuYW1lLCBidXQgSSBuZWVkIHRoZSBwcmVjaXNlIGRldGFpbHMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgcHVycG9zZS4gQSBxdWljayBgZ3JlcGAgd2lsbCBiZSB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGxvY2F0ZSB3aGVyZSBpdCdzIGRlZmluZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnVuY3Rpb24ncyBzaWduYXR1cmUgYW5kLCBpZGVhbGx5LCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgaW50ZW5kZWQgdXNlLiBMZXQncyBzZWUgd2hhdCB3ZSB0dXJuIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIzOjExLjYxNDYyNjkxNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNDgzNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3Rlc3RfaHVnZXRsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD01OTk9c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2MDA6Ym9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjAxLVxcdHtcXHR2b2lkICpwcml2YXRlID0gXFx1MDAyNmZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTYyMD1zdGF0aWMgaW5saW5lIGJvb2xcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NjIxOmZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02MjItXFx0eyByZXR1cm4gMDsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9ODUxPXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODUyLXtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4NTM6XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODU0LVxcdHJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmg9NjE9X19odWdldGxiX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcnN2ZClcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNjIte1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo2MzpcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNjQtXFx0aWYgKHJzdmQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmg9ODE9c3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2h1Z2V0bGJfY2dyb3VwKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtODMte1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo4NDpcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtODUtXFx0aWYgKHJzdmQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvdl9pdGVyLmg9MjA0PXNpemVfdCBpdGVyYXRlX3hhcnJheShzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBsZW4sIHZvaWQgKnByaXYsIHZvaWQgKnByaXYyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pb3ZfaXRlci5oLTIyMC1cXHRcXHRcXHRicmVhaztcXG5pbmNsdWRlL2xpbnV4L2lvdl9pdGVyLmg6MjIxOlxcdFxcdGlmIChXQVJOX09OKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKVxcbmluY2x1ZGUvbGludXgvaW92X2l0ZXIuaC0yMjItXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9Mjg5MD1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF5YmVfbWFwcGVkX3NoYXJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTI4OTQtXFx0LyogT25seSBwYXJ0aWFsbHktbWFwcGFibGUgZm9saW9zIHJlcXVpcmUgbW9yZSBjYXJlLiAqL1xcbmluY2x1ZGUvbGludXgvbW0uaDoyODk1OlxcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykgfHwgdW5saWtlbHkoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkpXFxuaW5jbHVkZS9saW51eC9tbS5oLTI4OTYtXFx0XFx0cmV0dXJuIG1hcGNvdW50IFxcdTAwM2UgMTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yOTQ5PXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTI5NTMtXFxuaW5jbHVkZS9saW51eC9tbS5oOjI5NTQ6XFx0aWYgKFdBUk5fT05fT05DRShwYWdlX2hhc190eXBlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKVxcbmluY2x1ZGUvbGludXgvbW0uaC0yOTU1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA1Mj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1My17XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA1NDpcXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNjgtXFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNjk6XFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgXFx1MDAyNlxcdTAwMjYgUGFnZUhXUG9pc29uKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD0xMzU9c3RhdGljIGlubGluZSB2b2lkIF9fZm9saW9fbGFyZ2VfbWFwY291bnRfc2FuaXR5X2NoZWNrcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtMTM3LXtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDoxMzg6XFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSB8fCBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC0xMzktXFx0Vk1fV0FSTl9PTl9PTkNFKGRpZmYgXFx1MDAzYz0gMCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD0zMzE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fcm1hcF9zYW5pdHlfY2hlY2tzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC0zMzQtXFx0LyogaHVnZXRsYiBmb2xpb3MgYXJlIGhhbmRsZWQgc2VwYXJhdGVseS4gKi9cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDozMzU6XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9ybWFwLmgtMzM2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmg9NDM1PXN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfdHJ5X2R1cF9hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTQzNy17XFxuaW5jbHVkZS9saW51eC9ybWFwLmg6NDM4OlxcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC00MzktXFx0Vk1fV0FSTl9PTl9GT0xJTyghZm9saW9fdGVzdF9hbm9uKGZvbGlvKSwgZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmg9NDUyPXN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTQ1My17XFxuaW5jbHVkZS9saW51eC9ybWFwLmg6NDU0OlxcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC00NTUtXFx0Vk1fV0FSTl9PTl9GT0xJTyghZm9saW9fdGVzdF9hbm9uKGZvbGlvKSwgZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmg9NDc1PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2FkZF9maWxlX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC00NzYte1xcbmluY2x1ZGUvbGludXgvcm1hcC5oOjQ3NzpcXHRWTV9XQVJOX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9ybWFwLmgtNDc4LVxcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9fdGVzdF9hbm9uKGZvbGlvKSwgZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmg9NDg0PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3JlbW92ZV9ybWFwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtNDg1LXtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo0ODY6XFx0Vk1fV0FSTl9PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xcbmluY2x1ZGUvbGludXgvcm1hcC5oLTQ4Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MTEuODI4MTE5MTU0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDE4NTA3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgRGVmaW5pdGlvbiBvZiBgZm9saW9fdGVzdF9odWdldGxiYCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBgZm9saW9fdGVzdF9odWdldGxiYCBpcyBkZWZpbmVkLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIHRoYXQgaXQgd2FzIGRlZmluZWQgc2ltaWxhcmx5IHRvIG90aGVyIHBhZ2UgZmxhZ3MsIHByb2JhYmx5IGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAgdXNpbmcgc29tZXRoaW5nIGxpa2UgYFBBR0VGTEFHKEh1Z2V0bGIsIGh1Z2V0bGIsIFBGX1NFQ09ORClgLiBJIHRvb2sgYSBxdWljayBsb29rLCBvciBhdCBsZWFzdCBzY2FubmVkIHRoZSBmaWxlLCBidXQgSSBkb24ndCByZWNhbGwgc2VlaW5nIGl0LiBMZXQgbWUgdmVyaWZ5IHdpdGggYGdyZXBgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIEknbGwgc2VhcmNoIGZvciBgZm9saW9fdGVzdF9odWdldGxiYCB3aXRoaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBhbmQgbWFrZSBzdXJlIGl0IGlzIG5vdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzoxNS4yMjk5OTcxNzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTE5Mjc5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb190ZXN0X2h1Z2V0bGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA1Mj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1My17XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA1NDpcXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNjgtXFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNjk6XFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgXFx1MDAyNlxcdTAwMjYgUGFnZUhXUG9pc29uKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIzOjE1LjM0NTIwNzA5MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA0NjkzMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqVHJhY2luZyB0aGUgRGVmaW5pdGlvbiBvZiBgZm9saW9fdGVzdF9odWdldGxiYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYGZvbGlvX3Rlc3RfaHVnZXRsYmAsIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBzdGFydHMgdG8gcGluZy4gV2hlcmUgKmV4YWN0bHkqIGlzIHRoaXMgZnVuY3Rpb24gb3IgbWFjcm8gZGVmaW5lZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIElzIGl0IGEgZnVuY3Rpb24sIGEgbWFjcm8sIHNvbWV0aGluZyBlbHNlPyBBbmQsIG1vcmUgaW1wb3J0YW50bHksIHdoYXQgZmlsZSBhbmQgbW9kdWxlIGlzIGl0IGluPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaXRzIG9yaWdpbiB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZC4gSXQncyB0aGUgZmlyc3Qgc3RlcCB0byB0cnVseSB1bmRlcnN0YW5kaW5nIHRoZSBmbG93IGFuZCBsb2dpYyBzdXJyb3VuZGluZyB0aGlzIHBpZWNlIG9mIGNvZGUuIEkgbmVlZCB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgaXRzIG1lYW5pbmcgYmVmb3JlIGRpdmluZyBhbnkgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIzOjE4LjE0OTkwNDg2NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMzI5OTQ2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgZm9saW9fdGVzdF9odWdldGxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzoxOC40MDIyNTY4MTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwOTk0NzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgSHVnZVRMQiBGbGFnIERlZmluaXRpb25zKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRlZmluZXMgSHVnZVRMQi1yZWxhdGVkIGZsYWdzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UsIGFuZCB0aGUgbGlrZWx5IHNwb3QgZm9yIHRoYXQgaXMgYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYC4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSB0aGUgY3J1Y2lhbCBtYWNyb3MgYW5kIGRlZmluaXRpb25zIGZvciBoYW5kbGluZyBIdWdlVExCIHBhZ2VzIHdpbGwgcmVzaWRlLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgZmxhZyBuYW1lcy4gQSBxdWljayBgZ3JlcCBodWdldGxiYCBzaG91bGQgcXVpY2tseSBsb2NhdGUgdGhlIHJlbGV2YW50IGxpbmVzLiBUaGF0IHNob3VsZCBnZXQgbWUgc3RhcnRlZCB3aXRoIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGZsYWcgaWRlbnRpZmllcnMuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzoyMS4yMTIyMDgxODdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTE2OTE1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTkwMD1lbnVtIHBhZ2V0eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTkwNi1cXHRQR1RZX2d1YXJkXFx0XFx0PSAweGYzLFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjkwNzpcXHRQR1RZX2h1Z2V0bGJcXHRcXHQ9IDB4ZjQsXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtOTA4LVxcdFBHVFlfc2xhYlxcdFxcdD0gMHhmNSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwMjY9UEFHRV9UWVBFX09QUyhTbGFiLCBzbGFiLCBzbGFiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTAyOC0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwMjk6Rk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYilcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDMwLSNlbHNlXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTAzMTpGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDMyLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA0Mj1QQUdFX1RZUEVfT1BTKExhcmdlS21hbGxvYywgbGFyZ2Vfa21hbGxvYywgbGFyZ2Vfa21hbGxvYylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNDQtLyoqXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA0NTogKiBQYWdlSHVnZSAtIERldGVybWluZSBpZiB0aGUgcGFnZSBiZWxvbmdzIHRvIGh1Z2V0bGJmc1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNDYtICogQHBhZ2U6IFRoZSBwYWdlIHRvIHRlc3QuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDQ4LSAqIENvbnRleHQ6IEFueSBjb250ZXh0LlxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNDk6ICogUmV0dXJuOiBUcnVlIGZvciBodWdldGxiZnMgcGFnZXMsIGZhbHNlIGZvciBhbm9uIHBhZ2VzIG9yIHBhZ2VzXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1MC0gKiBiZWxvbmdpbmcgdG8gb3RoZXIgZmlsZXN5c3RlbXMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDUyPXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDUzLXtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDU0OlxcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1NS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDYyPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA2OTpcXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBQYWdlSFdQb2lzb24oXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MjEuMzI3Mzg3MDI1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDM4ODE3MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1pZ3JhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZXMgYW5kIG1pZ3JhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5LiBMZXQgbWUgYnJlYWsgdGhpcyBkb3duLi4uXG5cbkZpcnN0LCBpdCBzZWVtcyB0aGlzIGlzIGFsbCB0aWVkIHRvIGBGT0xJT19UWVBFX09QUyhodWdldGxiLCBodWdldGxiKWAsIHdoaWNoIGxlYWRzIHVzIHRvIGBmb2xpb190ZXN0X2h1Z2V0bGJgLiAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYC4gSWYgYENPTkZJR19IVUdFVExCX1BBR0VgIGlzbid0IGRlZmluZWQsIHdlIGZhbGwgYmFjayB0byBgRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2V0bGIpYCwgZXNzZW50aWFsbHkgbWFraW5nIGBmb2xpb190ZXN0X2h1Z2V0bGJgIGFsd2F5cyByZXR1cm4gZmFsc2UuIFRoaXMgbWVhbnMgdGhlIGBtaWdyYXRlX2h1Z2V0bGJzYCBmdW5jdGlvbiB3b3VsZCBqdXN0IGJ5cGFzcyBhbGwgdGhlIGZvbGlvcyBhbmQgZG8gbm90aGluZy4gVGhpcyBtZWFucyB3ZSdsbCBuZXZlciByZWFjaCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC4gT2theSwgc28gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgdG8gZXZlbiAqZ2V0KiB0byB3aGVyZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nLlxuXG5TbywgdG8gcHJvcGVybHkgc2V0IHRoZSBzY2VuZSwgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZTpcblxuKiAgIGBNSUdSQVRJT05gIC0gdGhpcyBpcyBuZWVkZWQgdG8gY29tcGlsZSB0aGUgYG1tL21pZ3JhdGUuY2AgZmlsZS5cbiogICBgSFVHRVRMQl9QQUdFYCAtIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgYGZvbGlvX3Rlc3RfaHVnZXRsYmAgdG8gcmV0dXJuIHRydWUgc28gdGhhdCB3ZSAqY2FuKiByZWFjaCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC5cbiogICBgTUVNT1JZX0ZBSUxVUkVgIC0gdGhpcyBuZWVkcyB0byBiZSBlbmFibGVkIHNvIHRoYXQgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCB3aWxsIHJldHVybiB0cnVlIGFuZCBzdWJzZXF1ZW50bHkgdHJpZ2dlciB0aGUgbmV3IGNvZGUgcGF0aCB3aXRoaW4gYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuXG5cbkknbGwgZG91YmxlIGNoZWNrIGlmIGBNSUdSQVRJT05gIGlzIGNvbW1vbmx5IGVuYWJsZWQgYWxyZWFkeSwgbWF5YmUgdGhyb3VnaCBgTlVNQWAgb3IgYENPTVBBQ1RJT05gLiBUaGF0J3MgYSBwcmV0dHkgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4gQnV0IGBNRU1PUllfRkFJTFVSRWAgaXMgYSBsaXR0bGUgbW9yZSBzcGVjaWFsaXplZCwgbGlrZWx5IHRpZWQgdG8gaGFyZHdhcmUgcG9pc29uaW5nIHNwZWNpZmljYWxseSwgd2hpY2ggaXNuJ3QgYWx3YXlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIGBIVUdFVExCX1BBR0VgIGlzIHByb2JhYmx5IGFsc28gY29tbW9ubHkgZW5hYmxlZCwgYnV0IHdvcnRoIG1lbnRpb25pbmcgZm9yIGNsYXJpdHkuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBJIHNlZSBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBpcyBzdGF0aWMuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBUaGUgY2VudHJhbCBmb2N1cyBvZiBkZWJ1Z2dpbmcgb3IgZnV6emluZyB3aWxsIGVpdGhlciBiZSBpbiBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBvciBgbWlncmF0ZV9odWdldGxic2Agb3IgZXZlbiBgbWlncmF0ZV9wYWdlc2AuIFNpbmNlIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIHN0YXRpYywgd2UgY2FuIHVzZSBgbWlncmF0ZV9odWdldGxic2AgYW5kIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBXYWl0Li4uIHN5emthbGxlciAqY2FuKiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMsIGlmIHRoZXkncmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgYnV0IG9mdGVuIHByb3ZpZGluZyB0aGUgY2FsbGVyIGlzIGJldHRlciBpZiB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzIGlubGluZWQuXG5cbk9rYXksIGxldCdzIGNoZWNrIGlmIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIGlubGluZWQuIEl0IGxvb2tzIHByZXR0eSBoZWZ0eSwgc28gcHJvYmFibHkgbm90LiBJJ2xsIHByb3ZpZGUgYm90aCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBhbmQgYG1pZ3JhdGVfaHVnZXRsYnNgLlxuXG5Ob3csIHJldmlld2luZyB0aGUgcGF0Y2ggaXRzZWxmOlxuXG5gYGBjXG5AQCAtMTUxMCw2ICsxNTEwLDExIEBAIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbitcdGlmICh1bmxpa2VseShmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzcmMpKSkge1xuK1x0XHRyYyA9IC1FSFdQT0lTT047XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbiBcdGlmIChmb2xpb190ZXN0X2Fub24oc3JjKSlcbiBcdFx0YW5vbl92bWEgPSBmb2xpb19nZXRfYW5vbl92bWEoc3JjKTtcbiBgYGBcblxuQWxyaWdodCwgdGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBJdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIHByZXZlbnRpbmcgdGhlIG1pZ3JhdGlvbiBvZiBodWdlIHBhZ2VzIHRoYXQgaGF2ZSBhIGhhcmR3YXJlLXBvaXNvbmVkIHN1YnBhZ2UuIEl0J2xsIHJldHVybiBgLUVIV1BPSVNPTmAgaWYgaXQgZmluZHMgdGhhdC5cblxuU28gdG8gcmVjYXA6XG5cbiogICAqKkNvbmZpZ3M6KiogYE1JR1JBVElPTmAsIGBIVUdFVExCX1BBR0VgLCBhbmQgYE1FTU9SWV9GQUlMVVJFYCBhcmUgbmVjZXNzYXJ5LlxuKiAgICoqRm9jdXMgc3ltYm9sczoqKiBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBhbmQgYG1pZ3JhdGVfaHVnZXRsYnNgIGFyZSBrZXkuXG4qICAgKipSZWFzb25pbmc6KiogVGhlIGNoYW5nZSBhZGRzIGEgY2hlY2sgdG8gc2hvcnQtY2lyY3VpdCBodWdlIHBhZ2UgbWlncmF0aW9uIGlmIEhXIHBvaXNvbiBpcyBwcmVzZW50LCByZXR1cm5pbmcgYC1FSFdQT0lTT05gLiBUaGlzIG5lY2Vzc2l0YXRlcyBIVUdFVExCIGFuZCBNRU1PUllfRkFJTFVSRSwgd2hpbGUgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZXMgTUlHUkFUSU9OIHRvIGJlIGVuYWJsZWQuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGBDT05GSUdfTUlHUkFUSU9OYCBpcyB0aGUgcmlnaHQgY29uZmlnIG5hbWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MzQuMzY2MjA5NTMxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzNTEyODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTUtXFxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxcbm1tL0tjb25maWctNjk3LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MzQuNTI5NTc3NDY1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NTM2NjU4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3Mgc2VsZi1yZWZsZWN0aW9uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsICpNaWdyYXRpb24qIGZlZWxzIHJpZ2h0LCBpbnR1aXRpdmVseS4gVGhhdCdzIHRoZSBjb3JlIGNvbmNlcHQuIE5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhbmQgZW5zdXJlIHRoZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnQgdGhpcyBhcHByb2FjaC4gTGV0J3MgbWFrZSBzdXJlIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBjb3JyZWN0bHkgc2V0LiBJdCdzIGNydWNpYWwgZm9yIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgSSdtIGFudGljaXBhdGluZy4gVGhhdCBzZXR0aW5nIHdpbGwgYmUgcGl2b3RhbCB0byB0aGUgaW1wbGVtZW50YXRpb24sIGFuZCBJIHdhbnQgdG8gYmUgMTAwJSBvbiB0aGF0IHBvaW50IGJlZm9yZSBJIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MzcuMDgzMjUxMzM1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjA5MDI0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MzcuMTc1MzUzOTU2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MDU1ODYxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlZlcmlmeWluZyB0aGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRoYXQncyBpdCwgYEhVR0VUTEJfUEFHRWAgaXMgZGVmaW5pdGVseSB0aGUgbmFtZSBJJ20gbG9va2luZyBmb3IuIE5vIG5lZWQgdG8gc2Vjb25kLWd1ZXNzIHRoYXQgb25lLiBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQuIEp1c3Qgd2FudCB0byBtYWtlIHN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkgaW4gdGhpcyBjb250ZXh0LiBJdCdzIGEgY3JpdGljYWwgY29tcG9uZW50LCBzbyBhIHF1aWNrIHZlcmlmaWNhdGlvbiBpcyBhbHdheXMgd29ydGh3aGlsZSBiZWZvcmUgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NzAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzozOS42ODA5NDQ3NDFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMTc5MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfRkFJTFVSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc3Ni1cXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3OC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzozOS43NzMxNDAxMzJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc3OTQzMDg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBNZW1vcnkgRmFpbHVyZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBzeW1ib2wgdG8gZm9jdXMgb24uIE15IG5leHQgdGhvdWdodCBpcyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBSaWdodCwgSSBzZWUgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCBpcyBhbHNvIGluIHBsYXkuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSBhIGtleSBkZXBlbmRlbmN5LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCBzaG91bGQgb25seSByZXR1cm4gdHJ1ZSB3aGVuIGBNRU1PUllfRkFJTFVSRWAgaXMgYWN0aXZlLiBMb29raW5nIGJhY2sgYXQgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGJsb2NrLCBpdCBzZWVtcyBsaWtlIGBmb2xpb190ZXN0X2h3cG9pc29uYCDigJMgd2hpY2ggY29udHJpYnV0ZXMgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZWAgLSBpcyBvbmx5IGRlZmluZWQgd2hlbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBlbmFibGVkLiBJZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBkaXNhYmxlZCwgdGhlIGNvZGUgcGF0aCB3aWxsIGJ5cGFzcyB0aGUgY2hlY2tpbmcuXG5cblNvLCBgTUVNT1JZX0ZBSUxVUkVgIGlzIG5lY2Vzc2FyeSB0byBhY3R1YWxseSB0cmlnZ2VyIHRoZSBjaGVja3MgcmVsYXRlZCB0byBwb2lzb25lZCBwYWdlcy4gVGhpcyByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIGRlcGVuZGVuY3kuXG5cbk5vdywgaXMgdGhlcmUgYW55IG90aGVyIHN5bWJvbCByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSB0aGF0J3Mgd29ydGggbG9va2luZyBpbnRvPyBUaGUgY29kZSBtb2RpZmljYXRpb24gYXBwZWFycyB0byBiZSBmb2N1c2VkIG9uIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBHb29kLCBgbWlncmF0ZV9odWdldGxic2AgaXMgdGhlIGNhbGxlciBvZiB0aGF0IGZ1bmN0aW9uLiBFdmVuIGJldHRlciwgYG1pZ3JhdGVfcGFnZXNgIGlzIHRoZSBjYWxsZXIgb2YgYG1pZ3JhdGVfaHVnZXRsYnNgLiBUaGUga2V5IGZ1bmN0aW9ucyBhcmUgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgYW5kIGBtaWdyYXRlX2h1Z2V0bGJzYC5cblxuSSB0aGluayB0aGF0J3MgZW5vdWdoIGluZm9ybWF0aW9uLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzA3LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzo0OC41NTI1Nzg2MjNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk2MzM5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZVwiLFxuICAgIFwibWlncmF0ZV9odWdldGxic1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IHRoZSBtaWdyYXRpb24gb2YgaHVnZSBwYWdlcyB0aGF0IGNvbnRhaW4gaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZXMsIHJldHVybmluZyAtRUhXUE9JU09OLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtaWdyYXRpb24gbG9naWMuIFRvIHJlYWNoIGFuZCB0ZXN0IHRoaXMgY29kZSwgaHVnZSBwYWdlIHN1cHBvcnQgKENPTkZJR19IVUdFVExCX1BBR0UpLCBtZW1vcnkgbWlncmF0aW9uIChDT05GSUdfTUlHUkFUSU9OKSwgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIG11c3QgYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNSUdSQVRJT05cIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VcIixcbiAgICBcIm1pZ3JhdGVfaHVnZXRsYnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCB0aGUgbWlncmF0aW9uIG9mIGh1Z2UgcGFnZXMgdGhhdCBjb250YWluIGhhcmR3YXJlLXBvaXNvbmVkIHN1YnBhZ2VzLCByZXR1cm5pbmcgLUVIV1BPSVNPTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWlncmF0aW9uIGxvZ2ljLiBUbyByZWFjaCBhbmQgdGVzdCB0aGlzIGNvZGUsIGh1Z2UgcGFnZSBzdXBwb3J0IChDT05GSUdfSFVHRVRMQl9QQUdFKSwgbWVtb3J5IG1pZ3JhdGlvbiAoQ09ORklHX01JR1JBVElPTiksIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyAoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBtdXN0IGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcz7q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 16:46:14 +0000 UTC FinishedAt: 2026-07-01 17:23:50 +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": "ff1cd4bfdfebea913df9682c4a715bca55759ff0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MIGRATION", "HUGETLB_PAGE", "MEMORY_FAILURE" ], "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": "ff1cd4bfdfebea913df9682c4a715bca55759ff0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MIGRATION", "HUGETLB_PAGE", "MEMORY_FAILURE" ], "series_id": "5773d0e9-38a1-4523-9dfe-e53545137e86" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "unmap_and_move_huge_page", "migrate_hugetlbs" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UmIzM0OywKICAgICYjMzQ7bWlncmF0ZV9odWdldGxicyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCB0aGUgbWlncmF0aW9uIG9mIGh1Z2UgcGFnZXMgdGhhdCBjb250YWluIGhhcmR3YXJlLXBvaXNvbmVkIHN1YnBhZ2VzLCByZXR1cm5pbmcgLUVIV1BPSVNPTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWlncmF0aW9uIGxvZ2ljLiBUbyByZWFjaCBhbmQgdGVzdCB0aGlzIGNvZGUsIGh1Z2UgcGFnZSBzdXBwb3J0IChDT05GSUdfSFVHRVRMQl9QQUdFKSwgbWVtb3J5IG1pZ3JhdGlvbiAoQ09ORklHX01JR1JBVElPTiksIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyAoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBtdXN0IGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiNGJiZDFjNDc2NmYwNTFlZmFmNWE0ZmU2ZGZkZDg4ZDdkOTMyNThkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxNzoyMjoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDQ5ZTEwZmVlYjA5NGYwLi5hYzEyZTlhZWIwNWYxOCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jXG5AQCAtMTUxMCw2ICYjNDM7MTUxMCwxMSBAQCBzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4mIzQzO1x0aWYgKHVubGlrZWx5KGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHNyYykpKSB7XG4mIzQzO1x0XHRyYyA9IC1FSFdQT0lTT047XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChmb2xpb190ZXN0X2Fub24oc3JjKSlcbiBcdFx0YW5vbl92bWEgPSBmb2xpb19nZXRfYW5vbl92bWEoc3JjKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNSUdSQVRJT04mIzM0OywKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfaHVnZXRsYnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIHRvIHByZXZlbnQgdGhlIG1pZ3JhdGlvbiBvZiBodWdlIHBhZ2VzIHRoYXQgY29udGFpbiBoYXJkd2FyZS1wb2lzb25lZCBzdWJwYWdlcywgcmV0dXJuaW5nIC1FSFdQT0lTT04uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1pZ3JhdGlvbiBsb2dpYy4gVG8gcmVhY2ggYW5kIHRlc3QgdGhpcyBjb2RlLCBodWdlIHBhZ2Ugc3VwcG9ydCAoQ09ORklHX0hVR0VUTEJfUEFHRSksIG1lbW9yeSBtaWdyYXRpb24gKENPTkZJR19NSUdSQVRJT04pLCBhbmQgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgKENPTkZJR19NRU1PUllfRkFJTFVSRSkgbXVzdCBiZSBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNGJiZDFjNDc2NmYwNTFlZmFmNWE0ZmU2ZGZkZDg4ZDdkOTMyNThkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAxNzoyMjoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCA0OWUxMGZlZWIwOTRmMC4uYWMxMmU5YWViMDVmMTggMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTE1MTAsNiAmIzQzOzE1MTAsMTEgQEAgc3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAomIzQzOwlpZiAodW5saWtlbHkoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3JjKSkpIHsKJiM0MzsJCXJjID0gLUVIV1BPSVNPTjsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwogCWlmIChmb2xpb190ZXN0X2Fub24oc3JjKSkKIAkJYW5vbl92bWEgPSBmb2xpb19nZXRfYW5vbl92bWEoc3JjKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1pZ3JhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjcnVjaWFsIGNoZWNrIHdpdGhpbiB0aGUgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseTogYGlmICh1bmxpa2VseShmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzcmMpKSlgLiBSaWdodCwgc28gaWYgdGhlIHNvdXJjZSBodWdlIHBhZ2UgaGFwcGVucyB0byBjb250YWluIGEgaGFyZHdhcmUtcG9pc29uZWQgcGFnZSwgdGhpcyBjaGVjayB3aWxsIHJldHVybiBhbiBgLUVIV1BPSVNPTmAgZXJyb3IuIEVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gdGhlIG1lbW9yeSBtaWdyYXRpb24gcHJvY2VzczsgaXQmIzM5O3MgZXhwbGljaXRseSBoYW5kbGluZyB0aGUgc2NlbmFyaW8gb2YgbWlncmF0aW5nIGEgY29ycnVwdGVkIGh1Z2UgcGFnZS4gCgpJIG5lZWQgdG8gcXVpY2tseSBkaWcgaW50byB0aGUgY29kZSBub3cuIE15IGZpcnN0IHN0ZXAgaXMgdG8gbG9jYXRlIHRoZSBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBmdW5jdGlvbiBhbmQgdGhlIGRlZmluaXRpb24gb2YgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgbW0vbWlncmF0ZS5jYCwgbmF0dXJhbGx5LCB0byBmaW5kIHRoZSBtaWdyYXRpb24gbG9naWMgYW5kIHRoZW4gc2VlayBvdXQgdGhlIGBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZWAgZGVmaW5pdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhpcyBjaGFuZ2UgbGllcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBwb2lzb25lZCBwYWdlIGRldGVjdGlvbiBpbXBhY3RzIHRoZSBvdmVyYWxsIG1pZ3JhdGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MTM1Mz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fbW92ZShmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLS1cbm1tL21pZ3JhdGUuYy0xNDY4LSAqL1xubW0vbWlncmF0ZS5jOjE0Njk6c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0xNDcwLVx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLS1cbm1tL21pZ3JhdGUuYz0xNjMyPXN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0xNjcwLVxubW0vbWlncmF0ZS5jOjE2NzE6XHRcdFx0cmMgPSB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UoZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0xNjcyLVx0XHRcdFx0XHRcdCAgICAgIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ1NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipVbnBhY2tpbmcgdGhlIE1lbW9yeSBNaWdyYXRpb24gUHJvY2VzcyoqCgpSaWdodCwgc28gYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuLi4gSSBuZWVkIHRvIHJlbWVtYmVyIHdoZXJlIHRoaXMgZnVuY3Rpb24gc2l0cyBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gQWgsIHllcywgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtaWdyYXRlX2h1Z2V0bGJzYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBBbmQgYG1pZ3JhdGVfaHVnZXRsYnNgLCBpbiB0dXJuLCBpcyB0cmlnZ2VyZWQgYnkgc29tZXRoaW5nIGxpa2UgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIG9yIGEgcmVsYXRlZCBtaWdyYXRpb24gZnVuY3Rpb24uIFRoaXMgc3VnZ2VzdHMgYSBtdWx0aS1zdGVwIHByb2Nlc3MgZm9yIGhhbmRsaW5nIGh1Z2UgcGFnZXMgZHVyaW5nIG1pZ3JhdGlvbi4gTm93LCBJIGhhdmUgdG8gZmluZCBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGJlY2F1c2UsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgdGhlcmUmIzM5O3MgYSByZWFzb24gZm9yIGxvb2tpbmcgYXQgdGhhdCBmdW5jdGlvbiBpbiByZWxhdGlvbiB0byBtZW1vcnkgbWlncmF0aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHRpZXMgaW50byB0aGlzIHNwZWNpZmljIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcxLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA3MjpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNzMte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDQwOT1zdGF0aWMgYm9vbCB0aHBfdW5kZXJ1c2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NDE2LVxubW0vaHVnZV9tZW1vcnkuYzo0NDE3Olx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDQxOC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTc5Mz1zdGF0aWMgdm9pZCBkb19taWdyYXRlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODE1LVxubW0vbWVtb3J5X2hvdHBsdWcuYzoxODE2Olx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4MTctXHRcdFx0Lypcbi0tXG5tbS9taWdyYXRlLmM9MTQ2OT1zdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0xNTEyLVxubW0vbWlncmF0ZS5jOjE1MTM6XHRpZiAodW5saWtlbHkoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3JjKSkpIHtcbm1tL21pZ3JhdGUuYy0xNTE0LVx0XHRyYyA9IC1FSFdQT0lTT047XG4tLVxubW0vc2htZW0uYz0zMjE2PXNobWVtX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vc2htZW0uYy0zMjQyLVxubW0vc2htZW0uYzozMjQzOlx0aWYgKGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKGZvbGlvKSkge1xubW0vc2htZW0uYy0zMjQ0LVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTEwNTA9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTEwODMtXG5tbS92bXNjYW4uYzoxMDg0Olx0XHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XG5tbS92bXNjYW4uYy0xMDg1LVx0XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZSBQYWdlIE1pZ3JhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGNoZWNrIHdpdGhpbiBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgdGhlIG1pZ3JhdGlvbiBvZiBodWdlIHBhZ2VzIGlmIHRoZXkgY29udGFpbiBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcy4gVGhhdCYjMzk7cyBnb29kLCBzZWVtcyBzZW5zaWJsZSB0byBhdm9pZCBjb3JydXB0aW5nIGRhdGEgZHVyaW5nIGEgbW92ZS4gTm8gb2J2aW91cyBpc3N1ZXMgc28gZmFyLgoKQnV0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dC4gVGhpcyBraW5kIG9mIGNoYW5nZSBjYW4gc29tZXRpbWVzIGJlIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gQmVmb3JlIEkgc2lnbiBvZmYgb24gdGhpcywgSSBuZWVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXJlJiMzOTtzIGFueSBpbXBsaWNpdCBvciBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIGNlcnRhaW4ga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZmxhZyBvciBzZXR0aW5nIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGlzIHBhcnRpY3VsYXIgcG9pc29uLWRldGVjdGlvbiBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIHJlc2VhcmNoIHRoYXQuCgpOb3csIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiwgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAsIHJlc2lkZXMgd2l0aGluIGBtbS9taWdyYXRlLmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucyB0aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIGBtbS9taWdyYXRlLmNgIGl0c2VsZiBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBJcyBpdCBiZWhpbmQgYSBLY29uZmlnIG9wdGlvbj8gS25vd2luZyB0aGF0IHdpbGwgYWxsb3cgbWUgdG8gbmFycm93IGRvd24gdGhlIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSB3aWxsIG5lZWQgdG8gY2hlY2sgYmVmb3JlIGFjY2VwdGluZyB0aGlzIHBhdGNoLCBvciBhc2tpbmcgdGhlIGF1dGhvciBmb3IgY2xhcmlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT05Nz1vYmotJChDT05GSUdfTUVNVEVTVClcdFx0JiM0Mzs9IG1lbXRlc3Qub1xubW0vTWFrZWZpbGU6OTg6b2JqLSQoQ09ORklHX01JR1JBVElPTikgJiM0Mzs9IG1pZ3JhdGUub1xubW0vTWFrZWZpbGUtOTktb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NjgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgYnJhaW4gaXMgc3RhcnRpbmcgdG8gY2h1cm4gb24gdGhpcy4KCioqSW52ZXN0aWdhdGluZyBhIE1pZ3JhdGlvbiBTY2VuYXJpbyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG1pZ3JhdGlvbiBzaXR1YXRpb24gaGVyZSwgdGhhdCYjMzk7cyBjbGVhciDigJMgd2UgbmVlZCBgQ09ORklHX01JR1JBVElPTmAgdG8gYmUgaW4gcGxheSwgdGhhdCYjMzk7cyBzdGVwIG9uZS4gQW5kLCBmcm9tIHRoZSBsb29rcyBvZiBpdCwgaHVnZSBwYWdlcyBhcmUgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBwaWN0dXJlLiBJJiMzOTttIHRoaW5raW5nLCBzcGVjaWZpY2FsbHksIHRoYXQgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgaXMgdGhlIGtleSBmdW5jdGlvbiBiZWluZyB1c2VkLCB3aGljaCBzY3JlYW1zIGh1Z2V0bGIgcGFnZSBoYW5kbGluZy4gTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBhcm91bmQgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGRlcGVuZGVudCBvbiBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gZmxhZywgc29tZSBgI2lmZGVmYCBwZXJoYXBzLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MTM1Mz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fbW92ZShmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLS1cbm1tL21pZ3JhdGUuYy0xNDY4LSAqL1xubW0vbWlncmF0ZS5jOjE0Njk6c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0xNDcwLVx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLS1cbm1tL21pZ3JhdGUuYz0xNjMyPXN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0xNjcwLVxubW0vbWlncmF0ZS5jOjE2NzE6XHRcdFx0cmMgPSB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UoZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0xNjcyLVx0XHRcdFx0XHRcdCAgICAgIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG1tL21pZ3JhdGUuY2AgLSBMaW5lIDE0NjkgYW5kIEJleW9uZCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgbW0vbWlncmF0ZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE0NjkuIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGguLi4gd2VsbCwgYmFzZWQgb24gdGhlIGNvbnRleHQgb2YgbWlncmF0aW9uIGluIHRoZSBrZXJuZWwsIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgbWVjaGFuaWNzIG9mIG1vdmluZyBwYWdlcy4gSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSBzZWVpbmcgY29kZSByZWxhdGVkIHRvIHRoZSBhY3R1YWwgY29weWluZywgdXBkYXRpbmcgcGFnZSB0YWJsZXMsIG9yIHBlcmhhcHMgZXZlbiBoYW5kbGluZyB0aGUgbG9ja2luZyBuZWNlc3NhcnkgZm9yIGEgY29uc2lzdGVudCBtaWdyYXRpb24gb3BlcmF0aW9uLiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSwgdGhlcmUgbWlnaHQgYmUgc3BlY2lmaWMgY29kZSByZWxhdGVkIHRvIHRyYW5zbGF0aW9uIGxvb2thc2lkZSBidWZmZXJzIChUTEJzKSBhbmQgY2FjaGUgY29oZXJlbmN5LiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW50cmljYXRlIGRldGFpbHMgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCAoTU1VKSBoZXJlLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCB0aGUgZXhhY3QgbG9naWMgdXNlZCB0byBjb3B5IGRhdGEsIHVwZGF0ZSBwYWdlIHRhYmxlcywgYW5kIG1ha2UgYW55IFRMQiBpbnZhbGlkYXRpb24gdGhhdCBpcyByZXF1aXJlZC4gSSBhbnRpY2lwYXRlIHNvbWUgaW50ZXJlc3Rpbmcgc3VidGxldGllcyBhcm91bmQgdGhlIGF0b21pYyBvcGVyYXRpb25zIHJlcXVpcmVkIHRvIG1haW50YWluIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB0aGUgbWlncmF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB0aGlzIHNlY3Rpb24gb2YgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ0MDpcdFx0XHRfX21pZ3JhdGVfZm9saW9fcmVjb3JkKGRzdCwgb2xkX2ZvbGlvX3N0YXRlLCBhbm9uX3ZtYSk7XG4xNDQxOlx0XHRcdHJldHVybiByYztcbjE0NDI6XHRcdH1cbjE0NDM6XHRcbjE0NDQ6XHRcdG1pZ3JhdGVfZm9saW9fdW5kb19zcmMoc3JjLCBvbGRfZm9saW9fc3RhdGUgXHUwMDI2IEZPTElPX1dBU19NQVBQRUQsXG4xNDQ1Olx0XHRcdFx0ICAgICAgIGFub25fdm1hLCB0cnVlLCByZXQpO1xuMTQ0NjpcdFx0bWlncmF0ZV9mb2xpb191bmRvX2RzdChkc3QsIHRydWUsIHB1dF9uZXdfZm9saW8sIHByaXZhdGUpO1xuMTQ0NzpcdFxuMTQ0ODpcdFx0cmV0dXJuIHJjO1xuMTQ0OTpcdH1cbjE0NTA6XHRcbjE0NTE6XHQvKlxuMTQ1MjpcdCAqIENvdW50ZXJwYXJ0IG9mIHVubWFwX2FuZF9tb3ZlX3BhZ2UoKSBmb3IgaHVnZXBhZ2UgbWlncmF0aW9uLlxuMTQ1MzpcdCAqXG4xNDU0Olx0ICogVGhpcyBmdW5jdGlvbiBkb2VzbiYjMzk7dCB3YWl0IHRoZSBjb21wbGV0aW9uIG9mIGh1Z2VwYWdlIEkvT1xuMTQ1NTpcdCAqIGJlY2F1c2UgdGhlcmUgaXMgbm8gcmFjZSBiZXR3ZWVuIEkvTyBhbmQgbWlncmF0aW9uIGZvciBodWdlcGFnZS5cbjE0NTY6XHQgKiBOb3RlIHRoYXQgY3VycmVudGx5IGh1Z2VwYWdlIEkvTyBvY2N1cnMgb25seSBpbiBkaXJlY3QgSS9PXG4xNDU3Olx0ICogd2hlcmUgbm8gbG9jayBpcyBoZWxkIGFuZCBQR193cml0ZWJhY2sgaXMgaXJyZWxldmFudCxcbjE0NTg6XHQgKiBhbmQgd3JpdGViYWNrIHN0YXR1cyBvZiBhbGwgc3VicGFnZXMgYXJlIGNvdW50ZWQgaW4gdGhlIHJlZmVyZW5jZVxuMTQ1OTpcdCAqIGNvdW50IG9mIHRoZSBoZWFkIHBhZ2UgKGkuZS4gaWYgYWxsIHN1YnBhZ2VzIG9mIGEgMk1CIGh1Z2VwYWdlIGFyZVxuMTQ2MDpcdCAqIHVuZGVyIGRpcmVjdCBJL08sIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGhlYWQgcGFnZSBpcyA1MTIgYW5kIGEgYml0IG1vcmUuKVxuMTQ2MTpcdCAqIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHdlIHRyeSB0byBtaWdyYXRlIGh1Z2VwYWdlIHdob3NlIHN1YnBhZ2VzIGFyZVxuMTQ2MjpcdCAqIGRvaW5nIGRpcmVjdCBJL08sIHNvbWUgcmVmZXJlbmNlcyByZW1haW4gYWZ0ZXIgdHJ5X3RvX3VubWFwKCkgYW5kXG4xNDYzOlx0ICogaHVnZXBhZ2UgbWlncmF0aW9uIGZhaWxzIHdpdGhvdXQgZGF0YSBjb3JydXB0aW9uLlxuMTQ2NDpcdCAqXG4xNDY1Olx0ICogVGhlcmUgaXMgYWxzbyBubyByYWNlIHdoZW4gZGlyZWN0IEkvTyBpcyBpc3N1ZWQgb24gdGhlIHBhZ2UgdW5kZXIgbWlncmF0aW9uLFxuMTQ2NjpcdCAqIGJlY2F1c2UgdGhlbiBwdGUgaXMgcmVwbGFjZWQgd2l0aCBtaWdyYXRpb24gc3dhcCBlbnRyeSBhbmQgZGlyZWN0IEkvTyBjb2RlXG4xNDY3Olx0ICogd2lsbCB3YWl0IGluIHRoZSBwYWdlIGZhdWx0IGZvciBtaWdyYXRpb24gdG8gY29tcGxldGUuXG4xNDY4Olx0ICovXG4xNDY5Olx0c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbjE0NzA6XHRcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbjE0NzE6XHRcdFx0c3RydWN0IGZvbGlvICpzcmMsIGludCBmb3JjZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSxcbjE0NzI6XHRcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbjE0NzM6XHR7XG4xNDc0Olx0XHRzdHJ1Y3QgZm9saW8gKmRzdDtcbjE0NzU6XHRcdGludCByYyA9IC1FQUdBSU47XG4xNDc2Olx0XHRpbnQgcGFnZV93YXNfbWFwcGVkID0gMDtcbjE0Nzc6XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBOVUxMO1xuMTQ3ODpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBOVUxMO1xuMTQ3OTpcdFx0ZW51bSB0dHVfZmxhZ3MgdHR1ID0gMDtcbjE0ODA6XHRcbjE0ODE6XHRcdGlmIChmb2xpb19yZWZfY291bnQoc3JjKSA9PSAxKSB7XG4xNDgyOlx0XHRcdC8qIHBhZ2Ugd2FzIGZyZWVkIGZyb20gdW5kZXIgdXMuIFNvIHdlIGFyZSBkb25lLiAqL1xuMTQ4MzpcdFx0XHRmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3JjKTtcbjE0ODQ6XHRcdFx0cmV0dXJuIDA7XG4xNDg1Olx0XHR9XG4xNDg2Olx0XG4xNDg3Olx0XHRkc3QgPSBnZXRfbmV3X2ZvbGlvKHNyYywgcHJpdmF0ZSk7XG4xNDg4Olx0XHRpZiAoIWRzdClcbjE0ODk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAqKgoKT2theSwgc28gSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgdGhlIGNvbXBpbGF0aW9uIG9mIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBNeSBpbnR1aXRpb24gc2F5cyBpdCYjMzk7cyBwcm9iYWJseSBvbmx5IGJyb3VnaHQgaW50byBleGlzdGVuY2Ugd2hlbiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgZW5hYmxlZCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBJdCYjMzk7cyB0b28gZWFzeSB0byBhc3N1bWUgdGhlc2UgdGhpbmdzLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgcHJlcHJvY2Vzc29yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXRzZWxmIG9yIGl0cyBkZWNsYXJhdGlvbi4gVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgZXZpZGVuY2U7IGEgcXVpY2sgc2VhcmNoIHNob3VsZCB0ZWxsIHRoZSB0YWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTQxMy1cbm1tL21pZ3JhdGUuYzo0MTQ6I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0Vcbm1tL21pZ3JhdGUuYy00MTUtXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XG4tLVxubW0vbWlncmF0ZS5jPTQ4MT12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuLS1cbm1tL21pZ3JhdGUuYy01MDgtXG5tbS9taWdyYXRlLmM6NTA5OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG5tbS9taWdyYXRlLmMtNTEwLS8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOgoKKipDaGVja2luZyBmb3IgSHVnZVRMQiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB3ZSYjMzk7cmUgb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYG1pZ3JhdGVfaHVnZXRsYnNgIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgaXRzIGluY2x1c2lvbiBpcyBnb3Zlcm5lZCBieSB0aGUgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIGlzIGZ1bmRhbWVudGFsLCByaWdodD8gV2Ugd291bGRuJiMzOTt0IHdhbnQgY29kZSByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgbGVha2luZyBpbnRvIHRoZSBidWlsZCB1bmxlc3MgaHVnZSBwYWdlcyBhcmUgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSBldmVuIHRoZSBzbGlnaHRlc3Qgb3ZlcnNpZ2h0IGhlcmUgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBjb21waWxhdGlvbiBlcnJvcnMgZG93biB0aGUgbGluZSwgYW5kIHdlIG5lZWQgYSByb2NrLXNvbGlkIGZvdW5kYXRpb24uIEl04oCZcyBhbHdheXMgYmVzdCB0byBjaGVjayB0aGVzZSBzb3J0cyBvZiB0aGluZ3MgZmlyc3QsIGJlZm9yZSB3ZSBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlLCBhbmQgY29uZmlybSB0aGF0IG91ciBhc3N1bXB0aW9ucyBhYm91dCBjb25maWd1cmF0aW9uIGFyZSBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX2h1Z2V0bGJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYz0xNjE0PXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcbi0tXG5tbS9taWdyYXRlLmMtMTYzMS0gKi9cbm1tL21pZ3JhdGUuYzoxNjMyOnN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxubW0vbWlncmF0ZS5jLTE2MzMtXHRcdFx0ICAgIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tLVxubW0vbWlncmF0ZS5jPTIwOTQ9aW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMjEwOS1cbm1tL21pZ3JhdGUuYzoyMTEwOlx0cmNfZ2F0aGVyID0gbWlncmF0ZV9odWdldGxicyhmcm9tLCBnZXRfbmV3X2ZvbGlvLCBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLFxubW0vbWlncmF0ZS5jLTIxMTEtXHRcdFx0XHQgICAgIG1vZGUsIHJlYXNvbiwgXHUwMDI2c3RhdHMsIFx1MDAyNnJldF9mb2xpb3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjg5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb21waWxhdGlvbiBhbmQgRGVwZW5kZW5jaWVzIG9mIGBtaWdyYXRlX2h1Z2V0bGJzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbWlncmF0ZV9odWdldGxic2AgZnVuY3Rpb24sIGFuZCBzb21ldGhpbmcmIzM5O3MgaW1tZWRpYXRlbHkgc3RyaWtpbmcgbWUuIEl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBndWFyZGVkIGJ5IGEgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGF0IG1lYW5zIGl0IG1pZ2h0IGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB1bmNvbmRpdGlvbmFsbHksIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBIdWdlVExCIHN1cHBvcnQgaXMgYWN0dWFsbHkgZW5hYmxlZCBhdCBib290IHRpbWUuIFRoZSB3YXkgaXQgd29ya3MsIHRoZW4sIHdvdWxkIGJlIHRvIGR5bmFtaWNhbGx5IHByb2Nlc3MgaHVnZXRsYiBwYWdlcyBpZiB0aGV5IGhhcHBlbiB0byBleGlzdC4gSW50ZXJlc3RpbmcgYXBwcm9hY2guIEkmIzM5O2xsIGhhdmUgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBtaWdodCBhZmZlY3QgbW9kdWxlIGxvYWRpbmcgb3Igc3lzdGVtIGluaXRpYWxpemF0aW9uLCBpZiBhdCBhbGwuCgpXYWl0IGEgc2Vjb25kLCBJIHNlZSBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGJlaW5nIHVzZWQgaW4gdGhlcmUuIFRoYXQgZnVuY3Rpb24gc291bmRzIGxpa2UgaXQgZGVhbHMgd2l0aCBoYXJkd2FyZS1wb2lzb25lZCBwYWdlcywgd2hpY2ggc3VnZ2VzdHMgd2UgbmVlZCBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBmb3IgdGhpcyBmZWF0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB3ZSYjMzk7bGwgbmVlZCB0byBiZSBtaW5kZnVsIG9mIGl0cyBpbnRlcnBsYXkgd2l0aCBvdGhlciBtZW1vcnkgZXJyb3IgaGFuZGxpbmcgY29tcG9uZW50cy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzeXN0ZW0gaXMgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgdGhlIGtpbmQgb2YgbWVtb3J5IGZhaWx1cmVzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gcm9idXN0bmVzcyBhbmQgZXJyb3IgcmVjb3ZlcnksIHNvIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyByZWxhdGlvbnNoaXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcxLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA3MjpzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNzMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Nzk3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBQYWdlIEZsYWdzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIHNob3VsZCBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGVzZSBwYWdlIGZsYWdzPyBMZXQmIzM5O3MgemVybyBpbiBvbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTA3Mi4gVGhhdCBsb2NhdGlvbiBpcyB1c3VhbGx5IGEgZ29vZCBiZXQgZm9yIGZpbmRpbmcgc29tZSBvZiB0aGUgY29yZSBkZWZpbml0aW9ucyBvciBtYXliZSBhIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byBwYWdlIGZsYWdzLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZsYWdzIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0IGtleSBjb25zaWRlcmF0aW9ucyBhcmUgaW52b2x2ZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2MDpcdCAqIGZhaWxpbmcgaGFyZHdhcmUuXG4xMDYxOlx0ICovXG4xMDYyOlx0c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4xMDYzOlx0e1xuMTA2NDpcdFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbztcbjEwNjU6XHRcbjEwNjY6XHRcdGlmIChQYWdlSFdQb2lzb24ocGFnZSkpXG4xMDY3Olx0XHRcdHJldHVybiB0cnVlO1xuMTA2ODpcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuMTA2OTpcdFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgXHUwMDI2XHUwMDI2IFBhZ2VIV1BvaXNvbihcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbjEwNzA6XHR9XG4xMDcxOlx0XG4xMDcyOlx0c3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4xMDczOlx0e1xuMTA3NDpcdFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XG4xMDc1Olx0XHQgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2hhc19od3BvaXNvbmVkKGZvbGlvKSk7XG4xMDc2Olx0fVxuMTA3NzpcdFxuMTA3ODpcdGJvb2wgaXNfZnJlZV9idWRkeV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbjEwNzk6XHRcbjEwODA6XHQjaWZkZWYgQ09ORklHX01JR1JBVElPTlxuMTA4MTpcdC8qXG4xMDgyOlx0ICogVGhpcyBwYWdlIGlzIG1pZ3JhdGFibGUgdGhyb3VnaCBtb3ZhYmxlX29wcyAoZm9yIHNlbGVjdGVkIHR5cGVkIHBhZ2VzXG4xMDgzOlx0ICogb25seSkuXG4xMDg0Olx0ICpcbjEwODU6XHQgKiBQYWdlIG1pZ3JhdGlvbiBvZiBzdWNoIHBhZ2VzIG1pZ2h0IGZhaWwsIGZvciBleGFtcGxlLCBpZiB0aGUgcGFnZSBpc1xuMTA4NjpcdCAqIGFscmVhZHkgaXNvbGF0ZWQgYnkgc29tZWJvZHkgZWxzZSwgb3IgaWYgdGhlIHBhZ2UgaXMgYWJvdXQgdG8gZ2V0IGZyZWVkLlxuMTA4NzpcdCAqXG4xMDg4Olx0ICogV2hpbGUgYSBzdWJzeXN0ZW0gbWlnaHQgc2V0IHNlbGVjdGVkIHR5cGVkIHBhZ2VzIHRoYXQgc3VwcG9ydCBwYWdlIG1pZ3JhdGlvblxuMTA4OTpcdCAqIGFzIGJlaW5nIG1vdmFibGUgdGhyb3VnaCBtb3ZhYmxlX29wcywgaXQgbXVzdCBuZXZlciBjbGVhciB0aGlzIGZsYWcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEhhcmR3YXJlIFBvaXNvbmluZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSBkZWZpbmVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBoYXZlIGhhcmR3YXJlIHBvaXNvbmluZyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBzaG91bGRuJiMzOTt0IGl0cyBleGlzdGVuY2UgYmUgdGllZCB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgc2luY2UgaGFyZHdhcmUgcG9pc29uaW5nIGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhhdCBmZWF0dXJlPyBJZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpc24mIzM5O3QgZW5hYmxlZCwgd291bGRuJiMzOTt0IGBmb2xpb190ZXN0X2h3cG9pc29uYCBqdXN0IHJldHVybiBgZmFsc2VgIGFueXdheSwgcmVuZGVyaW5nIGBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZWAgcG90ZW50aWFsbHkgcmVkdW5kYW50PyBJdCBpcyB3b3J0aCBjaGVja2luZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZvbGlvX3Rlc3RfaHdwb2lzb25gIGluIG1vcmUgZGV0YWlsOyBpdCBpcyB0aGUga2V5IHBpZWNlIGhlcmUuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoYXQgbmV4dCB0byBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBob3cgaXQgaW1wYWN0cyBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIHdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3Rlc3RfaHdwb2lzb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDcyPXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3My17XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDc0Olx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDc1LVx0ICAgIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgSGFyZHdhcmUgUG9pc29uaW5nIEZsYWcgRGVmaW5pdGlvbnMqKgoKUmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBndXQgZmVlbGluZyBpcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGhhcmR3YXJlLWluZHVjZWQgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCB0aGUga2VybmVsIGxpa2VseSBoYXMgc29tZSBkZWRpY2F0ZWQgZmxhZ3MgZm9yIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3BlY2lmaWNzLCBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgbWFjcm8gZGVmaW5pdGlvbnMuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgYGdyZXBgIHNlYXJjaC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAg4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3BvdCBmb3IgcGFnZS1yZWxhdGVkIGZsYWdzLiBUaGUga2V5IHNlYXJjaCB0ZXJtcyBhcmUgZ29pbmcgdG8gYmUgYWxvbmcgdGhlIGxpbmVzIG9mIGBQQUdFRkxBRyhIV1BvaXNvbilgIG9yIHNpbWlsYXIgdmFyaWF0aW9ucyB0aGF0IHJlbGF0ZSB0byBoYXJkd2FyZS1kZXRlY3RlZCBlcnJvcnMsIGNvcnJ1cHRpb24sIG9yIHBvaXNvbmluZyBvZiBtZW1vcnkgcGFnZXMuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byB0aGluayBjcmVhdGl2ZWx5IGFib3V0IHRoZSBwb3NzaWJsZSBuYW1pbmcgY29udmVudGlvbnMsIHRvIG1ha2UgdGhlIGBncmVwYCBzZWFyY2ggbW9yZSBlZmZlY3RpdmUuIEZyb20gdGhlcmUsIEkgY2FuIGludmVzdGlnYXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHJlc3VsdGluZyBkZWZpbml0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgbGlzdCBvZiBkZWZpbml0aW9ucyB0byB0aGVuIHN0YXJ0IGFuYWx5emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SFdQb2lzb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD02NDc9Rk9MSU9fRkxBR19GQUxTRShtbG9ja2VkKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1My0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2NTQ6UEFHRUZMQUcoSFdQb2lzb24sIGh3cG9pc29uLCBQRl9BTlkpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2NTU6VEVTVFNDRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1Ni0jZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcdTAwM2NcdTAwM2MgUEdfaHdwb2lzb24pXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02NTctI2Vsc2VcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjY1ODpQQUdFRkxBR19GQUxTRShIV1BvaXNvbiwgaHdwb2lzb24pXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02NTktI2RlZmluZSBfX1BHX0hXUE9JU09OIDBcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD04Nzc9Rk9MSU9fRkxBR19GQUxTRShwYXJ0aWFsbHlfbWFwcGVkKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTg4My0vKlxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6ODg0OiAqIFBhZ2VIYXNIV1BvaXNvbmVkIGluZGljYXRlcyB0aGF0IGF0IGxlYXN0IG9uZSBzdWJwYWdlIGlzIGh3cG9pc29uZWQgaW4gdGhlXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC04ODUtICogY29tcG91bmQgcGFnZS5cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDUyPXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDU3LS8qXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDU4OiAqIENoZWNrIGlmIGEgcGFnZSBpcyBjdXJyZW50bHkgbWFya2VkIEhXUG9pc29uZWQuIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDU5LSAqIGJlc3QgZWZmb3J0IG9ubHkgYW5kIGluaGVyZW50bHkgcmFjeTogdGhlcmUgaXMgbm8gd2F5IHRvIHN5bmNocm9uaXplIHdpdGhcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDYyPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNjUtXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDY2Olx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNjctXHRcdHJldHVybiB0cnVlO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNjk6XHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUmIzM5O3MgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNlY3Rpb24gYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgaGVyZS4gV2l0aG91dCBpdCwgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBmb2xpb190ZXN0X2h3cG9pc29uYCBhbmQgYGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWRgIHdpbGwgYWx3YXlzIGV2YWx1YXRlIHRvIGZhbHNlLCB3aGljaCBpcyBubyBnb29kIGZvciB0ZXN0aW5nIHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0IHByb3Blcmx5LgoKVGhlbiB0aGVyZSYjMzk7cyBgQ09ORklHX01JR1JBVElPTmA7IHNlZW1zIHByZXR0eSBvYnZpb3VzIHRoYXQgSSYjMzk7bGwgbmVlZCB0aGF0IHRvIGV2ZW4gY29tcGlsZSBgbW0vbWlncmF0ZS5jYC4gQ2FuJiMzOTt0IHJlYWxseSBnZXQgYW55d2hlcmUgd2l0aG91dCB0aGF0LiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGVzc2VudGlhbCBpZiBJIGFjdHVhbGx5IHdhbnQgdG8gdGVzdCB0aGUgaHVnZSBwYWdlIG1pZ3JhdGlvbiBmdW5jdGlvbmFsaXR5LiBNYWtlcyBzZW5zZSwgSSBuZWVkICpzb21ldGhpbmcqIHRvIG1pZ3JhdGUuCgpOb3csIEkmIzM5O20ganVzdCBjdXJpb3VzIGFib3V0IGBDT05GSUdfSFVHRVRMQl9QQUdFYC4gSSB3YW50IHRvIHZlcmlmeSBpZiBpdCYjMzk7cyBzdHJpY3RseSAqcmVxdWlyZWQqLiBJIHNlZSB0aGF0IGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIGNhbGxlZCBmcm9tIGBtaWdyYXRlX2h1Z2V0bGJzYC4gSG1tLi4uIGlmIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBkaXNhYmxlZCwgY291bGQgYG1pZ3JhdGVfaHVnZXRsYnNgIHBvc3NpYmx5IGp1c3QgYmUgYSBuby1vcD8gVGhhdCB3b3VsZCBtYWtlIHNlbnNlIGZyb20gYSBkZXNpZ24gcGVyc3BlY3RpdmUuIExldCYjMzk7cyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1pZ3JhdGVfaHVnZXRsYnNgIGFuZCBzZWUgd2hhdCBpdCBhY3R1YWxseSBkb2VzIHdoZW4gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIG5vdCBlbmFibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gdGhhdCBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYzMjpcdHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuMTYzMzpcdFx0XHRcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuMTYzNDpcdFx0XHRcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbjE2MzU6XHRcdFx0XHQgICAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxuMTYzNjpcdFx0XHRcdCAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zKVxuMTYzNzpcdHtcbjE2Mzg6XHRcdGludCByZXRyeSA9IDE7XG4xNjM5Olx0XHRpbnQgbnJfZmFpbGVkID0gMDtcbjE2NDA6XHRcdGludCBucl9yZXRyeV9wYWdlcyA9IDA7XG4xNjQxOlx0XHRpbnQgcGFzcyA9IDA7XG4xNjQyOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqZm9saW8yO1xuMTY0MzpcdFx0aW50IHJjLCBucl9wYWdlcztcbjE2NDQ6XHRcbjE2NDU6XHRcdGZvciAocGFzcyA9IDA7IHBhc3MgXHUwMDNjIE5SX01BWF9NSUdSQVRFX1BBR0VTX1JFVFJZIFx1MDAyNlx1MDAyNiByZXRyeTsgcGFzcyYjNDM7JiM0MzspIHtcbjE2NDY6XHRcdFx0cmV0cnkgPSAwO1xuMTY0NzpcdFx0XHRucl9yZXRyeV9wYWdlcyA9IDA7XG4xNjQ4Olx0XG4xNjQ5Olx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb2xpbywgZm9saW8yLCBmcm9tLCBscnUpIHtcbjE2NTA6XHRcdFx0XHRpZiAoIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4xNjUxOlx0XHRcdFx0XHRjb250aW51ZTtcbjE2NTI6XHRcbjE2NTM6XHRcdFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbjE2NTQ6XHRcbjE2NTU6XHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjE2NTY6XHRcbjE2NTc6XHRcdFx0XHQvKlxuMTY1ODpcdFx0XHRcdCAqIE1pZ3JhdGFiaWxpdHkgb2YgaHVnZXBhZ2VzIGRlcGVuZHMgb24gYXJjaGl0ZWN0dXJlcyBhbmRcbjE2NTk6XHRcdFx0XHQgKiB0aGVpciBzaXplLiAgVGhpcyBjaGVjayBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzb21lIGNhbGxlcnNcbjE2NjA6XHRcdFx0XHQgKiBvZiBodWdlcGFnZSBtaWdyYXRpb24gbGlrZSBzb2Z0IG9mZmxpbmUgYW5kIG1lbW9yeVxuMTY2MTpcdFx0XHRcdCAqIGhvdHJlbW92ZSBkb24mIzM5O3Qgd2FsayB0aHJvdWdoIHBhZ2UgdGFibGVzIG9yIGNoZWNrIHdoZXRoZXJcbjE2NjI6XHRcdFx0XHQgKiB0aGUgaHVnZXBhZ2UgaXMgcG1kLWJhc2VkIG9yIG5vdCBiZWZvcmUga2lja2luZyBtaWdyYXRpb24uXG4xNjYzOlx0XHRcdFx0ICovXG4xNjY0Olx0XHRcdFx0aWYgKCFodWdlcGFnZV9taWdyYXRpb25fc3VwcG9ydGVkKGZvbGlvX2hzdGF0ZShmb2xpbykpKSB7XG4xNjY1Olx0XHRcdFx0XHRucl9mYWlsZWQmIzQzOyYjNDM7O1xuMTY2NjpcdFx0XHRcdFx0c3RhdHMtXHUwMDNlbnJfZmFpbGVkX3BhZ2VzICYjNDM7PSBucl9wYWdlcztcbjE2Njc6XHRcdFx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgcmV0X2ZvbGlvcyk7XG4xNjY4Olx0XHRcdFx0XHRjb250aW51ZTtcbjE2Njk6XHRcdFx0XHR9XG4xNjcwOlx0XG4xNjcxOlx0XHRcdFx0cmMgPSB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UoZ2V0X25ld19mb2xpbyxcbjE2NzI6XHRcdFx0XHRcdFx0XHQgICAgICBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLFxuMTY3MzpcdFx0XHRcdFx0XHRcdCAgICAgIGZvbGlvLCBwYXNzIFx1MDAzZSAyLCBtb2RlLFxuMTY3NDpcdFx0XHRcdFx0XHRcdCAgICAgIHJlYXNvbiwgcmV0X2ZvbGlvcyk7XG4xNjc1Olx0XHRcdFx0LypcbjE2NzY6XHRcdFx0XHQgKiBUaGUgcnVsZXMgYXJlOlxuMTY3NzpcdFx0XHRcdCAqXHQwOiBodWdldGxiIGZvbGlvIHdpbGwgYmUgcHV0IGJhY2tcbjE2Nzg6XHRcdFx0XHQgKlx0LUVBR0FJTjogc3RheSBvbiB0aGUgZnJvbSBsaXN0XG4xNjc5Olx0XHRcdFx0ICpcdC1FTk9NRU06IHN0YXkgb24gdGhlIGZyb20gbGlzdFxuMTY4MDpcdFx0XHRcdCAqXHRPdGhlciBlcnJubzogcHV0IG9uIHJldF9mb2xpb3MgbGlzdFxuMTY4MTpcdFx0XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyB0aGUgRm9saW8gRmlsdGVyaW5nIEZ1bmN0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gSXQmIzM5O3MgY2xlYXJseSBhIGZpbHRlcmluZyBmdW5jdGlvbiBmb3IgZm9saW9zLCBsaWtlbHkgcmVsYXRlZCB0byBIdWdlVExCIHBhZ2VzLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyB0aGUgcG90ZW50aWFsIGJlaGF2aW9yIHdoZW4gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGRpc2FibGVkLiBJZiB0aGF0IGNvbmZpZyBvcHRpb24gaXNuJiMzOTt0IHNldCwgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGlzIGZ1bmN0aW9uIHdpbGwgKmFsd2F5cyogcmV0dXJuIGZhbHNlLCBvciBhdCBsZWFzdCBiZWhhdmUgaW4gYSBsZXNzLXRoYW4taWRlYWwgbWFubmVyLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBxdWVzdGlvbnMgYWJvdXQgd2hldGhlciB0aGlzIG1pZ2h0IGJlIGEgc291cmNlIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9saW9fdGVzdF9odWdldGxiYCB0byBjb25maXJtIHRoaXMgc3VzcGljaW9uIGFuZCwgaWYgaXQgZG9lcyBiZWhhdmUgdGhpcyB3YXksIHVuZGVyc3RhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpbiBteSBzcGVjaWZpYyBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGNoZWNrIGl0cyBhY3R1YWwgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3Rlc3RfaHVnZXRsYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNTI9c3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1My17XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDU0Olx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTUtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNjI9c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNjk6XHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTk0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGZvbGlvX3Rlc3RfaHVnZXRsYmAgRGVmaW5pdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYGZvbGlvX3Rlc3RfaHVnZXRsYmAuIEl0JiMzOTtzIGNsZWFybHkgYSBmdW5jdGlvbiBvciBtYWNybyByZWxhdGVkIHRvIGh1Z2UgcGFnZXMsIGdpdmVuIHRoZSBuYW1lLCBidXQgSSBuZWVkIHRoZSBwcmVjaXNlIGRldGFpbHMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgcHVycG9zZS4gQSBxdWljayBgZ3JlcGAgd2lsbCBiZSB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGxvY2F0ZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGZ1bmN0aW9uJiMzOTtzIHNpZ25hdHVyZSBhbmQsIGlkZWFsbHksIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIGl0cyBpbnRlbmRlZCB1c2UuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSB0dXJuIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb190ZXN0X2h1Z2V0bGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD01OTk9c3RhdGljIF9fYWx3YXlzX2lubGluZVx0XHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2MDA6Ym9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTYwMS1cdHtcdHZvaWQgKnByaXZhdGUgPSBcdTAwMjZmb2xpby1cdTAwM2Vwcml2YXRlO1x0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTYyMD1zdGF0aWMgaW5saW5lIGJvb2xcdFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NjIxOmZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjIyLVx0eyByZXR1cm4gMDsgfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTg1MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBoc3RhdGUgKmZvbGlvX2hzdGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODUyLXtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjg1MzpcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODU0LVx0cmV0dXJuIHNpemVfdG9faHN0YXRlKGZvbGlvX3NpemUoZm9saW8pKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmg9NjE9X19odWdldGxiX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcnN2ZClcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC02Mi17XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmg6NjM6XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC02NC1cdGlmIChyc3ZkKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaD04MT1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfaHVnZXRsYl9jZ3JvdXAoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtODMte1xuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oOjg0Olx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtODUtXHRpZiAocnN2ZClcbi0tXG5pbmNsdWRlL2xpbnV4L2lvdl9pdGVyLmg9MjA0PXNpemVfdCBpdGVyYXRlX3hhcnJheShzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBsZW4sIHZvaWQgKnByaXYsIHZvaWQgKnByaXYyLFxuLS1cbmluY2x1ZGUvbGludXgvaW92X2l0ZXIuaC0yMjAtXHRcdFx0YnJlYWs7XG5pbmNsdWRlL2xpbnV4L2lvdl9pdGVyLmg6MjIxOlx0XHRpZiAoV0FSTl9PTihmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSlcbmluY2x1ZGUvbGludXgvaW92X2l0ZXIuaC0yMjItXHRcdFx0YnJlYWs7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTI4OTA9c3RhdGljIGlubGluZSBib29sIGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjg5NC1cdC8qIE9ubHkgcGFydGlhbGx5LW1hcHBhYmxlIGZvbGlvcyByZXF1aXJlIG1vcmUgY2FyZS4gKi9cbmluY2x1ZGUvbGludXgvbW0uaDoyODk1Olx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSB8fCB1bmxpa2VseShmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSlcbmluY2x1ZGUvbGludXgvbW0uaC0yODk2LVx0XHRyZXR1cm4gbWFwY291bnQgXHUwMDNlIDE7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTI5NDk9c3RhdGljIGlubGluZSBpbnQgZm9saW9fZXhwZWN0ZWRfcmVmX2NvdW50KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTI5NTMtXG5pbmNsdWRlL2xpbnV4L21tLmg6Mjk1NDpcdGlmIChXQVJOX09OX09OQ0UocGFnZV9oYXNfdHlwZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKVxuaW5jbHVkZS9saW51eC9tbS5oLTI5NTUtXHRcdHJldHVybiAwO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNTI9c3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1My17XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDU0Olx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTUtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNjI9c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNjk6XHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MC19XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmg9MTM1PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZvbGlvX2xhcmdlX21hcGNvdW50X3Nhbml0eV9jaGVja3MoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC0xMzcte1xuaW5jbHVkZS9saW51eC9ybWFwLmg6MTM4Olx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSB8fCBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKTtcbmluY2x1ZGUvbGludXgvcm1hcC5oLTEzOS1cdFZNX1dBUk5fT05fT05DRShkaWZmIFx1MDAzYz0gMCk7XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmg9MzMxPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2ZvbGlvX3JtYXBfc2FuaXR5X2NoZWNrcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oLTMzNC1cdC8qIGh1Z2V0bGIgZm9saW9zIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuICovXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDozMzU6XHRWTV9XQVJOX09OX0ZPTElPKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbmluY2x1ZGUvbGludXgvcm1hcC5oLTMzNi1cbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD00MzU9c3RhdGljIGlubGluZSBpbnQgaHVnZXRsYl90cnlfZHVwX2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oLTQzNy17XG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo0Mzg6XHRWTV9XQVJOX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3JtYXAuaC00MzktXHRWTV9XQVJOX09OX0ZPTElPKCFmb2xpb190ZXN0X2Fub24oZm9saW8pLCBmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmg9NDUyPXN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9ybWFwLmgtNDUzLXtcbmluY2x1ZGUvbGludXgvcm1hcC5oOjQ1NDpcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbmluY2x1ZGUvbGludXgvcm1hcC5oLTQ1NS1cdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfYW5vbihmb2xpbyksIGZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD00NzU9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfYWRkX2ZpbGVfcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9ybWFwLmgtNDc2LXtcbmluY2x1ZGUvbGludXgvcm1hcC5oOjQ3NzpcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbmluY2x1ZGUvbGludXgvcm1hcC5oLTQ3OC1cdFZNX1dBUk5fT05fRk9MSU8oZm9saW9fdGVzdF9hbm9uKGZvbGlvKSwgZm9saW8pO1xuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oPTQ4ND1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9yZW1vdmVfcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9ybWFwLmgtNDg1LXtcbmluY2x1ZGUvbGludXgvcm1hcC5oOjQ4NjpcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcbmluY2x1ZGUvbGludXgvcm1hcC5oLTQ4Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBEZWZpbml0aW9uIG9mIGBmb2xpb190ZXN0X2h1Z2V0bGJgKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGZvbGlvX3Rlc3RfaHVnZXRsYmAgaXMgZGVmaW5lZC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IGl0IHdhcyBkZWZpbmVkIHNpbWlsYXJseSB0byBvdGhlciBwYWdlIGZsYWdzLCBwcm9iYWJseSBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBQQUdFRkxBRyhIdWdldGxiLCBodWdldGxiLCBQRl9TRUNPTkQpYC4gSSB0b29rIGEgcXVpY2sgbG9vaywgb3IgYXQgbGVhc3Qgc2Nhbm5lZCB0aGUgZmlsZSwgYnV0IEkgZG9uJiMzOTt0IHJlY2FsbCBzZWVpbmcgaXQuIExldCBtZSB2ZXJpZnkgd2l0aCBgZ3JlcGAsIGp1c3QgdG8gYmUgY2VydGFpbi4gSSYjMzk7bGwgc2VhcmNoIGZvciBgZm9saW9fdGVzdF9odWdldGxiYCB3aXRoaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBhbmQgbWFrZSBzdXJlIGl0IGlzIG5vdCBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdGVzdF9odWdldGxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA1Mj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDUzLXtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNTQ6XHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1NS19XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDY4LVx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA2OTpcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIFx1MDAyNlx1MDAyNiBQYWdlSFdQb2lzb24oXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqVHJhY2luZyB0aGUgRGVmaW5pdGlvbiBvZiBgZm9saW9fdGVzdF9odWdldGxiYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSBgZm9saW9fdGVzdF9odWdldGxiYCwgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIHN0YXJ0cyB0byBwaW5nLiBXaGVyZSAqZXhhY3RseSogaXMgdGhpcyBmdW5jdGlvbiBvciBtYWNybyBkZWZpbmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gSXMgaXQgYSBmdW5jdGlvbiwgYSBtYWNybywgc29tZXRoaW5nIGVsc2U/IEFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCBmaWxlIGFuZCBtb2R1bGUgaXMgaXQgaW4/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgb3JpZ2luIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgdG8gdHJ1bHkgdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBhbmQgbG9naWMgc3Vycm91bmRpbmcgdGhpcyBwaWVjZSBvZiBjb2RlLiBJIG5lZWQgdG8gZ2V0IHRvIHRoZSByb290IG9mIGl0cyBtZWFuaW5nIGJlZm9yZSBkaXZpbmcgYW55IGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgZm9saW9fdGVzdF9odWdldGxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIEh1Z2VUTEIgRmxhZyBEZWZpbml0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRlZmluZXMgSHVnZVRMQi1yZWxhdGVkIGZsYWdzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UsIGFuZCB0aGUgbGlrZWx5IHNwb3QgZm9yIHRoYXQgaXMgYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYC4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcnVjaWFsIG1hY3JvcyBhbmQgZGVmaW5pdGlvbnMgZm9yIGhhbmRsaW5nIEh1Z2VUTEIgcGFnZXMgd2lsbCByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgZmxhZyBuYW1lcy4gQSBxdWljayBgZ3JlcCBodWdldGxiYCBzaG91bGQgcXVpY2tseSBsb2NhdGUgdGhlIHJlbGV2YW50IGxpbmVzLiBUaGF0IHNob3VsZCBnZXQgbWUgc3RhcnRlZCB3aXRoIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBmbGFnIGlkZW50aWZpZXJzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9OTAwPWVudW0gcGFnZXR5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTkwNi1cdFBHVFlfZ3VhcmRcdFx0PSAweGYzLFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6OTA3Olx0UEdUWV9odWdldGxiXHRcdD0gMHhmNCxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTkwOC1cdFBHVFlfc2xhYlx0XHQ9IDB4ZjUsXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTAyNj1QQUdFX1RZUEVfT1BTKFNsYWIsIHNsYWIsIHNsYWIpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTAyOC0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTAyOTpGT0xJT19UWVBFX09QUyhodWdldGxiLCBodWdldGxiKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTAzMC0jZWxzZVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTAzMTpGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwMzItI2VuZGlmXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA0Mj1QQUdFX1RZUEVfT1BTKExhcmdlS21hbGxvYywgbGFyZ2Vfa21hbGxvYywgbGFyZ2Vfa21hbGxvYylcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDQ0LS8qKlxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA0NTogKiBQYWdlSHVnZSAtIERldGVybWluZSBpZiB0aGUgcGFnZSBiZWxvbmdzIHRvIGh1Z2V0bGJmc1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA0Ni0gKiBAcGFnZTogVGhlIHBhZ2UgdG8gdGVzdC5cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDQ4LSAqIENvbnRleHQ6IEFueSBjb250ZXh0LlxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA0OTogKiBSZXR1cm46IFRydWUgZm9yIGh1Z2V0bGJmcyBwYWdlcywgZmFsc2UgZm9yIGFub24gcGFnZXMgb3IgcGFnZXNcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTAtICogYmVsb25naW5nIHRvIG90aGVyIGZpbGVzeXN0ZW1zLlxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNTI9c3RhdGljIGlubGluZSBib29sIFBhZ2VIdWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1My17XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDU0Olx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihwYWdlX2ZvbGlvKHBhZ2UpKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTUtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNjI9c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNjk6XHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcdTAwMjZcdTAwMjYgUGFnZUhXUG9pc29uKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTU2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1pZ3JhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZXMgYW5kIG1pZ3JhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5LiBMZXQgbWUgYnJlYWsgdGhpcyBkb3duLi4uCgpGaXJzdCwgaXQgc2VlbXMgdGhpcyBpcyBhbGwgdGllZCB0byBgRk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYilgLCB3aGljaCBsZWFkcyB1cyB0byBgZm9saW9fdGVzdF9odWdldGxiYC4gIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRWAuIElmIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpc24mIzM5O3QgZGVmaW5lZCwgd2UgZmFsbCBiYWNrIHRvIGBGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilgLCBlc3NlbnRpYWxseSBtYWtpbmcgYGZvbGlvX3Rlc3RfaHVnZXRsYmAgYWx3YXlzIHJldHVybiBmYWxzZS4gVGhpcyBtZWFucyB0aGUgYG1pZ3JhdGVfaHVnZXRsYnNgIGZ1bmN0aW9uIHdvdWxkIGp1c3QgYnlwYXNzIGFsbCB0aGUgZm9saW9zIGFuZCBkbyBub3RoaW5nLiBUaGlzIG1lYW5zIHdlJiMzOTtsbCBuZXZlciByZWFjaCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC4gT2theSwgc28gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgdG8gZXZlbiAqZ2V0KiB0byB3aGVyZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nLgoKU28sIHRvIHByb3Blcmx5IHNldCB0aGUgc2NlbmUsIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmU6CgoqICAgYE1JR1JBVElPTmAgLSB0aGlzIGlzIG5lZWRlZCB0byBjb21waWxlIHRoZSBgbW0vbWlncmF0ZS5jYCBmaWxlLgoqICAgYEhVR0VUTEJfUEFHRWAgLSB3aGljaCBpcyBlc3NlbnRpYWwgZm9yIGBmb2xpb190ZXN0X2h1Z2V0bGJgIHRvIHJldHVybiB0cnVlIHNvIHRoYXQgd2UgKmNhbiogcmVhY2ggYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuCiogICBgTUVNT1JZX0ZBSUxVUkVgIC0gdGhpcyBuZWVkcyB0byBiZSBlbmFibGVkIHNvIHRoYXQgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCB3aWxsIHJldHVybiB0cnVlIGFuZCBzdWJzZXF1ZW50bHkgdHJpZ2dlciB0aGUgbmV3IGNvZGUgcGF0aCB3aXRoaW4gYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuCgpJJiMzOTtsbCBkb3VibGUgY2hlY2sgaWYgYE1JR1JBVElPTmAgaXMgY29tbW9ubHkgZW5hYmxlZCBhbHJlYWR5LCBtYXliZSB0aHJvdWdoIGBOVU1BYCBvciBgQ09NUEFDVElPTmAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4gQnV0IGBNRU1PUllfRkFJTFVSRWAgaXMgYSBsaXR0bGUgbW9yZSBzcGVjaWFsaXplZCwgbGlrZWx5IHRpZWQgdG8gaGFyZHdhcmUgcG9pc29uaW5nIHNwZWNpZmljYWxseSwgd2hpY2ggaXNuJiMzOTt0IGFsd2F5cyBlbmFibGVkIGJ5IGRlZmF1bHQuICBgSFVHRVRMQl9QQUdFYCBpcyBwcm9iYWJseSBhbHNvIGNvbW1vbmx5IGVuYWJsZWQsIGJ1dCB3b3J0aCBtZW50aW9uaW5nIGZvciBjbGFyaXR5LgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBJIHNlZSBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBpcyBzdGF0aWMuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBUaGUgY2VudHJhbCBmb2N1cyBvZiBkZWJ1Z2dpbmcgb3IgZnV6emluZyB3aWxsIGVpdGhlciBiZSBpbiBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBvciBgbWlncmF0ZV9odWdldGxic2Agb3IgZXZlbiBgbWlncmF0ZV9wYWdlc2AuIFNpbmNlIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIHN0YXRpYywgd2UgY2FuIHVzZSBgbWlncmF0ZV9odWdldGxic2AgYW5kIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBXYWl0Li4uIHN5emthbGxlciAqY2FuKiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMsIGlmIHRoZXkmIzM5O3JlIGluIHRoZSBzeW1ib2wgdGFibGUsIGJ1dCBvZnRlbiBwcm92aWRpbmcgdGhlIGNhbGxlciBpcyBiZXR0ZXIgaWYgdGhlIHN0YXRpYyBmdW5jdGlvbiBpcyBpbmxpbmVkLgoKT2theSwgbGV0JiMzOTtzIGNoZWNrIGlmIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIGlubGluZWQuIEl0IGxvb2tzIHByZXR0eSBoZWZ0eSwgc28gcHJvYmFibHkgbm90LiBJJiMzOTtsbCBwcm92aWRlIGJvdGggYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgYW5kIGBtaWdyYXRlX2h1Z2V0bGJzYC4KCk5vdywgcmV2aWV3aW5nIHRoZSBwYXRjaCBpdHNlbGY6CgpgYGBjCkBAIC0xNTEwLDYgJiM0MzsxNTEwLDExIEBAIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKJiM0MzsJaWYgKHVubGlrZWx5KGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHNyYykpKSB7CiYjNDM7CQlyYyA9IC1FSFdQT0lTT047CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKIAlpZiAoZm9saW9fdGVzdF9hbm9uKHNyYykpCiAJCWFub25fdm1hID0gZm9saW9fZ2V0X2Fub25fdm1hKHNyYyk7CiBgYGAKCkFscmlnaHQsIHRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgcHJldmVudGluZyB0aGUgbWlncmF0aW9uIG9mIGh1Z2UgcGFnZXMgdGhhdCBoYXZlIGEgaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZS4gSXQmIzM5O2xsIHJldHVybiBgLUVIV1BPSVNPTmAgaWYgaXQgZmluZHMgdGhhdC4KClNvIHRvIHJlY2FwOgoKKiAgICoqQ29uZmlnczoqKiBgTUlHUkFUSU9OYCwgYEhVR0VUTEJfUEFHRWAsIGFuZCBgTUVNT1JZX0ZBSUxVUkVgIGFyZSBuZWNlc3NhcnkuCiogICAqKkZvY3VzIHN5bWJvbHM6KiogYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgYW5kIGBtaWdyYXRlX2h1Z2V0bGJzYCBhcmUga2V5LgoqICAgKipSZWFzb25pbmc6KiogVGhlIGNoYW5nZSBhZGRzIGEgY2hlY2sgdG8gc2hvcnQtY2lyY3VpdCBodWdlIHBhZ2UgbWlncmF0aW9uIGlmIEhXIHBvaXNvbiBpcyBwcmVzZW50LCByZXR1cm5pbmcgYC1FSFdQT0lTT05gLiBUaGlzIG5lY2Vzc2l0YXRlcyBIVUdFVExCIGFuZCBNRU1PUllfRkFJTFVSRSwgd2hpbGUgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZXMgTUlHUkFUSU9OIHRvIGJlIGVuYWJsZWQuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSBgQ09ORklHX01JR1JBVElPTmAgaXMgdGhlIHJpZ2h0IGNvbmZpZyBuYW1lLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk1LVxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDkyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBzZWxmLXJlZmxlY3Rpb246CgoqKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCAqTWlncmF0aW9uKiBmZWVscyByaWdodCwgaW50dWl0aXZlbHkuIFRoYXQmIzM5O3MgdGhlIGNvcmUgY29uY2VwdC4gTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgdGhlIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbnMgc3VwcG9ydCB0aGlzIGFwcHJvYWNoLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBjb3JyZWN0bHkgc2V0LiBJdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIEkmIzM5O20gYW50aWNpcGF0aW5nLiBUaGF0IHNldHRpbmcgd2lsbCBiZSBwaXZvdGFsIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIEkgd2FudCB0byBiZSAxMDAlIG9uIHRoYXQgcG9pbnQgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ3MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKlZlcmlmeWluZyB0aGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGl0LCBgSFVHRVRMQl9QQUdFYCBpcyBkZWZpbml0ZWx5IHRoZSBuYW1lIEkmIzM5O20gbG9va2luZyBmb3IuIE5vIG5lZWQgdG8gc2Vjb25kLWd1ZXNzIHRoYXQgb25lLiBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQuIEp1c3Qgd2FudCB0byBtYWtlIHN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgc28gYSBxdWljayB2ZXJpZmljYXRpb24gaXMgYWx3YXlzIHdvcnRod2hpbGUgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NzQ9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc3Ni1cbm1tL0tjb25maWc6Nzc3OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NzgtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcwNwoJCQkJCQkJb3V0cHV0OiAxNTIKCQkJCQkJCXRob3VnaHRzOiAzMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBzeW1ib2wgdG8gZm9jdXMgb24uIE15IG5leHQgdGhvdWdodCBpcyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBSaWdodCwgSSBzZWUgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCBpcyBhbHNvIGluIHBsYXkuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgYSBrZXkgZGVwZW5kZW5jeS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZWAgc2hvdWxkIG9ubHkgcmV0dXJuIHRydWUgd2hlbiBgTUVNT1JZX0ZBSUxVUkVgIGlzIGFjdGl2ZS4gTG9va2luZyBiYWNrIGF0IHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBibG9jaywgaXQgc2VlbXMgbGlrZSBgZm9saW9fdGVzdF9od3BvaXNvbmAg4oCTIHdoaWNoIGNvbnRyaWJ1dGVzIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIC0gaXMgb25seSBkZWZpbmVkIHdoZW4gYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZW5hYmxlZC4gSWYgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXMgZGlzYWJsZWQsIHRoZSBjb2RlIHBhdGggd2lsbCBieXBhc3MgdGhlIGNoZWNraW5nLgoKU28sIGBNRU1PUllfRkFJTFVSRWAgaXMgbmVjZXNzYXJ5IHRvIGFjdHVhbGx5IHRyaWdnZXIgdGhlIGNoZWNrcyByZWxhdGVkIHRvIHBvaXNvbmVkIHBhZ2VzLiBUaGlzIHJlaW5mb3JjZXMgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuZGFtZW50YWwgZGVwZW5kZW5jeS4KCk5vdywgaXMgdGhlcmUgYW55IG90aGVyIHN5bWJvbCByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSB0aGF0JiMzOTtzIHdvcnRoIGxvb2tpbmcgaW50bz8gVGhlIGNvZGUgbW9kaWZpY2F0aW9uIGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC4gR29vZCwgYG1pZ3JhdGVfaHVnZXRsYnNgIGlzIHRoZSBjYWxsZXIgb2YgdGhhdCBmdW5jdGlvbi4gRXZlbiBiZXR0ZXIsIGBtaWdyYXRlX3BhZ2VzYCBpcyB0aGUgY2FsbGVyIG9mIGBtaWdyYXRlX2h1Z2V0bGJzYC4gVGhlIGtleSBmdW5jdGlvbnMgYXJlIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGFuZCBgbWlncmF0ZV9odWdldGxic2AuCgpJIHRoaW5rIHRoYXQmIzM5O3MgZW5vdWdoIGluZm9ybWF0aW9uLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2h1Z2V0bGJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IHRoZSBtaWdyYXRpb24gb2YgaHVnZSBwYWdlcyB0aGF0IGNvbnRhaW4gaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZXMsIHJldHVybmluZyAtRUhXUE9JU09OLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtaWdyYXRpb24gbG9naWMuIFRvIHJlYWNoIGFuZCB0ZXN0IHRoaXMgY29kZSwgaHVnZSBwYWdlIHN1cHBvcnQgKENPTkZJR19IVUdFVExCX1BBR0UpLCBtZW1vcnkgbWlncmF0aW9uIChDT05GSUdfTUlHUkFUSU9OKSwgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIG11c3QgYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDssCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2h1Z2V0bGJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IHRoZSBtaWdyYXRpb24gb2YgaHVnZSBwYWdlcyB0aGF0IGNvbnRhaW4gaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZXMsIHJldHVybmluZyAtRUhXUE9JU09OLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtaWdyYXRpb24gbG9naWMuIFRvIHJlYWNoIGFuZCB0ZXN0IHRoaXMgY29kZSwgaHVnZSBwYWdlIHN1cHBvcnQgKENPTkZJR19IVUdFVExCX1BBR0UpLCBtZW1vcnkgbWlncmF0aW9uIChDT05GSUdfTUlHUkFUSU9OKSwgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIG11c3QgYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjE1LjUzMDg0MzI5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzMTcxNDA0NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZVwiLFxuICAgIFwibWlncmF0ZV9odWdldGxic1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IHRoZSBtaWdyYXRpb24gb2YgaHVnZSBwYWdlcyB0aGF0IGNvbnRhaW4gaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZXMsIHJldHVybmluZyAtRUhXUE9JU09OLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtaWdyYXRpb24gbG9naWMuIFRvIHJlYWNoIGFuZCB0ZXN0IHRoaXMgY29kZSwgaHVnZSBwYWdlIHN1cHBvcnQgKENPTkZJR19IVUdFVExCX1BBR0UpLCBtZW1vcnkgbWlncmF0aW9uIChDT05GSUdfTUlHUkFUSU9OKSwgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIG11c3QgYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjI6MTUuNTMwODUzNzk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkyNTI4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiNGJiZDFjNDc2NmYwNTFlZmFmNWE0ZmU2ZGZkZDg4ZDdkOTMyNThkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDEgMTc6MjI6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXFxuaW5kZXggNDllMTBmZWViMDk0ZjAuLmFjMTJlOWFlYjA1ZjE4IDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGUuY1xcbisrKyBiL21tL21pZ3JhdGUuY1xcbkBAIC0xNTEwLDYgKzE1MTAsMTEgQEAgc3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAodW5saWtlbHkoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3JjKSkpIHtcXG4rXFx0XFx0cmMgPSAtRUhXUE9JU09OO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChmb2xpb190ZXN0X2Fub24oc3JjKSlcXG4gXFx0XFx0YW5vbl92bWEgPSBmb2xpb19nZXRfYW5vbl92bWEoc3JjKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjE2LjE0MTI5NDQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjU2MDkyOTI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNSUdSQVRJT05cIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VcIixcbiAgICBcIm1pZ3JhdGVfaHVnZXRsYnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCB0aGUgbWlncmF0aW9uIG9mIGh1Z2UgcGFnZXMgdGhhdCBjb250YWluIGhhcmR3YXJlLXBvaXNvbmVkIHN1YnBhZ2VzLCByZXR1cm5pbmcgLUVIV1BPSVNPTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWlncmF0aW9uIGxvZ2ljLiBUbyByZWFjaCBhbmQgdGVzdCB0aGlzIGNvZGUsIGh1Z2UgcGFnZSBzdXBwb3J0IChDT05GSUdfSFVHRVRMQl9QQUdFKSwgbWVtb3J5IG1pZ3JhdGlvbiAoQ09ORklHX01JR1JBVElPTiksIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyAoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBtdXN0IGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjRiYmQxYzQ3NjZmMDUxZWZhZjVhNGZlNmRmZGQ4OGQ3ZDkzMjU4ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTc6MjI6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDQ5ZTEwZmVlYjA5NGYwLi5hYzEyZTlhZWIwNWYxOCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuKysrIGIvbW0vbWlncmF0ZS5jXG5AQCAtMTUxMCw2ICsxNTEwLDExIEBAIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbitcdGlmICh1bmxpa2VseShmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzcmMpKSkge1xuK1x0XHRyYyA9IC1FSFdQT0lTT047XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbiBcdGlmIChmb2xpb190ZXN0X2Fub24oc3JjKSlcbiBcdFx0YW5vbl92bWEgPSBmb2xpb19nZXRfYW5vbl92bWEoc3JjKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjE2LjE0MTI5NzU0OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTA5ODc0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWlncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY3J1Y2lhbCBjaGVjayB3aXRoaW4gdGhlIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHk6IGBpZiAodW5saWtlbHkoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2Uoc3JjKSkpYC4gUmlnaHQsIHNvIGlmIHRoZSBzb3VyY2UgaHVnZSBwYWdlIGhhcHBlbnMgdG8gY29udGFpbiBhIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2UsIHRoaXMgY2hlY2sgd2lsbCByZXR1cm4gYW4gYC1FSFdQT0lTT05gIGVycm9yLiBFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBtZW1vcnkgbWlncmF0aW9uIHByb2Nlc3M7IGl0J3MgZXhwbGljaXRseSBoYW5kbGluZyB0aGUgc2NlbmFyaW8gb2YgbWlncmF0aW5nIGEgY29ycnVwdGVkIGh1Z2UgcGFnZS4gXG5cbkkgbmVlZCB0byBxdWlja2x5IGRpZyBpbnRvIHRoZSBjb2RlIG5vdy4gTXkgZmlyc3Qgc3RlcCBpcyB0byBsb2NhdGUgdGhlIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGZ1bmN0aW9uIGFuZCB0aGUgZGVmaW5pdGlvbiBvZiBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgLiBJJ2xsIHN0YXJ0IHdpdGggYG1tL21pZ3JhdGUuY2AsIG5hdHVyYWxseSwgdG8gZmluZCB0aGUgbWlncmF0aW9uIGxvZ2ljIGFuZCB0aGVuIHNlZWsgb3V0IHRoZSBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGRlZmluaXRpb24uIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhpcyBjaGFuZ2UgbGllcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBvaXNvbmVkIHBhZ2UgZGV0ZWN0aW9uIGltcGFjdHMgdGhlIG92ZXJhbGwgbWlncmF0aW9uIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjoyMC4yNTIyODkwODdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyODgzMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21pZ3JhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlLmM9MTM1Mz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fbW92ZShmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE0NjgtICovXFxubW0vbWlncmF0ZS5jOjE0Njk6c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMTQ3MC1cXHRcXHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi0tXFxubW0vbWlncmF0ZS5jPTE2MzI9c3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTY3MC1cXG5tbS9taWdyYXRlLmM6MTY3MTpcXHRcXHRcXHRyYyA9IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShnZXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0xNjcyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHB1dF9uZXdfZm9saW8sIHByaXZhdGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjIwLjMzNzU5MzkyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjM4MjMyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbnBhY2tpbmcgdGhlIE1lbW9yeSBNaWdyYXRpb24gUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgd2hlcmUgdGhpcyBmdW5jdGlvbiBzaXRzIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhpbmdzLiBBaCwgeWVzLCBpdCdzIGNhbGxlZCBieSBgbWlncmF0ZV9odWdldGxic2AuIFRoYXQncyB0aGUga2V5LiBBbmQgYG1pZ3JhdGVfaHVnZXRsYnNgLCBpbiB0dXJuLCBpcyB0cmlnZ2VyZWQgYnkgc29tZXRoaW5nIGxpa2UgYG1pZ3JhdGVfcGFnZXNfYmF0Y2hgIG9yIGEgcmVsYXRlZCBtaWdyYXRpb24gZnVuY3Rpb24uIFRoaXMgc3VnZ2VzdHMgYSBtdWx0aS1zdGVwIHByb2Nlc3MgZm9yIGhhbmRsaW5nIGh1Z2UgcGFnZXMgZHVyaW5nIG1pZ3JhdGlvbi4gTm93LCBJIGhhdmUgdG8gZmluZCBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGJlY2F1c2UsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgdGhlcmUncyBhIHJlYXNvbiBmb3IgbG9va2luZyBhdCB0aGF0IGZ1bmN0aW9uIGluIHJlbGF0aW9uIHRvIG1lbW9yeSBtaWdyYXRpb24uIExldCdzIHNlZSBob3cgdGhhdCB0aWVzIGludG8gdGhpcyBzcGVjaWZpYyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjI6MjMuMzAxNDIxMjI5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjc2NDMwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNjI9c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcxLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNzI6c3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3My17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ0MDk9c3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDE2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDQxNzpcXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDQxOC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE3OTM9c3RhdGljIHZvaWQgZG9fbWlncmF0ZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODE1LVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTgxNjpcXHRcXHRpZiAoZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2UoZm9saW8pKSB7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODE3LVxcdFxcdFxcdC8qXFxuLS1cXG5tbS9taWdyYXRlLmM9MTQ2OT1zdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE1MTItXFxubW0vbWlncmF0ZS5jOjE1MTM6XFx0aWYgKHVubGlrZWx5KGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHNyYykpKSB7XFxubW0vbWlncmF0ZS5jLTE1MTQtXFx0XFx0cmMgPSAtRUhXUE9JU09OO1xcbi0tXFxubW0vc2htZW0uYz0zMjE2PXNobWVtX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9zaG1lbS5jLTMyNDItXFxubW0vc2htZW0uYzozMjQzOlxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG5tbS9zaG1lbS5jLTMyNDQtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNTA9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTA4My1cXG5tbS92bXNjYW4uYzoxMDg0OlxcdFxcdGlmIChmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShmb2xpbykpIHtcXG5tbS92bXNjYW4uYy0xMDg1LVxcdFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjI3LjMyOTA3MTc3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTkwNzI2MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdlIFBhZ2UgTWlncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBjaGVjayB3aXRoaW4gYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIHRoZSBtaWdyYXRpb24gb2YgaHVnZSBwYWdlcyBpZiB0aGV5IGNvbnRhaW4gaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMuIFRoYXQncyBnb29kLCBzZWVtcyBzZW5zaWJsZSB0byBhdm9pZCBjb3JydXB0aW5nIGRhdGEgZHVyaW5nIGEgbW92ZS4gTm8gb2J2aW91cyBpc3N1ZXMgc28gZmFyLlxuXG5CdXQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBjb250ZXh0LiBUaGlzIGtpbmQgb2YgY2hhbmdlIGNhbiBzb21ldGltZXMgYmUgZGVwZW5kZW50IG9uIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiBCZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUncyBhbnkgaW1wbGljaXQgb3IgZXhwbGljaXQgZGVwZW5kZW5jeSBvbiBjZXJ0YWluIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gUGVyaGFwcyB0aGVyZSdzIGEgc3BlY2lmaWMgZmxhZyBvciBzZXR0aW5nIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGlzIHBhcnRpY3VsYXIgcG9pc29uLWRldGVjdGlvbiBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gcmVzZWFyY2ggdGhhdC5cblxuTm93LCB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLCByZXNpZGVzIHdpdGhpbiBgbW0vbWlncmF0ZS5jYC4gR29vZCwgdGhhdCBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbnMgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiBgbW0vbWlncmF0ZS5jYCBpdHNlbGYgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseS4gSXMgaXQgYmVoaW5kIGEgS2NvbmZpZyBvcHRpb24/IEtub3dpbmcgdGhhdCB3aWxsIGFsbG93IG1lIHRvIG5hcnJvdyBkb3duIHRoZSBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyB0aGF0IEkgd2lsbCBuZWVkIHRvIGNoZWNrIGJlZm9yZSBhY2NlcHRpbmcgdGhpcyBwYXRjaCwgb3IgYXNraW5nIHRoZSBhdXRob3IgZm9yIGNsYXJpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjozMS4yMjgxNDczMDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyMTg2NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTk3PW9iai0kKENPTkZJR19NRU1URVNUKVxcdFxcdCs9IG1lbXRlc3Qub1xcbm1tL01ha2VmaWxlOjk4Om9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUub1xcbm1tL01ha2VmaWxlLTk5LW9iai0kKENPTkZJR19OVU1BKSArPSBtZW1vcnktdGllcnMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjozMS4zMTQzNzQ2NTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU0MDQ2NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGJyYWluIGlzIHN0YXJ0aW5nIHRvIGNodXJuIG9uIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyBhIE1pZ3JhdGlvbiBTY2VuYXJpbyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBtaWdyYXRpb24gc2l0dWF0aW9uIGhlcmUsIHRoYXQncyBjbGVhciDigJMgd2UgbmVlZCBgQ09ORklHX01JR1JBVElPTmAgdG8gYmUgaW4gcGxheSwgdGhhdCdzIHN0ZXAgb25lLiBBbmQsIGZyb20gdGhlIGxvb2tzIG9mIGl0LCBodWdlIHBhZ2VzIGFyZSBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIHBpY3R1cmUuIEknbSB0aGlua2luZywgc3BlY2lmaWNhbGx5LCB0aGF0IGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIHRoZSBrZXkgZnVuY3Rpb24gYmVpbmcgdXNlZCwgd2hpY2ggc2NyZWFtcyBodWdldGxiIHBhZ2UgaGFuZGxpbmcuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgYXJvdW5kIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIGRlcGVuZGVudCBvbiBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gZmxhZywgc29tZSBgI2lmZGVmYCBwZXJoYXBzLiBUaGF0J3MgdGhlIGxvZ2ljYWwgbmV4dCBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjM0LjQ2ODQyNTY4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzAwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZS5jPTEzNTM9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNDY4LSAqL1xcbm1tL21pZ3JhdGUuYzoxNDY5OnN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTE0NzAtXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNjMyPXN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE2NzAtXFxubW0vbWlncmF0ZS5jOjE2NzE6XFx0XFx0XFx0cmMgPSB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UoZ2V0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMTY3Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjozNC42MTQ3MzU2MzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MzEwMTE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9taWdyYXRlLmNgIC0gTGluZSAxNDY5IGFuZCBCZXlvbmQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBtbS9taWdyYXRlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTQ2OS4gVGhhdCBhcmVhIHVzdWFsbHkgZGVhbHMgd2l0aC4uLiB3ZWxsLCBiYXNlZCBvbiB0aGUgY29udGV4dCBvZiBtaWdyYXRpb24gaW4gdGhlIGtlcm5lbCwgaXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIG1lY2hhbmljcyBvZiBtb3ZpbmcgcGFnZXMuIEknbSBwcm9iYWJseSBnb2luZyB0byBiZSBzZWVpbmcgY29kZSByZWxhdGVkIHRvIHRoZSBhY3R1YWwgY29weWluZywgdXBkYXRpbmcgcGFnZSB0YWJsZXMsIG9yIHBlcmhhcHMgZXZlbiBoYW5kbGluZyB0aGUgbG9ja2luZyBuZWNlc3NhcnkgZm9yIGEgY29uc2lzdGVudCBtaWdyYXRpb24gb3BlcmF0aW9uLiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSwgdGhlcmUgbWlnaHQgYmUgc3BlY2lmaWMgY29kZSByZWxhdGVkIHRvIHRyYW5zbGF0aW9uIGxvb2thc2lkZSBidWZmZXJzIChUTEJzKSBhbmQgY2FjaGUgY29oZXJlbmN5LiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW50cmljYXRlIGRldGFpbHMgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCAoTU1VKSBoZXJlLiBJJ20gaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IHRoZSBleGFjdCBsb2dpYyB1c2VkIHRvIGNvcHkgZGF0YSwgdXBkYXRlIHBhZ2UgdGFibGVzLCBhbmQgbWFrZSBhbnkgVExCIGludmFsaWRhdGlvbiB0aGF0IGlzIHJlcXVpcmVkLiBJIGFudGljaXBhdGUgc29tZSBpbnRlcmVzdGluZyBzdWJ0bGV0aWVzIGFyb3VuZCB0aGUgYXRvbWljIG9wZXJhdGlvbnMgcmVxdWlyZWQgdG8gbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRoZSBtaWdyYXRpb24uIExldCdzIHNlZSB3aGF0IGdlbXMgdGhpcyBzZWN0aW9uIG9mIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI3NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjM3Ljk1Nzg0MTg3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWlncmF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NDA6XFx0XFx0XFx0X19taWdyYXRlX2ZvbGlvX3JlY29yZChkc3QsIG9sZF9mb2xpb19zdGF0ZSwgYW5vbl92bWEpO1xcbjE0NDE6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjE0NDI6XFx0XFx0fVxcbjE0NDM6XFx0XFxuMTQ0NDpcXHRcXHRtaWdyYXRlX2ZvbGlvX3VuZG9fc3JjKHNyYywgb2xkX2ZvbGlvX3N0YXRlIFxcdTAwMjYgRk9MSU9fV0FTX01BUFBFRCxcXG4xNDQ1OlxcdFxcdFxcdFxcdCAgICAgICBhbm9uX3ZtYSwgdHJ1ZSwgcmV0KTtcXG4xNDQ2OlxcdFxcdG1pZ3JhdGVfZm9saW9fdW5kb19kc3QoZHN0LCB0cnVlLCBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlKTtcXG4xNDQ3OlxcdFxcbjE0NDg6XFx0XFx0cmV0dXJuIHJjO1xcbjE0NDk6XFx0fVxcbjE0NTA6XFx0XFxuMTQ1MTpcXHQvKlxcbjE0NTI6XFx0ICogQ291bnRlcnBhcnQgb2YgdW5tYXBfYW5kX21vdmVfcGFnZSgpIGZvciBodWdlcGFnZSBtaWdyYXRpb24uXFxuMTQ1MzpcXHQgKlxcbjE0NTQ6XFx0ICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHdhaXQgdGhlIGNvbXBsZXRpb24gb2YgaHVnZXBhZ2UgSS9PXFxuMTQ1NTpcXHQgKiBiZWNhdXNlIHRoZXJlIGlzIG5vIHJhY2UgYmV0d2VlbiBJL08gYW5kIG1pZ3JhdGlvbiBmb3IgaHVnZXBhZ2UuXFxuMTQ1NjpcXHQgKiBOb3RlIHRoYXQgY3VycmVudGx5IGh1Z2VwYWdlIEkvTyBvY2N1cnMgb25seSBpbiBkaXJlY3QgSS9PXFxuMTQ1NzpcXHQgKiB3aGVyZSBubyBsb2NrIGlzIGhlbGQgYW5kIFBHX3dyaXRlYmFjayBpcyBpcnJlbGV2YW50LFxcbjE0NTg6XFx0ICogYW5kIHdyaXRlYmFjayBzdGF0dXMgb2YgYWxsIHN1YnBhZ2VzIGFyZSBjb3VudGVkIGluIHRoZSByZWZlcmVuY2VcXG4xNDU5OlxcdCAqIGNvdW50IG9mIHRoZSBoZWFkIHBhZ2UgKGkuZS4gaWYgYWxsIHN1YnBhZ2VzIG9mIGEgMk1CIGh1Z2VwYWdlIGFyZVxcbjE0NjA6XFx0ICogdW5kZXIgZGlyZWN0IEkvTywgdGhlIHJlZmVyZW5jZSBvZiB0aGUgaGVhZCBwYWdlIGlzIDUxMiBhbmQgYSBiaXQgbW9yZS4pXFxuMTQ2MTpcXHQgKiBUaGlzIG1lYW5zIHRoYXQgd2hlbiB3ZSB0cnkgdG8gbWlncmF0ZSBodWdlcGFnZSB3aG9zZSBzdWJwYWdlcyBhcmVcXG4xNDYyOlxcdCAqIGRvaW5nIGRpcmVjdCBJL08sIHNvbWUgcmVmZXJlbmNlcyByZW1haW4gYWZ0ZXIgdHJ5X3RvX3VubWFwKCkgYW5kXFxuMTQ2MzpcXHQgKiBodWdlcGFnZSBtaWdyYXRpb24gZmFpbHMgd2l0aG91dCBkYXRhIGNvcnJ1cHRpb24uXFxuMTQ2NDpcXHQgKlxcbjE0NjU6XFx0ICogVGhlcmUgaXMgYWxzbyBubyByYWNlIHdoZW4gZGlyZWN0IEkvTyBpcyBpc3N1ZWQgb24gdGhlIHBhZ2UgdW5kZXIgbWlncmF0aW9uLFxcbjE0NjY6XFx0ICogYmVjYXVzZSB0aGVuIHB0ZSBpcyByZXBsYWNlZCB3aXRoIG1pZ3JhdGlvbiBzd2FwIGVudHJ5IGFuZCBkaXJlY3QgSS9PIGNvZGVcXG4xNDY3OlxcdCAqIHdpbGwgd2FpdCBpbiB0aGUgcGFnZSBmYXVsdCBmb3IgbWlncmF0aW9uIHRvIGNvbXBsZXRlLlxcbjE0Njg6XFx0ICovXFxuMTQ2OTpcXHRzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbjE0NzA6XFx0XFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4xNDcxOlxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqc3JjLCBpbnQgZm9yY2UsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXFxuMTQ3MjpcXHRcXHRcXHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KVxcbjE0NzM6XFx0e1xcbjE0NzQ6XFx0XFx0c3RydWN0IGZvbGlvICpkc3Q7XFxuMTQ3NTpcXHRcXHRpbnQgcmMgPSAtRUFHQUlOO1xcbjE0NzY6XFx0XFx0aW50IHBhZ2Vfd2FzX21hcHBlZCA9IDA7XFxuMTQ3NzpcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gTlVMTDtcXG4xNDc4OlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gTlVMTDtcXG4xNDc5OlxcdFxcdGVudW0gdHR1X2ZsYWdzIHR0dSA9IDA7XFxuMTQ4MDpcXHRcXG4xNDgxOlxcdFxcdGlmIChmb2xpb19yZWZfY291bnQoc3JjKSA9PSAxKSB7XFxuMTQ4MjpcXHRcXHRcXHQvKiBwYWdlIHdhcyBmcmVlZCBmcm9tIHVuZGVyIHVzLiBTbyB3ZSBhcmUgZG9uZS4gKi9cXG4xNDgzOlxcdFxcdFxcdGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzcmMpO1xcbjE0ODQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTQ4NTpcXHRcXHR9XFxuMTQ4NjpcXHRcXG4xNDg3OlxcdFxcdGRzdCA9IGdldF9uZXdfZm9saW8oc3JjLCBwcml2YXRlKTtcXG4xNDg4OlxcdFxcdGlmICghZHN0KVxcbjE0ODk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjM3Ljk1ODE2OTc1NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE5NjgyMDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBvZiBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCoqXG5cbk9rYXksIHNvIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGNvbXBpbGF0aW9uIG9mIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBNeSBpbnR1aXRpb24gc2F5cyBpdCdzIHByb2JhYmx5IG9ubHkgYnJvdWdodCBpbnRvIGV4aXN0ZW5jZSB3aGVuIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBlbmFibGVkLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuIEl0J3MgdG9vIGVhc3kgdG8gYXNzdW1lIHRoZXNlIHRoaW5ncywgZXNwZWNpYWxseSBpbiB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgcHJlcHJvY2Vzc29yIGAjaWZkZWZgIGRpcmVjdGl2ZXMgc3Vycm91bmRpbmcgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXRzZWxmIG9yIGl0cyBkZWNsYXJhdGlvbi4gVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgZXZpZGVuY2U7IGEgcXVpY2sgc2VhcmNoIHNob3VsZCB0ZWxsIHRoZSB0YWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjo0MS43Nzc4NTc5MzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDY0NTM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZS5jPTM0Nj1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTQxMy1cXG5tbS9taWdyYXRlLmM6NDE0OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWlncmF0ZS5jLTQxNS1cXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xcbi0tXFxubW0vbWlncmF0ZS5jPTQ4MT12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWlncmF0ZS5jLTUwOC1cXG5tbS9taWdyYXRlLmM6NTA5OiNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXFxubW0vbWlncmF0ZS5jLTUxMC0vKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjo0Mi4wMTI1MTU1OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM5NDIzODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjpcblxuKipDaGVja2luZyBmb3IgSHVnZVRMQiBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UncmUgb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYG1pZ3JhdGVfaHVnZXRsYnNgIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoYXQgaXRzIGluY2x1c2lvbiBpcyBnb3Zlcm5lZCBieSB0aGUgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIGlzIGZ1bmRhbWVudGFsLCByaWdodD8gV2Ugd291bGRuJ3Qgd2FudCBjb2RlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcyBsZWFraW5nIGludG8gdGhlIGJ1aWxkIHVubGVzcyBodWdlIHBhZ2VzIGFyZSBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIGRvdWJsZS1jaGVja2luZyB0aGlzIGJlY2F1c2UgZXZlbiB0aGUgc2xpZ2h0ZXN0IG92ZXJzaWdodCBoZXJlIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgY29tcGlsYXRpb24gZXJyb3JzIGRvd24gdGhlIGxpbmUsIGFuZCB3ZSBuZWVkIGEgcm9jay1zb2xpZCBmb3VuZGF0aW9uLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gY2hlY2sgdGhlc2Ugc29ydHMgb2YgdGhpbmdzIGZpcnN0LCBiZWZvcmUgd2UgZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSwgYW5kIGNvbmZpcm0gdGhhdCBvdXIgYXNzdW1wdGlvbnMgYWJvdXQgY29uZmlndXJhdGlvbiBhcmUgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgxNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjQ1LjQ1MTk0NDUyM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0OTIxMDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfaHVnZXRsYnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz0xNjE0PXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNjMxLSAqL1xcbm1tL21pZ3JhdGUuYzoxNjMyOnN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0xNjMzLVxcdFxcdFxcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi0tXFxubW0vbWlncmF0ZS5jPTIwOTQ9aW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTA5LVxcbm1tL21pZ3JhdGUuYzoyMTEwOlxcdHJjX2dhdGhlciA9IG1pZ3JhdGVfaHVnZXRsYnMoZnJvbSwgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbywgcHJpdmF0ZSxcXG5tbS9taWdyYXRlLmMtMjExMS1cXHRcXHRcXHRcXHQgICAgIG1vZGUsIHJlYXNvbiwgXFx1MDAyNnN0YXRzLCBcXHUwMDI2cmV0X2ZvbGlvcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjQ1LjYxNjg3MzE4N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUwOTA5MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29tcGlsYXRpb24gYW5kIERlcGVuZGVuY2llcyBvZiBgbWlncmF0ZV9odWdldGxic2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtaWdyYXRlX2h1Z2V0bGJzYCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZydzIGltbWVkaWF0ZWx5IHN0cmlraW5nIG1lLiBJdCBkb2Vzbid0IGFwcGVhciB0byBiZSBndWFyZGVkIGJ5IGEgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGF0IG1lYW5zIGl0IG1pZ2h0IGJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB1bmNvbmRpdGlvbmFsbHksIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBIdWdlVExCIHN1cHBvcnQgaXMgYWN0dWFsbHkgZW5hYmxlZCBhdCBib290IHRpbWUuIFRoZSB3YXkgaXQgd29ya3MsIHRoZW4sIHdvdWxkIGJlIHRvIGR5bmFtaWNhbGx5IHByb2Nlc3MgaHVnZXRsYiBwYWdlcyBpZiB0aGV5IGhhcHBlbiB0byBleGlzdC4gSW50ZXJlc3RpbmcgYXBwcm9hY2guIEknbGwgaGF2ZSB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGhvdyB0aGlzIG1pZ2h0IGFmZmVjdCBtb2R1bGUgbG9hZGluZyBvciBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIGlmIGF0IGFsbC5cblxuV2FpdCBhIHNlY29uZCwgSSBzZWUgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCBiZWluZyB1c2VkIGluIHRoZXJlLiBUaGF0IGZ1bmN0aW9uIHNvdW5kcyBsaWtlIGl0IGRlYWxzIHdpdGggaGFyZHdhcmUtcG9pc29uZWQgcGFnZXMsIHdoaWNoIHN1Z2dlc3RzIHdlIG5lZWQgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZm9yIHRoaXMgZmVhdHVyZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBJZiB0aGF0J3MgdGhlIGNhc2UsIHdlJ2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBpdHMgaW50ZXJwbGF5IHdpdGggb3RoZXIgbWVtb3J5IGVycm9yIGhhbmRsaW5nIGNvbXBvbmVudHMuIEkgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3lzdGVtIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgZm9yIHRoZSBraW5kIG9mIG1lbW9yeSBmYWlsdXJlcyBpdCdzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBzeXN0ZW0gcm9idXN0bmVzcyBhbmQgZXJyb3IgcmVjb3ZlcnksIHNvIGl0J3MgY3JpdGljYWwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIHJlbGF0aW9uc2hpcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI4OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjQ5Ljc2Nzc4NjQxMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxNDA4NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNjI9c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfaHdwb2lzb24oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcxLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNzI6c3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjQ5Ljg5OTIwOTkxOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA5OTMzNTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFBhZ2UgRmxhZ3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlIHNob3VsZCBJIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGVzZSBwYWdlIGZsYWdzPyBMZXQncyB6ZXJvIGluIG9uIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDcyLiBUaGF0IGxvY2F0aW9uIGlzIHVzdWFsbHkgYSBnb29kIGJldCBmb3IgZmluZGluZyBzb21lIG9mIHRoZSBjb3JlIGRlZmluaXRpb25zIG9yIG1heWJlIGEgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZSByZWxhdGVkIHRvIHBhZ2UgZmxhZ3MuIEknbSBob3BpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBmbGFncyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCBrZXkgY29uc2lkZXJhdGlvbnMgYXJlIGludm9sdmVkLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjI6NTIuOTA5MTQ4NjA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDYwOlxcdCAqIGZhaWxpbmcgaGFyZHdhcmUuXFxuMTA2MTpcXHQgKi9cXG4xMDYyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbjEwNjM6XFx0e1xcbjEwNjQ6XFx0XFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbztcXG4xMDY1OlxcdFxcbjEwNjY6XFx0XFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcXG4xMDY3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEwNjg6XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbjEwNjk6XFx0XFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgXFx1MDAyNlxcdTAwMjYgUGFnZUhXUG9pc29uKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuMTA3MDpcXHR9XFxuMTA3MTpcXHRcXG4xMDcyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjEwNzM6XFx0e1xcbjEwNzQ6XFx0XFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHdwb2lzb24oZm9saW8pIHx8XFxuMTA3NTpcXHRcXHQgICAgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWQoZm9saW8pKTtcXG4xMDc2OlxcdH1cXG4xMDc3OlxcdFxcbjEwNzg6XFx0Ym9vbCBpc19mcmVlX2J1ZGR5X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbjEwNzk6XFx0XFxuMTA4MDpcXHQjaWZkZWYgQ09ORklHX01JR1JBVElPTlxcbjEwODE6XFx0LypcXG4xMDgyOlxcdCAqIFRoaXMgcGFnZSBpcyBtaWdyYXRhYmxlIHRocm91Z2ggbW92YWJsZV9vcHMgKGZvciBzZWxlY3RlZCB0eXBlZCBwYWdlc1xcbjEwODM6XFx0ICogb25seSkuXFxuMTA4NDpcXHQgKlxcbjEwODU6XFx0ICogUGFnZSBtaWdyYXRpb24gb2Ygc3VjaCBwYWdlcyBtaWdodCBmYWlsLCBmb3IgZXhhbXBsZSwgaWYgdGhlIHBhZ2UgaXNcXG4xMDg2OlxcdCAqIGFscmVhZHkgaXNvbGF0ZWQgYnkgc29tZWJvZHkgZWxzZSwgb3IgaWYgdGhlIHBhZ2UgaXMgYWJvdXQgdG8gZ2V0IGZyZWVkLlxcbjEwODc6XFx0ICpcXG4xMDg4OlxcdCAqIFdoaWxlIGEgc3Vic3lzdGVtIG1pZ2h0IHNldCBzZWxlY3RlZCB0eXBlZCBwYWdlcyB0aGF0IHN1cHBvcnQgcGFnZSBtaWdyYXRpb25cXG4xMDg5OlxcdCAqIGFzIGJlaW5nIG1vdmFibGUgdGhyb3VnaCBtb3ZhYmxlX29wcywgaXQgbXVzdCBuZXZlciBjbGVhciB0aGlzIGZsYWcuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIyOjUyLjkwOTI5ODczNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk2MDE1MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSGFyZHdhcmUgUG9pc29uaW5nIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZm9saW9fY29udGFpbl9od3BvaXNvbmVkX3BhZ2VgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSBkZWZpbmVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBoYXZlIGhhcmR3YXJlIHBvaXNvbmluZyBlbmFibGVkLiBUaGF0J3MgYSBiaXQgb2RkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHNob3VsZG4ndCBpdHMgZXhpc3RlbmNlIGJlIHRpZWQgdG8gYENPTkZJR19NRU1PUllfRkFJTFVSRWAsIHNpbmNlIGhhcmR3YXJlIHBvaXNvbmluZyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoYXQgZmVhdHVyZT8gSWYgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgaXNuJ3QgZW5hYmxlZCwgd291bGRuJ3QgYGZvbGlvX3Rlc3RfaHdwb2lzb25gIGp1c3QgcmV0dXJuIGBmYWxzZWAgYW55d2F5LCByZW5kZXJpbmcgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCBwb3RlbnRpYWxseSByZWR1bmRhbnQ/IEl0IGlzIHdvcnRoIGNoZWNraW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9saW9fdGVzdF9od3BvaXNvbmAgaW4gbW9yZSBkZXRhaWw7IGl0IGlzIHRoZSBrZXkgcGllY2UgaGVyZS4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGF0IG5leHQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgaG93IGl0IGltcGFjdHMgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCB3aGVuIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGRpc2FibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjo1Ni41MDUzMTgzMDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDgyOTQzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb190ZXN0X2h3cG9pc29uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwNzI9c3RhdGljIGlubGluZSBib29sIGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3My17XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA3NDpcXHRyZXR1cm4gZm9saW9fdGVzdF9od3BvaXNvbihmb2xpbykgfHxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDc1LVxcdCAgICAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9oYXNfaHdwb2lzb25lZChmb2xpbykpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMjo1Ni42MTYxNTk2MTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNDI4MjY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgSGFyZHdhcmUgUG9pc29uaW5nIEZsYWcgRGVmaW5pdGlvbnMqKlxuXG5SaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGd1dCBmZWVsaW5nIGlzIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBoYXJkd2FyZS1pbmR1Y2VkIG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgdGhlIGtlcm5lbCBsaWtlbHkgaGFzIHNvbWUgZGVkaWNhdGVkIGZsYWdzIGZvciB0aGlzLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIHNwZWNpZmljcywgSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IG1hY3JvIGRlZmluaXRpb25zLiBUaGVyZWZvcmUsIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgYGdyZXBgIHNlYXJjaC4gSSdsbCBuZWVkIHRvIGxvb2sgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIHNwb3QgZm9yIHBhZ2UtcmVsYXRlZCBmbGFncy4gVGhlIGtleSBzZWFyY2ggdGVybXMgYXJlIGdvaW5nIHRvIGJlIGFsb25nIHRoZSBsaW5lcyBvZiBgUEFHRUZMQUcoSFdQb2lzb24pYCBvciBzaW1pbGFyIHZhcmlhdGlvbnMgdGhhdCByZWxhdGUgdG8gaGFyZHdhcmUtZGV0ZWN0ZWQgZXJyb3JzLCBjb3JydXB0aW9uLCBvciBwb2lzb25pbmcgb2YgbWVtb3J5IHBhZ2VzLiBJJ20gZ29pbmcgdG8gbmVlZCB0byB0aGluayBjcmVhdGl2ZWx5IGFib3V0IHRoZSBwb3NzaWJsZSBuYW1pbmcgY29udmVudGlvbnMsIHRvIG1ha2UgdGhlIGBncmVwYCBzZWFyY2ggbW9yZSBlZmZlY3RpdmUuIEZyb20gdGhlcmUsIEkgY2FuIGludmVzdGlnYXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHJlc3VsdGluZyBkZWZpbml0aW9ucy4gSSdtIGhvcGluZyB0byBnZXQgYSBsaXN0IG9mIGRlZmluaXRpb25zIHRvIHRoZW4gc3RhcnQgYW5hbHl6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjI6NTkuNzQwNDU4ODE2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODcwMDY5MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSFdQb2lzb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NjQ3PUZPTElPX0ZMQUdfRkFMU0UobWxvY2tlZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1My0jaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NjU0OlBBR0VGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjY1NTpURVNUU0NGTEFHKEhXUG9pc29uLCBod3BvaXNvbiwgUEZfQU5ZKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1Ni0jZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcXHUwMDNjXFx1MDAzYyBQR19od3BvaXNvbilcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02NTctI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2NTg6UEFHRUZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1OS0jZGVmaW5lIF9fUEdfSFdQT0lTT04gMFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9ODc3PUZPTElPX0ZMQUdfRkFMU0UocGFydGlhbGx5X21hcHBlZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTg4My0vKlxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjg4NDogKiBQYWdlSGFzSFdQb2lzb25lZCBpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgc3VicGFnZSBpcyBod3BvaXNvbmVkIGluIHRoZVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTg4NS0gKiBjb21wb3VuZCBwYWdlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA1Mj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDU3LS8qXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA1ODogKiBDaGVjayBpZiBhIHBhZ2UgaXMgY3VycmVudGx5IG1hcmtlZCBIV1BvaXNvbmVkLiBOb3RlIHRoYXQgdGhpcyBjaGVjayBpc1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTktICogYmVzdCBlZmZvcnQgb25seSBhbmQgaW5oZXJlbnRseSByYWN5OiB0aGVyZSBpcyBubyB3YXkgdG8gc3luY2hyb25pemUgd2l0aFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNjUtXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA2NjpcXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNjctXFx0XFx0cmV0dXJuIHRydWU7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA2OTpcXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBQYWdlSFdQb2lzb24oXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MDAuMDI3NDc0OTY4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDg5MzA4NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUncyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHNlY3Rpb24gYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgaGVyZS4gV2l0aG91dCBpdCwgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBmb2xpb190ZXN0X2h3cG9pc29uYCBhbmQgYGZvbGlvX3Rlc3RfaGFzX2h3cG9pc29uZWRgIHdpbGwgYWx3YXlzIGV2YWx1YXRlIHRvIGZhbHNlLCB3aGljaCBpcyBubyBnb29kIGZvciB0ZXN0aW5nIHRoaXMgc3BlY2lmaWMgY29kZSBwYXRoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBzZXQgcHJvcGVybHkuXG5cblRoZW4gdGhlcmUncyBgQ09ORklHX01JR1JBVElPTmA7IHNlZW1zIHByZXR0eSBvYnZpb3VzIHRoYXQgSSdsbCBuZWVkIHRoYXQgdG8gZXZlbiBjb21waWxlIGBtbS9taWdyYXRlLmNgLiBDYW4ndCByZWFsbHkgZ2V0IGFueXdoZXJlIHdpdGhvdXQgdGhhdC4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBlc3NlbnRpYWwgaWYgSSBhY3R1YWxseSB3YW50IHRvIHRlc3QgdGhlIGh1Z2UgcGFnZSBtaWdyYXRpb24gZnVuY3Rpb25hbGl0eS4gTWFrZXMgc2Vuc2UsIEkgbmVlZCAqc29tZXRoaW5nKiB0byBtaWdyYXRlLlxuXG5Ob3csIEknbSBqdXN0IGN1cmlvdXMgYWJvdXQgYENPTkZJR19IVUdFVExCX1BBR0VgLiBJIHdhbnQgdG8gdmVyaWZ5IGlmIGl0J3Mgc3RyaWN0bHkgKnJlcXVpcmVkKi4gSSBzZWUgdGhhdCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBpcyBjYWxsZWQgZnJvbSBgbWlncmF0ZV9odWdldGxic2AuIEhtbS4uLiBpZiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgZGlzYWJsZWQsIGNvdWxkIGBtaWdyYXRlX2h1Z2V0bGJzYCBwb3NzaWJseSBqdXN0IGJlIGEgbm8tb3A/IFRoYXQgd291bGQgbWFrZSBzZW5zZSBmcm9tIGEgZGVzaWduIHBlcnNwZWN0aXZlLiBMZXQncyBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1pZ3JhdGVfaHVnZXRsYnNgIGFuZCBzZWUgd2hhdCBpdCBhY3R1YWxseSBkb2VzIHdoZW4gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIG5vdCBlbmFibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gdGhhdCBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIzOjA0LjY3NjQxMDkxNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTA3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWlncmF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MzIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MzI6XFx0c3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuMTYzMzpcXHRcXHRcXHRcXHQgICAgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4xNjM0OlxcdFxcdFxcdFxcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4xNjM1OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXFxuMTYzNjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcylcXG4xNjM3OlxcdHtcXG4xNjM4OlxcdFxcdGludCByZXRyeSA9IDE7XFxuMTYzOTpcXHRcXHRpbnQgbnJfZmFpbGVkID0gMDtcXG4xNjQwOlxcdFxcdGludCBucl9yZXRyeV9wYWdlcyA9IDA7XFxuMTY0MTpcXHRcXHRpbnQgcGFzcyA9IDA7XFxuMTY0MjpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqZm9saW8yO1xcbjE2NDM6XFx0XFx0aW50IHJjLCBucl9wYWdlcztcXG4xNjQ0OlxcdFxcbjE2NDU6XFx0XFx0Zm9yIChwYXNzID0gMDsgcGFzcyBcXHUwMDNjIE5SX01BWF9NSUdSQVRFX1BBR0VTX1JFVFJZIFxcdTAwMjZcXHUwMDI2IHJldHJ5OyBwYXNzKyspIHtcXG4xNjQ2OlxcdFxcdFxcdHJldHJ5ID0gMDtcXG4xNjQ3OlxcdFxcdFxcdG5yX3JldHJ5X3BhZ2VzID0gMDtcXG4xNjQ4OlxcdFxcbjE2NDk6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvbGlvLCBmb2xpbzIsIGZyb20sIGxydSkge1xcbjE2NTA6XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbjE2NTE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTY1MjpcXHRcXG4xNjUzOlxcdFxcdFxcdFxcdG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbjE2NTQ6XFx0XFxuMTY1NTpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4xNjU2OlxcdFxcbjE2NTc6XFx0XFx0XFx0XFx0LypcXG4xNjU4OlxcdFxcdFxcdFxcdCAqIE1pZ3JhdGFiaWxpdHkgb2YgaHVnZXBhZ2VzIGRlcGVuZHMgb24gYXJjaGl0ZWN0dXJlcyBhbmRcXG4xNjU5OlxcdFxcdFxcdFxcdCAqIHRoZWlyIHNpemUuICBUaGlzIGNoZWNrIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNvbWUgY2FsbGVyc1xcbjE2NjA6XFx0XFx0XFx0XFx0ICogb2YgaHVnZXBhZ2UgbWlncmF0aW9uIGxpa2Ugc29mdCBvZmZsaW5lIGFuZCBtZW1vcnlcXG4xNjYxOlxcdFxcdFxcdFxcdCAqIGhvdHJlbW92ZSBkb24ndCB3YWxrIHRocm91Z2ggcGFnZSB0YWJsZXMgb3IgY2hlY2sgd2hldGhlclxcbjE2NjI6XFx0XFx0XFx0XFx0ICogdGhlIGh1Z2VwYWdlIGlzIHBtZC1iYXNlZCBvciBub3QgYmVmb3JlIGtpY2tpbmcgbWlncmF0aW9uLlxcbjE2NjM6XFx0XFx0XFx0XFx0ICovXFxuMTY2NDpcXHRcXHRcXHRcXHRpZiAoIWh1Z2VwYWdlX21pZ3JhdGlvbl9zdXBwb3J0ZWQoZm9saW9faHN0YXRlKGZvbGlvKSkpIHtcXG4xNjY1OlxcdFxcdFxcdFxcdFxcdG5yX2ZhaWxlZCsrO1xcbjE2NjY6XFx0XFx0XFx0XFx0XFx0c3RhdHMtXFx1MDAzZW5yX2ZhaWxlZF9wYWdlcyArPSBucl9wYWdlcztcXG4xNjY3OlxcdFxcdFxcdFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCByZXRfZm9saW9zKTtcXG4xNjY4OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE2Njk6XFx0XFx0XFx0XFx0fVxcbjE2NzA6XFx0XFxuMTY3MTpcXHRcXHRcXHRcXHRyYyA9IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShnZXRfbmV3X2ZvbGlvLFxcbjE2NzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcHV0X25ld19mb2xpbywgcHJpdmF0ZSxcXG4xNjczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGZvbGlvLCBwYXNzIFxcdTAwM2UgMiwgbW9kZSxcXG4xNjc0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJlYXNvbiwgcmV0X2ZvbGlvcyk7XFxuMTY3NTpcXHRcXHRcXHRcXHQvKlxcbjE2NzY6XFx0XFx0XFx0XFx0ICogVGhlIHJ1bGVzIGFyZTpcXG4xNjc3OlxcdFxcdFxcdFxcdCAqXFx0MDogaHVnZXRsYiBmb2xpbyB3aWxsIGJlIHB1dCBiYWNrXFxuMTY3ODpcXHRcXHRcXHRcXHQgKlxcdC1FQUdBSU46IHN0YXkgb24gdGhlIGZyb20gbGlzdFxcbjE2Nzk6XFx0XFx0XFx0XFx0ICpcXHQtRU5PTUVNOiBzdGF5IG9uIHRoZSBmcm9tIGxpc3RcXG4xNjgwOlxcdFxcdFxcdFxcdCAqXFx0T3RoZXIgZXJybm86IHB1dCBvbiByZXRfZm9saW9zIGxpc3RcXG4xNjgxOlxcdFxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzowNC42NzY3MTA2MTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0NjA1MzY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBGb2xpbyBGaWx0ZXJpbmcgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbylgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gSXQncyBjbGVhcmx5IGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGZvciBmb2xpb3MsIGxpa2VseSByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZXMuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoZSBwb3RlbnRpYWwgYmVoYXZpb3Igd2hlbiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgZGlzYWJsZWQuIElmIHRoYXQgY29uZmlnIG9wdGlvbiBpc24ndCBzZXQsIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGlzIGZ1bmN0aW9uIHdpbGwgKmFsd2F5cyogcmV0dXJuIGZhbHNlLCBvciBhdCBsZWFzdCBiZWhhdmUgaW4gYSBsZXNzLXRoYW4taWRlYWwgbWFubmVyLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBxdWVzdGlvbnMgYWJvdXQgd2hldGhlciB0aGlzIG1pZ2h0IGJlIGEgc291cmNlIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaW4gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9saW9fdGVzdF9odWdldGxiYCB0byBjb25maXJtIHRoaXMgc3VzcGljaW9uIGFuZCwgaWYgaXQgZG9lcyBiZWhhdmUgdGhpcyB3YXksIHVuZGVyc3RhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpbiBteSBzcGVjaWZpYyBjb250ZXh0LiBTbywgSSBuZWVkIHRvIGNoZWNrIGl0cyBhY3R1YWwgaW1wbGVtZW50YXRpb24uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIzOjA4LjQyMjc2ODMxN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExOTc4Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3Rlc3RfaHVnZXRsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDUyPXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDUzLXtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDU0OlxcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1NS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDYyPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA2OTpcXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBQYWdlSFdQb2lzb24oXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MDguNTM0NzY0MzM2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzk4NTM0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGZvbGlvX3Rlc3RfaHVnZXRsYmAgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSdtIHRoaW5raW5nIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBmb2xpb190ZXN0X2h1Z2V0bGJgLiBJdCdzIGNsZWFybHkgYSBmdW5jdGlvbiBvciBtYWNybyByZWxhdGVkIHRvIGh1Z2UgcGFnZXMsIGdpdmVuIHRoZSBuYW1lLCBidXQgSSBuZWVkIHRoZSBwcmVjaXNlIGRldGFpbHMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBhbmQgcHVycG9zZS4gQSBxdWljayBgZ3JlcGAgd2lsbCBiZSB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGxvY2F0ZSB3aGVyZSBpdCdzIGRlZmluZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnVuY3Rpb24ncyBzaWduYXR1cmUgYW5kLCBpZGVhbGx5LCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgaW50ZW5kZWQgdXNlLiBMZXQncyBzZWUgd2hhdCB3ZSB0dXJuIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIzOjExLjYxNDYyNjkxNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNDgzNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3Rlc3RfaHVnZXRsYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD01OTk9c3RhdGljIF9fYWx3YXlzX2lubGluZVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2MDA6Ym9vbCBmb2xpb190ZXN0X2h1Z2V0bGJfIyNmbG5hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjAxLVxcdHtcXHR2b2lkICpwcml2YXRlID0gXFx1MDAyNmZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTYyMD1zdGF0aWMgaW5saW5lIGJvb2xcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NjIxOmZvbGlvX3Rlc3RfaHVnZXRsYl8jI2ZsbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02MjItXFx0eyByZXR1cm4gMDsgfVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9ODUxPXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqZm9saW9faHN0YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODUyLXtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo4NTM6XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtODU0LVxcdHJldHVybiBzaXplX3RvX2hzdGF0ZShmb2xpb19zaXplKGZvbGlvKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmg9NjE9X19odWdldGxiX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcnN2ZClcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNjIte1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo2MzpcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNjQtXFx0aWYgKHJzdmQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmg9ODE9c3RhdGljIGlubGluZSB2b2lkIF9fc2V0X2h1Z2V0bGJfY2dyb3VwKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtODMte1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo4NDpcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtODUtXFx0aWYgKHJzdmQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvdl9pdGVyLmg9MjA0PXNpemVfdCBpdGVyYXRlX3hhcnJheShzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBsZW4sIHZvaWQgKnByaXYsIHZvaWQgKnByaXYyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9pb3ZfaXRlci5oLTIyMC1cXHRcXHRcXHRicmVhaztcXG5pbmNsdWRlL2xpbnV4L2lvdl9pdGVyLmg6MjIxOlxcdFxcdGlmIChXQVJOX09OKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKVxcbmluY2x1ZGUvbGludXgvaW92X2l0ZXIuaC0yMjItXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9Mjg5MD1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF5YmVfbWFwcGVkX3NoYXJlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTI4OTQtXFx0LyogT25seSBwYXJ0aWFsbHktbWFwcGFibGUgZm9saW9zIHJlcXVpcmUgbW9yZSBjYXJlLiAqL1xcbmluY2x1ZGUvbGludXgvbW0uaDoyODk1OlxcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykgfHwgdW5saWtlbHkoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkpXFxuaW5jbHVkZS9saW51eC9tbS5oLTI4OTYtXFx0XFx0cmV0dXJuIG1hcGNvdW50IFxcdTAwM2UgMTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yOTQ5PXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2V4cGVjdGVkX3JlZl9jb3VudChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTI5NTMtXFxuaW5jbHVkZS9saW51eC9tbS5oOjI5NTQ6XFx0aWYgKFdBUk5fT05fT05DRShwYWdlX2hhc190eXBlKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpKVxcbmluY2x1ZGUvbGludXgvbW0uaC0yOTU1LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA1Mj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1My17XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA1NDpcXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNjgtXFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNjk6XFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgXFx1MDAyNlxcdTAwMjYgUGFnZUhXUG9pc29uKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD0xMzU9c3RhdGljIGlubGluZSB2b2lkIF9fZm9saW9fbGFyZ2VfbWFwY291bnRfc2FuaXR5X2NoZWNrcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtMTM3LXtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDoxMzg6XFx0Vk1fV0FSTl9PTl9PTkNFKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSB8fCBmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC0xMzktXFx0Vk1fV0FSTl9PTl9PTkNFKGRpZmYgXFx1MDAzYz0gMCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD0zMzE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fcm1hcF9zYW5pdHlfY2hlY2tzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC0zMzQtXFx0LyogaHVnZXRsYiBmb2xpb3MgYXJlIGhhbmRsZWQgc2VwYXJhdGVseS4gKi9cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDozMzU6XFx0Vk1fV0FSTl9PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9ybWFwLmgtMzM2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmg9NDM1PXN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfdHJ5X2R1cF9hbm9uX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTQzNy17XFxuaW5jbHVkZS9saW51eC9ybWFwLmg6NDM4OlxcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC00MzktXFx0Vk1fV0FSTl9PTl9GT0xJTyghZm9saW9fdGVzdF9hbm9uKGZvbGlvKSwgZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmg9NDUyPXN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJfdHJ5X3NoYXJlX2Fub25fcm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTQ1My17XFxuaW5jbHVkZS9saW51eC9ybWFwLmg6NDU0OlxcdFZNX1dBUk5fT05fRk9MSU8oIWZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbyksIGZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC00NTUtXFx0Vk1fV0FSTl9PTl9GT0xJTyghZm9saW9fdGVzdF9hbm9uKGZvbGlvKSwgZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmg9NDc1PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2FkZF9maWxlX3JtYXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC00NzYte1xcbmluY2x1ZGUvbGludXgvcm1hcC5oOjQ3NzpcXHRWTV9XQVJOX09OX0ZPTElPKCFmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pLCBmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9ybWFwLmgtNDc4LVxcdFZNX1dBUk5fT05fRk9MSU8oZm9saW9fdGVzdF9hbm9uKGZvbGlvKSwgZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmg9NDg0PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3JlbW92ZV9ybWFwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtNDg1LXtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo0ODY6XFx0Vk1fV0FSTl9PTl9GT0xJTyghZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSwgZm9saW8pO1xcbmluY2x1ZGUvbGludXgvcm1hcC5oLTQ4Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MTEuODI4MTE5MTU0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDE4NTA3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgRGVmaW5pdGlvbiBvZiBgZm9saW9fdGVzdF9odWdldGxiYCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSBgZm9saW9fdGVzdF9odWdldGxiYCBpcyBkZWZpbmVkLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIHRoYXQgaXQgd2FzIGRlZmluZWQgc2ltaWxhcmx5IHRvIG90aGVyIHBhZ2UgZmxhZ3MsIHByb2JhYmx5IGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAgdXNpbmcgc29tZXRoaW5nIGxpa2UgYFBBR0VGTEFHKEh1Z2V0bGIsIGh1Z2V0bGIsIFBGX1NFQ09ORClgLiBJIHRvb2sgYSBxdWljayBsb29rLCBvciBhdCBsZWFzdCBzY2FubmVkIHRoZSBmaWxlLCBidXQgSSBkb24ndCByZWNhbGwgc2VlaW5nIGl0LiBMZXQgbWUgdmVyaWZ5IHdpdGggYGdyZXBgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIEknbGwgc2VhcmNoIGZvciBgZm9saW9fdGVzdF9odWdldGxiYCB3aXRoaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBhbmQgbWFrZSBzdXJlIGl0IGlzIG5vdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzoxNS4yMjk5OTcxNzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTE5Mjc5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb190ZXN0X2h1Z2V0bGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA1Mj1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZUh1Z2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1My17XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA1NDpcXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKHBhZ2VfZm9saW8ocGFnZSkpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNTUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA2Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcGFnZV9od3BvaXNvbihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNjgtXFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNjk6XFx0cmV0dXJuIGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykgXFx1MDAyNlxcdTAwMjYgUGFnZUhXUG9pc29uKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA3MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIzOjE1LjM0NTIwNzA5MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODA0NjkzMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqVHJhY2luZyB0aGUgRGVmaW5pdGlvbiBvZiBgZm9saW9fdGVzdF9odWdldGxiYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYGZvbGlvX3Rlc3RfaHVnZXRsYmAsIGFuZCBpbW1lZGlhdGVseSBteSBicmFpbiBzdGFydHMgdG8gcGluZy4gV2hlcmUgKmV4YWN0bHkqIGlzIHRoaXMgZnVuY3Rpb24gb3IgbWFjcm8gZGVmaW5lZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIElzIGl0IGEgZnVuY3Rpb24sIGEgbWFjcm8sIHNvbWV0aGluZyBlbHNlPyBBbmQsIG1vcmUgaW1wb3J0YW50bHksIHdoYXQgZmlsZSBhbmQgbW9kdWxlIGlzIGl0IGluPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaXRzIG9yaWdpbiB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgaG93IGl0J3MgYmVpbmcgdXNlZC4gSXQncyB0aGUgZmlyc3Qgc3RlcCB0byB0cnVseSB1bmRlcnN0YW5kaW5nIHRoZSBmbG93IGFuZCBsb2dpYyBzdXJyb3VuZGluZyB0aGlzIHBpZWNlIG9mIGNvZGUuIEkgbmVlZCB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgaXRzIG1lYW5pbmcgYmVmb3JlIGRpdmluZyBhbnkgZGVlcGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDE3OjIzOjE4LjE0OTkwNDg2NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMzI5OTQ2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgZm9saW9fdGVzdF9odWdldGxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzoxOC40MDIyNTY4MTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwOTk0NzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgSHVnZVRMQiBGbGFnIERlZmluaXRpb25zKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRlZmluZXMgSHVnZVRMQi1yZWxhdGVkIGZsYWdzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UsIGFuZCB0aGUgbGlrZWx5IHNwb3QgZm9yIHRoYXQgaXMgYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYC4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSB0aGUgY3J1Y2lhbCBtYWNyb3MgYW5kIGRlZmluaXRpb25zIGZvciBoYW5kbGluZyBIdWdlVExCIHBhZ2VzIHdpbGwgcmVzaWRlLiBJJ2xsIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgZmxhZyBuYW1lcy4gQSBxdWljayBgZ3JlcCBodWdldGxiYCBzaG91bGQgcXVpY2tseSBsb2NhdGUgdGhlIHJlbGV2YW50IGxpbmVzLiBUaGF0IHNob3VsZCBnZXQgbWUgc3RhcnRlZCB3aXRoIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGZsYWcgaWRlbnRpZmllcnMuIExldCdzIGdldCB0byBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzoyMS4yMTIyMDgxODdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTE2OTE1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTkwMD1lbnVtIHBhZ2V0eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTkwNi1cXHRQR1RZX2d1YXJkXFx0XFx0PSAweGYzLFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjkwNzpcXHRQR1RZX2h1Z2V0bGJcXHRcXHQ9IDB4ZjQsXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtOTA4LVxcdFBHVFlfc2xhYlxcdFxcdD0gMHhmNSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTEwMjY9UEFHRV9UWVBFX09QUyhTbGFiLCBzbGFiLCBzbGFiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTAyOC0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwMjk6Rk9MSU9fVFlQRV9PUFMoaHVnZXRsYiwgaHVnZXRsYilcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDMwLSNlbHNlXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTAzMTpGT0xJT19URVNUX0ZMQUdfRkFMU0UoaHVnZXRsYilcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDMyLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MTA0Mj1QQUdFX1RZUEVfT1BTKExhcmdlS21hbGxvYywgbGFyZ2Vfa21hbGxvYywgbGFyZ2Vfa21hbGxvYylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNDQtLyoqXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA0NTogKiBQYWdlSHVnZSAtIERldGVybWluZSBpZiB0aGUgcGFnZSBiZWxvbmdzIHRvIGh1Z2V0bGJmc1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTEwNDYtICogQHBhZ2U6IFRoZSBwYWdlIHRvIHRlc3QuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDQ4LSAqIENvbnRleHQ6IEFueSBjb250ZXh0LlxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjEwNDk6ICogUmV0dXJuOiBUcnVlIGZvciBodWdldGxiZnMgcGFnZXMsIGZhbHNlIGZvciBhbm9uIHBhZ2VzIG9yIHBhZ2VzXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1MC0gKiBiZWxvbmdpbmcgdG8gb3RoZXIgZmlsZXN5c3RlbXMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDUyPXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlSHVnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDUzLXtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMDU0OlxcdHJldHVybiBmb2xpb190ZXN0X2h1Z2V0bGIocGFnZV9mb2xpbyhwYWdlKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA1NS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD0xMDYyPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX2h3cG9pc29uKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTA2OC1cXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MTA2OTpcXHRyZXR1cm4gZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiBQYWdlSFdQb2lzb24oXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMDcwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MjEuMzI3Mzg3MDI1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDM4ODE3MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1pZ3JhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIGh1Z2UgcGFnZXMgYW5kIG1pZ3JhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5LiBMZXQgbWUgYnJlYWsgdGhpcyBkb3duLi4uXG5cbkZpcnN0LCBpdCBzZWVtcyB0aGlzIGlzIGFsbCB0aWVkIHRvIGBGT0xJT19UWVBFX09QUyhodWdldGxiLCBodWdldGxiKWAsIHdoaWNoIGxlYWRzIHVzIHRvIGBmb2xpb190ZXN0X2h1Z2V0bGJgLiAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYC4gSWYgYENPTkZJR19IVUdFVExCX1BBR0VgIGlzbid0IGRlZmluZWQsIHdlIGZhbGwgYmFjayB0byBgRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKGh1Z2V0bGIpYCwgZXNzZW50aWFsbHkgbWFraW5nIGBmb2xpb190ZXN0X2h1Z2V0bGJgIGFsd2F5cyByZXR1cm4gZmFsc2UuIFRoaXMgbWVhbnMgdGhlIGBtaWdyYXRlX2h1Z2V0bGJzYCBmdW5jdGlvbiB3b3VsZCBqdXN0IGJ5cGFzcyBhbGwgdGhlIGZvbGlvcyBhbmQgZG8gbm90aGluZy4gVGhpcyBtZWFucyB3ZSdsbCBuZXZlciByZWFjaCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC4gT2theSwgc28gYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgdG8gZXZlbiAqZ2V0KiB0byB3aGVyZSB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nLlxuXG5TbywgdG8gcHJvcGVybHkgc2V0IHRoZSBzY2VuZSwgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZTpcblxuKiAgIGBNSUdSQVRJT05gIC0gdGhpcyBpcyBuZWVkZWQgdG8gY29tcGlsZSB0aGUgYG1tL21pZ3JhdGUuY2AgZmlsZS5cbiogICBgSFVHRVRMQl9QQUdFYCAtIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgYGZvbGlvX3Rlc3RfaHVnZXRsYmAgdG8gcmV0dXJuIHRydWUgc28gdGhhdCB3ZSAqY2FuKiByZWFjaCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC5cbiogICBgTUVNT1JZX0ZBSUxVUkVgIC0gdGhpcyBuZWVkcyB0byBiZSBlbmFibGVkIHNvIHRoYXQgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCB3aWxsIHJldHVybiB0cnVlIGFuZCBzdWJzZXF1ZW50bHkgdHJpZ2dlciB0aGUgbmV3IGNvZGUgcGF0aCB3aXRoaW4gYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuXG5cbkknbGwgZG91YmxlIGNoZWNrIGlmIGBNSUdSQVRJT05gIGlzIGNvbW1vbmx5IGVuYWJsZWQgYWxyZWFkeSwgbWF5YmUgdGhyb3VnaCBgTlVNQWAgb3IgYENPTVBBQ1RJT05gLiBUaGF0J3MgYSBwcmV0dHkgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4gQnV0IGBNRU1PUllfRkFJTFVSRWAgaXMgYSBsaXR0bGUgbW9yZSBzcGVjaWFsaXplZCwgbGlrZWx5IHRpZWQgdG8gaGFyZHdhcmUgcG9pc29uaW5nIHNwZWNpZmljYWxseSwgd2hpY2ggaXNuJ3QgYWx3YXlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gIGBIVUdFVExCX1BBR0VgIGlzIHByb2JhYmx5IGFsc28gY29tbW9ubHkgZW5hYmxlZCwgYnV0IHdvcnRoIG1lbnRpb25pbmcgZm9yIGNsYXJpdHkuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBJIHNlZSBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBpcyBzdGF0aWMuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBUaGUgY2VudHJhbCBmb2N1cyBvZiBkZWJ1Z2dpbmcgb3IgZnV6emluZyB3aWxsIGVpdGhlciBiZSBpbiBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBvciBgbWlncmF0ZV9odWdldGxic2Agb3IgZXZlbiBgbWlncmF0ZV9wYWdlc2AuIFNpbmNlIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIHN0YXRpYywgd2UgY2FuIHVzZSBgbWlncmF0ZV9odWdldGxic2AgYW5kIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBXYWl0Li4uIHN5emthbGxlciAqY2FuKiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMsIGlmIHRoZXkncmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgYnV0IG9mdGVuIHByb3ZpZGluZyB0aGUgY2FsbGVyIGlzIGJldHRlciBpZiB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzIGlubGluZWQuXG5cbk9rYXksIGxldCdzIGNoZWNrIGlmIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIGlubGluZWQuIEl0IGxvb2tzIHByZXR0eSBoZWZ0eSwgc28gcHJvYmFibHkgbm90LiBJJ2xsIHByb3ZpZGUgYm90aCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBhbmQgYG1pZ3JhdGVfaHVnZXRsYnNgLlxuXG5Ob3csIHJldmlld2luZyB0aGUgcGF0Y2ggaXRzZWxmOlxuXG5gYGBjXG5AQCAtMTUxMCw2ICsxNTEwLDExIEBAIHN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbitcdGlmICh1bmxpa2VseShmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZShzcmMpKSkge1xuK1x0XHRyYyA9IC1FSFdQT0lTT047XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbiBcdGlmIChmb2xpb190ZXN0X2Fub24oc3JjKSlcbiBcdFx0YW5vbl92bWEgPSBmb2xpb19nZXRfYW5vbl92bWEoc3JjKTtcbiBgYGBcblxuQWxyaWdodCwgdGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLiBJdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIHByZXZlbnRpbmcgdGhlIG1pZ3JhdGlvbiBvZiBodWdlIHBhZ2VzIHRoYXQgaGF2ZSBhIGhhcmR3YXJlLXBvaXNvbmVkIHN1YnBhZ2UuIEl0J2xsIHJldHVybiBgLUVIV1BPSVNPTmAgaWYgaXQgZmluZHMgdGhhdC5cblxuU28gdG8gcmVjYXA6XG5cbiogICAqKkNvbmZpZ3M6KiogYE1JR1JBVElPTmAsIGBIVUdFVExCX1BBR0VgLCBhbmQgYE1FTU9SWV9GQUlMVVJFYCBhcmUgbmVjZXNzYXJ5LlxuKiAgICoqRm9jdXMgc3ltYm9sczoqKiBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBhbmQgYG1pZ3JhdGVfaHVnZXRsYnNgIGFyZSBrZXkuXG4qICAgKipSZWFzb25pbmc6KiogVGhlIGNoYW5nZSBhZGRzIGEgY2hlY2sgdG8gc2hvcnQtY2lyY3VpdCBodWdlIHBhZ2UgbWlncmF0aW9uIGlmIEhXIHBvaXNvbiBpcyBwcmVzZW50LCByZXR1cm5pbmcgYC1FSFdQT0lTT05gLiBUaGlzIG5lY2Vzc2l0YXRlcyBIVUdFVExCIGFuZCBNRU1PUllfRkFJTFVSRSwgd2hpbGUgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZXMgTUlHUkFUSU9OIHRvIGJlIGVuYWJsZWQuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGBDT05GSUdfTUlHUkFUSU9OYCBpcyB0aGUgcmlnaHQgY29uZmlnIG5hbWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MzQuMzY2MjA5NTMxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzNTEyODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTUtXFxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxcbm1tL0tjb25maWctNjk3LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MzQuNTI5NTc3NDY1WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1NTM2NjU4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3Mgc2VsZi1yZWZsZWN0aW9uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsICpNaWdyYXRpb24qIGZlZWxzIHJpZ2h0LCBpbnR1aXRpdmVseS4gVGhhdCdzIHRoZSBjb3JlIGNvbmNlcHQuIE5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhbmQgZW5zdXJlIHRoZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnQgdGhpcyBhcHByb2FjaC4gTGV0J3MgbWFrZSBzdXJlIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBjb3JyZWN0bHkgc2V0LiBJdCdzIGNydWNpYWwgZm9yIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgSSdtIGFudGljaXBhdGluZy4gVGhhdCBzZXR0aW5nIHdpbGwgYmUgcGl2b3RhbCB0byB0aGUgaW1wbGVtZW50YXRpb24sIGFuZCBJIHdhbnQgdG8gYmUgMTAwJSBvbiB0aGF0IHBvaW50IGJlZm9yZSBJIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MzcuMDgzMjUxMzM1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjA5MDI0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTc6MjM6MzcuMTc1MzUzOTU2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MDU1ODYxODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlZlcmlmeWluZyB0aGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRoYXQncyBpdCwgYEhVR0VUTEJfUEFHRWAgaXMgZGVmaW5pdGVseSB0aGUgbmFtZSBJJ20gbG9va2luZyBmb3IuIE5vIG5lZWQgdG8gc2Vjb25kLWd1ZXNzIHRoYXQgb25lLiBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGlzIGVuYWJsZWQuIEp1c3Qgd2FudCB0byBtYWtlIHN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkgaW4gdGhpcyBjb250ZXh0LiBJdCdzIGEgY3JpdGljYWwgY29tcG9uZW50LCBzbyBhIHF1aWNrIHZlcmlmaWNhdGlvbiBpcyBhbHdheXMgd29ydGh3aGlsZSBiZWZvcmUgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NzAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzozOS42ODA5NDQ3NDFaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMTc5MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfRkFJTFVSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc3Ni1cXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcXG5tbS9LY29uZmlnLTc3OC1cXHRkZXBlbmRzIG9uIE1NVVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzozOS43NzMxNDAxMzJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc3OTQzMDg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBNZW1vcnkgRmFpbHVyZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBzeW1ib2wgdG8gZm9jdXMgb24uIE15IG5leHQgdGhvdWdodCBpcyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBSaWdodCwgSSBzZWUgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCBpcyBhbHNvIGluIHBsYXkuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSBhIGtleSBkZXBlbmRlbmN5LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGZvbGlvX2NvbnRhaW5faHdwb2lzb25lZF9wYWdlYCBzaG91bGQgb25seSByZXR1cm4gdHJ1ZSB3aGVuIGBNRU1PUllfRkFJTFVSRWAgaXMgYWN0aXZlLiBMb29raW5nIGJhY2sgYXQgdGhlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgYCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGJsb2NrLCBpdCBzZWVtcyBsaWtlIGBmb2xpb190ZXN0X2h3cG9pc29uYCDigJMgd2hpY2ggY29udHJpYnV0ZXMgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBmb2xpb19jb250YWluX2h3cG9pc29uZWRfcGFnZWAgLSBpcyBvbmx5IGRlZmluZWQgd2hlbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBlbmFibGVkLiBJZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBkaXNhYmxlZCwgdGhlIGNvZGUgcGF0aCB3aWxsIGJ5cGFzcyB0aGUgY2hlY2tpbmcuXG5cblNvLCBgTUVNT1JZX0ZBSUxVUkVgIGlzIG5lY2Vzc2FyeSB0byBhY3R1YWxseSB0cmlnZ2VyIHRoZSBjaGVja3MgcmVsYXRlZCB0byBwb2lzb25lZCBwYWdlcy4gVGhpcyByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIGRlcGVuZGVuY3kuXG5cbk5vdywgaXMgdGhlcmUgYW55IG90aGVyIHN5bWJvbCByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb25hbGl0eSB0aGF0J3Mgd29ydGggbG9va2luZyBpbnRvPyBUaGUgY29kZSBtb2RpZmljYXRpb24gYXBwZWFycyB0byBiZSBmb2N1c2VkIG9uIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBHb29kLCBgbWlncmF0ZV9odWdldGxic2AgaXMgdGhlIGNhbGxlciBvZiB0aGF0IGZ1bmN0aW9uLiBFdmVuIGJldHRlciwgYG1pZ3JhdGVfcGFnZXNgIGlzIHRoZSBjYWxsZXIgb2YgYG1pZ3JhdGVfaHVnZXRsYnNgLiBUaGUga2V5IGZ1bmN0aW9ucyBhcmUgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgYW5kIGBtaWdyYXRlX2h1Z2V0bGJzYC5cblxuSSB0aGluayB0aGF0J3MgZW5vdWdoIGluZm9ybWF0aW9uLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzA3LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxNzoyMzo0OC41NTI1Nzg2MjNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk2MzM5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZVwiLFxuICAgIFwibWlncmF0ZV9odWdldGxic1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayB0byBwcmV2ZW50IHRoZSBtaWdyYXRpb24gb2YgaHVnZSBwYWdlcyB0aGF0IGNvbnRhaW4gaGFyZHdhcmUtcG9pc29uZWQgc3VicGFnZXMsIHJldHVybmluZyAtRUhXUE9JU09OLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtaWdyYXRpb24gbG9naWMuIFRvIHJlYWNoIGFuZCB0ZXN0IHRoaXMgY29kZSwgaHVnZSBwYWdlIHN1cHBvcnQgKENPTkZJR19IVUdFVExCX1BBR0UpLCBtZW1vcnkgbWlncmF0aW9uIChDT05GSUdfTUlHUkFUSU9OKSwgYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpIG11c3QgYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNSUdSQVRJT05cIixcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VcIixcbiAgICBcIm1pZ3JhdGVfaHVnZXRsYnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgdG8gcHJldmVudCB0aGUgbWlncmF0aW9uIG9mIGh1Z2UgcGFnZXMgdGhhdCBjb250YWluIGhhcmR3YXJlLXBvaXNvbmVkIHN1YnBhZ2VzLCByZXR1cm5pbmcgLUVIV1BPSVNPTi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWlncmF0aW9uIGxvZ2ljLiBUbyByZWFjaCBhbmQgdGVzdCB0aGlzIGNvZGUsIGh1Z2UgcGFnZSBzdXBwb3J0IChDT05GSUdfSFVHRVRMQl9QQUdFKSwgbWVtb3J5IG1pZ3JhdGlvbiAoQ09ORklHX01JR1JBVElPTiksIGFuZCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyAoQ09ORklHX01FTU9SWV9GQUlMVVJFKSBtdXN0IGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcz7q[1] Phase: Succeeded StartedAt: 2026-07-01 17:24:00 +0000 UTC FinishedAt: 2026-07-01 17:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 17:24:00 +0000 UTC FinishedAt: 2026-07-01 17:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2] Phase: Succeeded StartedAt: 2026-07-01 17:24:00 +0000 UTC FinishedAt: 2026-07-01 21:24:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:24:00 +0000 UTC FinishedAt: 2026-07-01 21:24:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:24:00 +0000 UTC FinishedAt: 2026-07-01 17:24:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:24:00 +0000 UTC FinishedAt: 2026-07-01 17:24:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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-workflowwcz7q/series-workflowwcz7q-convert-artifact-422067018/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:24:21 +0000 UTC FinishedAt: 2026-07-01 17:53:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:24:21 +0000 UTC FinishedAt: 2026-07-01 17:53:17 +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:*abb5fe4e-b0e8-4b2a-8be1-62fe54375970,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-workflowwcz7q/series-workflowwcz7q-convert-artifact-422067018/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": "1a0ee2d9-19a7-4791-8134-2a44affb4068", "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-workflowwcz7q/series-workflowwcz7q-build-action-1283248952/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:24:21 +0000 UTC FinishedAt: 2026-07-01 17:53:07 +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:*abb5fe4e-b0e8-4b2a-8be1-62fe54375970,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-workflowwcz7q/series-workflowwcz7q-convert-artifact-422067018/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": "1a0ee2d9-19a7-4791-8134-2a44affb4068", "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-workflowwcz7q/series-workflowwcz7q-build-action-1283248952/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:53:17 +0000 UTC FinishedAt: 2026-07-01 17:53:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:53:17 +0000 UTC FinishedAt: 2026-07-01 17:53:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:53:17 +0000 UTC FinishedAt: 2026-07-01 17:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:53:17 +0000 UTC FinishedAt: 2026-07-01 17:53:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-workflowwcz7q/series-workflowwcz7q-convert-artifact-3476386533/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:53:28 +0000 UTC FinishedAt: 2026-07-01 17:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:53:28 +0000 UTC FinishedAt: 2026-07-01 17:55:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1a0ee2d9-19a7-4791-8134-2a44affb4068,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-workflowwcz7q/series-workflowwcz7q-build-action-1283248952/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-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:55:50 +0000 UTC FinishedAt: 2026-07-01 17:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:55:50 +0000 UTC FinishedAt: 2026-07-01 17:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:55:50 +0000 UTC FinishedAt: 2026-07-01 18:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:55:50 +0000 UTC FinishedAt: 2026-07-01 18:19:38 +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:*abb5fe4e-b0e8-4b2a-8be1-62fe54375970,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-workflowwcz7q/series-workflowwcz7q-convert-artifact-3476386533/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": "dca07bc9-7c38-4838-8944-d08671a0045d", "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-workflowwcz7q/series-workflowwcz7q-build-action-1803044657/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 17:55:50 +0000 UTC FinishedAt: 2026-07-01 18:19:28 +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:*abb5fe4e-b0e8-4b2a-8be1-62fe54375970,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-workflowwcz7q/series-workflowwcz7q-convert-artifact-3476386533/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": "dca07bc9-7c38-4838-8944-d08671a0045d", "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-workflowwcz7q/series-workflowwcz7q-build-action-1803044657/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 18:19:38 +0000 UTC FinishedAt: 2026-07-01 18:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 18:19:38 +0000 UTC FinishedAt: 2026-07-01 18:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 18:19:38 +0000 UTC FinishedAt: 2026-07-01 18:21:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 18:19:38 +0000 UTC FinishedAt: 2026-07-01 18:21:49 +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:*dca07bc9-7c38-4838-8944-d08671a0045d,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-workflowwcz7q/series-workflowwcz7q-build-action-1803044657/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-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 18:21:58 +0000 UTC FinishedAt: 2026-07-01 21:24:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 18:21:58 +0000 UTC FinishedAt: 2026-07-01 21:24:55 +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":["unmap_and_move_huge_page","migrate_hugetlbs"],"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:*1a0ee2d9-19a7-4791-8134-2a44affb4068,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dca07bc9-7c38-4838-8944-d08671a0045d,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-workflowwcz7q/series-workflowwcz7q-build-action-1283248952/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-workflowwcz7q/series-workflowwcz7q-build-action-1803044657/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 18:21:58 +0000 UTC FinishedAt: 2026-07-01 18:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 18:21:58 +0000 UTC FinishedAt: 2026-07-01 18:22:04 +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":["unmap_and_move_huge_page","migrate_hugetlbs"],"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-workflowwcz7q/series-workflowwcz7q-convert-artifact-3237402474/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 18:21:58 +0000 UTC FinishedAt: 2026-07-01 18:21:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 18:21:58 +0000 UTC FinishedAt: 2026-07-01 18:21:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 18:21:58 +0000 UTC FinishedAt: 2026-07-01 18:21:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 18:22:09 +0000 UTC FinishedAt: 2026-07-01 21:24:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcz7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"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":["unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff1cd4bfdfebea913df9682c4a715bca55759ff0","config_name":"upstream-apparmor-kasan.config","enable_configs":["MIGRATION","HUGETLB_PAGE","MEMORY_FAILURE"],"series_id":"5773d0e9-38a1-4523-9dfe-e53545137e86","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-07-01 18:22:09 +0000 UTC FinishedAt: 2026-07-01 21:24:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1a0ee2d9-19a7-4791-8134-2a44affb4068,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dca07bc9-7c38-4838-8944-d08671a0045d,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-workflowwcz7q/series-workflowwcz7q-build-action-1283248952/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-workflowwcz7q/series-workflowwcz7q-build-action-1803044657/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-workflowwcz7q/series-workflowwcz7q-convert-artifact-3237402474/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,}