Name: series-workflow8rrcq Phase: Succeeded StartedAt: 2026-07-25 13:54:46 +0000 UTC FinishedAt: 2026-07-25 16:28:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[0] Phase: Succeeded StartedAt: 2026-07-25 13:54:46 +0000 UTC FinishedAt: 2026-07-25 14:13:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 13:54:46 +0000 UTC FinishedAt: 2026-07-25 14:13:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK" ], "series_id": "ed738d28-113e-4159-8048-d1a7dd851c57" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ublk_ch_uring_cmd", "ublk_ch_uring_cmd_cb" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kX2NiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYCB3aXRoaW4gdGhlIHVzZXJzcGFjZSBibG9jayBkcml2ZXIgKGB1YmxrYCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBJL08gYnVmZmVycyBhcmUgY29uZmlndXJlZCBhbmQgY29tbWFuZHMgYXJlIGZpbGxlZCwgd2hpY2ggaXMgY29yZSBsb2dpYyBmb3IgdGhlIGRyaXZlci4gVGhlIGRyaXZlciBpcyBzb2Z0d2FyZS1vbmx5IGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBpb191cmluZyBjb21tYW5kcyBvbiB0aGUgdWJsayBjaGFyYWN0ZXIgZGV2aWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTkzMzE5NjBiZTc2OThjNTQ0NDY3ZjMyY2M3MmNiMjkzZGY5YmM2YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDE0OjExOjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuaW5kZXggYzJjMTFmMmEwMWU3MDEuLmQ5MzJhNDAyNjAzMTdmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbkBAIC0zMjk1LDkgJiM0MzszMjk1LDkgQEAgc3RhdGljIGludCB1YmxrX2ZldGNoKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHVibGtfZGV2aWNlICp1YixcbiBcdCAqIEZFVENILCBzbyBpdCBpcyBmaW5lIGV2ZW4gZm9yIElPX1VSSU5HX0ZfTk9OQkxPQ0suXG4gXHQgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2dWItXHUwMDNlbXV0ZXgpO1xuLVx0cmV0ID0gX191YmxrX2ZldGNoKGNtZCwgdWIsIGlvLCBxX2lkKTtcbiYjNDM7XHRyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBOVUxMKTtcbiBcdGlmICghcmV0KVxuLVx0XHRyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBOVUxMKTtcbiYjNDM7XHRcdHJldCA9IF9fdWJsa19mZXRjaChjbWQsIHViLCBpbywgcV9pZCk7XG4gXHRpZiAoIXJldClcbiBcdFx0dWJsa19tYXJrX2lvX3JlYWR5KHViLCBxX2lkLCBpbyk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2dWItXHUwMDNlbXV0ZXgpO1xuQEAgLTM0NDcsMTkgJiM0MzszNDQ3LDE4IEBAIHN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWRfbG9jYWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRpby1cdTAwM2VyZXMgPSByZXN1bHQ7XG4tXHRcdHJlcSA9IHVibGtfZmlsbF9pb19jbWQoaW8sIGNtZCk7XG4gXHRcdHJldCA9IHVibGtfY29uZmlnX2lvX2J1Zih1YiwgaW8sIGNtZCwgYWRkciwgXHUwMDI2YnVmX2lkeCk7XG4gXHRcdGlmIChidWZfaWR4ICE9IFVCTEtfSU5WQUxJRF9CVUZfSURYKVxuIFx0XHRcdGlvX2J1ZmZlcl91bnJlZ2lzdGVyX2J2ZWMoY21kLCBidWZfaWR4LCBpc3N1ZV9mbGFncyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdHJlcSA9IHVibGtfZmlsbF9pb19jbWQoaW8sIGNtZCk7XG4gXHRcdGNvbXBsID0gdWJsa19uZWVkX2NvbXBsZXRlX3JlcSh1YiwgaW8pO1xuIFxuIFx0XHRpZiAocmVxX29wKHJlcSkgPT0gUkVRX09QX1pPTkVfQVBQRU5EKVxuIFx0XHRcdHJlcS1cdTAwM2VfX3NlY3RvciA9IGFkZHI7XG4gXHRcdGlmIChjb21wbClcbiBcdFx0XHRfX3VibGtfY29tcGxldGVfcnEocmVxLCBpbywgdWJsa19kZXZfbmVlZF9tYXBfaW8odWIpLCBOVUxMKTtcbi1cbi1cdFx0aWYgKHJldClcbi1cdFx0XHRnb3RvIG91dDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFVCTEtfSU9fTkVFRF9HRVRfREFUQTpcbiBcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWRfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIHdpdGhpbiB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoYHVibGtgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEkvTyBidWZmZXJzIGFyZSBjb25maWd1cmVkIGFuZCBjb21tYW5kcyBhcmUgZmlsbGVkLCB3aGljaCBpcyBjb3JlIGxvZ2ljIGZvciB0aGUgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLW9ubHkgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSB1YmxrIGNoYXJhY3RlciBkZXZpY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5OTMzMTk2MGJlNzY5OGM1NDQ0NjdmMzJjYzcyY2IyOTNkZjliYzZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMTQ6MTE6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKaW5kZXggYzJjMTFmMmEwMWU3MDEuLmQ5MzJhNDAyNjAzMTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCkBAIC0zMjk1LDkgJiM0MzszMjk1LDkgQEAgc3RhdGljIGludCB1YmxrX2ZldGNoKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHVibGtfZGV2aWNlICp1YiwKIAkgKiBGRVRDSCwgc28gaXQgaXMgZmluZSBldmVuIGZvciBJT19VUklOR19GX05PTkJMT0NLLgogCSAqLwogCW11dGV4X2xvY2soJmFtcDt1Yi0mZ3Q7bXV0ZXgpOwotCXJldCA9IF9fdWJsa19mZXRjaChjbWQsIHViLCBpbywgcV9pZCk7CiYjNDM7CXJldCA9IHVibGtfY29uZmlnX2lvX2J1Zih1YiwgaW8sIGNtZCwgYnVmX2FkZHIsIE5VTEwpOwogCWlmICghcmV0KQotCQlyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBOVUxMKTsKJiM0MzsJCXJldCA9IF9fdWJsa19mZXRjaChjbWQsIHViLCBpbywgcV9pZCk7CiAJaWYgKCFyZXQpCiAJCXVibGtfbWFya19pb19yZWFkeSh1YiwgcV9pZCwgaW8pOwogCW11dGV4X3VubG9jaygmYW1wO3ViLSZndDttdXRleCk7CkBAIC0zNDQ3LDE5ICYjNDM7MzQ0NywxOCBAQCBzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwogCQlpby0mZ3Q7cmVzID0gcmVzdWx0OwotCQlyZXEgPSB1YmxrX2ZpbGxfaW9fY21kKGlvLCBjbWQpOwogCQlyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGFkZHIsICZhbXA7YnVmX2lkeCk7CiAJCWlmIChidWZfaWR4ICE9IFVCTEtfSU5WQUxJRF9CVUZfSURYKQogCQkJaW9fYnVmZmVyX3VucmVnaXN0ZXJfYnZlYyhjbWQsIGJ1Zl9pZHgsIGlzc3VlX2ZsYWdzKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQlyZXEgPSB1YmxrX2ZpbGxfaW9fY21kKGlvLCBjbWQpOwogCQljb21wbCA9IHVibGtfbmVlZF9jb21wbGV0ZV9yZXEodWIsIGlvKTsKIAogCQlpZiAocmVxX29wKHJlcSkgPT0gUkVRX09QX1pPTkVfQVBQRU5EKQogCQkJcmVxLSZndDtfX3NlY3RvciA9IGFkZHI7CiAJCWlmIChjb21wbCkKIAkJCV9fdWJsa19jb21wbGV0ZV9ycShyZXEsIGlvLCB1YmxrX2Rldl9uZWVkX21hcF9pbyh1YiksIE5VTEwpOwotCi0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKIAkJYnJlYWs7CiAJY2FzZSBVQkxLX0lPX05FRURfR0VUX0RBVEE6CiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgdWJsayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBtYWtpbmcgc29tZSBtb2RpZmljYXRpb25zIHRvIHRoZSBgdWJsa19kcnYuY2AgZmlsZSB3aXRoaW4gdGhlIGJsb2NrIGRyaXZlciBzdWJzeXN0ZW0uIFRoZSBrZXkgaGVyZSBpcyB0aGUgYHVibGtgIGRyaXZlciwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciBmcmFtZXdvcmsuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgcmVvcmRlcmluZyBvcGVyYXRpb25zIHdpdGhpbiB0d28ga2V5IGZ1bmN0aW9uczogYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYmVlbiBhIHN3YXAgaW4gdGhlIG9yZGVyIG9mIGBfX3VibGtfZmV0Y2hgIChvciBgdWJsa19maWxsX2lvX2NtZGApIGFuZCBgdWJsa19jb25maWdfaW9fYnVmYCBpbiB0aGVzZSBmdW5jdGlvbnMuCgpJbiBgdWJsa19mZXRjaGAsIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBjYWxsaW5nIGB1YmxrX2NvbmZpZ19pb19idWZgICphZnRlciogYSBwb3RlbnRpYWwgZWFybHkgcmV0dXJuLiBOb3csIGl0JiMzOTtzIGNhbGxlZCAqYmVmb3JlKi4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBjaGFuZ2UgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9yIHJlc291cmNlIGFsbG9jYXRpb24gZmxvdy4gVGhlIGNvZGUgY3VycmVudGx5IHNlZW1zIHRvIGNvbmZpZ3VyZSB0aGUgaW8gYnVmZmVyIGJlZm9yZSBhY3R1YWxseSBhdHRlbXB0aW5nIHRvIGZldGNoIHRoZSBkYXRhLgoKSW4gYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYCwgdGhlIGB1YmxrX2ZpbGxfaW9fY21kYCBmdW5jdGlvbiBpcyBub3cgYmVpbmcgY2FsbGVkIGFmdGVyIHRoZSBidWZmZXIgY29uZmlndXJhdGlvbiAoYW5kIGRlLXJlZ2lzdHJhdGlvbiksIHdoaWNoIGFwcGVhcnMgdG8gYmUgY29uZGl0aW9uYWwgb24gYSBgcmV0YCB2YWx1ZS4gVGhpcyBhbHNvIHN1Z2dlc3RzIHNvbWUgcmVzb3VyY2UgbWFuYWdlbWVudCBtb2RpZmljYXRpb25zLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2U/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgYnVnIGZpeCByZWxhdGVkIHRvIGJ1ZmZlciBoYW5kbGluZywgb3IgcGVyaGFwcyBhIHByZXBhcmF0aW9uIGZvciBhbm90aGVyIGZlYXR1cmU/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdmVyaWZ5IHRoZSBLY29uZmlnIHRvIHNlZSBob3cgdWJsayBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1VCTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSB1YmxrIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGhlIHN5c3RlbSYjMzk7cyBoaWdobGlnaHRpbmcgYEJMS19ERVZfVUJMS2AgYXMgYSBrZXkgY29uZmlndXJhdGlvbiBlbGVtZW50LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGNydWNpYWwsIHdoZW4gZGVhbGluZyB3aXRoIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9ucywgdG8ga25vdyB3aGF0IG90aGVyIGNvbXBvbmVudHMsIGRyaXZlcnMsIG9yIGtlcm5lbCBtb2R1bGVzIHJlbHkgb24gdGhpcyBzZXR0aW5nLiBJcyBpdCBhIGNvcmUgbW9kdWxlLCBhIGhlbHBlciwgb3Igc29tZXRoaW5nIGRlcGVuZGVudCBvbiBhIGJyb2FkZXIgYmxvY2sgSS9PIHN0YWNrPyBGaWd1cmluZyBvdXQgdGhlIGRlcGVuZGVuY3kgY2hhaW4gaXMgdGhlIGZvdW5kYXRpb25hbCBzdGVwIGJlZm9yZSBtb2RpZnlpbmcgb3IgZXZlbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGltcGFjdHMgdGhlIHN5c3RlbS4gVGhpcyBhbGxvd3MgbWUgdG8gZ2F1Z2UgdGhlIHBvdGVudGlhbCByaXBwbGUgZWZmZWN0IG9mIGFueSBjaGFuZ2VzLiBTbywgdGhlIHF1ZXN0aW9uIG5vdyBpczogV2hhdCBkb2VzIGBCTEtfREVWX1VCTEtgIGxlYW4gb24/IExldCYjMzk7cyBjaGVjayB0aGUgZGVwZW5kZW5jeSB0cmVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1VCTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQmxvY2sgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBibG9jayBkcml2ZXIgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGluc3RpbmN0aXZlbHkgZHJhd24gdG8gaXMgdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbGluZSAzMjggaW4gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYmxvY2sgZGV2aWNlIGRyaXZlciYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoYXQgbGluZSBwcm9iYWJseSBob3VzZXMgYSBjcnVjaWFsIGBjb25maWdgIHN0YXRlbWVudCwgYSBtZW51IHN0cnVjdHVyZSwgb3IgYSBjb25kaXRpb25hbCBgZGVwZW5kcyBvbmAgY2xhdXNlIHRoYXQgY29udHJvbHMgdGhlIHZpc2liaWxpdHkgYW5kIHNlbGVjdGlvbiBvZiBhc3NvY2lhdGVkIGZlYXR1cmVzLiBJIGJldCBJJiMzOTtsbCBmaW5kIHRoZSBwcmltYXJ5IGRyaXZlciYjMzk7cyBzeW1ib2wgb3IgYSBwYXJlbnQgc3ltYm9sIHRoYXQgcmV2ZWFscyB0aGUgY29uZmlndXJhdGlvbiYjMzk7cyBoaWVyYXJjaHkuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgdGhlIHZhcmlvdXMga25vYnMgSSBjYW4gdHVybiwgYW5kIHNlZSBob3cgdGhpcyBkcml2ZXIgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgaW5jbHVkZSB0aGUgUmFkb3MgYmxvY2sgZGV2aWNlLCB3aGljaCBzdHJpcGVzXG4gMzIxOlx0XHQgIGEgYmxvY2sgZGV2aWNlIG92ZXIgb2JqZWN0cyBzdG9yZWQgaW4gdGhlIENlcGggZGlzdHJpYnV0ZWQgb2JqZWN0XG4gMzIyOlx0XHQgIHN0b3JlLlxuIDMyMzpcdFxuIDMyNDpcdFx0ICBNb3JlIGluZm9ybWF0aW9uIGF0IGh0dHA6Ly9jZXBoLm5ld2RyZWFtLm5ldC8uXG4gMzI1Olx0XG4gMzI2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzI3Olx0XG4gMzI4Olx0Y29uZmlnIEJMS19ERVZfVUJMS1xuIDMyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuIDMzMDpcdFx0c2VsZWN0IElPX1VSSU5HXG4gMzMxOlx0XHRoZWxwXG4gMzMyOlx0XHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcbiAzMzM6XHRcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxuIDMzNDpcdFx0ICBkZWZpbml0aW9uIGlzbiYjMzk7dCBmaW5hbGl6ZWQgeWV0LCBhbmQgbWlnaHQgY2hhbmdlIGFjY29yZGluZyB0byBmdXR1cmVcbiAzMzU6XHRcdCAgcmVxdWlyZW1lbnQsIHNvIG1hcmsgaXMgYXMgZXhwZXJpbWVudGFsIG5vdy5cbiAzMzY6XHRcbiAzMzc6XHRjb25maWcgQkxLREVWX1VCTEtfTEVHQUNZX09QQ09ERVNcbiAzMzg6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcJiMzNDtcbiAzMzk6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9VQkxLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVUJMSyBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBgQkxLX0RFVl9VQkxLYCwgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyB3aXRoaW4gdGhlIFVCTEsgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIHN5c3RlbS4gTXkgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLiBUaGUgZmlyc3QgdGhpbmcgSSBhbHdheXMgZG8gaXMgY2hlY2sgdGhlaXIgc2NvcGUuIEdvb2QsIHRoZXkmIzM5O3JlIGJvdGggZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdGVkLCBidXQgaXQgYWx3YXlzIHBheXMgdG8gY29uZmlybS4gTm93LCBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgaW5pdGlhdGVkIGFuZCB3aGVyZSB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbS4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBvciBlbnRyeSBwb2ludHMgaW50byB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgdG8gc2VlIHdoYXQgdHJpZ2dlcnMgdGhlaXIgZXhlY3V0aW9uIGFuZCBob3cgdGhleSBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgVUJMSyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfZmV0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMyNDg9c3RhdGljIGludCB1YmxrX2NoZWNrX2ZldGNoX2J1Zihjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCBfX3U2NCBidWZfYWRkcilcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzI2My1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMjY0OnN0YXRpYyBpbnQgX191YmxrX2ZldGNoKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHVibGtfZGV2aWNlICp1YixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjY1LVx0XHRcdHN0cnVjdCB1YmxrX2lvICppbywgdTE2IHFfaWQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyODYtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzI4NzpzdGF0aWMgaW50IHVibGtfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyODgtXHRcdCAgICAgIHN0cnVjdCB1YmxrX2lvICppbywgX191NjQgYnVmX2FkZHIsIHUxNiBxX2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjk5LVx0aWYgKCFyZXQpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzMwMDpcdFx0cmV0ID0gX191YmxrX2ZldGNoKGNtZCwgdWIsIGlvLCBxX2lkKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzAxLVx0aWYgKCFyZXQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNTc9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM0MDYtXHRcdFx0Z290byBvdXQ7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzQwNzpcdFx0cmV0ID0gdWJsa19mZXRjaChjbWQsIHViLCBpbywgYWRkciwgcV9pZCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQwOC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzY4OT1zdGF0aWMgaW50IHVibGtfYmF0Y2hfcHJlcF9pbyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNzA4LVx0dWJsa19pb19sb2NrKGlvKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNzA5Olx0cmV0ID0gX191YmxrX2ZldGNoKGRhdGEtXHUwMDNlY21kLCBkYXRhLVx1MDAzZXViLCBpbywgdWJxLVx1MDAzZXFfaWQpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM3MTAtXHRpZiAoIXJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA5NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUgYHVibGtgIHN1YnN5c3RlbToKCioqRGlnZ2luZyBpbnRvIHRoZSB1YmxrIENvbW1hbmQgRmxvdyoqCgpSaWdodCwgc28gYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYCBpcyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIGFuZCBpdCYjMzk7cyBiZWluZyBjYWxsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbW1hbmQgZ2V0cyBoYW5kbGVkIGxvY2FsbHkgZm9yIGEgQy1SaW5nIHN1Ym1pc3Npb24uIE5vdywgd2hlcmUgaXMgKnRoYXQqIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQgZnJvbT8mIzM0OyBTaW5jZSBJIGtub3cgdGhlIGJhc2ljcyBvZiBgdWJsa2AgYWxyZWFkeSwgSSByZWFsaXplIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBhY3R1YWxseSBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uIE15IGFzc3VtcHRpb24gaXMgaXQgY2FsbHMgdGhlIGZ1bmN0aW9uIGB1YmxrX2ZldGNoYCwgYW5kIHNvIEkgd2lsbCB3YW50IHRvIGZvbGxvdyB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBiZWhhdmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJsa19jaF91cmluZ19jbWRfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzMzk9c3RhdGljIGJvb2wgdWJsa19nZXRfZGF0YShjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTYtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzM1NzpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzU4LVx0XHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1MTc9c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjMtXHRpZiAoIXR3LmNhbmNlbClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTI0Olx0XHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTI1LVx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1Mjk9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0MS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTQyOlx0cmV0dXJuIHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzM5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdHJ1Y3R1cmUgd2l0aGluIHRoZSBVYmxrIEZyYW1ld29yayoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgdWJsa2AgY29kZSBhbmQgdHJhY2luZyBob3cgY29tbWFuZHMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgYHVibGtfY2hfdXJpbmdfY21kYCBpcyB0aGUgZW50cnkgcG9pbnQsIHdoaWNoIG1ha2VzIHNlbnNlLiBOb3csIG15IG5leHQgdGhvdWdodCBpcywgbGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdG8gc2VlIGlmIHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCwgaWYgaXQgaXMsIG1lYW5zIGl0JiMzOTtzIGxvY2FsaXplZCB0byB0aGF0IHBhcnRpY3VsYXIgZmlsZS4gVGhhdCBtaWdodCBnaXZlIG1lIHNvbWUgY2x1ZXMgYWJvdXQgaXRzIHNjb3BlIGFuZCBob3cgZWFzaWx5IGl0IGNhbiBiZSBhY2Nlc3NlZCBvciBtb2RpZmllZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLiBUaGF0JiMzOTtzIHVzdWFsbHkgb25lIG9mIHRoZSBmaXJzdCB0aGluZ3MgSSBjaGVjayB3aGVuIEkmIzM5O20gZGVidWdnaW5nIG9yIGFuYWx5emluZyBhIG5ldyBjb2RlIHBhdGggbGlrZSB0aGlzLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzM5PXN0YXRpYyBib29sIHVibGtfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzU2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzNTc6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM1OC1cdFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNDg5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3QgKl9fdWJsa19jaGVja19hbmRfZ2V0X3JlcShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTE2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MTc6c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUxOC17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjMtXHRpZiAoIXR3LmNhbmNlbClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTI0Olx0XHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTI1LVx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjgtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyOTpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzAte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM3LVx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSkge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1Mzg6XHRcdGlvX3VyaW5nX2NtZF9jb21wbGV0ZV9pbl90YXNrKGNtZCwgdWJsa19jaF91cmluZ19jbWRfY2IpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzktXHRcdHJldHVybiAtRUlPQ0JRVUVVRUQ7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDEtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzU0MjpcdHJldHVybiB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQzLX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDE0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2NoX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNDUtXHQud3JpdGVfaXRlciA9IHVibGtfY2hfd3JpdGVfaXRlcixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTQ2Olx0LnVyaW5nX2NtZCA9IHVibGtfY2hfdXJpbmdfY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNDctXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjczMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHVibGsgaW9fdXJpbmcgQ29tbWFuZCBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdWJsa19jaF91cmluZ19jbWRgLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLCBidXQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYC51cmluZ19jbWRgIHdpdGhpbiBgdWJsa19jaF9mb3BzYC4gVGhhdCBtZWFucyB0aGlzIGB1YmxrX2NoX3VyaW5nX2NtZGAgZnVuY3Rpb24gaXMgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgaW9fdXJpbmcgY29tbWFuZHMgb24gdGhlIHVibGsgY2hhcmFjdGVyIGRldmljZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBlbnRyeSBwb2ludCBwcm9wZXJseS4gQXJlIHRoZXJlIG90aGVyIHBhdGhzIGluPwoKVGhlIGNvbnRleHQgc3VnZ2VzdHMgdGhlIHBhdGNoIHRvdWNoZXMgYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLCBidXQgYHVibGtfY2hfdXJpbmdfY21kYCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHN5bWJvbCB0byBmb2N1cyBvbi4KCkxldCBtZSBjb25maXJtIHRoYXQgYHVibGtfY2hfdXJpbmdfY21kYCBpcyBpbmRlZWQgc3RhdGljLiBZdXAsIGl0IGlzLiBOb3csIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkganVzdCByZWFkIHRoYXQgd2Ugc2hvdWxkIGdlbmVyYWxseSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBjb21waWxlciBjYW4gaW5saW5lIHRoZSBsYXR0ZXIsIGFuZCB0aGV5IHdvbiYjMzk7dCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuCgpCdXQgd2FpdCBhIG1pbnV0ZSwgYmVjYXVzZSBgdWJsa19jaF91cmluZ19jbWRgIGlzIGEgY2FsbGJhY2sgaW4gYGZpbGVfb3BlcmF0aW9uc2AgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIHNvIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQuIEl0IHdpbGwgaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MsIGV2ZW4gaWYgaXQmIzM5O3Mgc3RhdGljLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LiBIb3dldmVyLCB0aGUgcnVsZSBkb2VzIHN1Z2dlc3QgdGhhdCBpZiBub24tc3RhdGljIGFsdGVybmF0aXZlcyBleGlzdCwgd2Ugc2hvdWxkIGxlYW4gdG93YXJkIHRob3NlLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcyBpbiBgdWJsa19kcnYuY2AgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHVibGtfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIHVibGsgU3ltYm9sIERlZmluaXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgY29tcGFyZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGB1YmxrX2Agc3ltYm9sIHdpdGggYW5kIHdpdGhvdXQgdGhlIGBzdGF0aWNgIGtleXdvcmQuIFRoZSBjb3JlIG9mIHRoaXMgaXMgYWJvdXQgc2NvcGluZywgaXNuJiMzOTt0IGl0PyBUaGUgYF5gIGluZGljYXRlcyBzb21lIHNvcnQgb2Ygc3ltYm9sIGxvb2t1cCwgcHJvYmFibHkgaW4gdGhlIGNvZGUuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGFuIGludGVybmFsIG9yIGV4dGVybmFsIHN5bWJvbCB3aXRoIHJlZ2FyZCB0byBpdHMgbGlua2luZyBhbmQgdmlzaWJpbGl0eS4gIEEgYHN0YXRpYyBpbnQgdWJsa19gIGRlY2xhcmF0aW9uIGxpa2VseSBtZWFucyB0aGF0IHN5bWJvbCBpcyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQgb3Igc2NvcGUuIFdpdGhvdXQgYHN0YXRpY2AsIGl0JiMzOTtzIHBvdGVudGlhbGx5IHZpc2libGUgdG8gdGhlIGxpbmtlciBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBsYXJnZXIgcHJvamVjdCwgd2hpY2ggaXMgYSBtYWpvciBkaWZmZXJlbmNlLiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHRoaXMgbW9kdWxlIGlzIHN1cHBvc2VkIHRvIGJlIGludGVncmF0ZWQgb3IgaWYgdGhlcmUgYXJlIGFueSBjb2xsaXNpb25zIGxpa2VseS4gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiB0aGlzIHN5bWJvbCBpcyBkZWNsYXJlZCBpbiBtdWx0aXBsZSBwbGFjZXM/IExldCBtZSBjaGVjayB0aGUgc3ltYm9sJiMzOTtzIHVzYWdlIGFuZCB3aGVyZSBpdCBpcyBiZWluZyBkZWZpbmVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgcG90ZW50aWFsIGFtYmlndWl0eS4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjkxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkV4YW1pbmluZyB0aGUgVm9pZCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYF52b2lkYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBkcmF3biB0byB0aGF0IHN5bWJvbDsgaXQgc2lnbmlmaWVzIGFuIGVtcHR5IG9yIHVuZGVmaW5lZCBzdGF0ZSwgYSBsYWNrIG9mIGRhdGEsIG9yIHBvdGVudGlhbGx5IHRoZSBhYnNlbmNlIG9mIHNvbWV0aGluZyBlbnRpcmVseS4gTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIGRpZmZlcmVudCBjb250ZXh0cy4gSXMgdGhpcyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCByZXR1cm4gdHlwZXMsIGdlbmVyaWMgcGFyYW1ldGVycywgb3IgcGVyaGFwcyBldmVuIGEgcGhpbG9zb3BoaWNhbCBjb25jZXB0IHdpdGhpbiB0aGUgc3lzdGVtIEkmIzM5O20gY3VycmVudGx5IGRlYWxpbmcgd2l0aD8gSSBuZWVkIG1vcmUgY29udGV4dCB0byBwaW4gZG93biB0aGUgZXhhY3QgbWVhbmluZywgYnV0IG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgdGhlIG51bGwgb3Igbm9uZXhpc3RlbnQgcmVwcmVzZW50YXRpb24gd2UmIzM5O3JlIGdyYXBwbGluZyB3aXRoLiBXaGF0IGlzIGl0IHRoYXQmIzM5O3MgdW5kZWZpbmVkPyBXaGF0JiMzOTtzIHRoZSBzY29wZSBoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBvdGhlciBlbGVtZW50cy4gSSBhbSBhbHNvIGF3YXJlIHRoYXQgdGhlIGludGVycHJldGF0aW9uIHdpbGwgZGVwZW5kIG9uIHRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBvciBzeXN0ZW0gYXQgaGFuZC4gSSBuZWVkIGEgYnJvYWRlciBwaWN0dXJlIHRvIGdpdmUgaXQgdGhlIHByb3BlciB3ZWlnaHQuIFRoZSBgXmAgcHJlY2VkaW5nICYjMzQ7dm9pZCYjMzQ7IGFkZHMgYSBsYXllciBvZiBjb21wbGV4aXR5OyBpcyB0aGlzIGFuIGFkZHJlc3MsIGEgcG9pbnRlciwgYSBuZWdhdGlvbiwgYSByZWZlcmVuY2UsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IGluIHRoZSBzeW50YXggb2YgdGhlIGNvbnRleHQgSSYjMzk7bSB3b3JraW5nIGluPyBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgY29uY2VwdCBpcyBhcHBsaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZWZpbmluZyB0aGUgU2VhcmNoIENyaXRlcmlhKioKCk9rYXksIGxvb2tpbmcgYXQgdGhpcyBvdXRwdXQsIEkgdGhpbmsgdGhlIGBncmVwYCBleHByZXNzaW9uIEkgaW5pdGlhbGx5IHdyb3RlIG1pZ2h0IGJlIGEgbGl0dGxlICp0b28qIHNwZWNpZmljLiBJdCYjMzk7cyBwcm9iYWJseSByZWplY3Rpbmcgc29tZSB2YWxpZCByZXN1bHRzIHRoYXQgYXJlIGp1c3Qgc3VidGx5IGRpZmZlcmVudCB0aGFuIHdoYXQgSSBhbnRpY2lwYXRlZC4gSSBuZWVkIHRvIGxvb3NlbiB0aGUgc2VhcmNoIHBhcmFtZXRlcnMgYSBiaXQuIE1heWJlIEkgc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBzb21lIGZsZXhpYmlsaXR5IHdpdGggd2lsZGNhcmRzLCBjaGFyYWN0ZXIgY2xhc3Nlcywgb3IgZXZlbiBsb29rYXJvdW5kcyB0byBjYXB0dXJlIHRoZSBudWFuY2VzIG9mIHRoZSBkYXRhLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHdoYXQgbWlnaHQgYmUgdG9vIHBlcm1pc3NpdmUgYW5kIHdoYXQgbWlnaHQgZXhjbHVkZSB0aGUgZGF0YSBJIHdhbnQuIEl04oCZcyBhIGNsYXNzaWMgYmFsYW5jaW5nIGFjdCBiZXR3ZWVuIHByZWNpc2lvbiBhbmQgcmVjYWxsLCBpc27igJl0IGl0PyBUaW1lIHRvIGl0ZXJhdGUgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzMzk9c3RhdGljIGJvb2wgdWJsa19nZXRfZGF0YShjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTYtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzM1NzpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzU4LVx0XHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM0ODk9c3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdCAqX191YmxrX2NoZWNrX2FuZF9nZXRfcmVxKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MTYtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUxNzpzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTE4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyMy1cdGlmICghdHcuY2FuY2VsKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MjQ6XHRcdHJldCA9IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjUtXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyOC1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTI5OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzMC17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzctXHRpZiAodW5saWtlbHkoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpKSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUzODpcdFx0aW9fdXJpbmdfY21kX2NvbXBsZXRlX2luX3Rhc2soY21kLCB1YmxrX2NoX3VyaW5nX2NtZF9jYik7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzOS1cdFx0cmV0dXJuIC1FSU9DQlFVRVVFRDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0MS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTQyOlx0cmV0dXJuIHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDMtfVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00MTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY2hfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE0NS1cdC53cml0ZV9pdGVyID0gdWJsa19jaF93cml0ZV9pdGVyLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjQxNDY6XHQudXJpbmdfY21kID0gdWJsa19jaF91cmluZ19jbWQsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE0Ny1cdC5tbWFwID0gdWJsa19jaF9tbWFwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFVibGsgSU9fVVJJTkcgQ29tbWFuZHMqKgoKT2theSwgc28gdGhlIGZhY3QgdGhhdCBgdWJsa19jaF91cmluZ19jbWRgIGlzIGEgZnVuY3Rpb24gcG9pbnRlciBpcyBrZXkg4oCTIHRoYXQgbWVhbnMgaXQmIzM5O3Mgbm90IGdldHRpbmcgaW5saW5lZCwgd2hpY2ggb3BlbnMgaXQgdXAgdG8gZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCB0aG91Z2guIExldCYjMzk7cyBsb29rIGF0IGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAuIEkgaGFkIGEgaHVuY2ggdGhhdCBpdCBtaWdodCBiZSBpbmxpbmVkLCBidXQgaG9sZCBvbiwgaXQmIzM5O3MgYWxzbyBjYWxsZWQgdGhyb3VnaCBgdWJsa19jaF91cmluZ19jbWRfY2JgLCB3aGljaCB0aGVuIGdldHMgcGFzc2VkIHRvIGBpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFza2AuIFRoYXQgY29uZmlybXMgaXQsIGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAgaXNuJiMzOTt0IGlubGluZWQgZWl0aGVyLgoKVGhlcmVmb3JlLCBgdWJsa19jaF91cmluZ19jbWRgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfY2JgIGFyZSBkZWZpbml0ZSB0YXJnZXRzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgpOb3csIGJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSwgZG9lcyBgQkxLX0RFVl9VQkxLYCByZWx5IG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zPyBJdCBzZWVtcyBsaWtlIGl0IHNlbGVjdHMgYElPX1VSSU5HYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBjb25maXJtIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZSBhbmQgdmVyaWZ5IHRoZXJlIGFyZSBubyBoaWRkZW4gcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI4Olx0Y29uZmlnIEJMS19ERVZfVUJMS1xuIDMyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuIDMzMDpcdFx0c2VsZWN0IElPX1VSSU5HXG4gMzMxOlx0XHRoZWxwXG4gMzMyOlx0XHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcbiAzMzM6XHRcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxuIDMzNDpcdFx0ICBkZWZpbml0aW9uIGlzbiYjMzk7dCBmaW5hbGl6ZWQgeWV0LCBhbmQgbWlnaHQgY2hhbmdlIGFjY29yZGluZyB0byBmdXR1cmVcbiAzMzU6XHRcdCAgcmVxdWlyZW1lbnQsIHNvIG1hcmsgaXMgYXMgZXhwZXJpbWVudGFsIG5vdy5cbiAzMzY6XHRcbiAzMzc6XHRjb25maWcgQkxLREVWX1VCTEtfTEVHQUNZX09QQ09ERVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY0OAoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiA5NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB1YmxrIERyaXZlciBQYXRjaCBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBzaW1wbGljaXR5IG9mIGl0IHN0YW5kcyBvdXQuIEl0JiMzOTtzIHRhcmdldGVkIGF0IHRoZSBgdWJsa2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYC4gSSBzZWUgYEJMS19ERVZfVUJMS2AgaXMgdGhlIG9ubHkgY29uZmlnIG5lZWRlZCwgd2hpY2ggc2ltcGxpZmllcyB0aGUgaW5pdGlhbCBzZXR1cC4KClRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSByZW9yZGVyaW5nIG9mIGNhbGxzIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuIEluIGB1YmxrX2ZldGNoYCwgaXQmIzM5O3Mgc3dhcHBpbmcgdGhlIGV4ZWN1dGlvbiBvZiBgdWJsa19jb25maWdfaW9fYnVmYCBhbmQgYF9fdWJsa19mZXRjaGAuICBUaGVuLCB3aXRoIGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAsIGl0IHNoaWZ0cyB0aGUgcG9zaXRpb24gb2YgYHJlcSA9IHVibGtfZmlsbF9pb19jbWQoaW8sIGNtZClgICphZnRlciogdGhlIGB1YmxrX2NvbmZpZ19pb19idWZgIGNhbGwgYW5kIGl0cyBlcnJvciBjaGVja2luZy4gRXNzZW50aWFsbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byBhIGNvcmUgcGF0aCBvZiB0aGUgYmxvY2sgZHJpdmVyLiBUaGlzIHVzZXItc3BhY2UgYmxvY2sgZHJpdmVyIG1lYW5zIGl0IGRvZXNuJiMzOTt0IG5lZWQgYW55IHBoeXNpY2FsIGhhcmR3YXJlLCBzbyBpdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBtYWtlcyBpdCBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IHJlYXNvbmluZz8gVGhlIHJlb3JkZXJpbmcgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGFyb3VuZCBob3cgSS9PIGJ1ZmZlcnMgYXJlIGNvbmZpZ3VyZWQgKGB1YmxrX2NvbmZpZ19pb19idWZgKSBhbmQgY29tbWFuZHMgYXJlIGZpbGxlZCAoYHVibGtfZmlsbF9pb19jbWRgKSwgY291bGQgZXhwb3NlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMsIHBhcnRpY3VsYXJseSBhcm91bmQgZXJyb3IgaGFuZGxpbmcuCgpJIG5lZWQgdG8gY29uZmlybSB3aGljaCBzeW1ib2xzIGFyZSBlbnRyeSBwb2ludHMgYW5kIHRoaXMgcGF0Y2ggYWZmZWN0cy4gUmlnaHQsIEkgd2lsbCBmb2N1cyBvbiBgdWJsa19jaF91cmluZ19jbWRgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfY2JgIGFzIHRoZXkgYXJlIHJlbGV2YW50LgoKU28sIEkgdGhpbmsgSSYjMzk7bSByZWFkeSB0byBtb3ZlIG9uLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWRfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIHdpdGhpbiB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoYHVibGtgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEkvTyBidWZmZXJzIGFyZSBjb25maWd1cmVkIGFuZCBjb21tYW5kcyBhcmUgZmlsbGVkLCB3aGljaCBpcyBjb3JlIGxvZ2ljIGZvciB0aGUgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLW9ubHkgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSB1YmxrIGNoYXJhY3RlciBkZXZpY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kX2NiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYCB3aXRoaW4gdGhlIHVzZXJzcGFjZSBibG9jayBkcml2ZXIgKGB1YmxrYCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBJL08gYnVmZmVycyBhcmUgY29uZmlndXJlZCBhbmQgY29tbWFuZHMgYXJlIGZpbGxlZCwgd2hpY2ggaXMgY29yZSBsb2dpYyBmb3IgdGhlIGRyaXZlci4gVGhlIGRyaXZlciBpcyBzb2Z0d2FyZS1vbmx5IGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBpb191cmluZyBjb21tYW5kcyBvbiB0aGUgdWJsayBjaGFyYWN0ZXIgZGV2aWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTE6NTcuODU1MDc1MTU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2Mzg3ODgxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9VQkxLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgICBcInVibGtfY2hfdXJpbmdfY21kX2NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIHdpdGhpbiB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoYHVibGtgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEkvTyBidWZmZXJzIGFyZSBjb25maWd1cmVkIGFuZCBjb21tYW5kcyBhcmUgZmlsbGVkLCB3aGljaCBpcyBjb3JlIGxvZ2ljIGZvciB0aGUgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLW9ubHkgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSB1YmxrIGNoYXJhY3RlciBkZXZpY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjExOjU3Ljg1NTA4MjcwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAyMjE2Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTkzMzE5NjBiZTc2OThjNTQ0NDY3ZjMyY2M3MmNiMjkzZGY5YmM2YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNDoxMTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcXG5pbmRleCBjMmMxMWYyYTAxZTcwMS4uZDkzMmE0MDI2MDMxN2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXFxuQEAgLTMyOTUsOSArMzI5NSw5IEBAIHN0YXRpYyBpbnQgdWJsa19mZXRjaChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuIFxcdCAqIEZFVENILCBzbyBpdCBpcyBmaW5lIGV2ZW4gZm9yIElPX1VSSU5HX0ZfTk9OQkxPQ0suXFxuIFxcdCAqL1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZ1Yi1cXHUwMDNlbXV0ZXgpO1xcbi1cXHRyZXQgPSBfX3VibGtfZmV0Y2goY21kLCB1YiwgaW8sIHFfaWQpO1xcbitcXHRyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBOVUxMKTtcXG4gXFx0aWYgKCFyZXQpXFxuLVxcdFxcdHJldCA9IHVibGtfY29uZmlnX2lvX2J1Zih1YiwgaW8sIGNtZCwgYnVmX2FkZHIsIE5VTEwpO1xcbitcXHRcXHRyZXQgPSBfX3VibGtfZmV0Y2goY21kLCB1YiwgaW8sIHFfaWQpO1xcbiBcXHRpZiAoIXJldClcXG4gXFx0XFx0dWJsa19tYXJrX2lvX3JlYWR5KHViLCBxX2lkLCBpbyk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2dWItXFx1MDAzZW11dGV4KTtcXG5AQCAtMzQ0NywxOSArMzQ0NywxOCBAQCBzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdGlvLVxcdTAwM2VyZXMgPSByZXN1bHQ7XFxuLVxcdFxcdHJlcSA9IHVibGtfZmlsbF9pb19jbWQoaW8sIGNtZCk7XFxuIFxcdFxcdHJldCA9IHVibGtfY29uZmlnX2lvX2J1Zih1YiwgaW8sIGNtZCwgYWRkciwgXFx1MDAyNmJ1Zl9pZHgpO1xcbiBcXHRcXHRpZiAoYnVmX2lkeCAhPSBVQkxLX0lOVkFMSURfQlVGX0lEWClcXG4gXFx0XFx0XFx0aW9fYnVmZmVyX3VucmVnaXN0ZXJfYnZlYyhjbWQsIGJ1Zl9pZHgsIGlzc3VlX2ZsYWdzKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdHJlcSA9IHVibGtfZmlsbF9pb19jbWQoaW8sIGNtZCk7XFxuIFxcdFxcdGNvbXBsID0gdWJsa19uZWVkX2NvbXBsZXRlX3JlcSh1YiwgaW8pO1xcbiBcXG4gXFx0XFx0aWYgKHJlcV9vcChyZXEpID09IFJFUV9PUF9aT05FX0FQUEVORClcXG4gXFx0XFx0XFx0cmVxLVxcdTAwM2VfX3NlY3RvciA9IGFkZHI7XFxuIFxcdFxcdGlmIChjb21wbClcXG4gXFx0XFx0XFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKHViKSwgTlVMTCk7XFxuLVxcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgVUJMS19JT19ORUVEX0dFVF9EQVRBOlxcbiBcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMTo1OC4yNTgwMTkyOTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NDIzNTgzNTQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2NoX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19jaF91cmluZ19jbWRfY2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBgdWJsa19mZXRjaGAgYW5kIGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAgd2l0aGluIHRoZSB1c2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChgdWJsa2ApLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgSS9PIGJ1ZmZlcnMgYXJlIGNvbmZpZ3VyZWQgYW5kIGNvbW1hbmRzIGFyZSBmaWxsZWQsIHdoaWNoIGlzIGNvcmUgbG9naWMgZm9yIHRoZSBkcml2ZXIuIFRoZSBkcml2ZXIgaXMgc29mdHdhcmUtb25seSBhbmQgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgaW9fdXJpbmcgY29tbWFuZHMgb24gdGhlIHVibGsgY2hhcmFjdGVyIGRldmljZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTkzMzE5NjBiZTc2OThjNTQ0NDY3ZjMyY2M3MmNiMjkzZGY5YmM2YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDE0OjExOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5pbmRleCBjMmMxMWYyYTAxZTcwMS4uZDkzMmE0MDI2MDMxN2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbisrKyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuQEAgLTMyOTUsOSArMzI5NSw5IEBAIHN0YXRpYyBpbnQgdWJsa19mZXRjaChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4gXHQgKiBGRVRDSCwgc28gaXQgaXMgZmluZSBldmVuIGZvciBJT19VUklOR19GX05PTkJMT0NLLlxuIFx0ICovXG4gXHRtdXRleF9sb2NrKFx1MDAyNnViLVx1MDAzZW11dGV4KTtcbi1cdHJldCA9IF9fdWJsa19mZXRjaChjbWQsIHViLCBpbywgcV9pZCk7XG4rXHRyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBOVUxMKTtcbiBcdGlmICghcmV0KVxuLVx0XHRyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBOVUxMKTtcbitcdFx0cmV0ID0gX191YmxrX2ZldGNoKGNtZCwgdWIsIGlvLCBxX2lkKTtcbiBcdGlmICghcmV0KVxuIFx0XHR1YmxrX21hcmtfaW9fcmVhZHkodWIsIHFfaWQsIGlvKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ1Yi1cdTAwM2VtdXRleCk7XG5AQCAtMzQ0NywxOSArMzQ0NywxOCBAQCBzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0aW8tXHUwMDNlcmVzID0gcmVzdWx0O1xuLVx0XHRyZXEgPSB1YmxrX2ZpbGxfaW9fY21kKGlvLCBjbWQpO1xuIFx0XHRyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGFkZHIsIFx1MDAyNmJ1Zl9pZHgpO1xuIFx0XHRpZiAoYnVmX2lkeCAhPSBVQkxLX0lOVkFMSURfQlVGX0lEWClcbiBcdFx0XHRpb19idWZmZXJfdW5yZWdpc3Rlcl9idmVjKGNtZCwgYnVmX2lkeCwgaXNzdWVfZmxhZ3MpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHRyZXEgPSB1YmxrX2ZpbGxfaW9fY21kKGlvLCBjbWQpO1xuIFx0XHRjb21wbCA9IHVibGtfbmVlZF9jb21wbGV0ZV9yZXEodWIsIGlvKTtcbiBcbiBcdFx0aWYgKHJlcV9vcChyZXEpID09IFJFUV9PUF9aT05FX0FQUEVORClcbiBcdFx0XHRyZXEtXHUwMDNlX19zZWN0b3IgPSBhZGRyO1xuIFx0XHRpZiAoY29tcGwpXG4gXHRcdFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKHViKSwgTlVMTCk7XG4tXG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0Z290byBvdXQ7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBVQkxLX0lPX05FRURfR0VUX0RBVEE6XG4gXHRcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMTo1OC4yNTgwMjA0OTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTM3ODUyNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIHVibGsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgYHVibGtfZHJ2LmNgIGZpbGUgd2l0aGluIHRoZSBibG9jayBkcml2ZXIgc3Vic3lzdGVtLiBUaGUga2V5IGhlcmUgaXMgdGhlIGB1YmxrYCBkcml2ZXIsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdGhlIHVzZXJzcGFjZSBibG9jayBkcml2ZXIgZnJhbWV3b3JrLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgcmVvcmRlcmluZyBvcGVyYXRpb25zIHdpdGhpbiB0d28ga2V5IGZ1bmN0aW9uczogYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBiZWVuIGEgc3dhcCBpbiB0aGUgb3JkZXIgb2YgYF9fdWJsa19mZXRjaGAgKG9yIGB1YmxrX2ZpbGxfaW9fY21kYCkgYW5kIGB1YmxrX2NvbmZpZ19pb19idWZgIGluIHRoZXNlIGZ1bmN0aW9ucy5cblxuSW4gYHVibGtfZmV0Y2hgLCB0aGUgb3JpZ2luYWwgY29kZSB3YXMgY2FsbGluZyBgdWJsa19jb25maWdfaW9fYnVmYCAqYWZ0ZXIqIGEgcG90ZW50aWFsIGVhcmx5IHJldHVybi4gTm93LCBpdCdzIGNhbGxlZCAqYmVmb3JlKi4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBjaGFuZ2UgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9yIHJlc291cmNlIGFsbG9jYXRpb24gZmxvdy4gVGhlIGNvZGUgY3VycmVudGx5IHNlZW1zIHRvIGNvbmZpZ3VyZSB0aGUgaW8gYnVmZmVyIGJlZm9yZSBhY3R1YWxseSBhdHRlbXB0aW5nIHRvIGZldGNoIHRoZSBkYXRhLlxuXG5JbiBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLCB0aGUgYHVibGtfZmlsbF9pb19jbWRgIGZ1bmN0aW9uIGlzIG5vdyBiZWluZyBjYWxsZWQgYWZ0ZXIgdGhlIGJ1ZmZlciBjb25maWd1cmF0aW9uIChhbmQgZGUtcmVnaXN0cmF0aW9uKSwgd2hpY2ggYXBwZWFycyB0byBiZSBjb25kaXRpb25hbCBvbiBhIGByZXRgIHZhbHVlLiBUaGlzIGFsc28gc3VnZ2VzdHMgc29tZSByZXNvdXJjZSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2U/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgYnVnIGZpeCByZWxhdGVkIHRvIGJ1ZmZlciBoYW5kbGluZywgb3IgcGVyaGFwcyBhIHByZXBhcmF0aW9uIGZvciBhbm90aGVyIGZlYXR1cmU/IEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgdGhlIEtjb25maWcgdG8gc2VlIGhvdyB1YmxrIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjowNC4xOTU4NzUxMDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3Njc1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfVUJMS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjctXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MDQuMjU1NjQ3NDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTAxNDk1MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIHVibGsgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBzeXN0ZW0ncyBoaWdobGlnaHRpbmcgYEJMS19ERVZfVUJMS2AgYXMgYSBrZXkgY29uZmlndXJhdGlvbiBlbGVtZW50LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCwgd2hlbiBkZWFsaW5nIHdpdGggYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb25zLCB0byBrbm93IHdoYXQgb3RoZXIgY29tcG9uZW50cywgZHJpdmVycywgb3Iga2VybmVsIG1vZHVsZXMgcmVseSBvbiB0aGlzIHNldHRpbmcuIElzIGl0IGEgY29yZSBtb2R1bGUsIGEgaGVscGVyLCBvciBzb21ldGhpbmcgZGVwZW5kZW50IG9uIGEgYnJvYWRlciBibG9jayBJL08gc3RhY2s/IEZpZ3VyaW5nIG91dCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBpcyB0aGUgZm91bmRhdGlvbmFsIHN0ZXAgYmVmb3JlIG1vZGlmeWluZyBvciBldmVuIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaW1wYWN0cyB0aGUgc3lzdGVtLiBUaGlzIGFsbG93cyBtZSB0byBnYXVnZSB0aGUgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3Qgb2YgYW55IGNoYW5nZXMuIFNvLCB0aGUgcXVlc3Rpb24gbm93IGlzOiBXaGF0IGRvZXMgYEJMS19ERVZfVUJMS2AgbGVhbiBvbj8gTGV0J3MgY2hlY2sgdGhlIGRlcGVuZGVuY3kgdHJlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjEyOjA3LjE1NzE0NDUxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg1MjMyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9VQkxLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzE1PWNvbmZpZyBCTEtfREVWX1JCRFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyNy1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzI4OmNvbmZpZyBCTEtfREVWX1VCTEtcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjowNy4yNDkwMDM0NzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ4MDI5MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQmxvY2sgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYmxvY2sgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgZmlyc3QgcGxhY2UgSSdtIGluc3RpbmN0aXZlbHkgZHJhd24gdG8gaXMgdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBsaW5lIDMyOCBpbiBgZHJpdmVycy9ibG9jay9LY29uZmlnYC4gSXQncyBhbG1vc3QgY2VydGFpbiB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcGFydGljdWxhciBibG9jayBkZXZpY2UgZHJpdmVyJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0IGxpbmUgcHJvYmFibHkgaG91c2VzIGEgY3J1Y2lhbCBgY29uZmlnYCBzdGF0ZW1lbnQsIGEgbWVudSBzdHJ1Y3R1cmUsIG9yIGEgY29uZGl0aW9uYWwgYGRlcGVuZHMgb25gIGNsYXVzZSB0aGF0IGNvbnRyb2xzIHRoZSB2aXNpYmlsaXR5IGFuZCBzZWxlY3Rpb24gb2YgYXNzb2NpYXRlZCBmZWF0dXJlcy4gSSBiZXQgSSdsbCBmaW5kIHRoZSBwcmltYXJ5IGRyaXZlcidzIHN5bWJvbCBvciBhIHBhcmVudCBzeW1ib2wgdGhhdCByZXZlYWxzIHRoZSBjb25maWd1cmF0aW9uJ3MgaGllcmFyY2h5LiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgdGhlIHZhcmlvdXMga25vYnMgSSBjYW4gdHVybiwgYW5kIHNlZSBob3cgdGhpcyBkcml2ZXIgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjEyOjEwLjI5NzAzNDkwNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGluY2x1ZGUgdGhlIFJhZG9zIGJsb2NrIGRldmljZSwgd2hpY2ggc3RyaXBlc1xcbiAzMjE6XFx0XFx0ICBhIGJsb2NrIGRldmljZSBvdmVyIG9iamVjdHMgc3RvcmVkIGluIHRoZSBDZXBoIGRpc3RyaWJ1dGVkIG9iamVjdFxcbiAzMjI6XFx0XFx0ICBzdG9yZS5cXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0ICBNb3JlIGluZm9ybWF0aW9uIGF0IGh0dHA6Ly9jZXBoLm5ld2RyZWFtLm5ldC8uXFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMzI3OlxcdFxcbiAzMjg6XFx0Y29uZmlnIEJMS19ERVZfVUJMS1xcbiAzMjk6XFx0XFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuIDMzMDpcXHRcXHRzZWxlY3QgSU9fVVJJTkdcXG4gMzMxOlxcdFxcdGhlbHBcXG4gMzMyOlxcdFxcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xcbiAzMzM6XFx0XFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXFxuIDMzNDpcXHRcXHQgIGRlZmluaXRpb24gaXNuJ3QgZmluYWxpemVkIHlldCwgYW5kIG1pZ2h0IGNoYW5nZSBhY2NvcmRpbmcgdG8gZnV0dXJlXFxuIDMzNTpcXHRcXHQgIHJlcXVpcmVtZW50LCBzbyBtYXJrIGlzIGFzIGV4cGVyaW1lbnRhbCBub3cuXFxuIDMzNjpcXHRcXG4gMzM3OlxcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xcbiAzMzg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcXFwiXFxuIDMzOTpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfVUJMS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjoxMC4yOTcxMDY2NzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcwNzE1MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVUJMSyBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBDYWxscyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiwgYEJMS19ERVZfVUJMS2AsIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgd2l0aGluIHRoZSBVQkxLIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBzeXN0ZW0uIE15IGZvY3VzIGlzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYC4gVGhlIGZpcnN0IHRoaW5nIEkgYWx3YXlzIGRvIGlzIGNoZWNrIHRoZWlyIHNjb3BlLiBHb29kLCB0aGV5J3JlIGJvdGggZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdGVkLCBidXQgaXQgYWx3YXlzIHBheXMgdG8gY29uZmlybS4gTm93LCBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgaW5pdGlhdGVkIGFuZCB3aGVyZSB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbS4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIG9yIGVudHJ5IHBvaW50cyBpbnRvIHRoaXMgcGFydCBvZiB0aGUgY29kZSB0byBzZWUgd2hhdCB0cmlnZ2VycyB0aGVpciBleGVjdXRpb24gYW5kIGhvdyB0aGV5IGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBVQkxLIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MTMuNzY3ODI0NjUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDk0MjYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1YmxrX2ZldGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzI0OD1zdGF0aWMgaW50IHVibGtfY2hlY2tfZmV0Y2hfYnVmKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIsIF9fdTY0IGJ1Zl9hZGRyKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyNjMtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMyNjQ6c3RhdGljIGludCBfX3VibGtfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjY1LVxcdFxcdFxcdHN0cnVjdCB1YmxrX2lvICppbywgdTE2IHFfaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzI4Ni1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzI4NzpzdGF0aWMgaW50IHVibGtfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjg4LVxcdFxcdCAgICAgIHN0cnVjdCB1YmxrX2lvICppbywgX191NjQgYnVmX2FkZHIsIHUxNiBxX2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyOTktXFx0aWYgKCFyZXQpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzMDA6XFx0XFx0cmV0ID0gX191YmxrX2ZldGNoKGNtZCwgdWIsIGlvLCBxX2lkKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzMwMS1cXHRpZiAoIXJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzU3PXN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWRfbG9jYWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM0MDYtXFx0XFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM0MDc6XFx0XFx0cmV0ID0gdWJsa19mZXRjaChjbWQsIHViLCBpbywgYWRkciwgcV9pZCk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM0MDgtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNjg5PXN0YXRpYyBpbnQgdWJsa19iYXRjaF9wcmVwX2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzcwOC1cXHR1YmxrX2lvX2xvY2soaW8pO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNzA5OlxcdHJldCA9IF9fdWJsa19mZXRjaChkYXRhLVxcdTAwM2VjbWQsIGRhdGEtXFx1MDAzZXViLCBpbywgdWJxLVxcdTAwM2VxX2lkKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzcxMC1cXHRpZiAoIXJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MTMuODU4Nzc3NTA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjQwNTM1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUgYHVibGtgIHN1YnN5c3RlbTpcblxuKipEaWdnaW5nIGludG8gdGhlIHVibGsgQ29tbWFuZCBGbG93KipcblxuUmlnaHQsIHNvIGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAgaXMgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCBhbmQgaXQncyBiZWluZyBjYWxsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQncyB3aGVyZSB0aGUgY29tbWFuZCBnZXRzIGhhbmRsZWQgbG9jYWxseSBmb3IgYSBDLVJpbmcgc3VibWlzc2lvbi4gTm93LCB3aGVyZSBpcyAqdGhhdCogZnVuY3Rpb24gYmVpbmcgaW52b2tlZCBmcm9tP1wiIFNpbmNlIEkga25vdyB0aGUgYmFzaWNzIG9mIGB1YmxrYCBhbHJlYWR5LCBJIHJlYWxpemUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIGlzIGFjdHVhbGx5IGhhbmRsZWQgYnkgdGhlIHN5c3RlbS4gTXkgYXNzdW1wdGlvbiBpcyBpdCBjYWxscyB0aGUgZnVuY3Rpb24gYHVibGtfZmV0Y2hgLCBhbmQgc28gSSB3aWxsIHdhbnQgdG8gZm9sbG93IHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDk3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MTYuOTIyODMzMzY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQwMjAyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19jaF91cmluZ19jbWRfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzM5PXN0YXRpYyBib29sIHVibGtfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzNTc6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTgtXFx0XFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1MTc9c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyMy1cXHRpZiAoIXR3LmNhbmNlbClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyNDpcXHRcXHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyNS1cXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNTI5PXN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0MS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzU0MjpcXHRyZXR1cm4gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjoxNy4wMjY4NjAzMjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5Mzc1ODUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTdHJ1Y3R1cmUgd2l0aGluIHRoZSBVYmxrIEZyYW1ld29yayoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGUgYHVibGtgIGNvZGUgYW5kIHRyYWNpbmcgaG93IGNvbW1hbmRzIGFyZSBoYW5kbGVkLiBJIHNlZSB0aGF0IGB1YmxrX2NoX3VyaW5nX2NtZGAgaXMgdGhlIGVudHJ5IHBvaW50LCB3aGljaCBtYWtlcyBzZW5zZS4gTm93LCBteSBuZXh0IHRob3VnaHQgaXMsIGxldCdzIHF1aWNrbHkgY2hlY2sgdG8gc2VlIGlmIHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCwgaWYgaXQgaXMsIG1lYW5zIGl0J3MgbG9jYWxpemVkIHRvIHRoYXQgcGFydGljdWxhciBmaWxlLiBUaGF0IG1pZ2h0IGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCBpdHMgc2NvcGUgYW5kIGhvdyBlYXNpbHkgaXQgY2FuIGJlIGFjY2Vzc2VkIG9yIG1vZGlmaWVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIFRoYXQncyB1c3VhbGx5IG9uZSBvZiB0aGUgZmlyc3QgdGhpbmdzIEkgY2hlY2sgd2hlbiBJJ20gZGVidWdnaW5nIG9yIGFuYWx5emluZyBhIG5ldyBjb2RlIHBhdGggbGlrZSB0aGlzLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjoyMC41MjA2MjE0MjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTg3NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfY2hfdXJpbmdfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzMzOT1zdGF0aWMgYm9vbCB1YmxrX2dldF9kYXRhKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCB1YmxrX2lvICppbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzU2LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMzU3OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWRfbG9jYWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzU4LVxcdFxcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNDg5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3QgKl9fdWJsa19jaGVja19hbmRfZ2V0X3JlcShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MTYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MTc6c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MTgte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjMtXFx0aWYgKCF0dy5jYW5jZWwpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MjQ6XFx0XFx0cmV0ID0gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjUtXFx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyOC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyOTpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTMwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM3LVxcdGlmICh1bmxpa2VseShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpKSB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1Mzg6XFx0XFx0aW9fdXJpbmdfY21kX2NvbXBsZXRlX2luX3Rhc2soY21kLCB1YmxrX2NoX3VyaW5nX2NtZF9jYik7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzktXFx0XFx0cmV0dXJuIC1FSU9DQlFVRVVFRDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQxLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTQyOlxcdHJldHVybiB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0My19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDE0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2NoX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE0NS1cXHQud3JpdGVfaXRlciA9IHVibGtfY2hfd3JpdGVfaXRlcixcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDE0NjpcXHQudXJpbmdfY21kID0gdWJsa19jaF91cmluZ19jbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNDctXFx0Lm1tYXAgPSB1YmxrX2NoX21tYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjEyOjIwLjU3NjYxMjg2NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjEzOTQ2MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdWJsayBpb191cmluZyBDb21tYW5kIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdWJsa19jaF91cmluZ19jbWRgLiBJdCdzIGRlZmluZWQgYXMgYHN0YXRpY2AsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGAudXJpbmdfY21kYCB3aXRoaW4gYHVibGtfY2hfZm9wc2AuIFRoYXQgbWVhbnMgdGhpcyBgdWJsa19jaF91cmluZ19jbWRgIGZ1bmN0aW9uIGlzIHRoZSBhY3R1YWwgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSB1YmxrIGNoYXJhY3RlciBkZXZpY2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgZW50cnkgcG9pbnQgcHJvcGVybHkuIEFyZSB0aGVyZSBvdGhlciBwYXRocyBpbj9cblxuVGhlIGNvbnRleHQgc3VnZ2VzdHMgdGhlIHBhdGNoIHRvdWNoZXMgYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLCBidXQgYHVibGtfY2hfdXJpbmdfY21kYCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHN5bWJvbCB0byBmb2N1cyBvbi5cblxuTGV0IG1lIGNvbmZpcm0gdGhhdCBgdWJsa19jaF91cmluZ19jbWRgIGlzIGluZGVlZCBzdGF0aWMuIFl1cCwgaXQgaXMuIE5vdywgdGhhdCdzIGludGVyZXN0aW5nLiBJIGp1c3QgcmVhZCB0aGF0IHdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgY29tcGlsZXIgY2FuIGlubGluZSB0aGUgbGF0dGVyLCBhbmQgdGhleSB3b24ndCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuXG5cbkJ1dCB3YWl0IGEgbWludXRlLCBiZWNhdXNlIGB1YmxrX2NoX3VyaW5nX2NtZGAgaXMgYSBjYWxsYmFjayBpbiBgZmlsZV9vcGVyYXRpb25zYCBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgc28gaXQgKndvbid0KiBiZSBpbmxpbmVkLiBJdCB3aWxsIGhhdmUgYSBkaXN0aW5jdCBhZGRyZXNzLCBldmVuIGlmIGl0J3Mgc3RhdGljLiBUaGF0J3MgYSBrZXkgcG9pbnQuIEhvd2V2ZXIsIHRoZSBydWxlIGRvZXMgc3VnZ2VzdCB0aGF0IGlmIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzIGV4aXN0LCB3ZSBzaG91bGQgbGVhbiB0b3dhcmQgdGhvc2UuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzIGluIGB1YmxrX2Rydi5jYCB0aGF0IGFyZSByZWxldmFudCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjEyOjI1Ljc5MDU2MTMxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyODIzMTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgdWJsa19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjoyNS44NDc4NTA3NTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMTU1MjI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB1YmxrIFN5bWJvbCBEZWZpbml0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBjb21wYXJlIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgYHVibGtfYCBzeW1ib2wgd2l0aCBhbmQgd2l0aG91dCB0aGUgYHN0YXRpY2Aga2V5d29yZC4gVGhlIGNvcmUgb2YgdGhpcyBpcyBhYm91dCBzY29waW5nLCBpc24ndCBpdD8gVGhlIGBeYCBpbmRpY2F0ZXMgc29tZSBzb3J0IG9mIHN5bWJvbCBsb29rdXAsIHByb2JhYmx5IGluIHRoZSBjb2RlLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGFuIGludGVybmFsIG9yIGV4dGVybmFsIHN5bWJvbCB3aXRoIHJlZ2FyZCB0byBpdHMgbGlua2luZyBhbmQgdmlzaWJpbGl0eS4gIEEgYHN0YXRpYyBpbnQgdWJsa19gIGRlY2xhcmF0aW9uIGxpa2VseSBtZWFucyB0aGF0IHN5bWJvbCBpcyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQgb3Igc2NvcGUuIFdpdGhvdXQgYHN0YXRpY2AsIGl0J3MgcG90ZW50aWFsbHkgdmlzaWJsZSB0byB0aGUgbGlua2VyIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGxhcmdlciBwcm9qZWN0LCB3aGljaCBpcyBhIG1ham9yIGRpZmZlcmVuY2UuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgdGhpcyBtb2R1bGUgaXMgc3VwcG9zZWQgdG8gYmUgaW50ZWdyYXRlZCBvciBpZiB0aGVyZSBhcmUgYW55IGNvbGxpc2lvbnMgbGlrZWx5LiBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoaXMgc3ltYm9sIGlzIGRlY2xhcmVkIGluIG11bHRpcGxlIHBsYWNlcz8gTGV0IG1lIGNoZWNrIHRoZSBzeW1ib2wncyB1c2FnZSBhbmQgd2hlcmUgaXQgaXMgYmVpbmcgZGVmaW5lZCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHBvdGVudGlhbCBhbWJpZ3VpdHkuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MjkuMzU5NDA1MDQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ3Njk2NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjoyOS40MTk4OTA4NTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMDQzMTAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipFeGFtaW5pbmcgdGhlIFZvaWQqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgXnZvaWRgLiBJJ20gaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhhdCBzeW1ib2w7IGl0IHNpZ25pZmllcyBhbiBlbXB0eSBvciB1bmRlZmluZWQgc3RhdGUsIGEgbGFjayBvZiBkYXRhLCBvciBwb3RlbnRpYWxseSB0aGUgYWJzZW5jZSBvZiBzb21ldGhpbmcgZW50aXJlbHkuIE15IG1pbmQgaXMgYWxyZWFkeSByYWNpbmcgdGhyb3VnaCBkaWZmZXJlbnQgY29udGV4dHMuIElzIHRoaXMgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgcmV0dXJuIHR5cGVzLCBnZW5lcmljIHBhcmFtZXRlcnMsIG9yIHBlcmhhcHMgZXZlbiBhIHBoaWxvc29waGljYWwgY29uY2VwdCB3aXRoaW4gdGhlIHN5c3RlbSBJJ20gY3VycmVudGx5IGRlYWxpbmcgd2l0aD8gSSBuZWVkIG1vcmUgY29udGV4dCB0byBwaW4gZG93biB0aGUgZXhhY3QgbWVhbmluZywgYnV0IG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgdGhlIG51bGwgb3Igbm9uZXhpc3RlbnQgcmVwcmVzZW50YXRpb24gd2UncmUgZ3JhcHBsaW5nIHdpdGguIFdoYXQgaXMgaXQgdGhhdCdzIHVuZGVmaW5lZD8gV2hhdCdzIHRoZSBzY29wZSBoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBvdGhlciBlbGVtZW50cy4gSSBhbSBhbHNvIGF3YXJlIHRoYXQgdGhlIGludGVycHJldGF0aW9uIHdpbGwgZGVwZW5kIG9uIHRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBvciBzeXN0ZW0gYXQgaGFuZC4gSSBuZWVkIGEgYnJvYWRlciBwaWN0dXJlIHRvIGdpdmUgaXQgdGhlIHByb3BlciB3ZWlnaHQuIFRoZSBgXmAgcHJlY2VkaW5nIFwidm9pZFwiIGFkZHMgYSBsYXllciBvZiBjb21wbGV4aXR5OyBpcyB0aGlzIGFuIGFkZHJlc3MsIGEgcG9pbnRlciwgYSBuZWdhdGlvbiwgYSByZWZlcmVuY2UsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IGluIHRoZSBzeW50YXggb2YgdGhlIGNvbnRleHQgSSdtIHdvcmtpbmcgaW4/IE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBjb25jZXB0IGlzIGFwcGxpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjEyOjMzLjAyMDMyMzg4NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNzIxNzYwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MzQuMjQ3NTQ3NzMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjY1NDA4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlJlZmluaW5nIHRoZSBTZWFyY2ggQ3JpdGVyaWEqKlxuXG5Pa2F5LCBsb29raW5nIGF0IHRoaXMgb3V0cHV0LCBJIHRoaW5rIHRoZSBgZ3JlcGAgZXhwcmVzc2lvbiBJIGluaXRpYWxseSB3cm90ZSBtaWdodCBiZSBhIGxpdHRsZSAqdG9vKiBzcGVjaWZpYy4gSXQncyBwcm9iYWJseSByZWplY3Rpbmcgc29tZSB2YWxpZCByZXN1bHRzIHRoYXQgYXJlIGp1c3Qgc3VidGx5IGRpZmZlcmVudCB0aGFuIHdoYXQgSSBhbnRpY2lwYXRlZC4gSSBuZWVkIHRvIGxvb3NlbiB0aGUgc2VhcmNoIHBhcmFtZXRlcnMgYSBiaXQuIE1heWJlIEkgc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBzb21lIGZsZXhpYmlsaXR5IHdpdGggd2lsZGNhcmRzLCBjaGFyYWN0ZXIgY2xhc3Nlcywgb3IgZXZlbiBsb29rYXJvdW5kcyB0byBjYXB0dXJlIHRoZSBudWFuY2VzIG9mIHRoZSBkYXRhLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjYXJlZnVsbHkgY29uc2lkZXIgd2hhdCBtaWdodCBiZSB0b28gcGVybWlzc2l2ZSBhbmQgd2hhdCBtaWdodCBleGNsdWRlIHRoZSBkYXRhIEkgd2FudC4gSXTigJlzIGEgY2xhc3NpYyBiYWxhbmNpbmcgYWN0IGJldHdlZW4gcHJlY2lzaW9uIGFuZCByZWNhbGwsIGlzbuKAmXQgaXQ/IFRpbWUgdG8gaXRlcmF0ZSBvbiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MzcuNTE0MDkxMDcxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDk5NzU2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzM5PXN0YXRpYyBib29sIHVibGtfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzNTc6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTgtXFx0XFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM0ODk9c3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdCAqX191YmxrX2NoZWNrX2FuZF9nZXRfcmVxKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUxNi1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUxNzpzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUxOC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyMy1cXHRpZiAoIXR3LmNhbmNlbClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyNDpcXHRcXHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyNS1cXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTI4LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTI5OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzAte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzctXFx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUzODpcXHRcXHRpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFzayhjbWQsIHVibGtfY2hfdXJpbmdfY21kX2NiKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzOS1cXHRcXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDEtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NDI6XFx0cmV0dXJuIHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQzLX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00MTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY2hfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTQ1LVxcdC53cml0ZV9pdGVyID0gdWJsa19jaF93cml0ZV9pdGVyLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTQ2OlxcdC51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE0Ny1cXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MzcuODY0MDcwNTUyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTIxNzcxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgVWJsayBJT19VUklORyBDb21tYW5kcyoqXG5cbk9rYXksIHNvIHRoZSBmYWN0IHRoYXQgYHVibGtfY2hfdXJpbmdfY21kYCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaXMga2V5IOKAkyB0aGF0IG1lYW5zIGl0J3Mgbm90IGdldHRpbmcgaW5saW5lZCwgd2hpY2ggb3BlbnMgaXQgdXAgdG8gZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMsIHRob3VnaC4gTGV0J3MgbG9vayBhdCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLiBJIGhhZCBhIGh1bmNoIHRoYXQgaXQgbWlnaHQgYmUgaW5saW5lZCwgYnV0IGhvbGQgb24sIGl0J3MgYWxzbyBjYWxsZWQgdGhyb3VnaCBgdWJsa19jaF91cmluZ19jbWRfY2JgLCB3aGljaCB0aGVuIGdldHMgcGFzc2VkIHRvIGBpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFza2AuIFRoYXQgY29uZmlybXMgaXQsIGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAgaXNuJ3QgaW5saW5lZCBlaXRoZXIuXG5cblRoZXJlZm9yZSwgYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2NiYCBhcmUgZGVmaW5pdGUgdGFyZ2V0cyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUsIGRvZXMgYEJMS19ERVZfVUJMS2AgcmVseSBvbiBvdGhlciBjb25maWd1cmF0aW9ucz8gSXQgc2VlbXMgbGlrZSBpdCBzZWxlY3RzIGBJT19VUklOR2AsIHdoaWNoIGlzIGV4cGVjdGVkLiBJIG5lZWQgdG8gY29uZmlybSBkZXBlbmRlbmNpZXMuIEknbSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZSBhbmQgdmVyaWZ5IHRoZXJlIGFyZSBubyBoaWRkZW4gcmVxdWlyZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTU5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjEyOjQyLjUxNjI1MDU2OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzI4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzI4OlxcdGNvbmZpZyBCTEtfREVWX1VCTEtcXG4gMzI5OlxcdFxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXFxcIlxcbiAzMzA6XFx0XFx0c2VsZWN0IElPX1VSSU5HXFxuIDMzMTpcXHRcXHRoZWxwXFxuIDMzMjpcXHRcXHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcXG4gMzMzOlxcdFxcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxcbiAzMzQ6XFx0XFx0ICBkZWZpbml0aW9uIGlzbid0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxcbiAzMzU6XFx0XFx0ICByZXF1aXJlbWVudCwgc28gbWFyayBpcyBhcyBleHBlcmltZW50YWwgbm93LlxcbiAzMzY6XFx0XFxuIDMzNzpcXHRjb25maWcgQkxLREVWX1VCTEtfTEVHQUNZX09QQ09ERVNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6NDIuNTE2MzIyNTg5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4OTk4ODg5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB1YmxrIERyaXZlciBQYXRjaCBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgc2ltcGxpY2l0eSBvZiBpdCBzdGFuZHMgb3V0LiBJdCdzIHRhcmdldGVkIGF0IHRoZSBgdWJsa2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYC4gSSBzZWUgYEJMS19ERVZfVUJMS2AgaXMgdGhlIG9ubHkgY29uZmlnIG5lZWRlZCwgd2hpY2ggc2ltcGxpZmllcyB0aGUgaW5pdGlhbCBzZXR1cC5cblxuVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIHJlb3JkZXJpbmcgb2YgY2FsbHMgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gSW4gYHVibGtfZmV0Y2hgLCBpdCdzIHN3YXBwaW5nIHRoZSBleGVjdXRpb24gb2YgYHVibGtfY29uZmlnX2lvX2J1ZmAgYW5kIGBfX3VibGtfZmV0Y2hgLiAgVGhlbiwgd2l0aCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLCBpdCBzaGlmdHMgdGhlIHBvc2l0aW9uIG9mIGByZXEgPSB1YmxrX2ZpbGxfaW9fY21kKGlvLCBjbWQpYCAqYWZ0ZXIqIHRoZSBgdWJsa19jb25maWdfaW9fYnVmYCBjYWxsIGFuZCBpdHMgZXJyb3IgY2hlY2tpbmcuIEVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gYSBjb3JlIHBhdGggb2YgdGhlIGJsb2NrIGRyaXZlci4gVGhpcyB1c2VyLXNwYWNlIGJsb2NrIGRyaXZlciBtZWFucyBpdCBkb2Vzbid0IG5lZWQgYW55IHBoeXNpY2FsIGhhcmR3YXJlLCBzbyBpdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBtYWtlcyBpdCBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTXkgcmVhc29uaW5nPyBUaGUgcmVvcmRlcmluZyBvZiB0aGVzZSBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgYXJvdW5kIGhvdyBJL08gYnVmZmVycyBhcmUgY29uZmlndXJlZCAoYHVibGtfY29uZmlnX2lvX2J1ZmApIGFuZCBjb21tYW5kcyBhcmUgZmlsbGVkIChgdWJsa19maWxsX2lvX2NtZGApLCBjb3VsZCBleHBvc2Ugc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycywgcGFydGljdWxhcmx5IGFyb3VuZCBlcnJvciBoYW5kbGluZy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gd2hpY2ggc3ltYm9scyBhcmUgZW50cnkgcG9pbnRzIGFuZCB0aGlzIHBhdGNoIGFmZmVjdHMuIFJpZ2h0LCBJIHdpbGwgZm9jdXMgb24gYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2NiYCBhcyB0aGV5IGFyZSByZWxldmFudC5cblxuU28sIEkgdGhpbmsgSSdtIHJlYWR5IHRvIG1vdmUgb24uIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY0OCwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjo1Mi40MTYyMTMzNzFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzYzODYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9VQkxLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgICBcInVibGtfY2hfdXJpbmdfY21kX2NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIHdpdGhpbiB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoYHVibGtgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEkvTyBidWZmZXJzIGFyZSBjb25maWd1cmVkIGFuZCBjb21tYW5kcyBhcmUgZmlsbGVkLCB3aGljaCBpcyBjb3JlIGxvZ2ljIGZvciB0aGUgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLW9ubHkgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSB1YmxrIGNoYXJhY3RlciBkZXZpY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9VQkxLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgICBcInVibGtfY2hfdXJpbmdfY21kX2NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIHdpdGhpbiB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoYHVibGtgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEkvTyBidWZmZXJzIGFyZSBjb25maWd1cmVkIGFuZCBjb21tYW5kcyBhcmUgZmlsbGVkLCB3aGljaCBpcyBjb3JlIGxvZ2ljIGZvciB0aGUgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLW9ubHkgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSB1YmxrIGNoYXJhY3RlciBkZXZpY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rrcq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 13:54:46 +0000 UTC FinishedAt: 2026-07-25 14:12:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "248951ddc14de84de3910f9b13f51491a8cd91df", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_UBLK" ], "series_id": "ed738d28-113e-4159-8048-d1a7dd851c57" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ublk_ch_uring_cmd", "ublk_ch_uring_cmd_cb" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kX2NiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYCB3aXRoaW4gdGhlIHVzZXJzcGFjZSBibG9jayBkcml2ZXIgKGB1YmxrYCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBJL08gYnVmZmVycyBhcmUgY29uZmlndXJlZCBhbmQgY29tbWFuZHMgYXJlIGZpbGxlZCwgd2hpY2ggaXMgY29yZSBsb2dpYyBmb3IgdGhlIGRyaXZlci4gVGhlIGRyaXZlciBpcyBzb2Z0d2FyZS1vbmx5IGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBpb191cmluZyBjb21tYW5kcyBvbiB0aGUgdWJsayBjaGFyYWN0ZXIgZGV2aWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTkzMzE5NjBiZTc2OThjNTQ0NDY3ZjMyY2M3MmNiMjkzZGY5YmM2YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDE0OjExOjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuaW5kZXggYzJjMTFmMmEwMWU3MDEuLmQ5MzJhNDAyNjAzMTdmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbkBAIC0zMjk1LDkgJiM0MzszMjk1LDkgQEAgc3RhdGljIGludCB1YmxrX2ZldGNoKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHVibGtfZGV2aWNlICp1YixcbiBcdCAqIEZFVENILCBzbyBpdCBpcyBmaW5lIGV2ZW4gZm9yIElPX1VSSU5HX0ZfTk9OQkxPQ0suXG4gXHQgKi9cbiBcdG11dGV4X2xvY2soXHUwMDI2dWItXHUwMDNlbXV0ZXgpO1xuLVx0cmV0ID0gX191YmxrX2ZldGNoKGNtZCwgdWIsIGlvLCBxX2lkKTtcbiYjNDM7XHRyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBOVUxMKTtcbiBcdGlmICghcmV0KVxuLVx0XHRyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBOVUxMKTtcbiYjNDM7XHRcdHJldCA9IF9fdWJsa19mZXRjaChjbWQsIHViLCBpbywgcV9pZCk7XG4gXHRpZiAoIXJldClcbiBcdFx0dWJsa19tYXJrX2lvX3JlYWR5KHViLCBxX2lkLCBpbyk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2dWItXHUwMDNlbXV0ZXgpO1xuQEAgLTM0NDcsMTkgJiM0MzszNDQ3LDE4IEBAIHN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWRfbG9jYWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRpby1cdTAwM2VyZXMgPSByZXN1bHQ7XG4tXHRcdHJlcSA9IHVibGtfZmlsbF9pb19jbWQoaW8sIGNtZCk7XG4gXHRcdHJldCA9IHVibGtfY29uZmlnX2lvX2J1Zih1YiwgaW8sIGNtZCwgYWRkciwgXHUwMDI2YnVmX2lkeCk7XG4gXHRcdGlmIChidWZfaWR4ICE9IFVCTEtfSU5WQUxJRF9CVUZfSURYKVxuIFx0XHRcdGlvX2J1ZmZlcl91bnJlZ2lzdGVyX2J2ZWMoY21kLCBidWZfaWR4LCBpc3N1ZV9mbGFncyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdHJlcSA9IHVibGtfZmlsbF9pb19jbWQoaW8sIGNtZCk7XG4gXHRcdGNvbXBsID0gdWJsa19uZWVkX2NvbXBsZXRlX3JlcSh1YiwgaW8pO1xuIFxuIFx0XHRpZiAocmVxX29wKHJlcSkgPT0gUkVRX09QX1pPTkVfQVBQRU5EKVxuIFx0XHRcdHJlcS1cdTAwM2VfX3NlY3RvciA9IGFkZHI7XG4gXHRcdGlmIChjb21wbClcbiBcdFx0XHRfX3VibGtfY29tcGxldGVfcnEocmVxLCBpbywgdWJsa19kZXZfbmVlZF9tYXBfaW8odWIpLCBOVUxMKTtcbi1cbi1cdFx0aWYgKHJldClcbi1cdFx0XHRnb3RvIG91dDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFVCTEtfSU9fTkVFRF9HRVRfREFUQTpcbiBcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWRfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIHdpdGhpbiB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoYHVibGtgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEkvTyBidWZmZXJzIGFyZSBjb25maWd1cmVkIGFuZCBjb21tYW5kcyBhcmUgZmlsbGVkLCB3aGljaCBpcyBjb3JlIGxvZ2ljIGZvciB0aGUgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLW9ubHkgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSB1YmxrIGNoYXJhY3RlciBkZXZpY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5OTMzMTk2MGJlNzY5OGM1NDQ0NjdmMzJjYzcyY2IyOTNkZjliYzZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMTQ6MTE6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKaW5kZXggYzJjMTFmMmEwMWU3MDEuLmQ5MzJhNDAyNjAzMTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jCkBAIC0zMjk1LDkgJiM0MzszMjk1LDkgQEAgc3RhdGljIGludCB1YmxrX2ZldGNoKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHVibGtfZGV2aWNlICp1YiwKIAkgKiBGRVRDSCwgc28gaXQgaXMgZmluZSBldmVuIGZvciBJT19VUklOR19GX05PTkJMT0NLLgogCSAqLwogCW11dGV4X2xvY2soJmFtcDt1Yi0mZ3Q7bXV0ZXgpOwotCXJldCA9IF9fdWJsa19mZXRjaChjbWQsIHViLCBpbywgcV9pZCk7CiYjNDM7CXJldCA9IHVibGtfY29uZmlnX2lvX2J1Zih1YiwgaW8sIGNtZCwgYnVmX2FkZHIsIE5VTEwpOwogCWlmICghcmV0KQotCQlyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBOVUxMKTsKJiM0MzsJCXJldCA9IF9fdWJsa19mZXRjaChjbWQsIHViLCBpbywgcV9pZCk7CiAJaWYgKCFyZXQpCiAJCXVibGtfbWFya19pb19yZWFkeSh1YiwgcV9pZCwgaW8pOwogCW11dGV4X3VubG9jaygmYW1wO3ViLSZndDttdXRleCk7CkBAIC0zNDQ3LDE5ICYjNDM7MzQ0NywxOCBAQCBzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwogCQlpby0mZ3Q7cmVzID0gcmVzdWx0OwotCQlyZXEgPSB1YmxrX2ZpbGxfaW9fY21kKGlvLCBjbWQpOwogCQlyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGFkZHIsICZhbXA7YnVmX2lkeCk7CiAJCWlmIChidWZfaWR4ICE9IFVCTEtfSU5WQUxJRF9CVUZfSURYKQogCQkJaW9fYnVmZmVyX3VucmVnaXN0ZXJfYnZlYyhjbWQsIGJ1Zl9pZHgsIGlzc3VlX2ZsYWdzKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQlyZXEgPSB1YmxrX2ZpbGxfaW9fY21kKGlvLCBjbWQpOwogCQljb21wbCA9IHVibGtfbmVlZF9jb21wbGV0ZV9yZXEodWIsIGlvKTsKIAogCQlpZiAocmVxX29wKHJlcSkgPT0gUkVRX09QX1pPTkVfQVBQRU5EKQogCQkJcmVxLSZndDtfX3NlY3RvciA9IGFkZHI7CiAJCWlmIChjb21wbCkKIAkJCV9fdWJsa19jb21wbGV0ZV9ycShyZXEsIGlvLCB1YmxrX2Rldl9uZWVkX21hcF9pbyh1YiksIE5VTEwpOwotCi0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKIAkJYnJlYWs7CiAJY2FzZSBVQkxLX0lPX05FRURfR0VUX0RBVEE6CiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgdWJsayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBtYWtpbmcgc29tZSBtb2RpZmljYXRpb25zIHRvIHRoZSBgdWJsa19kcnYuY2AgZmlsZSB3aXRoaW4gdGhlIGJsb2NrIGRyaXZlciBzdWJzeXN0ZW0uIFRoZSBrZXkgaGVyZSBpcyB0aGUgYHVibGtgIGRyaXZlciwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciBmcmFtZXdvcmsuCgpUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgcmVvcmRlcmluZyBvcGVyYXRpb25zIHdpdGhpbiB0d28ga2V5IGZ1bmN0aW9uczogYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYmVlbiBhIHN3YXAgaW4gdGhlIG9yZGVyIG9mIGBfX3VibGtfZmV0Y2hgIChvciBgdWJsa19maWxsX2lvX2NtZGApIGFuZCBgdWJsa19jb25maWdfaW9fYnVmYCBpbiB0aGVzZSBmdW5jdGlvbnMuCgpJbiBgdWJsa19mZXRjaGAsIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBjYWxsaW5nIGB1YmxrX2NvbmZpZ19pb19idWZgICphZnRlciogYSBwb3RlbnRpYWwgZWFybHkgcmV0dXJuLiBOb3csIGl0JiMzOTtzIGNhbGxlZCAqYmVmb3JlKi4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBjaGFuZ2UgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9yIHJlc291cmNlIGFsbG9jYXRpb24gZmxvdy4gVGhlIGNvZGUgY3VycmVudGx5IHNlZW1zIHRvIGNvbmZpZ3VyZSB0aGUgaW8gYnVmZmVyIGJlZm9yZSBhY3R1YWxseSBhdHRlbXB0aW5nIHRvIGZldGNoIHRoZSBkYXRhLgoKSW4gYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYCwgdGhlIGB1YmxrX2ZpbGxfaW9fY21kYCBmdW5jdGlvbiBpcyBub3cgYmVpbmcgY2FsbGVkIGFmdGVyIHRoZSBidWZmZXIgY29uZmlndXJhdGlvbiAoYW5kIGRlLXJlZ2lzdHJhdGlvbiksIHdoaWNoIGFwcGVhcnMgdG8gYmUgY29uZGl0aW9uYWwgb24gYSBgcmV0YCB2YWx1ZS4gVGhpcyBhbHNvIHN1Z2dlc3RzIHNvbWUgcmVzb3VyY2UgbWFuYWdlbWVudCBtb2RpZmljYXRpb25zLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2U/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgYnVnIGZpeCByZWxhdGVkIHRvIGJ1ZmZlciBoYW5kbGluZywgb3IgcGVyaGFwcyBhIHByZXBhcmF0aW9uIGZvciBhbm90aGVyIGZlYXR1cmU/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gdmVyaWZ5IHRoZSBLY29uZmlnIHRvIHNlZSBob3cgdWJsayBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1VCTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSB1YmxrIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGhlIHN5c3RlbSYjMzk7cyBoaWdobGlnaHRpbmcgYEJMS19ERVZfVUJMS2AgYXMgYSBrZXkgY29uZmlndXJhdGlvbiBlbGVtZW50LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGNydWNpYWwsIHdoZW4gZGVhbGluZyB3aXRoIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9ucywgdG8ga25vdyB3aGF0IG90aGVyIGNvbXBvbmVudHMsIGRyaXZlcnMsIG9yIGtlcm5lbCBtb2R1bGVzIHJlbHkgb24gdGhpcyBzZXR0aW5nLiBJcyBpdCBhIGNvcmUgbW9kdWxlLCBhIGhlbHBlciwgb3Igc29tZXRoaW5nIGRlcGVuZGVudCBvbiBhIGJyb2FkZXIgYmxvY2sgSS9PIHN0YWNrPyBGaWd1cmluZyBvdXQgdGhlIGRlcGVuZGVuY3kgY2hhaW4gaXMgdGhlIGZvdW5kYXRpb25hbCBzdGVwIGJlZm9yZSBtb2RpZnlpbmcgb3IgZXZlbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGltcGFjdHMgdGhlIHN5c3RlbS4gVGhpcyBhbGxvd3MgbWUgdG8gZ2F1Z2UgdGhlIHBvdGVudGlhbCByaXBwbGUgZWZmZWN0IG9mIGFueSBjaGFuZ2VzLiBTbywgdGhlIHF1ZXN0aW9uIG5vdyBpczogV2hhdCBkb2VzIGBCTEtfREVWX1VCTEtgIGxlYW4gb24/IExldCYjMzk7cyBjaGVjayB0aGUgZGVwZW5kZW5jeSB0cmVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1VCTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI3LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQmxvY2sgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBibG9jayBkcml2ZXIgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGluc3RpbmN0aXZlbHkgZHJhd24gdG8gaXMgdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbGluZSAzMjggaW4gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgY29yZSBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYmxvY2sgZGV2aWNlIGRyaXZlciYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoYXQgbGluZSBwcm9iYWJseSBob3VzZXMgYSBjcnVjaWFsIGBjb25maWdgIHN0YXRlbWVudCwgYSBtZW51IHN0cnVjdHVyZSwgb3IgYSBjb25kaXRpb25hbCBgZGVwZW5kcyBvbmAgY2xhdXNlIHRoYXQgY29udHJvbHMgdGhlIHZpc2liaWxpdHkgYW5kIHNlbGVjdGlvbiBvZiBhc3NvY2lhdGVkIGZlYXR1cmVzLiBJIGJldCBJJiMzOTtsbCBmaW5kIHRoZSBwcmltYXJ5IGRyaXZlciYjMzk7cyBzeW1ib2wgb3IgYSBwYXJlbnQgc3ltYm9sIHRoYXQgcmV2ZWFscyB0aGUgY29uZmlndXJhdGlvbiYjMzk7cyBoaWVyYXJjaHkuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgdGhlIHZhcmlvdXMga25vYnMgSSBjYW4gdHVybiwgYW5kIHNlZSBob3cgdGhpcyBkcml2ZXIgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgaW5jbHVkZSB0aGUgUmFkb3MgYmxvY2sgZGV2aWNlLCB3aGljaCBzdHJpcGVzXG4gMzIxOlx0XHQgIGEgYmxvY2sgZGV2aWNlIG92ZXIgb2JqZWN0cyBzdG9yZWQgaW4gdGhlIENlcGggZGlzdHJpYnV0ZWQgb2JqZWN0XG4gMzIyOlx0XHQgIHN0b3JlLlxuIDMyMzpcdFxuIDMyNDpcdFx0ICBNb3JlIGluZm9ybWF0aW9uIGF0IGh0dHA6Ly9jZXBoLm5ld2RyZWFtLm5ldC8uXG4gMzI1Olx0XG4gMzI2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzI3Olx0XG4gMzI4Olx0Y29uZmlnIEJMS19ERVZfVUJMS1xuIDMyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuIDMzMDpcdFx0c2VsZWN0IElPX1VSSU5HXG4gMzMxOlx0XHRoZWxwXG4gMzMyOlx0XHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcbiAzMzM6XHRcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxuIDMzNDpcdFx0ICBkZWZpbml0aW9uIGlzbiYjMzk7dCBmaW5hbGl6ZWQgeWV0LCBhbmQgbWlnaHQgY2hhbmdlIGFjY29yZGluZyB0byBmdXR1cmVcbiAzMzU6XHRcdCAgcmVxdWlyZW1lbnQsIHNvIG1hcmsgaXMgYXMgZXhwZXJpbWVudGFsIG5vdy5cbiAzMzY6XHRcbiAzMzc6XHRjb25maWcgQkxLREVWX1VCTEtfTEVHQUNZX09QQ09ERVNcbiAzMzg6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcJiMzNDtcbiAzMzk6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9VQkxLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVUJMSyBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBgQkxLX0RFVl9VQkxLYCwgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyB3aXRoaW4gdGhlIFVCTEsgZHJpdmVyLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIHN5c3RlbS4gTXkgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLiBUaGUgZmlyc3QgdGhpbmcgSSBhbHdheXMgZG8gaXMgY2hlY2sgdGhlaXIgc2NvcGUuIEdvb2QsIHRoZXkmIzM5O3JlIGJvdGggZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdGVkLCBidXQgaXQgYWx3YXlzIHBheXMgdG8gY29uZmlybS4gTm93LCBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgaW5pdGlhdGVkIGFuZCB3aGVyZSB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbS4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBvciBlbnRyeSBwb2ludHMgaW50byB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgdG8gc2VlIHdoYXQgdHJpZ2dlcnMgdGhlaXIgZXhlY3V0aW9uIGFuZCBob3cgdGhleSBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgVUJMSyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfZmV0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMyNDg9c3RhdGljIGludCB1YmxrX2NoZWNrX2ZldGNoX2J1Zihjb25zdCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCBfX3U2NCBidWZfYWRkcilcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzI2My1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMjY0OnN0YXRpYyBpbnQgX191YmxrX2ZldGNoKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgc3RydWN0IHVibGtfZGV2aWNlICp1YixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjY1LVx0XHRcdHN0cnVjdCB1YmxrX2lvICppbywgdTE2IHFfaWQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyODYtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzI4NzpzdGF0aWMgaW50IHVibGtfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyODgtXHRcdCAgICAgIHN0cnVjdCB1YmxrX2lvICppbywgX191NjQgYnVmX2FkZHIsIHUxNiBxX2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjk5LVx0aWYgKCFyZXQpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzMwMDpcdFx0cmV0ID0gX191YmxrX2ZldGNoKGNtZCwgdWIsIGlvLCBxX2lkKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzAxLVx0aWYgKCFyZXQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzNTc9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM0MDYtXHRcdFx0Z290byBvdXQ7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzQwNzpcdFx0cmV0ID0gdWJsa19mZXRjaChjbWQsIHViLCBpbywgYWRkciwgcV9pZCk7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzQwOC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzY4OT1zdGF0aWMgaW50IHVibGtfYmF0Y2hfcHJlcF9pbyhzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNzA4LVx0dWJsa19pb19sb2NrKGlvKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNzA5Olx0cmV0ID0gX191YmxrX2ZldGNoKGRhdGEtXHUwMDNlY21kLCBkYXRhLVx1MDAzZXViLCBpbywgdWJxLVx1MDAzZXFfaWQpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM3MTAtXHRpZiAoIXJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA5NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUgYHVibGtgIHN1YnN5c3RlbToKCioqRGlnZ2luZyBpbnRvIHRoZSB1YmxrIENvbW1hbmQgRmxvdyoqCgpSaWdodCwgc28gYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYCBpcyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIGFuZCBpdCYjMzk7cyBiZWluZyBjYWxsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbW1hbmQgZ2V0cyBoYW5kbGVkIGxvY2FsbHkgZm9yIGEgQy1SaW5nIHN1Ym1pc3Npb24uIE5vdywgd2hlcmUgaXMgKnRoYXQqIGZ1bmN0aW9uIGJlaW5nIGludm9rZWQgZnJvbT8mIzM0OyBTaW5jZSBJIGtub3cgdGhlIGJhc2ljcyBvZiBgdWJsa2AgYWxyZWFkeSwgSSByZWFsaXplIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBhY3R1YWxseSBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uIE15IGFzc3VtcHRpb24gaXMgaXQgY2FsbHMgdGhlIGZ1bmN0aW9uIGB1YmxrX2ZldGNoYCwgYW5kIHNvIEkgd2lsbCB3YW50IHRvIGZvbGxvdyB0aGUgY29kZSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBiZWhhdmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJsa19jaF91cmluZ19jbWRfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzMzk9c3RhdGljIGJvb2wgdWJsa19nZXRfZGF0YShjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTYtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzM1NzpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzU4LVx0XHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1MTc9c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjMtXHRpZiAoIXR3LmNhbmNlbClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTI0Olx0XHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTI1LVx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1Mjk9c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0MS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTQyOlx0cmV0dXJuIHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzM5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdHJ1Y3R1cmUgd2l0aGluIHRoZSBVYmxrIEZyYW1ld29yayoqCgpBbHJpZ2h0LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgdWJsa2AgY29kZSBhbmQgdHJhY2luZyBob3cgY29tbWFuZHMgYXJlIGhhbmRsZWQuIEkgc2VlIHRoYXQgYHVibGtfY2hfdXJpbmdfY21kYCBpcyB0aGUgZW50cnkgcG9pbnQsIHdoaWNoIG1ha2VzIHNlbnNlLiBOb3csIG15IG5leHQgdGhvdWdodCBpcywgbGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdG8gc2VlIGlmIHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCwgaWYgaXQgaXMsIG1lYW5zIGl0JiMzOTtzIGxvY2FsaXplZCB0byB0aGF0IHBhcnRpY3VsYXIgZmlsZS4gVGhhdCBtaWdodCBnaXZlIG1lIHNvbWUgY2x1ZXMgYWJvdXQgaXRzIHNjb3BlIGFuZCBob3cgZWFzaWx5IGl0IGNhbiBiZSBhY2Nlc3NlZCBvciBtb2RpZmllZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLiBUaGF0JiMzOTtzIHVzdWFsbHkgb25lIG9mIHRoZSBmaXJzdCB0aGluZ3MgSSBjaGVjayB3aGVuIEkmIzM5O20gZGVidWdnaW5nIG9yIGFuYWx5emluZyBhIG5ldyBjb2RlIHBhdGggbGlrZSB0aGlzLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzM5PXN0YXRpYyBib29sIHVibGtfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzU2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzNTc6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzM1OC1cdFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNDg5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3QgKl9fdWJsa19jaGVja19hbmRfZ2V0X3JlcShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTE2LVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MTc6c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUxOC17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjMtXHRpZiAoIXR3LmNhbmNlbClcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTI0Olx0XHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTI1LVx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjgtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyOTpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzAte1xuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM3LVx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFx1MDAyNiBJT19VUklOR19GX1VOTE9DS0VEKSkge1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1Mzg6XHRcdGlvX3VyaW5nX2NtZF9jb21wbGV0ZV9pbl90YXNrKGNtZCwgdWJsa19jaF91cmluZ19jbWRfY2IpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzktXHRcdHJldHVybiAtRUlPQ0JRVUVVRUQ7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDEtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzU0MjpcdHJldHVybiB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQzLX1cbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDE0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2NoX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNDUtXHQud3JpdGVfaXRlciA9IHVibGtfY2hfd3JpdGVfaXRlcixcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTQ2Olx0LnVyaW5nX2NtZCA9IHVibGtfY2hfdXJpbmdfY21kLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNDctXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjczMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHVibGsgaW9fdXJpbmcgQ29tbWFuZCBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdWJsa19jaF91cmluZ19jbWRgLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLCBidXQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYC51cmluZ19jbWRgIHdpdGhpbiBgdWJsa19jaF9mb3BzYC4gVGhhdCBtZWFucyB0aGlzIGB1YmxrX2NoX3VyaW5nX2NtZGAgZnVuY3Rpb24gaXMgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgaW9fdXJpbmcgY29tbWFuZHMgb24gdGhlIHVibGsgY2hhcmFjdGVyIGRldmljZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBlbnRyeSBwb2ludCBwcm9wZXJseS4gQXJlIHRoZXJlIG90aGVyIHBhdGhzIGluPwoKVGhlIGNvbnRleHQgc3VnZ2VzdHMgdGhlIHBhdGNoIHRvdWNoZXMgYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLCBidXQgYHVibGtfY2hfdXJpbmdfY21kYCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHN5bWJvbCB0byBmb2N1cyBvbi4KCkxldCBtZSBjb25maXJtIHRoYXQgYHVibGtfY2hfdXJpbmdfY21kYCBpcyBpbmRlZWQgc3RhdGljLiBZdXAsIGl0IGlzLiBOb3csIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkganVzdCByZWFkIHRoYXQgd2Ugc2hvdWxkIGdlbmVyYWxseSBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBjb21waWxlciBjYW4gaW5saW5lIHRoZSBsYXR0ZXIsIGFuZCB0aGV5IHdvbiYjMzk7dCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuCgpCdXQgd2FpdCBhIG1pbnV0ZSwgYmVjYXVzZSBgdWJsa19jaF91cmluZ19jbWRgIGlzIGEgY2FsbGJhY2sgaW4gYGZpbGVfb3BlcmF0aW9uc2AgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIHNvIGl0ICp3b24mIzM5O3QqIGJlIGlubGluZWQuIEl0IHdpbGwgaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MsIGV2ZW4gaWYgaXQmIzM5O3Mgc3RhdGljLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LiBIb3dldmVyLCB0aGUgcnVsZSBkb2VzIHN1Z2dlc3QgdGhhdCBpZiBub24tc3RhdGljIGFsdGVybmF0aXZlcyBleGlzdCwgd2Ugc2hvdWxkIGxlYW4gdG93YXJkIHRob3NlLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcyBpbiBgdWJsa19kcnYuY2AgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHVibGtfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIHVibGsgU3ltYm9sIERlZmluaXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgY29tcGFyZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGB1YmxrX2Agc3ltYm9sIHdpdGggYW5kIHdpdGhvdXQgdGhlIGBzdGF0aWNgIGtleXdvcmQuIFRoZSBjb3JlIG9mIHRoaXMgaXMgYWJvdXQgc2NvcGluZywgaXNuJiMzOTt0IGl0PyBUaGUgYF5gIGluZGljYXRlcyBzb21lIHNvcnQgb2Ygc3ltYm9sIGxvb2t1cCwgcHJvYmFibHkgaW4gdGhlIGNvZGUuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGFuIGludGVybmFsIG9yIGV4dGVybmFsIHN5bWJvbCB3aXRoIHJlZ2FyZCB0byBpdHMgbGlua2luZyBhbmQgdmlzaWJpbGl0eS4gIEEgYHN0YXRpYyBpbnQgdWJsa19gIGRlY2xhcmF0aW9uIGxpa2VseSBtZWFucyB0aGF0IHN5bWJvbCBpcyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQgb3Igc2NvcGUuIFdpdGhvdXQgYHN0YXRpY2AsIGl0JiMzOTtzIHBvdGVudGlhbGx5IHZpc2libGUgdG8gdGhlIGxpbmtlciBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBsYXJnZXIgcHJvamVjdCwgd2hpY2ggaXMgYSBtYWpvciBkaWZmZXJlbmNlLiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHRoaXMgbW9kdWxlIGlzIHN1cHBvc2VkIHRvIGJlIGludGVncmF0ZWQgb3IgaWYgdGhlcmUgYXJlIGFueSBjb2xsaXNpb25zIGxpa2VseS4gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiB0aGlzIHN5bWJvbCBpcyBkZWNsYXJlZCBpbiBtdWx0aXBsZSBwbGFjZXM/IExldCBtZSBjaGVjayB0aGUgc3ltYm9sJiMzOTtzIHVzYWdlIGFuZCB3aGVyZSBpdCBpcyBiZWluZyBkZWZpbmVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgcG90ZW50aWFsIGFtYmlndWl0eS4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjkxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkV4YW1pbmluZyB0aGUgVm9pZCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYF52b2lkYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBkcmF3biB0byB0aGF0IHN5bWJvbDsgaXQgc2lnbmlmaWVzIGFuIGVtcHR5IG9yIHVuZGVmaW5lZCBzdGF0ZSwgYSBsYWNrIG9mIGRhdGEsIG9yIHBvdGVudGlhbGx5IHRoZSBhYnNlbmNlIG9mIHNvbWV0aGluZyBlbnRpcmVseS4gTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIGRpZmZlcmVudCBjb250ZXh0cy4gSXMgdGhpcyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCByZXR1cm4gdHlwZXMsIGdlbmVyaWMgcGFyYW1ldGVycywgb3IgcGVyaGFwcyBldmVuIGEgcGhpbG9zb3BoaWNhbCBjb25jZXB0IHdpdGhpbiB0aGUgc3lzdGVtIEkmIzM5O20gY3VycmVudGx5IGRlYWxpbmcgd2l0aD8gSSBuZWVkIG1vcmUgY29udGV4dCB0byBwaW4gZG93biB0aGUgZXhhY3QgbWVhbmluZywgYnV0IG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgdGhlIG51bGwgb3Igbm9uZXhpc3RlbnQgcmVwcmVzZW50YXRpb24gd2UmIzM5O3JlIGdyYXBwbGluZyB3aXRoLiBXaGF0IGlzIGl0IHRoYXQmIzM5O3MgdW5kZWZpbmVkPyBXaGF0JiMzOTtzIHRoZSBzY29wZSBoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBvdGhlciBlbGVtZW50cy4gSSBhbSBhbHNvIGF3YXJlIHRoYXQgdGhlIGludGVycHJldGF0aW9uIHdpbGwgZGVwZW5kIG9uIHRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBvciBzeXN0ZW0gYXQgaGFuZC4gSSBuZWVkIGEgYnJvYWRlciBwaWN0dXJlIHRvIGdpdmUgaXQgdGhlIHByb3BlciB3ZWlnaHQuIFRoZSBgXmAgcHJlY2VkaW5nICYjMzQ7dm9pZCYjMzQ7IGFkZHMgYSBsYXllciBvZiBjb21wbGV4aXR5OyBpcyB0aGlzIGFuIGFkZHJlc3MsIGEgcG9pbnRlciwgYSBuZWdhdGlvbiwgYSByZWZlcmVuY2UsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IGluIHRoZSBzeW50YXggb2YgdGhlIGNvbnRleHQgSSYjMzk7bSB3b3JraW5nIGluPyBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgY29uY2VwdCBpcyBhcHBsaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svdWJsa19kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZWZpbmluZyB0aGUgU2VhcmNoIENyaXRlcmlhKioKCk9rYXksIGxvb2tpbmcgYXQgdGhpcyBvdXRwdXQsIEkgdGhpbmsgdGhlIGBncmVwYCBleHByZXNzaW9uIEkgaW5pdGlhbGx5IHdyb3RlIG1pZ2h0IGJlIGEgbGl0dGxlICp0b28qIHNwZWNpZmljLiBJdCYjMzk7cyBwcm9iYWJseSByZWplY3Rpbmcgc29tZSB2YWxpZCByZXN1bHRzIHRoYXQgYXJlIGp1c3Qgc3VidGx5IGRpZmZlcmVudCB0aGFuIHdoYXQgSSBhbnRpY2lwYXRlZC4gSSBuZWVkIHRvIGxvb3NlbiB0aGUgc2VhcmNoIHBhcmFtZXRlcnMgYSBiaXQuIE1heWJlIEkgc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBzb21lIGZsZXhpYmlsaXR5IHdpdGggd2lsZGNhcmRzLCBjaGFyYWN0ZXIgY2xhc3Nlcywgb3IgZXZlbiBsb29rYXJvdW5kcyB0byBjYXB0dXJlIHRoZSBudWFuY2VzIG9mIHRoZSBkYXRhLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHdoYXQgbWlnaHQgYmUgdG9vIHBlcm1pc3NpdmUgYW5kIHdoYXQgbWlnaHQgZXhjbHVkZSB0aGUgZGF0YSBJIHdhbnQuIEl04oCZcyBhIGNsYXNzaWMgYmFsYW5jaW5nIGFjdCBiZXR3ZWVuIHByZWNpc2lvbiBhbmQgcmVjYWxsLCBpc27igJl0IGl0PyBUaW1lIHRvIGl0ZXJhdGUgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTMzMzk9c3RhdGljIGJvb2wgdWJsa19nZXRfZGF0YShjb25zdCBzdHJ1Y3QgdWJsa19xdWV1ZSAqdWJxLCBzdHJ1Y3QgdWJsa19pbyAqaW8sXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTYtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzM1NzpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzU4LVx0XHR1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM0ODk9c3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdCAqX191YmxrX2NoZWNrX2FuZF9nZXRfcmVxKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MTYtXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUxNzpzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTE4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyMy1cdGlmICghdHcuY2FuY2VsKVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MjQ6XHRcdHJldCA9IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjUtXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyOC1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTI5OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzMC17XG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzctXHRpZiAodW5saWtlbHkoaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpKSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUzODpcdFx0aW9fdXJpbmdfY21kX2NvbXBsZXRlX2luX3Rhc2soY21kLCB1YmxrX2NoX3VyaW5nX2NtZF9jYik7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzOS1cdFx0cmV0dXJuIC1FSU9DQlFVRVVFRDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0MS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTQyOlx0cmV0dXJuIHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDMtfVxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00MTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY2hfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE0NS1cdC53cml0ZV9pdGVyID0gdWJsa19jaF93cml0ZV9pdGVyLFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjQxNDY6XHQudXJpbmdfY21kID0gdWJsa19jaF91cmluZ19jbWQsXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE0Ny1cdC5tbWFwID0gdWJsa19jaF9tbWFwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFVibGsgSU9fVVJJTkcgQ29tbWFuZHMqKgoKT2theSwgc28gdGhlIGZhY3QgdGhhdCBgdWJsa19jaF91cmluZ19jbWRgIGlzIGEgZnVuY3Rpb24gcG9pbnRlciBpcyBrZXkg4oCTIHRoYXQgbWVhbnMgaXQmIzM5O3Mgbm90IGdldHRpbmcgaW5saW5lZCwgd2hpY2ggb3BlbnMgaXQgdXAgdG8gZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCB0aG91Z2guIExldCYjMzk7cyBsb29rIGF0IGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAuIEkgaGFkIGEgaHVuY2ggdGhhdCBpdCBtaWdodCBiZSBpbmxpbmVkLCBidXQgaG9sZCBvbiwgaXQmIzM5O3MgYWxzbyBjYWxsZWQgdGhyb3VnaCBgdWJsa19jaF91cmluZ19jbWRfY2JgLCB3aGljaCB0aGVuIGdldHMgcGFzc2VkIHRvIGBpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFza2AuIFRoYXQgY29uZmlybXMgaXQsIGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAgaXNuJiMzOTt0IGlubGluZWQgZWl0aGVyLgoKVGhlcmVmb3JlLCBgdWJsa19jaF91cmluZ19jbWRgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfY2JgIGFyZSBkZWZpbml0ZSB0YXJnZXRzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgpOb3csIGJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSwgZG9lcyBgQkxLX0RFVl9VQkxLYCByZWx5IG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zPyBJdCBzZWVtcyBsaWtlIGl0IHNlbGVjdHMgYElPX1VSSU5HYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBjb25maXJtIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZSBhbmQgdmVyaWZ5IHRoZXJlIGFyZSBubyBoaWRkZW4gcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI4Olx0Y29uZmlnIEJMS19ERVZfVUJMS1xuIDMyOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVwmIzM0O1xuIDMzMDpcdFx0c2VsZWN0IElPX1VSSU5HXG4gMzMxOlx0XHRoZWxwXG4gMzMyOlx0XHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcbiAzMzM6XHRcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxuIDMzNDpcdFx0ICBkZWZpbml0aW9uIGlzbiYjMzk7dCBmaW5hbGl6ZWQgeWV0LCBhbmQgbWlnaHQgY2hhbmdlIGFjY29yZGluZyB0byBmdXR1cmVcbiAzMzU6XHRcdCAgcmVxdWlyZW1lbnQsIHNvIG1hcmsgaXMgYXMgZXhwZXJpbWVudGFsIG5vdy5cbiAzMzY6XHRcbiAzMzc6XHRjb25maWcgQkxLREVWX1VCTEtfTEVHQUNZX09QQ09ERVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY0OAoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiA5NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB1YmxrIERyaXZlciBQYXRjaCBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBzaW1wbGljaXR5IG9mIGl0IHN0YW5kcyBvdXQuIEl0JiMzOTtzIHRhcmdldGVkIGF0IHRoZSBgdWJsa2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYC4gSSBzZWUgYEJMS19ERVZfVUJMS2AgaXMgdGhlIG9ubHkgY29uZmlnIG5lZWRlZCwgd2hpY2ggc2ltcGxpZmllcyB0aGUgaW5pdGlhbCBzZXR1cC4KClRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSByZW9yZGVyaW5nIG9mIGNhbGxzIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuIEluIGB1YmxrX2ZldGNoYCwgaXQmIzM5O3Mgc3dhcHBpbmcgdGhlIGV4ZWN1dGlvbiBvZiBgdWJsa19jb25maWdfaW9fYnVmYCBhbmQgYF9fdWJsa19mZXRjaGAuICBUaGVuLCB3aXRoIGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAsIGl0IHNoaWZ0cyB0aGUgcG9zaXRpb24gb2YgYHJlcSA9IHVibGtfZmlsbF9pb19jbWQoaW8sIGNtZClgICphZnRlciogdGhlIGB1YmxrX2NvbmZpZ19pb19idWZgIGNhbGwgYW5kIGl0cyBlcnJvciBjaGVja2luZy4gRXNzZW50aWFsbHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byBhIGNvcmUgcGF0aCBvZiB0aGUgYmxvY2sgZHJpdmVyLiBUaGlzIHVzZXItc3BhY2UgYmxvY2sgZHJpdmVyIG1lYW5zIGl0IGRvZXNuJiMzOTt0IG5lZWQgYW55IHBoeXNpY2FsIGhhcmR3YXJlLCBzbyBpdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBtYWtlcyBpdCBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IHJlYXNvbmluZz8gVGhlIHJlb3JkZXJpbmcgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGFyb3VuZCBob3cgSS9PIGJ1ZmZlcnMgYXJlIGNvbmZpZ3VyZWQgKGB1YmxrX2NvbmZpZ19pb19idWZgKSBhbmQgY29tbWFuZHMgYXJlIGZpbGxlZCAoYHVibGtfZmlsbF9pb19jbWRgKSwgY291bGQgZXhwb3NlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMsIHBhcnRpY3VsYXJseSBhcm91bmQgZXJyb3IgaGFuZGxpbmcuCgpJIG5lZWQgdG8gY29uZmlybSB3aGljaCBzeW1ib2xzIGFyZSBlbnRyeSBwb2ludHMgYW5kIHRoaXMgcGF0Y2ggYWZmZWN0cy4gUmlnaHQsIEkgd2lsbCBmb2N1cyBvbiBgdWJsa19jaF91cmluZ19jbWRgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfY2JgIGFzIHRoZXkgYXJlIHJlbGV2YW50LgoKU28sIEkgdGhpbmsgSSYjMzk7bSByZWFkeSB0byBtb3ZlIG9uLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9VQkxLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWQmIzM0OywKICAgICYjMzQ7dWJsa19jaF91cmluZ19jbWRfY2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIHdpdGhpbiB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoYHVibGtgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEkvTyBidWZmZXJzIGFyZSBjb25maWd1cmVkIGFuZCBjb21tYW5kcyBhcmUgZmlsbGVkLCB3aGljaCBpcyBjb3JlIGxvZ2ljIGZvciB0aGUgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLW9ubHkgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSB1YmxrIGNoYXJhY3RlciBkZXZpY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfVUJMSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kJiMzNDssCiAgICAmIzM0O3VibGtfY2hfdXJpbmdfY21kX2NiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYCB3aXRoaW4gdGhlIHVzZXJzcGFjZSBibG9jayBkcml2ZXIgKGB1YmxrYCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBJL08gYnVmZmVycyBhcmUgY29uZmlndXJlZCBhbmQgY29tbWFuZHMgYXJlIGZpbGxlZCwgd2hpY2ggaXMgY29yZSBsb2dpYyBmb3IgdGhlIGRyaXZlci4gVGhlIGRyaXZlciBpcyBzb2Z0d2FyZS1vbmx5IGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBpb191cmluZyBjb21tYW5kcyBvbiB0aGUgdWJsayBjaGFyYWN0ZXIgZGV2aWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTE6NTcuODU1MDc1MTU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2Mzg3ODgxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9VQkxLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgICBcInVibGtfY2hfdXJpbmdfY21kX2NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIHdpdGhpbiB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoYHVibGtgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEkvTyBidWZmZXJzIGFyZSBjb25maWd1cmVkIGFuZCBjb21tYW5kcyBhcmUgZmlsbGVkLCB3aGljaCBpcyBjb3JlIGxvZ2ljIGZvciB0aGUgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLW9ubHkgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSB1YmxrIGNoYXJhY3RlciBkZXZpY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjExOjU3Ljg1NTA4MjcwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAyMjE2Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTkzMzE5NjBiZTc2OThjNTQ0NDY3ZjMyY2M3MmNiMjkzZGY5YmM2YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNDoxMTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcXG5pbmRleCBjMmMxMWYyYTAxZTcwMS4uZDkzMmE0MDI2MDMxN2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXFxuQEAgLTMyOTUsOSArMzI5NSw5IEBAIHN0YXRpYyBpbnQgdWJsa19mZXRjaChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuIFxcdCAqIEZFVENILCBzbyBpdCBpcyBmaW5lIGV2ZW4gZm9yIElPX1VSSU5HX0ZfTk9OQkxPQ0suXFxuIFxcdCAqL1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZ1Yi1cXHUwMDNlbXV0ZXgpO1xcbi1cXHRyZXQgPSBfX3VibGtfZmV0Y2goY21kLCB1YiwgaW8sIHFfaWQpO1xcbitcXHRyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBOVUxMKTtcXG4gXFx0aWYgKCFyZXQpXFxuLVxcdFxcdHJldCA9IHVibGtfY29uZmlnX2lvX2J1Zih1YiwgaW8sIGNtZCwgYnVmX2FkZHIsIE5VTEwpO1xcbitcXHRcXHRyZXQgPSBfX3VibGtfZmV0Y2goY21kLCB1YiwgaW8sIHFfaWQpO1xcbiBcXHRpZiAoIXJldClcXG4gXFx0XFx0dWJsa19tYXJrX2lvX3JlYWR5KHViLCBxX2lkLCBpbyk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2dWItXFx1MDAzZW11dGV4KTtcXG5AQCAtMzQ0NywxOSArMzQ0NywxOCBAQCBzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdGlvLVxcdTAwM2VyZXMgPSByZXN1bHQ7XFxuLVxcdFxcdHJlcSA9IHVibGtfZmlsbF9pb19jbWQoaW8sIGNtZCk7XFxuIFxcdFxcdHJldCA9IHVibGtfY29uZmlnX2lvX2J1Zih1YiwgaW8sIGNtZCwgYWRkciwgXFx1MDAyNmJ1Zl9pZHgpO1xcbiBcXHRcXHRpZiAoYnVmX2lkeCAhPSBVQkxLX0lOVkFMSURfQlVGX0lEWClcXG4gXFx0XFx0XFx0aW9fYnVmZmVyX3VucmVnaXN0ZXJfYnZlYyhjbWQsIGJ1Zl9pZHgsIGlzc3VlX2ZsYWdzKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdHJlcSA9IHVibGtfZmlsbF9pb19jbWQoaW8sIGNtZCk7XFxuIFxcdFxcdGNvbXBsID0gdWJsa19uZWVkX2NvbXBsZXRlX3JlcSh1YiwgaW8pO1xcbiBcXG4gXFx0XFx0aWYgKHJlcV9vcChyZXEpID09IFJFUV9PUF9aT05FX0FQUEVORClcXG4gXFx0XFx0XFx0cmVxLVxcdTAwM2VfX3NlY3RvciA9IGFkZHI7XFxuIFxcdFxcdGlmIChjb21wbClcXG4gXFx0XFx0XFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKHViKSwgTlVMTCk7XFxuLVxcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgVUJMS19JT19ORUVEX0dFVF9EQVRBOlxcbiBcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMTo1OC4yNTgwMTkyOTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NDIzNTgzNTQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1VCTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1YmxrX2NoX3VyaW5nX2NtZFwiLFxuICAgIFwidWJsa19jaF91cmluZ19jbWRfY2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBgdWJsa19mZXRjaGAgYW5kIGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAgd2l0aGluIHRoZSB1c2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChgdWJsa2ApLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgSS9PIGJ1ZmZlcnMgYXJlIGNvbmZpZ3VyZWQgYW5kIGNvbW1hbmRzIGFyZSBmaWxsZWQsIHdoaWNoIGlzIGNvcmUgbG9naWMgZm9yIHRoZSBkcml2ZXIuIFRoZSBkcml2ZXIgaXMgc29mdHdhcmUtb25seSBhbmQgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgaW9fdXJpbmcgY29tbWFuZHMgb24gdGhlIHVibGsgY2hhcmFjdGVyIGRldmljZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTkzMzE5NjBiZTc2OThjNTQ0NDY3ZjMyY2M3MmNiMjkzZGY5YmM2YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDE0OjExOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jIGIvZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXG5pbmRleCBjMmMxMWYyYTAxZTcwMS4uZDkzMmE0MDI2MDMxN2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmNcbisrKyBiL2RyaXZlcnMvYmxvY2svdWJsa19kcnYuY1xuQEAgLTMyOTUsOSArMzI5NSw5IEBAIHN0YXRpYyBpbnQgdWJsa19mZXRjaChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXG4gXHQgKiBGRVRDSCwgc28gaXQgaXMgZmluZSBldmVuIGZvciBJT19VUklOR19GX05PTkJMT0NLLlxuIFx0ICovXG4gXHRtdXRleF9sb2NrKFx1MDAyNnViLVx1MDAzZW11dGV4KTtcbi1cdHJldCA9IF9fdWJsa19mZXRjaChjbWQsIHViLCBpbywgcV9pZCk7XG4rXHRyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBOVUxMKTtcbiBcdGlmICghcmV0KVxuLVx0XHRyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGJ1Zl9hZGRyLCBOVUxMKTtcbitcdFx0cmV0ID0gX191YmxrX2ZldGNoKGNtZCwgdWIsIGlvLCBxX2lkKTtcbiBcdGlmICghcmV0KVxuIFx0XHR1YmxrX21hcmtfaW9fcmVhZHkodWIsIHFfaWQsIGlvKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ1Yi1cdTAwM2VtdXRleCk7XG5AQCAtMzQ0NywxOSArMzQ0NywxOCBAQCBzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCxcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0aW8tXHUwMDNlcmVzID0gcmVzdWx0O1xuLVx0XHRyZXEgPSB1YmxrX2ZpbGxfaW9fY21kKGlvLCBjbWQpO1xuIFx0XHRyZXQgPSB1YmxrX2NvbmZpZ19pb19idWYodWIsIGlvLCBjbWQsIGFkZHIsIFx1MDAyNmJ1Zl9pZHgpO1xuIFx0XHRpZiAoYnVmX2lkeCAhPSBVQkxLX0lOVkFMSURfQlVGX0lEWClcbiBcdFx0XHRpb19idWZmZXJfdW5yZWdpc3Rlcl9idmVjKGNtZCwgYnVmX2lkeCwgaXNzdWVfZmxhZ3MpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHRyZXEgPSB1YmxrX2ZpbGxfaW9fY21kKGlvLCBjbWQpO1xuIFx0XHRjb21wbCA9IHVibGtfbmVlZF9jb21wbGV0ZV9yZXEodWIsIGlvKTtcbiBcbiBcdFx0aWYgKHJlcV9vcChyZXEpID09IFJFUV9PUF9aT05FX0FQUEVORClcbiBcdFx0XHRyZXEtXHUwMDNlX19zZWN0b3IgPSBhZGRyO1xuIFx0XHRpZiAoY29tcGwpXG4gXHRcdFx0X191YmxrX2NvbXBsZXRlX3JxKHJlcSwgaW8sIHVibGtfZGV2X25lZWRfbWFwX2lvKHViKSwgTlVMTCk7XG4tXG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0Z290byBvdXQ7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBVQkxLX0lPX05FRURfR0VUX0RBVEE6XG4gXHRcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMTo1OC4yNTgwMjA0OTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTM3ODUyNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIHVibGsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgYHVibGtfZHJ2LmNgIGZpbGUgd2l0aGluIHRoZSBibG9jayBkcml2ZXIgc3Vic3lzdGVtLiBUaGUga2V5IGhlcmUgaXMgdGhlIGB1YmxrYCBkcml2ZXIsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdGhlIHVzZXJzcGFjZSBibG9jayBkcml2ZXIgZnJhbWV3b3JrLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgcmVvcmRlcmluZyBvcGVyYXRpb25zIHdpdGhpbiB0d28ga2V5IGZ1bmN0aW9uczogYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBiZWVuIGEgc3dhcCBpbiB0aGUgb3JkZXIgb2YgYF9fdWJsa19mZXRjaGAgKG9yIGB1YmxrX2ZpbGxfaW9fY21kYCkgYW5kIGB1YmxrX2NvbmZpZ19pb19idWZgIGluIHRoZXNlIGZ1bmN0aW9ucy5cblxuSW4gYHVibGtfZmV0Y2hgLCB0aGUgb3JpZ2luYWwgY29kZSB3YXMgY2FsbGluZyBgdWJsa19jb25maWdfaW9fYnVmYCAqYWZ0ZXIqIGEgcG90ZW50aWFsIGVhcmx5IHJldHVybi4gTm93LCBpdCdzIGNhbGxlZCAqYmVmb3JlKi4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBjaGFuZ2UgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9yIHJlc291cmNlIGFsbG9jYXRpb24gZmxvdy4gVGhlIGNvZGUgY3VycmVudGx5IHNlZW1zIHRvIGNvbmZpZ3VyZSB0aGUgaW8gYnVmZmVyIGJlZm9yZSBhY3R1YWxseSBhdHRlbXB0aW5nIHRvIGZldGNoIHRoZSBkYXRhLlxuXG5JbiBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLCB0aGUgYHVibGtfZmlsbF9pb19jbWRgIGZ1bmN0aW9uIGlzIG5vdyBiZWluZyBjYWxsZWQgYWZ0ZXIgdGhlIGJ1ZmZlciBjb25maWd1cmF0aW9uIChhbmQgZGUtcmVnaXN0cmF0aW9uKSwgd2hpY2ggYXBwZWFycyB0byBiZSBjb25kaXRpb25hbCBvbiBhIGByZXRgIHZhbHVlLiBUaGlzIGFsc28gc3VnZ2VzdHMgc29tZSByZXNvdXJjZSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjaGFuZ2U/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgYnVnIGZpeCByZWxhdGVkIHRvIGJ1ZmZlciBoYW5kbGluZywgb3IgcGVyaGFwcyBhIHByZXBhcmF0aW9uIGZvciBhbm90aGVyIGZlYXR1cmU/IEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgcmVhc29uaW5nLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgdGhlIEtjb25maWcgdG8gc2VlIGhvdyB1YmxrIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjowNC4xOTU4NzUxMDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3Njc1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfVUJMS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTMxNT1jb25maWcgQkxLX0RFVl9SQkRcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zMjctXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjMyODpjb25maWcgQkxLX0RFVl9VQkxLXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyOS1cXHR0cmlzdGF0ZSBcXFwiVXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MDQuMjU1NjQ3NDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTAxNDk1MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIHVibGsgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBzeXN0ZW0ncyBoaWdobGlnaHRpbmcgYEJMS19ERVZfVUJMS2AgYXMgYSBrZXkgY29uZmlndXJhdGlvbiBlbGVtZW50LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCwgd2hlbiBkZWFsaW5nIHdpdGggYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb25zLCB0byBrbm93IHdoYXQgb3RoZXIgY29tcG9uZW50cywgZHJpdmVycywgb3Iga2VybmVsIG1vZHVsZXMgcmVseSBvbiB0aGlzIHNldHRpbmcuIElzIGl0IGEgY29yZSBtb2R1bGUsIGEgaGVscGVyLCBvciBzb21ldGhpbmcgZGVwZW5kZW50IG9uIGEgYnJvYWRlciBibG9jayBJL08gc3RhY2s/IEZpZ3VyaW5nIG91dCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBpcyB0aGUgZm91bmRhdGlvbmFsIHN0ZXAgYmVmb3JlIG1vZGlmeWluZyBvciBldmVuIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaW1wYWN0cyB0aGUgc3lzdGVtLiBUaGlzIGFsbG93cyBtZSB0byBnYXVnZSB0aGUgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3Qgb2YgYW55IGNoYW5nZXMuIFNvLCB0aGUgcXVlc3Rpb24gbm93IGlzOiBXaGF0IGRvZXMgYEJMS19ERVZfVUJMS2AgbGVhbiBvbj8gTGV0J3MgY2hlY2sgdGhlIGRlcGVuZGVuY3kgdHJlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjEyOjA3LjE1NzE0NDUxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg1MjMyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9VQkxLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzE1PWNvbmZpZyBCTEtfREVWX1JCRFxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTMyNy1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzI4OmNvbmZpZyBCTEtfREVWX1VCTEtcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzI5LVxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjowNy4yNDkwMDM0NzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQ4MDI5MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQmxvY2sgRHJpdmVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYmxvY2sgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgZmlyc3QgcGxhY2UgSSdtIGluc3RpbmN0aXZlbHkgZHJhd24gdG8gaXMgdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBsaW5lIDMyOCBpbiBgZHJpdmVycy9ibG9jay9LY29uZmlnYC4gSXQncyBhbG1vc3QgY2VydGFpbiB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcGFydGljdWxhciBibG9jayBkZXZpY2UgZHJpdmVyJ3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0IGxpbmUgcHJvYmFibHkgaG91c2VzIGEgY3J1Y2lhbCBgY29uZmlnYCBzdGF0ZW1lbnQsIGEgbWVudSBzdHJ1Y3R1cmUsIG9yIGEgY29uZGl0aW9uYWwgYGRlcGVuZHMgb25gIGNsYXVzZSB0aGF0IGNvbnRyb2xzIHRoZSB2aXNpYmlsaXR5IGFuZCBzZWxlY3Rpb24gb2YgYXNzb2NpYXRlZCBmZWF0dXJlcy4gSSBiZXQgSSdsbCBmaW5kIHRoZSBwcmltYXJ5IGRyaXZlcidzIHN5bWJvbCBvciBhIHBhcmVudCBzeW1ib2wgdGhhdCByZXZlYWxzIHRoZSBjb25maWd1cmF0aW9uJ3MgaGllcmFyY2h5LiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgdGhlIHZhcmlvdXMga25vYnMgSSBjYW4gdHVybiwgYW5kIHNlZSBob3cgdGhpcyBkcml2ZXIgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjEyOjEwLjI5NzAzNDkwNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGluY2x1ZGUgdGhlIFJhZG9zIGJsb2NrIGRldmljZSwgd2hpY2ggc3RyaXBlc1xcbiAzMjE6XFx0XFx0ICBhIGJsb2NrIGRldmljZSBvdmVyIG9iamVjdHMgc3RvcmVkIGluIHRoZSBDZXBoIGRpc3RyaWJ1dGVkIG9iamVjdFxcbiAzMjI6XFx0XFx0ICBzdG9yZS5cXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0ICBNb3JlIGluZm9ybWF0aW9uIGF0IGh0dHA6Ly9jZXBoLm5ld2RyZWFtLm5ldC8uXFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMzI3OlxcdFxcbiAzMjg6XFx0Y29uZmlnIEJMS19ERVZfVUJMS1xcbiAzMjk6XFx0XFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZSBibG9jayBkcml2ZXIgKEV4cGVyaW1lbnRhbClcXFwiXFxuIDMzMDpcXHRcXHRzZWxlY3QgSU9fVVJJTkdcXG4gMzMxOlxcdFxcdGhlbHBcXG4gMzMyOlxcdFxcdCAgaW9fdXJpbmcgYmFzZWQgdXNlcnNwYWNlIGJsb2NrIGRyaXZlci4gVG9nZXRoZXIgd2l0aCB1YmxrIHNlcnZlciwgdWJsa1xcbiAzMzM6XFx0XFx0ICBoYXMgYmVlbiB3b3JraW5nIHdlbGwsIGJ1dCBpbnRlcmZhY2Ugd2l0aCB1c2Vyc3BhY2Ugb3IgY29tbWFuZCBkYXRhXFxuIDMzNDpcXHRcXHQgIGRlZmluaXRpb24gaXNuJ3QgZmluYWxpemVkIHlldCwgYW5kIG1pZ2h0IGNoYW5nZSBhY2NvcmRpbmcgdG8gZnV0dXJlXFxuIDMzNTpcXHRcXHQgIHJlcXVpcmVtZW50LCBzbyBtYXJrIGlzIGFzIGV4cGVyaW1lbnRhbCBub3cuXFxuIDMzNjpcXHRcXG4gMzM3OlxcdGNvbmZpZyBCTEtERVZfVUJMS19MRUdBQ1lfT1BDT0RFU1xcbiAzMzg6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGVcXFwiXFxuIDMzOTpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfVUJMS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjoxMC4yOTcxMDY2NzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcwNzE1MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVUJMSyBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBDYWxscyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiwgYEJMS19ERVZfVUJMS2AsIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgd2l0aGluIHRoZSBVQkxLIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBzeXN0ZW0uIE15IGZvY3VzIGlzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYC4gVGhlIGZpcnN0IHRoaW5nIEkgYWx3YXlzIGRvIGlzIGNoZWNrIHRoZWlyIHNjb3BlLiBHb29kLCB0aGV5J3JlIGJvdGggZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdGVkLCBidXQgaXQgYWx3YXlzIHBheXMgdG8gY29uZmlybS4gTm93LCBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgaW5pdGlhdGVkIGFuZCB3aGVyZSB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbS4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIG9yIGVudHJ5IHBvaW50cyBpbnRvIHRoaXMgcGFydCBvZiB0aGUgY29kZSB0byBzZWUgd2hhdCB0cmlnZ2VycyB0aGVpciBleGVjdXRpb24gYW5kIGhvdyB0aGV5IGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBVQkxLIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MTMuNzY3ODI0NjUzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDk0MjYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1YmxrX2ZldGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzI0OD1zdGF0aWMgaW50IHVibGtfY2hlY2tfZmV0Y2hfYnVmKGNvbnN0IHN0cnVjdCB1YmxrX2RldmljZSAqdWIsIF9fdTY0IGJ1Zl9hZGRyKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyNjMtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMyNjQ6c3RhdGljIGludCBfX3VibGtfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjY1LVxcdFxcdFxcdHN0cnVjdCB1YmxrX2lvICppbywgdTE2IHFfaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzI4Ni1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzI4NzpzdGF0aWMgaW50IHVibGtfZmV0Y2goc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCBzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMjg4LVxcdFxcdCAgICAgIHN0cnVjdCB1YmxrX2lvICppbywgX191NjQgYnVmX2FkZHIsIHUxNiBxX2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMyOTktXFx0aWYgKCFyZXQpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzMDA6XFx0XFx0cmV0ID0gX191YmxrX2ZldGNoKGNtZCwgdWIsIGlvLCBxX2lkKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzMwMS1cXHRpZiAoIXJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzU3PXN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWRfbG9jYWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM0MDYtXFx0XFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM0MDc6XFx0XFx0cmV0ID0gdWJsa19mZXRjaChjbWQsIHViLCBpbywgYWRkciwgcV9pZCk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM0MDgtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNjg5PXN0YXRpYyBpbnQgdWJsa19iYXRjaF9wcmVwX2lvKHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzcwOC1cXHR1YmxrX2lvX2xvY2soaW8pO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNzA5OlxcdHJldCA9IF9fdWJsa19mZXRjaChkYXRhLVxcdTAwM2VjbWQsIGRhdGEtXFx1MDAzZXViLCBpbywgdWJxLVxcdTAwM2VxX2lkKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzcxMC1cXHRpZiAoIXJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MTMuODU4Nzc3NTA4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjQwNTM1MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUgYHVibGtgIHN1YnN5c3RlbTpcblxuKipEaWdnaW5nIGludG8gdGhlIHVibGsgQ29tbWFuZCBGbG93KipcblxuUmlnaHQsIHNvIGB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbGAgaXMgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCBhbmQgaXQncyBiZWluZyBjYWxsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQncyB3aGVyZSB0aGUgY29tbWFuZCBnZXRzIGhhbmRsZWQgbG9jYWxseSBmb3IgYSBDLVJpbmcgc3VibWlzc2lvbi4gTm93LCB3aGVyZSBpcyAqdGhhdCogZnVuY3Rpb24gYmVpbmcgaW52b2tlZCBmcm9tP1wiIFNpbmNlIEkga25vdyB0aGUgYmFzaWNzIG9mIGB1YmxrYCBhbHJlYWR5LCBJIHJlYWxpemUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIGlzIGFjdHVhbGx5IGhhbmRsZWQgYnkgdGhlIHN5c3RlbS4gTXkgYXNzdW1wdGlvbiBpcyBpdCBjYWxscyB0aGUgZnVuY3Rpb24gYHVibGtfZmV0Y2hgLCBhbmQgc28gSSB3aWxsIHdhbnQgdG8gZm9sbG93IHRoZSBjb2RlIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGJlaGF2aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDk3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MTYuOTIyODMzMzY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQwMjAyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19jaF91cmluZ19jbWRfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzM5PXN0YXRpYyBib29sIHVibGtfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzNTc6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTgtXFx0XFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM1MTc9c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyMy1cXHRpZiAoIXR3LmNhbmNlbClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyNDpcXHRcXHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyNS1cXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNTI5PXN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0MS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzU0MjpcXHRyZXR1cm4gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjoxNy4wMjY4NjAzMjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5Mzc1ODUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTdHJ1Y3R1cmUgd2l0aGluIHRoZSBVYmxrIEZyYW1ld29yayoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGUgYHVibGtgIGNvZGUgYW5kIHRyYWNpbmcgaG93IGNvbW1hbmRzIGFyZSBoYW5kbGVkLiBJIHNlZSB0aGF0IGB1YmxrX2NoX3VyaW5nX2NtZGAgaXMgdGhlIGVudHJ5IHBvaW50LCB3aGljaCBtYWtlcyBzZW5zZS4gTm93LCBteSBuZXh0IHRob3VnaHQgaXMsIGxldCdzIHF1aWNrbHkgY2hlY2sgdG8gc2VlIGlmIHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIGBzdGF0aWNgIGZ1bmN0aW9uLCB3aGljaCwgaWYgaXQgaXMsIG1lYW5zIGl0J3MgbG9jYWxpemVkIHRvIHRoYXQgcGFydGljdWxhciBmaWxlLiBUaGF0IG1pZ2h0IGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCBpdHMgc2NvcGUgYW5kIGhvdyBlYXNpbHkgaXQgY2FuIGJlIGFjY2Vzc2VkIG9yIG1vZGlmaWVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIFRoYXQncyB1c3VhbGx5IG9uZSBvZiB0aGUgZmlyc3QgdGhpbmdzIEkgY2hlY2sgd2hlbiBJJ20gZGVidWdnaW5nIG9yIGFuYWx5emluZyBhIG5ldyBjb2RlIHBhdGggbGlrZSB0aGlzLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjoyMC41MjA2MjE0MjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTg3NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVibGtfY2hfdXJpbmdfY21kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9MzMzOT1zdGF0aWMgYm9vbCB1YmxrX2dldF9kYXRhKGNvbnN0IHN0cnVjdCB1YmxrX3F1ZXVlICp1YnEsIHN0cnVjdCB1YmxrX2lvICppbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzU2LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozMzU3OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWRfbG9jYWwoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zMzU4LVxcdFxcdHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zNDg5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3QgKl9fdWJsa19jaGVja19hbmRfZ2V0X3JlcShzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MTYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MTc6c3RhdGljIHZvaWQgdWJsa19jaF91cmluZ19jbWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MTgte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjMtXFx0aWYgKCF0dy5jYW5jZWwpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1MjQ6XFx0XFx0cmV0ID0gdWJsa19jaF91cmluZ19jbWRfbG9jYWwoY21kLCBpc3N1ZV9mbGFncyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MjUtXFx0aWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyOC1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyOTpzdGF0aWMgaW50IHVibGtfY2hfdXJpbmdfY21kKHN0cnVjdCBpb191cmluZ19jbWQgKmNtZCwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTMwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTM3LVxcdGlmICh1bmxpa2VseShpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfVU5MT0NLRUQpKSB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1Mzg6XFx0XFx0aW9fdXJpbmdfY21kX2NvbXBsZXRlX2luX3Rhc2soY21kLCB1YmxrX2NoX3VyaW5nX2NtZF9jYik7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzktXFx0XFx0cmV0dXJuIC1FSU9DQlFVRVVFRDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQxLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTQyOlxcdHJldHVybiB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzU0My19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NDE0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YmxrX2NoX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE0NS1cXHQud3JpdGVfaXRlciA9IHVibGtfY2hfd3JpdGVfaXRlcixcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NDE0NjpcXHQudXJpbmdfY21kID0gdWJsa19jaF91cmluZ19jbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTQxNDctXFx0Lm1tYXAgPSB1YmxrX2NoX21tYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjEyOjIwLjU3NjYxMjg2NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjEzOTQ2MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgdWJsayBpb191cmluZyBDb21tYW5kIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdWJsa19jaF91cmluZ19jbWRgLiBJdCdzIGRlZmluZWQgYXMgYHN0YXRpY2AsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGAudXJpbmdfY21kYCB3aXRoaW4gYHVibGtfY2hfZm9wc2AuIFRoYXQgbWVhbnMgdGhpcyBgdWJsa19jaF91cmluZ19jbWRgIGZ1bmN0aW9uIGlzIHRoZSBhY3R1YWwgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSB1YmxrIGNoYXJhY3RlciBkZXZpY2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgZW50cnkgcG9pbnQgcHJvcGVybHkuIEFyZSB0aGVyZSBvdGhlciBwYXRocyBpbj9cblxuVGhlIGNvbnRleHQgc3VnZ2VzdHMgdGhlIHBhdGNoIHRvdWNoZXMgYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLCBidXQgYHVibGtfY2hfdXJpbmdfY21kYCBzZWVtcyBsaWtlIHRoZSBjZW50cmFsIHN5bWJvbCB0byBmb2N1cyBvbi5cblxuTGV0IG1lIGNvbmZpcm0gdGhhdCBgdWJsa19jaF91cmluZ19jbWRgIGlzIGluZGVlZCBzdGF0aWMuIFl1cCwgaXQgaXMuIE5vdywgdGhhdCdzIGludGVyZXN0aW5nLiBJIGp1c3QgcmVhZCB0aGF0IHdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGUgY29tcGlsZXIgY2FuIGlubGluZSB0aGUgbGF0dGVyLCBhbmQgdGhleSB3b24ndCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuXG5cbkJ1dCB3YWl0IGEgbWludXRlLCBiZWNhdXNlIGB1YmxrX2NoX3VyaW5nX2NtZGAgaXMgYSBjYWxsYmFjayBpbiBgZmlsZV9vcGVyYXRpb25zYCBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgc28gaXQgKndvbid0KiBiZSBpbmxpbmVkLiBJdCB3aWxsIGhhdmUgYSBkaXN0aW5jdCBhZGRyZXNzLCBldmVuIGlmIGl0J3Mgc3RhdGljLiBUaGF0J3MgYSBrZXkgcG9pbnQuIEhvd2V2ZXIsIHRoZSBydWxlIGRvZXMgc3VnZ2VzdCB0aGF0IGlmIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzIGV4aXN0LCB3ZSBzaG91bGQgbGVhbiB0b3dhcmQgdGhvc2UuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzIGluIGB1YmxrX2Rydi5jYCB0aGF0IGFyZSByZWxldmFudCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjEyOjI1Ljc5MDU2MTMxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyODIzMTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgdWJsa19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjoyNS44NDc4NTA3NTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMTU1MjI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB1YmxrIFN5bWJvbCBEZWZpbml0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBjb21wYXJlIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQgYHVibGtfYCBzeW1ib2wgd2l0aCBhbmQgd2l0aG91dCB0aGUgYHN0YXRpY2Aga2V5d29yZC4gVGhlIGNvcmUgb2YgdGhpcyBpcyBhYm91dCBzY29waW5nLCBpc24ndCBpdD8gVGhlIGBeYCBpbmRpY2F0ZXMgc29tZSBzb3J0IG9mIHN5bWJvbCBsb29rdXAsIHByb2JhYmx5IGluIHRoZSBjb2RlLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGFuIGludGVybmFsIG9yIGV4dGVybmFsIHN5bWJvbCB3aXRoIHJlZ2FyZCB0byBpdHMgbGlua2luZyBhbmQgdmlzaWJpbGl0eS4gIEEgYHN0YXRpYyBpbnQgdWJsa19gIGRlY2xhcmF0aW9uIGxpa2VseSBtZWFucyB0aGF0IHN5bWJvbCBpcyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQgb3Igc2NvcGUuIFdpdGhvdXQgYHN0YXRpY2AsIGl0J3MgcG90ZW50aWFsbHkgdmlzaWJsZSB0byB0aGUgbGlua2VyIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGxhcmdlciBwcm9qZWN0LCB3aGljaCBpcyBhIG1ham9yIGRpZmZlcmVuY2UuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgdGhpcyBtb2R1bGUgaXMgc3VwcG9zZWQgdG8gYmUgaW50ZWdyYXRlZCBvciBpZiB0aGVyZSBhcmUgYW55IGNvbGxpc2lvbnMgbGlrZWx5LiBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIHRoaXMgc3ltYm9sIGlzIGRlY2xhcmVkIGluIG11bHRpcGxlIHBsYWNlcz8gTGV0IG1lIGNoZWNrIHRoZSBzeW1ib2wncyB1c2FnZSBhbmQgd2hlcmUgaXQgaXMgYmVpbmcgZGVmaW5lZCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHBvdGVudGlhbCBhbWJpZ3VpdHkuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MjkuMzU5NDA1MDQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDQ3Njk2NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjoyOS40MTk4OTA4NTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMDQzMTAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipFeGFtaW5pbmcgdGhlIFZvaWQqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgXnZvaWRgLiBJJ20gaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhhdCBzeW1ib2w7IGl0IHNpZ25pZmllcyBhbiBlbXB0eSBvciB1bmRlZmluZWQgc3RhdGUsIGEgbGFjayBvZiBkYXRhLCBvciBwb3RlbnRpYWxseSB0aGUgYWJzZW5jZSBvZiBzb21ldGhpbmcgZW50aXJlbHkuIE15IG1pbmQgaXMgYWxyZWFkeSByYWNpbmcgdGhyb3VnaCBkaWZmZXJlbnQgY29udGV4dHMuIElzIHRoaXMgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgcmV0dXJuIHR5cGVzLCBnZW5lcmljIHBhcmFtZXRlcnMsIG9yIHBlcmhhcHMgZXZlbiBhIHBoaWxvc29waGljYWwgY29uY2VwdCB3aXRoaW4gdGhlIHN5c3RlbSBJJ20gY3VycmVudGx5IGRlYWxpbmcgd2l0aD8gSSBuZWVkIG1vcmUgY29udGV4dCB0byBwaW4gZG93biB0aGUgZXhhY3QgbWVhbmluZywgYnV0IG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgdGhlIG51bGwgb3Igbm9uZXhpc3RlbnQgcmVwcmVzZW50YXRpb24gd2UncmUgZ3JhcHBsaW5nIHdpdGguIFdoYXQgaXMgaXQgdGhhdCdzIHVuZGVmaW5lZD8gV2hhdCdzIHRoZSBzY29wZSBoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBvdGhlciBlbGVtZW50cy4gSSBhbSBhbHNvIGF3YXJlIHRoYXQgdGhlIGludGVycHJldGF0aW9uIHdpbGwgZGVwZW5kIG9uIHRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBvciBzeXN0ZW0gYXQgaGFuZC4gSSBuZWVkIGEgYnJvYWRlciBwaWN0dXJlIHRvIGdpdmUgaXQgdGhlIHByb3BlciB3ZWlnaHQuIFRoZSBgXmAgcHJlY2VkaW5nIFwidm9pZFwiIGFkZHMgYSBsYXllciBvZiBjb21wbGV4aXR5OyBpcyB0aGlzIGFuIGFkZHJlc3MsIGEgcG9pbnRlciwgYSBuZWdhdGlvbiwgYSByZWZlcmVuY2UsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IGluIHRoZSBzeW50YXggb2YgdGhlIGNvbnRleHQgSSdtIHdvcmtpbmcgaW4/IE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBjb25jZXB0IGlzIGFwcGxpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjEyOjMzLjAyMDMyMzg4NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNzIxNzYwNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MzQuMjQ3NTQ3NzMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjY1NDA4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlJlZmluaW5nIHRoZSBTZWFyY2ggQ3JpdGVyaWEqKlxuXG5Pa2F5LCBsb29raW5nIGF0IHRoaXMgb3V0cHV0LCBJIHRoaW5rIHRoZSBgZ3JlcGAgZXhwcmVzc2lvbiBJIGluaXRpYWxseSB3cm90ZSBtaWdodCBiZSBhIGxpdHRsZSAqdG9vKiBzcGVjaWZpYy4gSXQncyBwcm9iYWJseSByZWplY3Rpbmcgc29tZSB2YWxpZCByZXN1bHRzIHRoYXQgYXJlIGp1c3Qgc3VidGx5IGRpZmZlcmVudCB0aGFuIHdoYXQgSSBhbnRpY2lwYXRlZC4gSSBuZWVkIHRvIGxvb3NlbiB0aGUgc2VhcmNoIHBhcmFtZXRlcnMgYSBiaXQuIE1heWJlIEkgc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBzb21lIGZsZXhpYmlsaXR5IHdpdGggd2lsZGNhcmRzLCBjaGFyYWN0ZXIgY2xhc3Nlcywgb3IgZXZlbiBsb29rYXJvdW5kcyB0byBjYXB0dXJlIHRoZSBudWFuY2VzIG9mIHRoZSBkYXRhLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBjYXJlZnVsbHkgY29uc2lkZXIgd2hhdCBtaWdodCBiZSB0b28gcGVybWlzc2l2ZSBhbmQgd2hhdCBtaWdodCBleGNsdWRlIHRoZSBkYXRhIEkgd2FudC4gSXTigJlzIGEgY2xhc3NpYyBiYWxhbmNpbmcgYWN0IGJldHdlZW4gcHJlY2lzaW9uIGFuZCByZWNhbGwsIGlzbuKAmXQgaXQ/IFRpbWUgdG8gaXRlcmF0ZSBvbiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDA5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MzcuNTE0MDkxMDcxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDk5NzU2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay91YmxrX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz0zMzM5PXN0YXRpYyBib29sIHVibGtfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IHVibGtfcXVldWUgKnVicSwgc3RydWN0IHVibGtfaW8gKmlvLFxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTYtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjMzNTc6c3RhdGljIGludCB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTMzNTgtXFx0XFx0dW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTM0ODk9c3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdCAqX191YmxrX2NoZWNrX2FuZF9nZXRfcmVxKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUxNi1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUxNzpzdGF0aWMgdm9pZCB1YmxrX2NoX3VyaW5nX2NtZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUxOC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyMy1cXHRpZiAoIXR3LmNhbmNlbClcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUyNDpcXHRcXHRyZXQgPSB1YmxrX2NoX3VyaW5nX2NtZF9sb2NhbChjbWQsIGlzc3VlX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUyNS1cXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTI4LVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzozNTI5OnN0YXRpYyBpbnQgdWJsa19jaF91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzAte1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1MzctXFx0aWYgKHVubGlrZWx5KGlzc3VlX2ZsYWdzIFxcdTAwMjYgSU9fVVJJTkdfRl9VTkxPQ0tFRCkpIHtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6MzUzODpcXHRcXHRpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFzayhjbWQsIHVibGtfY2hfdXJpbmdfY21kX2NiKTtcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtMzUzOS1cXHRcXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTM1NDEtXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjM1NDI6XFx0cmV0dXJuIHVibGtfY2hfdXJpbmdfY21kX2xvY2FsKGNtZCwgaXNzdWVfZmxhZ3MpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy0zNTQzLX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz00MTQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVibGtfY2hfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy00MTQ1LVxcdC53cml0ZV9pdGVyID0gdWJsa19jaF93cml0ZV9pdGVyLFxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYzo0MTQ2OlxcdC51cmluZ19jbWQgPSB1YmxrX2NoX3VyaW5nX2NtZCxcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNDE0Ny1cXHQubW1hcCA9IHVibGtfY2hfbW1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6MzcuODY0MDcwNTUyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTIxNzcxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgVWJsayBJT19VUklORyBDb21tYW5kcyoqXG5cbk9rYXksIHNvIHRoZSBmYWN0IHRoYXQgYHVibGtfY2hfdXJpbmdfY21kYCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgaXMga2V5IOKAkyB0aGF0IG1lYW5zIGl0J3Mgbm90IGdldHRpbmcgaW5saW5lZCwgd2hpY2ggb3BlbnMgaXQgdXAgdG8gZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMsIHRob3VnaC4gTGV0J3MgbG9vayBhdCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLiBJIGhhZCBhIGh1bmNoIHRoYXQgaXQgbWlnaHQgYmUgaW5saW5lZCwgYnV0IGhvbGQgb24sIGl0J3MgYWxzbyBjYWxsZWQgdGhyb3VnaCBgdWJsa19jaF91cmluZ19jbWRfY2JgLCB3aGljaCB0aGVuIGdldHMgcGFzc2VkIHRvIGBpb191cmluZ19jbWRfY29tcGxldGVfaW5fdGFza2AuIFRoYXQgY29uZmlybXMgaXQsIGB1YmxrX2NoX3VyaW5nX2NtZF9jYmAgaXNuJ3QgaW5saW5lZCBlaXRoZXIuXG5cblRoZXJlZm9yZSwgYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2NiYCBhcmUgZGVmaW5pdGUgdGFyZ2V0cyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuXG5Ob3csIGJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBvdGhlciBjb25maWcgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUsIGRvZXMgYEJMS19ERVZfVUJMS2AgcmVseSBvbiBvdGhlciBjb25maWd1cmF0aW9ucz8gSXQgc2VlbXMgbGlrZSBpdCBzZWxlY3RzIGBJT19VUklOR2AsIHdoaWNoIGlzIGV4cGVjdGVkLiBJIG5lZWQgdG8gY29uZmlybSBkZXBlbmRlbmNpZXMuIEknbSBnb2luZyB0byB0YWtlIGFub3RoZXIgbG9vayBhdCB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZSBhbmQgdmVyaWZ5IHRoZXJlIGFyZSBubyBoaWRkZW4gcmVxdWlyZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTU5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjEyOjQyLjUxNjI1MDU2OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzI4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzI4OlxcdGNvbmZpZyBCTEtfREVWX1VCTEtcXG4gMzI5OlxcdFxcdHRyaXN0YXRlIFxcXCJVc2Vyc3BhY2UgYmxvY2sgZHJpdmVyIChFeHBlcmltZW50YWwpXFxcIlxcbiAzMzA6XFx0XFx0c2VsZWN0IElPX1VSSU5HXFxuIDMzMTpcXHRcXHRoZWxwXFxuIDMzMjpcXHRcXHQgIGlvX3VyaW5nIGJhc2VkIHVzZXJzcGFjZSBibG9jayBkcml2ZXIuIFRvZ2V0aGVyIHdpdGggdWJsayBzZXJ2ZXIsIHVibGtcXG4gMzMzOlxcdFxcdCAgaGFzIGJlZW4gd29ya2luZyB3ZWxsLCBidXQgaW50ZXJmYWNlIHdpdGggdXNlcnNwYWNlIG9yIGNvbW1hbmQgZGF0YVxcbiAzMzQ6XFx0XFx0ICBkZWZpbml0aW9uIGlzbid0IGZpbmFsaXplZCB5ZXQsIGFuZCBtaWdodCBjaGFuZ2UgYWNjb3JkaW5nIHRvIGZ1dHVyZVxcbiAzMzU6XFx0XFx0ICByZXF1aXJlbWVudCwgc28gbWFyayBpcyBhcyBleHBlcmltZW50YWwgbm93LlxcbiAzMzY6XFx0XFxuIDMzNzpcXHRjb25maWcgQkxLREVWX1VCTEtfTEVHQUNZX09QQ09ERVNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTI6NDIuNTE2MzIyNTg5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4OTk4ODg5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB1YmxrIERyaXZlciBQYXRjaCBmb3IgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgc2ltcGxpY2l0eSBvZiBpdCBzdGFuZHMgb3V0LiBJdCdzIHRhcmdldGVkIGF0IHRoZSBgdWJsa2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGB1YmxrX2ZldGNoYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2xvY2FsYC4gSSBzZWUgYEJMS19ERVZfVUJMS2AgaXMgdGhlIG9ubHkgY29uZmlnIG5lZWRlZCwgd2hpY2ggc2ltcGxpZmllcyB0aGUgaW5pdGlhbCBzZXR1cC5cblxuVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIHJlb3JkZXJpbmcgb2YgY2FsbHMgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gSW4gYHVibGtfZmV0Y2hgLCBpdCdzIHN3YXBwaW5nIHRoZSBleGVjdXRpb24gb2YgYHVibGtfY29uZmlnX2lvX2J1ZmAgYW5kIGBfX3VibGtfZmV0Y2hgLiAgVGhlbiwgd2l0aCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgLCBpdCBzaGlmdHMgdGhlIHBvc2l0aW9uIG9mIGByZXEgPSB1YmxrX2ZpbGxfaW9fY21kKGlvLCBjbWQpYCAqYWZ0ZXIqIHRoZSBgdWJsa19jb25maWdfaW9fYnVmYCBjYWxsIGFuZCBpdHMgZXJyb3IgY2hlY2tpbmcuIEVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gYSBjb3JlIHBhdGggb2YgdGhlIGJsb2NrIGRyaXZlci4gVGhpcyB1c2VyLXNwYWNlIGJsb2NrIGRyaXZlciBtZWFucyBpdCBkb2Vzbid0IG5lZWQgYW55IHBoeXNpY2FsIGhhcmR3YXJlLCBzbyBpdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBtYWtlcyBpdCBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTXkgcmVhc29uaW5nPyBUaGUgcmVvcmRlcmluZyBvZiB0aGVzZSBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgYXJvdW5kIGhvdyBJL08gYnVmZmVycyBhcmUgY29uZmlndXJlZCAoYHVibGtfY29uZmlnX2lvX2J1ZmApIGFuZCBjb21tYW5kcyBhcmUgZmlsbGVkIChgdWJsa19maWxsX2lvX2NtZGApLCBjb3VsZCBleHBvc2Ugc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycywgcGFydGljdWxhcmx5IGFyb3VuZCBlcnJvciBoYW5kbGluZy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gd2hpY2ggc3ltYm9scyBhcmUgZW50cnkgcG9pbnRzIGFuZCB0aGlzIHBhdGNoIGFmZmVjdHMuIFJpZ2h0LCBJIHdpbGwgZm9jdXMgb24gYHVibGtfY2hfdXJpbmdfY21kYCBhbmQgYHVibGtfY2hfdXJpbmdfY21kX2NiYCBhcyB0aGV5IGFyZSByZWxldmFudC5cblxuU28sIEkgdGhpbmsgSSdtIHJlYWR5IHRvIG1vdmUgb24uIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY0OCwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxMjo1Mi40MTYyMTMzNzFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzYzODYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9VQkxLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgICBcInVibGtfY2hfdXJpbmdfY21kX2NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIHdpdGhpbiB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoYHVibGtgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEkvTyBidWZmZXJzIGFyZSBjb25maWd1cmVkIGFuZCBjb21tYW5kcyBhcmUgZmlsbGVkLCB3aGljaCBpcyBjb3JlIGxvZ2ljIGZvciB0aGUgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLW9ubHkgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSB1YmxrIGNoYXJhY3RlciBkZXZpY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9VQkxLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWJsa19jaF91cmluZ19jbWRcIixcbiAgICBcInVibGtfY2hfdXJpbmdfY21kX2NiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gYHVibGtfZmV0Y2hgIGFuZCBgdWJsa19jaF91cmluZ19jbWRfbG9jYWxgIHdpdGhpbiB0aGUgdXNlcnNwYWNlIGJsb2NrIGRyaXZlciAoYHVibGtgKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IEkvTyBidWZmZXJzIGFyZSBjb25maWd1cmVkIGFuZCBjb21tYW5kcyBhcmUgZmlsbGVkLCB3aGljaCBpcyBjb3JlIGxvZ2ljIGZvciB0aGUgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIHNvZnR3YXJlLW9ubHkgYW5kIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGlvX3VyaW5nIGNvbW1hbmRzIG9uIHRoZSB1YmxrIGNoYXJhY3RlciBkZXZpY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rrcq[1] Phase: Succeeded StartedAt: 2026-07-25 14:13:03 +0000 UTC FinishedAt: 2026-07-25 14:13:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 14:13:03 +0000 UTC FinishedAt: 2026-07-25 14:13:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2] Phase: Succeeded StartedAt: 2026-07-25 14:13:03 +0000 UTC FinishedAt: 2026-07-25 16:28:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-25 14:13:03 +0000 UTC FinishedAt: 2026-07-25 16:28:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 14:13:03 +0000 UTC FinishedAt: 2026-07-25 14:13:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-25 14:13:03 +0000 UTC FinishedAt: 2026-07-25 14:13:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8rrcq/series-workflow8rrcq-convert-artifact-3640364688/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 14:13:14 +0000 UTC FinishedAt: 2026-07-25 14:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-25 14:13:14 +0000 UTC FinishedAt: 2026-07-25 14:56:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*baf40609-874a-4146-a0e6-ba930f0f1461,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-workflow8rrcq/series-workflow8rrcq-convert-artifact-3640364688/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": "8f0030cc-6a1c-464f-aae8-d8f62f01af2e", "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-workflow8rrcq/series-workflow8rrcq-build-action-3483675414/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-25 14:13:14 +0000 UTC FinishedAt: 2026-07-25 14:53:50 +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:*baf40609-874a-4146-a0e6-ba930f0f1461,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-workflow8rrcq/series-workflow8rrcq-convert-artifact-3640364688/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": "8f0030cc-6a1c-464f-aae8-d8f62f01af2e", "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-workflow8rrcq/series-workflow8rrcq-build-action-3483675414/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-25 14:56:21 +0000 UTC FinishedAt: 2026-07-25 14:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-25 14:56:21 +0000 UTC FinishedAt: 2026-07-25 14:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-25 14:56:21 +0000 UTC FinishedAt: 2026-07-25 14:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-25 14:56:21 +0000 UTC FinishedAt: 2026-07-25 14:56:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8rrcq/series-workflow8rrcq-convert-artifact-3757108215/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-25 14:56:41 +0000 UTC FinishedAt: 2026-07-25 14:58:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-25 14:56:41 +0000 UTC FinishedAt: 2026-07-25 14:58:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8f0030cc-6a1c-464f-aae8-d8f62f01af2e,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-workflow8rrcq/series-workflow8rrcq-build-action-3483675414/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-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-25 14:58:31 +0000 UTC FinishedAt: 2026-07-25 14:58:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-25 14:58:31 +0000 UTC FinishedAt: 2026-07-25 14:58:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-25 14:58:31 +0000 UTC FinishedAt: 2026-07-25 15:36:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-25 14:58:31 +0000 UTC FinishedAt: 2026-07-25 15:36:10 +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:*baf40609-874a-4146-a0e6-ba930f0f1461,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-workflow8rrcq/series-workflow8rrcq-convert-artifact-3757108215/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": "77657999-13c2-447d-bc56-8875ee58782a", "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-workflow8rrcq/series-workflow8rrcq-build-action-2943991483/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-25 14:58:31 +0000 UTC FinishedAt: 2026-07-25 15:36:00 +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:*baf40609-874a-4146-a0e6-ba930f0f1461,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-workflow8rrcq/series-workflow8rrcq-convert-artifact-3757108215/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": "77657999-13c2-447d-bc56-8875ee58782a", "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-workflow8rrcq/series-workflow8rrcq-build-action-2943991483/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 15:36:10 +0000 UTC FinishedAt: 2026-07-25 15:36:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-25 15:36:10 +0000 UTC FinishedAt: 2026-07-25 15:36:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 15:36:10 +0000 UTC FinishedAt: 2026-07-25 15:37:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-25 15:36:10 +0000 UTC FinishedAt: 2026-07-25 15:37:48 +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:*77657999-13c2-447d-bc56-8875ee58782a,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-workflow8rrcq/series-workflow8rrcq-build-action-2943991483/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-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 15:37:57 +0000 UTC FinishedAt: 2026-07-25 16:28:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-25 15:37:57 +0000 UTC FinishedAt: 2026-07-25 16:28:47 +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":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"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:*8f0030cc-6a1c-464f-aae8-d8f62f01af2e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*77657999-13c2-447d-bc56-8875ee58782a,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-workflow8rrcq/series-workflow8rrcq-build-action-3483675414/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-workflow8rrcq/series-workflow8rrcq-build-action-2943991483/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-25 15:37:57 +0000 UTC FinishedAt: 2026-07-25 15:38:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-25 15:37:57 +0000 UTC FinishedAt: 2026-07-25 15:38:02 +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":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"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-workflow8rrcq/series-workflow8rrcq-convert-artifact-3242032688/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-25 15:37:57 +0000 UTC FinishedAt: 2026-07-25 15:37:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 15:37:57 +0000 UTC FinishedAt: 2026-07-25 15:37:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-25 15:37:57 +0000 UTC FinishedAt: 2026-07-25 15:37:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-25 15:38:07 +0000 UTC FinishedAt: 2026-07-25 16:28:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8rrcq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ublk_ch_uring_cmd","ublk_ch_uring_cmd_cb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"248951ddc14de84de3910f9b13f51491a8cd91df","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_UBLK"],"series_id":"ed738d28-113e-4159-8048-d1a7dd851c57","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-25 15:38:07 +0000 UTC FinishedAt: 2026-07-25 16:28:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8f0030cc-6a1c-464f-aae8-d8f62f01af2e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*77657999-13c2-447d-bc56-8875ee58782a,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-workflow8rrcq/series-workflow8rrcq-build-action-3483675414/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-workflow8rrcq/series-workflow8rrcq-build-action-2943991483/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-workflow8rrcq/series-workflow8rrcq-convert-artifact-3242032688/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,}