Name: series-workflow6c9wb Phase: Succeeded StartedAt: 2026-09-10 10:24:46 +0000 UTC FinishedAt: 2026-09-10 14:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[0] Phase: Succeeded StartedAt: 2026-09-10 10:24:46 +0000 UTC FinishedAt: 2026-09-10 10:43:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 10:24:46 +0000 UTC FinishedAt: 2026-09-10 10:43:22 +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": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "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": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "41c94697-e745-4567-8541-ab667eefb381" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_getattr", "generic_fill_statx_atomic_writes" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2dldGF0dHImIzM0OywKICAgICYjMzQ7Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9nZXRhdHRyKClgIGluIGBmcy9leHQ0L2lub2RlLmNgIHRvIHBhc3MgYGF3dV9tYXhgIGluc3RlYWQgb2YgYDBgIGFzIHRoZSBgdW5pdF9tYXhfb3B0YCBwYXJhbWV0ZXIgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKClgLlxuXG4xLiBUaGUgdmFyaWFibGUgYGF3dV9tYXhgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAoYHVuc2lnbmVkIGludCBhd3VfbWluID0gMCwgYXd1X21heCA9IDA7YCkgYW5kIG9wdGlvbmFsbHkgdXBkYXRlZCBmcm9tIGBzYmktXHUwMDNlc19hd3VfbWF4YC5cbjIuIFRoZSBkZXN0aW5hdGlvbiBgc3RydWN0IGtzdGF0YCBpcyB6ZXJvLWluaXRpYWxpemVkIGluIGB2ZnNfZ2V0YXR0cl9ub3NlYygpYC5cbjMuIFdoZW4gcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB2aWEgYHN0YXR4YCwgYGNwX3N0YXR4KClgIGluaXRpYWxpemVzIHRoZSBlbnRpcmUgYHN0cnVjdCBzdGF0eGAgc3RydWN0dXJlIHVzaW5nIGBtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBwb3B1bGF0aW5nIGZpZWxkcyBhbmQgY2FsbGluZyBgY29weV90b191c2VyKClgLlxuNC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgYXRvbWljIHdyaXRlIHBhcmFtZXRlcnMgKHVuaXRfbWF4X29wdCkgYXJlIHJlcG9ydGVkIGluIGV4dDRfZ2V0YXR0cigpIHdoZW4gc3RhdHggcXVlcmllcyBTVEFUWF9XUklURV9BVE9NSUMuIFRoaXMgaXMgcmVhY2hhYmxlIHVzZXIgc3BhY2UgY29kZSBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHZpYSBzdGF0eCBzeXN0ZW0gY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZDE1YTQyZjZmZjVhNDgxMWNiNDBkNDMxZDJiNGM2NDQyZmQ0OGI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTA6NDI6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCAyNmYwZjk3MTRmMDNjLi45MzA1NmM5NzFlNzRiIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmNcbkBAIC02MzA0LDcgJiM0Mzs2MzA0LDggQEAgaW50IGV4dDRfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4gXHRcdFx0YXd1X21heCA9IHNiaS1cdTAwM2VzX2F3dV9tYXg7XG4gXHRcdH1cbiBcbi1cdFx0Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCwgYXd1X21pbiwgYXd1X21heCwgMCk7XG4mIzQzO1x0XHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxuJiM0MztcdFx0XHRcdFx0XHQgYXd1X21heCk7XG4gXHR9XG4gXG4gXHRmbGFncyA9IGVpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRkxfVVNFUl9WSVNJQkxFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2dldGF0dHImIzM0OywKICAgICYjMzQ7Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGF0b21pYyB3cml0ZSBwYXJhbWV0ZXJzICh1bml0X21heF9vcHQpIGFyZSByZXBvcnRlZCBpbiBleHQ0X2dldGF0dHIoKSB3aGVuIHN0YXR4IHF1ZXJpZXMgU1RBVFhfV1JJVEVfQVRPTUlDLiBUaGlzIGlzIHJlYWNoYWJsZSB1c2VyIHNwYWNlIGNvZGUgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSB2aWEgc3RhdHggc3lzdGVtIGNhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGQxNWE0MmY2ZmY1YTQ4MTFjYjQwZDQzMWQyYjRjNjQ0MmZkNDhiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDEwOjQyOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IDI2ZjBmOTcxNGYwM2MuLjkzMDU2Yzk3MWU3NGIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTYzMDQsNyAmIzQzOzYzMDQsOCBAQCBpbnQgZXh0NF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwKIAkJCWF3dV9tYXggPSBzYmktJmd0O3NfYXd1X21heDsKIAkJfQogCi0JCWdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsIDApOwomIzQzOwkJZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCwgYXd1X21pbiwgYXd1X21heCwKJiM0MzsJCQkJCQkgYXd1X21heCk7CiAJfQogCiAJZmxhZ3MgPSBlaS0mZ3Q7aV9mbGFncyAmYW1wOyBFWFQ0X0ZMX1VTRVJfVklTSUJMRTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGV4dDQgaW5vZGUuYyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmLiBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGludGVudCBoZXJlLiBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIHBhdGNoIGRpZmYuIEl0IGFwcGVhcnMgd2UmIzM5O3JlIGluIGBmcy9leHQ0L2lub2RlLmNgLCBhbmQgdGhlIHJlbGV2YW50IGNoYW5nZSBpcyBpbiB0aGUgYGV4dDRfZ2V0YXR0cmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2MzA0LiBJdCBsb29rcyBsaWtlIGEgY2hhbmdlIHRvIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2AuIFRoZSBvbGQgdmVyc2lvbiBwYXNzZWQgYDBgIGFzIHRoZSBmaW5hbCBhcmd1bWVudCwgd2hpbGUgdGhlIG5ldyB2ZXJzaW9uIHBhc3NlcyBgYXd1X21heGAuIFRoaXMgbGlrZWx5IGFmZmVjdHMgaG93IGF0b21pYyB3cml0ZSBpbmZvcm1hdGlvbiBpcyByZXBvcnRlZCBpbiBgc3RhdHhgLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBjaGFuZ2UuCgpOb3csIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB3aXRoaW4gYGZzL2V4dDQvaW5vZGUuY2AgYXQgdGhhdCBzcGVjaWZpYyBsaW5lLiBJIG5lZWQgdGhlIGZ1bGwgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYXd1X21pbmAgYW5kIGBhd3VfbWF4YCByZXByZXNlbnQsIGhvdyB0aGV5JiMzOTtyZSBjYWxjdWxhdGVkIG9yIGRlcml2ZWQsIGFuZCB3aHkgdGhlIGNoYW5nZSBpbiB0aGUgY2FsbCYjMzk7cyBhcmd1bWVudCBpcyBiZWluZyBpbnRyb2R1Y2VkLiBJIG5lZWQgdG8ga25vdyBob3cgdGhlc2UgdmFsdWVzIGluZmx1ZW5jZSB0aGUgYXRvbWljIHdyaXRlIGluZm9ybWF0aW9uIHRoYXQgZ2V0cyByZXBvcnRlZCB2aWEgdGhlIGBzdGF0eGAgc3lzdGVtIGNhbGwuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXRjaC4gSXMgaXQgYSBidWcgZml4LCBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LCBvciBhZGRpbmcgbmV3IGZlYXR1cmVzPyBJIGV4cGVjdCB0byBoYXZlIGEgZ29vZCBoYW5kbGUgb24gdGhhdCBvbmNlIEkgaGF2ZSB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoaXMgY29kZSByZWdpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYyODA6XHRcbjYyODE6XHRcdC8qIFJldHVybiB0aGUgRElPIGFsaWdubWVudCByZXN0cmljdGlvbnMgaWYgcmVxdWVzdGVkLiAqL1xuNjI4MjpcdFx0aWYgKChyZXF1ZXN0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSBcdTAwMjZcdTAwMjYgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG42MjgzOlx0XHRcdHUzMiBkaW9fYWxpZ24gPSBleHQ0X2Rpb19hbGlnbm1lbnQoaW5vZGUpO1xuNjI4NDpcdFxuNjI4NTpcdFx0XHRzdGF0LVx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0RJT0FMSUdOO1xuNjI4NjpcdFx0XHRpZiAoZGlvX2FsaWduID09IDEpIHtcbjYyODc6XHRcdFx0XHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXY7XG42Mjg4Olx0XG42Mjg5Olx0XHRcdFx0LyogaW9tYXAgZGVmYXVsdHMgKi9cbjYyOTA6XHRcdFx0XHRzdGF0LVx1MDAzZWRpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldikgJiM0MzsgMTtcbjYyOTE6XHRcdFx0XHRzdGF0LVx1MDAzZWRpb19vZmZzZXRfYWxpZ24gPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTtcbjYyOTI6XHRcdFx0fSBlbHNlIHtcbjYyOTM6XHRcdFx0XHRzdGF0LVx1MDAzZWRpb19tZW1fYWxpZ24gPSBkaW9fYWxpZ247XG42Mjk0Olx0XHRcdFx0c3RhdC1cdTAwM2VkaW9fb2Zmc2V0X2FsaWduID0gZGlvX2FsaWduO1xuNjI5NTpcdFx0XHR9XG42Mjk2Olx0XHR9XG42Mjk3Olx0XG42Mjk4Olx0XHRpZiAoKHJlcXVlc3RfbWFzayBcdTAwMjYgU1RBVFhfV1JJVEVfQVRPTUlDKSBcdTAwMjZcdTAwMjYgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG42Mjk5Olx0XHRcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG42MzAwOlx0XHRcdHVuc2lnbmVkIGludCBhd3VfbWluID0gMCwgYXd1X21heCA9IDA7XG42MzAxOlx0XG42MzAyOlx0XHRcdGlmIChleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGUoaW5vZGUpKSB7XG42MzAzOlx0XHRcdFx0YXd1X21pbiA9IHNiaS1cdTAwM2VzX2F3dV9taW47XG42MzA0Olx0XHRcdFx0YXd1X21heCA9IHNiaS1cdTAwM2VzX2F3dV9tYXg7XG42MzA1Olx0XHRcdH1cbjYzMDY6XHRcbjYzMDc6XHRcdFx0Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCwgYXd1X21pbiwgYXd1X21heCxcbjYzMDg6XHRcdFx0XHRcdFx0XHQgYXd1X21heCk7XG42MzA5Olx0XHR9XG42MzEwOlx0XG42MzExOlx0XHRmbGFncyA9IGVpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRkxfVVNFUl9WSVNJQkxFO1xuNjMxMjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0FQUEVORF9GTClcbjYzMTM6XHRcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfQVBQRU5EO1xuNjMxNDpcdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0NPTVBSX0ZMKVxuNjMxNTpcdFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9DT01QUkVTU0VEO1xuNjMxNjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0VOQ1JZUFRfRkwpXG42MzE3Olx0XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0VOQ1JZUFRFRDtcbjYzMTg6XHRcdGlmIChmbGFncyBcdTAwMjYgRVhUNF9JTU1VVEFCTEVfRkwpXG42MzE5Olx0XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0lNTVVUQUJMRTtcbjYzMjA6XHRcdGlmIChmbGFncyBcdTAwMjYgRVhUNF9OT0RVTVBfRkwpXG42MzIxOlx0XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX05PRFVNUDtcbjYzMjI6XHRcdGlmIChmbGFncyBcdTAwMjYgRVhUNF9WRVJJVFlfRkwpXG42MzIzOlx0XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX1ZFUklUWTtcbjYzMjQ6XHRcbjYzMjU6XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FQUEVORCB8XG42MzI2Olx0XHRcdFx0XHQgIFNUQVRYX0FUVFJfQ09NUFJFU1NFRCB8XG42MzI3Olx0XHRcdFx0XHQgIFNUQVRYX0FUVFJfRU5DUllQVEVEIHxcbjYzMjg6XHRcdFx0XHRcdCAgU1RBVFhfQVRUUl9JTU1VVEFCTEUgfFxuNjMyOTpcdFx0XHRcdFx0ICBTVEFUWF9BVFRSX05PRFVNUCB8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuIEdpdmVuIHRoZSBuYW1pbmcsIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBwb3B1bGF0aW5nIGBzdGF0eGAgc3RydWN0dXJlcywgYW5kIHRoZSAmIzM0O2F0b21pYyB3cml0ZXMmIzM0OyBzdWdnZXN0cyB0aGlzIGlzIGRvbmUgaW4gYSB0aHJlYWQtc2FmZSBtYW5uZXIsIG9yIGF0IGxlYXN0IHdpdGggY29uc2lkZXJhdGlvbnMgZm9yIGNvbmN1cnJlbmN5LiBUaGlzIGlzIHByZXR0eSBjb21tb247IEkgaW1hZ2luZSB0aGlzIGZ1bmN0aW9uIGJlaW5nIGEgY29yZSBjb21wb25lbnQsIGVzcGVjaWFsbHkgaW4gYSBmaWxlIHN5c3RlbSBjb250ZXh0IHdoZXJlIG1ldGFkYXRhIGNvbnNpc3RlbmN5IGlzIHBhcmFtb3VudC4gSSYjMzk7bGwgbmVlZCB0byBwaW5wb2ludCBpdHMgcGxhY2UgaW4gdGhlIHJlYWQgcGF0aC4KClNvLCB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgcHJvYmFibHkgbWVudGFsbHkgbWFwIGl0cyBjYWxscyB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIG1heWJlIHRoaW5rIGFib3V0IHdobyBpbnZva2VzIHRoaXMsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHJlYWRzIG9yIHdyaXRlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzPyBNeSBleHBlY3RhdGlvbiBpcyBhIHNldCBvZiBwb2ludGVycyB0byBgc3RhdHhgIHN0cnVjdHVyZXMgb3Igc29tZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB0aGVyZW9mLCB3aGljaCBsaWtlbHkgaW52b2x2ZXMgaGFuZGxpbmcgbG9ja2luZyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdXBkYXRlcy4gSXQgaXMgbGlrZWx5IHRoYXQgdGhpcyBmdW5jdGlvbiBoYXMgdG8gZGVhbCB3aXRoIHRoZSBzdWJ0bGV0aWVzIG9mIHBhcnRpYWwgYXRvbWljIHVwZGF0ZXMgdG8gdGhlIGRhdGEgc3RydWN0dXJlLgoKVGhlIGxldmVsIG9mIGF0b21pY2l0eSBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciBob3cgaXQgd2lsbCBiZSB1c2VkLiBXaWxsIGVhY2ggbWVtYmVyIG9mIHRoZSBzdGF0eCBzdHJ1Y3R1cmUgYmUgd3JpdHRlbiBhdG9taWNhbGx5LCBvciBhcmUgbGFyZ2VyIGFnZ3JlZ2F0ZXMgdXBkYXRlZCBpbiBhIGNvb3JkaW5hdGVkIG1hbm5lcj8gQW5kIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgcG90ZW50aWFsIG9mIGVycm9ycyBncmFjZWZ1bGx5LCBwZXJoYXBzIHJldHJ5aW5nIG9yIHByb3ZpZGluZyBlcnJvciBjb2RlcyB0aGF0IHByb3BhZ2F0ZSBiYWNrIHVwIHRvIHRoZSBjYWxsZXIuIFVuZGVyc3RhbmRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGlzIGltcG9ydGFudCB0byBmaWd1cmUgb3V0IGhvdyBzYWZlIHRoZSBmdW5jdGlvbiBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iZGV2LmM9MTM5ND12b2lkIGJkZXZfc3RhdHgoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzaylcbi0tXG5ibG9jay9iZGV2LmMtMTQxNi1cbmJsb2NrL2JkZXYuYzoxNDE3Olx0XHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LFxuYmxvY2svYmRldi5jLTE0MTgtXHRcdFx0cXVldWVfYXRvbWljX3dyaXRlX3VuaXRfbWluX2J5dGVzKGJkX3F1ZXVlKSxcbi0tXG5mcy9leHQ0L2lub2RlLmM9NjI2Nj1pbnQgZXh0NF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjMwNi1cbmZzL2V4dDQvaW5vZGUuYzo2MzA3Olx0XHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxuZnMvZXh0NC9pbm9kZS5jLTYzMDgtXHRcdFx0XHRcdFx0IGF3dV9tYXgpO1xuLS1cbmZzL3N0YXQuYz0xMzI9RVhQT1JUX1NZTUJPTChnZW5lcmljX2ZpbGxfc3RhdHhfYXR0cik7XG4tLVxuZnMvc3RhdC5jLTEzNC0vKipcbmZzL3N0YXQuYzoxMzU6ICogZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMgLSBGaWxsIGluIGF0b21pYyB3cml0ZXMgc3RhdHggYXR0cmlidXRlc1xuZnMvc3RhdC5jLTEzNi0gKiBAc3RhdDpcdFdoZXJlIHRvIGZpbGwgaW4gdGhlIGF0dHJpYnV0ZSBmbGFnc1xuLS1cbmZzL3N0YXQuYy0xNDMtICovXG5mcy9zdGF0LmM6MTQ0OnZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RydWN0IGtzdGF0ICpzdGF0LFxuZnMvc3RhdC5jLTE0NS1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21pbixcbi0tXG5mcy9zdGF0LmMtMTY1LX1cbmZzL3N0YXQuYzoxNjY6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMpO1xuZnMvc3RhdC5jLTE2Ny1cbi0tXG5mcy94ZnMveGZzX2lvcHMuYz02NzA9eGZzX3JlcG9ydF9hdG9taWNfd3JpdGUoXG4tLVxuZnMveGZzL3hmc19pb3BzLmMtNjczLXtcbmZzL3hmcy94ZnNfaW9wcy5jOjY3NDpcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsXG5mcy94ZnMveGZzX2lvcHMuYy02NzUtXHRcdFx0eGZzX2dldF9hdG9taWNfd3JpdGVfbWluKGlwKSxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzIwOD12b2lkIGdlbmVyaWNfZmlsbF9zdGF0eF9hdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBrc3RhdCAqc3RhdCk7XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzIwOTp2b2lkIGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0cnVjdCBrc3RhdCAqc3RhdCxcbmluY2x1ZGUvbGludXgvZnMuaC0zMjEwLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWluLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBmcy9zdGF0LmNgIFNvdXJjZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBzcGVjaWZpYy4gVGhlIHByb2JsZW0gbGlrZWx5IHJlc2lkZXMgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBoYW5kbGluZyBvZiBgc3RhdGAgY2FsbHMsIHBhcnRpY3VsYXJseSBpbiBgZnMvc3RhdC5jYC4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgYW1pc3MgYmV0d2VlbiBsaW5lcyAxMzQgYW5kIDE2NS4gVGhpcyBzZWN0aW9uIHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIGNvcmUgbG9naWMgb2YgcG9wdWxhdGluZyB0aGUgYHN0YXRgIHN0cnVjdHVyZSwgcGVyaGFwcyByZWxhdGVkIHRvIGhvdyBpdCBkZWFscyB3aXRoIGRldmljZSBJRHMsIGlub2RlIG51bWJlcnMsIGZpbGUgc2l6ZXMsIG9yIHBlcm1pc3Npb25zLCBhbmQgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHByZWNpc2UgY2FsY3VsYXRpb25zIHRoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHRob3NlIGxpbmVzIGhvbGQgdGhlIGtleS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGxvZ2ljIHRoYXQgY291bGQgYmUgdGhlIHNvdXJjZSBvZiB3aGF0ZXZlciBiZWhhdmlvciBJJiMzOTttIHNlZWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3N0YXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTM0Olx0LyoqXG4gMTM1Olx0ICogZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMgLSBGaWxsIGluIGF0b21pYyB3cml0ZXMgc3RhdHggYXR0cmlidXRlc1xuIDEzNjpcdCAqIEBzdGF0Olx0V2hlcmUgdG8gZmlsbCBpbiB0aGUgYXR0cmlidXRlIGZsYWdzXG4gMTM3Olx0ICogQHVuaXRfbWluOlx0TWluaW11bSBzdXBwb3J0ZWQgYXRvbWljIHdyaXRlIGxlbmd0aCBpbiBieXRlc1xuIDEzODpcdCAqIEB1bml0X21heDpcdE1heGltdW0gc3VwcG9ydGVkIGF0b21pYyB3cml0ZSBsZW5ndGggaW4gYnl0ZXNcbiAxMzk6XHQgKiBAdW5pdF9tYXhfb3B0OiBPcHRpbWlzZWQgbWF4aW11bSBzdXBwb3J0ZWQgYXRvbWljIHdyaXRlIGxlbmd0aCBpbiBieXRlc1xuIDE0MDpcdCAqXG4gMTQxOlx0ICogRmlsbCBpbiB0aGUgU1RBVFh7X0FUVFJ9X1dSSVRFX0FUT01JQyBmbGFncyBpbiB0aGUga3N0YXQgc3RydWN0dXJlIGZyb21cbiAxNDI6XHQgKiBhdG9taWMgd3JpdGUgdW5pdF9taW4gYW5kIHVuaXRfbWF4IHZhbHVlcy5cbiAxNDM6XHQgKi9cbiAxNDQ6XHR2b2lkIGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0cnVjdCBrc3RhdCAqc3RhdCxcbiAxNDU6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21pbixcbiAxNDY6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21heCxcbiAxNDc6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21heF9vcHQpXG4gMTQ4Olx0e1xuIDE0OTpcdFx0LyogQ29uZmlybSB0aGF0IHRoZSByZXF1ZXN0IHR5cGUgaXMga25vd24gKi9cbiAxNTA6XHRcdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfV1JJVEVfQVRPTUlDO1xuIDE1MTpcdFxuIDE1MjpcdFx0LyogQ29uZmlybSB0aGF0IHRoZSBmaWxlIGF0dHJpYnV0ZSB0eXBlIGlzIGtub3duICovXG4gMTUzOlx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXNfbWFzayB8PSBTVEFUWF9BVFRSX1dSSVRFX0FUT01JQztcbiAxNTQ6XHRcbiAxNTU6XHRcdGlmICh1bml0X21pbikge1xuIDE1NjpcdFx0XHRzdGF0LVx1MDAzZWF0b21pY193cml0ZV91bml0X21pbiA9IHVuaXRfbWluO1xuIDE1NzpcdFx0XHRzdGF0LVx1MDAzZWF0b21pY193cml0ZV91bml0X21heCA9IHVuaXRfbWF4O1xuIDE1ODpcdFx0XHRzdGF0LVx1MDAzZWF0b21pY193cml0ZV91bml0X21heF9vcHQgPSB1bml0X21heF9vcHQ7XG4gMTU5Olx0XHRcdC8qIEluaXRpYWxseSBvbmx5IGFsbG93IDF4IHNlZ21lbnQgKi9cbiAxNjA6XHRcdFx0c3RhdC1cdTAwM2VhdG9taWNfd3JpdGVfc2VnbWVudHNfbWF4ID0gMTtcbiAxNjE6XHRcbiAxNjI6XHRcdFx0LyogQ29uZmlybSBhdG9taWMgd3JpdGVzIGFyZSBhY3R1YWxseSBzdXBwb3J0ZWQgKi9cbiAxNjM6XHRcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfV1JJVEVfQVRPTUlDO1xuIDE2NDpcdFx0fVxuIDE2NTpcdH1cbiAxNjY6XHRFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyk7XG4gMTY3Olx0XG4gMTY4Olx0LyoqXG4gMTY5Olx0ICogdmZzX2dldGF0dHJfbm9zZWMgLSBnZXRhdHRyIHdpdGhvdXQgc2VjdXJpdHkgY2hlY2tzXG4gMTcwOlx0ICogQHBhdGg6IGZpbGUgdG8gZ2V0IGF0dHJpYnV0ZXMgZnJvbVxuIDE3MTpcdCAqIEBzdGF0OiBzdHJ1Y3R1cmUgdG8gcmV0dXJuIGF0dHJpYnV0ZXMgaW5cbiAxNzI6XHQgKiBAcmVxdWVzdF9tYXNrOiBTVEFUWF94eHggZmxhZ3MgaW5kaWNhdGluZyB3aGF0IHRoZSBjYWxsZXIgd2FudHNcbiAxNzM6XHQgKiBAcXVlcnlfZmxhZ3M6IFF1ZXJ5IG1vZGUgKEFUX1NUQVRYX1NZTkNfVFlQRSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzY4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGV4dDRfZ2V0YXR0cmAgRnVuY3Rpb24gZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZXh0NF9nZXRhdHRyYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBnZXRzIHRyaWdnZXJlZCB3aGVuIGBzdGF0eGAgaXMgY2FsbGVkIG9uIGFuIGV4dDQgZmlsZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGV2ZW4gcmVsZXZhbnQgaW4gYSB0eXBpY2FsIGZ1enppbmcgc2V0dXA/IEFyZSBgZXh0NGAgYW5kIGBleHQ0X2dldGF0dHJgIGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgc3l6a2FsbGVyPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gRXh0NCBpcyBwcmFjdGljYWxseSB0aGUgZGVmYXVsdCBmaWxlc3lzdGVtIGZvciBMaW51eCwgYW5kIHN5emthbGxlciBhYnNvbHV0ZWx5ICpwb3VuZHMqIGV4dDQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBpbmNsdWRpbmcgdGhlIGBzdGF0eGAgc3lzdGVtIGNhbGwuIEdvb2QsIHRoYXQgdGFrZXMgY2FyZSBvZiByZWFjaGFiaWxpdHkuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjcml0ZXJpYS4gRmlyc3QsIHRoZSBwb3NpdGl2ZSBzaWRlLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY29yZSBzdWJzeXN0ZW06IHRoZSBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGBmcy9leHQ0L2lub2RlLmNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gV2UmIzM5O3ZlIGVzdGFibGlzaGVkIGl0JiMzOTtzIHJlYWNoYWJsZSDigJMgYGV4dDRfZ2V0YXR0cmAgaXMgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgc3RhdHgoKWAgc3lzY2FsbCBvbiBleHQ0IGZpbGVzLiBBbmQgZmluYWxseSwgaXMgaXQgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhpcywgdGhlIGFuc3dlciBpcyAmIzM0O3RydWUuJiMzNDsgVGhhdCYjMzk7cyB0aGUgZ3JlZW4gbGlnaHQuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgZXh0NC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBmcy9leHQ0L0tjb25maWdgIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcgZW5hYmxlZCBmb3IgdGhpcyB0byBiZSBwcm9kdWN0aXZlLiBOZWVkIHRvIG1ha2Ugc3VyZSBubyB3ZWlyZCBkZXBlbmRlbmNpZXMgYXJlIGJsb2NraW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA5MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBFWFQ0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIGBFWFQ0X0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcywgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlIGZvciBleHQ0IHdpdGhpbiB0aGUgZmlsZXN5c3RlbSBkaXJlY3RvcnkuIEkgd2FudCB0byBxdWlja2x5IGNvbmZpcm0gd2hhdCB0aGUgYnVpbGQgc3lzdGVtIHNlZXMsIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNoYW5nZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBtb3Zpbmcgb24uIEtub3dpbmcgdGhlIEtjb25maWcgZGV0YWlscyBpcyBlc3NlbnRpYWwgZ3JvdW5kd29yay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaW4gYGZzL2V4dDQvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEVYVDRfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDU6XHRcdHNlbGVjdCBKQkQyXG4gICA2Olx0XHRzZWxlY3QgQ1JDMTZcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA5Olx0XHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXG4gIDEyOlx0XG4gIDEzOlx0XHQgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSxcbiAgMTQ6XHRcdCAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aFxuICAxNTpcdFx0ICBleHQzOyBpdCBpcyBiYXNlZCBvbiBleHRlbnQgbWFwcyBhbmQgaXQgc3VwcG9ydHMgNDgtYml0XG4gIDE2Olx0XHQgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZFxuICAxNzpcdFx0ICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyxcbiAgMTg6XHRcdCAgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGZlYXR1cmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIHNwZWVkXG4gIDE5Olx0XHQgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXRcbiAgMjA6XHRcdCAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLlxuICAyMTpcdFxuICAyMjpcdFx0ICBUaGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnRzIG1vdW50aW5nIGFuIGV4dDMgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmVcbiAgMjM6XHRcdCAgYXJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGFuZCBpbm9kZVxuICAyNDpcdFx0ICB0YWJsZSByZWFkYWhlYWQsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGdhaW5zIHJlcXVpcmUgZW5hYmxpbmcgZXh0NFxuICAyNTpcdFx0ICBmZWF0dXJlcyBpbiB0aGUgZmlsZXN5c3RlbSB1c2luZyB0dW5lMmZzLCBvciBmb3JtYXR0aW5nIGEgbmV3XG4gIDI2Olx0XHQgIGZpbGVzeXN0ZW0gYXMgYW4gZXh0NCBmaWxlc3lzdGVtIGluaXRpYWxseS4gV2l0aG91dCBleHBsaWNpdCBlbmFibGluZ1xuICAyNzpcdFx0ICBvZiBleHQ0IGZlYXR1cmVzLCB0aGUgb24gZGlzayBmaWxlc3lzdGVtIGZvcm1hdCBzdGF5cyBmdWxseSBiYWNrd2FyZFxuICAyODpcdFx0ICBjb21wYXRpYmxlLlxuICAyOTpcdFxuICAzMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXG4gIDMxOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxuICAzMjpcdFxuICAzMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gRVhUNF9GU1xuICAzODpcdFx0ZGVwZW5kcyBvbiBFWFQyX0ZTPW5cbiAgMzk6XHRcdGRlZmF1bHQgeVxuICA0MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCYjMzk7cyBpbiBgRm9jdXNTeW1ib2xzYC4gQWgsIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgZXh0NF9nZXRhdHRyYC4gSXMgdGhhdCB0aGUgcmlnaHQgcGxhY2UgdG8gZm9jdXM/IEkgbmVlZCB0byBtYWtlIGEgZGVjaXNpb24gaGVyZS4gU2hvdWxkIEkgYmUgbG9va2luZyBhdCBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgIGFzIHdlbGwsIG9yIGlzIGBleHQ0X2dldGF0dHJgIHN1ZmZpY2llbnQ/CgpSaWdodCwgYGV4dDRfZ2V0YXR0cmAgaXMgdGhlICpleHQ0LXNwZWNpZmljKiBnZXRhdHRyIGlub2RlIG9wZXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgbW9kaWZpZWQgY29kZSBkaXJlY3RseSBpbiBpdCwgc28gaXQgZmVlbHMgbGlrZSBhIGdvb2QgZml0IGZvciBgRm9jdXNTeW1ib2xzYC4gT24gdGhlIG90aGVyIGhhbmQsIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2AgKmlzKiBjYWxsZWQgYnkgYGV4dDRfZ2V0YXR0cmAsIGJ1dCBhbHNvIGJ5IGZ1bmN0aW9ucyBzdWNoIGFzIGBiZGV2X3N0YXR4YCBhbmQgYHhmc19yZXBvcnRfYXRvbWljX3dyaXRlYCwgaW1wbHlpbmcgYnJvYWRlciB1c2UgYmV5b25kIGp1c3QgdGhlIGNvbnRleHQgSSYjMzk7bSBpbnRlcmVzdGVkIGluLgoKU28sIGxldCYjMzk7cyBnbyB3aXRoOiBgRm9jdXNTeW1ib2xzYDogYGV4dDRfZ2V0YXR0cmAsIGFuZCBrZWVwIGFuIG9wZW4gbWluZCBmb3IgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCBsYXRlciBpZiBuZWVkZWQuIEkgbmVlZCB0byBlc3RhYmxpc2ggd2hldGhlciBgZXh0NF9nZXRhdHRyYCBpcyB0b28gc3BlY2lmaWMuIEl0JiMzOTtzIHRoZSBleHQ0LXNwZWNpZmljIGhhbmRsZXIgZm9yIHN0YXR4IGFuZCBzdGF0IG9wZXJhdGlvbnMsIGRpcmVjdGx5IHJlbGF0ZWQgdG8gZXh0NCBmaWxlc3lzdGVtIGNhbGxzLiBGdXp6aW5nIGF0dGVtcHRzIHRvIHRhcmdldCBzdGF0eCBhbmQgcmVsYXRlZCBjYWxscyBvbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHdpbGwgbW9zdCBsaWtlbHkgbGVhZCB0byBgZXh0NF9nZXRhdHRyYC4gVGhhdCBzb3VuZHMgZm9jdXNlZCwgbm90IHViaXF1aXRvdXMsIHVubGlrZSBzYXksIGdlbmVyaWMgdmZzIGZ1bmN0aW9ucyBvciBtZW1vcnkgYWxsb2NhdG9ycy4KCkp1c3QgZm9yIGNvbnRleHQsIEkgc2hvdWxkIHBlZWsgYXQgYGV4dDRfaW5vZGVfY2FuX2F0b21pY193cml0ZWAgaW4gZnMvZXh0NC9pbm9kZS5jIHRvIGdldCB0aGUgc3Vycm91bmRpbmcgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9NDA0Nz1zdGF0aWMgaW5saW5lIGludCBleHQ0X2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL2V4dDQvZXh0NC5oLTQwNTktXG5mcy9leHQ0L2V4dDQuaDo0MDYwOnN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0NC5oLTQwNjEte1xuLS1cbmZzL2V4dDQvZmlsZS5jPTk2Mj1zdGF0aWMgaW50IGV4dDRfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2V4dDQvZmlsZS5jLTk5NC1cbmZzL2V4dDQvZmlsZS5jOjk5NTpcdGlmIChleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGUoaW5vZGUpKVxuZnMvZXh0NC9maWxlLmMtOTk2LVx0XHRmaWxwLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DQU5fQVRPTUlDX1dSSVRFO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz02MjY2PWludCBleHQ0X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy02MzAxLVxuZnMvZXh0NC9pbm9kZS5jOjYzMDI6XHRcdGlmIChleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGUoaW5vZGUpKSB7XG5mcy9leHQ0L2lub2RlLmMtNjMwMy1cdFx0XHRhd3VfbWluID0gc2JpLVx1MDAzZXNfYXd1X21pbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg4NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIGV4dDQgQXRvbWljIFdyaXRlcyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYmV0dGVyIGFib3V0IGhvdyBhdG9taWMgd3JpdGVzIGFyZSBoYW5kbGVkIGluIGV4dDQuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIGBleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGVgLiBJIHJlbWVtYmVyIHRoYXQmIzM5O3MgZGVjbGFyZWQgaW4gYGZzL2V4dDQvZXh0NC5oYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBnbyBmaXJzdC4gSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoYXQgY29uZGl0aW9ucyBhcmUgYmVpbmcgY2hlY2tlZCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgdGhpcyBmdW5jdGlvbiB1c2VzIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIGF0b21pYyB3cml0ZSBpcyBwb3NzaWJsZSBmb3IgYSBnaXZlbiBpbm9kZS4gSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIHVuZGVybHlpbmcgcmVzdHJpY3Rpb25zIGF0IHBsYXkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgaGVhZGVyIGZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwNTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDA1ODpcdH1cbjQwNTk6XHRcbjQwNjA6XHRzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG40MDYxOlx0e1xuNDA2MjpcdFxuNDA2MzpcdFx0cmV0dXJuIFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjZcbjQwNjQ6XHRcdFx0ZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykgXHUwMDI2XHUwMDI2XG40MDY1Olx0XHRcdEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19hd3VfbWluIFx1MDAzZSAwO1xuNDA2NjpcdH1cbjQwNjc6XHRcbjQwNjg6XHRleHRlcm4gaW50IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbjQwNjk6XHRcdFx0XHRcdCAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuNDA3MDpcdFx0XHRcdFx0ICBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrKTtcbjQwNzE6XHRcbjQwNzI6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcbjQwNzM6XHQjZGVmaW5lIEVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChzeW0pIFxcXG40MDc0Olx0XHRFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHN5bSwgXCYjMzQ7ZXh0NC10ZXN0XCYjMzQ7KVxuNDA3NTpcdCNlbmRpZlxuNDA3NjpcdCNlbmRpZlx0LyogX19LRVJORUxfXyAqL1xuNDA3NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDM2CgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRXh0NCBBdG9taWMgV3JpdGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBhdG9taWMgd3JpdGVzIGluIGV4dDQuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGVgIGlzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiBkZWZpbmVkIGluIGBmcy9leHQ0L2V4dDQuaGAuIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQsIGJ1dCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBmcy9leHQ0L2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBleHQ0X2dldGF0dHJgIGZ1bmN0aW9uLgoKTXkgYEZvY3VzU3ltYm9sc2AsIGFzIEkgdW5kZXJzdGFuZCB0aGVtLCBhcmUgZGVmaW5pdGVseSBgZXh0NF9nZXRhdHRyYCBhbmQgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYC4gVGhlIHBhdGNoIGFmZmVjdHMgaG93IHRoZSBtYXggYXRvbWljIHdyaXRlIHVuaXQgcGFyYW1ldGVyIGlzIHBhc3NlZCB0byBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoKWAgd2l0aGluIGBleHQ0X2dldGF0dHIoKWAuIFRoaXMgd2hvbGUgdGhpbmcgYmVjb21lcyByZWxldmFudCB3aGVuIHVzZXJzcGFjZSBjYWxscyBgc3RhdHgoKWAgb24gYW4gZXh0NCBmaWxlc3lzdGVtIGFuZCBzcGVjaWZpY2FsbHkgcmVxdWVzdHMgYFNUQVRYX1dSSVRFX0FUT01JQ2AuCgpJdCBsb29rcyBsaWtlIHRoaXMgaXMgKmRlZmluaXRlbHkqIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLCB0aGF0JiMzOTtzIHdoYXQgYFdvcnRoRnV6emluZzogdHJ1ZWAgaXMgc2F5aW5nLiBUaGUgcmF0aW9uYWxlIHNlZW1zIHNvbGlkIOKAkyB0aGUgc3lzdGVtIGNhbGwgYW5kIHBhcmFtZXRlciBjaGFuZ2UgbWFrZSB0aGlzIGEgbGlrZWx5IHRhcmdldCBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgY2xlYXJseSBkZXBlbmRlbnQgb24gYEVYVDRfRlNgLiBJJiMzOTt2ZSBjb25maXJtZWQgYWxsIG9mIHRoYXQsIGFuZCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSB1bmRlcnN0YW5kaW5nLCBzbyBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgbG9nIHRoZXNlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9nZXRhdHRyJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBhdG9taWMgd3JpdGUgcGFyYW1ldGVycyAodW5pdF9tYXhfb3B0KSBhcmUgcmVwb3J0ZWQgaW4gZXh0NF9nZXRhdHRyKCkgd2hlbiBzdGF0eCBxdWVyaWVzIFNUQVRYX1dSSVRFX0FUT01JQy4gVGhpcyBpcyByZWFjaGFibGUgdXNlciBzcGFjZSBjb2RlIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gdmlhIHN0YXR4IHN5c3RlbSBjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZ2V0YXR0ciYjMzQ7LAogICAgJiMzNDtnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgYXRvbWljIHdyaXRlIHBhcmFtZXRlcnMgKHVuaXRfbWF4X29wdCkgYXJlIHJlcG9ydGVkIGluIGV4dDRfZ2V0YXR0cigpIHdoZW4gc3RhdHggcXVlcmllcyBTVEFUWF9XUklURV9BVE9NSUMuIFRoaXMgaXMgcmVhY2hhYmxlIHVzZXIgc3BhY2UgY29kZSBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHZpYSBzdGF0eCBzeXN0ZW0gY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9nZXRhdHRyKClgIGluIGBmcy9leHQ0L2lub2RlLmNgIHRvIHBhc3MgYGF3dV9tYXhgIGluc3RlYWQgb2YgYDBgIGFzIHRoZSBgdW5pdF9tYXhfb3B0YCBwYXJhbWV0ZXIgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKClgLlxuXG4xLiBUaGUgdmFyaWFibGUgYGF3dV9tYXhgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAoYHVuc2lnbmVkIGludCBhd3VfbWluID0gMCwgYXd1X21heCA9IDA7YCkgYW5kIG9wdGlvbmFsbHkgdXBkYXRlZCBmcm9tIGBzYmktXHUwMDNlc19hd3VfbWF4YC5cbjIuIFRoZSBkZXN0aW5hdGlvbiBgc3RydWN0IGtzdGF0YCBpcyB6ZXJvLWluaXRpYWxpemVkIGluIGB2ZnNfZ2V0YXR0cl9ub3NlYygpYC5cbjMuIFdoZW4gcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB2aWEgYHN0YXR4YCwgYGNwX3N0YXR4KClgIGluaXRpYWxpemVzIHRoZSBlbnRpcmUgYHN0cnVjdCBzdGF0eGAgc3RydWN0dXJlIHVzaW5nIGBtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBwb3B1bGF0aW5nIGZpZWxkcyBhbmQgY2FsbGluZyBgY29weV90b191c2VyKClgLlxuNC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGQxNWE0MmY2ZmY1YTQ4MTFjYjQwZDQzMWQyYjRjNjQ0MmZkNDhiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDEwOjQyOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IDI2ZjBmOTcxNGYwM2MuLjkzMDU2Yzk3MWU3NGIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTYzMDQsNyAmIzQzOzYzMDQsOCBAQCBpbnQgZXh0NF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwKIAkJCWF3dV9tYXggPSBzYmktJmd0O3NfYXd1X21heDsKIAkJfQogCi0JCWdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsIDApOwomIzQzOwkJZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCwgYXd1X21pbiwgYXd1X21heCwKJiM0MzsJCQkJCQkgYXd1X21heCk7CiAJfQogCiAJZmxhZ3MgPSBlaS0mZ3Q7aV9mbGFncyAmYW1wOyBFWFQ0X0ZMX1VTRVJfVklTSUJMRTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZXh0NF9nZXRhdHRyYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBtb2RpZnlpbmcgdGhlIGBleHQ0X2dldGF0dHJgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZnMvZXh0NC9pbm9kZS5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHdlJiMzOTtyZSBjYWxsaW5nIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2AuCgpUaGUgZGlmZiBzaG93cyBhIG1pbm9yIGFkanVzdG1lbnQsIGNoYW5naW5nIHRoZSB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYC4gUHJldmlvdXNseSBpdCB3YXMgMCwgYW5kIG5vdyBpdCYjMzk7cyBgYXd1X21heGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvZiBzZXR0aW5nIHRoZSBhdG9taWMgd3JpdGUgdW5pdCBtYXggYXMgdGhlIG51bWJlcj8KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgIGl0c2VsZiwgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgd2l0aGluIGBleHQ0X2dldGF0dHJgLiBTcGVjaWZpY2FsbHksIHdoYXQgYXJlIGBhd3VfbWluYCBhbmQgYGF3dV9tYXhgPyBJJiMzOTtsbCBwcm9iYWJseSBmaXJlIHVwIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHNvdXJjZSBjb2RlIGZvciBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgIGFuZCBtYXliZSBwb2tlIGFyb3VuZCBgaW5vZGUuY2AgZm9yIHNvbWUgbW9yZSBjb250ZXh0LiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBhdG9taWMgd3JpdGUgdW5pdCBjb25jZXB0IGFuZCBob3cgdGhlIHN0YXQgaW5mb3JtYXRpb24gaXMgYmVpbmcgcG9wdWxhdGVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JkZXYuYz0xMzk0PXZvaWQgYmRldl9zdGF0eChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrKVxuLS1cbmJsb2NrL2JkZXYuYy0xNDE2LVxuYmxvY2svYmRldi5jOjE0MTc6XHRcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsXG5ibG9jay9iZGV2LmMtMTQxOC1cdFx0XHRxdWV1ZV9hdG9taWNfd3JpdGVfdW5pdF9taW5fYnl0ZXMoYmRfcXVldWUpLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz02MjY2PWludCBleHQ0X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy02MzA2LVxuZnMvZXh0NC9pbm9kZS5jOjYzMDc6XHRcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsXG5mcy9leHQ0L2lub2RlLmMtNjMwOC1cdFx0XHRcdFx0XHQgYXd1X21heCk7XG4tLVxuZnMvc3RhdC5jPTEzMj1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsbF9zdGF0eF9hdHRyKTtcbi0tXG5mcy9zdGF0LmMtMTM0LS8qKlxuZnMvc3RhdC5jOjEzNTogKiBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyAtIEZpbGwgaW4gYXRvbWljIHdyaXRlcyBzdGF0eCBhdHRyaWJ1dGVzXG5mcy9zdGF0LmMtMTM2LSAqIEBzdGF0Olx0V2hlcmUgdG8gZmlsbCBpbiB0aGUgYXR0cmlidXRlIGZsYWdzXG4tLVxuZnMvc3RhdC5jLTE0My0gKi9cbmZzL3N0YXQuYzoxNDQ6dm9pZCBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdHJ1Y3Qga3N0YXQgKnN0YXQsXG5mcy9zdGF0LmMtMTQ1LVx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWluLFxuLS1cbmZzL3N0YXQuYy0xNjUtfVxuZnMvc3RhdC5jOjE2NjpFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyk7XG5mcy9zdGF0LmMtMTY3LVxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTY3MD14ZnNfcmVwb3J0X2F0b21pY193cml0ZShcbi0tXG5mcy94ZnMveGZzX2lvcHMuYy02NzMte1xuZnMveGZzL3hmc19pb3BzLmM6Njc0Olx0Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCxcbmZzL3hmcy94ZnNfaW9wcy5jLTY3NS1cdFx0XHR4ZnNfZ2V0X2F0b21pY193cml0ZV9taW4oaXApLFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0zMjA4PXZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0dHIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGtzdGF0ICpzdGF0KTtcbmluY2x1ZGUvbGludXgvZnMuaDozMjA5OnZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RydWN0IGtzdGF0ICpzdGF0LFxuaW5jbHVkZS9saW51eC9mcy5oLTMyMTAtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgdW5pdF9taW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgRmlsZSBNZXRhZGF0YSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZyBvZiBmaWxlIG1ldGFkYXRhLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYHN0YXRgIHN5c3RlbSBjYWxsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGV4dDQgZmlsZXN5c3RlbS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgYGZzL3N0YXQuY2AsIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDEzNC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRpc3BhdGNoZXMgdGhlIGBzdGF0YCByZXF1ZXN0IGFuZCBoYW5kbGVzIHRoZSBiYXNpYyBzZXR1cC4gVGhlbiwgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyB0aGUgZXh0NCBpbXBsZW1lbnRhdGlvbiBpbnRlcmFjdHMsIEkgbmVlZCB0byBqdW1wIG92ZXIgdG8gYGZzL2V4dDQvaW5vZGUuY2AsIGxpa2VseSBhcm91bmQgbGluZSA2MzAwLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGludm9sdmUgZmluZGluZyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCBleHQ0IHVzZXMgdG8gcG9wdWxhdGUgdGhlIGBzdGF0YCBkYXRhIHN0cnVjdHVyZSBmcm9tIHRoZSBpbm9kZSBkYXRhLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgZGV0YWlscyB0aGVyZSwgc3VjaCBhcyBob3cgdGhlIGlub2RlJiMzOTtzIG9uLWRpc2sgcmVwcmVzZW50YXRpb24gdHJhbnNsYXRlcyB0byB0aGUgaW4tbWVtb3J5IGBzdGF0YCBzdHJ1Y3R1cmUsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSBzaXplLCBwZXJtaXNzaW9ucywgYW5kIHRpbWVzdGFtcHMuIEhvcGVmdWxseSwgdGhpcyBhcHByb2FjaCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvcmUgZGF0YSBpcyBzb3VyY2VkIGFuZCBwcmVwYXJlZCBmb3IgdGhlIHVzZXIgc3BhY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3RhdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzQ6XHQvKipcbiAxMzU6XHQgKiBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyAtIEZpbGwgaW4gYXRvbWljIHdyaXRlcyBzdGF0eCBhdHRyaWJ1dGVzXG4gMTM2Olx0ICogQHN0YXQ6XHRXaGVyZSB0byBmaWxsIGluIHRoZSBhdHRyaWJ1dGUgZmxhZ3NcbiAxMzc6XHQgKiBAdW5pdF9taW46XHRNaW5pbXVtIHN1cHBvcnRlZCBhdG9taWMgd3JpdGUgbGVuZ3RoIGluIGJ5dGVzXG4gMTM4Olx0ICogQHVuaXRfbWF4Olx0TWF4aW11bSBzdXBwb3J0ZWQgYXRvbWljIHdyaXRlIGxlbmd0aCBpbiBieXRlc1xuIDEzOTpcdCAqIEB1bml0X21heF9vcHQ6IE9wdGltaXNlZCBtYXhpbXVtIHN1cHBvcnRlZCBhdG9taWMgd3JpdGUgbGVuZ3RoIGluIGJ5dGVzXG4gMTQwOlx0ICpcbiAxNDE6XHQgKiBGaWxsIGluIHRoZSBTVEFUWHtfQVRUUn1fV1JJVEVfQVRPTUlDIGZsYWdzIGluIHRoZSBrc3RhdCBzdHJ1Y3R1cmUgZnJvbVxuIDE0MjpcdCAqIGF0b21pYyB3cml0ZSB1bml0X21pbiBhbmQgdW5pdF9tYXggdmFsdWVzLlxuIDE0MzpcdCAqL1xuIDE0NDpcdHZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RydWN0IGtzdGF0ICpzdGF0LFxuIDE0NTpcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWluLFxuIDE0NjpcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWF4LFxuIDE0NzpcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWF4X29wdClcbiAxNDg6XHR7XG4gMTQ5Olx0XHQvKiBDb25maXJtIHRoYXQgdGhlIHJlcXVlc3QgdHlwZSBpcyBrbm93biAqL1xuIDE1MDpcdFx0c3RhdC1cdTAwM2VyZXN1bHRfbWFzayB8PSBTVEFUWF9XUklURV9BVE9NSUM7XG4gMTUxOlx0XG4gMTUyOlx0XHQvKiBDb25maXJtIHRoYXQgdGhlIGZpbGUgYXR0cmlidXRlIHR5cGUgaXMga25vd24gKi9cbiAxNTM6XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IFNUQVRYX0FUVFJfV1JJVEVfQVRPTUlDO1xuIDE1NDpcdFxuIDE1NTpcdFx0aWYgKHVuaXRfbWluKSB7XG4gMTU2Olx0XHRcdHN0YXQtXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWluID0gdW5pdF9taW47XG4gMTU3Olx0XHRcdHN0YXQtXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWF4ID0gdW5pdF9tYXg7XG4gMTU4Olx0XHRcdHN0YXQtXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWF4X29wdCA9IHVuaXRfbWF4X29wdDtcbiAxNTk6XHRcdFx0LyogSW5pdGlhbGx5IG9ubHkgYWxsb3cgMXggc2VnbWVudCAqL1xuIDE2MDpcdFx0XHRzdGF0LVx1MDAzZWF0b21pY193cml0ZV9zZWdtZW50c19tYXggPSAxO1xuIDE2MTpcdFxuIDE2MjpcdFx0XHQvKiBDb25maXJtIGF0b21pYyB3cml0ZXMgYXJlIGFjdHVhbGx5IHN1cHBvcnRlZCAqL1xuIDE2MzpcdFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9XUklURV9BVE9NSUM7XG4gMTY0Olx0XHR9XG4gMTY1Olx0fVxuIDE2NjpcdEVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKTtcbiAxNjc6XHRcbiAxNjg6XHQvKipcbiAxNjk6XHQgKiB2ZnNfZ2V0YXR0cl9ub3NlYyAtIGdldGF0dHIgd2l0aG91dCBzZWN1cml0eSBjaGVja3NcbiAxNzA6XHQgKiBAcGF0aDogZmlsZSB0byBnZXQgYXR0cmlidXRlcyBmcm9tXG4gMTcxOlx0ICogQHN0YXQ6IHN0cnVjdHVyZSB0byByZXR1cm4gYXR0cmlidXRlcyBpblxuIDE3MjpcdCAqIEByZXF1ZXN0X21hc2s6IFNUQVRYX3h4eCBmbGFncyBpbmRpY2F0aW5nIHdoYXQgdGhlIGNhbGxlciB3YW50c1xuIDE3MzpcdCAqIEBxdWVyeV9mbGFnczogUXVlcnkgbW9kZSAoQVRfU1RBVFhfU1lOQ19UWVBFKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzY5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGZyb20gYGZzL2V4dDQvaW5vZGUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNjI5MC02MzIwOgoKKipBbmFseXppbmcgZXh0NCBpbm9kZS5jICg2MjkwLTYzMjApOiBBIEZvY3VzZWQgTG9vayoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtPa2F5LCBleHQ0IGlub2RlLmMuLi4gbGV0JiMzOTtzIHBpbnBvaW50IHRoYXQgc2VjdGlvbi4mIzM0OyBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB0byBob25lIGluIG9uIGxpbmVzIDYyOTAgdG8gNjMyMC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcHJvYmFibHkgYmUgbG9va2luZyBhdCBzb21lIGlub2RlIG9wZXJhdGlvbiwgcG90ZW50aWFsbHkgYSBtZXRhZGF0YSB1cGRhdGUgb3IgcGVyaGFwcyBzb21lIGFzcGVjdHMgb2YgaW5vZGUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24sIG9yIG1heWJlIGV2ZW4gcmVsYXRlZCB0byBqb3VybmFsIG9wZXJhdGlvbnMsIGdpdmVuIHRoZSBjb250ZXh0IG9mIGlub2RlIGhhbmRsaW5nLiBUaGUgbGluZSBudW1iZXJzIGFyZSBpbXBvcnRhbnQsIGJlY2F1c2UgdGhpcyBpbmRpY2F0ZXMgYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjb2RlYmFzZS4gSSBhbSBleHBlY3RpbmcgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBsaWtlbHkgd2l0aCBlcnJvciBoYW5kbGluZywgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzLCBzb21lIGtleSBmdW5jdGlvbiBjYWxsLCBzb21lIGNvbXBhcmlzb24gb3IgY29uZGl0aW9uYWwgbG9naWMsIG9yIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYmxvY2sgZGV2aWNlIGxheWVyLiBQZXJoYXBzIHRoZSBjb2RlIGRlYWxzIHdpdGggdGhlIGxvZ2ljIGludm9sdmVkIGluIHNldHRpbmcgdXAgb3IgdGVhcmluZyBkb3duIGFuIGV4dGVudC1tYXBwZWQgZmlsZSBibG9jay4KCkJhc2VkIG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIGxpa2VseSBmdW5jdGlvbiBjYWxscywgdGhpcyBjb2RlIHNuaXBwZXQgbGlrZWx5IGZvY3VzZXMgb24gdGhlIGxvdy1sZXZlbCwgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYW4gZXh0NCBmaWxlc3lzdGVtIG9wZXJhdGlvbi4gSXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gYmUgcGFydCBvZiB0aGUgY29yZSBmaWxlc3lzdGVtIHN0cnVjdHVyZSBhbmQgaXMgdGh1cyBoaWdobHkgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCwgaWYgZGVidWdnaW5nIG9yIG1vZGlmeWluZyBleHQ0LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHZhcmlhYmxlcyBhbmQgdGhlaXIgZGF0YSB0eXBlcywgYW5kIGFueSBjb250cm9sIGZsb3csIGVzcGVjaWFsbHkgcG90ZW50aWFsIGVycm9yIHBhdGhzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjI4MDpcdFxuNjI4MTpcdFx0LyogUmV0dXJuIHRoZSBESU8gYWxpZ25tZW50IHJlc3RyaWN0aW9ucyBpZiByZXF1ZXN0ZWQuICovXG42MjgyOlx0XHRpZiAoKHJlcXVlc3RfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pIFx1MDAyNlx1MDAyNiBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbjYyODM6XHRcdFx0dTMyIGRpb19hbGlnbiA9IGV4dDRfZGlvX2FsaWdubWVudChpbm9kZSk7XG42Mjg0Olx0XG42Mjg1Olx0XHRcdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfRElPQUxJR047XG42Mjg2Olx0XHRcdGlmIChkaW9fYWxpZ24gPT0gMSkge1xuNjI4NzpcdFx0XHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldjtcbjYyODg6XHRcbjYyODk6XHRcdFx0XHQvKiBpb21hcCBkZWZhdWx0cyAqL1xuNjI5MDpcdFx0XHRcdHN0YXQtXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSAmIzQzOyAxO1xuNjI5MTpcdFx0XHRcdHN0YXQtXHUwMDNlZGlvX29mZnNldF9hbGlnbiA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xuNjI5MjpcdFx0XHR9IGVsc2Uge1xuNjI5MzpcdFx0XHRcdHN0YXQtXHUwMDNlZGlvX21lbV9hbGlnbiA9IGRpb19hbGlnbjtcbjYyOTQ6XHRcdFx0XHRzdGF0LVx1MDAzZWRpb19vZmZzZXRfYWxpZ24gPSBkaW9fYWxpZ247XG42Mjk1Olx0XHRcdH1cbjYyOTY6XHRcdH1cbjYyOTc6XHRcbjYyOTg6XHRcdGlmICgocmVxdWVzdF9tYXNrIFx1MDAyNiBTVEFUWF9XUklURV9BVE9NSUMpIFx1MDAyNlx1MDAyNiBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbjYyOTk6XHRcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbjYzMDA6XHRcdFx0dW5zaWduZWQgaW50IGF3dV9taW4gPSAwLCBhd3VfbWF4ID0gMDtcbjYzMDE6XHRcbjYzMDI6XHRcdFx0aWYgKGV4dDRfaW5vZGVfY2FuX2F0b21pY193cml0ZShpbm9kZSkpIHtcbjYzMDM6XHRcdFx0XHRhd3VfbWluID0gc2JpLVx1MDAzZXNfYXd1X21pbjtcbjYzMDQ6XHRcdFx0XHRhd3VfbWF4ID0gc2JpLVx1MDAzZXNfYXd1X21heDtcbjYzMDU6XHRcdFx0fVxuNjMwNjpcdFxuNjMwNzpcdFx0XHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxuNjMwODpcdFx0XHRcdFx0XHRcdCBhd3VfbWF4KTtcbjYzMDk6XHRcdH1cbjYzMTA6XHRcbjYzMTE6XHRcdGZsYWdzID0gZWktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9GTF9VU0VSX1ZJU0lCTEU7XG42MzEyOlx0XHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfQVBQRU5EX0ZMKVxuNjMxMzpcdFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9BUFBFTkQ7XG42MzE0Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfQ09NUFJfRkwpXG42MzE1Olx0XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0NPTVBSRVNTRUQ7XG42MzE2Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfRU5DUllQVF9GTClcbjYzMTc6XHRcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfRU5DUllQVEVEO1xuNjMxODpcdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0lNTVVUQUJMRV9GTClcbjYzMTk6XHRcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfSU1NVVRBQkxFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDc1CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSBhIHBhdGNoIGNoYW5naW5nIGEgY2FsbCB0byBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgZm91cnRoIGFyZ3VtZW50IGZyb20gYDBgIHRvIGBhd3VfbWF4YC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGJlaGF2aW9yIHJlbGF0ZWQgdG8gYXRvbWljIHdyaXRlIHVuaXQgaGFuZGxpbmcuCgpEaXZpbmcgaW50byBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgLCBJIHNlZSB0aGF0IHRoaXMgZm91cnRoIGFyZ3VtZW50LCBgdW5pdF9tYXhfb3B0YCwgaXMgY29uZGl0aW9uYWxseSB1c2VkLiBJZiBgdW5pdF9taW5gIGlzbiYjMzk7dCB6ZXJvLCB0aGUgZnVuY3Rpb24gc2V0cyBgc3RhdC0mZ3Q7YXRvbWljX3dyaXRlX3VuaXRfbWF4X29wdGAgdG8gYHVuaXRfbWF4X29wdGAuIFJpZ2h0LCBzbyB0aGlzIHN1Z2dlc3RzIHRoYXQgYGF3dV9tYXhgIGlzIGJlaW5nIHNldCBoZXJlIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgd2hlcmUgYmVmb3JlLCBpdCB3YXMgZXhwbGljaXRseSB6ZXJvZWQuIFRoZSBgc3RhdGAgYXJndW1lbnQgaXMgdGhlIGBzdHJ1Y3Qga3N0YXQgKnN0YXRgIHBhc3NlZCB0byBgZXh0NF9nZXRhdHRyYC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlIGFib3V0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIGBzdGF0YCBzdHJ1Y3R1cmUuIFdoZXJlIGRvZXMgaXQgY29tZSBmcm9tLCBhbmQgY3JpdGljYWxseSwgaXMgaXQgemVyb2VkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZD8gSWYgbm90LCB3ZSBjb3VsZCBiZSBpbnRyb2R1Y2luZyB1bmRlZmluZWQgYmVoYXZpb3Igb3IgdW5leHBlY3RlZCB2YWx1ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoaXMgc3RydWN0dXJlLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgc3RhdGAuIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyBob3cgYHZmc19zdGF0eGAgYW5kIHVsdGltYXRlbHkgYGRvX3N0YXR4YCBpbml0aWFsaXplIGVpdGhlciBhIGBzdHJ1Y3Qga3N0YXQgc3RhdDtgIG9yIGBzdHJ1Y3Qgc3RhdHhgLiBLbm93aW5nIGhvdyB0aGF0IGlzIHBvcHVsYXRlZCBpcyBlc3NlbnRpYWwuIFRoZW4sIEkgd2lsbCBhbHNvIHNlYXJjaCBmb3Igb3RoZXIgY2FsbGVycyBvZiBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgIG9yIGBjcF9zdGF0eGAgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgZWxzZXdoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcF9zdGF0eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zdGF0LmM9Njk5PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50XG5mcy9zdGF0LmM6NzAwOmNwX3N0YXR4KGNvbnN0IHN0cnVjdCBrc3RhdCAqc3RhdCwgc3RydWN0IHN0YXR4IF9fdXNlciAqYnVmZmVyKVxuZnMvc3RhdC5jLTcwMS17XG4tLVxuZnMvc3RhdC5jPTc0ND1pbnQgZG9fc3RhdHgoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmZzL3N0YXQuYy03NjQtXG5mcy9zdGF0LmM6NzY1Olx0cmV0dXJuIGNwX3N0YXR4KFx1MDAyNnN0YXQsIGJ1ZmZlcik7XG5mcy9zdGF0LmMtNzY2LX1cbi0tXG5mcy9zdGF0LmM9NzY4PWludCBkb19zdGF0eF9mZChpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IG1hc2ssXG4tLVxuZnMvc3RhdC5jLTc4OC1cbmZzL3N0YXQuYzo3ODk6XHRyZXR1cm4gY3Bfc3RhdHgoXHUwMDI2c3RhdCwgYnVmZmVyKTtcbmZzL3N0YXQuYy03OTAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIGBzdGF0eGAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGZzL3N0YXQuY2AgY29kZS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgc3RhdHhgIGlzIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBjcF9zdGF0eGAgYW5kIGBkb19zdGF0eGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBgY3Bfc3RhdHhgIHByb2JhYmx5IGhhbmRsZXMgc29tZSBvZiB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBvciBhcmd1bWVudCBjb3B5aW5nLCB3aGlsZSBgZG9fc3RhdHhgIHdpbGwgYmUgd2hlcmUgdGhlIGNvcmUgc3lzdGVtIGNhbGwgbG9naWMgcmVzaWRlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgdGhlIGV4dGVuZGVkIHN0YXQgaW5mb3JtYXRpb24g4oCTIGl0JiMzOTtzIGJlZW4gYSB3aGlsZSBzaW5jZSBJIGxhc3QgbG9va2VkIGF0IHRob3NlIGZpZWxkcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGxpbmVzIHVwIHdpdGggbXkgZXhwZWN0YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3N0YXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjk1Olx0XHRyZXR1cm4gY3BfbmV3X3N0YXQ2NChcdTAwMjZzdGF0LCBzdGF0YnVmKTtcbiA2OTY6XHR9XG4gNjk3Olx0I2VuZGlmIC8qIF9fQVJDSF9XQU5UX1NUQVQ2NCB8fCBfX0FSQ0hfV0FOVF9DT01QQVRfU1RBVDY0ICovXG4gNjk4Olx0XG4gNjk5Olx0c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnRcbiA3MDA6XHRjcF9zdGF0eChjb25zdCBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHN0cnVjdCBzdGF0eCBfX3VzZXIgKmJ1ZmZlcilcbiA3MDE6XHR7XG4gNzAyOlx0XHRzdHJ1Y3Qgc3RhdHggdG1wO1xuIDcwMzpcdFxuIDcwNDpcdFx0bWVtc2V0KFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpO1xuIDcwNTpcdFxuIDcwNjpcdFx0LyogU1RBVFhfQ0hBTkdFX0NPT0tJRSBpcyBrZXJuZWwtb25seSBmb3Igbm93ICovXG4gNzA3Olx0XHR0bXAuc3R4X21hc2sgPSBzdGF0LVx1MDAzZXJlc3VsdF9tYXNrIFx1MDAyNiB+U1RBVFhfQ0hBTkdFX0NPT0tJRTtcbiA3MDg6XHRcdHRtcC5zdHhfYmxrc2l6ZSA9IHN0YXQtXHUwMDNlYmxrc2l6ZTtcbiA3MDk6XHRcdC8qIFNUQVRYX0FUVFJfQ0hBTkdFX01PTk9UT05JQyBpcyBrZXJuZWwtb25seSBmb3Igbm93ICovXG4gNzEwOlx0XHR0bXAuc3R4X2F0dHJpYnV0ZXMgPSBzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgXHUwMDI2IH5TVEFUWF9BVFRSX0NIQU5HRV9NT05PVE9OSUM7XG4gNzExOlx0XHR0bXAuc3R4X25saW5rID0gc3RhdC1cdTAwM2VubGluaztcbiA3MTI6XHRcdHRtcC5zdHhfdWlkID0gZnJvbV9rdWlkX211bmdlZChjdXJyZW50X3VzZXJfbnMoKSwgc3RhdC1cdTAwM2V1aWQpO1xuIDcxMzpcdFx0dG1wLnN0eF9naWQgPSBmcm9tX2tnaWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBzdGF0LVx1MDAzZWdpZCk7XG4gNzE0Olx0XHR0bXAuc3R4X21vZGUgPSBzdGF0LVx1MDAzZW1vZGU7XG4gNzE1Olx0XHR0bXAuc3R4X2lubyA9IHN0YXQtXHUwMDNlaW5vO1xuIDcxNjpcdFx0dG1wLnN0eF9zaXplID0gc3RhdC1cdTAwM2VzaXplO1xuIDcxNzpcdFx0dG1wLnN0eF9ibG9ja3MgPSBzdGF0LVx1MDAzZWJsb2NrcztcbiA3MTg6XHRcdHRtcC5zdHhfYXR0cmlidXRlc19tYXNrID0gc3RhdC1cdTAwM2VhdHRyaWJ1dGVzX21hc2s7XG4gNzE5Olx0XHR0bXAuc3R4X2F0aW1lLnR2X3NlYyA9IHN0YXQtXHUwMDNlYXRpbWUudHZfc2VjO1xuIDcyMDpcdFx0dG1wLnN0eF9hdGltZS50dl9uc2VjID0gc3RhdC1cdTAwM2VhdGltZS50dl9uc2VjO1xuIDcyMTpcdFx0dG1wLnN0eF9idGltZS50dl9zZWMgPSBzdGF0LVx1MDAzZWJ0aW1lLnR2X3NlYztcbiA3MjI6XHRcdHRtcC5zdHhfYnRpbWUudHZfbnNlYyA9IHN0YXQtXHUwMDNlYnRpbWUudHZfbnNlYztcbiA3MjM6XHRcdHRtcC5zdHhfY3RpbWUudHZfc2VjID0gc3RhdC1cdTAwM2VjdGltZS50dl9zZWM7XG4gNzI0Olx0XHR0bXAuc3R4X2N0aW1lLnR2X25zZWMgPSBzdGF0LVx1MDAzZWN0aW1lLnR2X25zZWM7XG4gNzI1Olx0XHR0bXAuc3R4X210aW1lLnR2X3NlYyA9IHN0YXQtXHUwMDNlbXRpbWUudHZfc2VjO1xuIDcyNjpcdFx0dG1wLnN0eF9tdGltZS50dl9uc2VjID0gc3RhdC1cdTAwM2VtdGltZS50dl9uc2VjO1xuIDcyNzpcdFx0dG1wLnN0eF9yZGV2X21ham9yID0gTUFKT1Ioc3RhdC1cdTAwM2VyZGV2KTtcbiA3Mjg6XHRcdHRtcC5zdHhfcmRldl9taW5vciA9IE1JTk9SKHN0YXQtXHUwMDNlcmRldik7XG4gNzI5Olx0XHR0bXAuc3R4X2Rldl9tYWpvciA9IE1BSk9SKHN0YXQtXHUwMDNlZGV2KTtcbiA3MzA6XHRcdHRtcC5zdHhfZGV2X21pbm9yID0gTUlOT1Ioc3RhdC1cdTAwM2VkZXYpO1xuIDczMTpcdFx0dG1wLnN0eF9tbnRfaWQgPSBzdGF0LVx1MDAzZW1udF9pZDtcbiA3MzI6XHRcdHRtcC5zdHhfZGlvX21lbV9hbGlnbiA9IHN0YXQtXHUwMDNlZGlvX21lbV9hbGlnbjtcbiA3MzM6XHRcdHRtcC5zdHhfZGlvX29mZnNldF9hbGlnbiA9IHN0YXQtXHUwMDNlZGlvX29mZnNldF9hbGlnbjtcbiA3MzQ6XHRcdHRtcC5zdHhfZGlvX3JlYWRfb2Zmc2V0X2FsaWduID0gc3RhdC1cdTAwM2VkaW9fcmVhZF9vZmZzZXRfYWxpZ247XG4gNzM1Olx0XHR0bXAuc3R4X3N1YnZvbCA9IHN0YXQtXHUwMDNlc3Vidm9sO1xuIDczNjpcdFx0dG1wLnN0eF9hdG9taWNfd3JpdGVfdW5pdF9taW4gPSBzdGF0LVx1MDAzZWF0b21pY193cml0ZV91bml0X21pbjtcbiA3Mzc6XHRcdHRtcC5zdHhfYXRvbWljX3dyaXRlX3VuaXRfbWF4ID0gc3RhdC1cdTAwM2VhdG9taWNfd3JpdGVfdW5pdF9tYXg7XG4gNzM4Olx0XHR0bXAuc3R4X2F0b21pY193cml0ZV9zZWdtZW50c19tYXggPSBzdGF0LVx1MDAzZWF0b21pY193cml0ZV9zZWdtZW50c19tYXg7XG4gNzM5Olx0XHR0bXAuc3R4X2F0b21pY193cml0ZV91bml0X21heF9vcHQgPSBzdGF0LVx1MDAzZWF0b21pY193cml0ZV91bml0X21heF9vcHQ7XG4gNzQwOlx0XG4gNzQxOlx0XHRyZXR1cm4gY29weV90b191c2VyKGJ1ZmZlciwgXHUwMDI2dG1wLCBzaXplb2YodG1wKSkgPyAtRUZBVUxUIDogMDtcbiA3NDI6XHR9XG4gNzQzOlx0XG4gNzQ0Olx0aW50IGRvX3N0YXR4KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsIHVuc2lnbmVkIGludCBmbGFncyxcbiA3NDU6XHRcdCAgICAgdW5zaWduZWQgaW50IG1hc2ssIHN0cnVjdCBzdGF0eCBfX3VzZXIgKmJ1ZmZlcilcbiA3NDY6XHR7XG4gNzQ3Olx0XHRzdHJ1Y3Qga3N0YXQgc3RhdDtcbiA3NDg6XHRcdGludCBlcnJvcjtcbiA3NDk6XHRcbiA3NTA6XHRcdGlmIChtYXNrIFx1MDAyNiBTVEFUWF9fUkVTRVJWRUQpXG4gNzUxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc1MjpcdFx0aWYgKChmbGFncyBcdTAwMjYgQVRfU1RBVFhfU1lOQ19UWVBFKSA9PSBBVF9TVEFUWF9TWU5DX1RZUEUpXG4gNzUzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc1NDpcdFxuIDc1NTpcdFx0LypcbiA3NTY6XHRcdCAqIFNUQVRYX0NIQU5HRV9DT09LSUUgaXMga2VybmVsLW9ubHkgZm9yIG5vdy4gSWdub3JlIHJlcXVlc3RzXG4gNzU3Olx0XHQgKiBmcm9tIHVzZXJsYW5kLlxuIDc1ODpcdFx0ICovXG4gNzU5Olx0XHRtYXNrIFx1MDAyNj0gflNUQVRYX0NIQU5HRV9DT09LSUU7XG4gNzYwOlx0XG4gNzYxOlx0XHRlcnJvciA9IHZmc19zdGF0eChkZmQsIGZpbGVuYW1lLCBmbGFncywgXHUwMDI2c3RhdCwgbWFzayk7XG4gNzYyOlx0XHRpZiAoZXJyb3IpXG4gNzYzOlx0XHRcdHJldHVybiBlcnJvcjtcbiA3NjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3RhdCBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgYHN0YXRgIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkLCBhbmQgSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZSBiZWNhdXNlIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiBjYW4gbGVhZCB0byBzZXJpb3VzIHByb2JsZW1zLCBlc3BlY2lhbGx5IGluIGtlcm5lbCBjb2RlLiBGaXJzdCwgSSBzZWUgdGhhdCB0aGUgdGVtcG9yYXJ5IHZhcmlhYmxlIGB0bXBgIGlzIGJlaW5nIGV4cGxpY2l0bHkgemVyb2VkIG91dCB1c2luZyBgbWVtc2V0KCZhbXA7dG1wLCAwLCBzaXplb2YodG1wKSlgLiBHb29kLCB0aGF0JiMzOTtzIGEgc29saWQgc3RhcnQuIENsZWFyIGluaXRpYWxpemF0aW9uIGlzIGNydWNpYWwgdG8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW9yLgoKTm93LCBJIGFsc28ga25vdyB0aGF0IGB2ZnNfc3RhdHhgIChvciBwb3RlbnRpYWxseSBpdHMgZXF1aXZhbGVudCwgYHZmc19nZXRhdHRyYCkgaXMgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhpcyBzdHJ1Y3R1cmUuIFNvLCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGF0IGZ1bmN0aW9uIHRvIGNvbmZpcm0gZXhhY3RseSBob3cgaXQgaGFuZGxlcyB0aGUgYHN0YXRgIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCBhbHNvIHplcm8taW5pdGlhbGl6ZXMsIHJlaW5pdGlhbGl6ZXMsIG9yIG1vZGlmaWVzIGFuIGFscmVhZHkgZXhpc3Rpbmcgc3RydWN0dXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYGZzL3N0YXQuY2Agc291cmNlIGNvZGUgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBgdmZzX3N0YXR4YCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGl0IHRyZWF0cyB0aGUgYHN0YXRgIHN0cnVjdHVyZSB3aXRoaW4gaXRzIGxvZ2ljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXNldC4qc3RhdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3N0YXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zdGF0LmM9MTgxPWludCB2ZnNfZ2V0YXR0cl9ub3NlYyhjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LFxuLS1cbmZzL3N0YXQuYy0xODYtXG5mcy9zdGF0LmM6MTg3Olx0bWVtc2V0KHN0YXQsIDAsIHNpemVvZigqc3RhdCkpO1xuZnMvc3RhdC5jLTE4OC1cdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfQkFTSUNfU1RBVFM7XG4tLVxuZnMvc3RhdC5jPTM4Mz1zdGF0aWMgaW50IGNwX29sZF9zdGF0KHN0cnVjdCBrc3RhdCAqc3RhdCwgc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IF9fdXNlciAqIHN0YXRidWYpXG4tLVxuZnMvc3RhdC5jLTM5Ni1cbmZzL3N0YXQuYzozOTc6XHRtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2Yoc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0KSk7XG5mcy9zdGF0LmMtMzk4LVx0dG1wLnN0X2RldiA9IG9sZF9lbmNvZGVfZGV2KHN0YXQtXHUwMDNlZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwMgoJCQkJCQkJb3V0cHV0OiAyNjcKCQkJCQkJCXRob3VnaHRzOiA2NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBleHQ0YCBgZ2V0YXR0cmAgQXRvbWljIFdyaXRlIFVuaXQgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgYWRqdXN0cyBob3cgYXRvbWljIHdyaXRlIHVuaXQgaW5mb3JtYXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gYGV4dDRgJiMzOTtzIGBnZXRhdHRyYCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgdmFsdWUgcGFzc2VkIGFzIGB1bml0X21heF9vcHRgIHRvIHRoZSBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoKWAgZnVuY3Rpb24uIEN1cnJlbnRseSwgdGhlIGNvZGUgc2V0cyBgYXd1X21heGAgdG8gYHNiaS0mZ3Q7c19hd3VfbWF4YCBpZiBhdG9taWMgd3JpdGVzIGFyZSBzdXBwb3J0ZWQgb24gYW4gaW5vZGUsIG90aGVyd2lzZSwgYGF3dV9tYXhgIGlzIHplcm8uIFRoZSBwYXRjaCByZXBsYWNlcyBhIGhhcmRjb2RlZCBgMGAgd2l0aCB0aGUgaW5pdGlhbGl6ZWQgYGF3dV9tYXhgIHZhcmlhYmxlLCB3aGljaCBjYW4gYmUgZWl0aGVyIGAwYCBvciBgc2JpLSZndDtzX2F3dV9tYXhgLgoKTXkgbWFpbiBjb25jZXJuIGhlcmUsIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eS4gQXJlIHdlIHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlPyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uLiBIb3dldmVyLCBhZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpc24mIzM5O3QgYW4gaXNzdWUuIGBhd3VfbWF4YCBpcyAqZGVmaW5pdGVseSogaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIGEgbG9jYWwgYHVuc2lnbmVkIGludGAgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgMGAgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlbiBwb3RlbnRpYWxseSB1cGRhdGVkIHdpdGggYSB2YWxpZCB2YWx1ZSBkZXBlbmRpbmcgb24gdGhlIGlub2RlJiMzOTtzIGNhcGFiaWxpdGllcy4gVGhlcmUmIzM5O3Mgbm8gdXNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBoZXJlLgoKRnVydGhlcm1vcmUsIHRoZSBwYXRoIHRvIHVzZXJzcGFjZSBpcyBjb21wbGV0ZWx5IHNhZmUuIFRoZSByZWxldmFudCBgc3RydWN0IGtzdGF0YCBpcyB6ZXJvZWQgYnkgdGhlIGB2ZnNfZ2V0YXR0cl9ub3NlY2AgZnVuY3Rpb24sIGd1YXJhbnRlZWluZyBpbml0aWFsaXphdGlvbi4gQW5kIHRoZSBgc3RydWN0IHN0YXR4YCBwYXNzZWQgdG8gdXNlcnNwYWNlIGlzIGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldGAgKmJlZm9yZSogdGhlIHNjYWxhciB2YWx1ZSBpcyBjb3BpZWQuIFNvLCBldmVuIGlmIHRoZXJlIHdlcmUgYW55IHdlaXJkbmVzcyBpbnRlcm5hbGx5LCB0aGUgdXNlci1mYWNpbmcgZGF0YSBzdHJ1Y3R1cmUgaXMgY2xlYW4uIE5vIGluZm9ybWF0aW9uIGxlYWsgaXMgcG9zc2libGUuCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbnZpbmNlZCB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyB0aGF0IEtNU0FOLCBvciBhbnkgb3RoZXIgbWVtb3J5IHNhbml0aXplciwgd291bGQgZGV0ZWN0LiBXZSBhcmUgbm90IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHdlIGFyZSBub3QgbGVha2luZyBpbmZvcm1hdGlvbiwgYW5kIHRoZXJlIGFyZSBubyBicmFuY2hpbmcgb3BlcmF0aW9ucyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBwYXRjaCBpcyBzaW1wbHkgcGFzc2luZyBhbiBpbml0aWFsaXplZCB2YWx1ZSB0byB0aGUgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCBmdW5jdGlvbi4gVGhlIHVzZSBvZiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIEkgdGhpbmsgd2UgY2FuIHNhZmVseSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9nZXRhdHRyKClgIGluIGBmcy9leHQ0L2lub2RlLmNgIHRvIHBhc3MgYGF3dV9tYXhgIGluc3RlYWQgb2YgYDBgIGFzIHRoZSBgdW5pdF9tYXhfb3B0YCBwYXJhbWV0ZXIgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKClgLlxuXG4xLiBUaGUgdmFyaWFibGUgYGF3dV9tYXhgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAoYHVuc2lnbmVkIGludCBhd3VfbWluID0gMCwgYXd1X21heCA9IDA7YCkgYW5kIG9wdGlvbmFsbHkgdXBkYXRlZCBmcm9tIGBzYmktXHUwMDNlc19hd3VfbWF4YC5cbjIuIFRoZSBkZXN0aW5hdGlvbiBgc3RydWN0IGtzdGF0YCBpcyB6ZXJvLWluaXRpYWxpemVkIGluIGB2ZnNfZ2V0YXR0cl9ub3NlYygpYC5cbjMuIFdoZW4gcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB2aWEgYHN0YXR4YCwgYGNwX3N0YXR4KClgIGluaXRpYWxpemVzIHRoZSBlbnRpcmUgYHN0cnVjdCBzdGF0eGAgc3RydWN0dXJlIHVzaW5nIGBtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBwb3B1bGF0aW5nIGZpZWxkcyBhbmQgY2FsbGluZyBgY29weV90b191c2VyKClgLlxuNC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGV4dDRfZ2V0YXR0cigpYCBpbiBgZnMvZXh0NC9pbm9kZS5jYCB0byBwYXNzIGBhd3VfbWF4YCBpbnN0ZWFkIG9mIGAwYCBhcyB0aGUgYHVuaXRfbWF4X29wdGAgcGFyYW1ldGVyIHRvIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcygpYC5cblxuMS4gVGhlIHZhcmlhYmxlIGBhd3VfbWF4YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgKGB1bnNpZ25lZCBpbnQgYXd1X21pbiA9IDAsIGF3dV9tYXggPSAwO2ApIGFuZCBvcHRpb25hbGx5IHVwZGF0ZWQgZnJvbSBgc2JpLVx1MDAzZXNfYXd1X21heGAuXG4yLiBUaGUgZGVzdGluYXRpb24gYHN0cnVjdCBrc3RhdGAgaXMgemVyby1pbml0aWFsaXplZCBpbiBgdmZzX2dldGF0dHJfbm9zZWMoKWAuXG4zLiBXaGVuIHJlcG9ydGluZyB0byB1c2Vyc3BhY2UgdmlhIGBzdGF0eGAsIGBjcF9zdGF0eCgpYCBpbml0aWFsaXplcyB0aGUgZW50aXJlIGBzdHJ1Y3Qgc3RhdHhgIHN0cnVjdHVyZSB1c2luZyBgbWVtc2V0KFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpYCBiZWZvcmUgcG9wdWxhdGluZyBmaWVsZHMgYW5kIGNhbGxpbmcgYGNvcHlfdG9fdXNlcigpYC5cbjQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwgbWVtb3J5IGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkLlxuXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MDIuNTM0NDY3MjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk5NzcxMTY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9nZXRhdHRyXCIsXG4gICAgXCJnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGV4dDRfZ2V0YXR0cigpYCBpbiBgZnMvZXh0NC9pbm9kZS5jYCB0byBwYXNzIGBhd3VfbWF4YCBpbnN0ZWFkIG9mIGAwYCBhcyB0aGUgYHVuaXRfbWF4X29wdGAgcGFyYW1ldGVyIHRvIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcygpYC5cXG5cXG4xLiBUaGUgdmFyaWFibGUgYGF3dV9tYXhgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAoYHVuc2lnbmVkIGludCBhd3VfbWluID0gMCwgYXd1X21heCA9IDA7YCkgYW5kIG9wdGlvbmFsbHkgdXBkYXRlZCBmcm9tIGBzYmktXFx1MDAzZXNfYXd1X21heGAuXFxuMi4gVGhlIGRlc3RpbmF0aW9uIGBzdHJ1Y3Qga3N0YXRgIGlzIHplcm8taW5pdGlhbGl6ZWQgaW4gYHZmc19nZXRhdHRyX25vc2VjKClgLlxcbjMuIFdoZW4gcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB2aWEgYHN0YXR4YCwgYGNwX3N0YXR4KClgIGluaXRpYWxpemVzIHRoZSBlbnRpcmUgYHN0cnVjdCBzdGF0eGAgc3RydWN0dXJlIHVzaW5nIGBtZW1zZXQoXFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpYCBiZWZvcmUgcG9wdWxhdGluZyBmaWVsZHMgYW5kIGNhbGxpbmcgYGNvcHlfdG9fdXNlcigpYC5cXG40LiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3Iga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgYXRvbWljIHdyaXRlIHBhcmFtZXRlcnMgKHVuaXRfbWF4X29wdCkgYXJlIHJlcG9ydGVkIGluIGV4dDRfZ2V0YXR0cigpIHdoZW4gc3RhdHggcXVlcmllcyBTVEFUWF9XUklURV9BVE9NSUMuIFRoaXMgaXMgcmVhY2hhYmxlIHVzZXIgc3BhY2UgY29kZSBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHZpYSBzdGF0eCBzeXN0ZW0gY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjAyLjUzNDQ3MTI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzc0NDYzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZDE1YTQyZjZmZjVhNDgxMWNiNDBkNDMxZDJiNGM2NDQyZmQ0OGI2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDEwOjQyOjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IDI2ZjBmOTcxNGYwM2MuLjkzMDU2Yzk3MWU3NGIgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXFxuKysrIGIvZnMvZXh0NC9pbm9kZS5jXFxuQEAgLTYzMDQsNyArNjMwNCw4IEBAIGludCBleHQ0X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxcbiBcXHRcXHRcXHRhd3VfbWF4ID0gc2JpLVxcdTAwM2VzX2F3dV9tYXg7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsIDApO1xcbitcXHRcXHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgYXd1X21heCk7XFxuIFxcdH1cXG4gXFxuIFxcdGZsYWdzID0gZWktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0ZMX1VTRVJfVklTSUJMRTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MDMuMDcyODY2NTg2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMTg0NzEzOTMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9nZXRhdHRyXCIsXG4gICAgXCJnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBhdG9taWMgd3JpdGUgcGFyYW1ldGVycyAodW5pdF9tYXhfb3B0KSBhcmUgcmVwb3J0ZWQgaW4gZXh0NF9nZXRhdHRyKCkgd2hlbiBzdGF0eCBxdWVyaWVzIFNUQVRYX1dSSVRFX0FUT01JQy4gVGhpcyBpcyByZWFjaGFibGUgdXNlciBzcGFjZSBjb2RlIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gdmlhIHN0YXR4IHN5c3RlbSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZDE1YTQyZjZmZjVhNDgxMWNiNDBkNDMxZDJiNGM2NDQyZmQ0OGI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTA6NDI6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IDI2ZjBmOTcxNGYwM2MuLjkzMDU2Yzk3MWU3NGIgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTYzMDQsNyArNjMwNCw4IEBAIGludCBleHQ0X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0XHRcdGF3dV9tYXggPSBzYmktXHUwMDNlc19hd3VfbWF4O1xuIFx0XHR9XG4gXG4tXHRcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsIDApO1xuK1x0XHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxuK1x0XHRcdFx0XHRcdCBhd3VfbWF4KTtcbiBcdH1cbiBcbiBcdGZsYWdzID0gZWktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9GTF9VU0VSX1ZJU0lCTEU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0MjowMy4wNzI4Njg3NTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzQxMzUzNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZXh0NCBpbm9kZS5jIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmLiBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGludGVudCBoZXJlLiBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgcGF0Y2ggZGlmZi4gSXQgYXBwZWFycyB3ZSdyZSBpbiBgZnMvZXh0NC9pbm9kZS5jYCwgYW5kIHRoZSByZWxldmFudCBjaGFuZ2UgaXMgaW4gdGhlIGBleHQ0X2dldGF0dHJgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjMwNC4gSXQgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgLiBUaGUgb2xkIHZlcnNpb24gcGFzc2VkIGAwYCBhcyB0aGUgZmluYWwgYXJndW1lbnQsIHdoaWxlIHRoZSBuZXcgdmVyc2lvbiBwYXNzZXMgYGF3dV9tYXhgLiBUaGlzIGxpa2VseSBhZmZlY3RzIGhvdyBhdG9taWMgd3JpdGUgaW5mb3JtYXRpb24gaXMgcmVwb3J0ZWQgaW4gYHN0YXR4YC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBjaGFuZ2UuXG5cbk5vdywgSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aGluIGBmcy9leHQ0L2lub2RlLmNgIGF0IHRoYXQgc3BlY2lmaWMgbGluZS4gSSBuZWVkIHRoZSBmdWxsIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGF3dV9taW5gIGFuZCBgYXd1X21heGAgcmVwcmVzZW50LCBob3cgdGhleSdyZSBjYWxjdWxhdGVkIG9yIGRlcml2ZWQsIGFuZCB3aHkgdGhlIGNoYW5nZSBpbiB0aGUgY2FsbCdzIGFyZ3VtZW50IGlzIGJlaW5nIGludHJvZHVjZWQuIEkgbmVlZCB0byBrbm93IGhvdyB0aGVzZSB2YWx1ZXMgaW5mbHVlbmNlIHRoZSBhdG9taWMgd3JpdGUgaW5mb3JtYXRpb24gdGhhdCBnZXRzIHJlcG9ydGVkIHZpYSB0aGUgYHN0YXR4YCBzeXN0ZW0gY2FsbC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIHBhdGNoLiBJcyBpdCBhIGJ1ZyBmaXgsIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQsIG9yIGFkZGluZyBuZXcgZmVhdHVyZXM/IEkgZXhwZWN0IHRvIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB0aGF0IG9uY2UgSSBoYXZlIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhpcyBjb2RlIHJlZ2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjA4LjgxNDIyNDUxMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjI4MDpcXHRcXG42MjgxOlxcdFxcdC8qIFJldHVybiB0aGUgRElPIGFsaWdubWVudCByZXN0cmljdGlvbnMgaWYgcmVxdWVzdGVkLiAqL1xcbjYyODI6XFx0XFx0aWYgKChyZXF1ZXN0X21hc2sgXFx1MDAyNiBTVEFUWF9ESU9BTElHTikgXFx1MDAyNlxcdTAwMjYgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjYyODM6XFx0XFx0XFx0dTMyIGRpb19hbGlnbiA9IGV4dDRfZGlvX2FsaWdubWVudChpbm9kZSk7XFxuNjI4NDpcXHRcXG42Mjg1OlxcdFxcdFxcdHN0YXQtXFx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0RJT0FMSUdOO1xcbjYyODY6XFx0XFx0XFx0aWYgKGRpb19hbGlnbiA9PSAxKSB7XFxuNjI4NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmRldjtcXG42Mjg4OlxcdFxcbjYyODk6XFx0XFx0XFx0XFx0LyogaW9tYXAgZGVmYXVsdHMgKi9cXG42MjkwOlxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZWRpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldikgKyAxO1xcbjYyOTE6XFx0XFx0XFx0XFx0c3RhdC1cXHUwMDNlZGlvX29mZnNldF9hbGlnbiA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xcbjYyOTI6XFx0XFx0XFx0fSBlbHNlIHtcXG42MjkzOlxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZWRpb19tZW1fYWxpZ24gPSBkaW9fYWxpZ247XFxuNjI5NDpcXHRcXHRcXHRcXHRzdGF0LVxcdTAwM2VkaW9fb2Zmc2V0X2FsaWduID0gZGlvX2FsaWduO1xcbjYyOTU6XFx0XFx0XFx0fVxcbjYyOTY6XFx0XFx0fVxcbjYyOTc6XFx0XFxuNjI5ODpcXHRcXHRpZiAoKHJlcXVlc3RfbWFzayBcXHUwMDI2IFNUQVRYX1dSSVRFX0FUT01JQykgXFx1MDAyNlxcdTAwMjYgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjYyOTk6XFx0XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuNjMwMDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYXd1X21pbiA9IDAsIGF3dV9tYXggPSAwO1xcbjYzMDE6XFx0XFxuNjMwMjpcXHRcXHRcXHRpZiAoZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlKGlub2RlKSkge1xcbjYzMDM6XFx0XFx0XFx0XFx0YXd1X21pbiA9IHNiaS1cXHUwMDNlc19hd3VfbWluO1xcbjYzMDQ6XFx0XFx0XFx0XFx0YXd1X21heCA9IHNiaS1cXHUwMDNlc19hd3VfbWF4O1xcbjYzMDU6XFx0XFx0XFx0fVxcbjYzMDY6XFx0XFxuNjMwNzpcXHRcXHRcXHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxcbjYzMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGF3dV9tYXgpO1xcbjYzMDk6XFx0XFx0fVxcbjYzMTA6XFx0XFxuNjMxMTpcXHRcXHRmbGFncyA9IGVpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9GTF9VU0VSX1ZJU0lCTEU7XFxuNjMxMjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0FQUEVORF9GTClcXG42MzEzOlxcdFxcdFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9BUFBFTkQ7XFxuNjMxNDpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0NPTVBSX0ZMKVxcbjYzMTU6XFx0XFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0NPTVBSRVNTRUQ7XFxuNjMxNjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0VOQ1JZUFRfRkwpXFxuNjMxNzpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfRU5DUllQVEVEO1xcbjYzMTg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9JTU1VVEFCTEVfRkwpXFxuNjMxOTpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfSU1NVVRBQkxFO1xcbjYzMjA6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9OT0RVTVBfRkwpXFxuNjMyMTpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfTk9EVU1QO1xcbjYzMjI6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9WRVJJVFlfRkwpXFxuNjMyMzpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xcbjYzMjQ6XFx0XFxuNjMyNTpcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQVBQRU5EIHxcXG42MzI2OlxcdFxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9DT01QUkVTU0VEIHxcXG42MzI3OlxcdFxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9FTkNSWVBURUQgfFxcbjYzMjg6XFx0XFx0XFx0XFx0XFx0ICBTVEFUWF9BVFRSX0lNTVVUQUJMRSB8XFxuNjMyOTpcXHRcXHRcXHRcXHRcXHQgIFNUQVRYX0FUVFJfTk9EVU1QIHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MDguODE0OTkyOTIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyNDA0NTM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuIEdpdmVuIHRoZSBuYW1pbmcsIGl0J3MgbGlrZWx5IGludm9sdmVkIGluIHBvcHVsYXRpbmcgYHN0YXR4YCBzdHJ1Y3R1cmVzLCBhbmQgdGhlIFwiYXRvbWljIHdyaXRlc1wiIHN1Z2dlc3RzIHRoaXMgaXMgZG9uZSBpbiBhIHRocmVhZC1zYWZlIG1hbm5lciwgb3IgYXQgbGVhc3Qgd2l0aCBjb25zaWRlcmF0aW9ucyBmb3IgY29uY3VycmVuY3kuIFRoaXMgaXMgcHJldHR5IGNvbW1vbjsgSSBpbWFnaW5lIHRoaXMgZnVuY3Rpb24gYmVpbmcgYSBjb3JlIGNvbXBvbmVudCwgZXNwZWNpYWxseSBpbiBhIGZpbGUgc3lzdGVtIGNvbnRleHQgd2hlcmUgbWV0YWRhdGEgY29uc2lzdGVuY3kgaXMgcGFyYW1vdW50LiBJJ2xsIG5lZWQgdG8gcGlucG9pbnQgaXRzIHBsYWNlIGluIHRoZSByZWFkIHBhdGguXG5cblNvLCB0aGUgZmlyc3QgdGhpbmcgSSdsbCBkbyBpcyBwcm9iYWJseSBtZW50YWxseSBtYXAgaXRzIGNhbGxzIHRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgbWF5YmUgdGhpbmsgYWJvdXQgd2hvIGludm9rZXMgdGhpcywgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcmVhZHMgb3Igd3JpdGVzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3M/IE15IGV4cGVjdGF0aW9uIGlzIGEgc2V0IG9mIHBvaW50ZXJzIHRvIGBzdGF0eGAgc3RydWN0dXJlcyBvciBzb21lIGludGVybmFsIHJlcHJlc2VudGF0aW9uIHRoZXJlb2YsIHdoaWNoIGxpa2VseSBpbnZvbHZlcyBoYW5kbGluZyBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyB1cGRhdGVzLiBJdCBpcyBsaWtlbHkgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyB0byBkZWFsIHdpdGggdGhlIHN1YnRsZXRpZXMgb2YgcGFydGlhbCBhdG9taWMgdXBkYXRlcyB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUuXG5cblRoZSBsZXZlbCBvZiBhdG9taWNpdHkgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IGl0IHdpbGwgYmUgdXNlZC4gV2lsbCBlYWNoIG1lbWJlciBvZiB0aGUgc3RhdHggc3RydWN0dXJlIGJlIHdyaXR0ZW4gYXRvbWljYWxseSwgb3IgYXJlIGxhcmdlciBhZ2dyZWdhdGVzIHVwZGF0ZWQgaW4gYSBjb29yZGluYXRlZCBtYW5uZXI/IEFuZCBJJ2QgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgcG90ZW50aWFsIG9mIGVycm9ycyBncmFjZWZ1bGx5LCBwZXJoYXBzIHJldHJ5aW5nIG9yIHByb3ZpZGluZyBlcnJvciBjb2RlcyB0aGF0IHByb3BhZ2F0ZSBiYWNrIHVwIHRvIHRoZSBjYWxsZXIuIFVuZGVyc3RhbmRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGlzIGltcG9ydGFudCB0byBmaWd1cmUgb3V0IGhvdyBzYWZlIHRoZSBmdW5jdGlvbiBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ0NCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MTEuNzM5MDQwNTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MTkzMjMwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZGV2LmM9MTM5ND12b2lkIGJkZXZfc3RhdHgoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzaylcXG4tLVxcbmJsb2NrL2JkZXYuYy0xNDE2LVxcbmJsb2NrL2JkZXYuYzoxNDE3OlxcdFxcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsXFxuYmxvY2svYmRldi5jLTE0MTgtXFx0XFx0XFx0cXVldWVfYXRvbWljX3dyaXRlX3VuaXRfbWluX2J5dGVzKGJkX3F1ZXVlKSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz02MjY2PWludCBleHQ0X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTYzMDYtXFxuZnMvZXh0NC9pbm9kZS5jOjYzMDc6XFx0XFx0Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCwgYXd1X21pbiwgYXd1X21heCxcXG5mcy9leHQ0L2lub2RlLmMtNjMwOC1cXHRcXHRcXHRcXHRcXHRcXHQgYXd1X21heCk7XFxuLS1cXG5mcy9zdGF0LmM9MTMyPUVYUE9SVF9TWU1CT0woZ2VuZXJpY19maWxsX3N0YXR4X2F0dHIpO1xcbi0tXFxuZnMvc3RhdC5jLTEzNC0vKipcXG5mcy9zdGF0LmM6MTM1OiAqIGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzIC0gRmlsbCBpbiBhdG9taWMgd3JpdGVzIHN0YXR4IGF0dHJpYnV0ZXNcXG5mcy9zdGF0LmMtMTM2LSAqIEBzdGF0OlxcdFdoZXJlIHRvIGZpbGwgaW4gdGhlIGF0dHJpYnV0ZSBmbGFnc1xcbi0tXFxuZnMvc3RhdC5jLTE0My0gKi9cXG5mcy9zdGF0LmM6MTQ0OnZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RydWN0IGtzdGF0ICpzdGF0LFxcbmZzL3N0YXQuYy0xNDUtXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWluLFxcbi0tXFxuZnMvc3RhdC5jLTE2NS19XFxuZnMvc3RhdC5jOjE2NjpFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyk7XFxuZnMvc3RhdC5jLTE2Ny1cXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jPTY3MD14ZnNfcmVwb3J0X2F0b21pY193cml0ZShcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTY3My17XFxuZnMveGZzL3hmc19pb3BzLmM6Njc0OlxcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsXFxuZnMveGZzL3hmc19pb3BzLmMtNjc1LVxcdFxcdFxcdHhmc19nZXRfYXRvbWljX3dyaXRlX21pbihpcCksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzIwOD12b2lkIGdlbmVyaWNfZmlsbF9zdGF0eF9hdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBrc3RhdCAqc3RhdCk7XFxuaW5jbHVkZS9saW51eC9mcy5oOjMyMDk6dm9pZCBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdHJ1Y3Qga3N0YXQgKnN0YXQsXFxuaW5jbHVkZS9saW51eC9mcy5oLTMyMTAtXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWluLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0MjoxNC4wMzA5ODA1ODRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTg4OTA4ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBmcy9zdGF0LmNgIFNvdXJjZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHNwZWNpZmljLiBUaGUgcHJvYmxlbSBsaWtlbHkgcmVzaWRlcyB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtJ3MgaGFuZGxpbmcgb2YgYHN0YXRgIGNhbGxzLCBwYXJ0aWN1bGFybHkgaW4gYGZzL3N0YXQuY2AuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhlcmUncyBzb21ldGhpbmcgYW1pc3MgYmV0d2VlbiBsaW5lcyAxMzQgYW5kIDE2NS4gVGhpcyBzZWN0aW9uIHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIGNvcmUgbG9naWMgb2YgcG9wdWxhdGluZyB0aGUgYHN0YXRgIHN0cnVjdHVyZSwgcGVyaGFwcyByZWxhdGVkIHRvIGhvdyBpdCBkZWFscyB3aXRoIGRldmljZSBJRHMsIGlub2RlIG51bWJlcnMsIGZpbGUgc2l6ZXMsIG9yIHBlcm1pc3Npb25zLCBhbmQgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHByZWNpc2UgY2FsY3VsYXRpb25zIHRoZXJlLiBMZXQncyBzZWUgaWYgdGhvc2UgbGluZXMgaG9sZCB0aGUga2V5LiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgbG9naWMgdGhhdCBjb3VsZCBiZSB0aGUgc291cmNlIG9mIHdoYXRldmVyIGJlaGF2aW9yIEknbSBzZWVpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0MjoxNy4yMTk4OTEyMDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zdGF0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTM0OlxcdC8qKlxcbiAxMzU6XFx0ICogZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMgLSBGaWxsIGluIGF0b21pYyB3cml0ZXMgc3RhdHggYXR0cmlidXRlc1xcbiAxMzY6XFx0ICogQHN0YXQ6XFx0V2hlcmUgdG8gZmlsbCBpbiB0aGUgYXR0cmlidXRlIGZsYWdzXFxuIDEzNzpcXHQgKiBAdW5pdF9taW46XFx0TWluaW11bSBzdXBwb3J0ZWQgYXRvbWljIHdyaXRlIGxlbmd0aCBpbiBieXRlc1xcbiAxMzg6XFx0ICogQHVuaXRfbWF4OlxcdE1heGltdW0gc3VwcG9ydGVkIGF0b21pYyB3cml0ZSBsZW5ndGggaW4gYnl0ZXNcXG4gMTM5OlxcdCAqIEB1bml0X21heF9vcHQ6IE9wdGltaXNlZCBtYXhpbXVtIHN1cHBvcnRlZCBhdG9taWMgd3JpdGUgbGVuZ3RoIGluIGJ5dGVzXFxuIDE0MDpcXHQgKlxcbiAxNDE6XFx0ICogRmlsbCBpbiB0aGUgU1RBVFh7X0FUVFJ9X1dSSVRFX0FUT01JQyBmbGFncyBpbiB0aGUga3N0YXQgc3RydWN0dXJlIGZyb21cXG4gMTQyOlxcdCAqIGF0b21pYyB3cml0ZSB1bml0X21pbiBhbmQgdW5pdF9tYXggdmFsdWVzLlxcbiAxNDM6XFx0ICovXFxuIDE0NDpcXHR2b2lkIGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0cnVjdCBrc3RhdCAqc3RhdCxcXG4gMTQ1OlxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21pbixcXG4gMTQ2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21heCxcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21heF9vcHQpXFxuIDE0ODpcXHR7XFxuIDE0OTpcXHRcXHQvKiBDb25maXJtIHRoYXQgdGhlIHJlcXVlc3QgdHlwZSBpcyBrbm93biAqL1xcbiAxNTA6XFx0XFx0c3RhdC1cXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfV1JJVEVfQVRPTUlDO1xcbiAxNTE6XFx0XFxuIDE1MjpcXHRcXHQvKiBDb25maXJtIHRoYXQgdGhlIGZpbGUgYXR0cmlidXRlIHR5cGUgaXMga25vd24gKi9cXG4gMTUzOlxcdFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXNfbWFzayB8PSBTVEFUWF9BVFRSX1dSSVRFX0FUT01JQztcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKHVuaXRfbWluKSB7XFxuIDE1NjpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdG9taWNfd3JpdGVfdW5pdF9taW4gPSB1bml0X21pbjtcXG4gMTU3OlxcdFxcdFxcdHN0YXQtXFx1MDAzZWF0b21pY193cml0ZV91bml0X21heCA9IHVuaXRfbWF4O1xcbiAxNTg6XFx0XFx0XFx0c3RhdC1cXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWF4X29wdCA9IHVuaXRfbWF4X29wdDtcXG4gMTU5OlxcdFxcdFxcdC8qIEluaXRpYWxseSBvbmx5IGFsbG93IDF4IHNlZ21lbnQgKi9cXG4gMTYwOlxcdFxcdFxcdHN0YXQtXFx1MDAzZWF0b21pY193cml0ZV9zZWdtZW50c19tYXggPSAxO1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHRcXHQvKiBDb25maXJtIGF0b21pYyB3cml0ZXMgYXJlIGFjdHVhbGx5IHN1cHBvcnRlZCAqL1xcbiAxNjM6XFx0XFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX1dSSVRFX0FUT01JQztcXG4gMTY0OlxcdFxcdH1cXG4gMTY1OlxcdH1cXG4gMTY2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKTtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0LyoqXFxuIDE2OTpcXHQgKiB2ZnNfZ2V0YXR0cl9ub3NlYyAtIGdldGF0dHIgd2l0aG91dCBzZWN1cml0eSBjaGVja3NcXG4gMTcwOlxcdCAqIEBwYXRoOiBmaWxlIHRvIGdldCBhdHRyaWJ1dGVzIGZyb21cXG4gMTcxOlxcdCAqIEBzdGF0OiBzdHJ1Y3R1cmUgdG8gcmV0dXJuIGF0dHJpYnV0ZXMgaW5cXG4gMTcyOlxcdCAqIEByZXF1ZXN0X21hc2s6IFNUQVRYX3h4eCBmbGFncyBpbmRpY2F0aW5nIHdoYXQgdGhlIGNhbGxlciB3YW50c1xcbiAxNzM6XFx0ICogQHF1ZXJ5X2ZsYWdzOiBRdWVyeSBtb2RlIChBVF9TVEFUWF9TWU5DX1RZUEUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjE3LjIxOTk3NjI5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMDE5MjU1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZXh0NF9nZXRhdHRyYCBGdW5jdGlvbiBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZXh0NF9nZXRhdHRyYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBnZXRzIHRyaWdnZXJlZCB3aGVuIGBzdGF0eGAgaXMgY2FsbGVkIG9uIGFuIGV4dDQgZmlsZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGV2ZW4gcmVsZXZhbnQgaW4gYSB0eXBpY2FsIGZ1enppbmcgc2V0dXA/IEFyZSBgZXh0NGAgYW5kIGBleHQ0X2dldGF0dHJgIGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgc3l6a2FsbGVyPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gRXh0NCBpcyBwcmFjdGljYWxseSB0aGUgZGVmYXVsdCBmaWxlc3lzdGVtIGZvciBMaW51eCwgYW5kIHN5emthbGxlciBhYnNvbHV0ZWx5ICpwb3VuZHMqIGV4dDQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBpbmNsdWRpbmcgdGhlIGBzdGF0eGAgc3lzdGVtIGNhbGwuIEdvb2QsIHRoYXQgdGFrZXMgY2FyZSBvZiByZWFjaGFiaWxpdHkuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgY3JpdGVyaWEuIEZpcnN0LCB0aGUgcG9zaXRpdmUgc2lkZS4gV2UncmUgZGVhbGluZyB3aXRoIGEgY29yZSBzdWJzeXN0ZW06IHRoZSBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGBmcy9leHQ0L2lub2RlLmNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0LiBXZSd2ZSBlc3RhYmxpc2hlZCBpdCdzIHJlYWNoYWJsZSDigJMgYGV4dDRfZ2V0YXR0cmAgaXMgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgc3RhdHgoKWAgc3lzY2FsbCBvbiBleHQ0IGZpbGVzLiBBbmQgZmluYWxseSwgaXMgaXQgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhpcywgdGhlIGFuc3dlciBpcyBcInRydWUuXCIgVGhhdCdzIHRoZSBncmVlbiBsaWdodC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgZXh0NC4gTGV0J3MgZGlnIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIHdlIGhhdmUgZXZlcnl0aGluZyBlbmFibGVkIGZvciB0aGlzIHRvIGJlIHByb2R1Y3RpdmUuIE5lZWQgdG8gbWFrZSBzdXJlIG5vIHdlaXJkIGRlcGVuZGVuY2llcyBhcmUgYmxvY2tpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjIyLjQyMTkwNTEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjExMTQ2NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MjIuNjgzMDI1OTU2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMDc1MzUzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBFWFQ0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgYEVYVDRfRlNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgYWx3YXlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIGV4dDQgd2l0aGluIHRoZSBmaWxlc3lzdGVtIGRpcmVjdG9yeS4gSSB3YW50IHRvIHF1aWNrbHkgY29uZmlybSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gc2VlcywgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY2hhbmdlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIG1vdmluZyBvbi4gS25vd2luZyB0aGUgS2NvbmZpZyBkZXRhaWxzIGlzIGVzc2VudGlhbCBncm91bmR3b3JrLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QgaW4gYGZzL2V4dDQvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0MjoyNS45OTA1NjQxNjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgRVhUNF9GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNTpcXHRcXHRzZWxlY3QgSkJEMlxcbiAgIDY6XFx0XFx0c2VsZWN0IENSQzE2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gICA4OlxcdFxcdHNlbGVjdCBGU19JT01BUFxcbiAgIDk6XFx0XFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSxcXG4gIDE0OlxcdFxcdCAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aFxcbiAgMTU6XFx0XFx0ICBleHQzOyBpdCBpcyBiYXNlZCBvbiBleHRlbnQgbWFwcyBhbmQgaXQgc3VwcG9ydHMgNDgtYml0XFxuICAxNjpcXHRcXHQgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZFxcbiAgMTc6XFx0XFx0ICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyxcXG4gIDE4OlxcdFxcdCAgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGZlYXR1cmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIHNwZWVkXFxuICAxOTpcXHRcXHQgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXRcXG4gIDIwOlxcdFxcdCAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxcbiAgMjM6XFx0XFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXFxuICAyNDpcXHRcXHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XFxuICAyNTpcXHRcXHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcXG4gIDI2OlxcdFxcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXFxuICAyNzpcXHRcXHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXFxuICAyODpcXHRcXHQgIGNvbXBhdGlibGUuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZVxcbiAgMzE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0NC5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlVzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1xcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gRVhUNF9GU1xcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBFWFQyX0ZTPW5cXG4gIDM5OlxcdFxcdGRlZmF1bHQgeVxcbiAgNDA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0MjoyNS45OTA2NTU3NzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0MzE3MDU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB3aGF0J3MgaW4gYEZvY3VzU3ltYm9sc2AuIEFoLCB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGV4dDRfZ2V0YXR0cmAuIElzIHRoYXQgdGhlIHJpZ2h0IHBsYWNlIHRvIGZvY3VzPyBJIG5lZWQgdG8gbWFrZSBhIGRlY2lzaW9uIGhlcmUuIFNob3VsZCBJIGJlIGxvb2tpbmcgYXQgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCBhcyB3ZWxsLCBvciBpcyBgZXh0NF9nZXRhdHRyYCBzdWZmaWNpZW50P1xuXG5SaWdodCwgYGV4dDRfZ2V0YXR0cmAgaXMgdGhlICpleHQ0LXNwZWNpZmljKiBnZXRhdHRyIGlub2RlIG9wZXJhdGlvbi4gVGhhdCdzIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBtb2RpZmllZCBjb2RlIGRpcmVjdGx5IGluIGl0LCBzbyBpdCBmZWVscyBsaWtlIGEgZ29vZCBmaXQgZm9yIGBGb2N1c1N5bWJvbHNgLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCAqaXMqIGNhbGxlZCBieSBgZXh0NF9nZXRhdHRyYCwgYnV0IGFsc28gYnkgZnVuY3Rpb25zIHN1Y2ggYXMgYGJkZXZfc3RhdHhgIGFuZCBgeGZzX3JlcG9ydF9hdG9taWNfd3JpdGVgLCBpbXBseWluZyBicm9hZGVyIHVzZSBiZXlvbmQganVzdCB0aGUgY29udGV4dCBJJ20gaW50ZXJlc3RlZCBpbi5cblxuU28sIGxldCdzIGdvIHdpdGg6IGBGb2N1c1N5bWJvbHNgOiBgZXh0NF9nZXRhdHRyYCwgYW5kIGtlZXAgYW4gb3BlbiBtaW5kIGZvciBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgIGxhdGVyIGlmIG5lZWRlZC4gSSBuZWVkIHRvIGVzdGFibGlzaCB3aGV0aGVyIGBleHQ0X2dldGF0dHJgIGlzIHRvbyBzcGVjaWZpYy4gSXQncyB0aGUgZXh0NC1zcGVjaWZpYyBoYW5kbGVyIGZvciBzdGF0eCBhbmQgc3RhdCBvcGVyYXRpb25zLCBkaXJlY3RseSByZWxhdGVkIHRvIGV4dDQgZmlsZXN5c3RlbSBjYWxscy4gRnV6emluZyBhdHRlbXB0cyB0byB0YXJnZXQgc3RhdHggYW5kIHJlbGF0ZWQgY2FsbHMgb24gdGhlIGV4dDQgZmlsZXN5c3RlbSB3aWxsIG1vc3QgbGlrZWx5IGxlYWQgdG8gYGV4dDRfZ2V0YXR0cmAuIFRoYXQgc291bmRzIGZvY3VzZWQsIG5vdCB1YmlxdWl0b3VzLCB1bmxpa2Ugc2F5LCBnZW5lcmljIHZmcyBmdW5jdGlvbnMgb3IgbWVtb3J5IGFsbG9jYXRvcnMuXG5cbkp1c3QgZm9yIGNvbnRleHQsIEkgc2hvdWxkIHBlZWsgYXQgYGV4dDRfaW5vZGVfY2FuX2F0b21pY193cml0ZWAgaW4gZnMvZXh0NC9pbm9kZS5jIHRvIGdldCB0aGUgc3Vycm91bmRpbmcgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjI5LjIzMzgyODM4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcxNDk0MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTQwNDc9c3RhdGljIGlubGluZSBpbnQgZXh0NF9idWZmZXJfdXB0b2RhdGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTQwNTktXFxuZnMvZXh0NC9leHQ0Lmg6NDA2MDpzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9leHQ0LmgtNDA2MS17XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz05NjI9c3RhdGljIGludCBleHQ0X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTk5NC1cXG5mcy9leHQ0L2ZpbGUuYzo5OTU6XFx0aWYgKGV4dDRfaW5vZGVfY2FuX2F0b21pY193cml0ZShpbm9kZSkpXFxuZnMvZXh0NC9maWxlLmMtOTk2LVxcdFxcdGZpbHAtXFx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DQU5fQVRPTUlDX1dSSVRFO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTYyNjY9aW50IGV4dDRfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjMwMS1cXG5mcy9leHQ0L2lub2RlLmM6NjMwMjpcXHRcXHRpZiAoZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlKGlub2RlKSkge1xcbmZzL2V4dDQvaW5vZGUuYy02MzAzLVxcdFxcdFxcdGF3dV9taW4gPSBzYmktXFx1MDAzZXNfYXd1X21pbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MjkuMzMwOTgyODg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4Mjk5OTIxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIGV4dDQgQXRvbWljIFdyaXRlcyoqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBiZXR0ZXIgYWJvdXQgaG93IGF0b21pYyB3cml0ZXMgYXJlIGhhbmRsZWQgaW4gZXh0NC4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiBgZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlYC4gSSByZW1lbWJlciB0aGF0J3MgZGVjbGFyZWQgaW4gYGZzL2V4dDQvZXh0NC5oYCwgc28gdGhhdCdzIHdoZXJlIEknbGwgZ28gZmlyc3QuIEkgd2FudCB0byBzZWUgZXhhY3RseSB3aGF0IGNvbmRpdGlvbnMgYXJlIGJlaW5nIGNoZWNrZWQgYW5kIHRoZSBvdmVyYWxsIGxvZ2ljIHRoaXMgZnVuY3Rpb24gdXNlcyB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBhdG9taWMgd3JpdGUgaXMgcG9zc2libGUgZm9yIGEgZ2l2ZW4gaW5vZGUuIEknbSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIHVuZGVybHlpbmcgcmVzdHJpY3Rpb25zIGF0IHBsYXkuIExldCdzIHNlZSB3aGF0IHRoZSBoZWFkZXIgZmlsZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODg3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MzEuMTYwOTc4NTI0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2V4dDQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MDU4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MDU4OlxcdH1cXG40MDU5OlxcdFxcbjQwNjA6XFx0c3RhdGljIGlubGluZSBib29sIGV4dDRfaW5vZGVfY2FuX2F0b21pY193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbjQwNjE6XFx0e1xcbjQwNjI6XFx0XFxuNDA2MzpcXHRcXHRyZXR1cm4gU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNlxcbjQwNjQ6XFx0XFx0XFx0ZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykgXFx1MDAyNlxcdTAwMjZcXG40MDY1OlxcdFxcdFxcdEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2F3dV9taW4gXFx1MDAzZSAwO1xcbjQwNjY6XFx0fVxcbjQwNjc6XFx0XFxuNDA2ODpcXHRleHRlcm4gaW50IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG40MDY5OlxcdFxcdFxcdFxcdFxcdCAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxcbjQwNzA6XFx0XFx0XFx0XFx0XFx0ICBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrKTtcXG40MDcxOlxcdFxcbjQwNzI6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuNDA3MzpcXHQjZGVmaW5lIEVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChzeW0pIFxcXFxcXG40MDc0OlxcdFxcdEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc3ltLCBcXFwiZXh0NC10ZXN0XFxcIilcXG40MDc1OlxcdCNlbmRpZlxcbjQwNzY6XFx0I2VuZGlmXFx0LyogX19LRVJORUxfXyAqL1xcbjQwNzc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjMxLjE2MTIzNDg4NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjI2NTEwMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEF0b21pYyBXcml0ZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBhdG9taWMgd3JpdGVzIGluIGV4dDQuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGVgIGlzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiBkZWZpbmVkIGluIGBmcy9leHQ0L2V4dDQuaGAuIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQsIGJ1dCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBmcy9leHQ0L2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBleHQ0X2dldGF0dHJgIGZ1bmN0aW9uLlxuXG5NeSBgRm9jdXNTeW1ib2xzYCwgYXMgSSB1bmRlcnN0YW5kIHRoZW0sIGFyZSBkZWZpbml0ZWx5IGBleHQ0X2dldGF0dHJgIGFuZCBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgLiBUaGUgcGF0Y2ggYWZmZWN0cyBob3cgdGhlIG1heCBhdG9taWMgd3JpdGUgdW5pdCBwYXJhbWV0ZXIgaXMgcGFzc2VkIHRvIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcygpYCB3aXRoaW4gYGV4dDRfZ2V0YXR0cigpYC4gVGhpcyB3aG9sZSB0aGluZyBiZWNvbWVzIHJlbGV2YW50IHdoZW4gdXNlcnNwYWNlIGNhbGxzIGBzdGF0eCgpYCBvbiBhbiBleHQ0IGZpbGVzeXN0ZW0gYW5kIHNwZWNpZmljYWxseSByZXF1ZXN0cyBgU1RBVFhfV1JJVEVfQVRPTUlDYC5cblxuSXQgbG9va3MgbGlrZSB0aGlzIGlzICpkZWZpbml0ZWx5KiBzb21ldGhpbmcgd29ydGggZnV6emluZywgdGhhdCdzIHdoYXQgYFdvcnRoRnV6emluZzogdHJ1ZWAgaXMgc2F5aW5nLiBUaGUgcmF0aW9uYWxlIHNlZW1zIHNvbGlkIOKAkyB0aGUgc3lzdGVtIGNhbGwgYW5kIHBhcmFtZXRlciBjaGFuZ2UgbWFrZSB0aGlzIGEgbGlrZWx5IHRhcmdldCBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgY2xlYXJseSBkZXBlbmRlbnQgb24gYEVYVDRfRlNgLiBJJ3ZlIGNvbmZpcm1lZCBhbGwgb2YgdGhhdCwgYW5kIEknbSBjb25maWRlbnQgaW4gbXkgdW5kZXJzdGFuZGluZywgc28gSSdsbCBnbyBhaGVhZCBhbmQgbG9nIHRoZXNlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MzYsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MzQuNzg3NzQ5NTEyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMjUxNzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9nZXRhdHRyXCIsXG4gICAgXCJnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBhdG9taWMgd3JpdGUgcGFyYW1ldGVycyAodW5pdF9tYXhfb3B0KSBhcmUgcmVwb3J0ZWQgaW4gZXh0NF9nZXRhdHRyKCkgd2hlbiBzdGF0eCBxdWVyaWVzIFNUQVRYX1dSSVRFX0FUT01JQy4gVGhpcyBpcyByZWFjaGFibGUgdXNlciBzcGFjZSBjb2RlIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gdmlhIHN0YXR4IHN5c3RlbSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9nZXRhdHRyXCIsXG4gICAgXCJnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBhdG9taWMgd3JpdGUgcGFyYW1ldGVycyAodW5pdF9tYXhfb3B0KSBhcmUgcmVwb3J0ZWQgaW4gZXh0NF9nZXRhdHRyKCkgd2hlbiBzdGF0eCBxdWVyaWVzIFNUQVRYX1dSSVRFX0FUT01JQy4gVGhpcyBpcyByZWFjaGFibGUgdXNlciBzcGFjZSBjb2RlIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gdmlhIHN0YXR4IHN5c3RlbSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MzQuOTIwMDEwMDQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjYxMjE2MDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjM0LjkyMDQzMTQ2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2NjExNzM1MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9nZXRhdHRyKClgIGluIGBmcy9leHQ0L2lub2RlLmNgIHRvIHBhc3MgYGF3dV9tYXhgIGluc3RlYWQgb2YgYDBgIGFzIHRoZSBgdW5pdF9tYXhfb3B0YCBwYXJhbWV0ZXIgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKClgLlxcblxcbjEuIFRoZSB2YXJpYWJsZSBgYXd1X21heGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIChgdW5zaWduZWQgaW50IGF3dV9taW4gPSAwLCBhd3VfbWF4ID0gMDtgKSBhbmQgb3B0aW9uYWxseSB1cGRhdGVkIGZyb20gYHNiaS1cXHUwMDNlc19hd3VfbWF4YC5cXG4yLiBUaGUgZGVzdGluYXRpb24gYHN0cnVjdCBrc3RhdGAgaXMgemVyby1pbml0aWFsaXplZCBpbiBgdmZzX2dldGF0dHJfbm9zZWMoKWAuXFxuMy4gV2hlbiByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHZpYSBgc3RhdHhgLCBgY3Bfc3RhdHgoKWAgaW5pdGlhbGl6ZXMgdGhlIGVudGlyZSBgc3RydWN0IHN0YXR4YCBzdHJ1Y3R1cmUgdXNpbmcgYG1lbXNldChcXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBwb3B1bGF0aW5nIGZpZWxkcyBhbmQgY2FsbGluZyBgY29weV90b191c2VyKClgLlxcbjQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwgbWVtb3J5IGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkLlxcblxcblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkMTVhNDJmNmZmNWE0ODExY2I0MGQ0MzFkMmI0YzY0NDJmZDQ4YjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxMDo0MjowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggMjZmMGY5NzE0ZjAzYy4uOTMwNTZjOTcxZTc0YiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNjMwNCw3ICs2MzA0LDggQEAgaW50IGV4dDRfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4gXHRcdFx0YXd1X21heCA9IHNiaS1cdTAwM2VzX2F3dV9tYXg7XG4gXHRcdH1cbiBcbi1cdFx0Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCwgYXd1X21pbiwgYXd1X21heCwgMCk7XG4rXHRcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsXG4rXHRcdFx0XHRcdFx0IGF3dV9tYXgpO1xuIFx0fVxuIFxuIFx0ZmxhZ3MgPSBlaS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0ZMX1VTRVJfVklTSUJMRTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjM0LjkyMDQzMjU3N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODU2ODY0MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGV4dDRfZ2V0YXR0cmAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIGRvd24gdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgbW9kaWZ5aW5nIHRoZSBgZXh0NF9nZXRhdHRyYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGZzL2V4dDQvaW5vZGUuY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGhvdyB3ZSdyZSBjYWxsaW5nIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2AuXG5cblRoZSBkaWZmIHNob3dzIGEgbWlub3IgYWRqdXN0bWVudCwgY2hhbmdpbmcgdGhlIHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgLiBQcmV2aW91c2x5IGl0IHdhcyAwLCBhbmQgbm93IGl0J3MgYGF3dV9tYXhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBXaGF0J3MgdGhlIGltcGFjdCBvZiBzZXR0aW5nIHRoZSBhdG9taWMgd3JpdGUgdW5pdCBtYXggYXMgdGhlIG51bWJlcj9cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCBpdHNlbGYsIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IHdpdGhpbiBgZXh0NF9nZXRhdHRyYC4gU3BlY2lmaWNhbGx5LCB3aGF0IGFyZSBgYXd1X21pbmAgYW5kIGBhd3VfbWF4YD8gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHNvdXJjZSBjb2RlIGZvciBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgIGFuZCBtYXliZSBwb2tlIGFyb3VuZCBgaW5vZGUuY2AgZm9yIHNvbWUgbW9yZSBjb250ZXh0LiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBhdG9taWMgd3JpdGUgdW5pdCBjb25jZXB0IGFuZCBob3cgdGhlIHN0YXQgaW5mb3JtYXRpb24gaXMgYmVpbmcgcG9wdWxhdGVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0Mjo0MS43NzczMDA5NDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTM0NjExNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmRldi5jPTEzOTQ9dm9pZCBiZGV2X3N0YXR4KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2spXFxuLS1cXG5ibG9jay9iZGV2LmMtMTQxNi1cXG5ibG9jay9iZGV2LmM6MTQxNzpcXHRcXHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LFxcbmJsb2NrL2JkZXYuYy0xNDE4LVxcdFxcdFxcdHF1ZXVlX2F0b21pY193cml0ZV91bml0X21pbl9ieXRlcyhiZF9xdWV1ZSksXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NjI2Nj1pbnQgZXh0NF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02MzA2LVxcbmZzL2V4dDQvaW5vZGUuYzo2MzA3OlxcdFxcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsXFxuZnMvZXh0NC9pbm9kZS5jLTYzMDgtXFx0XFx0XFx0XFx0XFx0XFx0IGF3dV9tYXgpO1xcbi0tXFxuZnMvc3RhdC5jPTEzMj1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsbF9zdGF0eF9hdHRyKTtcXG4tLVxcbmZzL3N0YXQuYy0xMzQtLyoqXFxuZnMvc3RhdC5jOjEzNTogKiBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyAtIEZpbGwgaW4gYXRvbWljIHdyaXRlcyBzdGF0eCBhdHRyaWJ1dGVzXFxuZnMvc3RhdC5jLTEzNi0gKiBAc3RhdDpcXHRXaGVyZSB0byBmaWxsIGluIHRoZSBhdHRyaWJ1dGUgZmxhZ3NcXG4tLVxcbmZzL3N0YXQuYy0xNDMtICovXFxuZnMvc3RhdC5jOjE0NDp2b2lkIGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0cnVjdCBrc3RhdCAqc3RhdCxcXG5mcy9zdGF0LmMtMTQ1LVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21pbixcXG4tLVxcbmZzL3N0YXQuYy0xNjUtfVxcbmZzL3N0YXQuYzoxNjY6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMpO1xcbmZzL3N0YXQuYy0xNjctXFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYz02NzA9eGZzX3JlcG9ydF9hdG9taWNfd3JpdGUoXFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYy02NzMte1xcbmZzL3hmcy94ZnNfaW9wcy5jOjY3NDpcXHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LFxcbmZzL3hmcy94ZnNfaW9wcy5jLTY3NS1cXHRcXHRcXHR4ZnNfZ2V0X2F0b21pY193cml0ZV9taW4oaXApLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTMyMDg9dm9pZCBnZW5lcmljX2ZpbGxfc3RhdHhfYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qga3N0YXQgKnN0YXQpO1xcbmluY2x1ZGUvbGludXgvZnMuaDozMjA5OnZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RydWN0IGtzdGF0ICpzdGF0LFxcbmluY2x1ZGUvbGludXgvZnMuaC0zMjEwLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21pbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6NDMuODMwNzcyNjQxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTQxMjk0NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBGaWxlIE1ldGFkYXRhIEhhbmRsaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBoYW5kbGluZyBvZiBmaWxlIG1ldGFkYXRhLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYHN0YXRgIHN5c3RlbSBjYWxsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGV4dDQgZmlsZXN5c3RlbS4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgZXhhbWluaW5nIGBmcy9zdGF0LmNgLCBmb2N1c2luZyBhcm91bmQgbGluZSAxMzQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBkaXNwYXRjaGVzIHRoZSBgc3RhdGAgcmVxdWVzdCBhbmQgaGFuZGxlcyB0aGUgYmFzaWMgc2V0dXAuIFRoZW4sIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlIGV4dDQgaW1wbGVtZW50YXRpb24gaW50ZXJhY3RzLCBJIG5lZWQgdG8ganVtcCBvdmVyIHRvIGBmcy9leHQ0L2lub2RlLmNgLCBsaWtlbHkgYXJvdW5kIGxpbmUgNjMwMC4gSSBzdXNwZWN0IHRoaXMgd2lsbCBpbnZvbHZlIGZpbmRpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQgZXh0NCB1c2VzIHRvIHBvcHVsYXRlIHRoZSBgc3RhdGAgZGF0YSBzdHJ1Y3R1cmUgZnJvbSB0aGUgaW5vZGUgZGF0YS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGRldGFpbHMgdGhlcmUsIHN1Y2ggYXMgaG93IHRoZSBpbm9kZSdzIG9uLWRpc2sgcmVwcmVzZW50YXRpb24gdHJhbnNsYXRlcyB0byB0aGUgaW4tbWVtb3J5IGBzdGF0YCBzdHJ1Y3R1cmUsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSBzaXplLCBwZXJtaXNzaW9ucywgYW5kIHRpbWVzdGFtcHMuIEhvcGVmdWxseSwgdGhpcyBhcHByb2FjaCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvcmUgZGF0YSBpcyBzb3VyY2VkIGFuZCBwcmVwYXJlZCBmb3IgdGhlIHVzZXIgc3BhY2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0Mjo0Ni4xODQ5MDUzNjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3N0YXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzQsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzQ6XFx0LyoqXFxuIDEzNTpcXHQgKiBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyAtIEZpbGwgaW4gYXRvbWljIHdyaXRlcyBzdGF0eCBhdHRyaWJ1dGVzXFxuIDEzNjpcXHQgKiBAc3RhdDpcXHRXaGVyZSB0byBmaWxsIGluIHRoZSBhdHRyaWJ1dGUgZmxhZ3NcXG4gMTM3OlxcdCAqIEB1bml0X21pbjpcXHRNaW5pbXVtIHN1cHBvcnRlZCBhdG9taWMgd3JpdGUgbGVuZ3RoIGluIGJ5dGVzXFxuIDEzODpcXHQgKiBAdW5pdF9tYXg6XFx0TWF4aW11bSBzdXBwb3J0ZWQgYXRvbWljIHdyaXRlIGxlbmd0aCBpbiBieXRlc1xcbiAxMzk6XFx0ICogQHVuaXRfbWF4X29wdDogT3B0aW1pc2VkIG1heGltdW0gc3VwcG9ydGVkIGF0b21pYyB3cml0ZSBsZW5ndGggaW4gYnl0ZXNcXG4gMTQwOlxcdCAqXFxuIDE0MTpcXHQgKiBGaWxsIGluIHRoZSBTVEFUWHtfQVRUUn1fV1JJVEVfQVRPTUlDIGZsYWdzIGluIHRoZSBrc3RhdCBzdHJ1Y3R1cmUgZnJvbVxcbiAxNDI6XFx0ICogYXRvbWljIHdyaXRlIHVuaXRfbWluIGFuZCB1bml0X21heCB2YWx1ZXMuXFxuIDE0MzpcXHQgKi9cXG4gMTQ0OlxcdHZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RydWN0IGtzdGF0ICpzdGF0LFxcbiAxNDU6XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWluLFxcbiAxNDY6XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWF4LFxcbiAxNDc6XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWF4X29wdClcXG4gMTQ4OlxcdHtcXG4gMTQ5OlxcdFxcdC8qIENvbmZpcm0gdGhhdCB0aGUgcmVxdWVzdCB0eXBlIGlzIGtub3duICovXFxuIDE1MDpcXHRcXHRzdGF0LVxcdTAwM2VyZXN1bHRfbWFzayB8PSBTVEFUWF9XUklURV9BVE9NSUM7XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcdC8qIENvbmZpcm0gdGhhdCB0aGUgZmlsZSBhdHRyaWJ1dGUgdHlwZSBpcyBrbm93biAqL1xcbiAxNTM6XFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IFNUQVRYX0FUVFJfV1JJVEVfQVRPTUlDO1xcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHRpZiAodW5pdF9taW4pIHtcXG4gMTU2OlxcdFxcdFxcdHN0YXQtXFx1MDAzZWF0b21pY193cml0ZV91bml0X21pbiA9IHVuaXRfbWluO1xcbiAxNTc6XFx0XFx0XFx0c3RhdC1cXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWF4ID0gdW5pdF9tYXg7XFxuIDE1ODpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdG9taWNfd3JpdGVfdW5pdF9tYXhfb3B0ID0gdW5pdF9tYXhfb3B0O1xcbiAxNTk6XFx0XFx0XFx0LyogSW5pdGlhbGx5IG9ubHkgYWxsb3cgMXggc2VnbWVudCAqL1xcbiAxNjA6XFx0XFx0XFx0c3RhdC1cXHUwMDNlYXRvbWljX3dyaXRlX3NlZ21lbnRzX21heCA9IDE7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdFxcdC8qIENvbmZpcm0gYXRvbWljIHdyaXRlcyBhcmUgYWN0dWFsbHkgc3VwcG9ydGVkICovXFxuIDE2MzpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfV1JJVEVfQVRPTUlDO1xcbiAxNjQ6XFx0XFx0fVxcbiAxNjU6XFx0fVxcbiAxNjY6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMpO1xcbiAxNjc6XFx0XFxuIDE2ODpcXHQvKipcXG4gMTY5OlxcdCAqIHZmc19nZXRhdHRyX25vc2VjIC0gZ2V0YXR0ciB3aXRob3V0IHNlY3VyaXR5IGNoZWNrc1xcbiAxNzA6XFx0ICogQHBhdGg6IGZpbGUgdG8gZ2V0IGF0dHJpYnV0ZXMgZnJvbVxcbiAxNzE6XFx0ICogQHN0YXQ6IHN0cnVjdHVyZSB0byByZXR1cm4gYXR0cmlidXRlcyBpblxcbiAxNzI6XFx0ICogQHJlcXVlc3RfbWFzazogU1RBVFhfeHh4IGZsYWdzIGluZGljYXRpbmcgd2hhdCB0aGUgY2FsbGVyIHdhbnRzXFxuIDE3MzpcXHQgKiBAcXVlcnlfZmxhZ3M6IFF1ZXJ5IG1vZGUgKEFUX1NUQVRYX1NZTkNfVFlQRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6NDYuMTg1MDQzODIzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NDQwOTcxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBmcm9tIGBmcy9leHQ0L2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDYyOTAtNjMyMDpcblxuKipBbmFseXppbmcgZXh0NCBpbm9kZS5jICg2MjkwLTYzMjApOiBBIEZvY3VzZWQgTG9vayoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcsIFwiT2theSwgZXh0NCBpbm9kZS5jLi4uIGxldCdzIHBpbnBvaW50IHRoYXQgc2VjdGlvbi5cIiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB0byBob25lIGluIG9uIGxpbmVzIDYyOTAgdG8gNjMyMC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcHJvYmFibHkgYmUgbG9va2luZyBhdCBzb21lIGlub2RlIG9wZXJhdGlvbiwgcG90ZW50aWFsbHkgYSBtZXRhZGF0YSB1cGRhdGUgb3IgcGVyaGFwcyBzb21lIGFzcGVjdHMgb2YgaW5vZGUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24sIG9yIG1heWJlIGV2ZW4gcmVsYXRlZCB0byBqb3VybmFsIG9wZXJhdGlvbnMsIGdpdmVuIHRoZSBjb250ZXh0IG9mIGlub2RlIGhhbmRsaW5nLiBUaGUgbGluZSBudW1iZXJzIGFyZSBpbXBvcnRhbnQsIGJlY2F1c2UgdGhpcyBpbmRpY2F0ZXMgYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjb2RlYmFzZS4gSSBhbSBleHBlY3RpbmcgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBsaWtlbHkgd2l0aCBlcnJvciBoYW5kbGluZywgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzLCBzb21lIGtleSBmdW5jdGlvbiBjYWxsLCBzb21lIGNvbXBhcmlzb24gb3IgY29uZGl0aW9uYWwgbG9naWMsIG9yIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYmxvY2sgZGV2aWNlIGxheWVyLiBQZXJoYXBzIHRoZSBjb2RlIGRlYWxzIHdpdGggdGhlIGxvZ2ljIGludm9sdmVkIGluIHNldHRpbmcgdXAgb3IgdGVhcmluZyBkb3duIGFuIGV4dGVudC1tYXBwZWQgZmlsZSBibG9jay5cblxuQmFzZWQgb24gdGhlIHN0cnVjdHVyZSBhbmQgbGlrZWx5IGZ1bmN0aW9uIGNhbGxzLCB0aGlzIGNvZGUgc25pcHBldCBsaWtlbHkgZm9jdXNlcyBvbiB0aGUgbG93LWxldmVsLCBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhbiBleHQ0IGZpbGVzeXN0ZW0gb3BlcmF0aW9uLiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGJlIHBhcnQgb2YgdGhlIGNvcmUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUgYW5kIGlzIHRodXMgaGlnaGx5IGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQsIGlmIGRlYnVnZ2luZyBvciBtb2RpZnlpbmcgZXh0NC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHZhcmlhYmxlcyBhbmQgdGhlaXIgZGF0YSB0eXBlcywgYW5kIGFueSBjb250cm9sIGZsb3csIGVzcGVjaWFsbHkgcG90ZW50aWFsIGVycm9yIHBhdGhzLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjUxLjEyOTE0Mzc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjI4MDpcXHRcXG42MjgxOlxcdFxcdC8qIFJldHVybiB0aGUgRElPIGFsaWdubWVudCByZXN0cmljdGlvbnMgaWYgcmVxdWVzdGVkLiAqL1xcbjYyODI6XFx0XFx0aWYgKChyZXF1ZXN0X21hc2sgXFx1MDAyNiBTVEFUWF9ESU9BTElHTikgXFx1MDAyNlxcdTAwMjYgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjYyODM6XFx0XFx0XFx0dTMyIGRpb19hbGlnbiA9IGV4dDRfZGlvX2FsaWdubWVudChpbm9kZSk7XFxuNjI4NDpcXHRcXG42Mjg1OlxcdFxcdFxcdHN0YXQtXFx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0RJT0FMSUdOO1xcbjYyODY6XFx0XFx0XFx0aWYgKGRpb19hbGlnbiA9PSAxKSB7XFxuNjI4NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmRldjtcXG42Mjg4OlxcdFxcbjYyODk6XFx0XFx0XFx0XFx0LyogaW9tYXAgZGVmYXVsdHMgKi9cXG42MjkwOlxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZWRpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldikgKyAxO1xcbjYyOTE6XFx0XFx0XFx0XFx0c3RhdC1cXHUwMDNlZGlvX29mZnNldF9hbGlnbiA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xcbjYyOTI6XFx0XFx0XFx0fSBlbHNlIHtcXG42MjkzOlxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZWRpb19tZW1fYWxpZ24gPSBkaW9fYWxpZ247XFxuNjI5NDpcXHRcXHRcXHRcXHRzdGF0LVxcdTAwM2VkaW9fb2Zmc2V0X2FsaWduID0gZGlvX2FsaWduO1xcbjYyOTU6XFx0XFx0XFx0fVxcbjYyOTY6XFx0XFx0fVxcbjYyOTc6XFx0XFxuNjI5ODpcXHRcXHRpZiAoKHJlcXVlc3RfbWFzayBcXHUwMDI2IFNUQVRYX1dSSVRFX0FUT01JQykgXFx1MDAyNlxcdTAwMjYgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjYyOTk6XFx0XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuNjMwMDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYXd1X21pbiA9IDAsIGF3dV9tYXggPSAwO1xcbjYzMDE6XFx0XFxuNjMwMjpcXHRcXHRcXHRpZiAoZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlKGlub2RlKSkge1xcbjYzMDM6XFx0XFx0XFx0XFx0YXd1X21pbiA9IHNiaS1cXHUwMDNlc19hd3VfbWluO1xcbjYzMDQ6XFx0XFx0XFx0XFx0YXd1X21heCA9IHNiaS1cXHUwMDNlc19hd3VfbWF4O1xcbjYzMDU6XFx0XFx0XFx0fVxcbjYzMDY6XFx0XFxuNjMwNzpcXHRcXHRcXHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxcbjYzMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGF3dV9tYXgpO1xcbjYzMDk6XFx0XFx0fVxcbjYzMTA6XFx0XFxuNjMxMTpcXHRcXHRmbGFncyA9IGVpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9GTF9VU0VSX1ZJU0lCTEU7XFxuNjMxMjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0FQUEVORF9GTClcXG42MzEzOlxcdFxcdFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9BUFBFTkQ7XFxuNjMxNDpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0NPTVBSX0ZMKVxcbjYzMTU6XFx0XFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0NPTVBSRVNTRUQ7XFxuNjMxNjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0VOQ1JZUFRfRkwpXFxuNjMxNzpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfRU5DUllQVEVEO1xcbjYzMTg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9JTU1VVEFCTEVfRkwpXFxuNjMxOTpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfSU1NVVRBQkxFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0Mjo1MS4xMjk1MzE1NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODU3NzI5MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgYSBwYXRjaCBjaGFuZ2luZyBhIGNhbGwgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYC4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyB0aGUgZm91cnRoIGFyZ3VtZW50IGZyb20gYDBgIHRvIGBhd3VfbWF4YC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGJlaGF2aW9yIHJlbGF0ZWQgdG8gYXRvbWljIHdyaXRlIHVuaXQgaGFuZGxpbmcuXG5cbkRpdmluZyBpbnRvIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2AsIEkgc2VlIHRoYXQgdGhpcyBmb3VydGggYXJndW1lbnQsIGB1bml0X21heF9vcHRgLCBpcyBjb25kaXRpb25hbGx5IHVzZWQuIElmIGB1bml0X21pbmAgaXNuJ3QgemVybywgdGhlIGZ1bmN0aW9uIHNldHMgYHN0YXQtXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWF4X29wdGAgdG8gYHVuaXRfbWF4X29wdGAuIFJpZ2h0LCBzbyB0aGlzIHN1Z2dlc3RzIHRoYXQgYGF3dV9tYXhgIGlzIGJlaW5nIHNldCBoZXJlIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgd2hlcmUgYmVmb3JlLCBpdCB3YXMgZXhwbGljaXRseSB6ZXJvZWQuIFRoZSBgc3RhdGAgYXJndW1lbnQgaXMgdGhlIGBzdHJ1Y3Qga3N0YXQgKnN0YXRgIHBhc3NlZCB0byBgZXh0NF9nZXRhdHRyYC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmUgYWJvdXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgYHN0YXRgIHN0cnVjdHVyZS4gV2hlcmUgZG9lcyBpdCBjb21lIGZyb20sIGFuZCBjcml0aWNhbGx5LCBpcyBpdCB6ZXJvZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkPyBJZiBub3QsIHdlIGNvdWxkIGJlIGludHJvZHVjaW5nIHVuZGVmaW5lZCBiZWhhdmlvciBvciB1bmV4cGVjdGVkIHZhbHVlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhpcyBzdHJ1Y3R1cmUuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgc3RhdGAuIEknbGwgc3RhcnQgYnkgZXhhbWluaW5nIGhvdyBgdmZzX3N0YXR4YCBhbmQgdWx0aW1hdGVseSBgZG9fc3RhdHhgIGluaXRpYWxpemUgZWl0aGVyIGEgYHN0cnVjdCBrc3RhdCBzdGF0O2Agb3IgYHN0cnVjdCBzdGF0eGAuIEtub3dpbmcgaG93IHRoYXQgaXMgcG9wdWxhdGVkIGlzIGVzc2VudGlhbC4gVGhlbiwgSSB3aWxsIGFsc28gc2VhcmNoIGZvciBvdGhlciBjYWxsZXJzIG9mIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2Agb3IgYGNwX3N0YXR4YCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBlbHNld2hlcmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NzUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0Mjo1NC45ODcyNjU0MDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDEwODExMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3Bfc3RhdHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3RhdC5jPTY5OT1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludFxcbmZzL3N0YXQuYzo3MDA6Y3Bfc3RhdHgoY29uc3Qgc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3Qgc3RhdHggX191c2VyICpidWZmZXIpXFxuZnMvc3RhdC5jLTcwMS17XFxuLS1cXG5mcy9zdGF0LmM9NzQ0PWludCBkb19zdGF0eChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuLS1cXG5mcy9zdGF0LmMtNzY0LVxcbmZzL3N0YXQuYzo3NjU6XFx0cmV0dXJuIGNwX3N0YXR4KFxcdTAwMjZzdGF0LCBidWZmZXIpO1xcbmZzL3N0YXQuYy03NjYtfVxcbi0tXFxuZnMvc3RhdC5jPTc2OD1pbnQgZG9fc3RhdHhfZmQoaW50IGZkLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBtYXNrLFxcbi0tXFxuZnMvc3RhdC5jLTc4OC1cXG5mcy9zdGF0LmM6Nzg5OlxcdHJldHVybiBjcF9zdGF0eChcXHUwMDI2c3RhdCwgYnVmZmVyKTtcXG5mcy9zdGF0LmMtNzkwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6NTcuMTI4MzcwNjI3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MTI0MDkzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc3RhdHhgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGZzL3N0YXQuY2AgY29kZS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgc3RhdHhgIGlzIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBjcF9zdGF0eGAgYW5kIGBkb19zdGF0eGAuIEknbSBndWVzc2luZyB0aGF0IGBjcF9zdGF0eGAgcHJvYmFibHkgaGFuZGxlcyBzb21lIG9mIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIG9yIGFyZ3VtZW50IGNvcHlpbmcsIHdoaWxlIGBkb19zdGF0eGAgd2lsbCBiZSB3aGVyZSB0aGUgY29yZSBzeXN0ZW0gY2FsbCBsb2dpYyByZXNpZGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB1c2VkIGZvciB0aGUgZXh0ZW5kZWQgc3RhdCBpbmZvcm1hdGlvbiDigJMgaXQncyBiZWVuIGEgd2hpbGUgc2luY2UgSSBsYXN0IGxvb2tlZCBhdCB0aG9zZSBmaWVsZHMuIExldCdzIHNlZSBpZiB0aGlzIGxpbmVzIHVwIHdpdGggbXkgZXhwZWN0YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzQyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6NTkuODQwODAxODY2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zdGF0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjk1OlxcdFxcdHJldHVybiBjcF9uZXdfc3RhdDY0KFxcdTAwMjZzdGF0LCBzdGF0YnVmKTtcXG4gNjk2OlxcdH1cXG4gNjk3OlxcdCNlbmRpZiAvKiBfX0FSQ0hfV0FOVF9TVEFUNjQgfHwgX19BUkNIX1dBTlRfQ09NUEFUX1NUQVQ2NCAqL1xcbiA2OTg6XFx0XFxuIDY5OTpcXHRzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludFxcbiA3MDA6XFx0Y3Bfc3RhdHgoY29uc3Qgc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3Qgc3RhdHggX191c2VyICpidWZmZXIpXFxuIDcwMTpcXHR7XFxuIDcwMjpcXHRcXHRzdHJ1Y3Qgc3RhdHggdG1wO1xcbiA3MDM6XFx0XFxuIDcwNDpcXHRcXHRtZW1zZXQoXFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpO1xcbiA3MDU6XFx0XFxuIDcwNjpcXHRcXHQvKiBTVEFUWF9DSEFOR0VfQ09PS0lFIGlzIGtlcm5lbC1vbmx5IGZvciBub3cgKi9cXG4gNzA3OlxcdFxcdHRtcC5zdHhfbWFzayA9IHN0YXQtXFx1MDAzZXJlc3VsdF9tYXNrIFxcdTAwMjYgflNUQVRYX0NIQU5HRV9DT09LSUU7XFxuIDcwODpcXHRcXHR0bXAuc3R4X2Jsa3NpemUgPSBzdGF0LVxcdTAwM2VibGtzaXplO1xcbiA3MDk6XFx0XFx0LyogU1RBVFhfQVRUUl9DSEFOR0VfTU9OT1RPTklDIGlzIGtlcm5lbC1vbmx5IGZvciBub3cgKi9cXG4gNzEwOlxcdFxcdHRtcC5zdHhfYXR0cmlidXRlcyA9IHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXMgXFx1MDAyNiB+U1RBVFhfQVRUUl9DSEFOR0VfTU9OT1RPTklDO1xcbiA3MTE6XFx0XFx0dG1wLnN0eF9ubGluayA9IHN0YXQtXFx1MDAzZW5saW5rO1xcbiA3MTI6XFx0XFx0dG1wLnN0eF91aWQgPSBmcm9tX2t1aWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBzdGF0LVxcdTAwM2V1aWQpO1xcbiA3MTM6XFx0XFx0dG1wLnN0eF9naWQgPSBmcm9tX2tnaWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBzdGF0LVxcdTAwM2VnaWQpO1xcbiA3MTQ6XFx0XFx0dG1wLnN0eF9tb2RlID0gc3RhdC1cXHUwMDNlbW9kZTtcXG4gNzE1OlxcdFxcdHRtcC5zdHhfaW5vID0gc3RhdC1cXHUwMDNlaW5vO1xcbiA3MTY6XFx0XFx0dG1wLnN0eF9zaXplID0gc3RhdC1cXHUwMDNlc2l6ZTtcXG4gNzE3OlxcdFxcdHRtcC5zdHhfYmxvY2tzID0gc3RhdC1cXHUwMDNlYmxvY2tzO1xcbiA3MTg6XFx0XFx0dG1wLnN0eF9hdHRyaWJ1dGVzX21hc2sgPSBzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzX21hc2s7XFxuIDcxOTpcXHRcXHR0bXAuc3R4X2F0aW1lLnR2X3NlYyA9IHN0YXQtXFx1MDAzZWF0aW1lLnR2X3NlYztcXG4gNzIwOlxcdFxcdHRtcC5zdHhfYXRpbWUudHZfbnNlYyA9IHN0YXQtXFx1MDAzZWF0aW1lLnR2X25zZWM7XFxuIDcyMTpcXHRcXHR0bXAuc3R4X2J0aW1lLnR2X3NlYyA9IHN0YXQtXFx1MDAzZWJ0aW1lLnR2X3NlYztcXG4gNzIyOlxcdFxcdHRtcC5zdHhfYnRpbWUudHZfbnNlYyA9IHN0YXQtXFx1MDAzZWJ0aW1lLnR2X25zZWM7XFxuIDcyMzpcXHRcXHR0bXAuc3R4X2N0aW1lLnR2X3NlYyA9IHN0YXQtXFx1MDAzZWN0aW1lLnR2X3NlYztcXG4gNzI0OlxcdFxcdHRtcC5zdHhfY3RpbWUudHZfbnNlYyA9IHN0YXQtXFx1MDAzZWN0aW1lLnR2X25zZWM7XFxuIDcyNTpcXHRcXHR0bXAuc3R4X210aW1lLnR2X3NlYyA9IHN0YXQtXFx1MDAzZW10aW1lLnR2X3NlYztcXG4gNzI2OlxcdFxcdHRtcC5zdHhfbXRpbWUudHZfbnNlYyA9IHN0YXQtXFx1MDAzZW10aW1lLnR2X25zZWM7XFxuIDcyNzpcXHRcXHR0bXAuc3R4X3JkZXZfbWFqb3IgPSBNQUpPUihzdGF0LVxcdTAwM2VyZGV2KTtcXG4gNzI4OlxcdFxcdHRtcC5zdHhfcmRldl9taW5vciA9IE1JTk9SKHN0YXQtXFx1MDAzZXJkZXYpO1xcbiA3Mjk6XFx0XFx0dG1wLnN0eF9kZXZfbWFqb3IgPSBNQUpPUihzdGF0LVxcdTAwM2VkZXYpO1xcbiA3MzA6XFx0XFx0dG1wLnN0eF9kZXZfbWlub3IgPSBNSU5PUihzdGF0LVxcdTAwM2VkZXYpO1xcbiA3MzE6XFx0XFx0dG1wLnN0eF9tbnRfaWQgPSBzdGF0LVxcdTAwM2VtbnRfaWQ7XFxuIDczMjpcXHRcXHR0bXAuc3R4X2Rpb19tZW1fYWxpZ24gPSBzdGF0LVxcdTAwM2VkaW9fbWVtX2FsaWduO1xcbiA3MzM6XFx0XFx0dG1wLnN0eF9kaW9fb2Zmc2V0X2FsaWduID0gc3RhdC1cXHUwMDNlZGlvX29mZnNldF9hbGlnbjtcXG4gNzM0OlxcdFxcdHRtcC5zdHhfZGlvX3JlYWRfb2Zmc2V0X2FsaWduID0gc3RhdC1cXHUwMDNlZGlvX3JlYWRfb2Zmc2V0X2FsaWduO1xcbiA3MzU6XFx0XFx0dG1wLnN0eF9zdWJ2b2wgPSBzdGF0LVxcdTAwM2VzdWJ2b2w7XFxuIDczNjpcXHRcXHR0bXAuc3R4X2F0b21pY193cml0ZV91bml0X21pbiA9IHN0YXQtXFx1MDAzZWF0b21pY193cml0ZV91bml0X21pbjtcXG4gNzM3OlxcdFxcdHRtcC5zdHhfYXRvbWljX3dyaXRlX3VuaXRfbWF4ID0gc3RhdC1cXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWF4O1xcbiA3Mzg6XFx0XFx0dG1wLnN0eF9hdG9taWNfd3JpdGVfc2VnbWVudHNfbWF4ID0gc3RhdC1cXHUwMDNlYXRvbWljX3dyaXRlX3NlZ21lbnRzX21heDtcXG4gNzM5OlxcdFxcdHRtcC5zdHhfYXRvbWljX3dyaXRlX3VuaXRfbWF4X29wdCA9IHN0YXQtXFx1MDAzZWF0b21pY193cml0ZV91bml0X21heF9vcHQ7XFxuIDc0MDpcXHRcXG4gNzQxOlxcdFxcdHJldHVybiBjb3B5X3RvX3VzZXIoYnVmZmVyLCBcXHUwMDI2dG1wLCBzaXplb2YodG1wKSkgPyAtRUZBVUxUIDogMDtcXG4gNzQyOlxcdH1cXG4gNzQzOlxcdFxcbiA3NDQ6XFx0aW50IGRvX3N0YXR4KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsIHVuc2lnbmVkIGludCBmbGFncyxcXG4gNzQ1OlxcdFxcdCAgICAgdW5zaWduZWQgaW50IG1hc2ssIHN0cnVjdCBzdGF0eCBfX3VzZXIgKmJ1ZmZlcilcXG4gNzQ2OlxcdHtcXG4gNzQ3OlxcdFxcdHN0cnVjdCBrc3RhdCBzdGF0O1xcbiA3NDg6XFx0XFx0aW50IGVycm9yO1xcbiA3NDk6XFx0XFxuIDc1MDpcXHRcXHRpZiAobWFzayBcXHUwMDI2IFNUQVRYX19SRVNFUlZFRClcXG4gNzUxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NTI6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEFUX1NUQVRYX1NZTkNfVFlQRSkgPT0gQVRfU1RBVFhfU1lOQ19UWVBFKVxcbiA3NTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc1NDpcXHRcXG4gNzU1OlxcdFxcdC8qXFxuIDc1NjpcXHRcXHQgKiBTVEFUWF9DSEFOR0VfQ09PS0lFIGlzIGtlcm5lbC1vbmx5IGZvciBub3cuIElnbm9yZSByZXF1ZXN0c1xcbiA3NTc6XFx0XFx0ICogZnJvbSB1c2VybGFuZC5cXG4gNzU4OlxcdFxcdCAqL1xcbiA3NTk6XFx0XFx0bWFzayBcXHUwMDI2PSB+U1RBVFhfQ0hBTkdFX0NPT0tJRTtcXG4gNzYwOlxcdFxcbiA3NjE6XFx0XFx0ZXJyb3IgPSB2ZnNfc3RhdHgoZGZkLCBmaWxlbmFtZSwgZmxhZ3MsIFxcdTAwMjZzdGF0LCBtYXNrKTtcXG4gNzYyOlxcdFxcdGlmIChlcnJvcilcXG4gNzYzOlxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4gNzY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0Mjo1OS44NDA5MDgxOTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2MTIxODMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN0YXQgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgc3RhdGAgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlIGJlY2F1c2UgaW5jb3JyZWN0IGluaXRpYWxpemF0aW9uIGNhbiBsZWFkIHRvIHNlcmlvdXMgcHJvYmxlbXMsIGVzcGVjaWFsbHkgaW4ga2VybmVsIGNvZGUuIEZpcnN0LCBJIHNlZSB0aGF0IHRoZSB0ZW1wb3JhcnkgdmFyaWFibGUgYHRtcGAgaXMgYmVpbmcgZXhwbGljaXRseSB6ZXJvZWQgb3V0IHVzaW5nIGBtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgLiBHb29kLCB0aGF0J3MgYSBzb2xpZCBzdGFydC4gQ2xlYXIgaW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbCB0byBhdm9pZCB1bmRlZmluZWQgYmVoYXZpb3IuXG5cbk5vdywgSSBhbHNvIGtub3cgdGhhdCBgdmZzX3N0YXR4YCAob3IgcG90ZW50aWFsbHkgaXRzIGVxdWl2YWxlbnQsIGB2ZnNfZ2V0YXR0cmApIGlzIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoaXMgc3RydWN0dXJlLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhhdCBmdW5jdGlvbiB0byBjb25maXJtIGV4YWN0bHkgaG93IGl0IGhhbmRsZXMgdGhlIGBzdGF0YCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQgYWxzbyB6ZXJvLWluaXRpYWxpemVzLCByZWluaXRpYWxpemVzLCBvciBtb2RpZmllcyBhbiBhbHJlYWR5IGV4aXN0aW5nIHN0cnVjdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGBmcy9zdGF0LmNgIHNvdXJjZSBjb2RlIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYHZmc19zdGF0eGAgaW1wbGVtZW50YXRpb24uIEknbGwgZm9jdXMgb24gaG93IGl0IHRyZWF0cyB0aGUgYHN0YXRgIHN0cnVjdHVyZSB3aXRoaW4gaXRzIGxvZ2ljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDM6MDIuNzAyMTMwMzg0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQ5NTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1zZXQuKnN0YXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc3RhdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N0YXQuYz0xODE9aW50IHZmc19nZXRhdHRyX25vc2VjKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsXFxuLS1cXG5mcy9zdGF0LmMtMTg2LVxcbmZzL3N0YXQuYzoxODc6XFx0bWVtc2V0KHN0YXQsIDAsIHNpemVvZigqc3RhdCkpO1xcbmZzL3N0YXQuYy0xODgtXFx0c3RhdC1cXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfQkFTSUNfU1RBVFM7XFxuLS1cXG5mcy9zdGF0LmM9MzgzPXN0YXRpYyBpbnQgY3Bfb2xkX3N0YXQoc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQgX191c2VyICogc3RhdGJ1ZilcXG4tLVxcbmZzL3N0YXQuYy0zOTYtXFxuZnMvc3RhdC5jOjM5NzpcXHRtZW1zZXQoXFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHN0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCkpO1xcbmZzL3N0YXQuYy0zOTgtXFx0dG1wLnN0X2RldiA9IG9sZF9lbmNvZGVfZGV2KHN0YXQtXFx1MDAzZWRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQzOjAyLjc4MTYzMTY5OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NzUwNTE1MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgZXh0NGAgYGdldGF0dHJgIEF0b21pYyBXcml0ZSBVbml0IEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFkanVzdHMgaG93IGF0b21pYyB3cml0ZSB1bml0IGluZm9ybWF0aW9uIGlzIGhhbmRsZWQgd2l0aGluIGBleHQ0YCdzIGBnZXRhdHRyYCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGNoYW5naW5nIHRoZSB2YWx1ZSBwYXNzZWQgYXMgYHVuaXRfbWF4X29wdGAgdG8gdGhlIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcygpYCBmdW5jdGlvbi4gQ3VycmVudGx5LCB0aGUgY29kZSBzZXRzIGBhd3VfbWF4YCB0byBgc2JpLVx1MDAzZXNfYXd1X21heGAgaWYgYXRvbWljIHdyaXRlcyBhcmUgc3VwcG9ydGVkIG9uIGFuIGlub2RlLCBvdGhlcndpc2UsIGBhd3VfbWF4YCBpcyB6ZXJvLiBUaGUgcGF0Y2ggcmVwbGFjZXMgYSBoYXJkY29kZWQgYDBgIHdpdGggdGhlIGluaXRpYWxpemVkIGBhd3VfbWF4YCB2YXJpYWJsZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBgMGAgb3IgYHNiaS1cdTAwM2VzX2F3dV9tYXhgLlxuXG5NeSBtYWluIGNvbmNlcm4gaGVyZSwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5LiBBcmUgd2UgcG90ZW50aWFsbHkgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2U/IFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbi4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBpc24ndCBhbiBpc3N1ZS4gYGF3dV9tYXhgIGlzICpkZWZpbml0ZWx5KiBpbml0aWFsaXplZC4gSXQncyBhIGxvY2FsIGB1bnNpZ25lZCBpbnRgIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYDBgIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gYW5kIHRoZW4gcG90ZW50aWFsbHkgdXBkYXRlZCB3aXRoIGEgdmFsaWQgdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBpbm9kZSdzIGNhcGFiaWxpdGllcy4gVGhlcmUncyBubyB1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGhlcmUuXG5cbkZ1cnRoZXJtb3JlLCB0aGUgcGF0aCB0byB1c2Vyc3BhY2UgaXMgY29tcGxldGVseSBzYWZlLiBUaGUgcmVsZXZhbnQgYHN0cnVjdCBrc3RhdGAgaXMgemVyb2VkIGJ5IHRoZSBgdmZzX2dldGF0dHJfbm9zZWNgIGZ1bmN0aW9uLCBndWFyYW50ZWVpbmcgaW5pdGlhbGl6YXRpb24uIEFuZCB0aGUgYHN0cnVjdCBzdGF0eGAgcGFzc2VkIHRvIHVzZXJzcGFjZSBpcyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgICpiZWZvcmUqIHRoZSBzY2FsYXIgdmFsdWUgaXMgY29waWVkLiBTbywgZXZlbiBpZiB0aGVyZSB3ZXJlIGFueSB3ZWlyZG5lc3MgaW50ZXJuYWxseSwgdGhlIHVzZXItZmFjaW5nIGRhdGEgc3RydWN0dXJlIGlzIGNsZWFuLiBObyBpbmZvcm1hdGlvbiBsZWFrIGlzIHBvc3NpYmxlLlxuXG5HaXZlbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29udmluY2VkIHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MgdGhhdCBLTVNBTiwgb3IgYW55IG90aGVyIG1lbW9yeSBzYW5pdGl6ZXIsIHdvdWxkIGRldGVjdC4gV2UgYXJlIG5vdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3ZSBhcmUgbm90IGxlYWtpbmcgaW5mb3JtYXRpb24sIGFuZCB0aGVyZSBhcmUgbm8gYnJhbmNoaW5nIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgcGF0Y2ggaXMgc2ltcGx5IHBhc3NpbmcgYW4gaW5pdGlhbGl6ZWQgdmFsdWUgdG8gdGhlIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2AgZnVuY3Rpb24uIFRoZSB1c2Ugb2YgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBJIHRoaW5rIHdlIGNhbiBzYWZlbHkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwMiwiT3V0cHV0VG9rZW5zIjoyNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDM6MTEuNTMyMTUwMTUzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9nZXRhdHRyKClgIGluIGBmcy9leHQ0L2lub2RlLmNgIHRvIHBhc3MgYGF3dV9tYXhgIGluc3RlYWQgb2YgYDBgIGFzIHRoZSBgdW5pdF9tYXhfb3B0YCBwYXJhbWV0ZXIgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKClgLlxcblxcbjEuIFRoZSB2YXJpYWJsZSBgYXd1X21heGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIChgdW5zaWduZWQgaW50IGF3dV9taW4gPSAwLCBhd3VfbWF4ID0gMDtgKSBhbmQgb3B0aW9uYWxseSB1cGRhdGVkIGZyb20gYHNiaS1cXHUwMDNlc19hd3VfbWF4YC5cXG4yLiBUaGUgZGVzdGluYXRpb24gYHN0cnVjdCBrc3RhdGAgaXMgemVyby1pbml0aWFsaXplZCBpbiBgdmZzX2dldGF0dHJfbm9zZWMoKWAuXFxuMy4gV2hlbiByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHZpYSBgc3RhdHhgLCBgY3Bfc3RhdHgoKWAgaW5pdGlhbGl6ZXMgdGhlIGVudGlyZSBgc3RydWN0IHN0YXR4YCBzdHJ1Y3R1cmUgdXNpbmcgYG1lbXNldChcXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBwb3B1bGF0aW5nIGZpZWxkcyBhbmQgY2FsbGluZyBgY29weV90b191c2VyKClgLlxcbjQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwgbWVtb3J5IGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkLlxcblxcblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBleHQ0X2dldGF0dHIoKWAgaW4gYGZzL2V4dDQvaW5vZGUuY2AgdG8gcGFzcyBgYXd1X21heGAgaW5zdGVhZCBvZiBgMGAgYXMgdGhlIGB1bml0X21heF9vcHRgIHBhcmFtZXRlciB0byBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoKWAuXFxuXFxuMS4gVGhlIHZhcmlhYmxlIGBhd3VfbWF4YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgKGB1bnNpZ25lZCBpbnQgYXd1X21pbiA9IDAsIGF3dV9tYXggPSAwO2ApIGFuZCBvcHRpb25hbGx5IHVwZGF0ZWQgZnJvbSBgc2JpLVxcdTAwM2VzX2F3dV9tYXhgLlxcbjIuIFRoZSBkZXN0aW5hdGlvbiBgc3RydWN0IGtzdGF0YCBpcyB6ZXJvLWluaXRpYWxpemVkIGluIGB2ZnNfZ2V0YXR0cl9ub3NlYygpYC5cXG4zLiBXaGVuIHJlcG9ydGluZyB0byB1c2Vyc3BhY2UgdmlhIGBzdGF0eGAsIGBjcF9zdGF0eCgpYCBpbml0aWFsaXplcyB0aGUgZW50aXJlIGBzdHJ1Y3Qgc3RhdHhgIHN0cnVjdHVyZSB1c2luZyBgbWVtc2V0KFxcdTAwMjZ0bXAsIDAsIHNpemVvZih0bXApKWAgYmVmb3JlIHBvcHVsYXRpbmcgZmllbGRzIGFuZCBjYWxsaW5nIGBjb3B5X3RvX3VzZXIoKWAuXFxuNC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow6c9wb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 10:24:46 +0000 UTC FinishedAt: 2026-09-10 10:43:12 +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": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "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": "c68a982815dcce5464e3bf2a31ac94f5146c04ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "41c94697-e745-4567-8541-ab667eefb381" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_getattr", "generic_fill_statx_atomic_writes" ], "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+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2dldGF0dHImIzM0OywKICAgICYjMzQ7Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9nZXRhdHRyKClgIGluIGBmcy9leHQ0L2lub2RlLmNgIHRvIHBhc3MgYGF3dV9tYXhgIGluc3RlYWQgb2YgYDBgIGFzIHRoZSBgdW5pdF9tYXhfb3B0YCBwYXJhbWV0ZXIgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKClgLlxuXG4xLiBUaGUgdmFyaWFibGUgYGF3dV9tYXhgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAoYHVuc2lnbmVkIGludCBhd3VfbWluID0gMCwgYXd1X21heCA9IDA7YCkgYW5kIG9wdGlvbmFsbHkgdXBkYXRlZCBmcm9tIGBzYmktXHUwMDNlc19hd3VfbWF4YC5cbjIuIFRoZSBkZXN0aW5hdGlvbiBgc3RydWN0IGtzdGF0YCBpcyB6ZXJvLWluaXRpYWxpemVkIGluIGB2ZnNfZ2V0YXR0cl9ub3NlYygpYC5cbjMuIFdoZW4gcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB2aWEgYHN0YXR4YCwgYGNwX3N0YXR4KClgIGluaXRpYWxpemVzIHRoZSBlbnRpcmUgYHN0cnVjdCBzdGF0eGAgc3RydWN0dXJlIHVzaW5nIGBtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBwb3B1bGF0aW5nIGZpZWxkcyBhbmQgY2FsbGluZyBgY29weV90b191c2VyKClgLlxuNC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgYXRvbWljIHdyaXRlIHBhcmFtZXRlcnMgKHVuaXRfbWF4X29wdCkgYXJlIHJlcG9ydGVkIGluIGV4dDRfZ2V0YXR0cigpIHdoZW4gc3RhdHggcXVlcmllcyBTVEFUWF9XUklURV9BVE9NSUMuIFRoaXMgaXMgcmVhY2hhYmxlIHVzZXIgc3BhY2UgY29kZSBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHZpYSBzdGF0eCBzeXN0ZW0gY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZDE1YTQyZjZmZjVhNDgxMWNiNDBkNDMxZDJiNGM2NDQyZmQ0OGI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTA6NDI6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCAyNmYwZjk3MTRmMDNjLi45MzA1NmM5NzFlNzRiIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmNcbkBAIC02MzA0LDcgJiM0Mzs2MzA0LDggQEAgaW50IGV4dDRfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4gXHRcdFx0YXd1X21heCA9IHNiaS1cdTAwM2VzX2F3dV9tYXg7XG4gXHRcdH1cbiBcbi1cdFx0Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCwgYXd1X21pbiwgYXd1X21heCwgMCk7XG4mIzQzO1x0XHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxuJiM0MztcdFx0XHRcdFx0XHQgYXd1X21heCk7XG4gXHR9XG4gXG4gXHRmbGFncyA9IGVpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRkxfVVNFUl9WSVNJQkxFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2dldGF0dHImIzM0OywKICAgICYjMzQ7Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IGF0b21pYyB3cml0ZSBwYXJhbWV0ZXJzICh1bml0X21heF9vcHQpIGFyZSByZXBvcnRlZCBpbiBleHQ0X2dldGF0dHIoKSB3aGVuIHN0YXR4IHF1ZXJpZXMgU1RBVFhfV1JJVEVfQVRPTUlDLiBUaGlzIGlzIHJlYWNoYWJsZSB1c2VyIHNwYWNlIGNvZGUgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSB2aWEgc3RhdHggc3lzdGVtIGNhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGQxNWE0MmY2ZmY1YTQ4MTFjYjQwZDQzMWQyYjRjNjQ0MmZkNDhiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDEwOjQyOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IDI2ZjBmOTcxNGYwM2MuLjkzMDU2Yzk3MWU3NGIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTYzMDQsNyAmIzQzOzYzMDQsOCBAQCBpbnQgZXh0NF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwKIAkJCWF3dV9tYXggPSBzYmktJmd0O3NfYXd1X21heDsKIAkJfQogCi0JCWdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsIDApOwomIzQzOwkJZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCwgYXd1X21pbiwgYXd1X21heCwKJiM0MzsJCQkJCQkgYXd1X21heCk7CiAJfQogCiAJZmxhZ3MgPSBlaS0mZ3Q7aV9mbGFncyAmYW1wOyBFWFQ0X0ZMX1VTRVJfVklTSUJMRTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGV4dDQgaW5vZGUuYyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmLiBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGludGVudCBoZXJlLiBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIHBhdGNoIGRpZmYuIEl0IGFwcGVhcnMgd2UmIzM5O3JlIGluIGBmcy9leHQ0L2lub2RlLmNgLCBhbmQgdGhlIHJlbGV2YW50IGNoYW5nZSBpcyBpbiB0aGUgYGV4dDRfZ2V0YXR0cmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2MzA0LiBJdCBsb29rcyBsaWtlIGEgY2hhbmdlIHRvIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2AuIFRoZSBvbGQgdmVyc2lvbiBwYXNzZWQgYDBgIGFzIHRoZSBmaW5hbCBhcmd1bWVudCwgd2hpbGUgdGhlIG5ldyB2ZXJzaW9uIHBhc3NlcyBgYXd1X21heGAuIFRoaXMgbGlrZWx5IGFmZmVjdHMgaG93IGF0b21pYyB3cml0ZSBpbmZvcm1hdGlvbiBpcyByZXBvcnRlZCBpbiBgc3RhdHhgLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBjaGFuZ2UuCgpOb3csIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB3aXRoaW4gYGZzL2V4dDQvaW5vZGUuY2AgYXQgdGhhdCBzcGVjaWZpYyBsaW5lLiBJIG5lZWQgdGhlIGZ1bGwgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgYXd1X21pbmAgYW5kIGBhd3VfbWF4YCByZXByZXNlbnQsIGhvdyB0aGV5JiMzOTtyZSBjYWxjdWxhdGVkIG9yIGRlcml2ZWQsIGFuZCB3aHkgdGhlIGNoYW5nZSBpbiB0aGUgY2FsbCYjMzk7cyBhcmd1bWVudCBpcyBiZWluZyBpbnRyb2R1Y2VkLiBJIG5lZWQgdG8ga25vdyBob3cgdGhlc2UgdmFsdWVzIGluZmx1ZW5jZSB0aGUgYXRvbWljIHdyaXRlIGluZm9ybWF0aW9uIHRoYXQgZ2V0cyByZXBvcnRlZCB2aWEgdGhlIGBzdGF0eGAgc3lzdGVtIGNhbGwuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXRjaC4gSXMgaXQgYSBidWcgZml4LCBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LCBvciBhZGRpbmcgbmV3IGZlYXR1cmVzPyBJIGV4cGVjdCB0byBoYXZlIGEgZ29vZCBoYW5kbGUgb24gdGhhdCBvbmNlIEkgaGF2ZSB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoaXMgY29kZSByZWdpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYyODA6XHRcbjYyODE6XHRcdC8qIFJldHVybiB0aGUgRElPIGFsaWdubWVudCByZXN0cmljdGlvbnMgaWYgcmVxdWVzdGVkLiAqL1xuNjI4MjpcdFx0aWYgKChyZXF1ZXN0X21hc2sgXHUwMDI2IFNUQVRYX0RJT0FMSUdOKSBcdTAwMjZcdTAwMjYgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG42MjgzOlx0XHRcdHUzMiBkaW9fYWxpZ24gPSBleHQ0X2Rpb19hbGlnbm1lbnQoaW5vZGUpO1xuNjI4NDpcdFxuNjI4NTpcdFx0XHRzdGF0LVx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0RJT0FMSUdOO1xuNjI4NjpcdFx0XHRpZiAoZGlvX2FsaWduID09IDEpIHtcbjYyODc6XHRcdFx0XHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXY7XG42Mjg4Olx0XG42Mjg5Olx0XHRcdFx0LyogaW9tYXAgZGVmYXVsdHMgKi9cbjYyOTA6XHRcdFx0XHRzdGF0LVx1MDAzZWRpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldikgJiM0MzsgMTtcbjYyOTE6XHRcdFx0XHRzdGF0LVx1MDAzZWRpb19vZmZzZXRfYWxpZ24gPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTtcbjYyOTI6XHRcdFx0fSBlbHNlIHtcbjYyOTM6XHRcdFx0XHRzdGF0LVx1MDAzZWRpb19tZW1fYWxpZ24gPSBkaW9fYWxpZ247XG42Mjk0Olx0XHRcdFx0c3RhdC1cdTAwM2VkaW9fb2Zmc2V0X2FsaWduID0gZGlvX2FsaWduO1xuNjI5NTpcdFx0XHR9XG42Mjk2Olx0XHR9XG42Mjk3Olx0XG42Mjk4Olx0XHRpZiAoKHJlcXVlc3RfbWFzayBcdTAwMjYgU1RBVFhfV1JJVEVfQVRPTUlDKSBcdTAwMjZcdTAwMjYgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG42Mjk5Olx0XHRcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG42MzAwOlx0XHRcdHVuc2lnbmVkIGludCBhd3VfbWluID0gMCwgYXd1X21heCA9IDA7XG42MzAxOlx0XG42MzAyOlx0XHRcdGlmIChleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGUoaW5vZGUpKSB7XG42MzAzOlx0XHRcdFx0YXd1X21pbiA9IHNiaS1cdTAwM2VzX2F3dV9taW47XG42MzA0Olx0XHRcdFx0YXd1X21heCA9IHNiaS1cdTAwM2VzX2F3dV9tYXg7XG42MzA1Olx0XHRcdH1cbjYzMDY6XHRcbjYzMDc6XHRcdFx0Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCwgYXd1X21pbiwgYXd1X21heCxcbjYzMDg6XHRcdFx0XHRcdFx0XHQgYXd1X21heCk7XG42MzA5Olx0XHR9XG42MzEwOlx0XG42MzExOlx0XHRmbGFncyA9IGVpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRkxfVVNFUl9WSVNJQkxFO1xuNjMxMjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0FQUEVORF9GTClcbjYzMTM6XHRcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfQVBQRU5EO1xuNjMxNDpcdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0NPTVBSX0ZMKVxuNjMxNTpcdFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9DT01QUkVTU0VEO1xuNjMxNjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0VOQ1JZUFRfRkwpXG42MzE3Olx0XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0VOQ1JZUFRFRDtcbjYzMTg6XHRcdGlmIChmbGFncyBcdTAwMjYgRVhUNF9JTU1VVEFCTEVfRkwpXG42MzE5Olx0XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0lNTVVUQUJMRTtcbjYzMjA6XHRcdGlmIChmbGFncyBcdTAwMjYgRVhUNF9OT0RVTVBfRkwpXG42MzIxOlx0XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX05PRFVNUDtcbjYzMjI6XHRcdGlmIChmbGFncyBcdTAwMjYgRVhUNF9WRVJJVFlfRkwpXG42MzIzOlx0XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX1ZFUklUWTtcbjYzMjQ6XHRcbjYzMjU6XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FQUEVORCB8XG42MzI2Olx0XHRcdFx0XHQgIFNUQVRYX0FUVFJfQ09NUFJFU1NFRCB8XG42MzI3Olx0XHRcdFx0XHQgIFNUQVRYX0FUVFJfRU5DUllQVEVEIHxcbjYzMjg6XHRcdFx0XHRcdCAgU1RBVFhfQVRUUl9JTU1VVEFCTEUgfFxuNjMyOTpcdFx0XHRcdFx0ICBTVEFUWF9BVFRSX05PRFVNUCB8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuIEdpdmVuIHRoZSBuYW1pbmcsIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBwb3B1bGF0aW5nIGBzdGF0eGAgc3RydWN0dXJlcywgYW5kIHRoZSAmIzM0O2F0b21pYyB3cml0ZXMmIzM0OyBzdWdnZXN0cyB0aGlzIGlzIGRvbmUgaW4gYSB0aHJlYWQtc2FmZSBtYW5uZXIsIG9yIGF0IGxlYXN0IHdpdGggY29uc2lkZXJhdGlvbnMgZm9yIGNvbmN1cnJlbmN5LiBUaGlzIGlzIHByZXR0eSBjb21tb247IEkgaW1hZ2luZSB0aGlzIGZ1bmN0aW9uIGJlaW5nIGEgY29yZSBjb21wb25lbnQsIGVzcGVjaWFsbHkgaW4gYSBmaWxlIHN5c3RlbSBjb250ZXh0IHdoZXJlIG1ldGFkYXRhIGNvbnNpc3RlbmN5IGlzIHBhcmFtb3VudC4gSSYjMzk7bGwgbmVlZCB0byBwaW5wb2ludCBpdHMgcGxhY2UgaW4gdGhlIHJlYWQgcGF0aC4KClNvLCB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgZG8gaXMgcHJvYmFibHkgbWVudGFsbHkgbWFwIGl0cyBjYWxscyB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIG1heWJlIHRoaW5rIGFib3V0IHdobyBpbnZva2VzIHRoaXMsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHJlYWRzIG9yIHdyaXRlcz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzPyBNeSBleHBlY3RhdGlvbiBpcyBhIHNldCBvZiBwb2ludGVycyB0byBgc3RhdHhgIHN0cnVjdHVyZXMgb3Igc29tZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB0aGVyZW9mLCB3aGljaCBsaWtlbHkgaW52b2x2ZXMgaGFuZGxpbmcgbG9ja2luZyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdXBkYXRlcy4gSXQgaXMgbGlrZWx5IHRoYXQgdGhpcyBmdW5jdGlvbiBoYXMgdG8gZGVhbCB3aXRoIHRoZSBzdWJ0bGV0aWVzIG9mIHBhcnRpYWwgYXRvbWljIHVwZGF0ZXMgdG8gdGhlIGRhdGEgc3RydWN0dXJlLgoKVGhlIGxldmVsIG9mIGF0b21pY2l0eSBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGZvciBob3cgaXQgd2lsbCBiZSB1c2VkLiBXaWxsIGVhY2ggbWVtYmVyIG9mIHRoZSBzdGF0eCBzdHJ1Y3R1cmUgYmUgd3JpdHRlbiBhdG9taWNhbGx5LCBvciBhcmUgbGFyZ2VyIGFnZ3JlZ2F0ZXMgdXBkYXRlZCBpbiBhIGNvb3JkaW5hdGVkIG1hbm5lcj8gQW5kIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgcG90ZW50aWFsIG9mIGVycm9ycyBncmFjZWZ1bGx5LCBwZXJoYXBzIHJldHJ5aW5nIG9yIHByb3ZpZGluZyBlcnJvciBjb2RlcyB0aGF0IHByb3BhZ2F0ZSBiYWNrIHVwIHRvIHRoZSBjYWxsZXIuIFVuZGVyc3RhbmRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGlzIGltcG9ydGFudCB0byBmaWd1cmUgb3V0IGhvdyBzYWZlIHRoZSBmdW5jdGlvbiBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iZGV2LmM9MTM5ND12b2lkIGJkZXZfc3RhdHgoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzaylcbi0tXG5ibG9jay9iZGV2LmMtMTQxNi1cbmJsb2NrL2JkZXYuYzoxNDE3Olx0XHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LFxuYmxvY2svYmRldi5jLTE0MTgtXHRcdFx0cXVldWVfYXRvbWljX3dyaXRlX3VuaXRfbWluX2J5dGVzKGJkX3F1ZXVlKSxcbi0tXG5mcy9leHQ0L2lub2RlLmM9NjI2Nj1pbnQgZXh0NF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjMwNi1cbmZzL2V4dDQvaW5vZGUuYzo2MzA3Olx0XHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxuZnMvZXh0NC9pbm9kZS5jLTYzMDgtXHRcdFx0XHRcdFx0IGF3dV9tYXgpO1xuLS1cbmZzL3N0YXQuYz0xMzI9RVhQT1JUX1NZTUJPTChnZW5lcmljX2ZpbGxfc3RhdHhfYXR0cik7XG4tLVxuZnMvc3RhdC5jLTEzNC0vKipcbmZzL3N0YXQuYzoxMzU6ICogZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMgLSBGaWxsIGluIGF0b21pYyB3cml0ZXMgc3RhdHggYXR0cmlidXRlc1xuZnMvc3RhdC5jLTEzNi0gKiBAc3RhdDpcdFdoZXJlIHRvIGZpbGwgaW4gdGhlIGF0dHJpYnV0ZSBmbGFnc1xuLS1cbmZzL3N0YXQuYy0xNDMtICovXG5mcy9zdGF0LmM6MTQ0OnZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RydWN0IGtzdGF0ICpzdGF0LFxuZnMvc3RhdC5jLTE0NS1cdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21pbixcbi0tXG5mcy9zdGF0LmMtMTY1LX1cbmZzL3N0YXQuYzoxNjY6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMpO1xuZnMvc3RhdC5jLTE2Ny1cbi0tXG5mcy94ZnMveGZzX2lvcHMuYz02NzA9eGZzX3JlcG9ydF9hdG9taWNfd3JpdGUoXG4tLVxuZnMveGZzL3hmc19pb3BzLmMtNjczLXtcbmZzL3hmcy94ZnNfaW9wcy5jOjY3NDpcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsXG5mcy94ZnMveGZzX2lvcHMuYy02NzUtXHRcdFx0eGZzX2dldF9hdG9taWNfd3JpdGVfbWluKGlwKSxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzIwOD12b2lkIGdlbmVyaWNfZmlsbF9zdGF0eF9hdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBrc3RhdCAqc3RhdCk7XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzIwOTp2b2lkIGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0cnVjdCBrc3RhdCAqc3RhdCxcbmluY2x1ZGUvbGludXgvZnMuaC0zMjEwLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWluLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBmcy9zdGF0LmNgIFNvdXJjZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBzcGVjaWZpYy4gVGhlIHByb2JsZW0gbGlrZWx5IHJlc2lkZXMgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBoYW5kbGluZyBvZiBgc3RhdGAgY2FsbHMsIHBhcnRpY3VsYXJseSBpbiBgZnMvc3RhdC5jYC4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0aGVyZSYjMzk7cyBzb21ldGhpbmcgYW1pc3MgYmV0d2VlbiBsaW5lcyAxMzQgYW5kIDE2NS4gVGhpcyBzZWN0aW9uIHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIGNvcmUgbG9naWMgb2YgcG9wdWxhdGluZyB0aGUgYHN0YXRgIHN0cnVjdHVyZSwgcGVyaGFwcyByZWxhdGVkIHRvIGhvdyBpdCBkZWFscyB3aXRoIGRldmljZSBJRHMsIGlub2RlIG51bWJlcnMsIGZpbGUgc2l6ZXMsIG9yIHBlcm1pc3Npb25zLCBhbmQgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHByZWNpc2UgY2FsY3VsYXRpb25zIHRoZXJlLiBMZXQmIzM5O3Mgc2VlIGlmIHRob3NlIGxpbmVzIGhvbGQgdGhlIGtleS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGxvZ2ljIHRoYXQgY291bGQgYmUgdGhlIHNvdXJjZSBvZiB3aGF0ZXZlciBiZWhhdmlvciBJJiMzOTttIHNlZWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3N0YXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTM0Olx0LyoqXG4gMTM1Olx0ICogZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMgLSBGaWxsIGluIGF0b21pYyB3cml0ZXMgc3RhdHggYXR0cmlidXRlc1xuIDEzNjpcdCAqIEBzdGF0Olx0V2hlcmUgdG8gZmlsbCBpbiB0aGUgYXR0cmlidXRlIGZsYWdzXG4gMTM3Olx0ICogQHVuaXRfbWluOlx0TWluaW11bSBzdXBwb3J0ZWQgYXRvbWljIHdyaXRlIGxlbmd0aCBpbiBieXRlc1xuIDEzODpcdCAqIEB1bml0X21heDpcdE1heGltdW0gc3VwcG9ydGVkIGF0b21pYyB3cml0ZSBsZW5ndGggaW4gYnl0ZXNcbiAxMzk6XHQgKiBAdW5pdF9tYXhfb3B0OiBPcHRpbWlzZWQgbWF4aW11bSBzdXBwb3J0ZWQgYXRvbWljIHdyaXRlIGxlbmd0aCBpbiBieXRlc1xuIDE0MDpcdCAqXG4gMTQxOlx0ICogRmlsbCBpbiB0aGUgU1RBVFh7X0FUVFJ9X1dSSVRFX0FUT01JQyBmbGFncyBpbiB0aGUga3N0YXQgc3RydWN0dXJlIGZyb21cbiAxNDI6XHQgKiBhdG9taWMgd3JpdGUgdW5pdF9taW4gYW5kIHVuaXRfbWF4IHZhbHVlcy5cbiAxNDM6XHQgKi9cbiAxNDQ6XHR2b2lkIGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0cnVjdCBrc3RhdCAqc3RhdCxcbiAxNDU6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21pbixcbiAxNDY6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21heCxcbiAxNDc6XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21heF9vcHQpXG4gMTQ4Olx0e1xuIDE0OTpcdFx0LyogQ29uZmlybSB0aGF0IHRoZSByZXF1ZXN0IHR5cGUgaXMga25vd24gKi9cbiAxNTA6XHRcdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfV1JJVEVfQVRPTUlDO1xuIDE1MTpcdFxuIDE1MjpcdFx0LyogQ29uZmlybSB0aGF0IHRoZSBmaWxlIGF0dHJpYnV0ZSB0eXBlIGlzIGtub3duICovXG4gMTUzOlx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXNfbWFzayB8PSBTVEFUWF9BVFRSX1dSSVRFX0FUT01JQztcbiAxNTQ6XHRcbiAxNTU6XHRcdGlmICh1bml0X21pbikge1xuIDE1NjpcdFx0XHRzdGF0LVx1MDAzZWF0b21pY193cml0ZV91bml0X21pbiA9IHVuaXRfbWluO1xuIDE1NzpcdFx0XHRzdGF0LVx1MDAzZWF0b21pY193cml0ZV91bml0X21heCA9IHVuaXRfbWF4O1xuIDE1ODpcdFx0XHRzdGF0LVx1MDAzZWF0b21pY193cml0ZV91bml0X21heF9vcHQgPSB1bml0X21heF9vcHQ7XG4gMTU5Olx0XHRcdC8qIEluaXRpYWxseSBvbmx5IGFsbG93IDF4IHNlZ21lbnQgKi9cbiAxNjA6XHRcdFx0c3RhdC1cdTAwM2VhdG9taWNfd3JpdGVfc2VnbWVudHNfbWF4ID0gMTtcbiAxNjE6XHRcbiAxNjI6XHRcdFx0LyogQ29uZmlybSBhdG9taWMgd3JpdGVzIGFyZSBhY3R1YWxseSBzdXBwb3J0ZWQgKi9cbiAxNjM6XHRcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfV1JJVEVfQVRPTUlDO1xuIDE2NDpcdFx0fVxuIDE2NTpcdH1cbiAxNjY6XHRFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyk7XG4gMTY3Olx0XG4gMTY4Olx0LyoqXG4gMTY5Olx0ICogdmZzX2dldGF0dHJfbm9zZWMgLSBnZXRhdHRyIHdpdGhvdXQgc2VjdXJpdHkgY2hlY2tzXG4gMTcwOlx0ICogQHBhdGg6IGZpbGUgdG8gZ2V0IGF0dHJpYnV0ZXMgZnJvbVxuIDE3MTpcdCAqIEBzdGF0OiBzdHJ1Y3R1cmUgdG8gcmV0dXJuIGF0dHJpYnV0ZXMgaW5cbiAxNzI6XHQgKiBAcmVxdWVzdF9tYXNrOiBTVEFUWF94eHggZmxhZ3MgaW5kaWNhdGluZyB3aGF0IHRoZSBjYWxsZXIgd2FudHNcbiAxNzM6XHQgKiBAcXVlcnlfZmxhZ3M6IFF1ZXJ5IG1vZGUgKEFUX1NUQVRYX1NZTkNfVFlQRSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzY4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGV4dDRfZ2V0YXR0cmAgRnVuY3Rpb24gZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZXh0NF9nZXRhdHRyYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBnZXRzIHRyaWdnZXJlZCB3aGVuIGBzdGF0eGAgaXMgY2FsbGVkIG9uIGFuIGV4dDQgZmlsZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGV2ZW4gcmVsZXZhbnQgaW4gYSB0eXBpY2FsIGZ1enppbmcgc2V0dXA/IEFyZSBgZXh0NGAgYW5kIGBleHQ0X2dldGF0dHJgIGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgc3l6a2FsbGVyPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gRXh0NCBpcyBwcmFjdGljYWxseSB0aGUgZGVmYXVsdCBmaWxlc3lzdGVtIGZvciBMaW51eCwgYW5kIHN5emthbGxlciBhYnNvbHV0ZWx5ICpwb3VuZHMqIGV4dDQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBpbmNsdWRpbmcgdGhlIGBzdGF0eGAgc3lzdGVtIGNhbGwuIEdvb2QsIHRoYXQgdGFrZXMgY2FyZSBvZiByZWFjaGFiaWxpdHkuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjcml0ZXJpYS4gRmlyc3QsIHRoZSBwb3NpdGl2ZSBzaWRlLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY29yZSBzdWJzeXN0ZW06IHRoZSBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGBmcy9leHQ0L2lub2RlLmNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gV2UmIzM5O3ZlIGVzdGFibGlzaGVkIGl0JiMzOTtzIHJlYWNoYWJsZSDigJMgYGV4dDRfZ2V0YXR0cmAgaXMgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgc3RhdHgoKWAgc3lzY2FsbCBvbiBleHQ0IGZpbGVzLiBBbmQgZmluYWxseSwgaXMgaXQgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhpcywgdGhlIGFuc3dlciBpcyAmIzM0O3RydWUuJiMzNDsgVGhhdCYjMzk7cyB0aGUgZ3JlZW4gbGlnaHQuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgZXh0NC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBmcy9leHQ0L0tjb25maWdgIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcgZW5hYmxlZCBmb3IgdGhpcyB0byBiZSBwcm9kdWN0aXZlLiBOZWVkIHRvIG1ha2Ugc3VyZSBubyB3ZWlyZCBkZXBlbmRlbmNpZXMgYXJlIGJsb2NraW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA5MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBFWFQ0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIGBFWFQ0X0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcywgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlIGZvciBleHQ0IHdpdGhpbiB0aGUgZmlsZXN5c3RlbSBkaXJlY3RvcnkuIEkgd2FudCB0byBxdWlja2x5IGNvbmZpcm0gd2hhdCB0aGUgYnVpbGQgc3lzdGVtIHNlZXMsIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNoYW5nZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGJlZm9yZSBtb3Zpbmcgb24uIEtub3dpbmcgdGhlIEtjb25maWcgZGV0YWlscyBpcyBlc3NlbnRpYWwgZ3JvdW5kd29yay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaW4gYGZzL2V4dDQvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEVYVDRfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDU6XHRcdHNlbGVjdCBKQkQyXG4gICA2Olx0XHRzZWxlY3QgQ1JDMTZcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA5Olx0XHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXG4gIDEyOlx0XG4gIDEzOlx0XHQgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSxcbiAgMTQ6XHRcdCAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aFxuICAxNTpcdFx0ICBleHQzOyBpdCBpcyBiYXNlZCBvbiBleHRlbnQgbWFwcyBhbmQgaXQgc3VwcG9ydHMgNDgtYml0XG4gIDE2Olx0XHQgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZFxuICAxNzpcdFx0ICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyxcbiAgMTg6XHRcdCAgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGZlYXR1cmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIHNwZWVkXG4gIDE5Olx0XHQgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXRcbiAgMjA6XHRcdCAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLlxuICAyMTpcdFxuICAyMjpcdFx0ICBUaGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnRzIG1vdW50aW5nIGFuIGV4dDMgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmVcbiAgMjM6XHRcdCAgYXJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGFuZCBpbm9kZVxuICAyNDpcdFx0ICB0YWJsZSByZWFkYWhlYWQsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGdhaW5zIHJlcXVpcmUgZW5hYmxpbmcgZXh0NFxuICAyNTpcdFx0ICBmZWF0dXJlcyBpbiB0aGUgZmlsZXN5c3RlbSB1c2luZyB0dW5lMmZzLCBvciBmb3JtYXR0aW5nIGEgbmV3XG4gIDI2Olx0XHQgIGZpbGVzeXN0ZW0gYXMgYW4gZXh0NCBmaWxlc3lzdGVtIGluaXRpYWxseS4gV2l0aG91dCBleHBsaWNpdCBlbmFibGluZ1xuICAyNzpcdFx0ICBvZiBleHQ0IGZlYXR1cmVzLCB0aGUgb24gZGlzayBmaWxlc3lzdGVtIGZvcm1hdCBzdGF5cyBmdWxseSBiYWNrd2FyZFxuICAyODpcdFx0ICBjb21wYXRpYmxlLlxuICAyOTpcdFxuICAzMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXG4gIDMxOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxuICAzMjpcdFxuICAzMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gRVhUNF9GU1xuICAzODpcdFx0ZGVwZW5kcyBvbiBFWFQyX0ZTPW5cbiAgMzk6XHRcdGRlZmF1bHQgeVxuICA0MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODY4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCYjMzk7cyBpbiBgRm9jdXNTeW1ib2xzYC4gQWgsIHRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgZXh0NF9nZXRhdHRyYC4gSXMgdGhhdCB0aGUgcmlnaHQgcGxhY2UgdG8gZm9jdXM/IEkgbmVlZCB0byBtYWtlIGEgZGVjaXNpb24gaGVyZS4gU2hvdWxkIEkgYmUgbG9va2luZyBhdCBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgIGFzIHdlbGwsIG9yIGlzIGBleHQ0X2dldGF0dHJgIHN1ZmZpY2llbnQ/CgpSaWdodCwgYGV4dDRfZ2V0YXR0cmAgaXMgdGhlICpleHQ0LXNwZWNpZmljKiBnZXRhdHRyIGlub2RlIG9wZXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgbW9kaWZpZWQgY29kZSBkaXJlY3RseSBpbiBpdCwgc28gaXQgZmVlbHMgbGlrZSBhIGdvb2QgZml0IGZvciBgRm9jdXNTeW1ib2xzYC4gT24gdGhlIG90aGVyIGhhbmQsIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2AgKmlzKiBjYWxsZWQgYnkgYGV4dDRfZ2V0YXR0cmAsIGJ1dCBhbHNvIGJ5IGZ1bmN0aW9ucyBzdWNoIGFzIGBiZGV2X3N0YXR4YCBhbmQgYHhmc19yZXBvcnRfYXRvbWljX3dyaXRlYCwgaW1wbHlpbmcgYnJvYWRlciB1c2UgYmV5b25kIGp1c3QgdGhlIGNvbnRleHQgSSYjMzk7bSBpbnRlcmVzdGVkIGluLgoKU28sIGxldCYjMzk7cyBnbyB3aXRoOiBgRm9jdXNTeW1ib2xzYDogYGV4dDRfZ2V0YXR0cmAsIGFuZCBrZWVwIGFuIG9wZW4gbWluZCBmb3IgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCBsYXRlciBpZiBuZWVkZWQuIEkgbmVlZCB0byBlc3RhYmxpc2ggd2hldGhlciBgZXh0NF9nZXRhdHRyYCBpcyB0b28gc3BlY2lmaWMuIEl0JiMzOTtzIHRoZSBleHQ0LXNwZWNpZmljIGhhbmRsZXIgZm9yIHN0YXR4IGFuZCBzdGF0IG9wZXJhdGlvbnMsIGRpcmVjdGx5IHJlbGF0ZWQgdG8gZXh0NCBmaWxlc3lzdGVtIGNhbGxzLiBGdXp6aW5nIGF0dGVtcHRzIHRvIHRhcmdldCBzdGF0eCBhbmQgcmVsYXRlZCBjYWxscyBvbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHdpbGwgbW9zdCBsaWtlbHkgbGVhZCB0byBgZXh0NF9nZXRhdHRyYC4gVGhhdCBzb3VuZHMgZm9jdXNlZCwgbm90IHViaXF1aXRvdXMsIHVubGlrZSBzYXksIGdlbmVyaWMgdmZzIGZ1bmN0aW9ucyBvciBtZW1vcnkgYWxsb2NhdG9ycy4KCkp1c3QgZm9yIGNvbnRleHQsIEkgc2hvdWxkIHBlZWsgYXQgYGV4dDRfaW5vZGVfY2FuX2F0b21pY193cml0ZWAgaW4gZnMvZXh0NC9pbm9kZS5jIHRvIGdldCB0aGUgc3Vycm91bmRpbmcgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9NDA0Nz1zdGF0aWMgaW5saW5lIGludCBleHQ0X2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL2V4dDQvZXh0NC5oLTQwNTktXG5mcy9leHQ0L2V4dDQuaDo0MDYwOnN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0NC5oLTQwNjEte1xuLS1cbmZzL2V4dDQvZmlsZS5jPTk2Mj1zdGF0aWMgaW50IGV4dDRfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2V4dDQvZmlsZS5jLTk5NC1cbmZzL2V4dDQvZmlsZS5jOjk5NTpcdGlmIChleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGUoaW5vZGUpKVxuZnMvZXh0NC9maWxlLmMtOTk2LVx0XHRmaWxwLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DQU5fQVRPTUlDX1dSSVRFO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz02MjY2PWludCBleHQ0X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy02MzAxLVxuZnMvZXh0NC9pbm9kZS5jOjYzMDI6XHRcdGlmIChleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGUoaW5vZGUpKSB7XG5mcy9leHQ0L2lub2RlLmMtNjMwMy1cdFx0XHRhd3VfbWluID0gc2JpLVx1MDAzZXNfYXd1X21pbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg4NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIGV4dDQgQXRvbWljIFdyaXRlcyoqCgpPa2F5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYmV0dGVyIGFib3V0IGhvdyBhdG9taWMgd3JpdGVzIGFyZSBoYW5kbGVkIGluIGV4dDQuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIGBleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGVgLiBJIHJlbWVtYmVyIHRoYXQmIzM5O3MgZGVjbGFyZWQgaW4gYGZzL2V4dDQvZXh0NC5oYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBnbyBmaXJzdC4gSSB3YW50IHRvIHNlZSBleGFjdGx5IHdoYXQgY29uZGl0aW9ucyBhcmUgYmVpbmcgY2hlY2tlZCBhbmQgdGhlIG92ZXJhbGwgbG9naWMgdGhpcyBmdW5jdGlvbiB1c2VzIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIGF0b21pYyB3cml0ZSBpcyBwb3NzaWJsZSBmb3IgYSBnaXZlbiBpbm9kZS4gSSYjMzk7bSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIHVuZGVybHlpbmcgcmVzdHJpY3Rpb25zIGF0IHBsYXkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgaGVhZGVyIGZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwNTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDA1ODpcdH1cbjQwNTk6XHRcbjQwNjA6XHRzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG40MDYxOlx0e1xuNDA2MjpcdFxuNDA2MzpcdFx0cmV0dXJuIFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjZcbjQwNjQ6XHRcdFx0ZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykgXHUwMDI2XHUwMDI2XG40MDY1Olx0XHRcdEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19hd3VfbWluIFx1MDAzZSAwO1xuNDA2NjpcdH1cbjQwNjc6XHRcbjQwNjg6XHRleHRlcm4gaW50IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbjQwNjk6XHRcdFx0XHRcdCAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxuNDA3MDpcdFx0XHRcdFx0ICBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrKTtcbjQwNzE6XHRcbjQwNzI6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcbjQwNzM6XHQjZGVmaW5lIEVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChzeW0pIFxcXG40MDc0Olx0XHRFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHN5bSwgXCYjMzQ7ZXh0NC10ZXN0XCYjMzQ7KVxuNDA3NTpcdCNlbmRpZlxuNDA3NjpcdCNlbmRpZlx0LyogX19LRVJORUxfXyAqL1xuNDA3NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDM2CgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDIyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRXh0NCBBdG9taWMgV3JpdGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBhdG9taWMgd3JpdGVzIGluIGV4dDQuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGVgIGlzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiBkZWZpbmVkIGluIGBmcy9leHQ0L2V4dDQuaGAuIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQsIGJ1dCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBmcy9leHQ0L2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBleHQ0X2dldGF0dHJgIGZ1bmN0aW9uLgoKTXkgYEZvY3VzU3ltYm9sc2AsIGFzIEkgdW5kZXJzdGFuZCB0aGVtLCBhcmUgZGVmaW5pdGVseSBgZXh0NF9nZXRhdHRyYCBhbmQgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYC4gVGhlIHBhdGNoIGFmZmVjdHMgaG93IHRoZSBtYXggYXRvbWljIHdyaXRlIHVuaXQgcGFyYW1ldGVyIGlzIHBhc3NlZCB0byBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoKWAgd2l0aGluIGBleHQ0X2dldGF0dHIoKWAuIFRoaXMgd2hvbGUgdGhpbmcgYmVjb21lcyByZWxldmFudCB3aGVuIHVzZXJzcGFjZSBjYWxscyBgc3RhdHgoKWAgb24gYW4gZXh0NCBmaWxlc3lzdGVtIGFuZCBzcGVjaWZpY2FsbHkgcmVxdWVzdHMgYFNUQVRYX1dSSVRFX0FUT01JQ2AuCgpJdCBsb29rcyBsaWtlIHRoaXMgaXMgKmRlZmluaXRlbHkqIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLCB0aGF0JiMzOTtzIHdoYXQgYFdvcnRoRnV6emluZzogdHJ1ZWAgaXMgc2F5aW5nLiBUaGUgcmF0aW9uYWxlIHNlZW1zIHNvbGlkIOKAkyB0aGUgc3lzdGVtIGNhbGwgYW5kIHBhcmFtZXRlciBjaGFuZ2UgbWFrZSB0aGlzIGEgbGlrZWx5IHRhcmdldCBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgY2xlYXJseSBkZXBlbmRlbnQgb24gYEVYVDRfRlNgLiBJJiMzOTt2ZSBjb25maXJtZWQgYWxsIG9mIHRoYXQsIGFuZCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSB1bmRlcnN0YW5kaW5nLCBzbyBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgbG9nIHRoZXNlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9nZXRhdHRyJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBhdG9taWMgd3JpdGUgcGFyYW1ldGVycyAodW5pdF9tYXhfb3B0KSBhcmUgcmVwb3J0ZWQgaW4gZXh0NF9nZXRhdHRyKCkgd2hlbiBzdGF0eCBxdWVyaWVzIFNUQVRYX1dSSVRFX0FUT01JQy4gVGhpcyBpcyByZWFjaGFibGUgdXNlciBzcGFjZSBjb2RlIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gdmlhIHN0YXR4IHN5c3RlbSBjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZ2V0YXR0ciYjMzQ7LAogICAgJiMzNDtnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgYXRvbWljIHdyaXRlIHBhcmFtZXRlcnMgKHVuaXRfbWF4X29wdCkgYXJlIHJlcG9ydGVkIGluIGV4dDRfZ2V0YXR0cigpIHdoZW4gc3RhdHggcXVlcmllcyBTVEFUWF9XUklURV9BVE9NSUMuIFRoaXMgaXMgcmVhY2hhYmxlIHVzZXIgc3BhY2UgY29kZSBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHZpYSBzdGF0eCBzeXN0ZW0gY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9nZXRhdHRyKClgIGluIGBmcy9leHQ0L2lub2RlLmNgIHRvIHBhc3MgYGF3dV9tYXhgIGluc3RlYWQgb2YgYDBgIGFzIHRoZSBgdW5pdF9tYXhfb3B0YCBwYXJhbWV0ZXIgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKClgLlxuXG4xLiBUaGUgdmFyaWFibGUgYGF3dV9tYXhgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAoYHVuc2lnbmVkIGludCBhd3VfbWluID0gMCwgYXd1X21heCA9IDA7YCkgYW5kIG9wdGlvbmFsbHkgdXBkYXRlZCBmcm9tIGBzYmktXHUwMDNlc19hd3VfbWF4YC5cbjIuIFRoZSBkZXN0aW5hdGlvbiBgc3RydWN0IGtzdGF0YCBpcyB6ZXJvLWluaXRpYWxpemVkIGluIGB2ZnNfZ2V0YXR0cl9ub3NlYygpYC5cbjMuIFdoZW4gcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB2aWEgYHN0YXR4YCwgYGNwX3N0YXR4KClgIGluaXRpYWxpemVzIHRoZSBlbnRpcmUgYHN0cnVjdCBzdGF0eGAgc3RydWN0dXJlIHVzaW5nIGBtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBwb3B1bGF0aW5nIGZpZWxkcyBhbmQgY2FsbGluZyBgY29weV90b191c2VyKClgLlxuNC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGQxNWE0MmY2ZmY1YTQ4MTFjYjQwZDQzMWQyYjRjNjQ0MmZkNDhiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDEwOjQyOjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IDI2ZjBmOTcxNGYwM2MuLjkzMDU2Yzk3MWU3NGIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTYzMDQsNyAmIzQzOzYzMDQsOCBAQCBpbnQgZXh0NF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwKIAkJCWF3dV9tYXggPSBzYmktJmd0O3NfYXd1X21heDsKIAkJfQogCi0JCWdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsIDApOwomIzQzOwkJZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCwgYXd1X21pbiwgYXd1X21heCwKJiM0MzsJCQkJCQkgYXd1X21heCk7CiAJfQogCiAJZmxhZ3MgPSBlaS0mZ3Q7aV9mbGFncyAmYW1wOyBFWFQ0X0ZMX1VTRVJfVklTSUJMRTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZXh0NF9nZXRhdHRyYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBtb2RpZnlpbmcgdGhlIGBleHQ0X2dldGF0dHJgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZnMvZXh0NC9pbm9kZS5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHdlJiMzOTtyZSBjYWxsaW5nIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2AuCgpUaGUgZGlmZiBzaG93cyBhIG1pbm9yIGFkanVzdG1lbnQsIGNoYW5naW5nIHRoZSB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYC4gUHJldmlvdXNseSBpdCB3YXMgMCwgYW5kIG5vdyBpdCYjMzk7cyBgYXd1X21heGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvZiBzZXR0aW5nIHRoZSBhdG9taWMgd3JpdGUgdW5pdCBtYXggYXMgdGhlIG51bWJlcj8KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgIGl0c2VsZiwgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgd2l0aGluIGBleHQ0X2dldGF0dHJgLiBTcGVjaWZpY2FsbHksIHdoYXQgYXJlIGBhd3VfbWluYCBhbmQgYGF3dV9tYXhgPyBJJiMzOTtsbCBwcm9iYWJseSBmaXJlIHVwIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHNvdXJjZSBjb2RlIGZvciBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgIGFuZCBtYXliZSBwb2tlIGFyb3VuZCBgaW5vZGUuY2AgZm9yIHNvbWUgbW9yZSBjb250ZXh0LiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBhdG9taWMgd3JpdGUgdW5pdCBjb25jZXB0IGFuZCBob3cgdGhlIHN0YXQgaW5mb3JtYXRpb24gaXMgYmVpbmcgcG9wdWxhdGVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2JkZXYuYz0xMzk0PXZvaWQgYmRldl9zdGF0eChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrKVxuLS1cbmJsb2NrL2JkZXYuYy0xNDE2LVxuYmxvY2svYmRldi5jOjE0MTc6XHRcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsXG5ibG9jay9iZGV2LmMtMTQxOC1cdFx0XHRxdWV1ZV9hdG9taWNfd3JpdGVfdW5pdF9taW5fYnl0ZXMoYmRfcXVldWUpLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz02MjY2PWludCBleHQ0X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy02MzA2LVxuZnMvZXh0NC9pbm9kZS5jOjYzMDc6XHRcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsXG5mcy9leHQ0L2lub2RlLmMtNjMwOC1cdFx0XHRcdFx0XHQgYXd1X21heCk7XG4tLVxuZnMvc3RhdC5jPTEzMj1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsbF9zdGF0eF9hdHRyKTtcbi0tXG5mcy9zdGF0LmMtMTM0LS8qKlxuZnMvc3RhdC5jOjEzNTogKiBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyAtIEZpbGwgaW4gYXRvbWljIHdyaXRlcyBzdGF0eCBhdHRyaWJ1dGVzXG5mcy9zdGF0LmMtMTM2LSAqIEBzdGF0Olx0V2hlcmUgdG8gZmlsbCBpbiB0aGUgYXR0cmlidXRlIGZsYWdzXG4tLVxuZnMvc3RhdC5jLTE0My0gKi9cbmZzL3N0YXQuYzoxNDQ6dm9pZCBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdHJ1Y3Qga3N0YXQgKnN0YXQsXG5mcy9zdGF0LmMtMTQ1LVx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWluLFxuLS1cbmZzL3N0YXQuYy0xNjUtfVxuZnMvc3RhdC5jOjE2NjpFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyk7XG5mcy9zdGF0LmMtMTY3LVxuLS1cbmZzL3hmcy94ZnNfaW9wcy5jPTY3MD14ZnNfcmVwb3J0X2F0b21pY193cml0ZShcbi0tXG5mcy94ZnMveGZzX2lvcHMuYy02NzMte1xuZnMveGZzL3hmc19pb3BzLmM6Njc0Olx0Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCxcbmZzL3hmcy94ZnNfaW9wcy5jLTY3NS1cdFx0XHR4ZnNfZ2V0X2F0b21pY193cml0ZV9taW4oaXApLFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0zMjA4PXZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0dHIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGtzdGF0ICpzdGF0KTtcbmluY2x1ZGUvbGludXgvZnMuaDozMjA5OnZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RydWN0IGtzdGF0ICpzdGF0LFxuaW5jbHVkZS9saW51eC9mcy5oLTMyMTAtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgdW5pdF9taW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgRmlsZSBNZXRhZGF0YSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZyBvZiBmaWxlIG1ldGFkYXRhLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYHN0YXRgIHN5c3RlbSBjYWxsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGV4dDQgZmlsZXN5c3RlbS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgYGZzL3N0YXQuY2AsIGZvY3VzaW5nIGFyb3VuZCBsaW5lIDEzNC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGRpc3BhdGNoZXMgdGhlIGBzdGF0YCByZXF1ZXN0IGFuZCBoYW5kbGVzIHRoZSBiYXNpYyBzZXR1cC4gVGhlbiwgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyB0aGUgZXh0NCBpbXBsZW1lbnRhdGlvbiBpbnRlcmFjdHMsIEkgbmVlZCB0byBqdW1wIG92ZXIgdG8gYGZzL2V4dDQvaW5vZGUuY2AsIGxpa2VseSBhcm91bmQgbGluZSA2MzAwLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGludm9sdmUgZmluZGluZyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCBleHQ0IHVzZXMgdG8gcG9wdWxhdGUgdGhlIGBzdGF0YCBkYXRhIHN0cnVjdHVyZSBmcm9tIHRoZSBpbm9kZSBkYXRhLiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgZGV0YWlscyB0aGVyZSwgc3VjaCBhcyBob3cgdGhlIGlub2RlJiMzOTtzIG9uLWRpc2sgcmVwcmVzZW50YXRpb24gdHJhbnNsYXRlcyB0byB0aGUgaW4tbWVtb3J5IGBzdGF0YCBzdHJ1Y3R1cmUsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSBzaXplLCBwZXJtaXNzaW9ucywgYW5kIHRpbWVzdGFtcHMuIEhvcGVmdWxseSwgdGhpcyBhcHByb2FjaCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvcmUgZGF0YSBpcyBzb3VyY2VkIGFuZCBwcmVwYXJlZCBmb3IgdGhlIHVzZXIgc3BhY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3RhdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzQ6XHQvKipcbiAxMzU6XHQgKiBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyAtIEZpbGwgaW4gYXRvbWljIHdyaXRlcyBzdGF0eCBhdHRyaWJ1dGVzXG4gMTM2Olx0ICogQHN0YXQ6XHRXaGVyZSB0byBmaWxsIGluIHRoZSBhdHRyaWJ1dGUgZmxhZ3NcbiAxMzc6XHQgKiBAdW5pdF9taW46XHRNaW5pbXVtIHN1cHBvcnRlZCBhdG9taWMgd3JpdGUgbGVuZ3RoIGluIGJ5dGVzXG4gMTM4Olx0ICogQHVuaXRfbWF4Olx0TWF4aW11bSBzdXBwb3J0ZWQgYXRvbWljIHdyaXRlIGxlbmd0aCBpbiBieXRlc1xuIDEzOTpcdCAqIEB1bml0X21heF9vcHQ6IE9wdGltaXNlZCBtYXhpbXVtIHN1cHBvcnRlZCBhdG9taWMgd3JpdGUgbGVuZ3RoIGluIGJ5dGVzXG4gMTQwOlx0ICpcbiAxNDE6XHQgKiBGaWxsIGluIHRoZSBTVEFUWHtfQVRUUn1fV1JJVEVfQVRPTUlDIGZsYWdzIGluIHRoZSBrc3RhdCBzdHJ1Y3R1cmUgZnJvbVxuIDE0MjpcdCAqIGF0b21pYyB3cml0ZSB1bml0X21pbiBhbmQgdW5pdF9tYXggdmFsdWVzLlxuIDE0MzpcdCAqL1xuIDE0NDpcdHZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RydWN0IGtzdGF0ICpzdGF0LFxuIDE0NTpcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWluLFxuIDE0NjpcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWF4LFxuIDE0NzpcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWF4X29wdClcbiAxNDg6XHR7XG4gMTQ5Olx0XHQvKiBDb25maXJtIHRoYXQgdGhlIHJlcXVlc3QgdHlwZSBpcyBrbm93biAqL1xuIDE1MDpcdFx0c3RhdC1cdTAwM2VyZXN1bHRfbWFzayB8PSBTVEFUWF9XUklURV9BVE9NSUM7XG4gMTUxOlx0XG4gMTUyOlx0XHQvKiBDb25maXJtIHRoYXQgdGhlIGZpbGUgYXR0cmlidXRlIHR5cGUgaXMga25vd24gKi9cbiAxNTM6XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IFNUQVRYX0FUVFJfV1JJVEVfQVRPTUlDO1xuIDE1NDpcdFxuIDE1NTpcdFx0aWYgKHVuaXRfbWluKSB7XG4gMTU2Olx0XHRcdHN0YXQtXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWluID0gdW5pdF9taW47XG4gMTU3Olx0XHRcdHN0YXQtXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWF4ID0gdW5pdF9tYXg7XG4gMTU4Olx0XHRcdHN0YXQtXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWF4X29wdCA9IHVuaXRfbWF4X29wdDtcbiAxNTk6XHRcdFx0LyogSW5pdGlhbGx5IG9ubHkgYWxsb3cgMXggc2VnbWVudCAqL1xuIDE2MDpcdFx0XHRzdGF0LVx1MDAzZWF0b21pY193cml0ZV9zZWdtZW50c19tYXggPSAxO1xuIDE2MTpcdFxuIDE2MjpcdFx0XHQvKiBDb25maXJtIGF0b21pYyB3cml0ZXMgYXJlIGFjdHVhbGx5IHN1cHBvcnRlZCAqL1xuIDE2MzpcdFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9XUklURV9BVE9NSUM7XG4gMTY0Olx0XHR9XG4gMTY1Olx0fVxuIDE2NjpcdEVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKTtcbiAxNjc6XHRcbiAxNjg6XHQvKipcbiAxNjk6XHQgKiB2ZnNfZ2V0YXR0cl9ub3NlYyAtIGdldGF0dHIgd2l0aG91dCBzZWN1cml0eSBjaGVja3NcbiAxNzA6XHQgKiBAcGF0aDogZmlsZSB0byBnZXQgYXR0cmlidXRlcyBmcm9tXG4gMTcxOlx0ICogQHN0YXQ6IHN0cnVjdHVyZSB0byByZXR1cm4gYXR0cmlidXRlcyBpblxuIDE3MjpcdCAqIEByZXF1ZXN0X21hc2s6IFNUQVRYX3h4eCBmbGFncyBpbmRpY2F0aW5nIHdoYXQgdGhlIGNhbGxlciB3YW50c1xuIDE3MzpcdCAqIEBxdWVyeV9mbGFnczogUXVlcnkgbW9kZSAoQVRfU1RBVFhfU1lOQ19UWVBFKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzY5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGZyb20gYGZzL2V4dDQvaW5vZGUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgNjI5MC02MzIwOgoKKipBbmFseXppbmcgZXh0NCBpbm9kZS5jICg2MjkwLTYzMjApOiBBIEZvY3VzZWQgTG9vayoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtPa2F5LCBleHQ0IGlub2RlLmMuLi4gbGV0JiMzOTtzIHBpbnBvaW50IHRoYXQgc2VjdGlvbi4mIzM0OyBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB0byBob25lIGluIG9uIGxpbmVzIDYyOTAgdG8gNjMyMC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcHJvYmFibHkgYmUgbG9va2luZyBhdCBzb21lIGlub2RlIG9wZXJhdGlvbiwgcG90ZW50aWFsbHkgYSBtZXRhZGF0YSB1cGRhdGUgb3IgcGVyaGFwcyBzb21lIGFzcGVjdHMgb2YgaW5vZGUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24sIG9yIG1heWJlIGV2ZW4gcmVsYXRlZCB0byBqb3VybmFsIG9wZXJhdGlvbnMsIGdpdmVuIHRoZSBjb250ZXh0IG9mIGlub2RlIGhhbmRsaW5nLiBUaGUgbGluZSBudW1iZXJzIGFyZSBpbXBvcnRhbnQsIGJlY2F1c2UgdGhpcyBpbmRpY2F0ZXMgYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjb2RlYmFzZS4gSSBhbSBleHBlY3RpbmcgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBsaWtlbHkgd2l0aCBlcnJvciBoYW5kbGluZywgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzLCBzb21lIGtleSBmdW5jdGlvbiBjYWxsLCBzb21lIGNvbXBhcmlzb24gb3IgY29uZGl0aW9uYWwgbG9naWMsIG9yIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYmxvY2sgZGV2aWNlIGxheWVyLiBQZXJoYXBzIHRoZSBjb2RlIGRlYWxzIHdpdGggdGhlIGxvZ2ljIGludm9sdmVkIGluIHNldHRpbmcgdXAgb3IgdGVhcmluZyBkb3duIGFuIGV4dGVudC1tYXBwZWQgZmlsZSBibG9jay4KCkJhc2VkIG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIGxpa2VseSBmdW5jdGlvbiBjYWxscywgdGhpcyBjb2RlIHNuaXBwZXQgbGlrZWx5IGZvY3VzZXMgb24gdGhlIGxvdy1sZXZlbCwgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYW4gZXh0NCBmaWxlc3lzdGVtIG9wZXJhdGlvbi4gSXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gYmUgcGFydCBvZiB0aGUgY29yZSBmaWxlc3lzdGVtIHN0cnVjdHVyZSBhbmQgaXMgdGh1cyBoaWdobHkgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCwgaWYgZGVidWdnaW5nIG9yIG1vZGlmeWluZyBleHQ0LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHZhcmlhYmxlcyBhbmQgdGhlaXIgZGF0YSB0eXBlcywgYW5kIGFueSBjb250cm9sIGZsb3csIGVzcGVjaWFsbHkgcG90ZW50aWFsIGVycm9yIHBhdGhzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjI4MDpcdFxuNjI4MTpcdFx0LyogUmV0dXJuIHRoZSBESU8gYWxpZ25tZW50IHJlc3RyaWN0aW9ucyBpZiByZXF1ZXN0ZWQuICovXG42MjgyOlx0XHRpZiAoKHJlcXVlc3RfbWFzayBcdTAwMjYgU1RBVFhfRElPQUxJR04pIFx1MDAyNlx1MDAyNiBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbjYyODM6XHRcdFx0dTMyIGRpb19hbGlnbiA9IGV4dDRfZGlvX2FsaWdubWVudChpbm9kZSk7XG42Mjg0Olx0XG42Mjg1Olx0XHRcdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfRElPQUxJR047XG42Mjg2Olx0XHRcdGlmIChkaW9fYWxpZ24gPT0gMSkge1xuNjI4NzpcdFx0XHRcdHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldjtcbjYyODg6XHRcbjYyODk6XHRcdFx0XHQvKiBpb21hcCBkZWZhdWx0cyAqL1xuNjI5MDpcdFx0XHRcdHN0YXQtXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSAmIzQzOyAxO1xuNjI5MTpcdFx0XHRcdHN0YXQtXHUwMDNlZGlvX29mZnNldF9hbGlnbiA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xuNjI5MjpcdFx0XHR9IGVsc2Uge1xuNjI5MzpcdFx0XHRcdHN0YXQtXHUwMDNlZGlvX21lbV9hbGlnbiA9IGRpb19hbGlnbjtcbjYyOTQ6XHRcdFx0XHRzdGF0LVx1MDAzZWRpb19vZmZzZXRfYWxpZ24gPSBkaW9fYWxpZ247XG42Mjk1Olx0XHRcdH1cbjYyOTY6XHRcdH1cbjYyOTc6XHRcbjYyOTg6XHRcdGlmICgocmVxdWVzdF9tYXNrIFx1MDAyNiBTVEFUWF9XUklURV9BVE9NSUMpIFx1MDAyNlx1MDAyNiBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbjYyOTk6XHRcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbjYzMDA6XHRcdFx0dW5zaWduZWQgaW50IGF3dV9taW4gPSAwLCBhd3VfbWF4ID0gMDtcbjYzMDE6XHRcbjYzMDI6XHRcdFx0aWYgKGV4dDRfaW5vZGVfY2FuX2F0b21pY193cml0ZShpbm9kZSkpIHtcbjYzMDM6XHRcdFx0XHRhd3VfbWluID0gc2JpLVx1MDAzZXNfYXd1X21pbjtcbjYzMDQ6XHRcdFx0XHRhd3VfbWF4ID0gc2JpLVx1MDAzZXNfYXd1X21heDtcbjYzMDU6XHRcdFx0fVxuNjMwNjpcdFxuNjMwNzpcdFx0XHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxuNjMwODpcdFx0XHRcdFx0XHRcdCBhd3VfbWF4KTtcbjYzMDk6XHRcdH1cbjYzMTA6XHRcbjYzMTE6XHRcdGZsYWdzID0gZWktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9GTF9VU0VSX1ZJU0lCTEU7XG42MzEyOlx0XHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfQVBQRU5EX0ZMKVxuNjMxMzpcdFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9BUFBFTkQ7XG42MzE0Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfQ09NUFJfRkwpXG42MzE1Olx0XHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0NPTVBSRVNTRUQ7XG42MzE2Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfRU5DUllQVF9GTClcbjYzMTc6XHRcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfRU5DUllQVEVEO1xuNjMxODpcdFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0lNTVVUQUJMRV9GTClcbjYzMTk6XHRcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfSU1NVVRBQkxFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDc1CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSBhIHBhdGNoIGNoYW5naW5nIGEgY2FsbCB0byBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgZm91cnRoIGFyZ3VtZW50IGZyb20gYDBgIHRvIGBhd3VfbWF4YC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGJlaGF2aW9yIHJlbGF0ZWQgdG8gYXRvbWljIHdyaXRlIHVuaXQgaGFuZGxpbmcuCgpEaXZpbmcgaW50byBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgLCBJIHNlZSB0aGF0IHRoaXMgZm91cnRoIGFyZ3VtZW50LCBgdW5pdF9tYXhfb3B0YCwgaXMgY29uZGl0aW9uYWxseSB1c2VkLiBJZiBgdW5pdF9taW5gIGlzbiYjMzk7dCB6ZXJvLCB0aGUgZnVuY3Rpb24gc2V0cyBgc3RhdC0mZ3Q7YXRvbWljX3dyaXRlX3VuaXRfbWF4X29wdGAgdG8gYHVuaXRfbWF4X29wdGAuIFJpZ2h0LCBzbyB0aGlzIHN1Z2dlc3RzIHRoYXQgYGF3dV9tYXhgIGlzIGJlaW5nIHNldCBoZXJlIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgd2hlcmUgYmVmb3JlLCBpdCB3YXMgZXhwbGljaXRseSB6ZXJvZWQuIFRoZSBgc3RhdGAgYXJndW1lbnQgaXMgdGhlIGBzdHJ1Y3Qga3N0YXQgKnN0YXRgIHBhc3NlZCB0byBgZXh0NF9nZXRhdHRyYC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlIGFib3V0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIGBzdGF0YCBzdHJ1Y3R1cmUuIFdoZXJlIGRvZXMgaXQgY29tZSBmcm9tLCBhbmQgY3JpdGljYWxseSwgaXMgaXQgemVyb2VkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZD8gSWYgbm90LCB3ZSBjb3VsZCBiZSBpbnRyb2R1Y2luZyB1bmRlZmluZWQgYmVoYXZpb3Igb3IgdW5leHBlY3RlZCB2YWx1ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoaXMgc3RydWN0dXJlLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgc3RhdGAuIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyBob3cgYHZmc19zdGF0eGAgYW5kIHVsdGltYXRlbHkgYGRvX3N0YXR4YCBpbml0aWFsaXplIGVpdGhlciBhIGBzdHJ1Y3Qga3N0YXQgc3RhdDtgIG9yIGBzdHJ1Y3Qgc3RhdHhgLiBLbm93aW5nIGhvdyB0aGF0IGlzIHBvcHVsYXRlZCBpcyBlc3NlbnRpYWwuIFRoZW4sIEkgd2lsbCBhbHNvIHNlYXJjaCBmb3Igb3RoZXIgY2FsbGVycyBvZiBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgIG9yIGBjcF9zdGF0eGAgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgZWxzZXdoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjcF9zdGF0eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zdGF0LmM9Njk5PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50XG5mcy9zdGF0LmM6NzAwOmNwX3N0YXR4KGNvbnN0IHN0cnVjdCBrc3RhdCAqc3RhdCwgc3RydWN0IHN0YXR4IF9fdXNlciAqYnVmZmVyKVxuZnMvc3RhdC5jLTcwMS17XG4tLVxuZnMvc3RhdC5jPTc0ND1pbnQgZG9fc3RhdHgoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpmaWxlbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmZzL3N0YXQuYy03NjQtXG5mcy9zdGF0LmM6NzY1Olx0cmV0dXJuIGNwX3N0YXR4KFx1MDAyNnN0YXQsIGJ1ZmZlcik7XG5mcy9zdGF0LmMtNzY2LX1cbi0tXG5mcy9zdGF0LmM9NzY4PWludCBkb19zdGF0eF9mZChpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IG1hc2ssXG4tLVxuZnMvc3RhdC5jLTc4OC1cbmZzL3N0YXQuYzo3ODk6XHRyZXR1cm4gY3Bfc3RhdHgoXHUwMDI2c3RhdCwgYnVmZmVyKTtcbmZzL3N0YXQuYy03OTAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIGBzdGF0eGAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGZzL3N0YXQuY2AgY29kZS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgc3RhdHhgIGlzIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBjcF9zdGF0eGAgYW5kIGBkb19zdGF0eGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBgY3Bfc3RhdHhgIHByb2JhYmx5IGhhbmRsZXMgc29tZSBvZiB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBvciBhcmd1bWVudCBjb3B5aW5nLCB3aGlsZSBgZG9fc3RhdHhgIHdpbGwgYmUgd2hlcmUgdGhlIGNvcmUgc3lzdGVtIGNhbGwgbG9naWMgcmVzaWRlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgdGhlIGV4dGVuZGVkIHN0YXQgaW5mb3JtYXRpb24g4oCTIGl0JiMzOTtzIGJlZW4gYSB3aGlsZSBzaW5jZSBJIGxhc3QgbG9va2VkIGF0IHRob3NlIGZpZWxkcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGxpbmVzIHVwIHdpdGggbXkgZXhwZWN0YXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3N0YXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjk1Olx0XHRyZXR1cm4gY3BfbmV3X3N0YXQ2NChcdTAwMjZzdGF0LCBzdGF0YnVmKTtcbiA2OTY6XHR9XG4gNjk3Olx0I2VuZGlmIC8qIF9fQVJDSF9XQU5UX1NUQVQ2NCB8fCBfX0FSQ0hfV0FOVF9DT01QQVRfU1RBVDY0ICovXG4gNjk4Olx0XG4gNjk5Olx0c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnRcbiA3MDA6XHRjcF9zdGF0eChjb25zdCBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHN0cnVjdCBzdGF0eCBfX3VzZXIgKmJ1ZmZlcilcbiA3MDE6XHR7XG4gNzAyOlx0XHRzdHJ1Y3Qgc3RhdHggdG1wO1xuIDcwMzpcdFxuIDcwNDpcdFx0bWVtc2V0KFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpO1xuIDcwNTpcdFxuIDcwNjpcdFx0LyogU1RBVFhfQ0hBTkdFX0NPT0tJRSBpcyBrZXJuZWwtb25seSBmb3Igbm93ICovXG4gNzA3Olx0XHR0bXAuc3R4X21hc2sgPSBzdGF0LVx1MDAzZXJlc3VsdF9tYXNrIFx1MDAyNiB+U1RBVFhfQ0hBTkdFX0NPT0tJRTtcbiA3MDg6XHRcdHRtcC5zdHhfYmxrc2l6ZSA9IHN0YXQtXHUwMDNlYmxrc2l6ZTtcbiA3MDk6XHRcdC8qIFNUQVRYX0FUVFJfQ0hBTkdFX01PTk9UT05JQyBpcyBrZXJuZWwtb25seSBmb3Igbm93ICovXG4gNzEwOlx0XHR0bXAuc3R4X2F0dHJpYnV0ZXMgPSBzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgXHUwMDI2IH5TVEFUWF9BVFRSX0NIQU5HRV9NT05PVE9OSUM7XG4gNzExOlx0XHR0bXAuc3R4X25saW5rID0gc3RhdC1cdTAwM2VubGluaztcbiA3MTI6XHRcdHRtcC5zdHhfdWlkID0gZnJvbV9rdWlkX211bmdlZChjdXJyZW50X3VzZXJfbnMoKSwgc3RhdC1cdTAwM2V1aWQpO1xuIDcxMzpcdFx0dG1wLnN0eF9naWQgPSBmcm9tX2tnaWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBzdGF0LVx1MDAzZWdpZCk7XG4gNzE0Olx0XHR0bXAuc3R4X21vZGUgPSBzdGF0LVx1MDAzZW1vZGU7XG4gNzE1Olx0XHR0bXAuc3R4X2lubyA9IHN0YXQtXHUwMDNlaW5vO1xuIDcxNjpcdFx0dG1wLnN0eF9zaXplID0gc3RhdC1cdTAwM2VzaXplO1xuIDcxNzpcdFx0dG1wLnN0eF9ibG9ja3MgPSBzdGF0LVx1MDAzZWJsb2NrcztcbiA3MTg6XHRcdHRtcC5zdHhfYXR0cmlidXRlc19tYXNrID0gc3RhdC1cdTAwM2VhdHRyaWJ1dGVzX21hc2s7XG4gNzE5Olx0XHR0bXAuc3R4X2F0aW1lLnR2X3NlYyA9IHN0YXQtXHUwMDNlYXRpbWUudHZfc2VjO1xuIDcyMDpcdFx0dG1wLnN0eF9hdGltZS50dl9uc2VjID0gc3RhdC1cdTAwM2VhdGltZS50dl9uc2VjO1xuIDcyMTpcdFx0dG1wLnN0eF9idGltZS50dl9zZWMgPSBzdGF0LVx1MDAzZWJ0aW1lLnR2X3NlYztcbiA3MjI6XHRcdHRtcC5zdHhfYnRpbWUudHZfbnNlYyA9IHN0YXQtXHUwMDNlYnRpbWUudHZfbnNlYztcbiA3MjM6XHRcdHRtcC5zdHhfY3RpbWUudHZfc2VjID0gc3RhdC1cdTAwM2VjdGltZS50dl9zZWM7XG4gNzI0Olx0XHR0bXAuc3R4X2N0aW1lLnR2X25zZWMgPSBzdGF0LVx1MDAzZWN0aW1lLnR2X25zZWM7XG4gNzI1Olx0XHR0bXAuc3R4X210aW1lLnR2X3NlYyA9IHN0YXQtXHUwMDNlbXRpbWUudHZfc2VjO1xuIDcyNjpcdFx0dG1wLnN0eF9tdGltZS50dl9uc2VjID0gc3RhdC1cdTAwM2VtdGltZS50dl9uc2VjO1xuIDcyNzpcdFx0dG1wLnN0eF9yZGV2X21ham9yID0gTUFKT1Ioc3RhdC1cdTAwM2VyZGV2KTtcbiA3Mjg6XHRcdHRtcC5zdHhfcmRldl9taW5vciA9IE1JTk9SKHN0YXQtXHUwMDNlcmRldik7XG4gNzI5Olx0XHR0bXAuc3R4X2Rldl9tYWpvciA9IE1BSk9SKHN0YXQtXHUwMDNlZGV2KTtcbiA3MzA6XHRcdHRtcC5zdHhfZGV2X21pbm9yID0gTUlOT1Ioc3RhdC1cdTAwM2VkZXYpO1xuIDczMTpcdFx0dG1wLnN0eF9tbnRfaWQgPSBzdGF0LVx1MDAzZW1udF9pZDtcbiA3MzI6XHRcdHRtcC5zdHhfZGlvX21lbV9hbGlnbiA9IHN0YXQtXHUwMDNlZGlvX21lbV9hbGlnbjtcbiA3MzM6XHRcdHRtcC5zdHhfZGlvX29mZnNldF9hbGlnbiA9IHN0YXQtXHUwMDNlZGlvX29mZnNldF9hbGlnbjtcbiA3MzQ6XHRcdHRtcC5zdHhfZGlvX3JlYWRfb2Zmc2V0X2FsaWduID0gc3RhdC1cdTAwM2VkaW9fcmVhZF9vZmZzZXRfYWxpZ247XG4gNzM1Olx0XHR0bXAuc3R4X3N1YnZvbCA9IHN0YXQtXHUwMDNlc3Vidm9sO1xuIDczNjpcdFx0dG1wLnN0eF9hdG9taWNfd3JpdGVfdW5pdF9taW4gPSBzdGF0LVx1MDAzZWF0b21pY193cml0ZV91bml0X21pbjtcbiA3Mzc6XHRcdHRtcC5zdHhfYXRvbWljX3dyaXRlX3VuaXRfbWF4ID0gc3RhdC1cdTAwM2VhdG9taWNfd3JpdGVfdW5pdF9tYXg7XG4gNzM4Olx0XHR0bXAuc3R4X2F0b21pY193cml0ZV9zZWdtZW50c19tYXggPSBzdGF0LVx1MDAzZWF0b21pY193cml0ZV9zZWdtZW50c19tYXg7XG4gNzM5Olx0XHR0bXAuc3R4X2F0b21pY193cml0ZV91bml0X21heF9vcHQgPSBzdGF0LVx1MDAzZWF0b21pY193cml0ZV91bml0X21heF9vcHQ7XG4gNzQwOlx0XG4gNzQxOlx0XHRyZXR1cm4gY29weV90b191c2VyKGJ1ZmZlciwgXHUwMDI2dG1wLCBzaXplb2YodG1wKSkgPyAtRUZBVUxUIDogMDtcbiA3NDI6XHR9XG4gNzQzOlx0XG4gNzQ0Olx0aW50IGRvX3N0YXR4KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsIHVuc2lnbmVkIGludCBmbGFncyxcbiA3NDU6XHRcdCAgICAgdW5zaWduZWQgaW50IG1hc2ssIHN0cnVjdCBzdGF0eCBfX3VzZXIgKmJ1ZmZlcilcbiA3NDY6XHR7XG4gNzQ3Olx0XHRzdHJ1Y3Qga3N0YXQgc3RhdDtcbiA3NDg6XHRcdGludCBlcnJvcjtcbiA3NDk6XHRcbiA3NTA6XHRcdGlmIChtYXNrIFx1MDAyNiBTVEFUWF9fUkVTRVJWRUQpXG4gNzUxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc1MjpcdFx0aWYgKChmbGFncyBcdTAwMjYgQVRfU1RBVFhfU1lOQ19UWVBFKSA9PSBBVF9TVEFUWF9TWU5DX1RZUEUpXG4gNzUzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc1NDpcdFxuIDc1NTpcdFx0LypcbiA3NTY6XHRcdCAqIFNUQVRYX0NIQU5HRV9DT09LSUUgaXMga2VybmVsLW9ubHkgZm9yIG5vdy4gSWdub3JlIHJlcXVlc3RzXG4gNzU3Olx0XHQgKiBmcm9tIHVzZXJsYW5kLlxuIDc1ODpcdFx0ICovXG4gNzU5Olx0XHRtYXNrIFx1MDAyNj0gflNUQVRYX0NIQU5HRV9DT09LSUU7XG4gNzYwOlx0XG4gNzYxOlx0XHRlcnJvciA9IHZmc19zdGF0eChkZmQsIGZpbGVuYW1lLCBmbGFncywgXHUwMDI2c3RhdCwgbWFzayk7XG4gNzYyOlx0XHRpZiAoZXJyb3IpXG4gNzYzOlx0XHRcdHJldHVybiBlcnJvcjtcbiA3NjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3RhdCBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgYHN0YXRgIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkLCBhbmQgSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZSBiZWNhdXNlIGluY29ycmVjdCBpbml0aWFsaXphdGlvbiBjYW4gbGVhZCB0byBzZXJpb3VzIHByb2JsZW1zLCBlc3BlY2lhbGx5IGluIGtlcm5lbCBjb2RlLiBGaXJzdCwgSSBzZWUgdGhhdCB0aGUgdGVtcG9yYXJ5IHZhcmlhYmxlIGB0bXBgIGlzIGJlaW5nIGV4cGxpY2l0bHkgemVyb2VkIG91dCB1c2luZyBgbWVtc2V0KCZhbXA7dG1wLCAwLCBzaXplb2YodG1wKSlgLiBHb29kLCB0aGF0JiMzOTtzIGEgc29saWQgc3RhcnQuIENsZWFyIGluaXRpYWxpemF0aW9uIGlzIGNydWNpYWwgdG8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW9yLgoKTm93LCBJIGFsc28ga25vdyB0aGF0IGB2ZnNfc3RhdHhgIChvciBwb3RlbnRpYWxseSBpdHMgZXF1aXZhbGVudCwgYHZmc19nZXRhdHRyYCkgaXMgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhpcyBzdHJ1Y3R1cmUuIFNvLCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGF0IGZ1bmN0aW9uIHRvIGNvbmZpcm0gZXhhY3RseSBob3cgaXQgaGFuZGxlcyB0aGUgYHN0YXRgIHZhcmlhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCBhbHNvIHplcm8taW5pdGlhbGl6ZXMsIHJlaW5pdGlhbGl6ZXMsIG9yIG1vZGlmaWVzIGFuIGFscmVhZHkgZXhpc3Rpbmcgc3RydWN0dXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYGZzL3N0YXQuY2Agc291cmNlIGNvZGUgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBgdmZzX3N0YXR4YCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGl0IHRyZWF0cyB0aGUgYHN0YXRgIHN0cnVjdHVyZSB3aXRoaW4gaXRzIGxvZ2ljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDEwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXNldC4qc3RhdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3N0YXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zdGF0LmM9MTgxPWludCB2ZnNfZ2V0YXR0cl9ub3NlYyhjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LFxuLS1cbmZzL3N0YXQuYy0xODYtXG5mcy9zdGF0LmM6MTg3Olx0bWVtc2V0KHN0YXQsIDAsIHNpemVvZigqc3RhdCkpO1xuZnMvc3RhdC5jLTE4OC1cdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfQkFTSUNfU1RBVFM7XG4tLVxuZnMvc3RhdC5jPTM4Mz1zdGF0aWMgaW50IGNwX29sZF9zdGF0KHN0cnVjdCBrc3RhdCAqc3RhdCwgc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IF9fdXNlciAqIHN0YXRidWYpXG4tLVxuZnMvc3RhdC5jLTM5Ni1cbmZzL3N0YXQuYzozOTc6XHRtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2Yoc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0KSk7XG5mcy9zdGF0LmMtMzk4LVx0dG1wLnN0X2RldiA9IG9sZF9lbmNvZGVfZGV2KHN0YXQtXHUwMDNlZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUwMgoJCQkJCQkJb3V0cHV0OiAyNjcKCQkJCQkJCXRob3VnaHRzOiA2NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBleHQ0YCBgZ2V0YXR0cmAgQXRvbWljIFdyaXRlIFVuaXQgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgYWRqdXN0cyBob3cgYXRvbWljIHdyaXRlIHVuaXQgaW5mb3JtYXRpb24gaXMgaGFuZGxlZCB3aXRoaW4gYGV4dDRgJiMzOTtzIGBnZXRhdHRyYCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjaGFuZ2luZyB0aGUgdmFsdWUgcGFzc2VkIGFzIGB1bml0X21heF9vcHRgIHRvIHRoZSBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoKWAgZnVuY3Rpb24uIEN1cnJlbnRseSwgdGhlIGNvZGUgc2V0cyBgYXd1X21heGAgdG8gYHNiaS0mZ3Q7c19hd3VfbWF4YCBpZiBhdG9taWMgd3JpdGVzIGFyZSBzdXBwb3J0ZWQgb24gYW4gaW5vZGUsIG90aGVyd2lzZSwgYGF3dV9tYXhgIGlzIHplcm8uIFRoZSBwYXRjaCByZXBsYWNlcyBhIGhhcmRjb2RlZCBgMGAgd2l0aCB0aGUgaW5pdGlhbGl6ZWQgYGF3dV9tYXhgIHZhcmlhYmxlLCB3aGljaCBjYW4gYmUgZWl0aGVyIGAwYCBvciBgc2JpLSZndDtzX2F3dV9tYXhgLgoKTXkgbWFpbiBjb25jZXJuIGhlcmUsIGFzIGFsd2F5cywgaXMgbWVtb3J5IHNhZmV0eS4gQXJlIHdlIHBvdGVudGlhbGx5IGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlPyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uLiBIb3dldmVyLCBhZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpc24mIzM5O3QgYW4gaXNzdWUuIGBhd3VfbWF4YCBpcyAqZGVmaW5pdGVseSogaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIGEgbG9jYWwgYHVuc2lnbmVkIGludGAgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgMGAgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlbiBwb3RlbnRpYWxseSB1cGRhdGVkIHdpdGggYSB2YWxpZCB2YWx1ZSBkZXBlbmRpbmcgb24gdGhlIGlub2RlJiMzOTtzIGNhcGFiaWxpdGllcy4gVGhlcmUmIzM5O3Mgbm8gdXNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBoZXJlLgoKRnVydGhlcm1vcmUsIHRoZSBwYXRoIHRvIHVzZXJzcGFjZSBpcyBjb21wbGV0ZWx5IHNhZmUuIFRoZSByZWxldmFudCBgc3RydWN0IGtzdGF0YCBpcyB6ZXJvZWQgYnkgdGhlIGB2ZnNfZ2V0YXR0cl9ub3NlY2AgZnVuY3Rpb24sIGd1YXJhbnRlZWluZyBpbml0aWFsaXphdGlvbi4gQW5kIHRoZSBgc3RydWN0IHN0YXR4YCBwYXNzZWQgdG8gdXNlcnNwYWNlIGlzIGV4cGxpY2l0bHkgemVyb2VkIHdpdGggYG1lbXNldGAgKmJlZm9yZSogdGhlIHNjYWxhciB2YWx1ZSBpcyBjb3BpZWQuIFNvLCBldmVuIGlmIHRoZXJlIHdlcmUgYW55IHdlaXJkbmVzcyBpbnRlcm5hbGx5LCB0aGUgdXNlci1mYWNpbmcgZGF0YSBzdHJ1Y3R1cmUgaXMgY2xlYW4uIE5vIGluZm9ybWF0aW9uIGxlYWsgaXMgcG9zc2libGUuCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGNvbnZpbmNlZCB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyB0aGF0IEtNU0FOLCBvciBhbnkgb3RoZXIgbWVtb3J5IHNhbml0aXplciwgd291bGQgZGV0ZWN0LiBXZSBhcmUgbm90IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHdlIGFyZSBub3QgbGVha2luZyBpbmZvcm1hdGlvbiwgYW5kIHRoZXJlIGFyZSBubyBicmFuY2hpbmcgb3BlcmF0aW9ucyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBwYXRjaCBpcyBzaW1wbHkgcGFzc2luZyBhbiBpbml0aWFsaXplZCB2YWx1ZSB0byB0aGUgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCBmdW5jdGlvbi4gVGhlIHVzZSBvZiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIEkgdGhpbmsgd2UgY2FuIHNhZmVseSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9nZXRhdHRyKClgIGluIGBmcy9leHQ0L2lub2RlLmNgIHRvIHBhc3MgYGF3dV9tYXhgIGluc3RlYWQgb2YgYDBgIGFzIHRoZSBgdW5pdF9tYXhfb3B0YCBwYXJhbWV0ZXIgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKClgLlxuXG4xLiBUaGUgdmFyaWFibGUgYGF3dV9tYXhgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAoYHVuc2lnbmVkIGludCBhd3VfbWluID0gMCwgYXd1X21heCA9IDA7YCkgYW5kIG9wdGlvbmFsbHkgdXBkYXRlZCBmcm9tIGBzYmktXHUwMDNlc19hd3VfbWF4YC5cbjIuIFRoZSBkZXN0aW5hdGlvbiBgc3RydWN0IGtzdGF0YCBpcyB6ZXJvLWluaXRpYWxpemVkIGluIGB2ZnNfZ2V0YXR0cl9ub3NlYygpYC5cbjMuIFdoZW4gcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB2aWEgYHN0YXR4YCwgYGNwX3N0YXR4KClgIGluaXRpYWxpemVzIHRoZSBlbnRpcmUgYHN0cnVjdCBzdGF0eGAgc3RydWN0dXJlIHVzaW5nIGBtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBwb3B1bGF0aW5nIGZpZWxkcyBhbmQgY2FsbGluZyBgY29weV90b191c2VyKClgLlxuNC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGV4dDRfZ2V0YXR0cigpYCBpbiBgZnMvZXh0NC9pbm9kZS5jYCB0byBwYXNzIGBhd3VfbWF4YCBpbnN0ZWFkIG9mIGAwYCBhcyB0aGUgYHVuaXRfbWF4X29wdGAgcGFyYW1ldGVyIHRvIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcygpYC5cblxuMS4gVGhlIHZhcmlhYmxlIGBhd3VfbWF4YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgKGB1bnNpZ25lZCBpbnQgYXd1X21pbiA9IDAsIGF3dV9tYXggPSAwO2ApIGFuZCBvcHRpb25hbGx5IHVwZGF0ZWQgZnJvbSBgc2JpLVx1MDAzZXNfYXd1X21heGAuXG4yLiBUaGUgZGVzdGluYXRpb24gYHN0cnVjdCBrc3RhdGAgaXMgemVyby1pbml0aWFsaXplZCBpbiBgdmZzX2dldGF0dHJfbm9zZWMoKWAuXG4zLiBXaGVuIHJlcG9ydGluZyB0byB1c2Vyc3BhY2UgdmlhIGBzdGF0eGAsIGBjcF9zdGF0eCgpYCBpbml0aWFsaXplcyB0aGUgZW50aXJlIGBzdHJ1Y3Qgc3RhdHhgIHN0cnVjdHVyZSB1c2luZyBgbWVtc2V0KFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpYCBiZWZvcmUgcG9wdWxhdGluZyBmaWVsZHMgYW5kIGNhbGxpbmcgYGNvcHlfdG9fdXNlcigpYC5cbjQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwgbWVtb3J5IGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkLlxuXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MDIuNTM0NDY3MjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk5NzcxMTY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9nZXRhdHRyXCIsXG4gICAgXCJnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGV4dDRfZ2V0YXR0cigpYCBpbiBgZnMvZXh0NC9pbm9kZS5jYCB0byBwYXNzIGBhd3VfbWF4YCBpbnN0ZWFkIG9mIGAwYCBhcyB0aGUgYHVuaXRfbWF4X29wdGAgcGFyYW1ldGVyIHRvIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcygpYC5cXG5cXG4xLiBUaGUgdmFyaWFibGUgYGF3dV9tYXhgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCAoYHVuc2lnbmVkIGludCBhd3VfbWluID0gMCwgYXd1X21heCA9IDA7YCkgYW5kIG9wdGlvbmFsbHkgdXBkYXRlZCBmcm9tIGBzYmktXFx1MDAzZXNfYXd1X21heGAuXFxuMi4gVGhlIGRlc3RpbmF0aW9uIGBzdHJ1Y3Qga3N0YXRgIGlzIHplcm8taW5pdGlhbGl6ZWQgaW4gYHZmc19nZXRhdHRyX25vc2VjKClgLlxcbjMuIFdoZW4gcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSB2aWEgYHN0YXR4YCwgYGNwX3N0YXR4KClgIGluaXRpYWxpemVzIHRoZSBlbnRpcmUgYHN0cnVjdCBzdGF0eGAgc3RydWN0dXJlIHVzaW5nIGBtZW1zZXQoXFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpYCBiZWZvcmUgcG9wdWxhdGluZyBmaWVsZHMgYW5kIGNhbGxpbmcgYGNvcHlfdG9fdXNlcigpYC5cXG40LiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3Iga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBob3cgYXRvbWljIHdyaXRlIHBhcmFtZXRlcnMgKHVuaXRfbWF4X29wdCkgYXJlIHJlcG9ydGVkIGluIGV4dDRfZ2V0YXR0cigpIHdoZW4gc3RhdHggcXVlcmllcyBTVEFUWF9XUklURV9BVE9NSUMuIFRoaXMgaXMgcmVhY2hhYmxlIHVzZXIgc3BhY2UgY29kZSBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHZpYSBzdGF0eCBzeXN0ZW0gY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjAyLjUzNDQ3MTI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzc0NDYzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZDE1YTQyZjZmZjVhNDgxMWNiNDBkNDMxZDJiNGM2NDQyZmQ0OGI2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDEwOjQyOjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IDI2ZjBmOTcxNGYwM2MuLjkzMDU2Yzk3MWU3NGIgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXFxuKysrIGIvZnMvZXh0NC9pbm9kZS5jXFxuQEAgLTYzMDQsNyArNjMwNCw4IEBAIGludCBleHQ0X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxcbiBcXHRcXHRcXHRhd3VfbWF4ID0gc2JpLVxcdTAwM2VzX2F3dV9tYXg7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsIDApO1xcbitcXHRcXHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgYXd1X21heCk7XFxuIFxcdH1cXG4gXFxuIFxcdGZsYWdzID0gZWktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0ZMX1VTRVJfVklTSUJMRTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MDMuMDcyODY2NTg2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMTg0NzEzOTMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9nZXRhdHRyXCIsXG4gICAgXCJnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBhdG9taWMgd3JpdGUgcGFyYW1ldGVycyAodW5pdF9tYXhfb3B0KSBhcmUgcmVwb3J0ZWQgaW4gZXh0NF9nZXRhdHRyKCkgd2hlbiBzdGF0eCBxdWVyaWVzIFNUQVRYX1dSSVRFX0FUT01JQy4gVGhpcyBpcyByZWFjaGFibGUgdXNlciBzcGFjZSBjb2RlIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gdmlhIHN0YXR4IHN5c3RlbSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZDE1YTQyZjZmZjVhNDgxMWNiNDBkNDMxZDJiNGM2NDQyZmQ0OGI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMTA6NDI6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IDI2ZjBmOTcxNGYwM2MuLjkzMDU2Yzk3MWU3NGIgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTYzMDQsNyArNjMwNCw4IEBAIGludCBleHQ0X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0XHRcdGF3dV9tYXggPSBzYmktXHUwMDNlc19hd3VfbWF4O1xuIFx0XHR9XG4gXG4tXHRcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsIDApO1xuK1x0XHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxuK1x0XHRcdFx0XHRcdCBhd3VfbWF4KTtcbiBcdH1cbiBcbiBcdGZsYWdzID0gZWktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9GTF9VU0VSX1ZJU0lCTEU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0MjowMy4wNzI4Njg3NTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzQxMzUzNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZXh0NCBpbm9kZS5jIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmLiBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGludGVudCBoZXJlLiBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgcGF0Y2ggZGlmZi4gSXQgYXBwZWFycyB3ZSdyZSBpbiBgZnMvZXh0NC9pbm9kZS5jYCwgYW5kIHRoZSByZWxldmFudCBjaGFuZ2UgaXMgaW4gdGhlIGBleHQ0X2dldGF0dHJgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjMwNC4gSXQgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgLiBUaGUgb2xkIHZlcnNpb24gcGFzc2VkIGAwYCBhcyB0aGUgZmluYWwgYXJndW1lbnQsIHdoaWxlIHRoZSBuZXcgdmVyc2lvbiBwYXNzZXMgYGF3dV9tYXhgLiBUaGlzIGxpa2VseSBhZmZlY3RzIGhvdyBhdG9taWMgd3JpdGUgaW5mb3JtYXRpb24gaXMgcmVwb3J0ZWQgaW4gYHN0YXR4YC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhpcyBjaGFuZ2UuXG5cbk5vdywgSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aGluIGBmcy9leHQ0L2lub2RlLmNgIGF0IHRoYXQgc3BlY2lmaWMgbGluZS4gSSBuZWVkIHRoZSBmdWxsIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGF3dV9taW5gIGFuZCBgYXd1X21heGAgcmVwcmVzZW50LCBob3cgdGhleSdyZSBjYWxjdWxhdGVkIG9yIGRlcml2ZWQsIGFuZCB3aHkgdGhlIGNoYW5nZSBpbiB0aGUgY2FsbCdzIGFyZ3VtZW50IGlzIGJlaW5nIGludHJvZHVjZWQuIEkgbmVlZCB0byBrbm93IGhvdyB0aGVzZSB2YWx1ZXMgaW5mbHVlbmNlIHRoZSBhdG9taWMgd3JpdGUgaW5mb3JtYXRpb24gdGhhdCBnZXRzIHJlcG9ydGVkIHZpYSB0aGUgYHN0YXR4YCBzeXN0ZW0gY2FsbC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIHBhdGNoLiBJcyBpdCBhIGJ1ZyBmaXgsIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQsIG9yIGFkZGluZyBuZXcgZmVhdHVyZXM/IEkgZXhwZWN0IHRvIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB0aGF0IG9uY2UgSSBoYXZlIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhpcyBjb2RlIHJlZ2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjA4LjgxNDIyNDUxMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjI4MDpcXHRcXG42MjgxOlxcdFxcdC8qIFJldHVybiB0aGUgRElPIGFsaWdubWVudCByZXN0cmljdGlvbnMgaWYgcmVxdWVzdGVkLiAqL1xcbjYyODI6XFx0XFx0aWYgKChyZXF1ZXN0X21hc2sgXFx1MDAyNiBTVEFUWF9ESU9BTElHTikgXFx1MDAyNlxcdTAwMjYgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjYyODM6XFx0XFx0XFx0dTMyIGRpb19hbGlnbiA9IGV4dDRfZGlvX2FsaWdubWVudChpbm9kZSk7XFxuNjI4NDpcXHRcXG42Mjg1OlxcdFxcdFxcdHN0YXQtXFx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0RJT0FMSUdOO1xcbjYyODY6XFx0XFx0XFx0aWYgKGRpb19hbGlnbiA9PSAxKSB7XFxuNjI4NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmRldjtcXG42Mjg4OlxcdFxcbjYyODk6XFx0XFx0XFx0XFx0LyogaW9tYXAgZGVmYXVsdHMgKi9cXG42MjkwOlxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZWRpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldikgKyAxO1xcbjYyOTE6XFx0XFx0XFx0XFx0c3RhdC1cXHUwMDNlZGlvX29mZnNldF9hbGlnbiA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xcbjYyOTI6XFx0XFx0XFx0fSBlbHNlIHtcXG42MjkzOlxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZWRpb19tZW1fYWxpZ24gPSBkaW9fYWxpZ247XFxuNjI5NDpcXHRcXHRcXHRcXHRzdGF0LVxcdTAwM2VkaW9fb2Zmc2V0X2FsaWduID0gZGlvX2FsaWduO1xcbjYyOTU6XFx0XFx0XFx0fVxcbjYyOTY6XFx0XFx0fVxcbjYyOTc6XFx0XFxuNjI5ODpcXHRcXHRpZiAoKHJlcXVlc3RfbWFzayBcXHUwMDI2IFNUQVRYX1dSSVRFX0FUT01JQykgXFx1MDAyNlxcdTAwMjYgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjYyOTk6XFx0XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuNjMwMDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYXd1X21pbiA9IDAsIGF3dV9tYXggPSAwO1xcbjYzMDE6XFx0XFxuNjMwMjpcXHRcXHRcXHRpZiAoZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlKGlub2RlKSkge1xcbjYzMDM6XFx0XFx0XFx0XFx0YXd1X21pbiA9IHNiaS1cXHUwMDNlc19hd3VfbWluO1xcbjYzMDQ6XFx0XFx0XFx0XFx0YXd1X21heCA9IHNiaS1cXHUwMDNlc19hd3VfbWF4O1xcbjYzMDU6XFx0XFx0XFx0fVxcbjYzMDY6XFx0XFxuNjMwNzpcXHRcXHRcXHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxcbjYzMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGF3dV9tYXgpO1xcbjYzMDk6XFx0XFx0fVxcbjYzMTA6XFx0XFxuNjMxMTpcXHRcXHRmbGFncyA9IGVpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9GTF9VU0VSX1ZJU0lCTEU7XFxuNjMxMjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0FQUEVORF9GTClcXG42MzEzOlxcdFxcdFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9BUFBFTkQ7XFxuNjMxNDpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0NPTVBSX0ZMKVxcbjYzMTU6XFx0XFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0NPTVBSRVNTRUQ7XFxuNjMxNjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0VOQ1JZUFRfRkwpXFxuNjMxNzpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfRU5DUllQVEVEO1xcbjYzMTg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9JTU1VVEFCTEVfRkwpXFxuNjMxOTpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfSU1NVVRBQkxFO1xcbjYzMjA6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9OT0RVTVBfRkwpXFxuNjMyMTpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfTk9EVU1QO1xcbjYzMjI6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9WRVJJVFlfRkwpXFxuNjMyMzpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xcbjYzMjQ6XFx0XFxuNjMyNTpcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQVBQRU5EIHxcXG42MzI2OlxcdFxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9DT01QUkVTU0VEIHxcXG42MzI3OlxcdFxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9FTkNSWVBURUQgfFxcbjYzMjg6XFx0XFx0XFx0XFx0XFx0ICBTVEFUWF9BVFRSX0lNTVVUQUJMRSB8XFxuNjMyOTpcXHRcXHRcXHRcXHRcXHQgIFNUQVRYX0FUVFJfTk9EVU1QIHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MDguODE0OTkyOTIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyNDA0NTM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuIEdpdmVuIHRoZSBuYW1pbmcsIGl0J3MgbGlrZWx5IGludm9sdmVkIGluIHBvcHVsYXRpbmcgYHN0YXR4YCBzdHJ1Y3R1cmVzLCBhbmQgdGhlIFwiYXRvbWljIHdyaXRlc1wiIHN1Z2dlc3RzIHRoaXMgaXMgZG9uZSBpbiBhIHRocmVhZC1zYWZlIG1hbm5lciwgb3IgYXQgbGVhc3Qgd2l0aCBjb25zaWRlcmF0aW9ucyBmb3IgY29uY3VycmVuY3kuIFRoaXMgaXMgcHJldHR5IGNvbW1vbjsgSSBpbWFnaW5lIHRoaXMgZnVuY3Rpb24gYmVpbmcgYSBjb3JlIGNvbXBvbmVudCwgZXNwZWNpYWxseSBpbiBhIGZpbGUgc3lzdGVtIGNvbnRleHQgd2hlcmUgbWV0YWRhdGEgY29uc2lzdGVuY3kgaXMgcGFyYW1vdW50LiBJJ2xsIG5lZWQgdG8gcGlucG9pbnQgaXRzIHBsYWNlIGluIHRoZSByZWFkIHBhdGguXG5cblNvLCB0aGUgZmlyc3QgdGhpbmcgSSdsbCBkbyBpcyBwcm9iYWJseSBtZW50YWxseSBtYXAgaXRzIGNhbGxzIHRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgbWF5YmUgdGhpbmsgYWJvdXQgd2hvIGludm9rZXMgdGhpcywgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcmVhZHMgb3Igd3JpdGVzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3M/IE15IGV4cGVjdGF0aW9uIGlzIGEgc2V0IG9mIHBvaW50ZXJzIHRvIGBzdGF0eGAgc3RydWN0dXJlcyBvciBzb21lIGludGVybmFsIHJlcHJlc2VudGF0aW9uIHRoZXJlb2YsIHdoaWNoIGxpa2VseSBpbnZvbHZlcyBoYW5kbGluZyBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyB1cGRhdGVzLiBJdCBpcyBsaWtlbHkgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyB0byBkZWFsIHdpdGggdGhlIHN1YnRsZXRpZXMgb2YgcGFydGlhbCBhdG9taWMgdXBkYXRlcyB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUuXG5cblRoZSBsZXZlbCBvZiBhdG9taWNpdHkgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgaG93IGl0IHdpbGwgYmUgdXNlZC4gV2lsbCBlYWNoIG1lbWJlciBvZiB0aGUgc3RhdHggc3RydWN0dXJlIGJlIHdyaXR0ZW4gYXRvbWljYWxseSwgb3IgYXJlIGxhcmdlciBhZ2dyZWdhdGVzIHVwZGF0ZWQgaW4gYSBjb29yZGluYXRlZCBtYW5uZXI/IEFuZCBJJ2QgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgcG90ZW50aWFsIG9mIGVycm9ycyBncmFjZWZ1bGx5LCBwZXJoYXBzIHJldHJ5aW5nIG9yIHByb3ZpZGluZyBlcnJvciBjb2RlcyB0aGF0IHByb3BhZ2F0ZSBiYWNrIHVwIHRvIHRoZSBjYWxsZXIuIFVuZGVyc3RhbmRpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGlzIGltcG9ydGFudCB0byBmaWd1cmUgb3V0IGhvdyBzYWZlIHRoZSBmdW5jdGlvbiBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ0NCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MTEuNzM5MDQwNTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MTkzMjMwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iZGV2LmM9MTM5ND12b2lkIGJkZXZfc3RhdHgoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzaylcXG4tLVxcbmJsb2NrL2JkZXYuYy0xNDE2LVxcbmJsb2NrL2JkZXYuYzoxNDE3OlxcdFxcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsXFxuYmxvY2svYmRldi5jLTE0MTgtXFx0XFx0XFx0cXVldWVfYXRvbWljX3dyaXRlX3VuaXRfbWluX2J5dGVzKGJkX3F1ZXVlKSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz02MjY2PWludCBleHQ0X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTYzMDYtXFxuZnMvZXh0NC9pbm9kZS5jOjYzMDc6XFx0XFx0Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCwgYXd1X21pbiwgYXd1X21heCxcXG5mcy9leHQ0L2lub2RlLmMtNjMwOC1cXHRcXHRcXHRcXHRcXHRcXHQgYXd1X21heCk7XFxuLS1cXG5mcy9zdGF0LmM9MTMyPUVYUE9SVF9TWU1CT0woZ2VuZXJpY19maWxsX3N0YXR4X2F0dHIpO1xcbi0tXFxuZnMvc3RhdC5jLTEzNC0vKipcXG5mcy9zdGF0LmM6MTM1OiAqIGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzIC0gRmlsbCBpbiBhdG9taWMgd3JpdGVzIHN0YXR4IGF0dHJpYnV0ZXNcXG5mcy9zdGF0LmMtMTM2LSAqIEBzdGF0OlxcdFdoZXJlIHRvIGZpbGwgaW4gdGhlIGF0dHJpYnV0ZSBmbGFnc1xcbi0tXFxuZnMvc3RhdC5jLTE0My0gKi9cXG5mcy9zdGF0LmM6MTQ0OnZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RydWN0IGtzdGF0ICpzdGF0LFxcbmZzL3N0YXQuYy0xNDUtXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWluLFxcbi0tXFxuZnMvc3RhdC5jLTE2NS19XFxuZnMvc3RhdC5jOjE2NjpFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyk7XFxuZnMvc3RhdC5jLTE2Ny1cXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jPTY3MD14ZnNfcmVwb3J0X2F0b21pY193cml0ZShcXG4tLVxcbmZzL3hmcy94ZnNfaW9wcy5jLTY3My17XFxuZnMveGZzL3hmc19pb3BzLmM6Njc0OlxcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsXFxuZnMveGZzL3hmc19pb3BzLmMtNjc1LVxcdFxcdFxcdHhmc19nZXRfYXRvbWljX3dyaXRlX21pbihpcCksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzIwOD12b2lkIGdlbmVyaWNfZmlsbF9zdGF0eF9hdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBrc3RhdCAqc3RhdCk7XFxuaW5jbHVkZS9saW51eC9mcy5oOjMyMDk6dm9pZCBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdHJ1Y3Qga3N0YXQgKnN0YXQsXFxuaW5jbHVkZS9saW51eC9mcy5oLTMyMTAtXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWluLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0MjoxNC4wMzA5ODA1ODRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTg4OTA4ODM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBmcy9zdGF0LmNgIFNvdXJjZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHNwZWNpZmljLiBUaGUgcHJvYmxlbSBsaWtlbHkgcmVzaWRlcyB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtJ3MgaGFuZGxpbmcgb2YgYHN0YXRgIGNhbGxzLCBwYXJ0aWN1bGFybHkgaW4gYGZzL3N0YXQuY2AuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhlcmUncyBzb21ldGhpbmcgYW1pc3MgYmV0d2VlbiBsaW5lcyAxMzQgYW5kIDE2NS4gVGhpcyBzZWN0aW9uIHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIGNvcmUgbG9naWMgb2YgcG9wdWxhdGluZyB0aGUgYHN0YXRgIHN0cnVjdHVyZSwgcGVyaGFwcyByZWxhdGVkIHRvIGhvdyBpdCBkZWFscyB3aXRoIGRldmljZSBJRHMsIGlub2RlIG51bWJlcnMsIGZpbGUgc2l6ZXMsIG9yIHBlcm1pc3Npb25zLCBhbmQgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHByZWNpc2UgY2FsY3VsYXRpb25zIHRoZXJlLiBMZXQncyBzZWUgaWYgdGhvc2UgbGluZXMgaG9sZCB0aGUga2V5LiBJIGV4cGVjdCB0byBmaW5kIHNvbWUgbG9naWMgdGhhdCBjb3VsZCBiZSB0aGUgc291cmNlIG9mIHdoYXRldmVyIGJlaGF2aW9yIEknbSBzZWVpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0MjoxNy4yMTk4OTEyMDFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zdGF0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTM0OlxcdC8qKlxcbiAxMzU6XFx0ICogZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMgLSBGaWxsIGluIGF0b21pYyB3cml0ZXMgc3RhdHggYXR0cmlidXRlc1xcbiAxMzY6XFx0ICogQHN0YXQ6XFx0V2hlcmUgdG8gZmlsbCBpbiB0aGUgYXR0cmlidXRlIGZsYWdzXFxuIDEzNzpcXHQgKiBAdW5pdF9taW46XFx0TWluaW11bSBzdXBwb3J0ZWQgYXRvbWljIHdyaXRlIGxlbmd0aCBpbiBieXRlc1xcbiAxMzg6XFx0ICogQHVuaXRfbWF4OlxcdE1heGltdW0gc3VwcG9ydGVkIGF0b21pYyB3cml0ZSBsZW5ndGggaW4gYnl0ZXNcXG4gMTM5OlxcdCAqIEB1bml0X21heF9vcHQ6IE9wdGltaXNlZCBtYXhpbXVtIHN1cHBvcnRlZCBhdG9taWMgd3JpdGUgbGVuZ3RoIGluIGJ5dGVzXFxuIDE0MDpcXHQgKlxcbiAxNDE6XFx0ICogRmlsbCBpbiB0aGUgU1RBVFh7X0FUVFJ9X1dSSVRFX0FUT01JQyBmbGFncyBpbiB0aGUga3N0YXQgc3RydWN0dXJlIGZyb21cXG4gMTQyOlxcdCAqIGF0b21pYyB3cml0ZSB1bml0X21pbiBhbmQgdW5pdF9tYXggdmFsdWVzLlxcbiAxNDM6XFx0ICovXFxuIDE0NDpcXHR2b2lkIGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0cnVjdCBrc3RhdCAqc3RhdCxcXG4gMTQ1OlxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21pbixcXG4gMTQ2OlxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21heCxcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21heF9vcHQpXFxuIDE0ODpcXHR7XFxuIDE0OTpcXHRcXHQvKiBDb25maXJtIHRoYXQgdGhlIHJlcXVlc3QgdHlwZSBpcyBrbm93biAqL1xcbiAxNTA6XFx0XFx0c3RhdC1cXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfV1JJVEVfQVRPTUlDO1xcbiAxNTE6XFx0XFxuIDE1MjpcXHRcXHQvKiBDb25maXJtIHRoYXQgdGhlIGZpbGUgYXR0cmlidXRlIHR5cGUgaXMga25vd24gKi9cXG4gMTUzOlxcdFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXNfbWFzayB8PSBTVEFUWF9BVFRSX1dSSVRFX0FUT01JQztcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKHVuaXRfbWluKSB7XFxuIDE1NjpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdG9taWNfd3JpdGVfdW5pdF9taW4gPSB1bml0X21pbjtcXG4gMTU3OlxcdFxcdFxcdHN0YXQtXFx1MDAzZWF0b21pY193cml0ZV91bml0X21heCA9IHVuaXRfbWF4O1xcbiAxNTg6XFx0XFx0XFx0c3RhdC1cXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWF4X29wdCA9IHVuaXRfbWF4X29wdDtcXG4gMTU5OlxcdFxcdFxcdC8qIEluaXRpYWxseSBvbmx5IGFsbG93IDF4IHNlZ21lbnQgKi9cXG4gMTYwOlxcdFxcdFxcdHN0YXQtXFx1MDAzZWF0b21pY193cml0ZV9zZWdtZW50c19tYXggPSAxO1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHRcXHQvKiBDb25maXJtIGF0b21pYyB3cml0ZXMgYXJlIGFjdHVhbGx5IHN1cHBvcnRlZCAqL1xcbiAxNjM6XFx0XFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX1dSSVRFX0FUT01JQztcXG4gMTY0OlxcdFxcdH1cXG4gMTY1OlxcdH1cXG4gMTY2OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKTtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0LyoqXFxuIDE2OTpcXHQgKiB2ZnNfZ2V0YXR0cl9ub3NlYyAtIGdldGF0dHIgd2l0aG91dCBzZWN1cml0eSBjaGVja3NcXG4gMTcwOlxcdCAqIEBwYXRoOiBmaWxlIHRvIGdldCBhdHRyaWJ1dGVzIGZyb21cXG4gMTcxOlxcdCAqIEBzdGF0OiBzdHJ1Y3R1cmUgdG8gcmV0dXJuIGF0dHJpYnV0ZXMgaW5cXG4gMTcyOlxcdCAqIEByZXF1ZXN0X21hc2s6IFNUQVRYX3h4eCBmbGFncyBpbmRpY2F0aW5nIHdoYXQgdGhlIGNhbGxlciB3YW50c1xcbiAxNzM6XFx0ICogQHF1ZXJ5X2ZsYWdzOiBRdWVyeSBtb2RlIChBVF9TVEFUWF9TWU5DX1RZUEUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjE3LjIxOTk3NjI5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMDE5MjU1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZXh0NF9nZXRhdHRyYCBGdW5jdGlvbiBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZXh0NF9nZXRhdHRyYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBnZXRzIHRyaWdnZXJlZCB3aGVuIGBzdGF0eGAgaXMgY2FsbGVkIG9uIGFuIGV4dDQgZmlsZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGV2ZW4gcmVsZXZhbnQgaW4gYSB0eXBpY2FsIGZ1enppbmcgc2V0dXA/IEFyZSBgZXh0NGAgYW5kIGBleHQ0X2dldGF0dHJgIGFjY2Vzc2libGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgc3l6a2FsbGVyPyBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gRXh0NCBpcyBwcmFjdGljYWxseSB0aGUgZGVmYXVsdCBmaWxlc3lzdGVtIGZvciBMaW51eCwgYW5kIHN5emthbGxlciBhYnNvbHV0ZWx5ICpwb3VuZHMqIGV4dDQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLCBpbmNsdWRpbmcgdGhlIGBzdGF0eGAgc3lzdGVtIGNhbGwuIEdvb2QsIHRoYXQgdGFrZXMgY2FyZSBvZiByZWFjaGFiaWxpdHkuXG5cbk5vdywgbGV0J3MgYnJlYWsgZG93biB0aGUgY3JpdGVyaWEuIEZpcnN0LCB0aGUgcG9zaXRpdmUgc2lkZS4gV2UncmUgZGVhbGluZyB3aXRoIGEgY29yZSBzdWJzeXN0ZW06IHRoZSBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGBmcy9leHQ0L2lub2RlLmNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0LiBXZSd2ZSBlc3RhYmxpc2hlZCBpdCdzIHJlYWNoYWJsZSDigJMgYGV4dDRfZ2V0YXR0cmAgaXMgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgc3RhdHgoKWAgc3lzY2FsbCBvbiBleHQ0IGZpbGVzLiBBbmQgZmluYWxseSwgaXMgaXQgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhpcywgdGhlIGFuc3dlciBpcyBcInRydWUuXCIgVGhhdCdzIHRoZSBncmVlbiBsaWdodC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgZXh0NC4gTGV0J3MgZGlnIGludG8gYGZzL2V4dDQvS2NvbmZpZ2AgdG8gbWFrZSBzdXJlIHdlIGhhdmUgZXZlcnl0aGluZyBlbmFibGVkIGZvciB0aGlzIHRvIGJlIHByb2R1Y3RpdmUuIE5lZWQgdG8gbWFrZSBzdXJlIG5vIHdlaXJkIGRlcGVuZGVuY2llcyBhcmUgYmxvY2tpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjIyLjQyMTkwNTEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjExMTQ2NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MjIuNjgzMDI1OTU2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMDc1MzUzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBFWFQ0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSB0aGUgYEVYVDRfRlNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgYWx3YXlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIGV4dDQgd2l0aGluIHRoZSBmaWxlc3lzdGVtIGRpcmVjdG9yeS4gSSB3YW50IHRvIHF1aWNrbHkgY29uZmlybSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gc2VlcywgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY2hhbmdlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIG1vdmluZyBvbi4gS25vd2luZyB0aGUgS2NvbmZpZyBkZXRhaWxzIGlzIGVzc2VudGlhbCBncm91bmR3b3JrLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QgaW4gYGZzL2V4dDQvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwOTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0MjoyNS45OTA1NjQxNjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgRVhUNF9GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNTpcXHRcXHRzZWxlY3QgSkJEMlxcbiAgIDY6XFx0XFx0c2VsZWN0IENSQzE2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gICA4OlxcdFxcdHNlbGVjdCBGU19JT01BUFxcbiAgIDk6XFx0XFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSxcXG4gIDE0OlxcdFxcdCAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aFxcbiAgMTU6XFx0XFx0ICBleHQzOyBpdCBpcyBiYXNlZCBvbiBleHRlbnQgbWFwcyBhbmQgaXQgc3VwcG9ydHMgNDgtYml0XFxuICAxNjpcXHRcXHQgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZFxcbiAgMTc6XFx0XFx0ICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyxcXG4gIDE4OlxcdFxcdCAgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGZlYXR1cmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIHNwZWVkXFxuICAxOTpcXHRcXHQgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXRcXG4gIDIwOlxcdFxcdCAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxcbiAgMjM6XFx0XFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXFxuICAyNDpcXHRcXHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XFxuICAyNTpcXHRcXHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcXG4gIDI2OlxcdFxcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXFxuICAyNzpcXHRcXHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXFxuICAyODpcXHRcXHQgIGNvbXBhdGlibGUuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZVxcbiAgMzE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0NC5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlVzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1xcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gRVhUNF9GU1xcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBFWFQyX0ZTPW5cXG4gIDM5OlxcdFxcdGRlZmF1bHQgeVxcbiAgNDA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0MjoyNS45OTA2NTU3NzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0MzE3MDU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB3aGF0J3MgaW4gYEZvY3VzU3ltYm9sc2AuIEFoLCB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGV4dDRfZ2V0YXR0cmAuIElzIHRoYXQgdGhlIHJpZ2h0IHBsYWNlIHRvIGZvY3VzPyBJIG5lZWQgdG8gbWFrZSBhIGRlY2lzaW9uIGhlcmUuIFNob3VsZCBJIGJlIGxvb2tpbmcgYXQgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCBhcyB3ZWxsLCBvciBpcyBgZXh0NF9nZXRhdHRyYCBzdWZmaWNpZW50P1xuXG5SaWdodCwgYGV4dDRfZ2V0YXR0cmAgaXMgdGhlICpleHQ0LXNwZWNpZmljKiBnZXRhdHRyIGlub2RlIG9wZXJhdGlvbi4gVGhhdCdzIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBtb2RpZmllZCBjb2RlIGRpcmVjdGx5IGluIGl0LCBzbyBpdCBmZWVscyBsaWtlIGEgZ29vZCBmaXQgZm9yIGBGb2N1c1N5bWJvbHNgLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCAqaXMqIGNhbGxlZCBieSBgZXh0NF9nZXRhdHRyYCwgYnV0IGFsc28gYnkgZnVuY3Rpb25zIHN1Y2ggYXMgYGJkZXZfc3RhdHhgIGFuZCBgeGZzX3JlcG9ydF9hdG9taWNfd3JpdGVgLCBpbXBseWluZyBicm9hZGVyIHVzZSBiZXlvbmQganVzdCB0aGUgY29udGV4dCBJJ20gaW50ZXJlc3RlZCBpbi5cblxuU28sIGxldCdzIGdvIHdpdGg6IGBGb2N1c1N5bWJvbHNgOiBgZXh0NF9nZXRhdHRyYCwgYW5kIGtlZXAgYW4gb3BlbiBtaW5kIGZvciBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgIGxhdGVyIGlmIG5lZWRlZC4gSSBuZWVkIHRvIGVzdGFibGlzaCB3aGV0aGVyIGBleHQ0X2dldGF0dHJgIGlzIHRvbyBzcGVjaWZpYy4gSXQncyB0aGUgZXh0NC1zcGVjaWZpYyBoYW5kbGVyIGZvciBzdGF0eCBhbmQgc3RhdCBvcGVyYXRpb25zLCBkaXJlY3RseSByZWxhdGVkIHRvIGV4dDQgZmlsZXN5c3RlbSBjYWxscy4gRnV6emluZyBhdHRlbXB0cyB0byB0YXJnZXQgc3RhdHggYW5kIHJlbGF0ZWQgY2FsbHMgb24gdGhlIGV4dDQgZmlsZXN5c3RlbSB3aWxsIG1vc3QgbGlrZWx5IGxlYWQgdG8gYGV4dDRfZ2V0YXR0cmAuIFRoYXQgc291bmRzIGZvY3VzZWQsIG5vdCB1YmlxdWl0b3VzLCB1bmxpa2Ugc2F5LCBnZW5lcmljIHZmcyBmdW5jdGlvbnMgb3IgbWVtb3J5IGFsbG9jYXRvcnMuXG5cbkp1c3QgZm9yIGNvbnRleHQsIEkgc2hvdWxkIHBlZWsgYXQgYGV4dDRfaW5vZGVfY2FuX2F0b21pY193cml0ZWAgaW4gZnMvZXh0NC9pbm9kZS5jIHRvIGdldCB0aGUgc3Vycm91bmRpbmcgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg2OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjI5LjIzMzgyODM4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcxNDk0MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTQwNDc9c3RhdGljIGlubGluZSBpbnQgZXh0NF9idWZmZXJfdXB0b2RhdGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTQwNTktXFxuZnMvZXh0NC9leHQ0Lmg6NDA2MDpzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9leHQ0LmgtNDA2MS17XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz05NjI9c3RhdGljIGludCBleHQ0X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTk5NC1cXG5mcy9leHQ0L2ZpbGUuYzo5OTU6XFx0aWYgKGV4dDRfaW5vZGVfY2FuX2F0b21pY193cml0ZShpbm9kZSkpXFxuZnMvZXh0NC9maWxlLmMtOTk2LVxcdFxcdGZpbHAtXFx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DQU5fQVRPTUlDX1dSSVRFO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTYyNjY9aW50IGV4dDRfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjMwMS1cXG5mcy9leHQ0L2lub2RlLmM6NjMwMjpcXHRcXHRpZiAoZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlKGlub2RlKSkge1xcbmZzL2V4dDQvaW5vZGUuYy02MzAzLVxcdFxcdFxcdGF3dV9taW4gPSBzYmktXFx1MDAzZXNfYXd1X21pbjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MjkuMzMwOTgyODg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4Mjk5OTIxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIGV4dDQgQXRvbWljIFdyaXRlcyoqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBiZXR0ZXIgYWJvdXQgaG93IGF0b21pYyB3cml0ZXMgYXJlIGhhbmRsZWQgaW4gZXh0NC4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiBgZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlYC4gSSByZW1lbWJlciB0aGF0J3MgZGVjbGFyZWQgaW4gYGZzL2V4dDQvZXh0NC5oYCwgc28gdGhhdCdzIHdoZXJlIEknbGwgZ28gZmlyc3QuIEkgd2FudCB0byBzZWUgZXhhY3RseSB3aGF0IGNvbmRpdGlvbnMgYXJlIGJlaW5nIGNoZWNrZWQgYW5kIHRoZSBvdmVyYWxsIGxvZ2ljIHRoaXMgZnVuY3Rpb24gdXNlcyB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBhdG9taWMgd3JpdGUgaXMgcG9zc2libGUgZm9yIGEgZ2l2ZW4gaW5vZGUuIEknbSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIHVuZGVybHlpbmcgcmVzdHJpY3Rpb25zIGF0IHBsYXkuIExldCdzIHNlZSB3aGF0IHRoZSBoZWFkZXIgZmlsZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODg3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MzEuMTYwOTc4NTI0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2V4dDQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA0MDU4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MDU4OlxcdH1cXG40MDU5OlxcdFxcbjQwNjA6XFx0c3RhdGljIGlubGluZSBib29sIGV4dDRfaW5vZGVfY2FuX2F0b21pY193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbjQwNjE6XFx0e1xcbjQwNjI6XFx0XFxuNDA2MzpcXHRcXHRyZXR1cm4gU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNlxcbjQwNjQ6XFx0XFx0XFx0ZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykgXFx1MDAyNlxcdTAwMjZcXG40MDY1OlxcdFxcdFxcdEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2F3dV9taW4gXFx1MDAzZSAwO1xcbjQwNjY6XFx0fVxcbjQwNjc6XFx0XFxuNDA2ODpcXHRleHRlcm4gaW50IGV4dDRfYmxvY2tfd3JpdGVfYmVnaW4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG40MDY5OlxcdFxcdFxcdFxcdFxcdCAgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxcbjQwNzA6XFx0XFx0XFx0XFx0XFx0ICBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrKTtcXG40MDcxOlxcdFxcbjQwNzI6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuNDA3MzpcXHQjZGVmaW5lIEVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChzeW0pIFxcXFxcXG40MDc0OlxcdFxcdEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoc3ltLCBcXFwiZXh0NC10ZXN0XFxcIilcXG40MDc1OlxcdCNlbmRpZlxcbjQwNzY6XFx0I2VuZGlmXFx0LyogX19LRVJORUxfXyAqL1xcbjQwNzc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjMxLjE2MTIzNDg4NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjI2NTEwMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEF0b21pYyBXcml0ZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBhdG9taWMgd3JpdGVzIGluIGV4dDQuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGBleHQ0X2lub2RlX2Nhbl9hdG9taWNfd3JpdGVgIGlzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiBkZWZpbmVkIGluIGBmcy9leHQ0L2V4dDQuaGAuIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQsIGJ1dCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBmcy9leHQ0L2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBleHQ0X2dldGF0dHJgIGZ1bmN0aW9uLlxuXG5NeSBgRm9jdXNTeW1ib2xzYCwgYXMgSSB1bmRlcnN0YW5kIHRoZW0sIGFyZSBkZWZpbml0ZWx5IGBleHQ0X2dldGF0dHJgIGFuZCBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgLiBUaGUgcGF0Y2ggYWZmZWN0cyBob3cgdGhlIG1heCBhdG9taWMgd3JpdGUgdW5pdCBwYXJhbWV0ZXIgaXMgcGFzc2VkIHRvIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcygpYCB3aXRoaW4gYGV4dDRfZ2V0YXR0cigpYC4gVGhpcyB3aG9sZSB0aGluZyBiZWNvbWVzIHJlbGV2YW50IHdoZW4gdXNlcnNwYWNlIGNhbGxzIGBzdGF0eCgpYCBvbiBhbiBleHQ0IGZpbGVzeXN0ZW0gYW5kIHNwZWNpZmljYWxseSByZXF1ZXN0cyBgU1RBVFhfV1JJVEVfQVRPTUlDYC5cblxuSXQgbG9va3MgbGlrZSB0aGlzIGlzICpkZWZpbml0ZWx5KiBzb21ldGhpbmcgd29ydGggZnV6emluZywgdGhhdCdzIHdoYXQgYFdvcnRoRnV6emluZzogdHJ1ZWAgaXMgc2F5aW5nLiBUaGUgcmF0aW9uYWxlIHNlZW1zIHNvbGlkIOKAkyB0aGUgc3lzdGVtIGNhbGwgYW5kIHBhcmFtZXRlciBjaGFuZ2UgbWFrZSB0aGlzIGEgbGlrZWx5IHRhcmdldCBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgY2xlYXJseSBkZXBlbmRlbnQgb24gYEVYVDRfRlNgLiBJJ3ZlIGNvbmZpcm1lZCBhbGwgb2YgdGhhdCwgYW5kIEknbSBjb25maWRlbnQgaW4gbXkgdW5kZXJzdGFuZGluZywgc28gSSdsbCBnbyBhaGVhZCBhbmQgbG9nIHRoZXNlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MzYsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MzQuNzg3NzQ5NTEyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMjUxNzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9nZXRhdHRyXCIsXG4gICAgXCJnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBhdG9taWMgd3JpdGUgcGFyYW1ldGVycyAodW5pdF9tYXhfb3B0KSBhcmUgcmVwb3J0ZWQgaW4gZXh0NF9nZXRhdHRyKCkgd2hlbiBzdGF0eCBxdWVyaWVzIFNUQVRYX1dSSVRFX0FUT01JQy4gVGhpcyBpcyByZWFjaGFibGUgdXNlciBzcGFjZSBjb2RlIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gdmlhIHN0YXR4IHN5c3RlbSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9nZXRhdHRyXCIsXG4gICAgXCJnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBhdG9taWMgd3JpdGUgcGFyYW1ldGVycyAodW5pdF9tYXhfb3B0KSBhcmUgcmVwb3J0ZWQgaW4gZXh0NF9nZXRhdHRyKCkgd2hlbiBzdGF0eCBxdWVyaWVzIFNUQVRYX1dSSVRFX0FUT01JQy4gVGhpcyBpcyByZWFjaGFibGUgdXNlciBzcGFjZSBjb2RlIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gdmlhIHN0YXR4IHN5c3RlbSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6MzQuOTIwMDEwMDQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjYxMjE2MDY5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjM0LjkyMDQzMTQ2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2NjExNzM1MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9nZXRhdHRyKClgIGluIGBmcy9leHQ0L2lub2RlLmNgIHRvIHBhc3MgYGF3dV9tYXhgIGluc3RlYWQgb2YgYDBgIGFzIHRoZSBgdW5pdF9tYXhfb3B0YCBwYXJhbWV0ZXIgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKClgLlxcblxcbjEuIFRoZSB2YXJpYWJsZSBgYXd1X21heGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIChgdW5zaWduZWQgaW50IGF3dV9taW4gPSAwLCBhd3VfbWF4ID0gMDtgKSBhbmQgb3B0aW9uYWxseSB1cGRhdGVkIGZyb20gYHNiaS1cXHUwMDNlc19hd3VfbWF4YC5cXG4yLiBUaGUgZGVzdGluYXRpb24gYHN0cnVjdCBrc3RhdGAgaXMgemVyby1pbml0aWFsaXplZCBpbiBgdmZzX2dldGF0dHJfbm9zZWMoKWAuXFxuMy4gV2hlbiByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHZpYSBgc3RhdHhgLCBgY3Bfc3RhdHgoKWAgaW5pdGlhbGl6ZXMgdGhlIGVudGlyZSBgc3RydWN0IHN0YXR4YCBzdHJ1Y3R1cmUgdXNpbmcgYG1lbXNldChcXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBwb3B1bGF0aW5nIGZpZWxkcyBhbmQgY2FsbGluZyBgY29weV90b191c2VyKClgLlxcbjQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwgbWVtb3J5IGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkLlxcblxcblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkMTVhNDJmNmZmNWE0ODExY2I0MGQ0MzFkMmI0YzY0NDJmZDQ4YjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAxMCAxMDo0MjowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggMjZmMGY5NzE0ZjAzYy4uOTMwNTZjOTcxZTc0YiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNjMwNCw3ICs2MzA0LDggQEAgaW50IGV4dDRfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4gXHRcdFx0YXd1X21heCA9IHNiaS1cdTAwM2VzX2F3dV9tYXg7XG4gXHRcdH1cbiBcbi1cdFx0Z2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RhdCwgYXd1X21pbiwgYXd1X21heCwgMCk7XG4rXHRcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsXG4rXHRcdFx0XHRcdFx0IGF3dV9tYXgpO1xuIFx0fVxuIFxuIFx0ZmxhZ3MgPSBlaS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0ZMX1VTRVJfVklTSUJMRTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjM0LjkyMDQzMjU3N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODU2ODY0MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGV4dDRfZ2V0YXR0cmAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIGRvd24gdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgbW9kaWZ5aW5nIHRoZSBgZXh0NF9nZXRhdHRyYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGZzL2V4dDQvaW5vZGUuY2AgZmlsZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGhvdyB3ZSdyZSBjYWxsaW5nIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2AuXG5cblRoZSBkaWZmIHNob3dzIGEgbWlub3IgYWRqdXN0bWVudCwgY2hhbmdpbmcgdGhlIHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgLiBQcmV2aW91c2x5IGl0IHdhcyAwLCBhbmQgbm93IGl0J3MgYGF3dV9tYXhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBXaGF0J3MgdGhlIGltcGFjdCBvZiBzZXR0aW5nIHRoZSBhdG9taWMgd3JpdGUgdW5pdCBtYXggYXMgdGhlIG51bWJlcj9cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYCBpdHNlbGYsIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IHdpdGhpbiBgZXh0NF9nZXRhdHRyYC4gU3BlY2lmaWNhbGx5LCB3aGF0IGFyZSBgYXd1X21pbmAgYW5kIGBhd3VfbWF4YD8gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHNvdXJjZSBjb2RlIGZvciBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNgIGFuZCBtYXliZSBwb2tlIGFyb3VuZCBgaW5vZGUuY2AgZm9yIHNvbWUgbW9yZSBjb250ZXh0LiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBhdG9taWMgd3JpdGUgdW5pdCBjb25jZXB0IGFuZCBob3cgdGhlIHN0YXQgaW5mb3JtYXRpb24gaXMgYmVpbmcgcG9wdWxhdGVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0Mjo0MS43NzczMDA5NDFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTM0NjExNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmRldi5jPTEzOTQ9dm9pZCBiZGV2X3N0YXR4KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2spXFxuLS1cXG5ibG9jay9iZGV2LmMtMTQxNi1cXG5ibG9jay9iZGV2LmM6MTQxNzpcXHRcXHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LFxcbmJsb2NrL2JkZXYuYy0xNDE4LVxcdFxcdFxcdHF1ZXVlX2F0b21pY193cml0ZV91bml0X21pbl9ieXRlcyhiZF9xdWV1ZSksXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NjI2Nj1pbnQgZXh0NF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02MzA2LVxcbmZzL2V4dDQvaW5vZGUuYzo2MzA3OlxcdFxcdGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0YXQsIGF3dV9taW4sIGF3dV9tYXgsXFxuZnMvZXh0NC9pbm9kZS5jLTYzMDgtXFx0XFx0XFx0XFx0XFx0XFx0IGF3dV9tYXgpO1xcbi0tXFxuZnMvc3RhdC5jPTEzMj1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsbF9zdGF0eF9hdHRyKTtcXG4tLVxcbmZzL3N0YXQuYy0xMzQtLyoqXFxuZnMvc3RhdC5jOjEzNTogKiBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyAtIEZpbGwgaW4gYXRvbWljIHdyaXRlcyBzdGF0eCBhdHRyaWJ1dGVzXFxuZnMvc3RhdC5jLTEzNi0gKiBAc3RhdDpcXHRXaGVyZSB0byBmaWxsIGluIHRoZSBhdHRyaWJ1dGUgZmxhZ3NcXG4tLVxcbmZzL3N0YXQuYy0xNDMtICovXFxuZnMvc3RhdC5jOjE0NDp2b2lkIGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKHN0cnVjdCBrc3RhdCAqc3RhdCxcXG5mcy9zdGF0LmMtMTQ1LVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21pbixcXG4tLVxcbmZzL3N0YXQuYy0xNjUtfVxcbmZzL3N0YXQuYzoxNjY6RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMpO1xcbmZzL3N0YXQuYy0xNjctXFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYz02NzA9eGZzX3JlcG9ydF9hdG9taWNfd3JpdGUoXFxuLS1cXG5mcy94ZnMveGZzX2lvcHMuYy02NzMte1xcbmZzL3hmcy94ZnNfaW9wcy5jOjY3NDpcXHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LFxcbmZzL3hmcy94ZnNfaW9wcy5jLTY3NS1cXHRcXHRcXHR4ZnNfZ2V0X2F0b21pY193cml0ZV9taW4oaXApLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTMyMDg9dm9pZCBnZW5lcmljX2ZpbGxfc3RhdHhfYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qga3N0YXQgKnN0YXQpO1xcbmluY2x1ZGUvbGludXgvZnMuaDozMjA5OnZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RydWN0IGtzdGF0ICpzdGF0LFxcbmluY2x1ZGUvbGludXgvZnMuaC0zMjEwLVxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCB1bml0X21pbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6NDMuODMwNzcyNjQxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTQxMjk0NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyBGaWxlIE1ldGFkYXRhIEhhbmRsaW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwncyBoYW5kbGluZyBvZiBmaWxlIG1ldGFkYXRhLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYHN0YXRgIHN5c3RlbSBjYWxsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGV4dDQgZmlsZXN5c3RlbS4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgYnkgZXhhbWluaW5nIGBmcy9zdGF0LmNgLCBmb2N1c2luZyBhcm91bmQgbGluZSAxMzQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBkaXNwYXRjaGVzIHRoZSBgc3RhdGAgcmVxdWVzdCBhbmQgaGFuZGxlcyB0aGUgYmFzaWMgc2V0dXAuIFRoZW4sIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlIGV4dDQgaW1wbGVtZW50YXRpb24gaW50ZXJhY3RzLCBJIG5lZWQgdG8ganVtcCBvdmVyIHRvIGBmcy9leHQ0L2lub2RlLmNgLCBsaWtlbHkgYXJvdW5kIGxpbmUgNjMwMC4gSSBzdXNwZWN0IHRoaXMgd2lsbCBpbnZvbHZlIGZpbmRpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQgZXh0NCB1c2VzIHRvIHBvcHVsYXRlIHRoZSBgc3RhdGAgZGF0YSBzdHJ1Y3R1cmUgZnJvbSB0aGUgaW5vZGUgZGF0YS4gSSBleHBlY3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGRldGFpbHMgdGhlcmUsIHN1Y2ggYXMgaG93IHRoZSBpbm9kZSdzIG9uLWRpc2sgcmVwcmVzZW50YXRpb24gdHJhbnNsYXRlcyB0byB0aGUgaW4tbWVtb3J5IGBzdGF0YCBzdHJ1Y3R1cmUsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSBzaXplLCBwZXJtaXNzaW9ucywgYW5kIHRpbWVzdGFtcHMuIEhvcGVmdWxseSwgdGhpcyBhcHByb2FjaCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvcmUgZGF0YSBpcyBzb3VyY2VkIGFuZCBwcmVwYXJlZCBmb3IgdGhlIHVzZXIgc3BhY2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0Mjo0Ni4xODQ5MDUzNjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3N0YXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzQsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzQ6XFx0LyoqXFxuIDEzNTpcXHQgKiBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyAtIEZpbGwgaW4gYXRvbWljIHdyaXRlcyBzdGF0eCBhdHRyaWJ1dGVzXFxuIDEzNjpcXHQgKiBAc3RhdDpcXHRXaGVyZSB0byBmaWxsIGluIHRoZSBhdHRyaWJ1dGUgZmxhZ3NcXG4gMTM3OlxcdCAqIEB1bml0X21pbjpcXHRNaW5pbXVtIHN1cHBvcnRlZCBhdG9taWMgd3JpdGUgbGVuZ3RoIGluIGJ5dGVzXFxuIDEzODpcXHQgKiBAdW5pdF9tYXg6XFx0TWF4aW11bSBzdXBwb3J0ZWQgYXRvbWljIHdyaXRlIGxlbmd0aCBpbiBieXRlc1xcbiAxMzk6XFx0ICogQHVuaXRfbWF4X29wdDogT3B0aW1pc2VkIG1heGltdW0gc3VwcG9ydGVkIGF0b21pYyB3cml0ZSBsZW5ndGggaW4gYnl0ZXNcXG4gMTQwOlxcdCAqXFxuIDE0MTpcXHQgKiBGaWxsIGluIHRoZSBTVEFUWHtfQVRUUn1fV1JJVEVfQVRPTUlDIGZsYWdzIGluIHRoZSBrc3RhdCBzdHJ1Y3R1cmUgZnJvbVxcbiAxNDI6XFx0ICogYXRvbWljIHdyaXRlIHVuaXRfbWluIGFuZCB1bml0X21heCB2YWx1ZXMuXFxuIDE0MzpcXHQgKi9cXG4gMTQ0OlxcdHZvaWQgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoc3RydWN0IGtzdGF0ICpzdGF0LFxcbiAxNDU6XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWluLFxcbiAxNDY6XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWF4LFxcbiAxNDc6XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHVuaXRfbWF4X29wdClcXG4gMTQ4OlxcdHtcXG4gMTQ5OlxcdFxcdC8qIENvbmZpcm0gdGhhdCB0aGUgcmVxdWVzdCB0eXBlIGlzIGtub3duICovXFxuIDE1MDpcXHRcXHRzdGF0LVxcdTAwM2VyZXN1bHRfbWFzayB8PSBTVEFUWF9XUklURV9BVE9NSUM7XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcdC8qIENvbmZpcm0gdGhhdCB0aGUgZmlsZSBhdHRyaWJ1dGUgdHlwZSBpcyBrbm93biAqL1xcbiAxNTM6XFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IFNUQVRYX0FUVFJfV1JJVEVfQVRPTUlDO1xcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHRpZiAodW5pdF9taW4pIHtcXG4gMTU2OlxcdFxcdFxcdHN0YXQtXFx1MDAzZWF0b21pY193cml0ZV91bml0X21pbiA9IHVuaXRfbWluO1xcbiAxNTc6XFx0XFx0XFx0c3RhdC1cXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWF4ID0gdW5pdF9tYXg7XFxuIDE1ODpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdG9taWNfd3JpdGVfdW5pdF9tYXhfb3B0ID0gdW5pdF9tYXhfb3B0O1xcbiAxNTk6XFx0XFx0XFx0LyogSW5pdGlhbGx5IG9ubHkgYWxsb3cgMXggc2VnbWVudCAqL1xcbiAxNjA6XFx0XFx0XFx0c3RhdC1cXHUwMDNlYXRvbWljX3dyaXRlX3NlZ21lbnRzX21heCA9IDE7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdFxcdC8qIENvbmZpcm0gYXRvbWljIHdyaXRlcyBhcmUgYWN0dWFsbHkgc3VwcG9ydGVkICovXFxuIDE2MzpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfV1JJVEVfQVRPTUlDO1xcbiAxNjQ6XFx0XFx0fVxcbiAxNjU6XFx0fVxcbiAxNjY6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMpO1xcbiAxNjc6XFx0XFxuIDE2ODpcXHQvKipcXG4gMTY5OlxcdCAqIHZmc19nZXRhdHRyX25vc2VjIC0gZ2V0YXR0ciB3aXRob3V0IHNlY3VyaXR5IGNoZWNrc1xcbiAxNzA6XFx0ICogQHBhdGg6IGZpbGUgdG8gZ2V0IGF0dHJpYnV0ZXMgZnJvbVxcbiAxNzE6XFx0ICogQHN0YXQ6IHN0cnVjdHVyZSB0byByZXR1cm4gYXR0cmlidXRlcyBpblxcbiAxNzI6XFx0ICogQHJlcXVlc3RfbWFzazogU1RBVFhfeHh4IGZsYWdzIGluZGljYXRpbmcgd2hhdCB0aGUgY2FsbGVyIHdhbnRzXFxuIDE3MzpcXHQgKiBAcXVlcnlfZmxhZ3M6IFF1ZXJ5IG1vZGUgKEFUX1NUQVRYX1NZTkNfVFlQRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6NDYuMTg1MDQzODIzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5NDQwOTcxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBmcm9tIGBmcy9leHQ0L2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDYyOTAtNjMyMDpcblxuKipBbmFseXppbmcgZXh0NCBpbm9kZS5jICg2MjkwLTYzMjApOiBBIEZvY3VzZWQgTG9vayoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcsIFwiT2theSwgZXh0NCBpbm9kZS5jLi4uIGxldCdzIHBpbnBvaW50IHRoYXQgc2VjdGlvbi5cIiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB0byBob25lIGluIG9uIGxpbmVzIDYyOTAgdG8gNjMyMC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcHJvYmFibHkgYmUgbG9va2luZyBhdCBzb21lIGlub2RlIG9wZXJhdGlvbiwgcG90ZW50aWFsbHkgYSBtZXRhZGF0YSB1cGRhdGUgb3IgcGVyaGFwcyBzb21lIGFzcGVjdHMgb2YgaW5vZGUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24sIG9yIG1heWJlIGV2ZW4gcmVsYXRlZCB0byBqb3VybmFsIG9wZXJhdGlvbnMsIGdpdmVuIHRoZSBjb250ZXh0IG9mIGlub2RlIGhhbmRsaW5nLiBUaGUgbGluZSBudW1iZXJzIGFyZSBpbXBvcnRhbnQsIGJlY2F1c2UgdGhpcyBpbmRpY2F0ZXMgYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjb2RlYmFzZS4gSSBhbSBleHBlY3RpbmcgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBsaWtlbHkgd2l0aCBlcnJvciBoYW5kbGluZywgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzLCBzb21lIGtleSBmdW5jdGlvbiBjYWxsLCBzb21lIGNvbXBhcmlzb24gb3IgY29uZGl0aW9uYWwgbG9naWMsIG9yIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYmxvY2sgZGV2aWNlIGxheWVyLiBQZXJoYXBzIHRoZSBjb2RlIGRlYWxzIHdpdGggdGhlIGxvZ2ljIGludm9sdmVkIGluIHNldHRpbmcgdXAgb3IgdGVhcmluZyBkb3duIGFuIGV4dGVudC1tYXBwZWQgZmlsZSBibG9jay5cblxuQmFzZWQgb24gdGhlIHN0cnVjdHVyZSBhbmQgbGlrZWx5IGZ1bmN0aW9uIGNhbGxzLCB0aGlzIGNvZGUgc25pcHBldCBsaWtlbHkgZm9jdXNlcyBvbiB0aGUgbG93LWxldmVsLCBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhbiBleHQ0IGZpbGVzeXN0ZW0gb3BlcmF0aW9uLiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGJlIHBhcnQgb2YgdGhlIGNvcmUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUgYW5kIGlzIHRodXMgaGlnaGx5IGNyaXRpY2FsIHRvIHVuZGVyc3RhbmQsIGlmIGRlYnVnZ2luZyBvciBtb2RpZnlpbmcgZXh0NC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHZhcmlhYmxlcyBhbmQgdGhlaXIgZGF0YSB0eXBlcywgYW5kIGFueSBjb250cm9sIGZsb3csIGVzcGVjaWFsbHkgcG90ZW50aWFsIGVycm9yIHBhdGhzLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQyOjUxLjEyOTE0Mzc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjI4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjI4MDpcXHRcXG42MjgxOlxcdFxcdC8qIFJldHVybiB0aGUgRElPIGFsaWdubWVudCByZXN0cmljdGlvbnMgaWYgcmVxdWVzdGVkLiAqL1xcbjYyODI6XFx0XFx0aWYgKChyZXF1ZXN0X21hc2sgXFx1MDAyNiBTVEFUWF9ESU9BTElHTikgXFx1MDAyNlxcdTAwMjYgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjYyODM6XFx0XFx0XFx0dTMyIGRpb19hbGlnbiA9IGV4dDRfZGlvX2FsaWdubWVudChpbm9kZSk7XFxuNjI4NDpcXHRcXG42Mjg1OlxcdFxcdFxcdHN0YXQtXFx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0RJT0FMSUdOO1xcbjYyODY6XFx0XFx0XFx0aWYgKGRpb19hbGlnbiA9PSAxKSB7XFxuNjI4NzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmRldjtcXG42Mjg4OlxcdFxcbjYyODk6XFx0XFx0XFx0XFx0LyogaW9tYXAgZGVmYXVsdHMgKi9cXG42MjkwOlxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZWRpb19tZW1fYWxpZ24gPSBiZGV2X2RtYV9hbGlnbm1lbnQoYmRldikgKyAxO1xcbjYyOTE6XFx0XFx0XFx0XFx0c3RhdC1cXHUwMDNlZGlvX29mZnNldF9hbGlnbiA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xcbjYyOTI6XFx0XFx0XFx0fSBlbHNlIHtcXG42MjkzOlxcdFxcdFxcdFxcdHN0YXQtXFx1MDAzZWRpb19tZW1fYWxpZ24gPSBkaW9fYWxpZ247XFxuNjI5NDpcXHRcXHRcXHRcXHRzdGF0LVxcdTAwM2VkaW9fb2Zmc2V0X2FsaWduID0gZGlvX2FsaWduO1xcbjYyOTU6XFx0XFx0XFx0fVxcbjYyOTY6XFx0XFx0fVxcbjYyOTc6XFx0XFxuNjI5ODpcXHRcXHRpZiAoKHJlcXVlc3RfbWFzayBcXHUwMDI2IFNUQVRYX1dSSVRFX0FUT01JQykgXFx1MDAyNlxcdTAwMjYgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjYyOTk6XFx0XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuNjMwMDpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgYXd1X21pbiA9IDAsIGF3dV9tYXggPSAwO1xcbjYzMDE6XFx0XFxuNjMwMjpcXHRcXHRcXHRpZiAoZXh0NF9pbm9kZV9jYW5fYXRvbWljX3dyaXRlKGlub2RlKSkge1xcbjYzMDM6XFx0XFx0XFx0XFx0YXd1X21pbiA9IHNiaS1cXHUwMDNlc19hd3VfbWluO1xcbjYzMDQ6XFx0XFx0XFx0XFx0YXd1X21heCA9IHNiaS1cXHUwMDNlc19hd3VfbWF4O1xcbjYzMDU6XFx0XFx0XFx0fVxcbjYzMDY6XFx0XFxuNjMwNzpcXHRcXHRcXHRnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcyhzdGF0LCBhd3VfbWluLCBhd3VfbWF4LFxcbjYzMDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGF3dV9tYXgpO1xcbjYzMDk6XFx0XFx0fVxcbjYzMTA6XFx0XFxuNjMxMTpcXHRcXHRmbGFncyA9IGVpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9GTF9VU0VSX1ZJU0lCTEU7XFxuNjMxMjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0FQUEVORF9GTClcXG42MzEzOlxcdFxcdFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9BUFBFTkQ7XFxuNjMxNDpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0NPTVBSX0ZMKVxcbjYzMTU6XFx0XFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0NPTVBSRVNTRUQ7XFxuNjMxNjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0VOQ1JZUFRfRkwpXFxuNjMxNzpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfRU5DUllQVEVEO1xcbjYzMTg6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9JTU1VVEFCTEVfRkwpXFxuNjMxOTpcXHRcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfSU1NVVRBQkxFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0Mjo1MS4xMjk1MzE1NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODU3NzI5MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgYSBwYXRjaCBjaGFuZ2luZyBhIGNhbGwgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzYC4gU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyB0aGUgZm91cnRoIGFyZ3VtZW50IGZyb20gYDBgIHRvIGBhd3VfbWF4YC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGJlaGF2aW9yIHJlbGF0ZWQgdG8gYXRvbWljIHdyaXRlIHVuaXQgaGFuZGxpbmcuXG5cbkRpdmluZyBpbnRvIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2AsIEkgc2VlIHRoYXQgdGhpcyBmb3VydGggYXJndW1lbnQsIGB1bml0X21heF9vcHRgLCBpcyBjb25kaXRpb25hbGx5IHVzZWQuIElmIGB1bml0X21pbmAgaXNuJ3QgemVybywgdGhlIGZ1bmN0aW9uIHNldHMgYHN0YXQtXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWF4X29wdGAgdG8gYHVuaXRfbWF4X29wdGAuIFJpZ2h0LCBzbyB0aGlzIHN1Z2dlc3RzIHRoYXQgYGF3dV9tYXhgIGlzIGJlaW5nIHNldCBoZXJlIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgd2hlcmUgYmVmb3JlLCBpdCB3YXMgZXhwbGljaXRseSB6ZXJvZWQuIFRoZSBgc3RhdGAgYXJndW1lbnQgaXMgdGhlIGBzdHJ1Y3Qga3N0YXQgKnN0YXRgIHBhc3NlZCB0byBgZXh0NF9nZXRhdHRyYC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmUgYWJvdXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoaXMgYHN0YXRgIHN0cnVjdHVyZS4gV2hlcmUgZG9lcyBpdCBjb21lIGZyb20sIGFuZCBjcml0aWNhbGx5LCBpcyBpdCB6ZXJvZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkPyBJZiBub3QsIHdlIGNvdWxkIGJlIGludHJvZHVjaW5nIHVuZGVmaW5lZCBiZWhhdmlvciBvciB1bmV4cGVjdGVkIHZhbHVlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhpcyBzdHJ1Y3R1cmUuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiBgc3RhdGAuIEknbGwgc3RhcnQgYnkgZXhhbWluaW5nIGhvdyBgdmZzX3N0YXR4YCBhbmQgdWx0aW1hdGVseSBgZG9fc3RhdHhgIGluaXRpYWxpemUgZWl0aGVyIGEgYHN0cnVjdCBrc3RhdCBzdGF0O2Agb3IgYHN0cnVjdCBzdGF0eGAuIEtub3dpbmcgaG93IHRoYXQgaXMgcG9wdWxhdGVkIGlzIGVzc2VudGlhbC4gVGhlbiwgSSB3aWxsIGFsc28gc2VhcmNoIGZvciBvdGhlciBjYWxsZXJzIG9mIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2Agb3IgYGNwX3N0YXR4YCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBlbHNld2hlcmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NzUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0Mjo1NC45ODcyNjU0MDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDEwODExMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3Bfc3RhdHhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3RhdC5jPTY5OT1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludFxcbmZzL3N0YXQuYzo3MDA6Y3Bfc3RhdHgoY29uc3Qgc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3Qgc3RhdHggX191c2VyICpidWZmZXIpXFxuZnMvc3RhdC5jLTcwMS17XFxuLS1cXG5mcy9zdGF0LmM9NzQ0PWludCBkb19zdGF0eChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuLS1cXG5mcy9zdGF0LmMtNzY0LVxcbmZzL3N0YXQuYzo3NjU6XFx0cmV0dXJuIGNwX3N0YXR4KFxcdTAwMjZzdGF0LCBidWZmZXIpO1xcbmZzL3N0YXQuYy03NjYtfVxcbi0tXFxuZnMvc3RhdC5jPTc2OD1pbnQgZG9fc3RhdHhfZmQoaW50IGZkLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBtYXNrLFxcbi0tXFxuZnMvc3RhdC5jLTc4OC1cXG5mcy9zdGF0LmM6Nzg5OlxcdHJldHVybiBjcF9zdGF0eChcXHUwMDI2c3RhdCwgYnVmZmVyKTtcXG5mcy9zdGF0LmMtNzkwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6NTcuMTI4MzcwNjI3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MTI0MDkzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgc3RhdHhgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYGZzL3N0YXQuY2AgY29kZS4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgc3RhdHhgIGlzIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBjcF9zdGF0eGAgYW5kIGBkb19zdGF0eGAuIEknbSBndWVzc2luZyB0aGF0IGBjcF9zdGF0eGAgcHJvYmFibHkgaGFuZGxlcyBzb21lIG9mIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIG9yIGFyZ3VtZW50IGNvcHlpbmcsIHdoaWxlIGBkb19zdGF0eGAgd2lsbCBiZSB3aGVyZSB0aGUgY29yZSBzeXN0ZW0gY2FsbCBsb2dpYyByZXNpZGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB1c2VkIGZvciB0aGUgZXh0ZW5kZWQgc3RhdCBpbmZvcm1hdGlvbiDigJMgaXQncyBiZWVuIGEgd2hpbGUgc2luY2UgSSBsYXN0IGxvb2tlZCBhdCB0aG9zZSBmaWVsZHMuIExldCdzIHNlZSBpZiB0aGlzIGxpbmVzIHVwIHdpdGggbXkgZXhwZWN0YXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzQyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDI6NTkuODQwODAxODY2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zdGF0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjk1OlxcdFxcdHJldHVybiBjcF9uZXdfc3RhdDY0KFxcdTAwMjZzdGF0LCBzdGF0YnVmKTtcXG4gNjk2OlxcdH1cXG4gNjk3OlxcdCNlbmRpZiAvKiBfX0FSQ0hfV0FOVF9TVEFUNjQgfHwgX19BUkNIX1dBTlRfQ09NUEFUX1NUQVQ2NCAqL1xcbiA2OTg6XFx0XFxuIDY5OTpcXHRzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludFxcbiA3MDA6XFx0Y3Bfc3RhdHgoY29uc3Qgc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3Qgc3RhdHggX191c2VyICpidWZmZXIpXFxuIDcwMTpcXHR7XFxuIDcwMjpcXHRcXHRzdHJ1Y3Qgc3RhdHggdG1wO1xcbiA3MDM6XFx0XFxuIDcwNDpcXHRcXHRtZW1zZXQoXFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHRtcCkpO1xcbiA3MDU6XFx0XFxuIDcwNjpcXHRcXHQvKiBTVEFUWF9DSEFOR0VfQ09PS0lFIGlzIGtlcm5lbC1vbmx5IGZvciBub3cgKi9cXG4gNzA3OlxcdFxcdHRtcC5zdHhfbWFzayA9IHN0YXQtXFx1MDAzZXJlc3VsdF9tYXNrIFxcdTAwMjYgflNUQVRYX0NIQU5HRV9DT09LSUU7XFxuIDcwODpcXHRcXHR0bXAuc3R4X2Jsa3NpemUgPSBzdGF0LVxcdTAwM2VibGtzaXplO1xcbiA3MDk6XFx0XFx0LyogU1RBVFhfQVRUUl9DSEFOR0VfTU9OT1RPTklDIGlzIGtlcm5lbC1vbmx5IGZvciBub3cgKi9cXG4gNzEwOlxcdFxcdHRtcC5zdHhfYXR0cmlidXRlcyA9IHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXMgXFx1MDAyNiB+U1RBVFhfQVRUUl9DSEFOR0VfTU9OT1RPTklDO1xcbiA3MTE6XFx0XFx0dG1wLnN0eF9ubGluayA9IHN0YXQtXFx1MDAzZW5saW5rO1xcbiA3MTI6XFx0XFx0dG1wLnN0eF91aWQgPSBmcm9tX2t1aWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBzdGF0LVxcdTAwM2V1aWQpO1xcbiA3MTM6XFx0XFx0dG1wLnN0eF9naWQgPSBmcm9tX2tnaWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBzdGF0LVxcdTAwM2VnaWQpO1xcbiA3MTQ6XFx0XFx0dG1wLnN0eF9tb2RlID0gc3RhdC1cXHUwMDNlbW9kZTtcXG4gNzE1OlxcdFxcdHRtcC5zdHhfaW5vID0gc3RhdC1cXHUwMDNlaW5vO1xcbiA3MTY6XFx0XFx0dG1wLnN0eF9zaXplID0gc3RhdC1cXHUwMDNlc2l6ZTtcXG4gNzE3OlxcdFxcdHRtcC5zdHhfYmxvY2tzID0gc3RhdC1cXHUwMDNlYmxvY2tzO1xcbiA3MTg6XFx0XFx0dG1wLnN0eF9hdHRyaWJ1dGVzX21hc2sgPSBzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzX21hc2s7XFxuIDcxOTpcXHRcXHR0bXAuc3R4X2F0aW1lLnR2X3NlYyA9IHN0YXQtXFx1MDAzZWF0aW1lLnR2X3NlYztcXG4gNzIwOlxcdFxcdHRtcC5zdHhfYXRpbWUudHZfbnNlYyA9IHN0YXQtXFx1MDAzZWF0aW1lLnR2X25zZWM7XFxuIDcyMTpcXHRcXHR0bXAuc3R4X2J0aW1lLnR2X3NlYyA9IHN0YXQtXFx1MDAzZWJ0aW1lLnR2X3NlYztcXG4gNzIyOlxcdFxcdHRtcC5zdHhfYnRpbWUudHZfbnNlYyA9IHN0YXQtXFx1MDAzZWJ0aW1lLnR2X25zZWM7XFxuIDcyMzpcXHRcXHR0bXAuc3R4X2N0aW1lLnR2X3NlYyA9IHN0YXQtXFx1MDAzZWN0aW1lLnR2X3NlYztcXG4gNzI0OlxcdFxcdHRtcC5zdHhfY3RpbWUudHZfbnNlYyA9IHN0YXQtXFx1MDAzZWN0aW1lLnR2X25zZWM7XFxuIDcyNTpcXHRcXHR0bXAuc3R4X210aW1lLnR2X3NlYyA9IHN0YXQtXFx1MDAzZW10aW1lLnR2X3NlYztcXG4gNzI2OlxcdFxcdHRtcC5zdHhfbXRpbWUudHZfbnNlYyA9IHN0YXQtXFx1MDAzZW10aW1lLnR2X25zZWM7XFxuIDcyNzpcXHRcXHR0bXAuc3R4X3JkZXZfbWFqb3IgPSBNQUpPUihzdGF0LVxcdTAwM2VyZGV2KTtcXG4gNzI4OlxcdFxcdHRtcC5zdHhfcmRldl9taW5vciA9IE1JTk9SKHN0YXQtXFx1MDAzZXJkZXYpO1xcbiA3Mjk6XFx0XFx0dG1wLnN0eF9kZXZfbWFqb3IgPSBNQUpPUihzdGF0LVxcdTAwM2VkZXYpO1xcbiA3MzA6XFx0XFx0dG1wLnN0eF9kZXZfbWlub3IgPSBNSU5PUihzdGF0LVxcdTAwM2VkZXYpO1xcbiA3MzE6XFx0XFx0dG1wLnN0eF9tbnRfaWQgPSBzdGF0LVxcdTAwM2VtbnRfaWQ7XFxuIDczMjpcXHRcXHR0bXAuc3R4X2Rpb19tZW1fYWxpZ24gPSBzdGF0LVxcdTAwM2VkaW9fbWVtX2FsaWduO1xcbiA3MzM6XFx0XFx0dG1wLnN0eF9kaW9fb2Zmc2V0X2FsaWduID0gc3RhdC1cXHUwMDNlZGlvX29mZnNldF9hbGlnbjtcXG4gNzM0OlxcdFxcdHRtcC5zdHhfZGlvX3JlYWRfb2Zmc2V0X2FsaWduID0gc3RhdC1cXHUwMDNlZGlvX3JlYWRfb2Zmc2V0X2FsaWduO1xcbiA3MzU6XFx0XFx0dG1wLnN0eF9zdWJ2b2wgPSBzdGF0LVxcdTAwM2VzdWJ2b2w7XFxuIDczNjpcXHRcXHR0bXAuc3R4X2F0b21pY193cml0ZV91bml0X21pbiA9IHN0YXQtXFx1MDAzZWF0b21pY193cml0ZV91bml0X21pbjtcXG4gNzM3OlxcdFxcdHRtcC5zdHhfYXRvbWljX3dyaXRlX3VuaXRfbWF4ID0gc3RhdC1cXHUwMDNlYXRvbWljX3dyaXRlX3VuaXRfbWF4O1xcbiA3Mzg6XFx0XFx0dG1wLnN0eF9hdG9taWNfd3JpdGVfc2VnbWVudHNfbWF4ID0gc3RhdC1cXHUwMDNlYXRvbWljX3dyaXRlX3NlZ21lbnRzX21heDtcXG4gNzM5OlxcdFxcdHRtcC5zdHhfYXRvbWljX3dyaXRlX3VuaXRfbWF4X29wdCA9IHN0YXQtXFx1MDAzZWF0b21pY193cml0ZV91bml0X21heF9vcHQ7XFxuIDc0MDpcXHRcXG4gNzQxOlxcdFxcdHJldHVybiBjb3B5X3RvX3VzZXIoYnVmZmVyLCBcXHUwMDI2dG1wLCBzaXplb2YodG1wKSkgPyAtRUZBVUxUIDogMDtcXG4gNzQyOlxcdH1cXG4gNzQzOlxcdFxcbiA3NDQ6XFx0aW50IGRvX3N0YXR4KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZmlsZW5hbWUsIHVuc2lnbmVkIGludCBmbGFncyxcXG4gNzQ1OlxcdFxcdCAgICAgdW5zaWduZWQgaW50IG1hc2ssIHN0cnVjdCBzdGF0eCBfX3VzZXIgKmJ1ZmZlcilcXG4gNzQ2OlxcdHtcXG4gNzQ3OlxcdFxcdHN0cnVjdCBrc3RhdCBzdGF0O1xcbiA3NDg6XFx0XFx0aW50IGVycm9yO1xcbiA3NDk6XFx0XFxuIDc1MDpcXHRcXHRpZiAobWFzayBcXHUwMDI2IFNUQVRYX19SRVNFUlZFRClcXG4gNzUxOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA3NTI6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IEFUX1NUQVRYX1NZTkNfVFlQRSkgPT0gQVRfU1RBVFhfU1lOQ19UWVBFKVxcbiA3NTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDc1NDpcXHRcXG4gNzU1OlxcdFxcdC8qXFxuIDc1NjpcXHRcXHQgKiBTVEFUWF9DSEFOR0VfQ09PS0lFIGlzIGtlcm5lbC1vbmx5IGZvciBub3cuIElnbm9yZSByZXF1ZXN0c1xcbiA3NTc6XFx0XFx0ICogZnJvbSB1c2VybGFuZC5cXG4gNzU4OlxcdFxcdCAqL1xcbiA3NTk6XFx0XFx0bWFzayBcXHUwMDI2PSB+U1RBVFhfQ0hBTkdFX0NPT0tJRTtcXG4gNzYwOlxcdFxcbiA3NjE6XFx0XFx0ZXJyb3IgPSB2ZnNfc3RhdHgoZGZkLCBmaWxlbmFtZSwgZmxhZ3MsIFxcdTAwMjZzdGF0LCBtYXNrKTtcXG4gNzYyOlxcdFxcdGlmIChlcnJvcilcXG4gNzYzOlxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4gNzY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQxMDo0Mjo1OS44NDA5MDgxOTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2MTIxODMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN0YXQgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgc3RhdGAgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQsIGFuZCBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlIGJlY2F1c2UgaW5jb3JyZWN0IGluaXRpYWxpemF0aW9uIGNhbiBsZWFkIHRvIHNlcmlvdXMgcHJvYmxlbXMsIGVzcGVjaWFsbHkgaW4ga2VybmVsIGNvZGUuIEZpcnN0LCBJIHNlZSB0aGF0IHRoZSB0ZW1wb3JhcnkgdmFyaWFibGUgYHRtcGAgaXMgYmVpbmcgZXhwbGljaXRseSB6ZXJvZWQgb3V0IHVzaW5nIGBtZW1zZXQoXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgLiBHb29kLCB0aGF0J3MgYSBzb2xpZCBzdGFydC4gQ2xlYXIgaW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbCB0byBhdm9pZCB1bmRlZmluZWQgYmVoYXZpb3IuXG5cbk5vdywgSSBhbHNvIGtub3cgdGhhdCBgdmZzX3N0YXR4YCAob3IgcG90ZW50aWFsbHkgaXRzIGVxdWl2YWxlbnQsIGB2ZnNfZ2V0YXR0cmApIGlzIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoaXMgc3RydWN0dXJlLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhhdCBmdW5jdGlvbiB0byBjb25maXJtIGV4YWN0bHkgaG93IGl0IGhhbmRsZXMgdGhlIGBzdGF0YCB2YXJpYWJsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQgYWxzbyB6ZXJvLWluaXRpYWxpemVzLCByZWluaXRpYWxpemVzLCBvciBtb2RpZmllcyBhbiBhbHJlYWR5IGV4aXN0aW5nIHN0cnVjdHVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIGBmcy9zdGF0LmNgIHNvdXJjZSBjb2RlIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYHZmc19zdGF0eGAgaW1wbGVtZW50YXRpb24uIEknbGwgZm9jdXMgb24gaG93IGl0IHRyZWF0cyB0aGUgYHN0YXRgIHN0cnVjdHVyZSB3aXRoaW4gaXRzIGxvZ2ljLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDM6MDIuNzAyMTMwMzg0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQ5NTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1zZXQuKnN0YXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc3RhdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3N0YXQuYz0xODE9aW50IHZmc19nZXRhdHRyX25vc2VjKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsXFxuLS1cXG5mcy9zdGF0LmMtMTg2LVxcbmZzL3N0YXQuYzoxODc6XFx0bWVtc2V0KHN0YXQsIDAsIHNpemVvZigqc3RhdCkpO1xcbmZzL3N0YXQuYy0xODgtXFx0c3RhdC1cXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfQkFTSUNfU1RBVFM7XFxuLS1cXG5mcy9zdGF0LmM9MzgzPXN0YXRpYyBpbnQgY3Bfb2xkX3N0YXQoc3RydWN0IGtzdGF0ICpzdGF0LCBzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQgX191c2VyICogc3RhdGJ1ZilcXG4tLVxcbmZzL3N0YXQuYy0zOTYtXFxuZnMvc3RhdC5jOjM5NzpcXHRtZW1zZXQoXFx1MDAyNnRtcCwgMCwgc2l6ZW9mKHN0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCkpO1xcbmZzL3N0YXQuYy0zOTgtXFx0dG1wLnN0X2RldiA9IG9sZF9lbmNvZGVfZGV2KHN0YXQtXFx1MDAzZWRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDEwOjQzOjAyLjc4MTYzMTY5OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NzUwNTE1MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgZXh0NGAgYGdldGF0dHJgIEF0b21pYyBXcml0ZSBVbml0IEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFkanVzdHMgaG93IGF0b21pYyB3cml0ZSB1bml0IGluZm9ybWF0aW9uIGlzIGhhbmRsZWQgd2l0aGluIGBleHQ0YCdzIGBnZXRhdHRyYCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGNoYW5naW5nIHRoZSB2YWx1ZSBwYXNzZWQgYXMgYHVuaXRfbWF4X29wdGAgdG8gdGhlIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlcygpYCBmdW5jdGlvbi4gQ3VycmVudGx5LCB0aGUgY29kZSBzZXRzIGBhd3VfbWF4YCB0byBgc2JpLVx1MDAzZXNfYXd1X21heGAgaWYgYXRvbWljIHdyaXRlcyBhcmUgc3VwcG9ydGVkIG9uIGFuIGlub2RlLCBvdGhlcndpc2UsIGBhd3VfbWF4YCBpcyB6ZXJvLiBUaGUgcGF0Y2ggcmVwbGFjZXMgYSBoYXJkY29kZWQgYDBgIHdpdGggdGhlIGluaXRpYWxpemVkIGBhd3VfbWF4YCB2YXJpYWJsZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBgMGAgb3IgYHNiaS1cdTAwM2VzX2F3dV9tYXhgLlxuXG5NeSBtYWluIGNvbmNlcm4gaGVyZSwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5LiBBcmUgd2UgcG90ZW50aWFsbHkgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2U/IFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbi4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBpc24ndCBhbiBpc3N1ZS4gYGF3dV9tYXhgIGlzICpkZWZpbml0ZWx5KiBpbml0aWFsaXplZC4gSXQncyBhIGxvY2FsIGB1bnNpZ25lZCBpbnRgIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYDBgIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gYW5kIHRoZW4gcG90ZW50aWFsbHkgdXBkYXRlZCB3aXRoIGEgdmFsaWQgdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBpbm9kZSdzIGNhcGFiaWxpdGllcy4gVGhlcmUncyBubyB1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhIGhlcmUuXG5cbkZ1cnRoZXJtb3JlLCB0aGUgcGF0aCB0byB1c2Vyc3BhY2UgaXMgY29tcGxldGVseSBzYWZlLiBUaGUgcmVsZXZhbnQgYHN0cnVjdCBrc3RhdGAgaXMgemVyb2VkIGJ5IHRoZSBgdmZzX2dldGF0dHJfbm9zZWNgIGZ1bmN0aW9uLCBndWFyYW50ZWVpbmcgaW5pdGlhbGl6YXRpb24uIEFuZCB0aGUgYHN0cnVjdCBzdGF0eGAgcGFzc2VkIHRvIHVzZXJzcGFjZSBpcyBleHBsaWNpdGx5IHplcm9lZCB3aXRoIGBtZW1zZXRgICpiZWZvcmUqIHRoZSBzY2FsYXIgdmFsdWUgaXMgY29waWVkLiBTbywgZXZlbiBpZiB0aGVyZSB3ZXJlIGFueSB3ZWlyZG5lc3MgaW50ZXJuYWxseSwgdGhlIHVzZXItZmFjaW5nIGRhdGEgc3RydWN0dXJlIGlzIGNsZWFuLiBObyBpbmZvcm1hdGlvbiBsZWFrIGlzIHBvc3NpYmxlLlxuXG5HaXZlbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29udmluY2VkIHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmlza3MgdGhhdCBLTVNBTiwgb3IgYW55IG90aGVyIG1lbW9yeSBzYW5pdGl6ZXIsIHdvdWxkIGRldGVjdC4gV2UgYXJlIG5vdCByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3ZSBhcmUgbm90IGxlYWtpbmcgaW5mb3JtYXRpb24sIGFuZCB0aGVyZSBhcmUgbm8gYnJhbmNoaW5nIG9wZXJhdGlvbnMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgcGF0Y2ggaXMgc2ltcGx5IHBhc3NpbmcgYW4gaW5pdGlhbGl6ZWQgdmFsdWUgdG8gdGhlIGBnZW5lcmljX2ZpbGxfc3RhdHhfYXRvbWljX3dyaXRlc2AgZnVuY3Rpb24uIFRoZSB1c2Ugb2YgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBJIHRoaW5rIHdlIGNhbiBzYWZlbHkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODUwMiwiT3V0cHV0VG9rZW5zIjoyNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMTA6NDM6MTEuNTMyMTUwMTUzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9nZXRhdHRyKClgIGluIGBmcy9leHQ0L2lub2RlLmNgIHRvIHBhc3MgYGF3dV9tYXhgIGluc3RlYWQgb2YgYDBgIGFzIHRoZSBgdW5pdF9tYXhfb3B0YCBwYXJhbWV0ZXIgdG8gYGdlbmVyaWNfZmlsbF9zdGF0eF9hdG9taWNfd3JpdGVzKClgLlxcblxcbjEuIFRoZSB2YXJpYWJsZSBgYXd1X21heGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIChgdW5zaWduZWQgaW50IGF3dV9taW4gPSAwLCBhd3VfbWF4ID0gMDtgKSBhbmQgb3B0aW9uYWxseSB1cGRhdGVkIGZyb20gYHNiaS1cXHUwMDNlc19hd3VfbWF4YC5cXG4yLiBUaGUgZGVzdGluYXRpb24gYHN0cnVjdCBrc3RhdGAgaXMgemVyby1pbml0aWFsaXplZCBpbiBgdmZzX2dldGF0dHJfbm9zZWMoKWAuXFxuMy4gV2hlbiByZXBvcnRpbmcgdG8gdXNlcnNwYWNlIHZpYSBgc3RhdHhgLCBgY3Bfc3RhdHgoKWAgaW5pdGlhbGl6ZXMgdGhlIGVudGlyZSBgc3RydWN0IHN0YXR4YCBzdHJ1Y3R1cmUgdXNpbmcgYG1lbXNldChcXHUwMDI2dG1wLCAwLCBzaXplb2YodG1wKSlgIGJlZm9yZSBwb3B1bGF0aW5nIGZpZWxkcyBhbmQgY2FsbGluZyBgY29weV90b191c2VyKClgLlxcbjQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwgbWVtb3J5IGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkLlxcblxcblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBleHQ0X2dldGF0dHIoKWAgaW4gYGZzL2V4dDQvaW5vZGUuY2AgdG8gcGFzcyBgYXd1X21heGAgaW5zdGVhZCBvZiBgMGAgYXMgdGhlIGB1bml0X21heF9vcHRgIHBhcmFtZXRlciB0byBgZ2VuZXJpY19maWxsX3N0YXR4X2F0b21pY193cml0ZXMoKWAuXFxuXFxuMS4gVGhlIHZhcmlhYmxlIGBhd3VfbWF4YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgKGB1bnNpZ25lZCBpbnQgYXd1X21pbiA9IDAsIGF3dV9tYXggPSAwO2ApIGFuZCBvcHRpb25hbGx5IHVwZGF0ZWQgZnJvbSBgc2JpLVxcdTAwM2VzX2F3dV9tYXhgLlxcbjIuIFRoZSBkZXN0aW5hdGlvbiBgc3RydWN0IGtzdGF0YCBpcyB6ZXJvLWluaXRpYWxpemVkIGluIGB2ZnNfZ2V0YXR0cl9ub3NlYygpYC5cXG4zLiBXaGVuIHJlcG9ydGluZyB0byB1c2Vyc3BhY2UgdmlhIGBzdGF0eGAsIGBjcF9zdGF0eCgpYCBpbml0aWFsaXplcyB0aGUgZW50aXJlIGBzdHJ1Y3Qgc3RhdHhgIHN0cnVjdHVyZSB1c2luZyBgbWVtc2V0KFxcdTAwMjZ0bXAsIDAsIHNpemVvZih0bXApKWAgYmVmb3JlIHBvcHVsYXRpbmcgZmllbGRzIGFuZCBjYWxsaW5nIGBjb3B5X3RvX3VzZXIoKWAuXFxuNC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow6c9wb[1] Phase: Succeeded StartedAt: 2026-09-10 10:43:22 +0000 UTC FinishedAt: 2026-09-10 10:43:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 10:43:22 +0000 UTC FinishedAt: 2026-09-10 10:43:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2] Phase: Succeeded StartedAt: 2026-09-10 10:43:22 +0000 UTC FinishedAt: 2026-09-10 14:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 10:43:22 +0000 UTC FinishedAt: 2026-09-10 14:27:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 10:43:22 +0000 UTC FinishedAt: 2026-09-10 10:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 10:43:22 +0000 UTC FinishedAt: 2026-09-10 10:43:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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-workflow6c9wb/series-workflow6c9wb-convert-artifact-2273248581/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 10:43:46 +0000 UTC FinishedAt: 2026-09-10 11:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 10:43:46 +0000 UTC FinishedAt: 2026-09-10 11:04:09 +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:*6c090be0-d705-4a42-9b7f-ceaaa3cf7a5f,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-workflow6c9wb/series-workflow6c9wb-convert-artifact-2273248581/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": "2cfa8840-9377-4def-8381-ceba0893983b", "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-workflow6c9wb/series-workflow6c9wb-build-action-780119019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 10:43:46 +0000 UTC FinishedAt: 2026-09-10 11:03:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6c090be0-d705-4a42-9b7f-ceaaa3cf7a5f,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-workflow6c9wb/series-workflow6c9wb-convert-artifact-2273248581/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": "2cfa8840-9377-4def-8381-ceba0893983b", "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-workflow6c9wb/series-workflow6c9wb-build-action-780119019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:04:09 +0000 UTC FinishedAt: 2026-09-10 11:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:04:09 +0000 UTC FinishedAt: 2026-09-10 11:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:04:09 +0000 UTC FinishedAt: 2026-09-10 11:04:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:04:09 +0000 UTC FinishedAt: 2026-09-10 11:04:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-workflow6c9wb/series-workflow6c9wb-convert-artifact-921227040/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:04:19 +0000 UTC FinishedAt: 2026-09-10 11:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:04:19 +0000 UTC FinishedAt: 2026-09-10 11:06:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2cfa8840-9377-4def-8381-ceba0893983b,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-workflow6c9wb/series-workflow6c9wb-build-action-780119019/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-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:06:09 +0000 UTC FinishedAt: 2026-09-10 11:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:06:09 +0000 UTC FinishedAt: 2026-09-10 11:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:06:09 +0000 UTC FinishedAt: 2026-09-10 11:22:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:06:09 +0000 UTC FinishedAt: 2026-09-10 11:22:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6c090be0-d705-4a42-9b7f-ceaaa3cf7a5f,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-workflow6c9wb/series-workflow6c9wb-convert-artifact-921227040/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": "2335e0ad-7ec0-481d-8d1a-3c6b7b64a33b", "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-workflow6c9wb/series-workflow6c9wb-build-action-1594475740/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:06:09 +0000 UTC FinishedAt: 2026-09-10 11:22:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6c090be0-d705-4a42-9b7f-ceaaa3cf7a5f,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-workflow6c9wb/series-workflow6c9wb-convert-artifact-921227040/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": "2335e0ad-7ec0-481d-8d1a-3c6b7b64a33b", "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-workflow6c9wb/series-workflow6c9wb-build-action-1594475740/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:22:38 +0000 UTC FinishedAt: 2026-09-10 11:22:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:22:38 +0000 UTC FinishedAt: 2026-09-10 11:22:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:22:38 +0000 UTC FinishedAt: 2026-09-10 11:24:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:22:38 +0000 UTC FinishedAt: 2026-09-10 11:24:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2335e0ad-7ec0-481d-8d1a-3c6b7b64a33b,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-workflow6c9wb/series-workflow6c9wb-build-action-1594475740/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-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:24:27 +0000 UTC FinishedAt: 2026-09-10 14:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:24:27 +0000 UTC FinishedAt: 2026-09-10 14:27:11 +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":["ext4_getattr","generic_fill_statx_atomic_writes"],"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:*2cfa8840-9377-4def-8381-ceba0893983b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2335e0ad-7ec0-481d-8d1a-3c6b7b64a33b,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-workflow6c9wb/series-workflow6c9wb-build-action-780119019/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-workflow6c9wb/series-workflow6c9wb-build-action-1594475740/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:24:27 +0000 UTC FinishedAt: 2026-09-10 11:24:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:24:27 +0000 UTC FinishedAt: 2026-09-10 11:24:31 +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":["ext4_getattr","generic_fill_statx_atomic_writes"],"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-workflow6c9wb/series-workflow6c9wb-convert-artifact-3899497337/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:24:27 +0000 UTC FinishedAt: 2026-09-10 11:24:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:24:27 +0000 UTC FinishedAt: 2026-09-10 11:24:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:24:27 +0000 UTC FinishedAt: 2026-09-10 11:24:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:24:37 +0000 UTC FinishedAt: 2026-09-10 14:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6c9wb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","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":["ext4_getattr","generic_fill_statx_atomic_writes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c68a982815dcce5464e3bf2a31ac94f5146c04ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"41c94697-e745-4567-8541-ab667eefb381","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-10 11:24:37 +0000 UTC FinishedAt: 2026-09-10 14:27:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2cfa8840-9377-4def-8381-ceba0893983b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2335e0ad-7ec0-481d-8d1a-3c6b7b64a33b,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-workflow6c9wb/series-workflow6c9wb-build-action-780119019/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-workflow6c9wb/series-workflow6c9wb-build-action-1594475740/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-workflow6c9wb/series-workflow6c9wb-convert-artifact-3899497337/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,}