Name: series-workflow98jmj Phase: Succeeded StartedAt: 2026-09-09 03:50:45 +0000 UTC FinishedAt: 2026-09-09 08:20:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[0] Phase: Succeeded StartedAt: 2026-09-09 03:50:45 +0000 UTC FinishedAt: 2026-09-09 04:37:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 03:50:45 +0000 UTC FinishedAt: 2026-09-09 04:37:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a9d7ced84989ec05be09b4b8428759ef60450a0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a9d7ced84989ec05be09b4b8428759ef60450a0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "9e80305b-e1ef-4a6b-9b6b-39ecc4b71041" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "finish_range", "ext4_ext_migrate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaW5pc2hfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfbWlncmF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgY29kZSBhc3NpZ25tZW50IGluIGV4dDQmIzM5O3MgZmluaXNoX3JhbmdlKCkgZnVuY3Rpb24gYnkgcmVwbGFjaW5nIGBpZiAoSVNfRVJSKHBhdGgpKSByZXR2YWwgPSBQVFJfRVJSKHBhdGgpO2Agd2l0aCBgcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyByZWZhY3RvcmluZyB0aGF0IG1vZGlmaWVzIGEgc2NhbGFyIHJldHVybiBjb2RlIHZhcmlhYmxlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGFuZCByZXR1cm4gdmFsdWUgcHJvcGFnYXRpb24gdXNpbmcgUFRSX0VSUl9PUl9aRVJPIGluIGV4dDQmIzM5O3MgZmluaXNoX3JhbmdlKCkgaW4gZnMvZXh0NC9taWdyYXRlLmMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgZXh0NCYjMzk7cyBleHRlbnQgbWlncmF0aW9uIG1lY2hhbmlzbSwgYWNjZXNzaWJsZSB2aWEgaW9jdGxzIChlLmcuLCBFWFQ0X0lPQ19NSUdSQVRFKS4gU2luY2UgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGlzIG1vZGlmaWVkLCBmdXp6aW5nIGlzIHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDIxMjQwODY1YTFlYmFhZDdiYjQzOGEwZDJjNmI2NzY1ODZmY2Y5NmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM2OjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWlncmF0ZS5jIGIvZnMvZXh0NC9taWdyYXRlLmNcbmluZGV4IDVkNjBlZjEwZmUxMTAuLmQ0NjdiNWExM2M2MmUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9taWdyYXRlLmNcbkBAIC01Myw4ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfb3V0O1xuIFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXh0LCAwKTtcbi1cdGlmIChJU19FUlIocGF0aCkpXG4tXHRcdHJldHZhbCA9IFBUUl9FUlIocGF0aCk7XG4mIzQzO1x0cmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpO1xuIGVycl9vdXQ6XG4gXHR1cF93cml0ZSgoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKSk7XG4gXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpbmlzaF9yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9taWdyYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgYW5kIHJldHVybiB2YWx1ZSBwcm9wYWdhdGlvbiB1c2luZyBQVFJfRVJSX09SX1pFUk8gaW4gZXh0NCYjMzk7cyBmaW5pc2hfcmFuZ2UoKSBpbiBmcy9leHQ0L21pZ3JhdGUuYy4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiBleHQ0JiMzOTtzIGV4dGVudCBtaWdyYXRpb24gbWVjaGFuaXNtLCBhY2Nlc3NpYmxlIHZpYSBpb2N0bHMgKGUuZy4sIEVYVDRfSU9DX01JR1JBVEUpLiBTaW5jZSByZWFjaGFibGUga2VybmVsIGNvZGUgaXMgbW9kaWZpZWQsIGZ1enppbmcgaXMgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjEyNDA4NjVhMWViYWFkN2JiNDM4YTBkMmM2YjY3NjU4NmZjZjk2ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDQ6MzY6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jCmluZGV4IDVkNjBlZjEwZmUxMTAuLmQ0NjdiNWExM2M2MmUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvbWlncmF0ZS5jCkBAIC01Myw4ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCWlmIChyZXR2YWwgJmx0OyAwKQogCQlnb3RvIGVycl9vdXQ7CiAJcGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJmFtcDtuZXdleHQsIDApOwotCWlmIChJU19FUlIocGF0aCkpCi0JCXJldHZhbCA9IFBUUl9FUlIocGF0aCk7CiYjNDM7CXJldHZhbCA9IFBUUl9FUlJfT1JfWkVSTyhwYXRoKTsKIGVycl9vdXQ6CiAJdXBfd3JpdGUoKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7aV9kYXRhX3NlbSkpOwogCWV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV4dDQgTWlncmF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgaXRzIGluc3RydWN0aW9ucy4gTXkgaW5pdGlhbCBmb2N1cyBpcyB0aGUgZGlmZiwgb2YgY291cnNlLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgY2hhbmdlIGluIGBmcy9leHQ0L21pZ3JhdGUuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBmaW5pc2hfcmFuZ2VgIGZ1bmN0aW9uLiBJbnRlcmVzdGluZywgdGhleSYjMzk7dmUgcmVwbGFjZWQgdGhlIGRpcmVjdCBjaGVjayBmb3IgYW4gZXJyb3Igd2l0aCBgSVNfRVJSKHBhdGgpYCBhbmQgdGhlIHN1YnNlcXVlbnQgYXNzaWdubWVudCBvZiBgcmV0dmFsYCB3aXRoIGEgbW9yZSBjb25jaXNlIGByZXR2YWwgPSBQVFJfRVJSX09SX1pFUk8ocGF0aClgLiBUaGlzIGlzIGNvbW1vbjsgaXQmIzM5O3MgbGlrZWx5IGEgc2ltcGxpZmljYXRpb24gdG8gaGFuZGxlIHRoZSBlcnJvciByZXR1cm4gZnJvbSBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAuIE5vIGJpZyBkZWFsIGF0IHRoaXMgcG9pbnQuCgpUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIGNvbnRleHQuIEkmIzM5O2xsIHF1aWNrbHkgbG9vayB1cCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZnMvZXh0NC9taWdyYXRlLmNgLCBwcm9iYWJseSBhcm91bmQgbGluZSA1MywgdG8gZ3Jhc3Agd2hhdCBgZmluaXNoX3JhbmdlYCBpcyAqZG9pbmcqIGFuZCwgY3JpdGljYWxseSwgd2hvJiMzOTtzIGNhbGxpbmcgaXQuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBjbGFyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIHRvIGNvbnNpZGVyLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBlcnJvciBoYW5kbGluZyBpcyBzdGlsbCBjb3JyZWN0IGFuZCB0aGF0IG5vIGluZm9ybWF0aW9uIGlzIGJlaW5nIGxvc3Qgd2l0aCB0aGlzIGNoYW5nZS4gSXQgd291bGQgYWxzbyBiZSBnb29kIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIHVzZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgYXNzdW1wdGlvbnMgaXQgbWFrZXMuIEkgc2hvdWxkIGFsc28gaW52ZXN0aWdhdGUgd2hldGhlciB0aGlzIGNoYW5nZSBhbHNvIGV4aXN0cyBpbiB0aGUgbGF0ZXN0IHJlbGVhc2VzIG9yIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvbWlncmF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdFxuICAzMTpcdFx0LyogQWRkIHRoZSBleHRlbnQgdG8gdGVtcCBpbm9kZSovXG4gIDMyOlx0XHRuZXdleHQuZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihsYi1cdTAwM2VmaXJzdF9ibG9jayk7XG4gIDMzOlx0XHRuZXdleHQuZWVfbGVuICAgPSBjcHVfdG9fbGUxNihsYi1cdTAwM2VsYXN0X2Jsb2NrIC0gbGItXHUwMDNlZmlyc3RfYmxvY2sgJiM0MzsgMSk7XG4gIDM0Olx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXh0LCBsYi1cdTAwM2VmaXJzdF9wYmxvY2spO1xuICAzNTpcdFx0LyogTG9ja2luZyBvbmx5IGZvciBjb252ZW5pZW5jZSBzaW5jZSB3ZSBhcmUgb3BlcmF0aW5nIG9uIHRlbXAgaW5vZGUgKi9cbiAgMzY6XHRcdGRvd25fd3JpdGUoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKTtcbiAgMzc6XHRcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBsYi1cdTAwM2VmaXJzdF9ibG9jaywgTlVMTCwgMCk7XG4gIDM4Olx0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4gIDM5Olx0XHRcdHJldHZhbCA9IFBUUl9FUlIocGF0aCk7XG4gIDQwOlx0XHRcdGdvdG8gZXJyX291dDtcbiAgNDE6XHRcdH1cbiAgNDI6XHRcbiAgNDM6XHRcdC8qXG4gIDQ0Olx0XHQgKiBDYWxjdWxhdGUgdGhlIGNyZWRpdCBuZWVkZWQgdG8gaW5zZXJ0aW5nIHRoaXMgZXh0ZW50XG4gIDQ1Olx0XHQgKiBTaW5jZSB3ZSBhcmUgZG9pbmcgdGhpcyBpbiBsb29wIHdlIG1heSBhY2N1bXVsYXRlIGV4dHJhXG4gIDQ2Olx0XHQgKiBjcmVkaXQuIEJ1dCBiZWxvdyB3ZSB0cnkgdG8gbm90IGFjY3VtdWxhdGUgdG9vIG11Y2hcbiAgNDc6XHRcdCAqIG9mIHRoZW0gYnkgcmVzdGFydGluZyB0aGUgam91cm5hbC5cbiAgNDg6XHRcdCAqL1xuICA0OTpcdFx0bmVlZGVkID0gZXh0NF9leHRfY2FsY19jcmVkaXRzX2Zvcl9zaW5nbGVfZXh0ZW50KGlub2RlLFxuICA1MDpcdFx0XHQgICAgbGItXHUwMDNlbGFzdF9ibG9jayAtIGxiLVx1MDAzZWZpcnN0X2Jsb2NrICYjNDM7IDEsIHBhdGgpO1xuICA1MTpcdFxuICA1MjpcdFx0cmV0dmFsID0gZXh0NF9kYXRhc2VtX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgaW5vZGUsIG5lZWRlZCwgbmVlZGVkLCAwKTtcbiAgNTM6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gIDU0Olx0XHRcdGdvdG8gZXJyX291dDtcbiAgNTU6XHRcdHBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIFx1MDAyNm5ld2V4dCwgMCk7XG4gIDU2Olx0XHRyZXR2YWwgPSBQVFJfRVJSX09SX1pFUk8ocGF0aCk7XG4gIDU3Olx0ZXJyX291dDpcbiAgNTg6XHRcdHVwX3dyaXRlKChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YV9zZW0pKTtcbiAgNTk6XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbiAgNjA6XHRcdGxiLVx1MDAzZWZpcnN0X3BibG9jayA9IDA7XG4gIDYxOlx0XHRyZXR1cm4gcmV0dmFsO1xuICA2MjpcdH1cbiAgNjM6XHRcbiAgNjQ6XHRzdGF0aWMgaW50IHVwZGF0ZV9leHRlbnRfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgNjU6XHRcdFx0XHQgICAgICAgZXh0NF9mc2Jsa190IHBibG9jaywgc3RydWN0IG1pZ3JhdGVfc3RydWN0ICpsYilcbiAgNjY6XHR7XG4gIDY3Olx0XHRpbnQgcmV0dmFsO1xuICA2ODpcdFx0LypcbiAgNjk6XHRcdCAqIFNlZSBpZiB3ZSBjYW4gYWRkIG9uIHRvIHRoZSBleGlzdGluZyByYW5nZSAoaWYgaXQgZXhpc3RzKVxuICA3MDpcdFx0ICovXG4gIDcxOlx0XHRpZiAobGItXHUwMDNlZmlyc3RfcGJsb2NrIFx1MDAyNlx1MDAyNlxuICA3MjpcdFx0XHQobGItXHUwMDNlbGFzdF9wYmxvY2smIzQzOzEgPT0gcGJsb2NrKSBcdTAwMjZcdTAwMjZcbiAgNzM6XHRcdFx0KGxiLVx1MDAzZWxhc3RfYmxvY2smIzQzOzEgPT0gbGItXHUwMDNlY3Vycl9ibG9jaykpIHtcbiAgNzQ6XHRcdFx0bGItXHUwMDNlbGFzdF9wYmxvY2sgPSBwYmxvY2s7XG4gIDc1Olx0XHRcdGxiLVx1MDAzZWxhc3RfYmxvY2sgPSBsYi1cdTAwM2VjdXJyX2Jsb2NrO1xuICA3NjpcdFx0XHRsYi1cdTAwM2VjdXJyX2Jsb2NrJiM0MzsmIzQzOztcbiAgNzc6XHRcdFx0cmV0dXJuIDA7XG4gIDc4Olx0XHR9XG4gIDc5Olx0XHQvKlxuICA4MDpcdFx0ICogU3RhcnQgYSBuZXcgcmFuZ2UuXG4gIDgxOlx0XHQgKi9cbiAgODI6XHRcdHJldHZhbCA9IGZpbmlzaF9yYW5nZShoYW5kbGUsIGlub2RlLCBsYik7XG4gIDgzOlx0XHRsYi1cdTAwM2VmaXJzdF9wYmxvY2sgPSBsYi1cdTAwM2VsYXN0X3BibG9jayA9IHBibG9jaztcbiAgODQ6XHRcdGxiLVx1MDAzZWZpcnN0X2Jsb2NrID0gbGItXHUwMDNlbGFzdF9ibG9jayA9IGxiLVx1MDAzZWN1cnJfYmxvY2s7XG4gIDg1Olx0XHRsYi1cdTAwM2VjdXJyX2Jsb2NrJiM0MzsmIzQzOztcbiAgODY6XHRcdHJldHVybiByZXR2YWw7XG4gIDg3Olx0fVxuICA4ODpcdFxuICA4OTpcdHN0YXRpYyBpbnQgdXBkYXRlX2luZF9leHRlbnRfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgOTA6XHRcdFx0XHRcdCAgIGV4dDRfZnNibGtfdCBwYmxvY2ssXG4gIDkxOlx0XHRcdFx0XHQgICBzdHJ1Y3QgbWlncmF0ZV9zdHJ1Y3QgKmxiKVxuICA5MjpcdHtcbiAgOTM6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4gIDk0Olx0XHRfX2xlMzIgKmlfZGF0YTtcbiAgOTU6XHRcdGludCBpLCByZXR2YWwgPSAwO1xuICA5NjpcdFx0dW5zaWduZWQgbG9uZyBtYXhfZW50cmllcyA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgXHUwMDNlXHUwMDNlIDI7XG4gIDk3Olx0XG4gIDk4Olx0XHRiaCA9IGV4dDRfc2JfYnJlYWQoaW5vZGUtXHUwMDNlaV9zYiwgcGJsb2NrLCAwKTtcbiAgOTk6XHRcdGlmIChJU19FUlIoYmgpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NzcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGFjdGl2YXRpb24gcGF0aCBmb3IgYG1pZ3JhdGUuY2AsIHNwZWNpZmljYWxseS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIHdoZXJlIHRoaXMgY29kZSBpcyAqYWN0dWFsbHkqIGNhbGxlZCBhbmQgd2hhdCBzZXR0aW5ncyBtaWdodCB0cmlnZ2VyIGl0cyB1c2FnZS4gU28sIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIHJlZmVyZW5jZXMgdG8gYGV4dDRfZXh0X21pZ3JhdGVgIG9yIGFueSByZWxhdGVkIHN5bWJvbHMgd2l0aGluIHRoZSBgZnMvZXh0NC9taWdyYXRlLmNgIGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYSBtZW50YWwgbW9kZWwgb2Ygd2hlbiBhbmQgd2h5IGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NC4qbWlncmF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTMyNTQ9aW50IGV4dDRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKTtcbi0tXG5mcy9leHQ0L2V4dDQuaC0zMjU2LS8qIG1pZ3JhdGUuYyAqL1xuZnMvZXh0NC9leHQ0Lmg6MzI1NzpleHRlcm4gaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICopO1xuZnMvZXh0NC9leHQ0Lmg6MzI1ODpleHRlcm4gaW50IGV4dDRfaW5kX21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaC0zMjU5LVxuLS1cbmZzL2V4dDQvaW9jdGwuYz01OTA9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldGZsYWdzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTcwNS1cdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0VYVEVOVFNfRkwpXG5mcy9leHQ0L2lvY3RsLmM6NzA2Olx0XHRcdGVyciA9IGV4dDRfZXh0X21pZ3JhdGUoaW5vZGUpO1xuZnMvZXh0NC9pb2N0bC5jLTcwNy1cdFx0ZWxzZVxuZnMvZXh0NC9pb2N0bC5jOjcwODpcdFx0XHRlcnIgPSBleHQ0X2luZF9taWdyYXRlKGlub2RlKTtcbmZzL2V4dDQvaW9jdGwuYy03MDktXHR9XG4tLVxuZnMvZXh0NC9pb2N0bC5jPTE1Mzg9c3RhdGljIGxvbmcgX19leHQ0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTcwMS1cdFx0aW5vZGVfbG9jaygoaW5vZGUpKTtcbmZzL2V4dDQvaW9jdGwuYzoxNzAyOlx0XHRlcnIgPSBleHQ0X2V4dF9taWdyYXRlKGlub2RlKTtcbmZzL2V4dDQvaW9jdGwuYy0xNzAzLVx0XHRpbm9kZV91bmxvY2soKGlub2RlKSk7XG4tLVxuZnMvZXh0NC9taWdyYXRlLmM9NjQ9c3RhdGljIGludCB1cGRhdGVfZXh0ZW50X3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L21pZ3JhdGUuYzo2NTpcdFx0XHQgICAgICAgZXh0NF9mc2Jsa190IHBibG9jaywgc3RydWN0IG1pZ3JhdGVfc3RydWN0ICpsYilcbmZzL2V4dDQvbWlncmF0ZS5jLTY2LXtcbi0tXG5mcy9leHQ0L21pZ3JhdGUuYz0zODk9c3RhdGljIGludCBmcmVlX2V4dF9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvbWlncmF0ZS5jLTQwOC1cbmZzL2V4dDQvbWlncmF0ZS5jOjQwOTppbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9taWdyYXRlLmMtNDEwLXtcbi0tXG5mcy9leHQ0L21pZ3JhdGUuYy02MDItICovXG5mcy9leHQ0L21pZ3JhdGUuYzo2MDM6aW50IGV4dDRfaW5kX21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvbWlncmF0ZS5jLTYwNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgZXh0NCBNaWdyYXRpb24gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMgZm9yIGBmcy9leHQ0L21pZ3JhdGUuY2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpdCBnZXRzIGJ1aWx0LiBUaGUgYGZzL2V4dDQvTWFrZWZpbGVgIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGF0IE1ha2VmaWxlIGFuZCBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFscyB0aGF0IGRldGVybWluZSB3aGV0aGVyIHRoYXQgbWlncmF0aW9uIGNvZGUgaXMgYWN0dWFsbHkgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGtlcm5lbCBpbWFnZS4gVGhpcyBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgaXQmIzM5O3MgYSB0eXBpY2FsIGJ1aWxkIHN5c3RlbSBkZXBlbmRlbmN5IGxvb2t1cC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHNvbWV0aGluZyBsaWtlIGBvYmotJChDT05GSUdfRVhUNF9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlLm9gIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlbiBJIGNhbiB0cmFjayBiYWNrIHdoYXQgc2V0cyBgQ09ORklHX0VYVDRfTUlHUkFUSU9OYCB0byBzZWUgaWYgdGhlcmUgaXMgc29tZSBvdGhlciB0cmlnZ2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtOS1cdFx0ZXh0ZW50c19zdGF0dXMubyBmaWxlLm8gZnNtYXAubyBmc3luYy5vIGhhc2gubyBpYWxsb2MubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMDpcdFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcxMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgT3JpZ2lucyBvZiBgbWlncmF0ZS5vYCBpbiB0aGUgZXh0NCBGaWxlc3lzdGVtKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGVuY291bnRlcmVkIGBtaWdyYXRlLm9gIGFuZCwgYXMgYWx3YXlzLCB0aGUgZmlyc3QgdGhpbmcgSSBkbyBpcyBmaWd1cmUgb3V0IHdoZXJlIGl0IGNvbWVzIGZyb20uIEl0JiMzOTtzIGxpc3RlZCB1bmRlciBgZXh0NC15YCwgbWVhbmluZyBpdCYjMzk7cyBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBleHQ0IG1vZHVsZSwgYXNzdW1pbmcgdGhlIGV4dDQgbW9kdWxlIGl0c2VsZiBpcyBiZWluZyBidWlsdC4gTWFrZXMgc2Vuc2UuIE5vdywgYGV4dDQteWAgaW5kaWNhdGVzIHRoYXQgdGhlIG1vZHVsZSBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfRVhUNF9GU2AgaXMgZW5hYmxlZCwgYW5kIEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZvciBleHQ0LiBJIG5lZWQgdG8gY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoYXQgcGFydGljdWxhciBjb25maWcgb3B0aW9uIGdldHMgZW5hYmxlZC4gVGhlbiBJJiMzOTtsbCBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBleGFjdGx5IHdoZW4gYG1pZ3JhdGUub2AgZW5kcyB1cCBpbiB0aGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIwMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBFWFQ0IEZpbGVzeXN0ZW0gUmVmYWN0b3IqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXMgdGhpcyBjaGFuZ2UgaW4gYGZzL2V4dDQvbWlncmF0ZS5jYCB3b3J0aCBmdXp6aW5nPyBUaGUgc3Vic3lzdGVtIGlzIHRoZSBFWFQ0IGZpbGVzeXN0ZW0sIGEgY29yZSBjb21wb25lbnQgb2YgdGhlIExpbnV4IGtlcm5lbCwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRyaWdnZXJhYmxlIHZpYSBgRVhUNF9JT0NfTUlHUkFURWAgb3IgYEZTX0lPQ19TRVRGTEFHU2AgaW9jdGxzIOKAkyB0aGF0JiMzOTtzIGFub3RoZXIgYWNjZXNzaWJpbGl0eSBjaGVjayBtYXJrLgoKVGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgaXMgd2l0aGluIHRoZSBgZmluaXNoX3JhbmdlKClgIGZ1bmN0aW9uLiBUaGUgY29kZSByZWZhY3RvcmluZyBpbnZvbHZlcyB0aGUgd2F5IGByZXR2YWxgIGlzIGhhbmRsZWQgYWZ0ZXIgYSBjYWxsIHRvIGBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KClgLiBCZWZvcmUsIGEgY29uZGl0aW9uYWwgY2hlY2sgYElTX0VSUihwYXRoKWAgZGV0ZXJtaW5lZCB0aGUgZmF0ZSBvZiBgcmV0dmFsYC4gTm93LCBgcmV0dmFsYCBpcyBzZXQgZGlyZWN0bHkgdXNpbmcgYFBUUl9FUlJfT1JfWkVSTyhwYXRoKWAuIENyaXRpY2FsbHksIGByZXR2YWxgIHdhcyBpbml0aWFsaXplZCB0byAwIHByZXZpb3VzbHkgKGxpa2VseSBieSBhIGNhbGwgdG8gYGV4dDRfZGF0YXNlbV9lbnN1cmVfY3JlZGl0c2AgdGhhdCBwcmVjZWRlZCBpdCksIGFuZCBgcmV0dmFsYCBiZWNvbWVzIDAgKmlmIGFuZCBvbmx5IGlmKiBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudCgpYCByZXR1cm5zIGEgdmFsaWQgcG9pbnRlciAobm9uLWVycm9yKS4gSWYgaXQgKmRvZXMqIHJldHVybiBhbiBlcnJvciBwb2ludGVyLCB0aGUgbmV3IGltcGxlbWVudGF0aW9uIG1pbWljcyB0aGUgcHJldmlvdXMgYmVoYXZpb3IuCgpUaGUgY2hhbmdlIHNlZW1zIHB1cmVseSBhIHJlZmFjdG9yaW5nLCBhIGNsZWFudXAuIEJ1dCwgYWNjb3JkaW5nIHRvIHNlY3Rpb25zIDEgYW5kIDMsIEkgY2FuJiMzOTt0IGJsaW5kbHkgdHJ1c3QgYSAmIzM0O3JlZmFjdG9yaW5nJiMzNDsgb3IgTkZDSSBjbGFpbSwgZXNwZWNpYWxseSB3aXRoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIFRoZSBydWxlIGlzIGNsZWFyOiAqSWYqIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuIEFuZCB0aGlzIGRlZmluaXRlbHkgdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBhIGNvcmUgc3Vic3lzdGVtLiBNb3Jlb3ZlciwgdGhlIHJlZmFjdG9yaW5nIGFmZmVjdHMgdGhlIGZsb3cgYnkgd2hpY2ggdGhlIHJlc3VsdCBvZiBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAgd2lsbCBiZSBoYW5kbGVkLCBhbmQgdGhpcyB0eXBlIG9mIHJlc3RydWN0dXJpbmcgb2YgdGhlIHJlYWNoYWJsZSBjb2RlIGlzIG1lbnRpb25lZCBzcGVjaWZpY2FsbHkgaW4gU2VjdGlvbiAzIGFzIG1lcml0aW5nIGEgZnV6emluZyBlZmZvcnQuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYHRydWVgLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byB1bmRlcnN0YW5kIGFsbCB0aGUgZW50cnlwb2ludHMgYW5kIGNhbGwgY2hhaW5zLiBJIG5lZWQgdG8gbG9vayBhdCBhbGwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG1pZ3JhdGUuY2Agb3IgZW50cnlwb2ludHMgZm9yIHRoaXMgcGF0aC4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgZXh0NF9leHRfbWlncmF0ZWAgYW5kIGBleHQ0X2luZF9taWdyYXRlYCB3aXRoaW4gdGhlIHNhbWUgZmlsZS4gVG8gYmUgZXh0cmEgc3VyZSwgSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHdoYXQgaXMgY2FsbGluZyBgZmluaXNoX3JhbmdlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmluaXNoX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9taWdyYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9taWdyYXRlLmM9MTY9c3RydWN0IG1pZ3JhdGVfc3RydWN0IHtcbi0tXG5mcy9leHQ0L21pZ3JhdGUuYy0yMC1cbmZzL2V4dDQvbWlncmF0ZS5jOjIxOnN0YXRpYyBpbnQgZmluaXNoX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L21pZ3JhdGUuYy0yMi1cdFx0XHRcdHN0cnVjdCBtaWdyYXRlX3N0cnVjdCAqbGIpXG4tLVxuZnMvZXh0NC9taWdyYXRlLmM9NjQ9c3RhdGljIGludCB1cGRhdGVfZXh0ZW50X3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9taWdyYXRlLmMtODEtXHQgKi9cbmZzL2V4dDQvbWlncmF0ZS5jOjgyOlx0cmV0dmFsID0gZmluaXNoX3JhbmdlKGhhbmRsZSwgaW5vZGUsIGxiKTtcbmZzL2V4dDQvbWlncmF0ZS5jLTgzLVx0bGItXHUwMDNlZmlyc3RfcGJsb2NrID0gbGItXHUwMDNlbGFzdF9wYmxvY2sgPSBwYmxvY2s7XG4tLVxuZnMvZXh0NC9taWdyYXRlLmM9NDA5PWludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9taWdyYXRlLmMtNTQ5LVx0ICovXG5mcy9leHQ0L21pZ3JhdGUuYzo1NTA6XHRyZXR2YWwgPSBmaW5pc2hfcmFuZ2UoaGFuZGxlLCB0bXBfaW5vZGUsIFx1MDAyNmxiKTtcbmZzL2V4dDQvbWlncmF0ZS5jLTU1MS1lcnJfb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjUwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBmaW5pc2hfcmFuZ2VgIGFuZCBgZXh0NF9leHRfbWlncmF0ZWAgZm9yIFN5bWJvbCBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYGZpbmlzaF9yYW5nZWAgYW5kIGBleHQ0X2V4dF9taWdyYXRlYCBhcmUgdXNlZCwgc3BlY2lmaWNhbGx5IGZvciBzeW1ib2wgY292ZXJhZ2UgcHVycG9zZXMuIEkgc2VlIHRoYXQgYGZpbmlzaF9yYW5nZWAgZ2V0cyBjYWxsZWQgd2l0aGluIGB1cGRhdGVfZXh0ZW50X3JhbmdlYCwgYW5kIGFsc28gZGlyZWN0bHkgd2l0aGluIGBleHQ0X2V4dF9taWdyYXRlYC4gYHVwZGF0ZV9leHRlbnRfcmFuZ2VgLCBpbiB0dXJuLCBpcyBwYXJ0IG9mIHRoZSBpbmRpcmVjdC10by1leHRlbnQgbWlncmF0aW9uIHByb2Nlc3MsIHdoaWNoIG1lYW5zIGBleHQ0X2V4dF9taWdyYXRlYCB1bHRpbWF0ZWx5IHRyaWdnZXJzIGl0LgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciBgZmluaXNoX3JhbmdlYCBpcyBhIHZpYWJsZSBzeW1ib2wgdGFyZ2V0LiBJJiMzOTt2ZSBjb25maXJtZWQgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGRlZmluZWQgaW4gYG1pZ3JhdGUuY2AuIFRoZSBjaGFsbGVuZ2Ugd2l0aCBzdGF0aWMgZnVuY3Rpb25zIGlzLCBjb3VsZCB0aGV5IGJlIGlubGluZWQ/IEJhc2VkIG9uIFNlY3Rpb24gNCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBJIHJlY2FsbCwgd2hpY2ggc3RhdGVzIHRoYXQgY29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgYW5kIHRodXMgY2FuJiMzOTt0IGJlIGRpcmVjdGx5IHRhcmdldGVkLiBIb3dldmVyLCB3aGlsZSBgZmluaXNoX3JhbmdlYCAqbWlnaHQqIGJlIGlubGluZWQsIGBleHQ0X2V4dF9taWdyYXRlYCBpcyBkZWZpbml0ZWx5IGEgbm9uLXN0YXRpYyBzeW1ib2wsIGFuZCBzbyBpcyBwZXJmZWN0bHkgZmluZS4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBmaW5pc2hfcmFuZ2VgLCBhcyBJIGNhbiYjMzk7dCBiZSBzdXJlIGl0IGlzIGlubGluZWQgb3Igbm90LgoKVGhlcmVmb3JlLCBmb3Igc3ltYm9sIGNvdmVyYWdlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGluY2x1ZGluZyBib3RoIGBmaW5pc2hfcmFuZ2VgIGFuZCBgZXh0NF9leHRfbWlncmF0ZWAgaXMgdGhlIHdheSB0byBnby4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgRW5hYmxlQ29uZmlncy4gSSYjMzk7bSByZWFzb25hYmx5IGNlcnRhaW4gdGhhdCBgRVhUNF9GU2AgaXMgcmVsZXZhbnQsIGJ1dCBJIG5lZWQgdG8gYmUgMTAwJSBzdXJlLiBJIHNob3VsZCBhbHNvIGRvdWJsZSBjaGVjayB0aGUgYGZzL2V4dDQvS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBpbXBvcnRhbnQgZm9yIGV4dDQgbWlncmF0aW9uLiBUaGlzIHdpbGwgcHJvdmlkZSBmdXJ0aGVyIGNvbnRleHQgZm9yIG15IGFuYWx5c2lzIGFuZCBlbnN1cmUgZnVsbCBjb3ZlcmFnZSBvZiB0aGUgcmVsZXZhbnQgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgRVhUNF9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNTpcdFx0c2VsZWN0IEpCRDJcbiAgIDY6XHRcdHNlbGVjdCBDUkMxNlxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDk6XHRcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxuICAxNDpcdFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXG4gIDE1Olx0XHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcbiAgMTY6XHRcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXG4gIDE3Olx0XHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxuICAxODpcdFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcbiAgMTk6XHRcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxuICAyMDpcdFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxuICAyMzpcdFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXG4gIDI0Olx0XHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XG4gIDI1Olx0XHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcbiAgMjY6XHRcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXG4gIDI3Olx0XHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXG4gIDI4Olx0XHQgIGNvbXBhdGlibGUuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcbiAgMzE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4gIDM2Olx0XHRib29sIFwmIzM0O1VzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDM4Olx0XHRkZXBlbmRzIG9uIEVYVDJfRlM9blxuICAzOTpcdFx0ZGVmYXVsdCB5XG4gIDQwOlx0XHRoZWxwXG4gIDQxOlx0XHQgIEFsbG93IHRoZSBleHQ0IGZpbGUgc3lzdGVtIGRyaXZlciBjb2RlIHRvIGJlIHVzZWQgZm9yIGV4dDJcbiAgNDI6XHRcdCAgZmlsZSBzeXN0ZW0gbW91bnRzLiAgVGhpcyBhbGxvd3MgdXNlcnMgdG8gcmVkdWNlIHRoZWlyXG4gIDQzOlx0XHQgIGNvbXBpbGVkIGtlcm5lbCBzaXplIGJ5IHVzaW5nIG9uZSBmaWxlIHN5c3RlbSBkcml2ZXIgZm9yXG4gIDQ0Olx0XHQgIGV4dDIsIGV4dDMsIGFuZCBleHQ0IGZpbGUgc3lzdGVtcy5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcbiAgNDc6XHRcdGJvb2wgXCYjMzQ7RXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDQ5Olx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDUwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNjgKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVYVDRfRlMgRnV6emluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBsYW5kc2NhcGUgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBoZXJlLiBNeSBmb2N1cyBzaG91bGQgYmUgc29sZWx5IG9uIGBFWFQ0X0ZTYCBhcyB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLiBMb29rcyBsaWtlIHRoZSB0YXJnZXQgc3ltYm9scyBJIG5lZWQgdG8gemVybyBpbiBvbiBhcmUgYGZpbmlzaF9yYW5nZWAgYW5kIGBleHQ0X2V4dF9taWdyYXRlYC4gUGVyZmVjdC4gVGhleSYjMzk7cmUgYm90aCBwcmltZSBjYW5kaWRhdGVzLiBUaGUgY29kZSBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgYFdvcnRoRnV6emluZzogdHJ1ZWAgZmxhZy4KClRoZSByZWFzb25pbmcmIzM5O3MgY2xlYXI6IHRoZSBwYXRjaCBpcyBmaWRkbGluZyB3aXRoIGVycm9yIGFuZCByZXR1cm4gdmFsdWUgaGFuZGxpbmcgd2l0aGluIGBmaW5pc2hfcmFuZ2UoKWAsIHdoaWNoIGxpdmVzIGluIGBmcy9leHQ0L21pZ3JhdGUuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGllZCB0byBleHQ0JiMzOTtzIGJsb2NrLXRvLWV4dGVudHMgZmlsZSBtaWdyYXRpb24gcHJvY2Vzcywga2lja2VkIG9mZiBieSB0aGUgYEVYVDRfSU9DX01JR1JBVEVgIGlvY3RsLiBHb29kIG5ld3MgaXMgdGhhdCBpdCYjMzk7cyByZWFjaGFibGUgaW4gY29tbW9uIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cy4KCkFscmlnaHQsIHRpbWUgdG8gZmVlZCB0aGVzZSB2YWx1ZXMgaW50byBgc2V0LXJlc3VsdHNgLiBMZXQmIzM5O3MgZ2V0IHRoaXMgcm9sbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaW5pc2hfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfbWlncmF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGFuZCByZXR1cm4gdmFsdWUgcHJvcGFnYXRpb24gdXNpbmcgUFRSX0VSUl9PUl9aRVJPIGluIGV4dDQmIzM5O3MgZmluaXNoX3JhbmdlKCkgaW4gZnMvZXh0NC9taWdyYXRlLmMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgZXh0NCYjMzk7cyBleHRlbnQgbWlncmF0aW9uIG1lY2hhbmlzbSwgYWNjZXNzaWJsZSB2aWEgaW9jdGxzIChlLmcuLCBFWFQ0X0lPQ19NSUdSQVRFKS4gU2luY2UgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGlzIG1vZGlmaWVkLCBmdXp6aW5nIGlzIHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpbmlzaF9yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9taWdyYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgYW5kIHJldHVybiB2YWx1ZSBwcm9wYWdhdGlvbiB1c2luZyBQVFJfRVJSX09SX1pFUk8gaW4gZXh0NCYjMzk7cyBmaW5pc2hfcmFuZ2UoKSBpbiBmcy9leHQ0L21pZ3JhdGUuYy4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiBleHQ0JiMzOTtzIGV4dGVudCBtaWdyYXRpb24gbWVjaGFuaXNtLCBhY2Nlc3NpYmxlIHZpYSBpb2N0bHMgKGUuZy4sIEVYVDRfSU9DX01JR1JBVEUpLiBTaW5jZSByZWFjaGFibGUga2VybmVsIGNvZGUgaXMgbW9kaWZpZWQsIGZ1enppbmcgaXMgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyBlcnJvciBjb2RlIGFzc2lnbm1lbnQgaW4gZXh0NCYjMzk7cyBmaW5pc2hfcmFuZ2UoKSBmdW5jdGlvbiBieSByZXBsYWNpbmcgYGlmIChJU19FUlIocGF0aCkpIHJldHZhbCA9IFBUUl9FUlIocGF0aCk7YCB3aXRoIGByZXR2YWwgPSBQVFJfRVJSX09SX1pFUk8ocGF0aClgLiBUaGlzIGlzIGEgcHVyZWx5IGNvc21ldGljIHJlZmFjdG9yaW5nIHRoYXQgbW9kaWZpZXMgYSBzY2FsYXIgcmV0dXJuIGNvZGUgdmFyaWFibGUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBhY2Nlc3MgdW5pbml0aWFsaXplZCBkYXRhLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50OyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMTI0MDg2NWExZWJhYWQ3YmI0MzhhMGQyYzZiNjc2NTg2ZmNmOTZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAwNDozNjoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWlncmF0ZS5jIGIvZnMvZXh0NC9taWdyYXRlLmMKaW5kZXggNWQ2MGVmMTBmZTExMC4uZDQ2N2I1YTEzYzYyZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9taWdyYXRlLmMKQEAgLTUzLDggJiM0Mzs1Myw3IEBAIHN0YXRpYyBpbnQgZmluaXNoX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJaWYgKHJldHZhbCAmbHQ7IDApCiAJCWdvdG8gZXJyX291dDsKIAlwYXRoID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmYW1wO25ld2V4dCwgMCk7Ci0JaWYgKElTX0VSUihwYXRoKSkKLQkJcmV0dmFsID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpOwogZXJyX291dDoKIAl1cF93cml0ZSgoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX2RhdGFfc2VtKSk7CiAJZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuCgoqKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIEZvY3VzZWQgQXBwcm9hY2gqKgoKQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggd2l0aCBwcmVjaXNpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgd2l0aGluIHRoZSBgZnMvZXh0NGAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtaWdyYXRlLmNgLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyB1c2Ugb3VyIGZhbWlsaWFyIHRvb2xzLiYjMzQ7IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGZzL2V4dDQvbWlncmF0ZS5jYCwgYW5kIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcHVsbGluZyB1cCB0aGUgZmlsZS4gSSB3YW50IHRvIHF1aWNrbHkgemVybyBpbiBvbiBhcm91bmQgbGluZSA1MyB1c2luZyBgcmVhZC1maWxlYCBhbmQgaW5zcGVjdCB0aGF0IGFyZWEgZGlyZWN0bHkuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBxdWlja2VzdCBzZW5zZSBvZiB0aGUgbG9jYWwgY2hhbmdlcyBoZXJlLiBUaGlzIHdpbGwgbGV0IG1lIHF1aWNrbHkgZ3Jhc3AgdGhlIGxvY2FsIGNvbnRleHQgYmVmb3JlIGdvaW5nIHdpZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvbWlncmF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMVxuICAgMjpcdC8qXG4gICAzOlx0ICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMjAwN1xuICAgNDpcdCAqIEF1dGhvciBBbmVlc2ggS3VtYXIgSy5WIFx1MDAzY2FuZWVzaC5rdW1hckBsaW51eC52bmV0LmlibS5jb21cdTAwM2VcbiAgIDU6XHQgKlxuICAgNjpcdCAqL1xuICAgNzpcdFxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFwmIzM0O2V4dDRfamJkMi5oXCYjMzQ7XG4gIDEwOlx0I2luY2x1ZGUgXCYjMzQ7ZXh0NF9leHRlbnRzLmhcJiMzNDtcbiAgMTE6XHRcbiAgMTI6XHQvKlxuICAxMzpcdCAqIFRoZSBjb250aWd1b3VzIGJsb2NrcyBkZXRhaWxzIHdoaWNoIGNhbiBiZVxuICAxNDpcdCAqIHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGV4dGVudFxuICAxNTpcdCAqL1xuICAxNjpcdHN0cnVjdCBtaWdyYXRlX3N0cnVjdCB7XG4gIDE3Olx0XHRleHQ0X2xibGtfdCBmaXJzdF9ibG9jaywgbGFzdF9ibG9jaywgY3Vycl9ibG9jaztcbiAgMTg6XHRcdGV4dDRfZnNibGtfdCBmaXJzdF9wYmxvY2ssIGxhc3RfcGJsb2NrO1xuICAxOTpcdH07XG4gIDIwOlx0XG4gIDIxOlx0c3RhdGljIGludCBmaW5pc2hfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgMjI6XHRcdFx0XHRcdHN0cnVjdCBtaWdyYXRlX3N0cnVjdCAqbGIpXG4gIDIzOlx0XG4gIDI0Olx0e1xuICAyNTpcdFx0aW50IHJldHZhbCA9IDAsIG5lZWRlZDtcbiAgMjY6XHRcdHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleHQ7XG4gIDI3Olx0XHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aDtcbiAgMjg6XHRcdGlmIChsYi1cdTAwM2VmaXJzdF9wYmxvY2sgPT0gMClcbiAgMjk6XHRcdFx0cmV0dXJuIDA7XG4gIDMwOlx0XG4gIDMxOlx0XHQvKiBBZGQgdGhlIGV4dGVudCB0byB0ZW1wIGlub2RlKi9cbiAgMzI6XHRcdG5ld2V4dC5lZV9ibG9jayA9IGNwdV90b19sZTMyKGxiLVx1MDAzZWZpcnN0X2Jsb2NrKTtcbiAgMzM6XHRcdG5ld2V4dC5lZV9sZW4gICA9IGNwdV90b19sZTE2KGxiLVx1MDAzZWxhc3RfYmxvY2sgLSBsYi1cdTAwM2VmaXJzdF9ibG9jayAmIzQzOyAxKTtcbiAgMzQ6XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleHQsIGxiLVx1MDAzZWZpcnN0X3BibG9jayk7XG4gIDM1Olx0XHQvKiBMb2NraW5nIG9ubHkgZm9yIGNvbnZlbmllbmNlIHNpbmNlIHdlIGFyZSBvcGVyYXRpbmcgb24gdGVtcCBpbm9kZSAqL1xuICAzNjpcdFx0ZG93bl93cml0ZShcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YV9zZW0pO1xuICAzNzpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGxiLVx1MDAzZWZpcnN0X2Jsb2NrLCBOVUxMLCAwKTtcbiAgMzg6XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbiAgMzk6XHRcdFx0cmV0dmFsID0gUFRSX0VSUihwYXRoKTtcbiAgNDA6XHRcdFx0Z290byBlcnJfb3V0O1xuICA0MTpcdFx0fVxuICA0MjpcdFxuICA0MzpcdFx0LypcbiAgNDQ6XHRcdCAqIENhbGN1bGF0ZSB0aGUgY3JlZGl0IG5lZWRlZCB0byBpbnNlcnRpbmcgdGhpcyBleHRlbnRcbiAgNDU6XHRcdCAqIFNpbmNlIHdlIGFyZSBkb2luZyB0aGlzIGluIGxvb3Agd2UgbWF5IGFjY3VtdWxhdGUgZXh0cmFcbiAgNDY6XHRcdCAqIGNyZWRpdC4gQnV0IGJlbG93IHdlIHRyeSB0byBub3QgYWNjdW11bGF0ZSB0b28gbXVjaFxuICA0NzpcdFx0ICogb2YgdGhlbSBieSByZXN0YXJ0aW5nIHRoZSBqb3VybmFsLlxuICA0ODpcdFx0ICovXG4gIDQ5Olx0XHRuZWVkZWQgPSBleHQ0X2V4dF9jYWxjX2NyZWRpdHNfZm9yX3NpbmdsZV9leHRlbnQoaW5vZGUsXG4gIDUwOlx0XHRcdCAgICBsYi1cdTAwM2VsYXN0X2Jsb2NrIC0gbGItXHUwMDNlZmlyc3RfYmxvY2sgJiM0MzsgMSwgcGF0aCk7XG4gIDUxOlx0XG4gIDUyOlx0XHRyZXR2YWwgPSBleHQ0X2RhdGFzZW1fZW5zdXJlX2NyZWRpdHMoaGFuZGxlLCBpbm9kZSwgbmVlZGVkLCBuZWVkZWQsIDApO1xuICA1MzpcdFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiAgNTQ6XHRcdFx0Z290byBlcnJfb3V0O1xuICA1NTpcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXh0LCAwKTtcbiAgNTY6XHRcdHJldHZhbCA9IFBUUl9FUlJfT1JfWkVSTyhwYXRoKTtcbiAgNTc6XHRlcnJfb3V0OlxuICA1ODpcdFx0dXBfd3JpdGUoKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9kYXRhX3NlbSkpO1xuICA1OTpcdFx0ZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpO1xuICA2MDpcdFx0bGItXHUwMDNlZmlyc3RfcGJsb2NrID0gMDtcbiAgNjE6XHRcdHJldHVybiByZXR2YWw7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdHN0YXRpYyBpbnQgdXBkYXRlX2V4dGVudF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICA2NTpcdFx0XHRcdCAgICAgICBleHQ0X2ZzYmxrX3QgcGJsb2NrLCBzdHJ1Y3QgbWlncmF0ZV9zdHJ1Y3QgKmxiKVxuICA2NjpcdHtcbiAgNjc6XHRcdGludCByZXR2YWw7XG4gIDY4Olx0XHQvKlxuICA2OTpcdFx0ICogU2VlIGlmIHdlIGNhbiBhZGQgb24gdG8gdGhlIGV4aXN0aW5nIHJhbmdlIChpZiBpdCBleGlzdHMpXG4gIDcwOlx0XHQgKi9cbiAgNzE6XHRcdGlmIChsYi1cdTAwM2VmaXJzdF9wYmxvY2sgXHUwMDI2XHUwMDI2XG4gIDcyOlx0XHRcdChsYi1cdTAwM2VsYXN0X3BibG9jayYjNDM7MSA9PSBwYmxvY2spIFx1MDAyNlx1MDAyNlxuICA3MzpcdFx0XHQobGItXHUwMDNlbGFzdF9ibG9jayYjNDM7MSA9PSBsYi1cdTAwM2VjdXJyX2Jsb2NrKSkge1xuICA3NDpcdFx0XHRsYi1cdTAwM2VsYXN0X3BibG9jayA9IHBibG9jaztcbiAgNzU6XHRcdFx0bGItXHUwMDNlbGFzdF9ibG9jayA9IGxiLVx1MDAzZWN1cnJfYmxvY2s7XG4gIDc2Olx0XHRcdGxiLVx1MDAzZWN1cnJfYmxvY2smIzQzOyYjNDM7O1xuICA3NzpcdFx0XHRyZXR1cm4gMDtcbiAgNzg6XHRcdH1cbiAgNzk6XHRcdC8qXG4gIDgwOlx0XHQgKiBTdGFydCBhIG5ldyByYW5nZS5cbiAgODE6XHRcdCAqL1xuICA4MjpcdFx0cmV0dmFsID0gZmluaXNoX3JhbmdlKGhhbmRsZSwgaW5vZGUsIGxiKTtcbiAgODM6XHRcdGxiLVx1MDAzZWZpcnN0X3BibG9jayA9IGxiLVx1MDAzZWxhc3RfcGJsb2NrID0gcGJsb2NrO1xuICA4NDpcdFx0bGItXHUwMDNlZmlyc3RfYmxvY2sgPSBsYi1cdTAwM2VsYXN0X2Jsb2NrID0gbGItXHUwMDNlY3Vycl9ibG9jaztcbiAgODU6XHRcdGxiLVx1MDAzZWN1cnJfYmxvY2smIzQzOyYjNDM7O1xuICA4NjpcdFx0cmV0dXJuIHJldHZhbDtcbiAgODc6XHR9XG4gIDg4Olx0XG4gIDg5Olx0c3RhdGljIGludCB1cGRhdGVfaW5kX2V4dGVudF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICA5MDpcdFx0XHRcdFx0ICAgZXh0NF9mc2Jsa190IHBibG9jayxcbiAgOTE6XHRcdFx0XHRcdCAgIHN0cnVjdCBtaWdyYXRlX3N0cnVjdCAqbGIpXG4gIDkyOlx0e1xuICA5MzpcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiAgOTQ6XHRcdF9fbGUzMiAqaV9kYXRhO1xuICA5NTpcdFx0aW50IGksIHJldHZhbCA9IDA7XG4gIDk2Olx0XHR1bnNpZ25lZCBsb25nIG1heF9lbnRyaWVzID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSBcdTAwM2VcdTAwM2UgMjtcbiAgOTc6XHRcbiAgOTg6XHRcdGJoID0gZXh0NF9zYl9icmVhZChpbm9kZS1cdTAwM2VpX3NiLCBwYmxvY2ssIDApO1xuICA5OTpcdFx0aWYgKElTX0VSUihiaCkpXG4gMTAwOlx0XHRcdHJldHVybiBQVFJfRVJSKGJoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyOQoJCQkJCQkJb3V0cHV0OiAxNDIKCQkJCQkJCXRob3VnaHRzOiA3MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29kZSBDbGVhbnVwIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiBzdHJlYW1saW5pbmcgdGhlIGBmaW5pc2hfcmFuZ2VgIGZ1bmN0aW9uIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVwbGFjaW5nIGEgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB3aXRoIHRoZSBgUFRSX0VSUl9PUl9aRVJPYCBtYWNyby4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoZSBwcmlvciBpbXBsZW1lbnRhdGlvbiBoYWQgc29tZSByZWR1bmRhbmN5LiBgcmV0dmFsYCB3YXMgZ2V0dGluZyBhc3NpZ25lZCBhIHZhbHVlIGZyb20gYSBmdW5jdGlvbiAoYGV4dDRfZGF0YXNlbV9lbnN1cmVfY3JlZGl0cyguLi4pYCAtIHdoaWNoLCBpbXBvcnRhbnRseSwgcmV0dXJuZWQgMCBvciBhIG5lZ2F0aXZlIGVycm9yKSwgYnV0IHRoZW4gaXQgY291bGQgYmUgb3ZlcndyaXR0ZW4gYmFzZWQgb24gdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAuIE5vdywgYFBUUl9FUlJfT1JfWkVSTyhwYXRoKWAgZWZmZWN0aXZlbHkgY29uc29saWRhdGVzIHRoYXQgbG9naWMuIElmIGBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50YCByZXR1cm5zIGFuIGVycm9yIHBvaW50ZXIgKGBJU19FUlIocGF0aClgIGlzIHRydWUpLCBgcmV0dmFsYCBiZWNvbWVzIHRoYXQgZXJyb3IuIElmIGl0IHN1Y2NlZWRzIChyZXR1cm5zIGEgdmFsaWQgcG9pbnRlciwgYElTX0VSUihwYXRoKWAgaXMgZmFsc2UpLCBgcmV0dmFsYCBiZWNvbWVzIHplcm8uIEl0JiMzOTtzIGEgY2xlYW4sIGVmZmljaWVudCB3YXkgdG8gaGFuZGxlIHRoZSBlcnJvciBjaGVja2luZy4KClRoZSBtYWluIGNvbmNlcm4gaW4gYSBjb2RlIGNoYW5nZSBsaWtlIHRoaXMgaXMgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMsIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkYXRhIGxlYWtzLCBvciBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgZnV6emVycyBsaWtlIEtBU0FOIG9yIEtNU0FOIG1pZ2h0IGZsYWcuCgpIb3dldmVyLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIGEgc2FmZSBzaW1wbGlmaWNhdGlvbi4gYHJldHZhbGAgaXMgYW4gaW50ZWdlciwgc28gdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBkaXJlY3RseSBmcm9tIHRoYXQgdmFyaWFibGUuIGBwYXRoYCBpcyBhIHBvaW50ZXIgcmV0dXJuZWQgYnkgd2VsbC1kZWZpbmVkIGFsbG9jYXRpb24gb3IgcmV0cmlldmFsIGZ1bmN0aW9ucyAoYGV4dDRfZXh0X2luc2VydF9leHRlbnRgLCBgZXh0NF9maW5kX2V4dGVudGApIGFuZCBwcm9wZXJseSBmcmVlZCAoYGV4dDRfZnJlZV9leHRfcGF0aGAgaGFuZGxlcyBib3RoIHZhbGlkIHBvaW50ZXJzIGFuZCBlcnJvciBwb2ludGVycy9OVUxMKS4KCkkmIzM5O3ZlIGFsc28gY29uc2lkZXJlZCBhbnkgS01TQU4tc3BlY2lmaWMgY29uY2VybnMuIEtNU0FOIGZvY3VzZXMgb24ga2VybmVsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgY29uZmxpY3RpbmcgYWNjZXNzZXMuIEhvd2V2ZXIsIGluIHRoaXMgcGF0Y2gsIHRoZSBtZW1vcnkgaGFuZGxpbmcgaXMgdmVyeSBzdHJhaWdodGZvcndhcmQgYW5kIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgc28gS01TQU4gc2hvdWxkIG5vdCBiZSB0cmlnZ2VyZWQgaGVyZS4gVGhlIGNsZWFudXAgc2VlbXMgdG8gYWZmZWN0IG9ubHkgY29udHJvbCBmbG93IGJhc2VkIG9uIGVycm9yIGNoZWNraW5nLiBUaGUgY29kZSBpcyBvbmx5IHNpbXBsaWZ5aW5nIGFuIGFzc2lnbm1lbnQgb2YgYSBwYXRoIGJhc2VkIG9uIGl0cyB2YWxpZGl0eSB1c2luZyBhbiBleGlzdGluZyBmdW5jdGlvbiwgc28gdGhhdCBpcyBzYWZlLgoKVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjbGVhbnVwLCBhbmQgaXMgc2FmZSBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gVGhlcmUgYXJlIG5vIEtNU0FOIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGNvZGUgYXNzaWdubWVudCBpbiBleHQ0JiMzOTtzIGZpbmlzaF9yYW5nZSgpIGZ1bmN0aW9uIGJ5IHJlcGxhY2luZyBgaWYgKElTX0VSUihwYXRoKSkgcmV0dmFsID0gUFRSX0VSUihwYXRoKTtgIHdpdGggYHJldHZhbCA9IFBUUl9FUlJfT1JfWkVSTyhwYXRoKWAuIFRoaXMgaXMgYSBwdXJlbHkgY29zbWV0aWMgcmVmYWN0b3JpbmcgdGhhdCBtb2RpZmllcyBhIHNjYWxhciByZXR1cm4gY29kZSB2YXJpYWJsZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGFjY2VzcyB1bmluaXRpYWxpemVkIGRhdGEuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQ7IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgY29kZSBhc3NpZ25tZW50IGluIGV4dDQmIzM5O3MgZmluaXNoX3JhbmdlKCkgZnVuY3Rpb24gYnkgcmVwbGFjaW5nIGBpZiAoSVNfRVJSKHBhdGgpKSByZXR2YWwgPSBQVFJfRVJSKHBhdGgpO2Agd2l0aCBgcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyByZWZhY3RvcmluZyB0aGF0IG1vZGlmaWVzIGEgc2NhbGFyIHJldHVybiBjb2RlIHZhcmlhYmxlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjoxNi44ODY3NjA2NjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzcyMzA2NTI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmluaXNoX3JhbmdlXCIsXG4gICAgXCJleHQ0X2V4dF9taWdyYXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGNvZGUgYXNzaWdubWVudCBpbiBleHQ0J3MgZmluaXNoX3JhbmdlKCkgZnVuY3Rpb24gYnkgcmVwbGFjaW5nIGBpZiAoSVNfRVJSKHBhdGgpKSByZXR2YWwgPSBQVFJfRVJSKHBhdGgpO2Agd2l0aCBgcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyByZWZhY3RvcmluZyB0aGF0IG1vZGlmaWVzIGEgc2NhbGFyIHJldHVybiBjb2RlIHZhcmlhYmxlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgYW5kIHJldHVybiB2YWx1ZSBwcm9wYWdhdGlvbiB1c2luZyBQVFJfRVJSX09SX1pFUk8gaW4gZXh0NCdzIGZpbmlzaF9yYW5nZSgpIGluIGZzL2V4dDQvbWlncmF0ZS5jLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIGV4dDQncyBleHRlbnQgbWlncmF0aW9uIG1lY2hhbmlzbSwgYWNjZXNzaWJsZSB2aWEgaW9jdGxzIChlLmcuLCBFWFQ0X0lPQ19NSUdSQVRFKS4gU2luY2UgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGlzIG1vZGlmaWVkLCBmdXp6aW5nIGlzIHdhcnJhbnRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6MTYuODg2NzY4MjIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE2Mzk1OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjEyNDA4NjVhMWViYWFkN2JiNDM4YTBkMmM2YjY3NjU4NmZjZjk2ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM2OjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWlncmF0ZS5jIGIvZnMvZXh0NC9taWdyYXRlLmNcXG5pbmRleCA1ZDYwZWYxMGZlMTEwLi5kNDY3YjVhMTNjNjJlIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jXFxuKysrIGIvZnMvZXh0NC9taWdyYXRlLmNcXG5AQCAtNTMsOCArNTMsNyBAQCBzdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXHRwYXRoID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBcXHUwMDI2bmV3ZXh0LCAwKTtcXG4tXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tXFx0XFx0cmV0dmFsID0gUFRSX0VSUihwYXRoKTtcXG4rXFx0cmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpO1xcbiBlcnJfb3V0OlxcbiBcXHR1cF93cml0ZSgoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZGF0YV9zZW0pKTtcXG4gXFx0ZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjoxOC40MDQwNjE0NjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxNzU3MDAzNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaW5pc2hfcmFuZ2VcIixcbiAgICBcImV4dDRfZXh0X21pZ3JhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGFuZCByZXR1cm4gdmFsdWUgcHJvcGFnYXRpb24gdXNpbmcgUFRSX0VSUl9PUl9aRVJPIGluIGV4dDQncyBmaW5pc2hfcmFuZ2UoKSBpbiBmcy9leHQ0L21pZ3JhdGUuYy4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiBleHQ0J3MgZXh0ZW50IG1pZ3JhdGlvbiBtZWNoYW5pc20sIGFjY2Vzc2libGUgdmlhIGlvY3RscyAoZS5nLiwgRVhUNF9JT0NfTUlHUkFURSkuIFNpbmNlIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBpcyBtb2RpZmllZCwgZnV6emluZyBpcyB3YXJyYW50ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjEyNDA4NjVhMWViYWFkN2JiNDM4YTBkMmM2YjY3NjU4NmZjZjk2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDQ6MzY6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jXG5pbmRleCA1ZDYwZWYxMGZlMTEwLi5kNDY3YjVhMTNjNjJlIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9taWdyYXRlLmNcbisrKyBiL2ZzL2V4dDQvbWlncmF0ZS5jXG5AQCAtNTMsOCArNTMsNyBAQCBzdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfb3V0O1xuIFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXh0LCAwKTtcbi1cdGlmIChJU19FUlIocGF0aCkpXG4tXHRcdHJldHZhbCA9IFBUUl9FUlIocGF0aCk7XG4rXHRyZXR2YWwgPSBQVFJfRVJSX09SX1pFUk8ocGF0aCk7XG4gZXJyX291dDpcbiBcdHVwX3dyaXRlKChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YV9zZW0pKTtcbiBcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjE4LjQwNDA2Mzc1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MTk5MDU2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IE1pZ3JhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBpdHMgaW5zdHJ1Y3Rpb25zLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRoZSBkaWZmLCBvZiBjb3Vyc2UuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZSBjaGFuZ2UgaW4gYGZzL2V4dDQvbWlncmF0ZS5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGZpbmlzaF9yYW5nZWAgZnVuY3Rpb24uIEludGVyZXN0aW5nLCB0aGV5J3ZlIHJlcGxhY2VkIHRoZSBkaXJlY3QgY2hlY2sgZm9yIGFuIGVycm9yIHdpdGggYElTX0VSUihwYXRoKWAgYW5kIHRoZSBzdWJzZXF1ZW50IGFzc2lnbm1lbnQgb2YgYHJldHZhbGAgd2l0aCBhIG1vcmUgY29uY2lzZSBgcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gVGhpcyBpcyBjb21tb247IGl0J3MgbGlrZWx5IGEgc2ltcGxpZmljYXRpb24gdG8gaGFuZGxlIHRoZSBlcnJvciByZXR1cm4gZnJvbSBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAuIE5vIGJpZyBkZWFsIGF0IHRoaXMgcG9pbnQuXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgY29udGV4dC4gSSdsbCBxdWlja2x5IGxvb2sgdXAgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGZzL2V4dDQvbWlncmF0ZS5jYCwgcHJvYmFibHkgYXJvdW5kIGxpbmUgNTMsIHRvIGdyYXNwIHdoYXQgYGZpbmlzaF9yYW5nZWAgaXMgKmRvaW5nKiBhbmQsIGNyaXRpY2FsbHksIHdobydzIGNhbGxpbmcgaXQuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBjbGFyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIHRvIGNvbnNpZGVyLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBlcnJvciBoYW5kbGluZyBpcyBzdGlsbCBjb3JyZWN0IGFuZCB0aGF0IG5vIGluZm9ybWF0aW9uIGlzIGJlaW5nIGxvc3Qgd2l0aCB0aGlzIGNoYW5nZS4gSXQgd291bGQgYWxzbyBiZSBnb29kIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIHVzZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgYXNzdW1wdGlvbnMgaXQgbWFrZXMuIEkgc2hvdWxkIGFsc28gaW52ZXN0aWdhdGUgd2hldGhlciB0aGlzIGNoYW5nZSBhbHNvIGV4aXN0cyBpbiB0aGUgbGF0ZXN0IHJlbGVhc2VzIG9yIG5vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjIyLjAyMzk3MTg3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L21pZ3JhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXG4gIDMxOlxcdFxcdC8qIEFkZCB0aGUgZXh0ZW50IHRvIHRlbXAgaW5vZGUqL1xcbiAgMzI6XFx0XFx0bmV3ZXh0LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIobGItXFx1MDAzZWZpcnN0X2Jsb2NrKTtcXG4gIDMzOlxcdFxcdG5ld2V4dC5lZV9sZW4gICA9IGNwdV90b19sZTE2KGxiLVxcdTAwM2VsYXN0X2Jsb2NrIC0gbGItXFx1MDAzZWZpcnN0X2Jsb2NrICsgMSk7XFxuICAzNDpcXHRcXHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXFx1MDAyNm5ld2V4dCwgbGItXFx1MDAzZWZpcnN0X3BibG9jayk7XFxuICAzNTpcXHRcXHQvKiBMb2NraW5nIG9ubHkgZm9yIGNvbnZlbmllbmNlIHNpbmNlIHdlIGFyZSBvcGVyYXRpbmcgb24gdGVtcCBpbm9kZSAqL1xcbiAgMzY6XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuICAzNzpcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgbGItXFx1MDAzZWZpcnN0X2Jsb2NrLCBOVUxMLCAwKTtcXG4gIDM4OlxcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG4gIDM5OlxcdFxcdFxcdHJldHZhbCA9IFBUUl9FUlIocGF0aCk7XFxuICA0MDpcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuICA0MTpcXHRcXHR9XFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdC8qXFxuICA0NDpcXHRcXHQgKiBDYWxjdWxhdGUgdGhlIGNyZWRpdCBuZWVkZWQgdG8gaW5zZXJ0aW5nIHRoaXMgZXh0ZW50XFxuICA0NTpcXHRcXHQgKiBTaW5jZSB3ZSBhcmUgZG9pbmcgdGhpcyBpbiBsb29wIHdlIG1heSBhY2N1bXVsYXRlIGV4dHJhXFxuICA0NjpcXHRcXHQgKiBjcmVkaXQuIEJ1dCBiZWxvdyB3ZSB0cnkgdG8gbm90IGFjY3VtdWxhdGUgdG9vIG11Y2hcXG4gIDQ3OlxcdFxcdCAqIG9mIHRoZW0gYnkgcmVzdGFydGluZyB0aGUgam91cm5hbC5cXG4gIDQ4OlxcdFxcdCAqL1xcbiAgNDk6XFx0XFx0bmVlZGVkID0gZXh0NF9leHRfY2FsY19jcmVkaXRzX2Zvcl9zaW5nbGVfZXh0ZW50KGlub2RlLFxcbiAgNTA6XFx0XFx0XFx0ICAgIGxiLVxcdTAwM2VsYXN0X2Jsb2NrIC0gbGItXFx1MDAzZWZpcnN0X2Jsb2NrICsgMSwgcGF0aCk7XFxuICA1MTpcXHRcXG4gIDUyOlxcdFxcdHJldHZhbCA9IGV4dDRfZGF0YXNlbV9lbnN1cmVfY3JlZGl0cyhoYW5kbGUsIGlub2RlLCBuZWVkZWQsIG5lZWRlZCwgMCk7XFxuICA1MzpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gIDU0OlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gIDU1OlxcdFxcdHBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIFxcdTAwMjZuZXdleHQsIDApO1xcbiAgNTY6XFx0XFx0cmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpO1xcbiAgNTc6XFx0ZXJyX291dDpcXG4gIDU4OlxcdFxcdHVwX3dyaXRlKChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhX3NlbSkpO1xcbiAgNTk6XFx0XFx0ZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpO1xcbiAgNjA6XFx0XFx0bGItXFx1MDAzZWZpcnN0X3BibG9jayA9IDA7XFxuICA2MTpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAgNjI6XFx0fVxcbiAgNjM6XFx0XFxuICA2NDpcXHRzdGF0aWMgaW50IHVwZGF0ZV9leHRlbnRfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gIDY1OlxcdFxcdFxcdFxcdCAgICAgICBleHQ0X2ZzYmxrX3QgcGJsb2NrLCBzdHJ1Y3QgbWlncmF0ZV9zdHJ1Y3QgKmxiKVxcbiAgNjY6XFx0e1xcbiAgNjc6XFx0XFx0aW50IHJldHZhbDtcXG4gIDY4OlxcdFxcdC8qXFxuICA2OTpcXHRcXHQgKiBTZWUgaWYgd2UgY2FuIGFkZCBvbiB0byB0aGUgZXhpc3RpbmcgcmFuZ2UgKGlmIGl0IGV4aXN0cylcXG4gIDcwOlxcdFxcdCAqL1xcbiAgNzE6XFx0XFx0aWYgKGxiLVxcdTAwM2VmaXJzdF9wYmxvY2sgXFx1MDAyNlxcdTAwMjZcXG4gIDcyOlxcdFxcdFxcdChsYi1cXHUwMDNlbGFzdF9wYmxvY2srMSA9PSBwYmxvY2spIFxcdTAwMjZcXHUwMDI2XFxuICA3MzpcXHRcXHRcXHQobGItXFx1MDAzZWxhc3RfYmxvY2srMSA9PSBsYi1cXHUwMDNlY3Vycl9ibG9jaykpIHtcXG4gIDc0OlxcdFxcdFxcdGxiLVxcdTAwM2VsYXN0X3BibG9jayA9IHBibG9jaztcXG4gIDc1OlxcdFxcdFxcdGxiLVxcdTAwM2VsYXN0X2Jsb2NrID0gbGItXFx1MDAzZWN1cnJfYmxvY2s7XFxuICA3NjpcXHRcXHRcXHRsYi1cXHUwMDNlY3Vycl9ibG9jaysrO1xcbiAgNzc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA3ODpcXHRcXHR9XFxuICA3OTpcXHRcXHQvKlxcbiAgODA6XFx0XFx0ICogU3RhcnQgYSBuZXcgcmFuZ2UuXFxuICA4MTpcXHRcXHQgKi9cXG4gIDgyOlxcdFxcdHJldHZhbCA9IGZpbmlzaF9yYW5nZShoYW5kbGUsIGlub2RlLCBsYik7XFxuICA4MzpcXHRcXHRsYi1cXHUwMDNlZmlyc3RfcGJsb2NrID0gbGItXFx1MDAzZWxhc3RfcGJsb2NrID0gcGJsb2NrO1xcbiAgODQ6XFx0XFx0bGItXFx1MDAzZWZpcnN0X2Jsb2NrID0gbGItXFx1MDAzZWxhc3RfYmxvY2sgPSBsYi1cXHUwMDNlY3Vycl9ibG9jaztcXG4gIDg1OlxcdFxcdGxiLVxcdTAwM2VjdXJyX2Jsb2NrKys7XFxuICA4NjpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAgODc6XFx0fVxcbiAgODg6XFx0XFxuICA4OTpcXHRzdGF0aWMgaW50IHVwZGF0ZV9pbmRfZXh0ZW50X3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuICA5MDpcXHRcXHRcXHRcXHRcXHQgICBleHQ0X2ZzYmxrX3QgcGJsb2NrLFxcbiAgOTE6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1pZ3JhdGVfc3RydWN0ICpsYilcXG4gIDkyOlxcdHtcXG4gIDkzOlxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuICA5NDpcXHRcXHRfX2xlMzIgKmlfZGF0YTtcXG4gIDk1OlxcdFxcdGludCBpLCByZXR2YWwgPSAwO1xcbiAgOTY6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfZW50cmllcyA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSBcXHUwMDNlXFx1MDAzZSAyO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHRiaCA9IGV4dDRfc2JfYnJlYWQoaW5vZGUtXFx1MDAzZWlfc2IsIHBibG9jaywgMCk7XFxuICA5OTpcXHRcXHRpZiAoSVNfRVJSKGJoKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6MjIuMDI0MTYyNTUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5MTcwOTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgYWN0aXZhdGlvbiBwYXRoIGZvciBgbWlncmF0ZS5jYCwgc3BlY2lmaWNhbGx5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgd2hlcmUgdGhpcyBjb2RlIGlzICphY3R1YWxseSogY2FsbGVkIGFuZCB3aGF0IHNldHRpbmdzIG1pZ2h0IHRyaWdnZXIgaXRzIHVzYWdlLiBTbywgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBzZWFyY2hpbmcgdGhlIGNvZGViYXNlIGZvciByZWZlcmVuY2VzIHRvIGBleHQ0X2V4dF9taWdyYXRlYCBvciBhbnkgcmVsYXRlZCBzeW1ib2xzIHdpdGhpbiB0aGUgYGZzL2V4dDQvbWlncmF0ZS5jYCBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCBmb3JtaW5nIGEgbWVudGFsIG1vZGVsIG9mIHdoZW4gYW5kIHdoeSBpdCdzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjI0LjMxNTg3NDgxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTUzNjk2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0LiptaWdyYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTMyNTQ9aW50IGV4dDRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKTtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTMyNTYtLyogbWlncmF0ZS5jICovXFxuZnMvZXh0NC9leHQ0Lmg6MzI1NzpleHRlcm4gaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICopO1xcbmZzL2V4dDQvZXh0NC5oOjMyNTg6ZXh0ZXJuIGludCBleHQ0X2luZF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oLTMyNTktXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmM9NTkwPXN0YXRpYyBpbnQgZXh0NF9pb2N0bF9zZXRmbGFncyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTcwNS1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0VYVEVOVFNfRkwpXFxuZnMvZXh0NC9pb2N0bC5jOjcwNjpcXHRcXHRcXHRlcnIgPSBleHQ0X2V4dF9taWdyYXRlKGlub2RlKTtcXG5mcy9leHQ0L2lvY3RsLmMtNzA3LVxcdFxcdGVsc2VcXG5mcy9leHQ0L2lvY3RsLmM6NzA4OlxcdFxcdFxcdGVyciA9IGV4dDRfaW5kX21pZ3JhdGUoaW5vZGUpO1xcbmZzL2V4dDQvaW9jdGwuYy03MDktXFx0fVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTE1Mzg9c3RhdGljIGxvbmcgX19leHQ0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy0xNzAxLVxcdFxcdGlub2RlX2xvY2soKGlub2RlKSk7XFxuZnMvZXh0NC9pb2N0bC5jOjE3MDI6XFx0XFx0ZXJyID0gZXh0NF9leHRfbWlncmF0ZShpbm9kZSk7XFxuZnMvZXh0NC9pb2N0bC5jLTE3MDMtXFx0XFx0aW5vZGVfdW5sb2NrKChpbm9kZSkpO1xcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmM9NjQ9c3RhdGljIGludCB1cGRhdGVfZXh0ZW50X3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9taWdyYXRlLmM6NjU6XFx0XFx0XFx0ICAgICAgIGV4dDRfZnNibGtfdCBwYmxvY2ssIHN0cnVjdCBtaWdyYXRlX3N0cnVjdCAqbGIpXFxuZnMvZXh0NC9taWdyYXRlLmMtNjYte1xcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmM9Mzg5PXN0YXRpYyBpbnQgZnJlZV9leHRfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jLTQwOC1cXG5mcy9leHQ0L21pZ3JhdGUuYzo0MDk6aW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L21pZ3JhdGUuYy00MTAte1xcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmMtNjAyLSAqL1xcbmZzL2V4dDQvbWlncmF0ZS5jOjYwMzppbnQgZXh0NF9pbmRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvbWlncmF0ZS5jLTYwNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjI0LjM5NTQxOTIyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjYyMDI0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgZXh0NCBNaWdyYXRpb24gQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucyBmb3IgYGZzL2V4dDQvbWlncmF0ZS5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGljaCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGl0IGdldHMgYnVpbHQuIFRoZSBgZnMvZXh0NC9NYWtlZmlsZWAgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhhdCBNYWtlZmlsZSBhbmQgZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbHMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciB0aGF0IG1pZ3JhdGlvbiBjb2RlIGlzIGFjdHVhbGx5IGluY2x1ZGVkIGluIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UuIFRoaXMgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGl0J3MgYSB0eXBpY2FsIGJ1aWxkIHN5c3RlbSBkZXBlbmRlbmN5IGxvb2t1cC4gSSdtIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIGxpa2UgYG9iai0kKENPTkZJR19FWFQ0X01JR1JBVElPTikgKz0gbWlncmF0ZS5vYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZW4gSSBjYW4gdHJhY2sgYmFjayB3aGF0IHNldHMgYENPTkZJR19FWFQ0X01JR1JBVElPTmAgdG8gc2VlIGlmIHRoZXJlIGlzIHNvbWUgb3RoZXIgdHJpZ2dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjI2LjQ2MTYyNDgxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE4OTQwODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtOS1cXHRcXHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEwOlxcdFxcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6MjYuNTczNTI1MzQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE0MTI1NDQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBPcmlnaW5zIG9mIGBtaWdyYXRlLm9gIGluIHRoZSBleHQ0IEZpbGVzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyBJJ3ZlIGVuY291bnRlcmVkIGBtaWdyYXRlLm9gIGFuZCwgYXMgYWx3YXlzLCB0aGUgZmlyc3QgdGhpbmcgSSBkbyBpcyBmaWd1cmUgb3V0IHdoZXJlIGl0IGNvbWVzIGZyb20uIEl0J3MgbGlzdGVkIHVuZGVyIGBleHQ0LXlgLCBtZWFuaW5nIGl0J3MgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgZXh0NCBtb2R1bGUsIGFzc3VtaW5nIHRoZSBleHQ0IG1vZHVsZSBpdHNlbGYgaXMgYmVpbmcgYnVpbHQuIE1ha2VzIHNlbnNlLiBOb3csIGBleHQ0LXlgIGluZGljYXRlcyB0aGF0IHRoZSBtb2R1bGUgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0VYVDRfRlNgIGlzIGVuYWJsZWQsIGFuZCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmb3IgZXh0NC4gSSBuZWVkIHRvIGNoZWNrIGBmcy9leHQ0L0tjb25maWdgIHRvIHNlZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGF0IHBhcnRpY3VsYXIgY29uZmlnIG9wdGlvbiBnZXRzIGVuYWJsZWQuIFRoZW4gSSdsbCBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBleGFjdGx5IHdoZW4gYG1pZ3JhdGUub2AgZW5kcyB1cCBpbiB0aGUgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjoyOC43MTQ3ODIxODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2OTE0NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjI4Ljc4MTcwNDEzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NzAzOTI4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgRVhUNCBGaWxlc3lzdGVtIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJcyB0aGlzIGNoYW5nZSBpbiBgZnMvZXh0NC9taWdyYXRlLmNgIHdvcnRoIGZ1enppbmc/IFRoZSBzdWJzeXN0ZW0gaXMgdGhlIEVYVDQgZmlsZXN5c3RlbSwgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGUgTGludXgga2VybmVsLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUcmlnZ2VyYWJsZSB2aWEgYEVYVDRfSU9DX01JR1JBVEVgIG9yIGBGU19JT0NfU0VURkxBR1NgIGlvY3RscyDigJMgdGhhdCdzIGFub3RoZXIgYWNjZXNzaWJpbGl0eSBjaGVjayBtYXJrLlxuXG5UaGUgbW9kaWZpY2F0aW9uIGl0c2VsZiBpcyB3aXRoaW4gdGhlIGBmaW5pc2hfcmFuZ2UoKWAgZnVuY3Rpb24uIFRoZSBjb2RlIHJlZmFjdG9yaW5nIGludm9sdmVzIHRoZSB3YXkgYHJldHZhbGAgaXMgaGFuZGxlZCBhZnRlciBhIGNhbGwgdG8gYGV4dDRfZXh0X2luc2VydF9leHRlbnQoKWAuIEJlZm9yZSwgYSBjb25kaXRpb25hbCBjaGVjayBgSVNfRVJSKHBhdGgpYCBkZXRlcm1pbmVkIHRoZSBmYXRlIG9mIGByZXR2YWxgLiBOb3csIGByZXR2YWxgIGlzIHNldCBkaXJlY3RseSB1c2luZyBgUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gQ3JpdGljYWxseSwgYHJldHZhbGAgd2FzIGluaXRpYWxpemVkIHRvIDAgcHJldmlvdXNseSAobGlrZWx5IGJ5IGEgY2FsbCB0byBgZXh0NF9kYXRhc2VtX2Vuc3VyZV9jcmVkaXRzYCB0aGF0IHByZWNlZGVkIGl0KSwgYW5kIGByZXR2YWxgIGJlY29tZXMgMCAqaWYgYW5kIG9ubHkgaWYqIGBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KClgIHJldHVybnMgYSB2YWxpZCBwb2ludGVyIChub24tZXJyb3IpLiBJZiBpdCAqZG9lcyogcmV0dXJuIGFuIGVycm9yIHBvaW50ZXIsIHRoZSBuZXcgaW1wbGVtZW50YXRpb24gbWltaWNzIHRoZSBwcmV2aW91cyBiZWhhdmlvci5cblxuVGhlIGNoYW5nZSBzZWVtcyBwdXJlbHkgYSByZWZhY3RvcmluZywgYSBjbGVhbnVwLiBCdXQsIGFjY29yZGluZyB0byBzZWN0aW9ucyAxIGFuZCAzLCBJIGNhbid0IGJsaW5kbHkgdHJ1c3QgYSBcInJlZmFjdG9yaW5nXCIgb3IgTkZDSSBjbGFpbSwgZXNwZWNpYWxseSB3aXRoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIFRoZSBydWxlIGlzIGNsZWFyOiAqSWYqIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuIEFuZCB0aGlzIGRlZmluaXRlbHkgdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBhIGNvcmUgc3Vic3lzdGVtLiBNb3Jlb3ZlciwgdGhlIHJlZmFjdG9yaW5nIGFmZmVjdHMgdGhlIGZsb3cgYnkgd2hpY2ggdGhlIHJlc3VsdCBvZiBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAgd2lsbCBiZSBoYW5kbGVkLCBhbmQgdGhpcyB0eXBlIG9mIHJlc3RydWN0dXJpbmcgb2YgdGhlIHJlYWNoYWJsZSBjb2RlIGlzIG1lbnRpb25lZCBzcGVjaWZpY2FsbHkgaW4gU2VjdGlvbiAzIGFzIG1lcml0aW5nIGEgZnV6emluZyBlZmZvcnQuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAuIFRoaXMgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBlbnRyeXBvaW50cyBhbmQgY2FsbCBjaGFpbnMuIEkgbmVlZCB0byBsb29rIGF0IGFsbCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbWlncmF0ZS5jYCBvciBlbnRyeXBvaW50cyBmb3IgdGhpcyBwYXRoLiBTcGVjaWZpY2FsbHksIEkgc2VlIGBleHQ0X2V4dF9taWdyYXRlYCBhbmQgYGV4dDRfaW5kX21pZ3JhdGVgIHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBUbyBiZSBleHRyYSBzdXJlLCBJIGFsc28gbmVlZCB0byB2ZXJpZnkgd2hhdCBpcyBjYWxsaW5nIGBmaW5pc2hfcmFuZ2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjAwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjMzLjY1MjEwMDI1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NDM0MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmlzaF9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L21pZ3JhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L21pZ3JhdGUuYz0xNj1zdHJ1Y3QgbWlncmF0ZV9zdHJ1Y3Qge1xcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmMtMjAtXFxuZnMvZXh0NC9taWdyYXRlLmM6MjE6c3RhdGljIGludCBmaW5pc2hfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L21pZ3JhdGUuYy0yMi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbWlncmF0ZV9zdHJ1Y3QgKmxiKVxcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmM9NjQ9c3RhdGljIGludCB1cGRhdGVfZXh0ZW50X3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L21pZ3JhdGUuYy04MS1cXHQgKi9cXG5mcy9leHQ0L21pZ3JhdGUuYzo4MjpcXHRyZXR2YWwgPSBmaW5pc2hfcmFuZ2UoaGFuZGxlLCBpbm9kZSwgbGIpO1xcbmZzL2V4dDQvbWlncmF0ZS5jLTgzLVxcdGxiLVxcdTAwM2VmaXJzdF9wYmxvY2sgPSBsYi1cXHUwMDNlbGFzdF9wYmxvY2sgPSBwYmxvY2s7XFxuLS1cXG5mcy9leHQ0L21pZ3JhdGUuYz00MDk9aW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jLTU0OS1cXHQgKi9cXG5mcy9leHQ0L21pZ3JhdGUuYzo1NTA6XFx0cmV0dmFsID0gZmluaXNoX3JhbmdlKGhhbmRsZSwgdG1wX2lub2RlLCBcXHUwMDI2bGIpO1xcbmZzL2V4dDQvbWlncmF0ZS5jLTU1MS1lcnJfb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjozMy43NjY1MzkwMDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY2NTY0ODM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgZmluaXNoX3JhbmdlYCBhbmQgYGV4dDRfZXh0X21pZ3JhdGVgIGZvciBTeW1ib2wgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgZmluaXNoX3JhbmdlYCBhbmQgYGV4dDRfZXh0X21pZ3JhdGVgIGFyZSB1c2VkLCBzcGVjaWZpY2FsbHkgZm9yIHN5bWJvbCBjb3ZlcmFnZSBwdXJwb3Nlcy4gSSBzZWUgdGhhdCBgZmluaXNoX3JhbmdlYCBnZXRzIGNhbGxlZCB3aXRoaW4gYHVwZGF0ZV9leHRlbnRfcmFuZ2VgLCBhbmQgYWxzbyBkaXJlY3RseSB3aXRoaW4gYGV4dDRfZXh0X21pZ3JhdGVgLiBgdXBkYXRlX2V4dGVudF9yYW5nZWAsIGluIHR1cm4sIGlzIHBhcnQgb2YgdGhlIGluZGlyZWN0LXRvLWV4dGVudCBtaWdyYXRpb24gcHJvY2Vzcywgd2hpY2ggbWVhbnMgYGV4dDRfZXh0X21pZ3JhdGVgIHVsdGltYXRlbHkgdHJpZ2dlcnMgaXQuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYGZpbmlzaF9yYW5nZWAgaXMgYSB2aWFibGUgc3ltYm9sIHRhcmdldC4gSSd2ZSBjb25maXJtZWQgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgZGVmaW5lZCBpbiBgbWlncmF0ZS5jYC4gVGhlIGNoYWxsZW5nZSB3aXRoIHN0YXRpYyBmdW5jdGlvbnMgaXMsIGNvdWxkIHRoZXkgYmUgaW5saW5lZD8gQmFzZWQgb24gU2VjdGlvbiA0IG9mIHRoZSBkb2N1bWVudGF0aW9uIEkgcmVjYWxsLCB3aGljaCBzdGF0ZXMgdGhhdCBjb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGFuZCB0aHVzIGNhbid0IGJlIGRpcmVjdGx5IHRhcmdldGVkLiBIb3dldmVyLCB3aGlsZSBgZmluaXNoX3JhbmdlYCAqbWlnaHQqIGJlIGlubGluZWQsIGBleHQ0X2V4dF9taWdyYXRlYCBpcyBkZWZpbml0ZWx5IGEgbm9uLXN0YXRpYyBzeW1ib2wsIGFuZCBzbyBpcyBwZXJmZWN0bHkgZmluZS4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBmaW5pc2hfcmFuZ2VgLCBhcyBJIGNhbid0IGJlIHN1cmUgaXQgaXMgaW5saW5lZCBvciBub3QuXG5cblRoZXJlZm9yZSwgZm9yIHN5bWJvbCBjb3ZlcmFnZSwgSSdtIGNvbmZpZGVudCB0aGF0IGluY2x1ZGluZyBib3RoIGBmaW5pc2hfcmFuZ2VgIGFuZCBgZXh0NF9leHRfbWlncmF0ZWAgaXMgdGhlIHdheSB0byBnby5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBFbmFibGVDb25maWdzLiBJJ20gcmVhc29uYWJseSBjZXJ0YWluIHRoYXQgYEVYVDRfRlNgIGlzIHJlbGV2YW50LCBidXQgSSBuZWVkIHRvIGJlIDEwMCUgc3VyZS4gSSBzaG91bGQgYWxzbyBkb3VibGUgY2hlY2sgdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgaW1wb3J0YW50IGZvciBleHQ0IG1pZ3JhdGlvbi4gVGhpcyB3aWxsIHByb3ZpZGUgZnVydGhlciBjb250ZXh0IGZvciBteSBhbmFseXNpcyBhbmQgZW5zdXJlIGZ1bGwgY292ZXJhZ2Ugb2YgdGhlIHJlbGV2YW50IGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6MzcuNDMyMTg5ODMzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBFWFQ0X0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBKQkQyXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JDMTZcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgOTpcXHRcXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxcbiAgMTQ6XFx0XFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXFxuICAxNTpcXHRcXHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcXG4gIDE2OlxcdFxcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXFxuICAxNzpcXHRcXHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxcbiAgMTg6XFx0XFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcXG4gIDE5OlxcdFxcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxcbiAgMjA6XFx0XFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXFxuICAyMzpcXHRcXHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcXG4gIDI0OlxcdFxcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcXG4gIDI1OlxcdFxcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xcbiAgMjY6XFx0XFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcXG4gIDI3OlxcdFxcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcXG4gIDI4OlxcdFxcdCAgY29tcGF0aWJsZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXFxuICAzMTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiVXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEVYVDJfRlM9blxcbiAgMzk6XFx0XFx0ZGVmYXVsdCB5XFxuICA0MDpcXHRcXHRoZWxwXFxuICA0MTpcXHRcXHQgIEFsbG93IHRoZSBleHQ0IGZpbGUgc3lzdGVtIGRyaXZlciBjb2RlIHRvIGJlIHVzZWQgZm9yIGV4dDJcXG4gIDQyOlxcdFxcdCAgZmlsZSBzeXN0ZW0gbW91bnRzLiAgVGhpcyBhbGxvd3MgdXNlcnMgdG8gcmVkdWNlIHRoZWlyXFxuICA0MzpcXHRcXHQgIGNvbXBpbGVkIGtlcm5lbCBzaXplIGJ5IHVzaW5nIG9uZSBmaWxlIHN5c3RlbSBkcml2ZXIgZm9yXFxuICA0NDpcXHRcXHQgIGV4dDIsIGV4dDMsIGFuZCBleHQ0IGZpbGUgc3lzdGVtcy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuICA0NzpcXHRcXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuICA0OTpcXHRcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuICA1MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjM3LjQzMjMwNTg5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTg3NjkyMzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVYVDRfRlMgRnV6emluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGxhbmRzY2FwZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGhlcmUuIE15IGZvY3VzIHNob3VsZCBiZSBzb2xlbHkgb24gYEVYVDRfRlNgIGFzIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIExvb2tzIGxpa2UgdGhlIHRhcmdldCBzeW1ib2xzIEkgbmVlZCB0byB6ZXJvIGluIG9uIGFyZSBgZmluaXNoX3JhbmdlYCBhbmQgYGV4dDRfZXh0X21pZ3JhdGVgLiBQZXJmZWN0LiBUaGV5J3JlIGJvdGggcHJpbWUgY2FuZGlkYXRlcy4gVGhlIGNvZGUgaXMgd29ydGggZnV6emluZywgYmFzZWQgb24gdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGZsYWcuXG5cblRoZSByZWFzb25pbmcncyBjbGVhcjogdGhlIHBhdGNoIGlzIGZpZGRsaW5nIHdpdGggZXJyb3IgYW5kIHJldHVybiB2YWx1ZSBoYW5kbGluZyB3aXRoaW4gYGZpbmlzaF9yYW5nZSgpYCwgd2hpY2ggbGl2ZXMgaW4gYGZzL2V4dDQvbWlncmF0ZS5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIHRpZWQgdG8gZXh0NCdzIGJsb2NrLXRvLWV4dGVudHMgZmlsZSBtaWdyYXRpb24gcHJvY2Vzcywga2lja2VkIG9mZiBieSB0aGUgYEVYVDRfSU9DX01JR1JBVEVgIGlvY3RsLiBHb29kIG5ld3MgaXMgdGhhdCBpdCdzIHJlYWNoYWJsZSBpbiBjb21tb24gdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGZlZWQgdGhlc2UgdmFsdWVzIGludG8gYHNldC1yZXN1bHRzYC4gTGV0J3MgZ2V0IHRoaXMgcm9sbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE2OCwiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjo0MC4wMjAwMDE0MDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEwNTk0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaW5pc2hfcmFuZ2VcIixcbiAgICBcImV4dDRfZXh0X21pZ3JhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGFuZCByZXR1cm4gdmFsdWUgcHJvcGFnYXRpb24gdXNpbmcgUFRSX0VSUl9PUl9aRVJPIGluIGV4dDQncyBmaW5pc2hfcmFuZ2UoKSBpbiBmcy9leHQ0L21pZ3JhdGUuYy4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiBleHQ0J3MgZXh0ZW50IG1pZ3JhdGlvbiBtZWNoYW5pc20sIGFjY2Vzc2libGUgdmlhIGlvY3RscyAoZS5nLiwgRVhUNF9JT0NfTUlHUkFURSkuIFNpbmNlIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBpcyBtb2RpZmllZCwgZnV6emluZyBpcyB3YXJyYW50ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpbmlzaF9yYW5nZVwiLFxuICAgIFwiZXh0NF9leHRfbWlncmF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgYW5kIHJldHVybiB2YWx1ZSBwcm9wYWdhdGlvbiB1c2luZyBQVFJfRVJSX09SX1pFUk8gaW4gZXh0NCdzIGZpbmlzaF9yYW5nZSgpIGluIGZzL2V4dDQvbWlncmF0ZS5jLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIGV4dDQncyBleHRlbnQgbWlncmF0aW9uIG1lY2hhbmlzbSwgYWNjZXNzaWJsZSB2aWEgaW9jdGxzIChlLmcuLCBFWFQ0X0lPQ19NSUdSQVRFKS4gU2luY2UgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGlzIG1vZGlmaWVkLCBmdXp6aW5nIGlzIHdhcnJhbnRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6NDAuMTYxMDcwNDgyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0ODc0MTI2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjQwLjE2MTk5MTA1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwNDQ3ODEzNzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGNvZGUgYXNzaWdubWVudCBpbiBleHQ0J3MgZmluaXNoX3JhbmdlKCkgZnVuY3Rpb24gYnkgcmVwbGFjaW5nIGBpZiAoSVNfRVJSKHBhdGgpKSByZXR2YWwgPSBQVFJfRVJSKHBhdGgpO2Agd2l0aCBgcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyByZWZhY3RvcmluZyB0aGF0IG1vZGlmaWVzIGEgc2NhbGFyIHJldHVybiBjb2RlIHZhcmlhYmxlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDIxMjQwODY1YTFlYmFhZDdiYjQzOGEwZDJjNmI2NzY1ODZmY2Y5NmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM2OjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9taWdyYXRlLmMgYi9mcy9leHQ0L21pZ3JhdGUuY1xuaW5kZXggNWQ2MGVmMTBmZTExMC4uZDQ2N2I1YTEzYzYyZSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jXG4rKysgYi9mcy9leHQ0L21pZ3JhdGUuY1xuQEAgLTUzLDggKzUzLDcgQEAgc3RhdGljIGludCBmaW5pc2hfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX291dDtcbiBcdHBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIFx1MDAyNm5ld2V4dCwgMCk7XG4tXHRpZiAoSVNfRVJSKHBhdGgpKVxuLVx0XHRyZXR2YWwgPSBQVFJfRVJSKHBhdGgpO1xuK1x0cmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpO1xuIGVycl9vdXQ6XG4gXHR1cF93cml0ZSgoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKSk7XG4gXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjo0MC4xNjE5OTMxMzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYxNzYzNzQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuXG5cbioqQW5hbHl6aW5nIHRoaXMgUGF0Y2g6IEEgRm9jdXNlZCBBcHByb2FjaCoqXG5cbkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGlzIHBhdGNoIHdpdGggcHJlY2lzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IHdpdGhpbiB0aGUgYGZzL2V4dDRgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbWlncmF0ZS5jYC4gSSdtIHRoaW5raW5nLCBcIkxldCdzIHVzZSBvdXIgZmFtaWxpYXIgdG9vbHMuXCIgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZnMvZXh0NC9taWdyYXRlLmNgLCBhbmQgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgdGhlIGZpbGUuIEkgd2FudCB0byBxdWlja2x5IHplcm8gaW4gb24gYXJvdW5kIGxpbmUgNTMgdXNpbmcgYHJlYWQtZmlsZWAgYW5kIGluc3BlY3QgdGhhdCBhcmVhIGRpcmVjdGx5LiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgcXVpY2tlc3Qgc2Vuc2Ugb2YgdGhlIGxvY2FsIGNoYW5nZXMgaGVyZS4gVGhpcyB3aWxsIGxldCBtZSBxdWlja2x5IGdyYXNwIHRoZSBsb2NhbCBjb250ZXh0IGJlZm9yZSBnb2luZyB3aWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6NDQuNzc5NjMzNTM2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvbWlncmF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMVxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDdcXG4gICA0OlxcdCAqIEF1dGhvciBBbmVlc2ggS3VtYXIgSy5WIFxcdTAwM2NhbmVlc2gua3VtYXJAbGludXgudm5ldC5pYm0uY29tXFx1MDAzZVxcbiAgIDU6XFx0ICpcXG4gICA2OlxcdCAqL1xcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcImV4dDRfamJkMi5oXFxcIlxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcImV4dDRfZXh0ZW50cy5oXFxcIlxcbiAgMTE6XFx0XFxuICAxMjpcXHQvKlxcbiAgMTM6XFx0ICogVGhlIGNvbnRpZ3VvdXMgYmxvY2tzIGRldGFpbHMgd2hpY2ggY2FuIGJlXFxuICAxNDpcXHQgKiByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBleHRlbnRcXG4gIDE1OlxcdCAqL1xcbiAgMTY6XFx0c3RydWN0IG1pZ3JhdGVfc3RydWN0IHtcXG4gIDE3OlxcdFxcdGV4dDRfbGJsa190IGZpcnN0X2Jsb2NrLCBsYXN0X2Jsb2NrLCBjdXJyX2Jsb2NrO1xcbiAgMTg6XFx0XFx0ZXh0NF9mc2Jsa190IGZpcnN0X3BibG9jaywgbGFzdF9wYmxvY2s7XFxuICAxOTpcXHR9O1xcbiAgMjA6XFx0XFxuICAyMTpcXHRzdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgMjI6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG1pZ3JhdGVfc3RydWN0ICpsYilcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0e1xcbiAgMjU6XFx0XFx0aW50IHJldHZhbCA9IDAsIG5lZWRlZDtcXG4gIDI2OlxcdFxcdHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleHQ7XFxuICAyNzpcXHRcXHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aDtcXG4gIDI4OlxcdFxcdGlmIChsYi1cXHUwMDNlZmlyc3RfcGJsb2NrID09IDApXFxuICAyOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0LyogQWRkIHRoZSBleHRlbnQgdG8gdGVtcCBpbm9kZSovXFxuICAzMjpcXHRcXHRuZXdleHQuZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihsYi1cXHUwMDNlZmlyc3RfYmxvY2spO1xcbiAgMzM6XFx0XFx0bmV3ZXh0LmVlX2xlbiAgID0gY3B1X3RvX2xlMTYobGItXFx1MDAzZWxhc3RfYmxvY2sgLSBsYi1cXHUwMDNlZmlyc3RfYmxvY2sgKyAxKTtcXG4gIDM0OlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXh0LCBsYi1cXHUwMDNlZmlyc3RfcGJsb2NrKTtcXG4gIDM1OlxcdFxcdC8qIExvY2tpbmcgb25seSBmb3IgY29udmVuaWVuY2Ugc2luY2Ugd2UgYXJlIG9wZXJhdGluZyBvbiB0ZW1wIGlub2RlICovXFxuICAzNjpcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4gIDM3OlxcdFxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBsYi1cXHUwMDNlZmlyc3RfYmxvY2ssIE5VTEwsIDApO1xcbiAgMzg6XFx0XFx0aWYgKElTX0VSUihwYXRoKSkge1xcbiAgMzk6XFx0XFx0XFx0cmV0dmFsID0gUFRSX0VSUihwYXRoKTtcXG4gIDQwOlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gIDQxOlxcdFxcdH1cXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0LypcXG4gIDQ0OlxcdFxcdCAqIENhbGN1bGF0ZSB0aGUgY3JlZGl0IG5lZWRlZCB0byBpbnNlcnRpbmcgdGhpcyBleHRlbnRcXG4gIDQ1OlxcdFxcdCAqIFNpbmNlIHdlIGFyZSBkb2luZyB0aGlzIGluIGxvb3Agd2UgbWF5IGFjY3VtdWxhdGUgZXh0cmFcXG4gIDQ2OlxcdFxcdCAqIGNyZWRpdC4gQnV0IGJlbG93IHdlIHRyeSB0byBub3QgYWNjdW11bGF0ZSB0b28gbXVjaFxcbiAgNDc6XFx0XFx0ICogb2YgdGhlbSBieSByZXN0YXJ0aW5nIHRoZSBqb3VybmFsLlxcbiAgNDg6XFx0XFx0ICovXFxuICA0OTpcXHRcXHRuZWVkZWQgPSBleHQ0X2V4dF9jYWxjX2NyZWRpdHNfZm9yX3NpbmdsZV9leHRlbnQoaW5vZGUsXFxuICA1MDpcXHRcXHRcXHQgICAgbGItXFx1MDAzZWxhc3RfYmxvY2sgLSBsYi1cXHUwMDNlZmlyc3RfYmxvY2sgKyAxLCBwYXRoKTtcXG4gIDUxOlxcdFxcbiAgNTI6XFx0XFx0cmV0dmFsID0gZXh0NF9kYXRhc2VtX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgaW5vZGUsIG5lZWRlZCwgbmVlZGVkLCAwKTtcXG4gIDUzOlxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiAgNTQ6XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiAgNTU6XFx0XFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXFx1MDAyNm5ld2V4dCwgMCk7XFxuICA1NjpcXHRcXHRyZXR2YWwgPSBQVFJfRVJSX09SX1pFUk8ocGF0aCk7XFxuICA1NzpcXHRlcnJfb3V0OlxcbiAgNTg6XFx0XFx0dXBfd3JpdGUoKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKSk7XFxuICA1OTpcXHRcXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XFxuICA2MDpcXHRcXHRsYi1cXHUwMDNlZmlyc3RfcGJsb2NrID0gMDtcXG4gIDYxOlxcdFxcdHJldHVybiByZXR2YWw7XFxuICA2MjpcXHR9XFxuICA2MzpcXHRcXG4gIDY0OlxcdHN0YXRpYyBpbnQgdXBkYXRlX2V4dGVudF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgNjU6XFx0XFx0XFx0XFx0ICAgICAgIGV4dDRfZnNibGtfdCBwYmxvY2ssIHN0cnVjdCBtaWdyYXRlX3N0cnVjdCAqbGIpXFxuICA2NjpcXHR7XFxuICA2NzpcXHRcXHRpbnQgcmV0dmFsO1xcbiAgNjg6XFx0XFx0LypcXG4gIDY5OlxcdFxcdCAqIFNlZSBpZiB3ZSBjYW4gYWRkIG9uIHRvIHRoZSBleGlzdGluZyByYW5nZSAoaWYgaXQgZXhpc3RzKVxcbiAgNzA6XFx0XFx0ICovXFxuICA3MTpcXHRcXHRpZiAobGItXFx1MDAzZWZpcnN0X3BibG9jayBcXHUwMDI2XFx1MDAyNlxcbiAgNzI6XFx0XFx0XFx0KGxiLVxcdTAwM2VsYXN0X3BibG9jaysxID09IHBibG9jaykgXFx1MDAyNlxcdTAwMjZcXG4gIDczOlxcdFxcdFxcdChsYi1cXHUwMDNlbGFzdF9ibG9jaysxID09IGxiLVxcdTAwM2VjdXJyX2Jsb2NrKSkge1xcbiAgNzQ6XFx0XFx0XFx0bGItXFx1MDAzZWxhc3RfcGJsb2NrID0gcGJsb2NrO1xcbiAgNzU6XFx0XFx0XFx0bGItXFx1MDAzZWxhc3RfYmxvY2sgPSBsYi1cXHUwMDNlY3Vycl9ibG9jaztcXG4gIDc2OlxcdFxcdFxcdGxiLVxcdTAwM2VjdXJyX2Jsb2NrKys7XFxuICA3NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gIDc4OlxcdFxcdH1cXG4gIDc5OlxcdFxcdC8qXFxuICA4MDpcXHRcXHQgKiBTdGFydCBhIG5ldyByYW5nZS5cXG4gIDgxOlxcdFxcdCAqL1xcbiAgODI6XFx0XFx0cmV0dmFsID0gZmluaXNoX3JhbmdlKGhhbmRsZSwgaW5vZGUsIGxiKTtcXG4gIDgzOlxcdFxcdGxiLVxcdTAwM2VmaXJzdF9wYmxvY2sgPSBsYi1cXHUwMDNlbGFzdF9wYmxvY2sgPSBwYmxvY2s7XFxuICA4NDpcXHRcXHRsYi1cXHUwMDNlZmlyc3RfYmxvY2sgPSBsYi1cXHUwMDNlbGFzdF9ibG9jayA9IGxiLVxcdTAwM2VjdXJyX2Jsb2NrO1xcbiAgODU6XFx0XFx0bGItXFx1MDAzZWN1cnJfYmxvY2srKztcXG4gIDg2OlxcdFxcdHJldHVybiByZXR2YWw7XFxuICA4NzpcXHR9XFxuICA4ODpcXHRcXG4gIDg5OlxcdHN0YXRpYyBpbnQgdXBkYXRlX2luZF9leHRlbnRfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gIDkwOlxcdFxcdFxcdFxcdFxcdCAgIGV4dDRfZnNibGtfdCBwYmxvY2ssXFxuICA5MTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWlncmF0ZV9zdHJ1Y3QgKmxiKVxcbiAgOTI6XFx0e1xcbiAgOTM6XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4gIDk0OlxcdFxcdF9fbGUzMiAqaV9kYXRhO1xcbiAgOTU6XFx0XFx0aW50IGksIHJldHZhbCA9IDA7XFxuICA5NjpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9lbnRyaWVzID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplIFxcdTAwM2VcXHUwMDNlIDI7XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdGJoID0gZXh0NF9zYl9icmVhZChpbm9kZS1cXHUwMDNlaV9zYiwgcGJsb2NrLCAwKTtcXG4gIDk5OlxcdFxcdGlmIChJU19FUlIoYmgpKVxcbiAxMDA6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYmgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjo0NC43Nzk3MzIwMDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgzMDAzNzE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb2RlIENsZWFudXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiBzdHJlYW1saW5pbmcgdGhlIGBmaW5pc2hfcmFuZ2VgIGZ1bmN0aW9uIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQncyByZXBsYWNpbmcgYSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHdpdGggdGhlIGBQVFJfRVJSX09SX1pFUk9gIG1hY3JvLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyB0aGUgcHJpb3IgaW1wbGVtZW50YXRpb24gaGFkIHNvbWUgcmVkdW5kYW5jeS4gYHJldHZhbGAgd2FzIGdldHRpbmcgYXNzaWduZWQgYSB2YWx1ZSBmcm9tIGEgZnVuY3Rpb24gKGBleHQ0X2RhdGFzZW1fZW5zdXJlX2NyZWRpdHMoLi4uKWAgLSB3aGljaCwgaW1wb3J0YW50bHksIHJldHVybmVkIDAgb3IgYSBuZWdhdGl2ZSBlcnJvciksIGJ1dCB0aGVuIGl0IGNvdWxkIGJlIG92ZXJ3cml0dGVuIGJhc2VkIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgYGV4dDRfZXh0X2luc2VydF9leHRlbnRgLiBOb3csIGBQVFJfRVJSX09SX1pFUk8ocGF0aClgIGVmZmVjdGl2ZWx5IGNvbnNvbGlkYXRlcyB0aGF0IGxvZ2ljLiBJZiBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAgcmV0dXJucyBhbiBlcnJvciBwb2ludGVyIChgSVNfRVJSKHBhdGgpYCBpcyB0cnVlKSwgYHJldHZhbGAgYmVjb21lcyB0aGF0IGVycm9yLiBJZiBpdCBzdWNjZWVkcyAocmV0dXJucyBhIHZhbGlkIHBvaW50ZXIsIGBJU19FUlIocGF0aClgIGlzIGZhbHNlKSwgYHJldHZhbGAgYmVjb21lcyB6ZXJvLiBJdCdzIGEgY2xlYW4sIGVmZmljaWVudCB3YXkgdG8gaGFuZGxlIHRoZSBlcnJvciBjaGVja2luZy5cblxuVGhlIG1haW4gY29uY2VybiBpbiBhIGNvZGUgY2hhbmdlIGxpa2UgdGhpcyBpcyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcywgcGFydGljdWxhcmx5IHRob3NlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGRhdGEgbGVha3MsIG9yIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBmdXp6ZXJzIGxpa2UgS0FTQU4gb3IgS01TQU4gbWlnaHQgZmxhZy5cblxuSG93ZXZlciwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIGEgc2FmZSBzaW1wbGlmaWNhdGlvbi4gYHJldHZhbGAgaXMgYW4gaW50ZWdlciwgc28gdGhlcmUncyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGRpcmVjdGx5IGZyb20gdGhhdCB2YXJpYWJsZS4gYHBhdGhgIGlzIGEgcG9pbnRlciByZXR1cm5lZCBieSB3ZWxsLWRlZmluZWQgYWxsb2NhdGlvbiBvciByZXRyaWV2YWwgZnVuY3Rpb25zIChgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAsIGBleHQ0X2ZpbmRfZXh0ZW50YCkgYW5kIHByb3Blcmx5IGZyZWVkIChgZXh0NF9mcmVlX2V4dF9wYXRoYCBoYW5kbGVzIGJvdGggdmFsaWQgcG9pbnRlcnMgYW5kIGVycm9yIHBvaW50ZXJzL05VTEwpLlxuXG5JJ3ZlIGFsc28gY29uc2lkZXJlZCBhbnkgS01TQU4tc3BlY2lmaWMgY29uY2VybnMuIEtNU0FOIGZvY3VzZXMgb24ga2VybmVsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgY29uZmxpY3RpbmcgYWNjZXNzZXMuIEhvd2V2ZXIsIGluIHRoaXMgcGF0Y2gsIHRoZSBtZW1vcnkgaGFuZGxpbmcgaXMgdmVyeSBzdHJhaWdodGZvcndhcmQgYW5kIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgc28gS01TQU4gc2hvdWxkIG5vdCBiZSB0cmlnZ2VyZWQgaGVyZS4gVGhlIGNsZWFudXAgc2VlbXMgdG8gYWZmZWN0IG9ubHkgY29udHJvbCBmbG93IGJhc2VkIG9uIGVycm9yIGNoZWNraW5nLiBUaGUgY29kZSBpcyBvbmx5IHNpbXBsaWZ5aW5nIGFuIGFzc2lnbm1lbnQgb2YgYSBwYXRoIGJhc2VkIG9uIGl0cyB2YWxpZGl0eSB1c2luZyBhbiBleGlzdGluZyBmdW5jdGlvbiwgc28gdGhhdCBpcyBzYWZlLlxuXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNsZWFudXAsIGFuZCBpcyBzYWZlIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBUaGVyZSBhcmUgbm8gS01TQU4gY29uY2VybnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MjksIk91dHB1dFRva2VucyI6MTQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6NTAuNjA5NzcyNjczWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGNvZGUgYXNzaWdubWVudCBpbiBleHQ0J3MgZmluaXNoX3JhbmdlKCkgZnVuY3Rpb24gYnkgcmVwbGFjaW5nIGBpZiAoSVNfRVJSKHBhdGgpKSByZXR2YWwgPSBQVFJfRVJSKHBhdGgpO2Agd2l0aCBgcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyByZWZhY3RvcmluZyB0aGF0IG1vZGlmaWVzIGEgc2NhbGFyIHJldHVybiBjb2RlIHZhcmlhYmxlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgY29kZSBhc3NpZ25tZW50IGluIGV4dDQncyBmaW5pc2hfcmFuZ2UoKSBmdW5jdGlvbiBieSByZXBsYWNpbmcgYGlmIChJU19FUlIocGF0aCkpIHJldHZhbCA9IFBUUl9FUlIocGF0aCk7YCB3aXRoIGByZXR2YWwgPSBQVFJfRVJSX09SX1pFUk8ocGF0aClgLiBUaGlzIGlzIGEgcHVyZWx5IGNvc21ldGljIHJlZmFjdG9yaW5nIHRoYXQgbW9kaWZpZXMgYSBzY2FsYXIgcmV0dXJuIGNvZGUgdmFyaWFibGUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBhY2Nlc3MgdW5pbml0aWFsaXplZCBkYXRhLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50OyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow98jmj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 03:50:45 +0000 UTC FinishedAt: 2026-09-09 04:36:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a9d7ced84989ec05be09b4b8428759ef60450a0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a9d7ced84989ec05be09b4b8428759ef60450a0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "9e80305b-e1ef-4a6b-9b6b-39ecc4b71041" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "finish_range", "ext4_ext_migrate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaW5pc2hfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfbWlncmF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgY29kZSBhc3NpZ25tZW50IGluIGV4dDQmIzM5O3MgZmluaXNoX3JhbmdlKCkgZnVuY3Rpb24gYnkgcmVwbGFjaW5nIGBpZiAoSVNfRVJSKHBhdGgpKSByZXR2YWwgPSBQVFJfRVJSKHBhdGgpO2Agd2l0aCBgcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyByZWZhY3RvcmluZyB0aGF0IG1vZGlmaWVzIGEgc2NhbGFyIHJldHVybiBjb2RlIHZhcmlhYmxlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGFuZCByZXR1cm4gdmFsdWUgcHJvcGFnYXRpb24gdXNpbmcgUFRSX0VSUl9PUl9aRVJPIGluIGV4dDQmIzM5O3MgZmluaXNoX3JhbmdlKCkgaW4gZnMvZXh0NC9taWdyYXRlLmMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgZXh0NCYjMzk7cyBleHRlbnQgbWlncmF0aW9uIG1lY2hhbmlzbSwgYWNjZXNzaWJsZSB2aWEgaW9jdGxzIChlLmcuLCBFWFQ0X0lPQ19NSUdSQVRFKS4gU2luY2UgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGlzIG1vZGlmaWVkLCBmdXp6aW5nIGlzIHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDIxMjQwODY1YTFlYmFhZDdiYjQzOGEwZDJjNmI2NzY1ODZmY2Y5NmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM2OjE1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWlncmF0ZS5jIGIvZnMvZXh0NC9taWdyYXRlLmNcbmluZGV4IDVkNjBlZjEwZmUxMTAuLmQ0NjdiNWExM2M2MmUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9taWdyYXRlLmNcbkBAIC01Myw4ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfb3V0O1xuIFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXh0LCAwKTtcbi1cdGlmIChJU19FUlIocGF0aCkpXG4tXHRcdHJldHZhbCA9IFBUUl9FUlIocGF0aCk7XG4mIzQzO1x0cmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpO1xuIGVycl9vdXQ6XG4gXHR1cF93cml0ZSgoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKSk7XG4gXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpbmlzaF9yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9taWdyYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgYW5kIHJldHVybiB2YWx1ZSBwcm9wYWdhdGlvbiB1c2luZyBQVFJfRVJSX09SX1pFUk8gaW4gZXh0NCYjMzk7cyBmaW5pc2hfcmFuZ2UoKSBpbiBmcy9leHQ0L21pZ3JhdGUuYy4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiBleHQ0JiMzOTtzIGV4dGVudCBtaWdyYXRpb24gbWVjaGFuaXNtLCBhY2Nlc3NpYmxlIHZpYSBpb2N0bHMgKGUuZy4sIEVYVDRfSU9DX01JR1JBVEUpLiBTaW5jZSByZWFjaGFibGUga2VybmVsIGNvZGUgaXMgbW9kaWZpZWQsIGZ1enppbmcgaXMgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjEyNDA4NjVhMWViYWFkN2JiNDM4YTBkMmM2YjY3NjU4NmZjZjk2ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDQ6MzY6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jCmluZGV4IDVkNjBlZjEwZmUxMTAuLmQ0NjdiNWExM2M2MmUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvbWlncmF0ZS5jCkBAIC01Myw4ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCWlmIChyZXR2YWwgJmx0OyAwKQogCQlnb3RvIGVycl9vdXQ7CiAJcGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJmFtcDtuZXdleHQsIDApOwotCWlmIChJU19FUlIocGF0aCkpCi0JCXJldHZhbCA9IFBUUl9FUlIocGF0aCk7CiYjNDM7CXJldHZhbCA9IFBUUl9FUlJfT1JfWkVSTyhwYXRoKTsKIGVycl9vdXQ6CiAJdXBfd3JpdGUoKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7aV9kYXRhX3NlbSkpOwogCWV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV4dDQgTWlncmF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgaXRzIGluc3RydWN0aW9ucy4gTXkgaW5pdGlhbCBmb2N1cyBpcyB0aGUgZGlmZiwgb2YgY291cnNlLiBSaWdodCBhd2F5LCBJIHNlZSB0aGUgY2hhbmdlIGluIGBmcy9leHQ0L21pZ3JhdGUuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBmaW5pc2hfcmFuZ2VgIGZ1bmN0aW9uLiBJbnRlcmVzdGluZywgdGhleSYjMzk7dmUgcmVwbGFjZWQgdGhlIGRpcmVjdCBjaGVjayBmb3IgYW4gZXJyb3Igd2l0aCBgSVNfRVJSKHBhdGgpYCBhbmQgdGhlIHN1YnNlcXVlbnQgYXNzaWdubWVudCBvZiBgcmV0dmFsYCB3aXRoIGEgbW9yZSBjb25jaXNlIGByZXR2YWwgPSBQVFJfRVJSX09SX1pFUk8ocGF0aClgLiBUaGlzIGlzIGNvbW1vbjsgaXQmIzM5O3MgbGlrZWx5IGEgc2ltcGxpZmljYXRpb24gdG8gaGFuZGxlIHRoZSBlcnJvciByZXR1cm4gZnJvbSBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAuIE5vIGJpZyBkZWFsIGF0IHRoaXMgcG9pbnQuCgpUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIGNvbnRleHQuIEkmIzM5O2xsIHF1aWNrbHkgbG9vayB1cCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZnMvZXh0NC9taWdyYXRlLmNgLCBwcm9iYWJseSBhcm91bmQgbGluZSA1MywgdG8gZ3Jhc3Agd2hhdCBgZmluaXNoX3JhbmdlYCBpcyAqZG9pbmcqIGFuZCwgY3JpdGljYWxseSwgd2hvJiMzOTtzIGNhbGxpbmcgaXQuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBjbGFyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIHRvIGNvbnNpZGVyLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBlcnJvciBoYW5kbGluZyBpcyBzdGlsbCBjb3JyZWN0IGFuZCB0aGF0IG5vIGluZm9ybWF0aW9uIGlzIGJlaW5nIGxvc3Qgd2l0aCB0aGlzIGNoYW5nZS4gSXQgd291bGQgYWxzbyBiZSBnb29kIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIHVzZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgYXNzdW1wdGlvbnMgaXQgbWFrZXMuIEkgc2hvdWxkIGFsc28gaW52ZXN0aWdhdGUgd2hldGhlciB0aGlzIGNoYW5nZSBhbHNvIGV4aXN0cyBpbiB0aGUgbGF0ZXN0IHJlbGVhc2VzIG9yIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvbWlncmF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdFxuICAzMTpcdFx0LyogQWRkIHRoZSBleHRlbnQgdG8gdGVtcCBpbm9kZSovXG4gIDMyOlx0XHRuZXdleHQuZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihsYi1cdTAwM2VmaXJzdF9ibG9jayk7XG4gIDMzOlx0XHRuZXdleHQuZWVfbGVuICAgPSBjcHVfdG9fbGUxNihsYi1cdTAwM2VsYXN0X2Jsb2NrIC0gbGItXHUwMDNlZmlyc3RfYmxvY2sgJiM0MzsgMSk7XG4gIDM0Olx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXh0LCBsYi1cdTAwM2VmaXJzdF9wYmxvY2spO1xuICAzNTpcdFx0LyogTG9ja2luZyBvbmx5IGZvciBjb252ZW5pZW5jZSBzaW5jZSB3ZSBhcmUgb3BlcmF0aW5nIG9uIHRlbXAgaW5vZGUgKi9cbiAgMzY6XHRcdGRvd25fd3JpdGUoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKTtcbiAgMzc6XHRcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBsYi1cdTAwM2VmaXJzdF9ibG9jaywgTlVMTCwgMCk7XG4gIDM4Olx0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4gIDM5Olx0XHRcdHJldHZhbCA9IFBUUl9FUlIocGF0aCk7XG4gIDQwOlx0XHRcdGdvdG8gZXJyX291dDtcbiAgNDE6XHRcdH1cbiAgNDI6XHRcbiAgNDM6XHRcdC8qXG4gIDQ0Olx0XHQgKiBDYWxjdWxhdGUgdGhlIGNyZWRpdCBuZWVkZWQgdG8gaW5zZXJ0aW5nIHRoaXMgZXh0ZW50XG4gIDQ1Olx0XHQgKiBTaW5jZSB3ZSBhcmUgZG9pbmcgdGhpcyBpbiBsb29wIHdlIG1heSBhY2N1bXVsYXRlIGV4dHJhXG4gIDQ2Olx0XHQgKiBjcmVkaXQuIEJ1dCBiZWxvdyB3ZSB0cnkgdG8gbm90IGFjY3VtdWxhdGUgdG9vIG11Y2hcbiAgNDc6XHRcdCAqIG9mIHRoZW0gYnkgcmVzdGFydGluZyB0aGUgam91cm5hbC5cbiAgNDg6XHRcdCAqL1xuICA0OTpcdFx0bmVlZGVkID0gZXh0NF9leHRfY2FsY19jcmVkaXRzX2Zvcl9zaW5nbGVfZXh0ZW50KGlub2RlLFxuICA1MDpcdFx0XHQgICAgbGItXHUwMDNlbGFzdF9ibG9jayAtIGxiLVx1MDAzZWZpcnN0X2Jsb2NrICYjNDM7IDEsIHBhdGgpO1xuICA1MTpcdFxuICA1MjpcdFx0cmV0dmFsID0gZXh0NF9kYXRhc2VtX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgaW5vZGUsIG5lZWRlZCwgbmVlZGVkLCAwKTtcbiAgNTM6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gIDU0Olx0XHRcdGdvdG8gZXJyX291dDtcbiAgNTU6XHRcdHBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIFx1MDAyNm5ld2V4dCwgMCk7XG4gIDU2Olx0XHRyZXR2YWwgPSBQVFJfRVJSX09SX1pFUk8ocGF0aCk7XG4gIDU3Olx0ZXJyX291dDpcbiAgNTg6XHRcdHVwX3dyaXRlKChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YV9zZW0pKTtcbiAgNTk6XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbiAgNjA6XHRcdGxiLVx1MDAzZWZpcnN0X3BibG9jayA9IDA7XG4gIDYxOlx0XHRyZXR1cm4gcmV0dmFsO1xuICA2MjpcdH1cbiAgNjM6XHRcbiAgNjQ6XHRzdGF0aWMgaW50IHVwZGF0ZV9leHRlbnRfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgNjU6XHRcdFx0XHQgICAgICAgZXh0NF9mc2Jsa190IHBibG9jaywgc3RydWN0IG1pZ3JhdGVfc3RydWN0ICpsYilcbiAgNjY6XHR7XG4gIDY3Olx0XHRpbnQgcmV0dmFsO1xuICA2ODpcdFx0LypcbiAgNjk6XHRcdCAqIFNlZSBpZiB3ZSBjYW4gYWRkIG9uIHRvIHRoZSBleGlzdGluZyByYW5nZSAoaWYgaXQgZXhpc3RzKVxuICA3MDpcdFx0ICovXG4gIDcxOlx0XHRpZiAobGItXHUwMDNlZmlyc3RfcGJsb2NrIFx1MDAyNlx1MDAyNlxuICA3MjpcdFx0XHQobGItXHUwMDNlbGFzdF9wYmxvY2smIzQzOzEgPT0gcGJsb2NrKSBcdTAwMjZcdTAwMjZcbiAgNzM6XHRcdFx0KGxiLVx1MDAzZWxhc3RfYmxvY2smIzQzOzEgPT0gbGItXHUwMDNlY3Vycl9ibG9jaykpIHtcbiAgNzQ6XHRcdFx0bGItXHUwMDNlbGFzdF9wYmxvY2sgPSBwYmxvY2s7XG4gIDc1Olx0XHRcdGxiLVx1MDAzZWxhc3RfYmxvY2sgPSBsYi1cdTAwM2VjdXJyX2Jsb2NrO1xuICA3NjpcdFx0XHRsYi1cdTAwM2VjdXJyX2Jsb2NrJiM0MzsmIzQzOztcbiAgNzc6XHRcdFx0cmV0dXJuIDA7XG4gIDc4Olx0XHR9XG4gIDc5Olx0XHQvKlxuICA4MDpcdFx0ICogU3RhcnQgYSBuZXcgcmFuZ2UuXG4gIDgxOlx0XHQgKi9cbiAgODI6XHRcdHJldHZhbCA9IGZpbmlzaF9yYW5nZShoYW5kbGUsIGlub2RlLCBsYik7XG4gIDgzOlx0XHRsYi1cdTAwM2VmaXJzdF9wYmxvY2sgPSBsYi1cdTAwM2VsYXN0X3BibG9jayA9IHBibG9jaztcbiAgODQ6XHRcdGxiLVx1MDAzZWZpcnN0X2Jsb2NrID0gbGItXHUwMDNlbGFzdF9ibG9jayA9IGxiLVx1MDAzZWN1cnJfYmxvY2s7XG4gIDg1Olx0XHRsYi1cdTAwM2VjdXJyX2Jsb2NrJiM0MzsmIzQzOztcbiAgODY6XHRcdHJldHVybiByZXR2YWw7XG4gIDg3Olx0fVxuICA4ODpcdFxuICA4OTpcdHN0YXRpYyBpbnQgdXBkYXRlX2luZF9leHRlbnRfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgOTA6XHRcdFx0XHRcdCAgIGV4dDRfZnNibGtfdCBwYmxvY2ssXG4gIDkxOlx0XHRcdFx0XHQgICBzdHJ1Y3QgbWlncmF0ZV9zdHJ1Y3QgKmxiKVxuICA5MjpcdHtcbiAgOTM6XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG4gIDk0Olx0XHRfX2xlMzIgKmlfZGF0YTtcbiAgOTU6XHRcdGludCBpLCByZXR2YWwgPSAwO1xuICA5NjpcdFx0dW5zaWduZWQgbG9uZyBtYXhfZW50cmllcyA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgXHUwMDNlXHUwMDNlIDI7XG4gIDk3Olx0XG4gIDk4Olx0XHRiaCA9IGV4dDRfc2JfYnJlYWQoaW5vZGUtXHUwMDNlaV9zYiwgcGJsb2NrLCAwKTtcbiAgOTk6XHRcdGlmIChJU19FUlIoYmgpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NzcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGFjdGl2YXRpb24gcGF0aCBmb3IgYG1pZ3JhdGUuY2AsIHNwZWNpZmljYWxseS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIHdoZXJlIHRoaXMgY29kZSBpcyAqYWN0dWFsbHkqIGNhbGxlZCBhbmQgd2hhdCBzZXR0aW5ncyBtaWdodCB0cmlnZ2VyIGl0cyB1c2FnZS4gU28sIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIHJlZmVyZW5jZXMgdG8gYGV4dDRfZXh0X21pZ3JhdGVgIG9yIGFueSByZWxhdGVkIHN5bWJvbHMgd2l0aGluIHRoZSBgZnMvZXh0NC9taWdyYXRlLmNgIGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYSBtZW50YWwgbW9kZWwgb2Ygd2hlbiBhbmQgd2h5IGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NC4qbWlncmF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTMyNTQ9aW50IGV4dDRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKTtcbi0tXG5mcy9leHQ0L2V4dDQuaC0zMjU2LS8qIG1pZ3JhdGUuYyAqL1xuZnMvZXh0NC9leHQ0Lmg6MzI1NzpleHRlcm4gaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICopO1xuZnMvZXh0NC9leHQ0Lmg6MzI1ODpleHRlcm4gaW50IGV4dDRfaW5kX21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaC0zMjU5LVxuLS1cbmZzL2V4dDQvaW9jdGwuYz01OTA9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldGZsYWdzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTcwNS1cdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0VYVEVOVFNfRkwpXG5mcy9leHQ0L2lvY3RsLmM6NzA2Olx0XHRcdGVyciA9IGV4dDRfZXh0X21pZ3JhdGUoaW5vZGUpO1xuZnMvZXh0NC9pb2N0bC5jLTcwNy1cdFx0ZWxzZVxuZnMvZXh0NC9pb2N0bC5jOjcwODpcdFx0XHRlcnIgPSBleHQ0X2luZF9taWdyYXRlKGlub2RlKTtcbmZzL2V4dDQvaW9jdGwuYy03MDktXHR9XG4tLVxuZnMvZXh0NC9pb2N0bC5jPTE1Mzg9c3RhdGljIGxvbmcgX19leHQ0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5mcy9leHQ0L2lvY3RsLmMtMTcwMS1cdFx0aW5vZGVfbG9jaygoaW5vZGUpKTtcbmZzL2V4dDQvaW9jdGwuYzoxNzAyOlx0XHRlcnIgPSBleHQ0X2V4dF9taWdyYXRlKGlub2RlKTtcbmZzL2V4dDQvaW9jdGwuYy0xNzAzLVx0XHRpbm9kZV91bmxvY2soKGlub2RlKSk7XG4tLVxuZnMvZXh0NC9taWdyYXRlLmM9NjQ9c3RhdGljIGludCB1cGRhdGVfZXh0ZW50X3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L21pZ3JhdGUuYzo2NTpcdFx0XHQgICAgICAgZXh0NF9mc2Jsa190IHBibG9jaywgc3RydWN0IG1pZ3JhdGVfc3RydWN0ICpsYilcbmZzL2V4dDQvbWlncmF0ZS5jLTY2LXtcbi0tXG5mcy9leHQ0L21pZ3JhdGUuYz0zODk9c3RhdGljIGludCBmcmVlX2V4dF9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvbWlncmF0ZS5jLTQwOC1cbmZzL2V4dDQvbWlncmF0ZS5jOjQwOTppbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9taWdyYXRlLmMtNDEwLXtcbi0tXG5mcy9leHQ0L21pZ3JhdGUuYy02MDItICovXG5mcy9leHQ0L21pZ3JhdGUuYzo2MDM6aW50IGV4dDRfaW5kX21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvbWlncmF0ZS5jLTYwNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMwNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgZXh0NCBNaWdyYXRpb24gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMgZm9yIGBmcy9leHQ0L21pZ3JhdGUuY2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpdCBnZXRzIGJ1aWx0LiBUaGUgYGZzL2V4dDQvTWFrZWZpbGVgIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTtsbCBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGF0IE1ha2VmaWxlIGFuZCBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFscyB0aGF0IGRldGVybWluZSB3aGV0aGVyIHRoYXQgbWlncmF0aW9uIGNvZGUgaXMgYWN0dWFsbHkgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGtlcm5lbCBpbWFnZS4gVGhpcyBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDsgaXQmIzM5O3MgYSB0eXBpY2FsIGJ1aWxkIHN5c3RlbSBkZXBlbmRlbmN5IGxvb2t1cC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHNvbWV0aGluZyBsaWtlIGBvYmotJChDT05GSUdfRVhUNF9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlLm9gIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlbiBJIGNhbiB0cmFjayBiYWNrIHdoYXQgc2V0cyBgQ09ORklHX0VYVDRfTUlHUkFUSU9OYCB0byBzZWUgaWYgdGhlcmUgaXMgc29tZSBvdGhlciB0cmlnZ2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtOS1cdFx0ZXh0ZW50c19zdGF0dXMubyBmaWxlLm8gZnNtYXAubyBmc3luYy5vIGhhc2gubyBpYWxsb2MubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMDpcdFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcxMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgT3JpZ2lucyBvZiBgbWlncmF0ZS5vYCBpbiB0aGUgZXh0NCBGaWxlc3lzdGVtKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGVuY291bnRlcmVkIGBtaWdyYXRlLm9gIGFuZCwgYXMgYWx3YXlzLCB0aGUgZmlyc3QgdGhpbmcgSSBkbyBpcyBmaWd1cmUgb3V0IHdoZXJlIGl0IGNvbWVzIGZyb20uIEl0JiMzOTtzIGxpc3RlZCB1bmRlciBgZXh0NC15YCwgbWVhbmluZyBpdCYjMzk7cyBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBleHQ0IG1vZHVsZSwgYXNzdW1pbmcgdGhlIGV4dDQgbW9kdWxlIGl0c2VsZiBpcyBiZWluZyBidWlsdC4gTWFrZXMgc2Vuc2UuIE5vdywgYGV4dDQteWAgaW5kaWNhdGVzIHRoYXQgdGhlIG1vZHVsZSBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfRVhUNF9GU2AgaXMgZW5hYmxlZCwgYW5kIEkgbmVlZCB0byBjb25maXJtIHRoYXQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZvciBleHQ0LiBJIG5lZWQgdG8gY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoYXQgcGFydGljdWxhciBjb25maWcgb3B0aW9uIGdldHMgZW5hYmxlZC4gVGhlbiBJJiMzOTtsbCBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBleGFjdGx5IHdoZW4gYG1pZ3JhdGUub2AgZW5kcyB1cCBpbiB0aGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIwMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDYyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBFWFQ0IEZpbGVzeXN0ZW0gUmVmYWN0b3IqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXMgdGhpcyBjaGFuZ2UgaW4gYGZzL2V4dDQvbWlncmF0ZS5jYCB3b3J0aCBmdXp6aW5nPyBUaGUgc3Vic3lzdGVtIGlzIHRoZSBFWFQ0IGZpbGVzeXN0ZW0sIGEgY29yZSBjb21wb25lbnQgb2YgdGhlIExpbnV4IGtlcm5lbCwgc28gdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRyaWdnZXJhYmxlIHZpYSBgRVhUNF9JT0NfTUlHUkFURWAgb3IgYEZTX0lPQ19TRVRGTEFHU2AgaW9jdGxzIOKAkyB0aGF0JiMzOTtzIGFub3RoZXIgYWNjZXNzaWJpbGl0eSBjaGVjayBtYXJrLgoKVGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgaXMgd2l0aGluIHRoZSBgZmluaXNoX3JhbmdlKClgIGZ1bmN0aW9uLiBUaGUgY29kZSByZWZhY3RvcmluZyBpbnZvbHZlcyB0aGUgd2F5IGByZXR2YWxgIGlzIGhhbmRsZWQgYWZ0ZXIgYSBjYWxsIHRvIGBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KClgLiBCZWZvcmUsIGEgY29uZGl0aW9uYWwgY2hlY2sgYElTX0VSUihwYXRoKWAgZGV0ZXJtaW5lZCB0aGUgZmF0ZSBvZiBgcmV0dmFsYC4gTm93LCBgcmV0dmFsYCBpcyBzZXQgZGlyZWN0bHkgdXNpbmcgYFBUUl9FUlJfT1JfWkVSTyhwYXRoKWAuIENyaXRpY2FsbHksIGByZXR2YWxgIHdhcyBpbml0aWFsaXplZCB0byAwIHByZXZpb3VzbHkgKGxpa2VseSBieSBhIGNhbGwgdG8gYGV4dDRfZGF0YXNlbV9lbnN1cmVfY3JlZGl0c2AgdGhhdCBwcmVjZWRlZCBpdCksIGFuZCBgcmV0dmFsYCBiZWNvbWVzIDAgKmlmIGFuZCBvbmx5IGlmKiBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudCgpYCByZXR1cm5zIGEgdmFsaWQgcG9pbnRlciAobm9uLWVycm9yKS4gSWYgaXQgKmRvZXMqIHJldHVybiBhbiBlcnJvciBwb2ludGVyLCB0aGUgbmV3IGltcGxlbWVudGF0aW9uIG1pbWljcyB0aGUgcHJldmlvdXMgYmVoYXZpb3IuCgpUaGUgY2hhbmdlIHNlZW1zIHB1cmVseSBhIHJlZmFjdG9yaW5nLCBhIGNsZWFudXAuIEJ1dCwgYWNjb3JkaW5nIHRvIHNlY3Rpb25zIDEgYW5kIDMsIEkgY2FuJiMzOTt0IGJsaW5kbHkgdHJ1c3QgYSAmIzM0O3JlZmFjdG9yaW5nJiMzNDsgb3IgTkZDSSBjbGFpbSwgZXNwZWNpYWxseSB3aXRoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIFRoZSBydWxlIGlzIGNsZWFyOiAqSWYqIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuIEFuZCB0aGlzIGRlZmluaXRlbHkgdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBhIGNvcmUgc3Vic3lzdGVtLiBNb3Jlb3ZlciwgdGhlIHJlZmFjdG9yaW5nIGFmZmVjdHMgdGhlIGZsb3cgYnkgd2hpY2ggdGhlIHJlc3VsdCBvZiBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAgd2lsbCBiZSBoYW5kbGVkLCBhbmQgdGhpcyB0eXBlIG9mIHJlc3RydWN0dXJpbmcgb2YgdGhlIHJlYWNoYWJsZSBjb2RlIGlzIG1lbnRpb25lZCBzcGVjaWZpY2FsbHkgaW4gU2VjdGlvbiAzIGFzIG1lcml0aW5nIGEgZnV6emluZyBlZmZvcnQuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYHRydWVgLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byB1bmRlcnN0YW5kIGFsbCB0aGUgZW50cnlwb2ludHMgYW5kIGNhbGwgY2hhaW5zLiBJIG5lZWQgdG8gbG9vayBhdCBhbGwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG1pZ3JhdGUuY2Agb3IgZW50cnlwb2ludHMgZm9yIHRoaXMgcGF0aC4gU3BlY2lmaWNhbGx5LCBJIHNlZSBgZXh0NF9leHRfbWlncmF0ZWAgYW5kIGBleHQ0X2luZF9taWdyYXRlYCB3aXRoaW4gdGhlIHNhbWUgZmlsZS4gVG8gYmUgZXh0cmEgc3VyZSwgSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHdoYXQgaXMgY2FsbGluZyBgZmluaXNoX3JhbmdlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmluaXNoX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9taWdyYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9taWdyYXRlLmM9MTY9c3RydWN0IG1pZ3JhdGVfc3RydWN0IHtcbi0tXG5mcy9leHQ0L21pZ3JhdGUuYy0yMC1cbmZzL2V4dDQvbWlncmF0ZS5jOjIxOnN0YXRpYyBpbnQgZmluaXNoX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L21pZ3JhdGUuYy0yMi1cdFx0XHRcdHN0cnVjdCBtaWdyYXRlX3N0cnVjdCAqbGIpXG4tLVxuZnMvZXh0NC9taWdyYXRlLmM9NjQ9c3RhdGljIGludCB1cGRhdGVfZXh0ZW50X3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9taWdyYXRlLmMtODEtXHQgKi9cbmZzL2V4dDQvbWlncmF0ZS5jOjgyOlx0cmV0dmFsID0gZmluaXNoX3JhbmdlKGhhbmRsZSwgaW5vZGUsIGxiKTtcbmZzL2V4dDQvbWlncmF0ZS5jLTgzLVx0bGItXHUwMDNlZmlyc3RfcGJsb2NrID0gbGItXHUwMDNlbGFzdF9wYmxvY2sgPSBwYmxvY2s7XG4tLVxuZnMvZXh0NC9taWdyYXRlLmM9NDA5PWludCBleHQ0X2V4dF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9taWdyYXRlLmMtNTQ5LVx0ICovXG5mcy9leHQ0L21pZ3JhdGUuYzo1NTA6XHRyZXR2YWwgPSBmaW5pc2hfcmFuZ2UoaGFuZGxlLCB0bXBfaW5vZGUsIFx1MDAyNmxiKTtcbmZzL2V4dDQvbWlncmF0ZS5jLTU1MS1lcnJfb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjUwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBmaW5pc2hfcmFuZ2VgIGFuZCBgZXh0NF9leHRfbWlncmF0ZWAgZm9yIFN5bWJvbCBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYGZpbmlzaF9yYW5nZWAgYW5kIGBleHQ0X2V4dF9taWdyYXRlYCBhcmUgdXNlZCwgc3BlY2lmaWNhbGx5IGZvciBzeW1ib2wgY292ZXJhZ2UgcHVycG9zZXMuIEkgc2VlIHRoYXQgYGZpbmlzaF9yYW5nZWAgZ2V0cyBjYWxsZWQgd2l0aGluIGB1cGRhdGVfZXh0ZW50X3JhbmdlYCwgYW5kIGFsc28gZGlyZWN0bHkgd2l0aGluIGBleHQ0X2V4dF9taWdyYXRlYC4gYHVwZGF0ZV9leHRlbnRfcmFuZ2VgLCBpbiB0dXJuLCBpcyBwYXJ0IG9mIHRoZSBpbmRpcmVjdC10by1leHRlbnQgbWlncmF0aW9uIHByb2Nlc3MsIHdoaWNoIG1lYW5zIGBleHQ0X2V4dF9taWdyYXRlYCB1bHRpbWF0ZWx5IHRyaWdnZXJzIGl0LgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciBgZmluaXNoX3JhbmdlYCBpcyBhIHZpYWJsZSBzeW1ib2wgdGFyZ2V0LiBJJiMzOTt2ZSBjb25maXJtZWQgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGRlZmluZWQgaW4gYG1pZ3JhdGUuY2AuIFRoZSBjaGFsbGVuZ2Ugd2l0aCBzdGF0aWMgZnVuY3Rpb25zIGlzLCBjb3VsZCB0aGV5IGJlIGlubGluZWQ/IEJhc2VkIG9uIFNlY3Rpb24gNCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBJIHJlY2FsbCwgd2hpY2ggc3RhdGVzIHRoYXQgY29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGRvbiYjMzk7dCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgYW5kIHRodXMgY2FuJiMzOTt0IGJlIGRpcmVjdGx5IHRhcmdldGVkLiBIb3dldmVyLCB3aGlsZSBgZmluaXNoX3JhbmdlYCAqbWlnaHQqIGJlIGlubGluZWQsIGBleHQ0X2V4dF9taWdyYXRlYCBpcyBkZWZpbml0ZWx5IGEgbm9uLXN0YXRpYyBzeW1ib2wsIGFuZCBzbyBpcyBwZXJmZWN0bHkgZmluZS4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBmaW5pc2hfcmFuZ2VgLCBhcyBJIGNhbiYjMzk7dCBiZSBzdXJlIGl0IGlzIGlubGluZWQgb3Igbm90LgoKVGhlcmVmb3JlLCBmb3Igc3ltYm9sIGNvdmVyYWdlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGluY2x1ZGluZyBib3RoIGBmaW5pc2hfcmFuZ2VgIGFuZCBgZXh0NF9leHRfbWlncmF0ZWAgaXMgdGhlIHdheSB0byBnby4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgRW5hYmxlQ29uZmlncy4gSSYjMzk7bSByZWFzb25hYmx5IGNlcnRhaW4gdGhhdCBgRVhUNF9GU2AgaXMgcmVsZXZhbnQsIGJ1dCBJIG5lZWQgdG8gYmUgMTAwJSBzdXJlLiBJIHNob3VsZCBhbHNvIGRvdWJsZSBjaGVjayB0aGUgYGZzL2V4dDQvS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBpbXBvcnRhbnQgZm9yIGV4dDQgbWlncmF0aW9uLiBUaGlzIHdpbGwgcHJvdmlkZSBmdXJ0aGVyIGNvbnRleHQgZm9yIG15IGFuYWx5c2lzIGFuZCBlbnN1cmUgZnVsbCBjb3ZlcmFnZSBvZiB0aGUgcmVsZXZhbnQgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgRVhUNF9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNTpcdFx0c2VsZWN0IEpCRDJcbiAgIDY6XHRcdHNlbGVjdCBDUkMxNlxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDk6XHRcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxuICAxNDpcdFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXG4gIDE1Olx0XHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcbiAgMTY6XHRcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXG4gIDE3Olx0XHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxuICAxODpcdFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcbiAgMTk6XHRcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxuICAyMDpcdFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxuICAyMzpcdFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXG4gIDI0Olx0XHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XG4gIDI1Olx0XHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcbiAgMjY6XHRcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXG4gIDI3Olx0XHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXG4gIDI4Olx0XHQgIGNvbXBhdGlibGUuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcbiAgMzE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4gIDM2Olx0XHRib29sIFwmIzM0O1VzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDM4Olx0XHRkZXBlbmRzIG9uIEVYVDJfRlM9blxuICAzOTpcdFx0ZGVmYXVsdCB5XG4gIDQwOlx0XHRoZWxwXG4gIDQxOlx0XHQgIEFsbG93IHRoZSBleHQ0IGZpbGUgc3lzdGVtIGRyaXZlciBjb2RlIHRvIGJlIHVzZWQgZm9yIGV4dDJcbiAgNDI6XHRcdCAgZmlsZSBzeXN0ZW0gbW91bnRzLiAgVGhpcyBhbGxvd3MgdXNlcnMgdG8gcmVkdWNlIHRoZWlyXG4gIDQzOlx0XHQgIGNvbXBpbGVkIGtlcm5lbCBzaXplIGJ5IHVzaW5nIG9uZSBmaWxlIHN5c3RlbSBkcml2ZXIgZm9yXG4gIDQ0Olx0XHQgIGV4dDIsIGV4dDMsIGFuZCBleHQ0IGZpbGUgc3lzdGVtcy5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcbiAgNDc6XHRcdGJvb2wgXCYjMzQ7RXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuICA0ODpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDQ5Olx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDUwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNjgKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVYVDRfRlMgRnV6emluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBsYW5kc2NhcGUgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBoZXJlLiBNeSBmb2N1cyBzaG91bGQgYmUgc29sZWx5IG9uIGBFWFQ0X0ZTYCBhcyB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLiBMb29rcyBsaWtlIHRoZSB0YXJnZXQgc3ltYm9scyBJIG5lZWQgdG8gemVybyBpbiBvbiBhcmUgYGZpbmlzaF9yYW5nZWAgYW5kIGBleHQ0X2V4dF9taWdyYXRlYC4gUGVyZmVjdC4gVGhleSYjMzk7cmUgYm90aCBwcmltZSBjYW5kaWRhdGVzLiBUaGUgY29kZSBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgYFdvcnRoRnV6emluZzogdHJ1ZWAgZmxhZy4KClRoZSByZWFzb25pbmcmIzM5O3MgY2xlYXI6IHRoZSBwYXRjaCBpcyBmaWRkbGluZyB3aXRoIGVycm9yIGFuZCByZXR1cm4gdmFsdWUgaGFuZGxpbmcgd2l0aGluIGBmaW5pc2hfcmFuZ2UoKWAsIHdoaWNoIGxpdmVzIGluIGBmcy9leHQ0L21pZ3JhdGUuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGllZCB0byBleHQ0JiMzOTtzIGJsb2NrLXRvLWV4dGVudHMgZmlsZSBtaWdyYXRpb24gcHJvY2Vzcywga2lja2VkIG9mZiBieSB0aGUgYEVYVDRfSU9DX01JR1JBVEVgIGlvY3RsLiBHb29kIG5ld3MgaXMgdGhhdCBpdCYjMzk7cyByZWFjaGFibGUgaW4gY29tbW9uIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cy4KCkFscmlnaHQsIHRpbWUgdG8gZmVlZCB0aGVzZSB2YWx1ZXMgaW50byBgc2V0LXJlc3VsdHNgLiBMZXQmIzM5O3MgZ2V0IHRoaXMgcm9sbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmaW5pc2hfcmFuZ2UmIzM0OywKICAgICYjMzQ7ZXh0NF9leHRfbWlncmF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGFuZCByZXR1cm4gdmFsdWUgcHJvcGFnYXRpb24gdXNpbmcgUFRSX0VSUl9PUl9aRVJPIGluIGV4dDQmIzM5O3MgZmluaXNoX3JhbmdlKCkgaW4gZnMvZXh0NC9taWdyYXRlLmMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgZXh0NCYjMzk7cyBleHRlbnQgbWlncmF0aW9uIG1lY2hhbmlzbSwgYWNjZXNzaWJsZSB2aWEgaW9jdGxzIChlLmcuLCBFWFQ0X0lPQ19NSUdSQVRFKS4gU2luY2UgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGlzIG1vZGlmaWVkLCBmdXp6aW5nIGlzIHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZpbmlzaF9yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X2V4dF9taWdyYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgYW5kIHJldHVybiB2YWx1ZSBwcm9wYWdhdGlvbiB1c2luZyBQVFJfRVJSX09SX1pFUk8gaW4gZXh0NCYjMzk7cyBmaW5pc2hfcmFuZ2UoKSBpbiBmcy9leHQ0L21pZ3JhdGUuYy4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiBleHQ0JiMzOTtzIGV4dGVudCBtaWdyYXRpb24gbWVjaGFuaXNtLCBhY2Nlc3NpYmxlIHZpYSBpb2N0bHMgKGUuZy4sIEVYVDRfSU9DX01JR1JBVEUpLiBTaW5jZSByZWFjaGFibGUga2VybmVsIGNvZGUgaXMgbW9kaWZpZWQsIGZ1enppbmcgaXMgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA0OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyBlcnJvciBjb2RlIGFzc2lnbm1lbnQgaW4gZXh0NCYjMzk7cyBmaW5pc2hfcmFuZ2UoKSBmdW5jdGlvbiBieSByZXBsYWNpbmcgYGlmIChJU19FUlIocGF0aCkpIHJldHZhbCA9IFBUUl9FUlIocGF0aCk7YCB3aXRoIGByZXR2YWwgPSBQVFJfRVJSX09SX1pFUk8ocGF0aClgLiBUaGlzIGlzIGEgcHVyZWx5IGNvc21ldGljIHJlZmFjdG9yaW5nIHRoYXQgbW9kaWZpZXMgYSBzY2FsYXIgcmV0dXJuIGNvZGUgdmFyaWFibGUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBhY2Nlc3MgdW5pbml0aWFsaXplZCBkYXRhLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50OyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMTI0MDg2NWExZWJhYWQ3YmI0MzhhMGQyYzZiNjc2NTg2ZmNmOTZkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAwNDozNjoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWlncmF0ZS5jIGIvZnMvZXh0NC9taWdyYXRlLmMKaW5kZXggNWQ2MGVmMTBmZTExMC4uZDQ2N2I1YTEzYzYyZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9taWdyYXRlLmMKQEAgLTUzLDggJiM0Mzs1Myw3IEBAIHN0YXRpYyBpbnQgZmluaXNoX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJaWYgKHJldHZhbCAmbHQ7IDApCiAJCWdvdG8gZXJyX291dDsKIAlwYXRoID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmYW1wO25ld2V4dCwgMCk7Ci0JaWYgKElTX0VSUihwYXRoKSkKLQkJcmV0dmFsID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpOwogZXJyX291dDoKIAl1cF93cml0ZSgoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX2RhdGFfc2VtKSk7CiAJZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuCgoqKkFuYWx5emluZyB0aGlzIFBhdGNoOiBBIEZvY3VzZWQgQXBwcm9hY2gqKgoKQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggd2l0aCBwcmVjaXNpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgd2l0aGluIHRoZSBgZnMvZXh0NGAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtaWdyYXRlLmNgLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyB1c2Ugb3VyIGZhbWlsaWFyIHRvb2xzLiYjMzQ7IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGZzL2V4dDQvbWlncmF0ZS5jYCwgYW5kIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcHVsbGluZyB1cCB0aGUgZmlsZS4gSSB3YW50IHRvIHF1aWNrbHkgemVybyBpbiBvbiBhcm91bmQgbGluZSA1MyB1c2luZyBgcmVhZC1maWxlYCBhbmQgaW5zcGVjdCB0aGF0IGFyZWEgZGlyZWN0bHkuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBxdWlja2VzdCBzZW5zZSBvZiB0aGUgbG9jYWwgY2hhbmdlcyBoZXJlLiBUaGlzIHdpbGwgbGV0IG1lIHF1aWNrbHkgZ3Jhc3AgdGhlIGxvY2FsIGNvbnRleHQgYmVmb3JlIGdvaW5nIHdpZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvbWlncmF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMVxuICAgMjpcdC8qXG4gICAzOlx0ICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiwgMjAwN1xuICAgNDpcdCAqIEF1dGhvciBBbmVlc2ggS3VtYXIgSy5WIFx1MDAzY2FuZWVzaC5rdW1hckBsaW51eC52bmV0LmlibS5jb21cdTAwM2VcbiAgIDU6XHQgKlxuICAgNjpcdCAqL1xuICAgNzpcdFxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFwmIzM0O2V4dDRfamJkMi5oXCYjMzQ7XG4gIDEwOlx0I2luY2x1ZGUgXCYjMzQ7ZXh0NF9leHRlbnRzLmhcJiMzNDtcbiAgMTE6XHRcbiAgMTI6XHQvKlxuICAxMzpcdCAqIFRoZSBjb250aWd1b3VzIGJsb2NrcyBkZXRhaWxzIHdoaWNoIGNhbiBiZVxuICAxNDpcdCAqIHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGV4dGVudFxuICAxNTpcdCAqL1xuICAxNjpcdHN0cnVjdCBtaWdyYXRlX3N0cnVjdCB7XG4gIDE3Olx0XHRleHQ0X2xibGtfdCBmaXJzdF9ibG9jaywgbGFzdF9ibG9jaywgY3Vycl9ibG9jaztcbiAgMTg6XHRcdGV4dDRfZnNibGtfdCBmaXJzdF9wYmxvY2ssIGxhc3RfcGJsb2NrO1xuICAxOTpcdH07XG4gIDIwOlx0XG4gIDIxOlx0c3RhdGljIGludCBmaW5pc2hfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgMjI6XHRcdFx0XHRcdHN0cnVjdCBtaWdyYXRlX3N0cnVjdCAqbGIpXG4gIDIzOlx0XG4gIDI0Olx0e1xuICAyNTpcdFx0aW50IHJldHZhbCA9IDAsIG5lZWRlZDtcbiAgMjY6XHRcdHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleHQ7XG4gIDI3Olx0XHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aDtcbiAgMjg6XHRcdGlmIChsYi1cdTAwM2VmaXJzdF9wYmxvY2sgPT0gMClcbiAgMjk6XHRcdFx0cmV0dXJuIDA7XG4gIDMwOlx0XG4gIDMxOlx0XHQvKiBBZGQgdGhlIGV4dGVudCB0byB0ZW1wIGlub2RlKi9cbiAgMzI6XHRcdG5ld2V4dC5lZV9ibG9jayA9IGNwdV90b19sZTMyKGxiLVx1MDAzZWZpcnN0X2Jsb2NrKTtcbiAgMzM6XHRcdG5ld2V4dC5lZV9sZW4gICA9IGNwdV90b19sZTE2KGxiLVx1MDAzZWxhc3RfYmxvY2sgLSBsYi1cdTAwM2VmaXJzdF9ibG9jayAmIzQzOyAxKTtcbiAgMzQ6XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleHQsIGxiLVx1MDAzZWZpcnN0X3BibG9jayk7XG4gIDM1Olx0XHQvKiBMb2NraW5nIG9ubHkgZm9yIGNvbnZlbmllbmNlIHNpbmNlIHdlIGFyZSBvcGVyYXRpbmcgb24gdGVtcCBpbm9kZSAqL1xuICAzNjpcdFx0ZG93bl93cml0ZShcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YV9zZW0pO1xuICAzNzpcdFx0cGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIGxiLVx1MDAzZWZpcnN0X2Jsb2NrLCBOVUxMLCAwKTtcbiAgMzg6XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbiAgMzk6XHRcdFx0cmV0dmFsID0gUFRSX0VSUihwYXRoKTtcbiAgNDA6XHRcdFx0Z290byBlcnJfb3V0O1xuICA0MTpcdFx0fVxuICA0MjpcdFxuICA0MzpcdFx0LypcbiAgNDQ6XHRcdCAqIENhbGN1bGF0ZSB0aGUgY3JlZGl0IG5lZWRlZCB0byBpbnNlcnRpbmcgdGhpcyBleHRlbnRcbiAgNDU6XHRcdCAqIFNpbmNlIHdlIGFyZSBkb2luZyB0aGlzIGluIGxvb3Agd2UgbWF5IGFjY3VtdWxhdGUgZXh0cmFcbiAgNDY6XHRcdCAqIGNyZWRpdC4gQnV0IGJlbG93IHdlIHRyeSB0byBub3QgYWNjdW11bGF0ZSB0b28gbXVjaFxuICA0NzpcdFx0ICogb2YgdGhlbSBieSByZXN0YXJ0aW5nIHRoZSBqb3VybmFsLlxuICA0ODpcdFx0ICovXG4gIDQ5Olx0XHRuZWVkZWQgPSBleHQ0X2V4dF9jYWxjX2NyZWRpdHNfZm9yX3NpbmdsZV9leHRlbnQoaW5vZGUsXG4gIDUwOlx0XHRcdCAgICBsYi1cdTAwM2VsYXN0X2Jsb2NrIC0gbGItXHUwMDNlZmlyc3RfYmxvY2sgJiM0MzsgMSwgcGF0aCk7XG4gIDUxOlx0XG4gIDUyOlx0XHRyZXR2YWwgPSBleHQ0X2RhdGFzZW1fZW5zdXJlX2NyZWRpdHMoaGFuZGxlLCBpbm9kZSwgbmVlZGVkLCBuZWVkZWQsIDApO1xuICA1MzpcdFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiAgNTQ6XHRcdFx0Z290byBlcnJfb3V0O1xuICA1NTpcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXh0LCAwKTtcbiAgNTY6XHRcdHJldHZhbCA9IFBUUl9FUlJfT1JfWkVSTyhwYXRoKTtcbiAgNTc6XHRlcnJfb3V0OlxuICA1ODpcdFx0dXBfd3JpdGUoKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9kYXRhX3NlbSkpO1xuICA1OTpcdFx0ZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpO1xuICA2MDpcdFx0bGItXHUwMDNlZmlyc3RfcGJsb2NrID0gMDtcbiAgNjE6XHRcdHJldHVybiByZXR2YWw7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdHN0YXRpYyBpbnQgdXBkYXRlX2V4dGVudF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICA2NTpcdFx0XHRcdCAgICAgICBleHQ0X2ZzYmxrX3QgcGJsb2NrLCBzdHJ1Y3QgbWlncmF0ZV9zdHJ1Y3QgKmxiKVxuICA2NjpcdHtcbiAgNjc6XHRcdGludCByZXR2YWw7XG4gIDY4Olx0XHQvKlxuICA2OTpcdFx0ICogU2VlIGlmIHdlIGNhbiBhZGQgb24gdG8gdGhlIGV4aXN0aW5nIHJhbmdlIChpZiBpdCBleGlzdHMpXG4gIDcwOlx0XHQgKi9cbiAgNzE6XHRcdGlmIChsYi1cdTAwM2VmaXJzdF9wYmxvY2sgXHUwMDI2XHUwMDI2XG4gIDcyOlx0XHRcdChsYi1cdTAwM2VsYXN0X3BibG9jayYjNDM7MSA9PSBwYmxvY2spIFx1MDAyNlx1MDAyNlxuICA3MzpcdFx0XHQobGItXHUwMDNlbGFzdF9ibG9jayYjNDM7MSA9PSBsYi1cdTAwM2VjdXJyX2Jsb2NrKSkge1xuICA3NDpcdFx0XHRsYi1cdTAwM2VsYXN0X3BibG9jayA9IHBibG9jaztcbiAgNzU6XHRcdFx0bGItXHUwMDNlbGFzdF9ibG9jayA9IGxiLVx1MDAzZWN1cnJfYmxvY2s7XG4gIDc2Olx0XHRcdGxiLVx1MDAzZWN1cnJfYmxvY2smIzQzOyYjNDM7O1xuICA3NzpcdFx0XHRyZXR1cm4gMDtcbiAgNzg6XHRcdH1cbiAgNzk6XHRcdC8qXG4gIDgwOlx0XHQgKiBTdGFydCBhIG5ldyByYW5nZS5cbiAgODE6XHRcdCAqL1xuICA4MjpcdFx0cmV0dmFsID0gZmluaXNoX3JhbmdlKGhhbmRsZSwgaW5vZGUsIGxiKTtcbiAgODM6XHRcdGxiLVx1MDAzZWZpcnN0X3BibG9jayA9IGxiLVx1MDAzZWxhc3RfcGJsb2NrID0gcGJsb2NrO1xuICA4NDpcdFx0bGItXHUwMDNlZmlyc3RfYmxvY2sgPSBsYi1cdTAwM2VsYXN0X2Jsb2NrID0gbGItXHUwMDNlY3Vycl9ibG9jaztcbiAgODU6XHRcdGxiLVx1MDAzZWN1cnJfYmxvY2smIzQzOyYjNDM7O1xuICA4NjpcdFx0cmV0dXJuIHJldHZhbDtcbiAgODc6XHR9XG4gIDg4Olx0XG4gIDg5Olx0c3RhdGljIGludCB1cGRhdGVfaW5kX2V4dGVudF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICA5MDpcdFx0XHRcdFx0ICAgZXh0NF9mc2Jsa190IHBibG9jayxcbiAgOTE6XHRcdFx0XHRcdCAgIHN0cnVjdCBtaWdyYXRlX3N0cnVjdCAqbGIpXG4gIDkyOlx0e1xuICA5MzpcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiAgOTQ6XHRcdF9fbGUzMiAqaV9kYXRhO1xuICA5NTpcdFx0aW50IGksIHJldHZhbCA9IDA7XG4gIDk2Olx0XHR1bnNpZ25lZCBsb25nIG1heF9lbnRyaWVzID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSBcdTAwM2VcdTAwM2UgMjtcbiAgOTc6XHRcbiAgOTg6XHRcdGJoID0gZXh0NF9zYl9icmVhZChpbm9kZS1cdTAwM2VpX3NiLCBwYmxvY2ssIDApO1xuICA5OTpcdFx0aWYgKElTX0VSUihiaCkpXG4gMTAwOlx0XHRcdHJldHVybiBQVFJfRVJSKGJoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyOQoJCQkJCQkJb3V0cHV0OiAxNDIKCQkJCQkJCXRob3VnaHRzOiA3MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29kZSBDbGVhbnVwIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiBzdHJlYW1saW5pbmcgdGhlIGBmaW5pc2hfcmFuZ2VgIGZ1bmN0aW9uIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVwbGFjaW5nIGEgc2VxdWVuY2Ugb2Ygc3RhdGVtZW50cyB3aXRoIHRoZSBgUFRSX0VSUl9PUl9aRVJPYCBtYWNyby4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoZSBwcmlvciBpbXBsZW1lbnRhdGlvbiBoYWQgc29tZSByZWR1bmRhbmN5LiBgcmV0dmFsYCB3YXMgZ2V0dGluZyBhc3NpZ25lZCBhIHZhbHVlIGZyb20gYSBmdW5jdGlvbiAoYGV4dDRfZGF0YXNlbV9lbnN1cmVfY3JlZGl0cyguLi4pYCAtIHdoaWNoLCBpbXBvcnRhbnRseSwgcmV0dXJuZWQgMCBvciBhIG5lZ2F0aXZlIGVycm9yKSwgYnV0IHRoZW4gaXQgY291bGQgYmUgb3ZlcndyaXR0ZW4gYmFzZWQgb24gdGhlIHJldHVybiB2YWx1ZSBvZiBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAuIE5vdywgYFBUUl9FUlJfT1JfWkVSTyhwYXRoKWAgZWZmZWN0aXZlbHkgY29uc29saWRhdGVzIHRoYXQgbG9naWMuIElmIGBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50YCByZXR1cm5zIGFuIGVycm9yIHBvaW50ZXIgKGBJU19FUlIocGF0aClgIGlzIHRydWUpLCBgcmV0dmFsYCBiZWNvbWVzIHRoYXQgZXJyb3IuIElmIGl0IHN1Y2NlZWRzIChyZXR1cm5zIGEgdmFsaWQgcG9pbnRlciwgYElTX0VSUihwYXRoKWAgaXMgZmFsc2UpLCBgcmV0dmFsYCBiZWNvbWVzIHplcm8uIEl0JiMzOTtzIGEgY2xlYW4sIGVmZmljaWVudCB3YXkgdG8gaGFuZGxlIHRoZSBlcnJvciBjaGVja2luZy4KClRoZSBtYWluIGNvbmNlcm4gaW4gYSBjb2RlIGNoYW5nZSBsaWtlIHRoaXMgaXMgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMsIHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkYXRhIGxlYWtzLCBvciBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgZnV6emVycyBsaWtlIEtBU0FOIG9yIEtNU0FOIG1pZ2h0IGZsYWcuCgpIb3dldmVyLCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIGEgc2FmZSBzaW1wbGlmaWNhdGlvbi4gYHJldHZhbGAgaXMgYW4gaW50ZWdlciwgc28gdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyBkaXJlY3RseSBmcm9tIHRoYXQgdmFyaWFibGUuIGBwYXRoYCBpcyBhIHBvaW50ZXIgcmV0dXJuZWQgYnkgd2VsbC1kZWZpbmVkIGFsbG9jYXRpb24gb3IgcmV0cmlldmFsIGZ1bmN0aW9ucyAoYGV4dDRfZXh0X2luc2VydF9leHRlbnRgLCBgZXh0NF9maW5kX2V4dGVudGApIGFuZCBwcm9wZXJseSBmcmVlZCAoYGV4dDRfZnJlZV9leHRfcGF0aGAgaGFuZGxlcyBib3RoIHZhbGlkIHBvaW50ZXJzIGFuZCBlcnJvciBwb2ludGVycy9OVUxMKS4KCkkmIzM5O3ZlIGFsc28gY29uc2lkZXJlZCBhbnkgS01TQU4tc3BlY2lmaWMgY29uY2VybnMuIEtNU0FOIGZvY3VzZXMgb24ga2VybmVsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgY29uZmxpY3RpbmcgYWNjZXNzZXMuIEhvd2V2ZXIsIGluIHRoaXMgcGF0Y2gsIHRoZSBtZW1vcnkgaGFuZGxpbmcgaXMgdmVyeSBzdHJhaWdodGZvcndhcmQgYW5kIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgc28gS01TQU4gc2hvdWxkIG5vdCBiZSB0cmlnZ2VyZWQgaGVyZS4gVGhlIGNsZWFudXAgc2VlbXMgdG8gYWZmZWN0IG9ubHkgY29udHJvbCBmbG93IGJhc2VkIG9uIGVycm9yIGNoZWNraW5nLiBUaGUgY29kZSBpcyBvbmx5IHNpbXBsaWZ5aW5nIGFuIGFzc2lnbm1lbnQgb2YgYSBwYXRoIGJhc2VkIG9uIGl0cyB2YWxpZGl0eSB1c2luZyBhbiBleGlzdGluZyBmdW5jdGlvbiwgc28gdGhhdCBpcyBzYWZlLgoKVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjbGVhbnVwLCBhbmQgaXMgc2FmZSBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gVGhlcmUgYXJlIG5vIEtNU0FOIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGNvZGUgYXNzaWdubWVudCBpbiBleHQ0JiMzOTtzIGZpbmlzaF9yYW5nZSgpIGZ1bmN0aW9uIGJ5IHJlcGxhY2luZyBgaWYgKElTX0VSUihwYXRoKSkgcmV0dmFsID0gUFRSX0VSUihwYXRoKTtgIHdpdGggYHJldHZhbCA9IFBUUl9FUlJfT1JfWkVSTyhwYXRoKWAuIFRoaXMgaXMgYSBwdXJlbHkgY29zbWV0aWMgcmVmYWN0b3JpbmcgdGhhdCBtb2RpZmllcyBhIHNjYWxhciByZXR1cm4gY29kZSB2YXJpYWJsZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIGFjY2VzcyB1bmluaXRpYWxpemVkIGRhdGEuIFN0YW5kYXJkIEtBU0FOL3Nhbml0aXplciBidWlsZHMgYXJlIHN1ZmZpY2llbnQ7IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgY29kZSBhc3NpZ25tZW50IGluIGV4dDQmIzM5O3MgZmluaXNoX3JhbmdlKCkgZnVuY3Rpb24gYnkgcmVwbGFjaW5nIGBpZiAoSVNfRVJSKHBhdGgpKSByZXR2YWwgPSBQVFJfRVJSKHBhdGgpO2Agd2l0aCBgcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyByZWZhY3RvcmluZyB0aGF0IG1vZGlmaWVzIGEgc2NhbGFyIHJldHVybiBjb2RlIHZhcmlhYmxlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjoxNi44ODY3NjA2NjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzcyMzA2NTI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmluaXNoX3JhbmdlXCIsXG4gICAgXCJleHQ0X2V4dF9taWdyYXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGNvZGUgYXNzaWdubWVudCBpbiBleHQ0J3MgZmluaXNoX3JhbmdlKCkgZnVuY3Rpb24gYnkgcmVwbGFjaW5nIGBpZiAoSVNfRVJSKHBhdGgpKSByZXR2YWwgPSBQVFJfRVJSKHBhdGgpO2Agd2l0aCBgcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyByZWZhY3RvcmluZyB0aGF0IG1vZGlmaWVzIGEgc2NhbGFyIHJldHVybiBjb2RlIHZhcmlhYmxlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgYW5kIHJldHVybiB2YWx1ZSBwcm9wYWdhdGlvbiB1c2luZyBQVFJfRVJSX09SX1pFUk8gaW4gZXh0NCdzIGZpbmlzaF9yYW5nZSgpIGluIGZzL2V4dDQvbWlncmF0ZS5jLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIGV4dDQncyBleHRlbnQgbWlncmF0aW9uIG1lY2hhbmlzbSwgYWNjZXNzaWJsZSB2aWEgaW9jdGxzIChlLmcuLCBFWFQ0X0lPQ19NSUdSQVRFKS4gU2luY2UgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGlzIG1vZGlmaWVkLCBmdXp6aW5nIGlzIHdhcnJhbnRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6MTYuODg2NzY4MjIxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE2Mzk1OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjEyNDA4NjVhMWViYWFkN2JiNDM4YTBkMmM2YjY3NjU4NmZjZjk2ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM2OjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWlncmF0ZS5jIGIvZnMvZXh0NC9taWdyYXRlLmNcXG5pbmRleCA1ZDYwZWYxMGZlMTEwLi5kNDY3YjVhMTNjNjJlIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jXFxuKysrIGIvZnMvZXh0NC9taWdyYXRlLmNcXG5AQCAtNTMsOCArNTMsNyBAQCBzdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXHRwYXRoID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBcXHUwMDI2bmV3ZXh0LCAwKTtcXG4tXFx0aWYgKElTX0VSUihwYXRoKSlcXG4tXFx0XFx0cmV0dmFsID0gUFRSX0VSUihwYXRoKTtcXG4rXFx0cmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpO1xcbiBlcnJfb3V0OlxcbiBcXHR1cF93cml0ZSgoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZGF0YV9zZW0pKTtcXG4gXFx0ZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjoxOC40MDQwNjE0NjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxNzU3MDAzNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaW5pc2hfcmFuZ2VcIixcbiAgICBcImV4dDRfZXh0X21pZ3JhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGFuZCByZXR1cm4gdmFsdWUgcHJvcGFnYXRpb24gdXNpbmcgUFRSX0VSUl9PUl9aRVJPIGluIGV4dDQncyBmaW5pc2hfcmFuZ2UoKSBpbiBmcy9leHQ0L21pZ3JhdGUuYy4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiBleHQ0J3MgZXh0ZW50IG1pZ3JhdGlvbiBtZWNoYW5pc20sIGFjY2Vzc2libGUgdmlhIGlvY3RscyAoZS5nLiwgRVhUNF9JT0NfTUlHUkFURSkuIFNpbmNlIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBpcyBtb2RpZmllZCwgZnV6emluZyBpcyB3YXJyYW50ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjEyNDA4NjVhMWViYWFkN2JiNDM4YTBkMmM2YjY3NjU4NmZjZjk2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDQ6MzY6MTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jXG5pbmRleCA1ZDYwZWYxMGZlMTEwLi5kNDY3YjVhMTNjNjJlIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9taWdyYXRlLmNcbisrKyBiL2ZzL2V4dDQvbWlncmF0ZS5jXG5AQCAtNTMsOCArNTMsNyBAQCBzdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfb3V0O1xuIFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXh0LCAwKTtcbi1cdGlmIChJU19FUlIocGF0aCkpXG4tXHRcdHJldHZhbCA9IFBUUl9FUlIocGF0aCk7XG4rXHRyZXR2YWwgPSBQVFJfRVJSX09SX1pFUk8ocGF0aCk7XG4gZXJyX291dDpcbiBcdHVwX3dyaXRlKChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YV9zZW0pKTtcbiBcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjE4LjQwNDA2Mzc1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MTk5MDU2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IE1pZ3JhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBpdHMgaW5zdHJ1Y3Rpb25zLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRoZSBkaWZmLCBvZiBjb3Vyc2UuIFJpZ2h0IGF3YXksIEkgc2VlIHRoZSBjaGFuZ2UgaW4gYGZzL2V4dDQvbWlncmF0ZS5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGZpbmlzaF9yYW5nZWAgZnVuY3Rpb24uIEludGVyZXN0aW5nLCB0aGV5J3ZlIHJlcGxhY2VkIHRoZSBkaXJlY3QgY2hlY2sgZm9yIGFuIGVycm9yIHdpdGggYElTX0VSUihwYXRoKWAgYW5kIHRoZSBzdWJzZXF1ZW50IGFzc2lnbm1lbnQgb2YgYHJldHZhbGAgd2l0aCBhIG1vcmUgY29uY2lzZSBgcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gVGhpcyBpcyBjb21tb247IGl0J3MgbGlrZWx5IGEgc2ltcGxpZmljYXRpb24gdG8gaGFuZGxlIHRoZSBlcnJvciByZXR1cm4gZnJvbSBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAuIE5vIGJpZyBkZWFsIGF0IHRoaXMgcG9pbnQuXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgY29udGV4dC4gSSdsbCBxdWlja2x5IGxvb2sgdXAgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGZzL2V4dDQvbWlncmF0ZS5jYCwgcHJvYmFibHkgYXJvdW5kIGxpbmUgNTMsIHRvIGdyYXNwIHdoYXQgYGZpbmlzaF9yYW5nZWAgaXMgKmRvaW5nKiBhbmQsIGNyaXRpY2FsbHksIHdobydzIGNhbGxpbmcgaXQuIFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBjbGFyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXJ0aWN1bGFyIGNoYW5nZSBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIHRvIGNvbnNpZGVyLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBlcnJvciBoYW5kbGluZyBpcyBzdGlsbCBjb3JyZWN0IGFuZCB0aGF0IG5vIGluZm9ybWF0aW9uIGlzIGJlaW5nIGxvc3Qgd2l0aCB0aGlzIGNoYW5nZS4gSXQgd291bGQgYWxzbyBiZSBnb29kIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIHVzZSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgYXNzdW1wdGlvbnMgaXQgbWFrZXMuIEkgc2hvdWxkIGFsc28gaW52ZXN0aWdhdGUgd2hldGhlciB0aGlzIGNoYW5nZSBhbHNvIGV4aXN0cyBpbiB0aGUgbGF0ZXN0IHJlbGVhc2VzIG9yIG5vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjIyLjAyMzk3MTg3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L21pZ3JhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXG4gIDMxOlxcdFxcdC8qIEFkZCB0aGUgZXh0ZW50IHRvIHRlbXAgaW5vZGUqL1xcbiAgMzI6XFx0XFx0bmV3ZXh0LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIobGItXFx1MDAzZWZpcnN0X2Jsb2NrKTtcXG4gIDMzOlxcdFxcdG5ld2V4dC5lZV9sZW4gICA9IGNwdV90b19sZTE2KGxiLVxcdTAwM2VsYXN0X2Jsb2NrIC0gbGItXFx1MDAzZWZpcnN0X2Jsb2NrICsgMSk7XFxuICAzNDpcXHRcXHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXFx1MDAyNm5ld2V4dCwgbGItXFx1MDAzZWZpcnN0X3BibG9jayk7XFxuICAzNTpcXHRcXHQvKiBMb2NraW5nIG9ubHkgZm9yIGNvbnZlbmllbmNlIHNpbmNlIHdlIGFyZSBvcGVyYXRpbmcgb24gdGVtcCBpbm9kZSAqL1xcbiAgMzY6XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuICAzNzpcXHRcXHRwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgbGItXFx1MDAzZWZpcnN0X2Jsb2NrLCBOVUxMLCAwKTtcXG4gIDM4OlxcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG4gIDM5OlxcdFxcdFxcdHJldHZhbCA9IFBUUl9FUlIocGF0aCk7XFxuICA0MDpcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuICA0MTpcXHRcXHR9XFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdC8qXFxuICA0NDpcXHRcXHQgKiBDYWxjdWxhdGUgdGhlIGNyZWRpdCBuZWVkZWQgdG8gaW5zZXJ0aW5nIHRoaXMgZXh0ZW50XFxuICA0NTpcXHRcXHQgKiBTaW5jZSB3ZSBhcmUgZG9pbmcgdGhpcyBpbiBsb29wIHdlIG1heSBhY2N1bXVsYXRlIGV4dHJhXFxuICA0NjpcXHRcXHQgKiBjcmVkaXQuIEJ1dCBiZWxvdyB3ZSB0cnkgdG8gbm90IGFjY3VtdWxhdGUgdG9vIG11Y2hcXG4gIDQ3OlxcdFxcdCAqIG9mIHRoZW0gYnkgcmVzdGFydGluZyB0aGUgam91cm5hbC5cXG4gIDQ4OlxcdFxcdCAqL1xcbiAgNDk6XFx0XFx0bmVlZGVkID0gZXh0NF9leHRfY2FsY19jcmVkaXRzX2Zvcl9zaW5nbGVfZXh0ZW50KGlub2RlLFxcbiAgNTA6XFx0XFx0XFx0ICAgIGxiLVxcdTAwM2VsYXN0X2Jsb2NrIC0gbGItXFx1MDAzZWZpcnN0X2Jsb2NrICsgMSwgcGF0aCk7XFxuICA1MTpcXHRcXG4gIDUyOlxcdFxcdHJldHZhbCA9IGV4dDRfZGF0YXNlbV9lbnN1cmVfY3JlZGl0cyhoYW5kbGUsIGlub2RlLCBuZWVkZWQsIG5lZWRlZCwgMCk7XFxuICA1MzpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gIDU0OlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gIDU1OlxcdFxcdHBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIFxcdTAwMjZuZXdleHQsIDApO1xcbiAgNTY6XFx0XFx0cmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpO1xcbiAgNTc6XFx0ZXJyX291dDpcXG4gIDU4OlxcdFxcdHVwX3dyaXRlKChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhX3NlbSkpO1xcbiAgNTk6XFx0XFx0ZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpO1xcbiAgNjA6XFx0XFx0bGItXFx1MDAzZWZpcnN0X3BibG9jayA9IDA7XFxuICA2MTpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAgNjI6XFx0fVxcbiAgNjM6XFx0XFxuICA2NDpcXHRzdGF0aWMgaW50IHVwZGF0ZV9leHRlbnRfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gIDY1OlxcdFxcdFxcdFxcdCAgICAgICBleHQ0X2ZzYmxrX3QgcGJsb2NrLCBzdHJ1Y3QgbWlncmF0ZV9zdHJ1Y3QgKmxiKVxcbiAgNjY6XFx0e1xcbiAgNjc6XFx0XFx0aW50IHJldHZhbDtcXG4gIDY4OlxcdFxcdC8qXFxuICA2OTpcXHRcXHQgKiBTZWUgaWYgd2UgY2FuIGFkZCBvbiB0byB0aGUgZXhpc3RpbmcgcmFuZ2UgKGlmIGl0IGV4aXN0cylcXG4gIDcwOlxcdFxcdCAqL1xcbiAgNzE6XFx0XFx0aWYgKGxiLVxcdTAwM2VmaXJzdF9wYmxvY2sgXFx1MDAyNlxcdTAwMjZcXG4gIDcyOlxcdFxcdFxcdChsYi1cXHUwMDNlbGFzdF9wYmxvY2srMSA9PSBwYmxvY2spIFxcdTAwMjZcXHUwMDI2XFxuICA3MzpcXHRcXHRcXHQobGItXFx1MDAzZWxhc3RfYmxvY2srMSA9PSBsYi1cXHUwMDNlY3Vycl9ibG9jaykpIHtcXG4gIDc0OlxcdFxcdFxcdGxiLVxcdTAwM2VsYXN0X3BibG9jayA9IHBibG9jaztcXG4gIDc1OlxcdFxcdFxcdGxiLVxcdTAwM2VsYXN0X2Jsb2NrID0gbGItXFx1MDAzZWN1cnJfYmxvY2s7XFxuICA3NjpcXHRcXHRcXHRsYi1cXHUwMDNlY3Vycl9ibG9jaysrO1xcbiAgNzc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA3ODpcXHRcXHR9XFxuICA3OTpcXHRcXHQvKlxcbiAgODA6XFx0XFx0ICogU3RhcnQgYSBuZXcgcmFuZ2UuXFxuICA4MTpcXHRcXHQgKi9cXG4gIDgyOlxcdFxcdHJldHZhbCA9IGZpbmlzaF9yYW5nZShoYW5kbGUsIGlub2RlLCBsYik7XFxuICA4MzpcXHRcXHRsYi1cXHUwMDNlZmlyc3RfcGJsb2NrID0gbGItXFx1MDAzZWxhc3RfcGJsb2NrID0gcGJsb2NrO1xcbiAgODQ6XFx0XFx0bGItXFx1MDAzZWZpcnN0X2Jsb2NrID0gbGItXFx1MDAzZWxhc3RfYmxvY2sgPSBsYi1cXHUwMDNlY3Vycl9ibG9jaztcXG4gIDg1OlxcdFxcdGxiLVxcdTAwM2VjdXJyX2Jsb2NrKys7XFxuICA4NjpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAgODc6XFx0fVxcbiAgODg6XFx0XFxuICA4OTpcXHRzdGF0aWMgaW50IHVwZGF0ZV9pbmRfZXh0ZW50X3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuICA5MDpcXHRcXHRcXHRcXHRcXHQgICBleHQ0X2ZzYmxrX3QgcGJsb2NrLFxcbiAgOTE6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1pZ3JhdGVfc3RydWN0ICpsYilcXG4gIDkyOlxcdHtcXG4gIDkzOlxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuICA5NDpcXHRcXHRfX2xlMzIgKmlfZGF0YTtcXG4gIDk1OlxcdFxcdGludCBpLCByZXR2YWwgPSAwO1xcbiAgOTY6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfZW50cmllcyA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSBcXHUwMDNlXFx1MDAzZSAyO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRcXHRiaCA9IGV4dDRfc2JfYnJlYWQoaW5vZGUtXFx1MDAzZWlfc2IsIHBibG9jaywgMCk7XFxuICA5OTpcXHRcXHRpZiAoSVNfRVJSKGJoKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6MjIuMDI0MTYyNTUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5MTcwOTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgYWN0aXZhdGlvbiBwYXRoIGZvciBgbWlncmF0ZS5jYCwgc3BlY2lmaWNhbGx5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgd2hlcmUgdGhpcyBjb2RlIGlzICphY3R1YWxseSogY2FsbGVkIGFuZCB3aGF0IHNldHRpbmdzIG1pZ2h0IHRyaWdnZXIgaXRzIHVzYWdlLiBTbywgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBzZWFyY2hpbmcgdGhlIGNvZGViYXNlIGZvciByZWZlcmVuY2VzIHRvIGBleHQ0X2V4dF9taWdyYXRlYCBvciBhbnkgcmVsYXRlZCBzeW1ib2xzIHdpdGhpbiB0aGUgYGZzL2V4dDQvbWlncmF0ZS5jYCBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCBmb3JtaW5nIGEgbWVudGFsIG1vZGVsIG9mIHdoZW4gYW5kIHdoeSBpdCdzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjI0LjMxNTg3NDgxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTUzNjk2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0LiptaWdyYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTMyNTQ9aW50IGV4dDRfZm9yY2Vfc2h1dGRvd24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGZsYWdzKTtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTMyNTYtLyogbWlncmF0ZS5jICovXFxuZnMvZXh0NC9leHQ0Lmg6MzI1NzpleHRlcm4gaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICopO1xcbmZzL2V4dDQvZXh0NC5oOjMyNTg6ZXh0ZXJuIGludCBleHQ0X2luZF9taWdyYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oLTMyNTktXFxuLS1cXG5mcy9leHQ0L2lvY3RsLmM9NTkwPXN0YXRpYyBpbnQgZXh0NF9pb2N0bF9zZXRmbGFncyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTcwNS1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0VYVEVOVFNfRkwpXFxuZnMvZXh0NC9pb2N0bC5jOjcwNjpcXHRcXHRcXHRlcnIgPSBleHQ0X2V4dF9taWdyYXRlKGlub2RlKTtcXG5mcy9leHQ0L2lvY3RsLmMtNzA3LVxcdFxcdGVsc2VcXG5mcy9leHQ0L2lvY3RsLmM6NzA4OlxcdFxcdFxcdGVyciA9IGV4dDRfaW5kX21pZ3JhdGUoaW5vZGUpO1xcbmZzL2V4dDQvaW9jdGwuYy03MDktXFx0fVxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jPTE1Mzg9c3RhdGljIGxvbmcgX19leHQ0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYy0xNzAxLVxcdFxcdGlub2RlX2xvY2soKGlub2RlKSk7XFxuZnMvZXh0NC9pb2N0bC5jOjE3MDI6XFx0XFx0ZXJyID0gZXh0NF9leHRfbWlncmF0ZShpbm9kZSk7XFxuZnMvZXh0NC9pb2N0bC5jLTE3MDMtXFx0XFx0aW5vZGVfdW5sb2NrKChpbm9kZSkpO1xcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmM9NjQ9c3RhdGljIGludCB1cGRhdGVfZXh0ZW50X3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9taWdyYXRlLmM6NjU6XFx0XFx0XFx0ICAgICAgIGV4dDRfZnNibGtfdCBwYmxvY2ssIHN0cnVjdCBtaWdyYXRlX3N0cnVjdCAqbGIpXFxuZnMvZXh0NC9taWdyYXRlLmMtNjYte1xcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmM9Mzg5PXN0YXRpYyBpbnQgZnJlZV9leHRfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jLTQwOC1cXG5mcy9leHQ0L21pZ3JhdGUuYzo0MDk6aW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L21pZ3JhdGUuYy00MTAte1xcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmMtNjAyLSAqL1xcbmZzL2V4dDQvbWlncmF0ZS5jOjYwMzppbnQgZXh0NF9pbmRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvbWlncmF0ZS5jLTYwNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjI0LjM5NTQxOTIyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNjYyMDI0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgZXh0NCBNaWdyYXRpb24gQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucyBmb3IgYGZzL2V4dDQvbWlncmF0ZS5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGljaCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGl0IGdldHMgYnVpbHQuIFRoZSBgZnMvZXh0NC9NYWtlZmlsZWAgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhhdCBNYWtlZmlsZSBhbmQgZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbHMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciB0aGF0IG1pZ3JhdGlvbiBjb2RlIGlzIGFjdHVhbGx5IGluY2x1ZGVkIGluIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UuIFRoaXMgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGl0J3MgYSB0eXBpY2FsIGJ1aWxkIHN5c3RlbSBkZXBlbmRlbmN5IGxvb2t1cC4gSSdtIGV4cGVjdGluZyB0byBzZWUgc29tZXRoaW5nIGxpa2UgYG9iai0kKENPTkZJR19FWFQ0X01JR1JBVElPTikgKz0gbWlncmF0ZS5vYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIHRoZW4gSSBjYW4gdHJhY2sgYmFjayB3aGF0IHNldHMgYENPTkZJR19FWFQ0X01JR1JBVElPTmAgdG8gc2VlIGlmIHRoZXJlIGlzIHNvbWUgb3RoZXIgdHJpZ2dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMwNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjI2LjQ2MTYyNDgxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE4OTQwODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtOS1cXHRcXHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEwOlxcdFxcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6MjYuNTczNTI1MzQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE0MTI1NDQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBPcmlnaW5zIG9mIGBtaWdyYXRlLm9gIGluIHRoZSBleHQ0IEZpbGVzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyBJJ3ZlIGVuY291bnRlcmVkIGBtaWdyYXRlLm9gIGFuZCwgYXMgYWx3YXlzLCB0aGUgZmlyc3QgdGhpbmcgSSBkbyBpcyBmaWd1cmUgb3V0IHdoZXJlIGl0IGNvbWVzIGZyb20uIEl0J3MgbGlzdGVkIHVuZGVyIGBleHQ0LXlgLCBtZWFuaW5nIGl0J3MgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgZXh0NCBtb2R1bGUsIGFzc3VtaW5nIHRoZSBleHQ0IG1vZHVsZSBpdHNlbGYgaXMgYmVpbmcgYnVpbHQuIE1ha2VzIHNlbnNlLiBOb3csIGBleHQ0LXlgIGluZGljYXRlcyB0aGF0IHRoZSBtb2R1bGUgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0VYVDRfRlNgIGlzIGVuYWJsZWQsIGFuZCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmb3IgZXh0NC4gSSBuZWVkIHRvIGNoZWNrIGBmcy9leHQ0L0tjb25maWdgIHRvIHNlZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGF0IHBhcnRpY3VsYXIgY29uZmlnIG9wdGlvbiBnZXRzIGVuYWJsZWQuIFRoZW4gSSdsbCBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBleGFjdGx5IHdoZW4gYG1pZ3JhdGUub2AgZW5kcyB1cCBpbiB0aGUgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjoyOC43MTQ3ODIxODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2OTE0NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjI4Ljc4MTcwNDEzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NzAzOTI4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgRVhUNCBGaWxlc3lzdGVtIFJlZmFjdG9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJcyB0aGlzIGNoYW5nZSBpbiBgZnMvZXh0NC9taWdyYXRlLmNgIHdvcnRoIGZ1enppbmc/IFRoZSBzdWJzeXN0ZW0gaXMgdGhlIEVYVDQgZmlsZXN5c3RlbSwgYSBjb3JlIGNvbXBvbmVudCBvZiB0aGUgTGludXgga2VybmVsLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUcmlnZ2VyYWJsZSB2aWEgYEVYVDRfSU9DX01JR1JBVEVgIG9yIGBGU19JT0NfU0VURkxBR1NgIGlvY3RscyDigJMgdGhhdCdzIGFub3RoZXIgYWNjZXNzaWJpbGl0eSBjaGVjayBtYXJrLlxuXG5UaGUgbW9kaWZpY2F0aW9uIGl0c2VsZiBpcyB3aXRoaW4gdGhlIGBmaW5pc2hfcmFuZ2UoKWAgZnVuY3Rpb24uIFRoZSBjb2RlIHJlZmFjdG9yaW5nIGludm9sdmVzIHRoZSB3YXkgYHJldHZhbGAgaXMgaGFuZGxlZCBhZnRlciBhIGNhbGwgdG8gYGV4dDRfZXh0X2luc2VydF9leHRlbnQoKWAuIEJlZm9yZSwgYSBjb25kaXRpb25hbCBjaGVjayBgSVNfRVJSKHBhdGgpYCBkZXRlcm1pbmVkIHRoZSBmYXRlIG9mIGByZXR2YWxgLiBOb3csIGByZXR2YWxgIGlzIHNldCBkaXJlY3RseSB1c2luZyBgUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gQ3JpdGljYWxseSwgYHJldHZhbGAgd2FzIGluaXRpYWxpemVkIHRvIDAgcHJldmlvdXNseSAobGlrZWx5IGJ5IGEgY2FsbCB0byBgZXh0NF9kYXRhc2VtX2Vuc3VyZV9jcmVkaXRzYCB0aGF0IHByZWNlZGVkIGl0KSwgYW5kIGByZXR2YWxgIGJlY29tZXMgMCAqaWYgYW5kIG9ubHkgaWYqIGBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KClgIHJldHVybnMgYSB2YWxpZCBwb2ludGVyIChub24tZXJyb3IpLiBJZiBpdCAqZG9lcyogcmV0dXJuIGFuIGVycm9yIHBvaW50ZXIsIHRoZSBuZXcgaW1wbGVtZW50YXRpb24gbWltaWNzIHRoZSBwcmV2aW91cyBiZWhhdmlvci5cblxuVGhlIGNoYW5nZSBzZWVtcyBwdXJlbHkgYSByZWZhY3RvcmluZywgYSBjbGVhbnVwLiBCdXQsIGFjY29yZGluZyB0byBzZWN0aW9ucyAxIGFuZCAzLCBJIGNhbid0IGJsaW5kbHkgdHJ1c3QgYSBcInJlZmFjdG9yaW5nXCIgb3IgTkZDSSBjbGFpbSwgZXNwZWNpYWxseSB3aXRoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuIFRoZSBydWxlIGlzIGNsZWFyOiAqSWYqIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuIEFuZCB0aGlzIGRlZmluaXRlbHkgdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBhIGNvcmUgc3Vic3lzdGVtLiBNb3Jlb3ZlciwgdGhlIHJlZmFjdG9yaW5nIGFmZmVjdHMgdGhlIGZsb3cgYnkgd2hpY2ggdGhlIHJlc3VsdCBvZiBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAgd2lsbCBiZSBoYW5kbGVkLCBhbmQgdGhpcyB0eXBlIG9mIHJlc3RydWN0dXJpbmcgb2YgdGhlIHJlYWNoYWJsZSBjb2RlIGlzIG1lbnRpb25lZCBzcGVjaWZpY2FsbHkgaW4gU2VjdGlvbiAzIGFzIG1lcml0aW5nIGEgZnV6emluZyBlZmZvcnQuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAuIFRoaXMgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBlbnRyeXBvaW50cyBhbmQgY2FsbCBjaGFpbnMuIEkgbmVlZCB0byBsb29rIGF0IGFsbCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbWlncmF0ZS5jYCBvciBlbnRyeXBvaW50cyBmb3IgdGhpcyBwYXRoLiBTcGVjaWZpY2FsbHksIEkgc2VlIGBleHQ0X2V4dF9taWdyYXRlYCBhbmQgYGV4dDRfaW5kX21pZ3JhdGVgIHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBUbyBiZSBleHRyYSBzdXJlLCBJIGFsc28gbmVlZCB0byB2ZXJpZnkgd2hhdCBpcyBjYWxsaW5nIGBmaW5pc2hfcmFuZ2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjAwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjMzLjY1MjEwMDI1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NDM0MzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmlzaF9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L21pZ3JhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L21pZ3JhdGUuYz0xNj1zdHJ1Y3QgbWlncmF0ZV9zdHJ1Y3Qge1xcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmMtMjAtXFxuZnMvZXh0NC9taWdyYXRlLmM6MjE6c3RhdGljIGludCBmaW5pc2hfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L21pZ3JhdGUuYy0yMi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbWlncmF0ZV9zdHJ1Y3QgKmxiKVxcbi0tXFxuZnMvZXh0NC9taWdyYXRlLmM9NjQ9c3RhdGljIGludCB1cGRhdGVfZXh0ZW50X3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L21pZ3JhdGUuYy04MS1cXHQgKi9cXG5mcy9leHQ0L21pZ3JhdGUuYzo4MjpcXHRyZXR2YWwgPSBmaW5pc2hfcmFuZ2UoaGFuZGxlLCBpbm9kZSwgbGIpO1xcbmZzL2V4dDQvbWlncmF0ZS5jLTgzLVxcdGxiLVxcdTAwM2VmaXJzdF9wYmxvY2sgPSBsYi1cXHUwMDNlbGFzdF9wYmxvY2sgPSBwYmxvY2s7XFxuLS1cXG5mcy9leHQ0L21pZ3JhdGUuYz00MDk9aW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jLTU0OS1cXHQgKi9cXG5mcy9leHQ0L21pZ3JhdGUuYzo1NTA6XFx0cmV0dmFsID0gZmluaXNoX3JhbmdlKGhhbmRsZSwgdG1wX2lub2RlLCBcXHUwMDI2bGIpO1xcbmZzL2V4dDQvbWlncmF0ZS5jLTU1MS1lcnJfb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjozMy43NjY1MzkwMDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY2NTY0ODM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgZmluaXNoX3JhbmdlYCBhbmQgYGV4dDRfZXh0X21pZ3JhdGVgIGZvciBTeW1ib2wgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgZmluaXNoX3JhbmdlYCBhbmQgYGV4dDRfZXh0X21pZ3JhdGVgIGFyZSB1c2VkLCBzcGVjaWZpY2FsbHkgZm9yIHN5bWJvbCBjb3ZlcmFnZSBwdXJwb3Nlcy4gSSBzZWUgdGhhdCBgZmluaXNoX3JhbmdlYCBnZXRzIGNhbGxlZCB3aXRoaW4gYHVwZGF0ZV9leHRlbnRfcmFuZ2VgLCBhbmQgYWxzbyBkaXJlY3RseSB3aXRoaW4gYGV4dDRfZXh0X21pZ3JhdGVgLiBgdXBkYXRlX2V4dGVudF9yYW5nZWAsIGluIHR1cm4sIGlzIHBhcnQgb2YgdGhlIGluZGlyZWN0LXRvLWV4dGVudCBtaWdyYXRpb24gcHJvY2Vzcywgd2hpY2ggbWVhbnMgYGV4dDRfZXh0X21pZ3JhdGVgIHVsdGltYXRlbHkgdHJpZ2dlcnMgaXQuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYGZpbmlzaF9yYW5nZWAgaXMgYSB2aWFibGUgc3ltYm9sIHRhcmdldC4gSSd2ZSBjb25maXJtZWQgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgZGVmaW5lZCBpbiBgbWlncmF0ZS5jYC4gVGhlIGNoYWxsZW5nZSB3aXRoIHN0YXRpYyBmdW5jdGlvbnMgaXMsIGNvdWxkIHRoZXkgYmUgaW5saW5lZD8gQmFzZWQgb24gU2VjdGlvbiA0IG9mIHRoZSBkb2N1bWVudGF0aW9uIEkgcmVjYWxsLCB3aGljaCBzdGF0ZXMgdGhhdCBjb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgZG9uJ3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGFuZCB0aHVzIGNhbid0IGJlIGRpcmVjdGx5IHRhcmdldGVkLiBIb3dldmVyLCB3aGlsZSBgZmluaXNoX3JhbmdlYCAqbWlnaHQqIGJlIGlubGluZWQsIGBleHQ0X2V4dF9taWdyYXRlYCBpcyBkZWZpbml0ZWx5IGEgbm9uLXN0YXRpYyBzeW1ib2wsIGFuZCBzbyBpcyBwZXJmZWN0bHkgZmluZS4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBmaW5pc2hfcmFuZ2VgLCBhcyBJIGNhbid0IGJlIHN1cmUgaXQgaXMgaW5saW5lZCBvciBub3QuXG5cblRoZXJlZm9yZSwgZm9yIHN5bWJvbCBjb3ZlcmFnZSwgSSdtIGNvbmZpZGVudCB0aGF0IGluY2x1ZGluZyBib3RoIGBmaW5pc2hfcmFuZ2VgIGFuZCBgZXh0NF9leHRfbWlncmF0ZWAgaXMgdGhlIHdheSB0byBnby5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBFbmFibGVDb25maWdzLiBJJ20gcmVhc29uYWJseSBjZXJ0YWluIHRoYXQgYEVYVDRfRlNgIGlzIHJlbGV2YW50LCBidXQgSSBuZWVkIHRvIGJlIDEwMCUgc3VyZS4gSSBzaG91bGQgYWxzbyBkb3VibGUgY2hlY2sgdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgaW1wb3J0YW50IGZvciBleHQ0IG1pZ3JhdGlvbi4gVGhpcyB3aWxsIHByb3ZpZGUgZnVydGhlciBjb250ZXh0IGZvciBteSBhbmFseXNpcyBhbmQgZW5zdXJlIGZ1bGwgY292ZXJhZ2Ugb2YgdGhlIHJlbGV2YW50IGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6MzcuNDMyMTg5ODMzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBFWFQ0X0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBKQkQyXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JDMTZcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgOTpcXHRcXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxcbiAgMTQ6XFx0XFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXFxuICAxNTpcXHRcXHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcXG4gIDE2OlxcdFxcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXFxuICAxNzpcXHRcXHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxcbiAgMTg6XFx0XFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcXG4gIDE5OlxcdFxcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxcbiAgMjA6XFx0XFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXFxuICAyMzpcXHRcXHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcXG4gIDI0OlxcdFxcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcXG4gIDI1OlxcdFxcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xcbiAgMjY6XFx0XFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcXG4gIDI3OlxcdFxcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcXG4gIDI4OlxcdFxcdCAgY29tcGF0aWJsZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXFxuICAzMTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiVXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEVYVDJfRlM9blxcbiAgMzk6XFx0XFx0ZGVmYXVsdCB5XFxuICA0MDpcXHRcXHRoZWxwXFxuICA0MTpcXHRcXHQgIEFsbG93IHRoZSBleHQ0IGZpbGUgc3lzdGVtIGRyaXZlciBjb2RlIHRvIGJlIHVzZWQgZm9yIGV4dDJcXG4gIDQyOlxcdFxcdCAgZmlsZSBzeXN0ZW0gbW91bnRzLiAgVGhpcyBhbGxvd3MgdXNlcnMgdG8gcmVkdWNlIHRoZWlyXFxuICA0MzpcXHRcXHQgIGNvbXBpbGVkIGtlcm5lbCBzaXplIGJ5IHVzaW5nIG9uZSBmaWxlIHN5c3RlbSBkcml2ZXIgZm9yXFxuICA0NDpcXHRcXHQgIGV4dDIsIGV4dDMsIGFuZCBleHQ0IGZpbGUgc3lzdGVtcy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuICA0NzpcXHRcXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuICA0OTpcXHRcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuICA1MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjM3LjQzMjMwNTg5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTg3NjkyMzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVYVDRfRlMgRnV6emluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGxhbmRzY2FwZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGhlcmUuIE15IGZvY3VzIHNob3VsZCBiZSBzb2xlbHkgb24gYEVYVDRfRlNgIGFzIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIExvb2tzIGxpa2UgdGhlIHRhcmdldCBzeW1ib2xzIEkgbmVlZCB0byB6ZXJvIGluIG9uIGFyZSBgZmluaXNoX3JhbmdlYCBhbmQgYGV4dDRfZXh0X21pZ3JhdGVgLiBQZXJmZWN0LiBUaGV5J3JlIGJvdGggcHJpbWUgY2FuZGlkYXRlcy4gVGhlIGNvZGUgaXMgd29ydGggZnV6emluZywgYmFzZWQgb24gdGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIGZsYWcuXG5cblRoZSByZWFzb25pbmcncyBjbGVhcjogdGhlIHBhdGNoIGlzIGZpZGRsaW5nIHdpdGggZXJyb3IgYW5kIHJldHVybiB2YWx1ZSBoYW5kbGluZyB3aXRoaW4gYGZpbmlzaF9yYW5nZSgpYCwgd2hpY2ggbGl2ZXMgaW4gYGZzL2V4dDQvbWlncmF0ZS5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIHRpZWQgdG8gZXh0NCdzIGJsb2NrLXRvLWV4dGVudHMgZmlsZSBtaWdyYXRpb24gcHJvY2Vzcywga2lja2VkIG9mZiBieSB0aGUgYEVYVDRfSU9DX01JR1JBVEVgIGlvY3RsLiBHb29kIG5ld3MgaXMgdGhhdCBpdCdzIHJlYWNoYWJsZSBpbiBjb21tb24gdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGZlZWQgdGhlc2UgdmFsdWVzIGludG8gYHNldC1yZXN1bHRzYC4gTGV0J3MgZ2V0IHRoaXMgcm9sbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE2OCwiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjo0MC4wMjAwMDE0MDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEwNTk0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmaW5pc2hfcmFuZ2VcIixcbiAgICBcImV4dDRfZXh0X21pZ3JhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGFuZCByZXR1cm4gdmFsdWUgcHJvcGFnYXRpb24gdXNpbmcgUFRSX0VSUl9PUl9aRVJPIGluIGV4dDQncyBmaW5pc2hfcmFuZ2UoKSBpbiBmcy9leHQ0L21pZ3JhdGUuYy4gVGhpcyBjb2RlIHBhdGggaXMgcGFydCBvZiBleHQ0J3MgZXh0ZW50IG1pZ3JhdGlvbiBtZWNoYW5pc20sIGFjY2Vzc2libGUgdmlhIGlvY3RscyAoZS5nLiwgRVhUNF9JT0NfTUlHUkFURSkuIFNpbmNlIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBpcyBtb2RpZmllZCwgZnV6emluZyBpcyB3YXJyYW50ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZpbmlzaF9yYW5nZVwiLFxuICAgIFwiZXh0NF9leHRfbWlncmF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgYW5kIHJldHVybiB2YWx1ZSBwcm9wYWdhdGlvbiB1c2luZyBQVFJfRVJSX09SX1pFUk8gaW4gZXh0NCdzIGZpbmlzaF9yYW5nZSgpIGluIGZzL2V4dDQvbWlncmF0ZS5jLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIGV4dDQncyBleHRlbnQgbWlncmF0aW9uIG1lY2hhbmlzbSwgYWNjZXNzaWJsZSB2aWEgaW9jdGxzIChlLmcuLCBFWFQ0X0lPQ19NSUdSQVRFKS4gU2luY2UgcmVhY2hhYmxlIGtlcm5lbCBjb2RlIGlzIG1vZGlmaWVkLCBmdXp6aW5nIGlzIHdhcnJhbnRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6NDAuMTYxMDcwNDgyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0ODc0MTI2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA0OjM2OjQwLjE2MTk5MTA1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwNDQ3ODEzNzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGNvZGUgYXNzaWdubWVudCBpbiBleHQ0J3MgZmluaXNoX3JhbmdlKCkgZnVuY3Rpb24gYnkgcmVwbGFjaW5nIGBpZiAoSVNfRVJSKHBhdGgpKSByZXR2YWwgPSBQVFJfRVJSKHBhdGgpO2Agd2l0aCBgcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyByZWZhY3RvcmluZyB0aGF0IG1vZGlmaWVzIGEgc2NhbGFyIHJldHVybiBjb2RlIHZhcmlhYmxlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDIxMjQwODY1YTFlYmFhZDdiYjQzOGEwZDJjNmI2NzY1ODZmY2Y5NmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA0OjM2OjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9taWdyYXRlLmMgYi9mcy9leHQ0L21pZ3JhdGUuY1xuaW5kZXggNWQ2MGVmMTBmZTExMC4uZDQ2N2I1YTEzYzYyZSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jXG4rKysgYi9mcy9leHQ0L21pZ3JhdGUuY1xuQEAgLTUzLDggKzUzLDcgQEAgc3RhdGljIGludCBmaW5pc2hfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX291dDtcbiBcdHBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIFx1MDAyNm5ld2V4dCwgMCk7XG4tXHRpZiAoSVNfRVJSKHBhdGgpKVxuLVx0XHRyZXR2YWwgPSBQVFJfRVJSKHBhdGgpO1xuK1x0cmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpO1xuIGVycl9vdXQ6XG4gXHR1cF93cml0ZSgoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKSk7XG4gXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjo0MC4xNjE5OTMxMzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYxNzYzNzQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuXG5cbioqQW5hbHl6aW5nIHRoaXMgUGF0Y2g6IEEgRm9jdXNlZCBBcHByb2FjaCoqXG5cbkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGlzIHBhdGNoIHdpdGggcHJlY2lzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IHdpdGhpbiB0aGUgYGZzL2V4dDRgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbWlncmF0ZS5jYC4gSSdtIHRoaW5raW5nLCBcIkxldCdzIHVzZSBvdXIgZmFtaWxpYXIgdG9vbHMuXCIgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZnMvZXh0NC9taWdyYXRlLmNgLCBhbmQgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgdGhlIGZpbGUuIEkgd2FudCB0byBxdWlja2x5IHplcm8gaW4gb24gYXJvdW5kIGxpbmUgNTMgdXNpbmcgYHJlYWQtZmlsZWAgYW5kIGluc3BlY3QgdGhhdCBhcmVhIGRpcmVjdGx5LiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgcXVpY2tlc3Qgc2Vuc2Ugb2YgdGhlIGxvY2FsIGNoYW5nZXMgaGVyZS4gVGhpcyB3aWxsIGxldCBtZSBxdWlja2x5IGdyYXNwIHRoZSBsb2NhbCBjb250ZXh0IGJlZm9yZSBnb2luZyB3aWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6NDQuNzc5NjMzNTM2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvbWlncmF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMVxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDdcXG4gICA0OlxcdCAqIEF1dGhvciBBbmVlc2ggS3VtYXIgSy5WIFxcdTAwM2NhbmVlc2gua3VtYXJAbGludXgudm5ldC5pYm0uY29tXFx1MDAzZVxcbiAgIDU6XFx0ICpcXG4gICA2OlxcdCAqL1xcbiAgIDc6XFx0XFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcImV4dDRfamJkMi5oXFxcIlxcbiAgMTA6XFx0I2luY2x1ZGUgXFxcImV4dDRfZXh0ZW50cy5oXFxcIlxcbiAgMTE6XFx0XFxuICAxMjpcXHQvKlxcbiAgMTM6XFx0ICogVGhlIGNvbnRpZ3VvdXMgYmxvY2tzIGRldGFpbHMgd2hpY2ggY2FuIGJlXFxuICAxNDpcXHQgKiByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBleHRlbnRcXG4gIDE1OlxcdCAqL1xcbiAgMTY6XFx0c3RydWN0IG1pZ3JhdGVfc3RydWN0IHtcXG4gIDE3OlxcdFxcdGV4dDRfbGJsa190IGZpcnN0X2Jsb2NrLCBsYXN0X2Jsb2NrLCBjdXJyX2Jsb2NrO1xcbiAgMTg6XFx0XFx0ZXh0NF9mc2Jsa190IGZpcnN0X3BibG9jaywgbGFzdF9wYmxvY2s7XFxuICAxOTpcXHR9O1xcbiAgMjA6XFx0XFxuICAyMTpcXHRzdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgMjI6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG1pZ3JhdGVfc3RydWN0ICpsYilcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0e1xcbiAgMjU6XFx0XFx0aW50IHJldHZhbCA9IDAsIG5lZWRlZDtcXG4gIDI2OlxcdFxcdHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleHQ7XFxuICAyNzpcXHRcXHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aDtcXG4gIDI4OlxcdFxcdGlmIChsYi1cXHUwMDNlZmlyc3RfcGJsb2NrID09IDApXFxuICAyOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0LyogQWRkIHRoZSBleHRlbnQgdG8gdGVtcCBpbm9kZSovXFxuICAzMjpcXHRcXHRuZXdleHQuZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihsYi1cXHUwMDNlZmlyc3RfYmxvY2spO1xcbiAgMzM6XFx0XFx0bmV3ZXh0LmVlX2xlbiAgID0gY3B1X3RvX2xlMTYobGItXFx1MDAzZWxhc3RfYmxvY2sgLSBsYi1cXHUwMDNlZmlyc3RfYmxvY2sgKyAxKTtcXG4gIDM0OlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXh0LCBsYi1cXHUwMDNlZmlyc3RfcGJsb2NrKTtcXG4gIDM1OlxcdFxcdC8qIExvY2tpbmcgb25seSBmb3IgY29udmVuaWVuY2Ugc2luY2Ugd2UgYXJlIG9wZXJhdGluZyBvbiB0ZW1wIGlub2RlICovXFxuICAzNjpcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4gIDM3OlxcdFxcdHBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCBsYi1cXHUwMDNlZmlyc3RfYmxvY2ssIE5VTEwsIDApO1xcbiAgMzg6XFx0XFx0aWYgKElTX0VSUihwYXRoKSkge1xcbiAgMzk6XFx0XFx0XFx0cmV0dmFsID0gUFRSX0VSUihwYXRoKTtcXG4gIDQwOlxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gIDQxOlxcdFxcdH1cXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0LypcXG4gIDQ0OlxcdFxcdCAqIENhbGN1bGF0ZSB0aGUgY3JlZGl0IG5lZWRlZCB0byBpbnNlcnRpbmcgdGhpcyBleHRlbnRcXG4gIDQ1OlxcdFxcdCAqIFNpbmNlIHdlIGFyZSBkb2luZyB0aGlzIGluIGxvb3Agd2UgbWF5IGFjY3VtdWxhdGUgZXh0cmFcXG4gIDQ2OlxcdFxcdCAqIGNyZWRpdC4gQnV0IGJlbG93IHdlIHRyeSB0byBub3QgYWNjdW11bGF0ZSB0b28gbXVjaFxcbiAgNDc6XFx0XFx0ICogb2YgdGhlbSBieSByZXN0YXJ0aW5nIHRoZSBqb3VybmFsLlxcbiAgNDg6XFx0XFx0ICovXFxuICA0OTpcXHRcXHRuZWVkZWQgPSBleHQ0X2V4dF9jYWxjX2NyZWRpdHNfZm9yX3NpbmdsZV9leHRlbnQoaW5vZGUsXFxuICA1MDpcXHRcXHRcXHQgICAgbGItXFx1MDAzZWxhc3RfYmxvY2sgLSBsYi1cXHUwMDNlZmlyc3RfYmxvY2sgKyAxLCBwYXRoKTtcXG4gIDUxOlxcdFxcbiAgNTI6XFx0XFx0cmV0dmFsID0gZXh0NF9kYXRhc2VtX2Vuc3VyZV9jcmVkaXRzKGhhbmRsZSwgaW5vZGUsIG5lZWRlZCwgbmVlZGVkLCAwKTtcXG4gIDUzOlxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiAgNTQ6XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiAgNTU6XFx0XFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXFx1MDAyNm5ld2V4dCwgMCk7XFxuICA1NjpcXHRcXHRyZXR2YWwgPSBQVFJfRVJSX09SX1pFUk8ocGF0aCk7XFxuICA1NzpcXHRlcnJfb3V0OlxcbiAgNTg6XFx0XFx0dXBfd3JpdGUoKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKSk7XFxuICA1OTpcXHRcXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XFxuICA2MDpcXHRcXHRsYi1cXHUwMDNlZmlyc3RfcGJsb2NrID0gMDtcXG4gIDYxOlxcdFxcdHJldHVybiByZXR2YWw7XFxuICA2MjpcXHR9XFxuICA2MzpcXHRcXG4gIDY0OlxcdHN0YXRpYyBpbnQgdXBkYXRlX2V4dGVudF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgNjU6XFx0XFx0XFx0XFx0ICAgICAgIGV4dDRfZnNibGtfdCBwYmxvY2ssIHN0cnVjdCBtaWdyYXRlX3N0cnVjdCAqbGIpXFxuICA2NjpcXHR7XFxuICA2NzpcXHRcXHRpbnQgcmV0dmFsO1xcbiAgNjg6XFx0XFx0LypcXG4gIDY5OlxcdFxcdCAqIFNlZSBpZiB3ZSBjYW4gYWRkIG9uIHRvIHRoZSBleGlzdGluZyByYW5nZSAoaWYgaXQgZXhpc3RzKVxcbiAgNzA6XFx0XFx0ICovXFxuICA3MTpcXHRcXHRpZiAobGItXFx1MDAzZWZpcnN0X3BibG9jayBcXHUwMDI2XFx1MDAyNlxcbiAgNzI6XFx0XFx0XFx0KGxiLVxcdTAwM2VsYXN0X3BibG9jaysxID09IHBibG9jaykgXFx1MDAyNlxcdTAwMjZcXG4gIDczOlxcdFxcdFxcdChsYi1cXHUwMDNlbGFzdF9ibG9jaysxID09IGxiLVxcdTAwM2VjdXJyX2Jsb2NrKSkge1xcbiAgNzQ6XFx0XFx0XFx0bGItXFx1MDAzZWxhc3RfcGJsb2NrID0gcGJsb2NrO1xcbiAgNzU6XFx0XFx0XFx0bGItXFx1MDAzZWxhc3RfYmxvY2sgPSBsYi1cXHUwMDNlY3Vycl9ibG9jaztcXG4gIDc2OlxcdFxcdFxcdGxiLVxcdTAwM2VjdXJyX2Jsb2NrKys7XFxuICA3NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gIDc4OlxcdFxcdH1cXG4gIDc5OlxcdFxcdC8qXFxuICA4MDpcXHRcXHQgKiBTdGFydCBhIG5ldyByYW5nZS5cXG4gIDgxOlxcdFxcdCAqL1xcbiAgODI6XFx0XFx0cmV0dmFsID0gZmluaXNoX3JhbmdlKGhhbmRsZSwgaW5vZGUsIGxiKTtcXG4gIDgzOlxcdFxcdGxiLVxcdTAwM2VmaXJzdF9wYmxvY2sgPSBsYi1cXHUwMDNlbGFzdF9wYmxvY2sgPSBwYmxvY2s7XFxuICA4NDpcXHRcXHRsYi1cXHUwMDNlZmlyc3RfYmxvY2sgPSBsYi1cXHUwMDNlbGFzdF9ibG9jayA9IGxiLVxcdTAwM2VjdXJyX2Jsb2NrO1xcbiAgODU6XFx0XFx0bGItXFx1MDAzZWN1cnJfYmxvY2srKztcXG4gIDg2OlxcdFxcdHJldHVybiByZXR2YWw7XFxuICA4NzpcXHR9XFxuICA4ODpcXHRcXG4gIDg5OlxcdHN0YXRpYyBpbnQgdXBkYXRlX2luZF9leHRlbnRfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gIDkwOlxcdFxcdFxcdFxcdFxcdCAgIGV4dDRfZnNibGtfdCBwYmxvY2ssXFxuICA5MTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWlncmF0ZV9zdHJ1Y3QgKmxiKVxcbiAgOTI6XFx0e1xcbiAgOTM6XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4gIDk0OlxcdFxcdF9fbGUzMiAqaV9kYXRhO1xcbiAgOTU6XFx0XFx0aW50IGksIHJldHZhbCA9IDA7XFxuICA5NjpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9lbnRyaWVzID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplIFxcdTAwM2VcXHUwMDNlIDI7XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdGJoID0gZXh0NF9zYl9icmVhZChpbm9kZS1cXHUwMDNlaV9zYiwgcGJsb2NrLCAwKTtcXG4gIDk5OlxcdFxcdGlmIChJU19FUlIoYmgpKVxcbiAxMDA6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYmgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNDozNjo0NC43Nzk3MzIwMDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgzMDAzNzE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb2RlIENsZWFudXAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2guIEl0IGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiBzdHJlYW1saW5pbmcgdGhlIGBmaW5pc2hfcmFuZ2VgIGZ1bmN0aW9uIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQncyByZXBsYWNpbmcgYSBzZXF1ZW5jZSBvZiBzdGF0ZW1lbnRzIHdpdGggdGhlIGBQVFJfRVJSX09SX1pFUk9gIG1hY3JvLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyB0aGUgcHJpb3IgaW1wbGVtZW50YXRpb24gaGFkIHNvbWUgcmVkdW5kYW5jeS4gYHJldHZhbGAgd2FzIGdldHRpbmcgYXNzaWduZWQgYSB2YWx1ZSBmcm9tIGEgZnVuY3Rpb24gKGBleHQ0X2RhdGFzZW1fZW5zdXJlX2NyZWRpdHMoLi4uKWAgLSB3aGljaCwgaW1wb3J0YW50bHksIHJldHVybmVkIDAgb3IgYSBuZWdhdGl2ZSBlcnJvciksIGJ1dCB0aGVuIGl0IGNvdWxkIGJlIG92ZXJ3cml0dGVuIGJhc2VkIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgYGV4dDRfZXh0X2luc2VydF9leHRlbnRgLiBOb3csIGBQVFJfRVJSX09SX1pFUk8ocGF0aClgIGVmZmVjdGl2ZWx5IGNvbnNvbGlkYXRlcyB0aGF0IGxvZ2ljLiBJZiBgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAgcmV0dXJucyBhbiBlcnJvciBwb2ludGVyIChgSVNfRVJSKHBhdGgpYCBpcyB0cnVlKSwgYHJldHZhbGAgYmVjb21lcyB0aGF0IGVycm9yLiBJZiBpdCBzdWNjZWVkcyAocmV0dXJucyBhIHZhbGlkIHBvaW50ZXIsIGBJU19FUlIocGF0aClgIGlzIGZhbHNlKSwgYHJldHZhbGAgYmVjb21lcyB6ZXJvLiBJdCdzIGEgY2xlYW4sIGVmZmljaWVudCB3YXkgdG8gaGFuZGxlIHRoZSBlcnJvciBjaGVja2luZy5cblxuVGhlIG1haW4gY29uY2VybiBpbiBhIGNvZGUgY2hhbmdlIGxpa2UgdGhpcyBpcyB1bmludGVuZGVkIGNvbnNlcXVlbmNlcywgcGFydGljdWxhcmx5IHRob3NlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGRhdGEgbGVha3MsIG9yIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBmdXp6ZXJzIGxpa2UgS0FTQU4gb3IgS01TQU4gbWlnaHQgZmxhZy5cblxuSG93ZXZlciwgYWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIGEgc2FmZSBzaW1wbGlmaWNhdGlvbi4gYHJldHZhbGAgaXMgYW4gaW50ZWdlciwgc28gdGhlcmUncyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIGRpcmVjdGx5IGZyb20gdGhhdCB2YXJpYWJsZS4gYHBhdGhgIGlzIGEgcG9pbnRlciByZXR1cm5lZCBieSB3ZWxsLWRlZmluZWQgYWxsb2NhdGlvbiBvciByZXRyaWV2YWwgZnVuY3Rpb25zIChgZXh0NF9leHRfaW5zZXJ0X2V4dGVudGAsIGBleHQ0X2ZpbmRfZXh0ZW50YCkgYW5kIHByb3Blcmx5IGZyZWVkIChgZXh0NF9mcmVlX2V4dF9wYXRoYCBoYW5kbGVzIGJvdGggdmFsaWQgcG9pbnRlcnMgYW5kIGVycm9yIHBvaW50ZXJzL05VTEwpLlxuXG5JJ3ZlIGFsc28gY29uc2lkZXJlZCBhbnkgS01TQU4tc3BlY2lmaWMgY29uY2VybnMuIEtNU0FOIGZvY3VzZXMgb24ga2VybmVsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgY29uZmxpY3RpbmcgYWNjZXNzZXMuIEhvd2V2ZXIsIGluIHRoaXMgcGF0Y2gsIHRoZSBtZW1vcnkgaGFuZGxpbmcgaXMgdmVyeSBzdHJhaWdodGZvcndhcmQgYW5kIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgc28gS01TQU4gc2hvdWxkIG5vdCBiZSB0cmlnZ2VyZWQgaGVyZS4gVGhlIGNsZWFudXAgc2VlbXMgdG8gYWZmZWN0IG9ubHkgY29udHJvbCBmbG93IGJhc2VkIG9uIGVycm9yIGNoZWNraW5nLiBUaGUgY29kZSBpcyBvbmx5IHNpbXBsaWZ5aW5nIGFuIGFzc2lnbm1lbnQgb2YgYSBwYXRoIGJhc2VkIG9uIGl0cyB2YWxpZGl0eSB1c2luZyBhbiBleGlzdGluZyBmdW5jdGlvbiwgc28gdGhhdCBpcyBzYWZlLlxuXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGNsZWFudXAsIGFuZCBpcyBzYWZlIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBUaGVyZSBhcmUgbm8gS01TQU4gY29uY2VybnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MjksIk91dHB1dFRva2VucyI6MTQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDQ6MzY6NTAuNjA5NzcyNjczWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIGVycm9yIGNvZGUgYXNzaWdubWVudCBpbiBleHQ0J3MgZmluaXNoX3JhbmdlKCkgZnVuY3Rpb24gYnkgcmVwbGFjaW5nIGBpZiAoSVNfRVJSKHBhdGgpKSByZXR2YWwgPSBQVFJfRVJSKHBhdGgpO2Agd2l0aCBgcmV0dmFsID0gUFRSX0VSUl9PUl9aRVJPKHBhdGgpYC4gVGhpcyBpcyBhIHB1cmVseSBjb3NtZXRpYyByZWZhY3RvcmluZyB0aGF0IG1vZGlmaWVzIGEgc2NhbGFyIHJldHVybiBjb2RlIHZhcmlhYmxlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gb3IgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3RhbmRhcmQgS0FTQU4vc2FuaXRpemVyIGJ1aWxkcyBhcmUgc3VmZmljaWVudDsgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgZXJyb3IgY29kZSBhc3NpZ25tZW50IGluIGV4dDQncyBmaW5pc2hfcmFuZ2UoKSBmdW5jdGlvbiBieSByZXBsYWNpbmcgYGlmIChJU19FUlIocGF0aCkpIHJldHZhbCA9IFBUUl9FUlIocGF0aCk7YCB3aXRoIGByZXR2YWwgPSBQVFJfRVJSX09SX1pFUk8ocGF0aClgLiBUaGlzIGlzIGEgcHVyZWx5IGNvc21ldGljIHJlZmFjdG9yaW5nIHRoYXQgbW9kaWZpZXMgYSBzY2FsYXIgcmV0dXJuIGNvZGUgdmFyaWFibGUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciBhY2Nlc3MgdW5pbml0aWFsaXplZCBkYXRhLiBTdGFuZGFyZCBLQVNBTi9zYW5pdGl6ZXIgYnVpbGRzIGFyZSBzdWZmaWNpZW50OyBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow98jmj[1] Phase: Succeeded StartedAt: 2026-09-09 04:37:02 +0000 UTC FinishedAt: 2026-09-09 04:37:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 04:37:02 +0000 UTC FinishedAt: 2026-09-09 04:37:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2] Phase: Succeeded StartedAt: 2026-09-09 04:37:02 +0000 UTC FinishedAt: 2026-09-09 08:20:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 04:37:02 +0000 UTC FinishedAt: 2026-09-09 08:20:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 04:37:02 +0000 UTC FinishedAt: 2026-09-09 04:37:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 04:37:02 +0000 UTC FinishedAt: 2026-09-09 04:37:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow98jmj/series-workflow98jmj-convert-artifact-2057685743/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 04:37:12 +0000 UTC FinishedAt: 2026-09-09 04:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 04:37:12 +0000 UTC FinishedAt: 2026-09-09 04:53:31 +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:*d1941301-cfe2-4e60-ae56-7db1a5a4bf52,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-workflow98jmj/series-workflow98jmj-convert-artifact-2057685743/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": "612a9267-5b02-4a33-8cb5-cf3c9a0b0b9c", "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-workflow98jmj/series-workflow98jmj-build-action-4070868917/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 04:37:12 +0000 UTC FinishedAt: 2026-09-09 04:53:21 +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:*d1941301-cfe2-4e60-ae56-7db1a5a4bf52,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-workflow98jmj/series-workflow98jmj-convert-artifact-2057685743/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": "612a9267-5b02-4a33-8cb5-cf3c9a0b0b9c", "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-workflow98jmj/series-workflow98jmj-build-action-4070868917/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 04:53:31 +0000 UTC FinishedAt: 2026-09-09 04:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 04:53:31 +0000 UTC FinishedAt: 2026-09-09 04:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 04:53:31 +0000 UTC FinishedAt: 2026-09-09 04:53:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 04:53:31 +0000 UTC FinishedAt: 2026-09-09 04:53:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow98jmj/series-workflow98jmj-convert-artifact-3296182846/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 04:53:41 +0000 UTC FinishedAt: 2026-09-09 04:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 04:53:41 +0000 UTC FinishedAt: 2026-09-09 04:55:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*612a9267-5b02-4a33-8cb5-cf3c9a0b0b9c,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-workflow98jmj/series-workflow98jmj-build-action-4070868917/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-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 04:55:39 +0000 UTC FinishedAt: 2026-09-09 04:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 04:55:39 +0000 UTC FinishedAt: 2026-09-09 04:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 04:55:39 +0000 UTC FinishedAt: 2026-09-09 05:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 04:55:39 +0000 UTC FinishedAt: 2026-09-09 05:15:44 +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:*d1941301-cfe2-4e60-ae56-7db1a5a4bf52,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-workflow98jmj/series-workflow98jmj-convert-artifact-3296182846/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": "8d18d33a-e088-4efb-a270-ac0ac8c2f5d3", "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-workflow98jmj/series-workflow98jmj-build-action-1053981586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 04:55:39 +0000 UTC FinishedAt: 2026-09-09 05:15:22 +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:*d1941301-cfe2-4e60-ae56-7db1a5a4bf52,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-workflow98jmj/series-workflow98jmj-convert-artifact-3296182846/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": "8d18d33a-e088-4efb-a270-ac0ac8c2f5d3", "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-workflow98jmj/series-workflow98jmj-build-action-1053981586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 05:15:44 +0000 UTC FinishedAt: 2026-09-09 05:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 05:15:44 +0000 UTC FinishedAt: 2026-09-09 05:15:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 05:15:44 +0000 UTC FinishedAt: 2026-09-09 05:17:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 05:15:44 +0000 UTC FinishedAt: 2026-09-09 05:17:28 +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:*8d18d33a-e088-4efb-a270-ac0ac8c2f5d3,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-workflow98jmj/series-workflow98jmj-build-action-1053981586/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-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 05:17:38 +0000 UTC FinishedAt: 2026-09-09 08:20:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 05:17:38 +0000 UTC FinishedAt: 2026-09-09 08:20:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*612a9267-5b02-4a33-8cb5-cf3c9a0b0b9c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8d18d33a-e088-4efb-a270-ac0ac8c2f5d3,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-workflow98jmj/series-workflow98jmj-build-action-4070868917/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-workflow98jmj/series-workflow98jmj-build-action-1053981586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 05:17:38 +0000 UTC FinishedAt: 2026-09-09 05:17:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 05:17:38 +0000 UTC FinishedAt: 2026-09-09 05:17:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow98jmj/series-workflow98jmj-convert-artifact-3572923715/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 05:17:38 +0000 UTC FinishedAt: 2026-09-09 05:17:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 05:17:38 +0000 UTC FinishedAt: 2026-09-09 05:17:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 05:17:38 +0000 UTC FinishedAt: 2026-09-09 05:17:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 05:17:49 +0000 UTC FinishedAt: 2026-09-09 08:20:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow98jmj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["finish_range","ext4_ext_migrate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"9e80305b-e1ef-4a6b-9b6b-39ecc4b71041","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 05:17:49 +0000 UTC FinishedAt: 2026-09-09 08:20:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*612a9267-5b02-4a33-8cb5-cf3c9a0b0b9c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8d18d33a-e088-4efb-a270-ac0ac8c2f5d3,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-workflow98jmj/series-workflow98jmj-build-action-4070868917/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-workflow98jmj/series-workflow98jmj-build-action-1053981586/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-workflow98jmj/series-workflow98jmj-convert-artifact-3572923715/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,}